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)