aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters/abstract
diff options
context:
space:
mode:
authorYves Senn <yves.senn@gmail.com>2015-09-22 15:58:18 +0200
committerYves Senn <yves.senn@gmail.com>2015-09-22 19:48:44 +0200
commit152b85f06c7f91b39de0e5da6426feb35a698d05 (patch)
tree323b1b7cdd5b81b406ac59542668acd7ca81cf46 /activerecord/lib/active_record/connection_adapters/abstract
parent1165e9c898a17fadf8f91986ba2f25fb47651d53 (diff)
downloadrails-152b85f06c7f91b39de0e5da6426feb35a698d05.tar.gz
rails-152b85f06c7f91b39de0e5da6426feb35a698d05.tar.bz2
rails-152b85f06c7f91b39de0e5da6426feb35a698d05.zip
introduce `conn.data_source_exists?` and `conn.data_sources`.
These new methods are used from the Active Record model layer to determine which relations are viable to back a model. These new methods allow us to change `conn.tables` in the future to only return tables and no views. Same for `conn.table_exists?`. The goal is to provide the following introspection methods on the connection: * `tables` * `table_exists?` * `views` * `view_exists?` * `data_sources` (views + tables) * `data_source_exists?` (views + tables)
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/abstract')
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb14
1 files changed, 14 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb b/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb
index 40175c8c8c..285b4065b1 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb
@@ -23,6 +23,20 @@ module ActiveRecord
table_name[0...table_alias_length].tr('.', '_')
end
+ # Returns the relation names useable to back Active Record models.
+ # For most adapters this means all #tables and #views.
+ def data_sources
+ tables | views
+ end
+
+ # Checks to see if the data source +name+ exists on the database.
+ #
+ # data_source_exists?(:ebooks)
+ #
+ def data_source_exists?(name)
+ data_sources.include?(name.to_s)
+ end
+
# Returns an array of table names defined in the database.
def tables(name = nil)
raise NotImplementedError, "#tables is not implemented"