lib/sequel/adapters/shared/mysql.rb in sequel-3.44.0 vs lib/sequel/adapters/shared/mysql.rb in sequel-3.45.0

- old
+ new

@@ -62,11 +62,11 @@ def foreign_key_list(table, opts={}) m = output_identifier_meth im = input_identifier_meth ds = metadata_dataset. from(:INFORMATION_SCHEMA__KEY_COLUMN_USAGE). - where(:TABLE_NAME=>im.call(table)). + where(:TABLE_NAME=>im.call(table), :TABLE_SCHEMA=>Sequel.function(:DATABASE)). exclude(:CONSTRAINT_NAME=>'PRIMARY'). exclude(:REFERENCED_TABLE_NAME=>nil). select(:CONSTRAINT_NAME___name, :COLUMN_NAME___column, :REFERENCED_TABLE_NAME___table, :REFERENCED_COLUMN_NAME___key) h = {} @@ -194,10 +194,13 @@ 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 "CHANGE COLUMN #{quote_identifier(op[:name])} #{column_definition_sql(op.merge(opts))}" when :drop_constraint type = case op[:type] when :primary_key "DROP PRIMARY KEY" @@ -352,10 +355,11 @@ DATABASE_ERROR_REGEXPS = { /Duplicate entry .+ for key/ => UniqueConstraintViolation, /foreign key constraint fails/ => ForeignKeyConstraintViolation, /cannot be null/ => NotNullConstraintViolation, + /Deadlock found when trying to get lock; try restarting transaction/ => SerializationFailure, }.freeze def database_error_regexps DATABASE_ERROR_REGEXPS end @@ -503,10 +507,12 @@ FROM = Dataset::FROM INSERT = Dataset::INSERT COMMA = Dataset::COMMA LIMIT = Dataset::LIMIT GROUP_BY = Dataset::GROUP_BY + ESCAPE = Dataset::ESCAPE + BACKSLASH = Dataset::BACKSLASH REGEXP = 'REGEXP'.freeze LIKE = 'LIKE'.freeze BINARY = 'BINARY '.freeze CONCAT = "CONCAT".freeze CAST_BITCOMP_OPEN = "CAST(~".freeze @@ -549,9 +555,13 @@ sql << 'NOT ' if [:'NOT LIKE', :'NOT ILIKE', :'!~', :'!~*'].include?(op) sql << ([:~, :'!~', :'~*', :'!~*'].include?(op) ? REGEXP : LIKE) sql << SPACE sql << BINARY if [:~, :'!~', :LIKE, :'NOT LIKE'].include?(op) literal_append(sql, args.at(1)) + if [:LIKE, :'NOT LIKE', :ILIKE, :'NOT ILIKE'].include?(op) + sql << ESCAPE + literal_append(sql, BACKSLASH) + end sql << PAREN_CLOSE when :'||' if args.length > 1 sql << CONCAT array_sql_append(sql, args)