class ODBCAdapter::Adapters::MySQLODBCAdapter

Overrides specific to MySQL. Mostly taken from ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter

Constants

PRIMARY_KEY

Public Instance Methods

arel_visitor() click to toggle source
# File lib/odbc_adapter/adapters/mysql_odbc_adapter.rb, line 12
def arel_visitor
  BindSubstitution.new(self)
end
change_column(table_name, column_name, type, options = {}) click to toggle source
# File lib/odbc_adapter/adapters/mysql_odbc_adapter.rb, line 96
def change_column(table_name, column_name, type, options = {})
  unless options_include_default?(options)
    options[:default] = column_for(table_name, column_name).default
  end

  change_column_sql = "ALTER TABLE #{table_name} CHANGE #{column_name} #{column_name} #{type_to_sql(type, options[:limit], options[:precision], options[:scale])}"
  add_column_options!(change_column_sql, options)
  execute(change_column_sql)
end
change_column_default(table_name, column_name, default_or_changes) click to toggle source
# File lib/odbc_adapter/adapters/mysql_odbc_adapter.rb, line 106
def change_column_default(table_name, column_name, default_or_changes)
  default = extract_new_default_value(default_or_changes)
  column = column_for(table_name, column_name)
  change_column(table_name, column_name, column.sql_type, default: default)
end
change_column_null(table_name, column_name, null, default = nil) click to toggle source
# File lib/odbc_adapter/adapters/mysql_odbc_adapter.rb, line 112
def change_column_null(table_name, column_name, null, default = nil)
  column = column_for(table_name, column_name)

  unless null || default.nil?
    execute("UPDATE #{quote_table_name(table_name)} SET #{quote_column_name(column_name)}=#{quote(default)} WHERE #{quote_column_name(column_name)} IS NULL")
  end
  change_column(table_name, column_name, column.sql_type, null: null)
end
create_database(name, options = {}) click to toggle source

Create a new MySQL database with optional :charset and :collation. Charset defaults to utf8.

Example:

create_database 'charset_test', charset: 'latin1',
                                collation: 'latin1_bin'
create_database 'rails_development'
create_database 'rails_development', charset: :big5
# File lib/odbc_adapter/adapters/mysql_odbc_adapter.rb, line 71
def create_database(name, options = {})
  if options[:collation]
    execute("CREATE DATABASE `#{name}` DEFAULT CHARACTER SET `#{options[:charset] || 'utf8'}` COLLATE `#{options[:collation]}`")
  else
    execute("CREATE DATABASE `#{name}` DEFAULT CHARACTER SET `#{options[:charset] || 'utf8'}`")
  end
end
create_table(name, options = {}) click to toggle source
Calls superclass method
# File lib/odbc_adapter/adapters/mysql_odbc_adapter.rb, line 87
def create_table(name, options = {})
  super(name, { options: 'ENGINE=InnoDB' }.merge(options))
end
disable_referential_integrity() { || ... } click to toggle source
# File lib/odbc_adapter/adapters/mysql_odbc_adapter.rb, line 52
def disable_referential_integrity(&_block)
  old = select_value('SELECT @@FOREIGN_KEY_CHECKS')

  begin
    update('SET FOREIGN_KEY_CHECKS = 0')
    yield
  ensure
    update("SET FOREIGN_KEY_CHECKS = #{old}")
  end
end
drop_database(name) click to toggle source

Drops a MySQL database.

Example:

drop_database('rails_development')
# File lib/odbc_adapter/adapters/mysql_odbc_adapter.rb, line 83
def drop_database(name)
  execute("DROP DATABASE IF EXISTS `#{name}`")
end
indexes(table_name, name = nil) click to toggle source

Skip primary key indexes

Calls superclass method ODBCAdapter::SchemaStatements#indexes
# File lib/odbc_adapter/adapters/mysql_odbc_adapter.rb, line 129
def indexes(table_name, name = nil)
  super(table_name, name).reject { |i| i.unique && i.name =~ /^PRIMARY$/ }
end
options_include_default?(options) click to toggle source

MySQL 5.x doesn't allow DEFAULT NULL for first timestamp column in a table

Calls superclass method
# File lib/odbc_adapter/adapters/mysql_odbc_adapter.rb, line 135
def options_include_default?(options)
  if options.include?(:default) && options[:default].nil?
    if options.include?(:column) && options[:column].native_type =~ /timestamp/i
      options.delete(:default)
    end
  end
  super(options)
end
prepared_statements() click to toggle source

Explicitly turning off prepared statements in the MySQL adapter because of a weird bug with SQLDescribeParam returning a string type for LIMIT parameters. This is blocking them from running with an error:

You have an error in your SQL syntax; ...
... right syntax to use near ''1'' at line 1: ...
# File lib/odbc_adapter/adapters/mysql_odbc_adapter.rb, line 22
def prepared_statements
  false
end
quote_string(string) click to toggle source

Quotes a string, escaping any ' (single quote) and \ (backslash) characters.

# File lib/odbc_adapter/adapters/mysql_odbc_adapter.rb, line 32
def quote_string(string)
  string.gsub(/\\/, '\&\&').gsub(/'/, "''")
end
quoted_false() click to toggle source
# File lib/odbc_adapter/adapters/mysql_odbc_adapter.rb, line 44
def quoted_false
  '0'
end
quoted_true() click to toggle source
# File lib/odbc_adapter/adapters/mysql_odbc_adapter.rb, line 36
def quoted_true
  '1'
end
rename_column(table_name, column_name, new_column_name) click to toggle source
# File lib/odbc_adapter/adapters/mysql_odbc_adapter.rb, line 121
def rename_column(table_name, column_name, new_column_name)
  column = column_for(table_name, column_name)
  current_type = column.native_type
  current_type << "(#{column.limit})" if column.limit
  execute("ALTER TABLE #{table_name} CHANGE #{column_name} #{new_column_name} #{current_type}")
end
rename_table(name, new_name) click to toggle source

Renames a table.

# File lib/odbc_adapter/adapters/mysql_odbc_adapter.rb, line 92
def rename_table(name, new_name)
  execute("RENAME TABLE #{quote_table_name(name)} TO #{quote_table_name(new_name)}")
end
truncate(table_name, name = nil) click to toggle source
# File lib/odbc_adapter/adapters/mysql_odbc_adapter.rb, line 26
def truncate(table_name, name = nil)
  execute("TRUNCATE TABLE #{quote_table_name(table_name)}", name)
end
unquoted_false() click to toggle source
# File lib/odbc_adapter/adapters/mysql_odbc_adapter.rb, line 48
def unquoted_false
  0
end
unquoted_true() click to toggle source
# File lib/odbc_adapter/adapters/mysql_odbc_adapter.rb, line 40
def unquoted_true
  1
end

Protected Instance Methods

insert_sql(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil) click to toggle source
Calls superclass method
# File lib/odbc_adapter/adapters/mysql_odbc_adapter.rb, line 146
def insert_sql(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil)
  super
  id_value || last_inserted_id(nil)
end
last_inserted_id(_result) click to toggle source
# File lib/odbc_adapter/adapters/mysql_odbc_adapter.rb, line 151
def last_inserted_id(_result)
  select_value('SELECT LAST_INSERT_ID()').to_i
end