Methods shared by Database instances that connect to MySQL, currently supported by the native and JDBC adapters.
MySQL's cast rules are restrictive in that you can't just cast to any possible database type.
# File lib/sequel/adapters/shared/mysql.rb, line 44 def cast_type_literal(type) CAST_TYPES[type] || super end
Commit an existing prepared transaction with the given transaction identifier string.
# File lib/sequel/adapters/shared/mysql.rb, line 50 def commit_prepared_transaction(transaction_id) run("XA COMMIT #{literal(transaction_id)}") end
MySQL uses the :mysql database type
# File lib/sequel/adapters/shared/mysql.rb, line 55 def database_type :mysql end
Use the Information Schema's KEY_COLUMN_USAGE table to get basic information on foreign key columns, but include the constraint name.
# File lib/sequel/adapters/shared/mysql.rb, line 62 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), :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 = {} ds.each do |row| if r = h[row[:name]] r[:columns] << m.call(row[:column]) r[:key] << m.call(row[:key]) else h[row[:name]] = {:name=>m.call(row[:name]), :columns=>[m.call(row[:column])], :table=>m.call(row[:table]), :key=>[m.call(row[:key])]} end end h.values end
MySQL namespaces indexes per table.
# File lib/sequel/adapters/shared/mysql.rb, line 85 def global_index_namespace? false end
Use SHOW INDEX FROM to get the index information for the table.
By default partial indexes are not included, you can use the option :partial to override this.
# File lib/sequel/adapters/shared/mysql.rb, line 94 def indexes(table, opts={}) indexes = {} remove_indexes = [] m = output_identifier_meth im = input_identifier_meth metadata_dataset.with_sql("SHOW INDEX FROM ?", SQL::Identifier.new(im.call(table))).each do |r| name = r[:Key_name] next if name == PRIMARY name = m.call(name) remove_indexes << name if r[:Sub_part] && ! opts[:partial] i = indexes[name] ||= {:columns=>[], :unique=>r[:Non_unique] != 1} i[:columns] << m.call(r[:Column_name]) end indexes.reject{|k,v| remove_indexes.include?(k)} end
Rollback an existing prepared transaction with the given transaction identifier string.
# File lib/sequel/adapters/shared/mysql.rb, line 112 def rollback_prepared_transaction(transaction_id) run("XA ROLLBACK #{literal(transaction_id)}") end
Get version of MySQL server, used for determined capabilities.
# File lib/sequel/adapters/shared/mysql.rb, line 117 def server_version @server_version ||= begin m = /(\d+)\.(\d+)\.(\d+)/.match(get(SQL::Function.new(:version))) (m[1].to_i * 10000) + (m[2].to_i * 100) + m[3].to_i end end
MySQL supports CREATE TABLE IF NOT EXISTS syntax.
# File lib/sequel/adapters/shared/mysql.rb, line 125 def supports_create_table_if_not_exists? true end
MySQL supports prepared transactions (two-phase commit) using XA
# File lib/sequel/adapters/shared/mysql.rb, line 130 def supports_prepared_transactions? server_version >= 50000 end
MySQL supports savepoints
# File lib/sequel/adapters/shared/mysql.rb, line 135 def supports_savepoints? server_version >= 50000 end
MySQL doesn't support savepoints inside prepared transactions in from 5.5.12 to 5.5.23, see bugs.mysql.com/bug.php?id=64374
# File lib/sequel/adapters/shared/mysql.rb, line 141 def supports_savepoints_in_prepared_transactions? super && (server_version <= 50512 || server_version >= 50523) end
MySQL supports transaction isolation levels
# File lib/sequel/adapters/shared/mysql.rb, line 146 def supports_transaction_isolation_levels? true end
Return an array of symbols specifying table names in the current database.
Options:
:server - Set the server to use
# File lib/sequel/adapters/shared/mysql.rb, line 154 def tables(opts={}) full_tables('BASE TABLE', opts) end
Generated with the Darkfish Rdoc Generator 2.