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_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.
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.
38 39 40 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 38 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.
44 45 46 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 44 def commit_prepared_transaction(transaction_id) run("XA COMMIT #{literal(transaction_id)}") end |
#database_type ⇒ Object
MySQL uses the :mysql database type
49 50 51 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 49 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.
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 58 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.
76 77 78 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 76 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.
81 82 83 84 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 81 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_prepared_transactions? ⇒ Boolean
MySQL supports prepared transactions (two-phase commit) using XA
96 97 98 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 96 def supports_prepared_transactions? true end |
#supports_savepoints? ⇒ Boolean
MySQL supports savepoints
101 102 103 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 101 def supports_savepoints? true end |
#supports_transaction_isolation_levels? ⇒ Boolean
MySQL supports transaction isolation levels
106 107 108 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 106 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
90 91 92 93 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 90 def tables(opts={}) m = output_identifier_meth .with_sql('SHOW TABLES').server(opts[:server]).map{|r| m.call(r.values.first)} end |
#use(db_name) ⇒ Object
Changes the database in use by issuing a USE statement. I would be very careful if I used this.
112 113 114 115 116 117 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 112 def use(db_name) disconnect @opts[:database] = db_name if self << "USE #{db_name}" @schemas = {} self end |