diff options
author | Yves Senn <yves.senn@gmail.com> | 2015-09-22 15:58:18 +0200 |
---|---|---|
committer | Yves Senn <yves.senn@gmail.com> | 2015-09-22 19:48:44 +0200 |
commit | 152b85f06c7f91b39de0e5da6426feb35a698d05 (patch) | |
tree | 323b1b7cdd5b81b406ac59542668acd7ca81cf46 /activerecord/lib/active_record/connection_adapters/abstract | |
parent | 1165e9c898a17fadf8f91986ba2f25fb47651d53 (diff) | |
download | rails-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.rb | 14 |
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" |