Module: Sequel::MySQL::DatabaseMethods
- Included in:
- DataObjects::MySQL::DatabaseMethods, JDBC::MySQL::DatabaseMethods, Database, Sequel::Mysql2::Database, Swift::MySQL::DatabaseMethods
- Defined in:
- lib/sequel/adapters/shared/mysql.rb
Overview
Methods shared by Database instances that connect to MySQL, currently supported by the native and JDBC adapters.
Constant Summary collapse
- AUTO_INCREMENT =
'AUTO_INCREMENT'.freeze
- CAST_TYPES =
{String=>:CHAR, Integer=>:SIGNED, Time=>:DATETIME, DateTime=>:DATETIME, Numeric=>:DECIMAL, BigDecimal=>:DECIMAL, File=>:BINARY}
- COLUMN_DEFINITION_ORDER =
[:null, :default, :unique, :primary_key, :auto_increment, :references]
- PRIMARY =
'PRIMARY'.freeze
Instance Method Summary collapse
-
#cast_type_literal(type) ⇒ Object
MySQL’s cast rules are restrictive in that you can’t just cast to any possible database type.
-
#commit_prepared_transaction(transaction_id) ⇒ Object
Commit an existing prepared transaction with the given transaction identifier string.
-
#database_type ⇒ Object
MySQL uses the :mysql database type.
-
#indexes(table, opts = {}) ⇒ Object
Use SHOW INDEX FROM to get the index information for the table.
-
#rollback_prepared_transaction(transaction_id) ⇒ Object
Rollback an existing prepared transaction with the given transaction identifier string.
-
#server_version ⇒ Object
Get version of MySQL server, used for determined capabilities.
-
#supports_create_table_if_not_exists? ⇒ Boolean
MySQL supports CREATE TABLE IF NOT EXISTS syntax.
-
#supports_prepared_transactions? ⇒ Boolean
MySQL supports prepared transactions (two-phase commit) using XA.
-
#supports_savepoints? ⇒ Boolean
MySQL supports savepoints.
-
#supports_transaction_isolation_levels? ⇒ Boolean
MySQL supports transaction isolation levels.
-
#tables(opts = {}) ⇒ Object
Return an array of symbols specifying table names in the current database.
-
#use(db_name) ⇒ Object
Changes the database in use by issuing a USE statement.
-
#views(opts = {}) ⇒ Object
Return an array of symbols specifying view names in the current database.
Instance Method Details
#cast_type_literal(type) ⇒ Object
MySQL’s cast rules are restrictive in that you can’t just cast to any possible database type.
39 40 41 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 39 def cast_type_literal(type) CAST_TYPES[type] || super end |
#commit_prepared_transaction(transaction_id) ⇒ Object
Commit an existing prepared transaction with the given transaction identifier string.
45 46 47 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 45 def commit_prepared_transaction(transaction_id) run("XA COMMIT #{literal(transaction_id)}") end |
#database_type ⇒ Object
MySQL uses the :mysql database type
50 51 52 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 50 def database_type :mysql end |
#indexes(table, opts = {}) ⇒ Object
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.
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 59 def indexes(table, opts={}) indexes = {} remove_indexes = [] m = output_identifier_meth im = input_identifier_meth .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_prepared_transaction(transaction_id) ⇒ Object
Rollback an existing prepared transaction with the given transaction identifier string.
77 78 79 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 77 def rollback_prepared_transaction(transaction_id) run("XA ROLLBACK #{literal(transaction_id)}") end |
#server_version ⇒ Object
Get version of MySQL server, used for determined capabilities.
82 83 84 85 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 82 def server_version m = /(\d+)\.(\d+)\.(\d+)/.match(get(SQL::Function.new(:version))) @server_version ||= (m[1].to_i * 10000) + (m[2].to_i * 100) + m[3].to_i end |
#supports_create_table_if_not_exists? ⇒ Boolean
MySQL supports CREATE TABLE IF NOT EXISTS syntax.
88 89 90 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 88 def supports_create_table_if_not_exists? true end |
#supports_prepared_transactions? ⇒ Boolean
MySQL supports prepared transactions (two-phase commit) using XA
93 94 95 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 93 def supports_prepared_transactions? true end |
#supports_savepoints? ⇒ Boolean
MySQL supports savepoints
98 99 100 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 98 def supports_savepoints? true end |
#supports_transaction_isolation_levels? ⇒ Boolean
MySQL supports transaction isolation levels
103 104 105 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 103 def supports_transaction_isolation_levels? true end |
#tables(opts = {}) ⇒ Object
Return an array of symbols specifying table names in the current database.
Options:
-
:server - Set the server to use
111 112 113 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 111 def tables(opts={}) full_tables('BASE TABLE', opts) end |
#use(db_name) ⇒ Object
Changes the database in use by issuing a USE statement. I would be very careful if I used this.
117 118 119 120 121 122 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 117 def use(db_name) disconnect @opts[:database] = db_name if self << "USE #{db_name}" @schemas = {} self end |
#views(opts = {}) ⇒ Object
Return an array of symbols specifying view names in the current database.
Options:
-
:server - Set the server to use
128 129 130 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 128 def views(opts={}) full_tables('VIEW', opts) end |