Factor out valid_column_definition_options

Shopify is implementing a custom ActiveRecord adapter to integrate
with [Vitess](https://vitess.io/), and we would like to overload the
`valid_{column,table}_definition_options` methods and add
additional valid options for schema migrations.

For example:

```ruby
module ActiveRecord
  module ConnectionAdapters
    class VitessMysql2Adapter < Mysql2Adapter
      ...

      def valid_table_definition_options
        super + [:skip_vschema_migrations, :sharding_keys, :auto_increment]
      end

      def valid_column_definition_options
        super + [:skip_vschema_migrations, :sharding_keys, :auto_increment]
      end
    end
  end
end
```

This is the simplest possible change and factors out the various `valid_{table,column,primary_key}_definition_options` to be a public
method on an adapter instance.
This commit is contained in:
Hormoz Kheradmand 2023-03-08 13:40:20 -08:00
parent 65ae7d1755
commit cdb895774d
No known key found for this signature in database
GPG Key ID: 6E02EB8BB1818EE8
2 changed files with 13 additions and 9 deletions

@ -586,7 +586,7 @@ def new_check_constraint_definition(expression, options) # :nodoc:
private
def valid_column_definition_options
ColumnDefinition::OPTION_NAMES
@conn.valid_column_definition_options
end
def create_column_definition(name, type, options)

@ -1497,6 +1497,18 @@ def bulk_change_table(table_name, operations) # :nodoc:
non_combinable_operations.each(&:call)
end
def valid_table_definition_options
[:temporary, :if_not_exists, :options, :as, :comment, :charset, :collation]
end
def valid_column_definition_options
ColumnDefinition::OPTION_NAMES
end
def valid_primary_key_options
[:limit, :default, :precision]
end
private
def validate_change_column_null_argument!(value)
unless value == true || value == false
@ -1595,14 +1607,6 @@ def create_alter_table(name)
AlterTable.new create_table_definition(name)
end
def valid_table_definition_options
[:temporary, :if_not_exists, :options, :as, :comment, :charset, :collation]
end
def valid_primary_key_options
[:limit, :default, :precision]
end
def validate_create_table_options!(options)
unless options[:_skip_validate_options]
options