diff options
author | Justin George <justin.george@gmail.com> | 2013-02-06 15:58:51 -0800 |
---|---|---|
committer | Justin George <justin.george@gmail.com> | 2013-02-06 16:01:25 -0800 |
commit | fba496f2c0ae583075795ff0200eeaec182e02de (patch) | |
tree | 64232662bde99900457fd59abcf2a83cac38cdad /activerecord/lib | |
parent | e2fdfa9c07e1ec643dc4658a1a12075d9cc26c79 (diff) | |
download | rails-fba496f2c0ae583075795ff0200eeaec182e02de.tar.gz rails-fba496f2c0ae583075795ff0200eeaec182e02de.tar.bz2 rails-fba496f2c0ae583075795ff0200eeaec182e02de.zip |
add ActiveRecord::AbstractAdapter#extensions and ActiveRecord::ConnectionAdapters::PostgreSQLAdapter#extensions to allow dumping of enabled extensions to schema.rb, add ActiveRecord::SchemaDumper#extensions to dump extensions to schema.rb
Diffstat (limited to 'activerecord/lib')
3 files changed, 27 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb index b2ad4e600d..310d25767b 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb @@ -177,6 +177,12 @@ module ActiveRecord false end + # A list of extensions, to be filled in by databases that + # support them (at the moment, postgresql) + def extensions + [] + end + # QUOTING ================================================== # Returns a bind substitution value given a +column+ and list of current diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb index 5ce2f1b04c..84e48970ca 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -605,6 +605,15 @@ module ActiveRecord end end + def extensions + if supports_extensions? + res = exec_query "SELECT extname from pg_extension", "SCHEMA" + res.rows.map { |r| res.column_types['extname'].type_cast r.first } + else + [] + end + end + # Returns the configured supported identifier length supported by PostgreSQL def table_alias_length @table_alias_length ||= query('SHOW max_identifier_length', 'SCHEMA')[0][0].to_i diff --git a/activerecord/lib/active_record/schema_dumper.rb b/activerecord/lib/active_record/schema_dumper.rb index 36bde44e7c..f90aaa916d 100644 --- a/activerecord/lib/active_record/schema_dumper.rb +++ b/activerecord/lib/active_record/schema_dumper.rb @@ -24,6 +24,7 @@ module ActiveRecord def dump(stream) header(stream) + extensions(stream) tables(stream) trailer(stream) stream @@ -66,6 +67,17 @@ HEADER stream.puts "end" end + def extensions(stream) + return unless @connection.supports_extensions? + extensions = @connection.extensions + stream.puts <<EXTENSIONS +# These are extensions that must be enabled in order to support this database +EXTENSIONS + extensions.each do |extension| + stream.puts " enable_extension #{extension.inspect}" + end + end + def tables(stream) @connection.tables.sort.each do |tbl| next if ['schema_migrations', ignore_tables].flatten.any? do |ignored| |