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