X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/f6695c9079f4eeeecaa796c879868f797f97cd55..2168ad210840bf3d0df0b80dfceae92a26e6c970:/lib/migrate.rb?ds=sidebyside diff --git a/lib/migrate.rb b/lib/migrate.rb index 21c1b2cf2..d87d14bbb 100644 --- a/lib/migrate.rb +++ b/lib/migrate.rb @@ -1,50 +1,57 @@ -module ActiveRecord - module ConnectionAdapters - module SchemaStatements - def add_index_options_with_columns(table_name, column_name, options = {}) +module OpenStreetMap + module ActiveRecord + module AbstractAdapter + def add_index_options(table_name, column_name, options = {}) columns = options.delete(:columns) - index_name, index_type, index_columns, index_options, algorithm, using = add_index_options_without_columns(table_name, column_name, options) + index_name, index_type, index_columns, index_options, algorithm, using = super(table_name, column_name, options) [index_name, index_type, columns || index_columns, index_options, algorithm, using] end - - alias_method_chain :add_index_options, :columns end - module PostgreSQL - module Quoting - def quote_column_name_with_arrays(name) - Array(name).map { |n| quote_column_name_without_arrays(n) }.join(", ") - end + module PostgreSQLAdapter + def quote_column_name(name) + Array(name).map { |n| super(n) }.join(", ") + end + + def add_primary_key(table_name, column_name, _options = {}) + table_name = quote_table_name(table_name) + column_name = quote_column_name(column_name) + + execute "ALTER TABLE #{table_name} ADD PRIMARY KEY (#{column_name})" + end + + def remove_primary_key(table_name) + table_name = quote_table_name(table_name) - alias_method_chain :quote_column_name, :arrays + execute "ALTER TABLE #{table_name} DROP PRIMARY KEY" end - module SchemaStatements - def add_primary_key(table_name, column_name, _options = {}) - execute "ALTER TABLE #{quote_table_name(table_name)} ADD PRIMARY KEY (#{quote_column_name(column_name)})" - end + def alter_primary_key(table_name, new_columns) + constraint_name = quote_table_name("#{table_name}_pkey") + table_name = quote_table_name(table_name) + new_columns = quote_column_name(new_columns) - def remove_primary_key(table_name) - execute "ALTER TABLE #{quote_table_name(table_name)} DROP PRIMARY KEY" - end + execute "ALTER TABLE #{table_name} DROP CONSTRAINT #{constraint_name}" + execute "ALTER TABLE #{table_name} ADD PRIMARY KEY (#{new_columns})" + end - def alter_primary_key(table_name, new_columns) - execute "ALTER TABLE #{quote_table_name(table_name)} DROP CONSTRAINT #{quote_table_name(table_name + '_pkey')}" - execute "ALTER TABLE #{quote_table_name(table_name)} ADD PRIMARY KEY (#{quote_column_name(new_columns)})" - end + def create_enumeration(enumeration_name, values) + execute "CREATE TYPE #{enumeration_name} AS ENUM ('#{values.join '\',\''}')" + end - def create_enumeration(enumeration_name, values) - execute "CREATE TYPE #{enumeration_name} AS ENUM ('#{values.join '\',\''}')" - end + def drop_enumeration(enumeration_name) + execute "DROP TYPE #{enumeration_name}" + end - def drop_enumeration(enumeration_name) - execute "DROP TYPE #{enumeration_name}" - end + def rename_enumeration(old_name, new_name) + old_name = quote_table_name(old_name) + new_name = quote_table_name(new_name) - def rename_enumeration(old_name, new_name) - execute "ALTER TYPE #{quote_table_name(old_name)} RENAME TO #{quote_table_name(new_name)}" - end + execute "ALTER TYPE #{old_name} RENAME TO #{new_name}" end end end end + +ActiveRecord::ConnectionAdapters::AbstractAdapter.prepend(OpenStreetMap::ActiveRecord::AbstractAdapter) +ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.prepend(OpenStreetMap::ActiveRecord::PostgreSQLAdapter)