Class: Sequel::DataObjects::Database

Inherits:
Sequel::Database show all
Defined in:
lib/sequel/adapters/do.rb

Overview

DataObjects uses it’s own internal connection pooling in addition to the pooling that Sequel uses. You should make sure that you don’t set the connection pool size to more than 8 for a Sequel::DataObjects::Database object, or hack DataObjects (or Extlib) to use a pool size at least as large as the pool size being used by Sequel.

Constant Summary collapse

DISCONNECT_ERROR_RE =
/terminating connection due to administrator command/
DatasetClass =
self

Constants inherited from Sequel::Database

Sequel::Database::ADAPTERS, Sequel::Database::AUTOINCREMENT, Sequel::Database::COLUMN_DEFINITION_ORDER, Sequel::Database::COLUMN_SCHEMA_DATETIME_TYPES, Sequel::Database::COLUMN_SCHEMA_STRING_TYPES, Sequel::Database::COMBINABLE_ALTER_TABLE_OPS, Sequel::Database::COMMA_SEPARATOR, Sequel::Database::CURRENT_TIMESTAMP_RE, Sequel::Database::DEFAULT_DATABASE_ERROR_REGEXPS, Sequel::Database::DEFAULT_JOIN_TABLE_COLUMN_OPTIONS, Sequel::Database::DEFAULT_STRING_COLUMN_SIZE, Sequel::Database::EXTENSIONS, Sequel::Database::NOT_NULL, Sequel::Database::NULL, Sequel::Database::OPTS, Sequel::Database::PRIMARY_KEY, Sequel::Database::SCHEMA_TYPE_CLASSES, Sequel::Database::SQL_BEGIN, Sequel::Database::SQL_COMMIT, Sequel::Database::SQL_RELEASE_SAVEPOINT, Sequel::Database::SQL_ROLLBACK, Sequel::Database::SQL_ROLLBACK_TO_SAVEPOINT, Sequel::Database::SQL_SAVEPOINT, Sequel::Database::STRING_DEFAULT_RE, Sequel::Database::TEMPORARY, Sequel::Database::TRANSACTION_BEGIN, Sequel::Database::TRANSACTION_COMMIT, Sequel::Database::TRANSACTION_ISOLATION_LEVELS, Sequel::Database::TRANSACTION_ROLLBACK, Sequel::Database::UNDERSCORE, Sequel::Database::UNIQUE, Sequel::Database::UNSIGNED

Instance Attribute Summary

Attributes inherited from Sequel::Database

#cache_schema, #dataset_class, #default_string_column_size, #identifier_input_method, #identifier_output_method, #log_warn_duration, #loggers, #opts, #pool, #prepared_statements, #sql_log_level, #timezone, #transaction_isolation_level

Instance Method Summary collapse

Methods inherited from Sequel::Database

#<<, #[], adapter_class, adapter_scheme, #adapter_scheme, #add_column, #add_index, #add_servers, #after_commit, after_initialize, #after_rollback, #alter_table, #alter_table_generator, #call, #cast_type_literal, connect, #create_join_table, #create_or_replace_view, #create_table, #create_table!, #create_table?, #create_table_generator, #create_view, #database_type, #dataset, #disconnect, #drop_column, #drop_index, #drop_join_table, #drop_table, #drop_table?, #drop_view, #each_server, #execute_ddl, #extend_datasets, extension, #extension, #fetch, #from, #from_application_timestamp, #get, #global_index_namespace?, #in_transaction?, #initialize, #inspect, #literal, #log_exception, #log_info, #log_yield, #logger=, #prepared_statement, #quote_identifier, #quote_identifiers=, #quote_identifiers?, register_extension, #remove_servers, #rename_column, #rename_table, #run, run_after_initialize, #schema, #schema_type_class, #select, #serial_primary_key_options, #servers, #set_column_default, #set_column_type, #set_prepared_statement, #single_threaded?, #supports_create_table_if_not_exists?, #supports_deferrable_constraints?, #supports_deferrable_foreign_key_constraints?, #supports_drop_table_if_exists?, #supports_foreign_key_parsing?, #supports_index_parsing?, #supports_partial_indexes?, #supports_prepared_transactions?, #supports_savepoints?, #supports_savepoints_in_prepared_transactions?, #supports_schema_parsing?, #supports_table_listing?, #supports_transaction_isolation_levels?, #supports_transactional_ddl?, #supports_view_listing?, #synchronize, #table_exists?, #test_connection, #to_application_timestamp, #transaction, #typecast_value, #url, #valid_connection?

Methods included from Metaprogramming

#meta_def

Constructor Details

This class inherits a constructor from Sequel::Database

Instance Method Details

#connect(server) ⇒ Object

Setup a DataObjects::Connection to the database.



48
49
50
# File 'lib/sequel/adapters/do.rb', line 48

def connect(server)
  setup_connection(::DataObjects::Connection.new(uri(server_opts(server))))
end

#disconnect_connection(conn) ⇒ Object



52
53
54
# File 'lib/sequel/adapters/do.rb', line 52

def disconnect_connection(conn)
  conn.dispose
end

#execute(sql, opts = OPTS) ⇒ Object

Execute the given SQL. If a block is given, the DataObjects::Reader created is yielded to it. A block should not be provided unless a a SELECT statement is being used (or something else that returns rows). Otherwise, the return value is the insert id if opts is :insert, or the number of affected rows, otherwise.



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/sequel/adapters/do.rb', line 61

def execute(sql, opts=OPTS)
  synchronize(opts[:server]) do |conn|
    begin
      command = conn.create_command(sql)
      res = log_yield(sql){block_given? ? command.execute_reader : command.execute_non_query}
    rescue ::DataObjects::Error => e
      raise_error(e)
    end
    if block_given?
      begin
        yield(res)
      ensure
       res.close if res
      end
    elsif opts[:type] == :insert
      res.insert_id
    else
      res.affected_rows
    end
  end
end

#execute_dui(sql, opts = OPTS) ⇒ Object

Execute the SQL on the this database, returning the number of affected rows.



85
86
87
# File 'lib/sequel/adapters/do.rb', line 85

def execute_dui(sql, opts=OPTS)
  execute(sql, opts)
end

#execute_insert(sql, opts = OPTS) ⇒ Object

Execute the SQL on this database, returning the primary key of the table being inserted to.



91
92
93
# File 'lib/sequel/adapters/do.rb', line 91

def execute_insert(sql, opts=OPTS)
  execute(sql, opts.merge(:type=>:insert))
end

#subadapterObject

Return the subadapter type for this database, i.e. sqlite3 for do:sqlite3::memory:.



97
98
99
# File 'lib/sequel/adapters/do.rb', line 97

def subadapter
  uri.split(":").first
end

#uri(opts = OPTS) ⇒ Object

Return the DataObjects URI for the Sequel URI, removing the do: prefix.



103
104
105
106
# File 'lib/sequel/adapters/do.rb', line 103

def uri(opts=OPTS)
  opts = @opts.merge(opts)
  (opts[:uri] || opts[:url]).sub(/\Ado:/, '')
end