class Sequel::MySQL::Database
Attributes
Hash
of conversion procs for the current database
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.
Whether to convert tinyint columns to bool for the current database
Public Instance Methods
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 87 def connect(server) 88 opts = server_opts(server) 89 90 if !RUBY_MYSQL_3 91 conn = Mysql.init 92 conn.options(Mysql::READ_DEFAULT_GROUP, opts[:config_default_group] || "client") 93 conn.options(Mysql::OPT_LOCAL_INFILE, opts[:config_local_infile]) if opts.has_key?(:config_local_infile) 94 if encoding = opts[:encoding] || opts[:charset] 95 # Set encoding before connecting so that the mysql driver knows what 96 # encoding we want to use, but this can be overridden by READ_DEFAULT_GROUP. 97 conn.options(Mysql::SET_CHARSET_NAME, encoding) 98 end 99 if read_timeout = opts[:read_timeout] and defined? Mysql::OPT_READ_TIMEOUT 100 conn.options(Mysql::OPT_READ_TIMEOUT, read_timeout) 101 end 102 if connect_timeout = opts[:connect_timeout] and defined? Mysql::OPT_CONNECT_TIMEOUT 103 conn.options(Mysql::OPT_CONNECT_TIMEOUT, connect_timeout) 104 end 105 else 106 # ruby-mysql 3+ API 107 conn = Adapter.new 108 # no support for default group 109 conn.local_infile = opts[:config_local_infile] if opts.has_key?(:config_local_infile) 110 if encoding = opts[:encoding] || opts[:charset] 111 conn.charset = encoding 112 end 113 if read_timeout = opts[:read_timeout] 114 conn.read_timeout = read_timeout 115 end 116 if connect_timeout = opts[:connect_timeout] 117 conn.connect_timeout = connect_timeout 118 end 119 opts[:compress] = false 120 end 121 122 conn.ssl_set(opts[:sslkey], opts[:sslcert], opts[:sslca], opts[:sslcapath], opts[:sslcipher]) if opts[:sslca] || opts[:sslkey] 123 conn.real_connect( 124 opts[:host] || 'localhost', 125 opts[:user], 126 opts[:password], 127 opts[:database], 128 (opts[:port].to_i if opts[:port]), 129 opts[:socket], 130 Mysql::CLIENT_MULTI_RESULTS + 131 Mysql::CLIENT_MULTI_STATEMENTS + 132 (opts[:compress] == false ? 0 : Mysql::CLIENT_COMPRESS) 133 ) 134 sqls = mysql_connection_setting_sqls 135 136 # Set encoding a slightly different way after connecting, 137 # in case the READ_DEFAULT_GROUP overrode the provided encoding. 138 # Doesn't work across implicit reconnects, but Sequel doesn't turn on 139 # that feature. 140 sqls.unshift("SET NAMES #{literal(encoding.to_s)}") if encoding 141 142 sqls.each{|sql| log_connection_yield(sql, conn){conn.query(sql)}} 143 144 add_prepared_statements_cache(conn) 145 conn 146 end
Modify the type translators for the date, time, and timestamp types depending on the value given.
# File lib/sequel/adapters/mysql.rb 156 def convert_invalid_date_time=(v) 157 m0 = ::Sequel.method(:string_to_time) 158 @conversion_procs[11] = (v != false) ? lambda{|val| convert_date_time(val, &m0)} : m0 159 m1 = ::Sequel.method(:string_to_date) 160 m = (v != false) ? lambda{|val| convert_date_time(val, &m1)} : m1 161 [10, 14].each{|i| @conversion_procs[i] = m} 162 m2 = method(:to_application_timestamp) 163 m = (v != false) ? lambda{|val| convert_date_time(val, &m2)} : m2 164 [7, 12].each{|i| @conversion_procs[i] = m} 165 @convert_invalid_date_time = v 166 end
Modify the type translator used for the tinyint type based on the value given.
# File lib/sequel/adapters/mysql.rb 170 def convert_tinyint_to_bool=(v) 171 @conversion_procs[1] = v ? TYPE_TRANSLATOR_BOOLEAN : TYPE_TRANSLATOR_INTEGER 172 @convert_tinyint_to_bool = v 173 end
# File lib/sequel/adapters/mysql.rb 148 def disconnect_connection(c) 149 c.close 150 rescue Mysql::Error 151 nil 152 end
# File lib/sequel/adapters/mysql.rb 175 def execute_dui(sql, opts=OPTS) 176 execute(sql, opts){|c| return affected_rows(c)} 177 end
# File lib/sequel/adapters/mysql.rb 179 def execute_insert(sql, opts=OPTS) 180 execute(sql, opts){|c| return c.insert_id} 181 end
Sequel::MySQL::DatabaseMethods#freeze
# File lib/sequel/adapters/mysql.rb 183 def freeze 184 server_version 185 @conversion_procs.freeze 186 super 187 end