Class/Module Index [+]

Quicksearch

Sequel::MySQL::Database

Database class for MySQL databases used with Sequel.

Constants

AFFECTED_ROWS_RE

Regular expression used for getting accurate number of rows matched by an update statement.

MYSQL_DATABASE_DISCONNECT_ERRORS

Mysql::Error messages that indicate the current connection should be disconnected

Attributes

conversion_procs[R]

Hash of conversion procs for the current database

convert_invalid_date_time[R]

By default, Sequel raises an exception if in invalid date or time is used. However, if this is set to nil or :nil, the adapter treats dates like 0000-00-00 and times like 838:00:00 as nil values. If set to :string, it returns the strings as is.

convert_tinyint_to_bool[R]

Whether to convert tinyint columns to bool for the current database

Public Class Methods

new(opts={}) click to toggle source
# File lib/sequel/adapters/mysql.rb, line 65
def initialize(opts={})
  super
  @conversion_procs = MYSQL_TYPES.dup
  self.convert_tinyint_to_bool = Sequel::MySQL.convert_tinyint_to_bool
  self.convert_invalid_date_time = Sequel::MySQL.convert_invalid_date_time
end

Public Instance Methods

connect(server) click to toggle source

Connect to the database. In addition to the usual database options, the following options have effect:

  • :auto_is_null - Set to true to use MySQL default behavior of having a filter for an autoincrement column equals NULL to return the last inserted row.

  • :charset - Same as :encoding (:encoding takes precendence)

  • :compress - Set to false to not compress results from the server

  • :config_default_group - The default group to read from the in the MySQL config file.

  • :config_local_infile - If provided, sets the Mysql::OPT_LOCAL_INFILE option on the connection with the given value.

  • :connect_timeout - Set the timeout in seconds before a connection attempt is abandoned.

  • :encoding - Set all the related character sets for this connection (connection, client, database, server, and results).

  • :read_timeout - Set the timeout in seconds for reading back results to a query.

  • :socket - Use a unix socket file instead of connecting via TCP/IP.

  • :timeout - Set the timeout in seconds before the server will disconnect this connection (a.k.a @@wait_timeout).

# File lib/sequel/adapters/mysql.rb, line 93
def connect(server)
  opts = server_opts(server)
  conn = Mysql.init
  conn.options(Mysql::READ_DEFAULT_GROUP, opts[:config_default_group] || "client")
  conn.options(Mysql::OPT_LOCAL_INFILE, opts[:config_local_infile]) if opts.has_key?(:config_local_infile)
  conn.ssl_set(opts[:sslkey], opts[:sslcert], opts[:sslca], opts[:sslcapath], opts[:sslcipher]) if opts[:sslca] || opts[:sslkey]
  if encoding = opts[:encoding] || opts[:charset]
    # Set encoding before connecting so that the mysql driver knows what
    # encoding we want to use, but this can be overridden by READ_DEFAULT_GROUP.
    conn.options(Mysql::SET_CHARSET_NAME, encoding)
  end
  if read_timeout = opts[:read_timeout] and defined? Mysql::OPT_READ_TIMEOUT
    conn.options(Mysql::OPT_READ_TIMEOUT, read_timeout)
  end
  if connect_timeout = opts[:connect_timeout] and defined? Mysql::OPT_CONNECT_TIMEOUT
    conn.options(Mysql::OPT_CONNECT_TIMEOUT, connect_timeout)
  end
  conn.real_connect(
    opts[:host] || 'localhost',
    opts[:user],
    opts[:password],
    opts[:database],
    (opts[:port].to_i if opts[:port]),
    opts[:socket],
    Mysql::CLIENT_MULTI_RESULTS +
    Mysql::CLIENT_MULTI_STATEMENTS +
    (opts[:compress] == false ? 0 : Mysql::CLIENT_COMPRESS)
  )
  sqls = mysql_connection_setting_sqls

  # Set encoding a slightly different way after connecting,
  # in case the READ_DEFAULT_GROUP overrode the provided encoding.
  # Doesn't work across implicit reconnects, but Sequel doesn't turn on
  # that feature.
  sqls.unshift("SET NAMES #{literal(encoding.to_s)}") if encoding

  sqls.each{|sql| log_yield(sql){conn.query(sql)}}

  add_prepared_statements_cache(conn)
  conn
end
convert_invalid_date_time=(v) click to toggle source

Modify the type translators for the date, time, and timestamp types depending on the value given.

# File lib/sequel/adapters/mysql.rb, line 137
def convert_invalid_date_time=(v)
  m0 = ::Sequel.method(:string_to_time)
  @conversion_procs[11] = (v != false) ?  lambda{|v| convert_date_time(v, &m0)} : m0
  m1 = ::Sequel.method(:string_to_date) 
  m = (v != false) ? lambda{|v| convert_date_time(v, &m1)} : m1
  [10, 14].each{|i| @conversion_procs[i] = m}
  m2 = method(:to_application_timestamp)
  m = (v != false) ? lambda{|v| convert_date_time(v, &m2)} : m2
  [7, 12].each{|i| @conversion_procs[i] = m}
  @convert_invalid_date_time = v
end
convert_tinyint_to_bool=(v) click to toggle source

Modify the type translator used for the tinyint type based on the value given.

# File lib/sequel/adapters/mysql.rb, line 151
def convert_tinyint_to_bool=(v)
  @conversion_procs[1] = TYPE_TRANSLATOR.method(v ? :boolean : :integer)
  @convert_tinyint_to_bool = v
end
execute_dui(sql, opts={}) click to toggle source

Return the number of matched rows when executing a delete/update statement.

# File lib/sequel/adapters/mysql.rb, line 157
def execute_dui(sql, opts={})
  execute(sql, opts){|c| return affected_rows(c)}
end
execute_insert(sql, opts={}) click to toggle source

Return the last inserted id when executing an insert statement.

# File lib/sequel/adapters/mysql.rb, line 162
def execute_insert(sql, opts={})
  execute(sql, opts){|c| return c.insert_id}
end
server_version(server=nil) click to toggle source

Return the version of the MySQL server two which we are connecting.

# File lib/sequel/adapters/mysql.rb, line 167
def server_version(server=nil)
  @server_version ||= (synchronize(server){|conn| conn.server_version if conn.respond_to?(:server_version)} || super)
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.