Module: Sequel::MySQL::DatabaseMethods

Included in:
JDBC::MySQL::DatabaseMethods, Database
Defined in:
lib/sequel_core/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
NOT_NULL =
Sequel::Schema::SQL::NOT_NULL
NULL =
Sequel::Schema::SQL::NULL
PRIMARY_KEY =
Sequel::Schema::SQL::PRIMARY_KEY
TYPES =
Sequel::Schema::SQL::TYPES
UNIQUE =
Sequel::Schema::SQL::UNIQUE
UNSIGNED =
Sequel::Schema::SQL::UNSIGNED

Instance Method Summary collapse

Instance Method Details

#alter_table_sql(table, op) ⇒ Object

Use MySQL specific syntax for rename column, set column type, and drop index cases.



16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/sequel_core/adapters/shared/mysql.rb', line 16

def alter_table_sql(table, op)
  case op[:op]
  when :rename_column
    "ALTER TABLE #{quote_schema_table(table)} CHANGE COLUMN #{quote_identifier(op[:name])} #{quote_identifier(op[:new_name])} #{type_literal(op)}"
  when :set_column_type
    "ALTER TABLE #{quote_schema_table(table)} CHANGE COLUMN #{quote_identifier(op[:name])} #{quote_identifier(op[:name])} #{type_literal(op)}"
  when :drop_index
    "#{drop_index_sql(table, op)} ON #{quote_schema_table(table)}"
  else
    super(table, op)
  end
end

#auto_increment_sqlObject

Use MySQL specific AUTO_INCREMENT text.



30
31
32
# File 'lib/sequel_core/adapters/shared/mysql.rb', line 30

def auto_increment_sql
  AUTO_INCREMENT
end

#column_references_sql(column) ⇒ Object

Handle MySQL specific syntax for column references



35
36
37
# File 'lib/sequel_core/adapters/shared/mysql.rb', line 35

def column_references_sql(column)
  "#{", FOREIGN KEY (#{quote_identifier(column[:name])})" unless column[:type] == :check}#{super(column)}"
end

#index_definition_sql(table_name, index) ⇒ Object

Handle MySQL specific index SQL syntax



40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/sequel_core/adapters/shared/mysql.rb', line 40

def index_definition_sql(table_name, index)
  index_name = quote_identifier(index[:name] || default_index_name(table_name, index[:columns]))
  index_type = case index[:type]
  when :full_text
    "FULLTEXT "
  when :spatial
    "SPATIAL "
  else
    using = " USING #{index[:type]}" unless index[:type] == nil
    "UNIQUE " if index[:unique]
  end
  "CREATE #{index_type}INDEX #{index_name} ON #{quote_schema_table(table_name)} #{literal(index[:columns])}#{using}"
end

#server_versionObject

Get version of MySQL server, used for determined capabilities.



55
56
57
58
# File 'lib/sequel_core/adapters/shared/mysql.rb', line 55

def server_version
  m = /(\d+)\.(\d+)\.(\d+)/.match(get(:version[]))
  @server_version ||= (m[1].to_i * 10000) + (m[2].to_i * 100) + m[3].to_i
end

#tables(server = nil) ⇒ Object

Return an array of symbols specifying table names in the current database.



61
62
63
# File 'lib/sequel_core/adapters/shared/mysql.rb', line 61

def tables(server=nil)
  self['SHOW TABLES'].server(server).map{|r| r.values.first.to_sym}
end

#use(db_name) ⇒ Object

Changes the database in use by issuing a USE statement. I would be very careful if I used this.



67
68
69
70
71
72
# File 'lib/sequel_core/adapters/shared/mysql.rb', line 67

def use(db_name)
  disconnect
  @opts[:database] = db_name if self << "USE #{db_name}"
  @schemas = nil
  self
end