Class: Sequel::MySQL::Database
- Includes:
- DatabaseMethods
- Defined in:
- lib/sequel_core/adapters/mysql.rb
Overview
Database class for MySQL databases used with Sequel.
Constant Summary
Constants included from DatabaseMethods
Sequel::MySQL::DatabaseMethods::AUTO_INCREMENT, Sequel::MySQL::DatabaseMethods::NOT_NULL, Sequel::MySQL::DatabaseMethods::NULL, Sequel::MySQL::DatabaseMethods::PRIMARY_KEY, Sequel::MySQL::DatabaseMethods::TYPES, Sequel::MySQL::DatabaseMethods::UNIQUE, Sequel::MySQL::DatabaseMethods::UNSIGNED
Constants inherited from Database
Database::ADAPTERS, Database::SQL_BEGIN, Database::SQL_COMMIT, Database::SQL_ROLLBACK
Constants included from Schema::SQL
Schema::SQL::AUTOINCREMENT, Schema::SQL::CASCADE, Schema::SQL::COMMA_SEPARATOR, Schema::SQL::NOT_NULL, Schema::SQL::NO_ACTION, Schema::SQL::NULL, Schema::SQL::PRIMARY_KEY, Schema::SQL::RESTRICT, Schema::SQL::SET_DEFAULT, Schema::SQL::SET_NULL, Schema::SQL::TYPES, Schema::SQL::UNDERSCORE, Schema::SQL::UNIQUE, Schema::SQL::UNSIGNED
Instance Attribute Summary
Attributes inherited from Database
#default_schema, #loggers, #opts, #pool, #prepared_statements, #quote_identifiers, #upcase_identifiers
Instance Method Summary collapse
-
#call_sproc(name, opts = {}, &block) ⇒ Object
Support stored procedures on MySQL.
-
#connect(server) ⇒ Object
Connect to the database.
-
#dataset(opts = nil) ⇒ Object
Returns instance of Sequel::MySQL::Dataset with the given options.
-
#execute(sql, opts = {}, &block) ⇒ Object
Executes the given SQL using an available connection, yielding the connection if the block is given.
-
#server_version(server = nil) ⇒ Object
Return the version of the MySQL server two which we are connecting.
-
#transaction(server = nil) ⇒ Object
Support single level transactions on MySQL.
Methods included from DatabaseMethods
#alter_table_sql, #auto_increment_sql, #column_references_sql, #index_definition_sql, #tables, #use
Methods inherited from Database
#<<, #[], adapter_class, adapter_scheme, #add_column, #add_index, #alter_table, #call, connect, #create_or_replace_view, #create_table, #create_table!, #create_view, #disconnect, #drop_column, #drop_index, #drop_table, #drop_view, #execute_ddl, #execute_dui, #fetch, #from, #get, #initialize, #inspect, #log_info, #logger, #logger=, #multi_threaded?, #query, quote_identifiers=, #quote_identifiers?, #rename_column, #rename_table, #select, #serial_primary_key_options, #set_column_default, #set_column_type, single_threaded=, #single_threaded?, #synchronize, #table_exists?, #test_connection, #typecast_value, upcase_identifiers=, #upcase_identifiers?, #uri
Methods included from Schema::SQL
#alter_table_sql, #alter_table_sql_list, #auto_increment_sql, #column_definition_sql, #column_list_sql, #column_references_sql, #constraint_definition_sql, #create_table_sql_list, #default_index_name, #drop_index_sql, #drop_table_sql, #filter_expr, #index_definition_sql, #index_list_sql_list, #literal, #on_delete_clause, #quote_identifier, #quote_schema_table, #rename_table_sql, #schema, #schema_utility_dataset
Constructor Details
This class inherits a constructor from Sequel::Database
Instance Method Details
#call_sproc(name, opts = {}, &block) ⇒ Object
Support stored procedures on MySQL
90 91 92 93 |
# File 'lib/sequel_core/adapters/mysql.rb', line 90 def call_sproc(name, opts={}, &block) args = opts[:args] || [] execute("CALL #{name}(#{literal(args) unless args.empty?})", opts.merge(:sproc=>false), &block) end |
#connect(server) ⇒ Object
Connect to the database. In addition to the usual database options, the following options have effect:
-
:encoding, :charset - Set all the related character sets for this connection (connection, client, database, server, and results).
-
:socket - Use a unix socket file instead of connecting via TCP/IP.
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/sequel_core/adapters/mysql.rb', line 101 def connect(server) opts = server_opts(server) conn = Mysql.init conn.(Mysql::OPT_LOCAL_INFILE, "client") conn.real_connect( opts[:host] || 'localhost', opts[:user], opts[:password], opts[:database], opts[:port], opts[:socket], Mysql::CLIENT_MULTI_RESULTS + Mysql::CLIENT_MULTI_STATEMENTS + Mysql::CLIENT_COMPRESS ) conn.query_with_result = false if encoding = opts[:encoding] || opts[:charset] conn.query("set character_set_connection = '#{encoding}'") conn.query("set character_set_client = '#{encoding}'") conn.query("set character_set_database = '#{encoding}'") conn.query("set character_set_server = '#{encoding}'") conn.query("set character_set_results = '#{encoding}'") end conn.{attr_accessor :prepared_statements} conn.prepared_statements = {} conn.reconnect = true conn end |
#dataset(opts = nil) ⇒ Object
Returns instance of Sequel::MySQL::Dataset with the given options.
131 132 133 |
# File 'lib/sequel_core/adapters/mysql.rb', line 131 def dataset(opts = nil) MySQL::Dataset.new(self, opts) end |
#execute(sql, opts = {}, &block) ⇒ Object
Executes the given SQL using an available connection, yielding the connection if the block is given.
137 138 139 140 141 142 143 144 145 |
# File 'lib/sequel_core/adapters/mysql.rb', line 137 def execute(sql, opts={}, &block) return call_sproc(sql, opts, &block) if opts[:sproc] return execute_prepared_statement(sql, opts, &block) if Symbol === sql begin synchronize(opts[:server]){|conn| _execute(conn, sql, opts, &block)} rescue Mysql::Error => e raise_error(e) end end |
#server_version(server = nil) ⇒ Object
Return the version of the MySQL server two which we are connecting.
148 149 150 |
# File 'lib/sequel_core/adapters/mysql.rb', line 148 def server_version(server=nil) @server_version ||= (synchronize(server){|conn| conn.server_version if conn.respond_to?(:server_version)} || super) end |
#transaction(server = nil) ⇒ Object
Support single level transactions on MySQL.
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
# File 'lib/sequel_core/adapters/mysql.rb', line 153 def transaction(server=nil) synchronize(server) do |conn| return yield(conn) if @transactions.include?(Thread.current) log_info(begin_transaction_sql) conn.query(begin_transaction_sql) begin @transactions << Thread.current yield(conn) rescue ::Exception => e log_info(rollback_transaction_sql) conn.query(rollback_transaction_sql) transaction_error(e, Mysql::Error) ensure unless e log_info(commit_transaction_sql) conn.query(commit_transaction_sql) end @transactions.delete(Thread.current) end end end |