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}
- 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.
37 38 39 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 37 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.
43 44 45 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 43 def commit_prepared_transaction(transaction_id) run("XA COMMIT #{literal(transaction_id)}") end |
#database_type ⇒ Object
MySQL uses the :mysql database type
48 49 50 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 48 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.
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 57 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.
75 76 77 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 75 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.
80 81 82 83 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 80 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
95 96 97 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 95 def supports_prepared_transactions? true end |
#supports_savepoints? ⇒ Boolean
MySQL supports savepoints
100 101 102 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 100 def supports_savepoints? true end |
#supports_transaction_isolation_levels? ⇒ Boolean
MySQL supports transaction isolation levels
105 106 107 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 105 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
89 90 91 92 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 89 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.
111 112 113 114 115 116 |
# File 'lib/sequel/adapters/shared/mysql.rb', line 111 def use(db_name) disconnect @opts[:database] = db_name if self << "USE #{db_name}" @schemas = {} self end |