Skip to content

Commit

Permalink
Factor out valid_column_definition_options
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
hkdsun committed Mar 8, 2023
1 parent 65ae7d1 commit cdb8957
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 9 deletions.
Expand Up @@ -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)
Expand Down
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit cdb8957

Please sign in to comment.