lib/sequel/adapters/shared/mysql.rb in sequel-4.25.0 vs lib/sequel/adapters/shared/mysql.rb in sequel-4.26.0
- old
+ new
@@ -183,60 +183,64 @@
full_tables('VIEW', opts)
end
private
- # Use MySQL specific syntax for some alter table operations.
- def alter_table_op_sql(table, op)
- case op[:op]
- when :add_column
- if related = op.delete(:table)
- sql = super
- op[:table] = related
- op[:key] ||= primary_key_from_schema(related)
- sql << ", ADD "
- if constraint_name = op.delete(:foreign_key_constraint_name)
- sql << "CONSTRAINT #{quote_identifier(constraint_name)} "
- end
- sql << "FOREIGN KEY (#{quote_identifier(op[:name])})#{column_references_sql(op)}"
- else
- super
+ def alter_table_add_column_sql(table, op)
+ if related = op.delete(:table)
+ sql = super
+ op[:table] = related
+ op[:key] ||= primary_key_from_schema(related)
+ sql << ", ADD "
+ if constraint_name = op.delete(:foreign_key_constraint_name)
+ sql << "CONSTRAINT #{quote_identifier(constraint_name)} "
end
- when :rename_column, :set_column_type, :set_column_null, :set_column_default
- o = op[:op]
- opts = schema(table).find{|x| x.first == op[:name]}
- opts = opts ? opts.last.dup : {}
- opts[:name] = o == :rename_column ? op[:new_name] : op[:name]
- opts[:type] = o == :set_column_type ? op[:type] : opts[:db_type]
- opts[:null] = o == :set_column_null ? op[:null] : opts[:allow_null]
- opts[:default] = o == :set_column_default ? op[:default] : opts[:ruby_default]
- opts.delete(:default) if opts[:default] == nil
- opts.delete(:primary_key)
- unless op[:type] || opts[:type]
- raise Error, "cannot determine database type to use for CHANGE COLUMN operation"
- end
- opts = op.merge(opts)
- if op.has_key?(:auto_increment)
- opts[:auto_increment] = op[:auto_increment]
- end
- "CHANGE COLUMN #{quote_identifier(op[:name])} #{column_definition_sql(opts)}"
- when :drop_constraint
- case op[:type]
- when :primary_key
- "DROP PRIMARY KEY"
- when :foreign_key
- name = op[:name] || foreign_key_name(table, op[:columns])
- "DROP FOREIGN KEY #{quote_identifier(name)}"
- when :unique
- "DROP INDEX #{quote_identifier(op[:name])}"
- end
- when :add_constraint
- if op[:type] == :foreign_key
- op[:key] ||= primary_key_from_schema(op[:table])
- end
- super
+ sql << "FOREIGN KEY (#{quote_identifier(op[:name])})#{column_references_sql(op)}"
else
super
+ end
+ end
+
+ def alter_table_change_column_sql(table, op)
+ o = op[:op]
+ opts = schema(table).find{|x| x.first == op[:name]}
+ opts = opts ? opts.last.dup : {}
+ opts[:name] = o == :rename_column ? op[:new_name] : op[:name]
+ opts[:type] = o == :set_column_type ? op[:type] : opts[:db_type]
+ opts[:null] = o == :set_column_null ? op[:null] : opts[:allow_null]
+ opts[:default] = o == :set_column_default ? op[:default] : opts[:ruby_default]
+ opts.delete(:default) if opts[:default] == nil
+ opts.delete(:primary_key)
+ unless op[:type] || opts[:type]
+ raise Error, "cannot determine database type to use for CHANGE COLUMN operation"
+ end
+ opts = op.merge(opts)
+ if op.has_key?(:auto_increment)
+ opts[:auto_increment] = op[:auto_increment]
+ end
+ "CHANGE COLUMN #{quote_identifier(op[:name])} #{column_definition_sql(opts)}"
+ end
+ alias alter_table_rename_column_sql alter_table_change_column_sql
+ alias alter_table_set_column_type_sql alter_table_change_column_sql
+ alias alter_table_set_column_null_sql alter_table_change_column_sql
+ alias alter_table_set_column_default_sql alter_table_change_column_sql
+
+ def alter_table_add_constraint_sql(table, op)
+ if op[:type] == :foreign_key
+ op[:key] ||= primary_key_from_schema(op[:table])
+ end
+ super
+ end
+
+ def alter_table_drop_constraint_sql(table, op)
+ case op[:type]
+ when :primary_key
+ "DROP PRIMARY KEY"
+ when :foreign_key
+ name = op[:name] || foreign_key_name(table, op[:columns])
+ "DROP FOREIGN KEY #{quote_identifier(name)}"
+ when :unique
+ "DROP INDEX #{quote_identifier(op[:name])}"
end
end
# MySQL server requires table names when dropping indexes.
def alter_table_sql(table, op)