Class: Sequel::ODBC::Database
- Defined in:
- lib/sequel/adapters/odbc.rb
Constant Summary collapse
- GUARDED_DRV_NAME =
/^\{.+\}$/.freeze
- DRV_NAME_GUARDS =
'{%s}'.freeze
Constants inherited from Database
Database::ADAPTERS, Database::AUTOINCREMENT, Database::CASCADE, Database::COMMA_SEPARATOR, Database::NOT_NULL, Database::NO_ACTION, Database::NULL, Database::PRIMARY_KEY, Database::RESTRICT, Database::SET_DEFAULT, Database::SET_NULL, Database::SQL_BEGIN, Database::SQL_COMMIT, Database::SQL_ROLLBACK, Database::TYPES, Database::UNDERSCORE, Database::UNIQUE, Database::UNSIGNED
Instance Attribute Summary
Attributes inherited from Database
#default_schema, #loggers, #opts, #pool, #prepared_statements
Instance Method Summary collapse
- #connect(server) ⇒ Object
- #dataset(opts = nil) ⇒ Object
-
#execute(sql, opts = {}) ⇒ Object
ODBC returns native statement objects, which must be dropped if you call execute manually, or you will get warnings.
- #execute_dui(sql, opts = {}) ⇒ Object (also: #do)
-
#initialize(opts) ⇒ Database
constructor
A new instance of Database.
-
#transaction(opts = {}) ⇒ Object
Support single level transactions on ODBC.
Methods inherited from Database
#<<, #>>, #[], adapter_class, adapter_scheme, #add_column, #add_index, #alter_table, #alter_table_sql, #alter_table_sql_list, #auto_increment_sql, #call, #column_definition_sql, #column_list_sql, #column_references_sql, connect, #constraint_definition_sql, #create_or_replace_view, #create_table, #create_table!, #create_table_sql_list, #create_view, #default_index_name, #disconnect, #drop_column, #drop_index, #drop_index_sql, #drop_table, #drop_table_sql, #drop_view, #execute_ddl, #execute_insert, #fetch, #filter_expr, #from, #get, #identifier_input_method, identifier_input_method, #identifier_input_method=, identifier_input_method=, #identifier_output_method, identifier_output_method, #identifier_output_method=, identifier_output_method=, #index_definition_sql, #index_list_sql_list, #inspect, #literal, #log_info, #logger, #logger=, #multi_threaded?, #on_delete_clause, #query, #quote_identifier, #quote_identifiers=, quote_identifiers=, #quote_identifiers?, #quote_schema_table, #rename_column, #rename_table, #rename_table_sql, #schema, #schema_utility_dataset, #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=, #upcase_identifiers?, #uri, #url
Methods included from Metaprogramming
Constructor Details
#initialize(opts) ⇒ Database
Returns a new instance of Database.
11 12 13 14 15 16 17 18 19 20 21 |
# File 'lib/sequel/adapters/odbc.rb', line 11 def initialize(opts) super(opts) case opts[:db_type] when 'mssql' Sequel.require 'adapters/shared/mssql' extend Sequel::MSSQL::DatabaseMethods when 'progress' Sequel.require 'adapters/shared/progress' extend Sequel::Progress::DatabaseMethods end end |
Instance Method Details
#connect(server) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/sequel/adapters/odbc.rb', line 23 def connect(server) opts = server_opts(server) if opts.include? :driver drv = ::ODBC::Driver.new drv.name = 'Sequel ODBC Driver130' opts.each do |param, value| if :driver == param and not (value =~ GUARDED_DRV_NAME) value = DRV_NAME_GUARDS % value end drv.attrs[param.to_s.capitalize] = value end db = ::ODBC::Database.new conn = db.drvconnect(drv) else conn = ::ODBC::connect(opts[:database], opts[:user], opts[:password]) end conn.autocommit = true conn end |
#dataset(opts = nil) ⇒ Object
43 44 45 |
# File 'lib/sequel/adapters/odbc.rb', line 43 def dataset(opts = nil) ODBC::Dataset.new(self, opts) end |
#execute(sql, opts = {}) ⇒ Object
ODBC returns native statement objects, which must be dropped if you call execute manually, or you will get warnings. See the fetch_rows method source code for an example of how to drop the statements.
51 52 53 54 55 56 57 58 |
# File 'lib/sequel/adapters/odbc.rb', line 51 def execute(sql, opts={}) log_info(sql) synchronize(opts[:server]) do |conn| r = conn.run(sql) yield(r) if block_given? r end end |
#execute_dui(sql, opts = {}) ⇒ Object Also known as: do
60 61 62 63 |
# File 'lib/sequel/adapters/odbc.rb', line 60 def execute_dui(sql, opts={}) log_info(sql) synchronize(opts[:server]){|conn| conn.do(sql)} end |
#transaction(opts = {}) ⇒ Object
Support single level transactions on ODBC
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/sequel/adapters/odbc.rb', line 67 def transaction(opts={}) unless opts.is_a?(Hash) Deprecation.deprecate('Passing an argument other than a Hash to Database#transaction', "Use DB.transaction(:server=>#{opts.inspect})") opts = {:server=>opts} end synchronize(opts[:server]) do |conn| return yield(conn) if @transactions.include?(Thread.current) log_info(begin_transaction_sql) conn.do(begin_transaction_sql) begin @transactions << Thread.current yield(conn) rescue ::Exception => e log_info(rollback_transaction_sql) conn.do(rollback_transaction_sql) transaction_error(e) ensure unless e log_info(commit_transaction_sql) conn.do(commit_transaction_sql) end @transactions.delete(Thread.current) end end end |