Class: Sequel::Mock::Database

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

Overview

Database class for Sequel’s mock adapter.

Constant Summary collapse

SHARED_ADAPTERS =

Map of database type names to module names, used for handling mock adapters for specific database types.

{
  'access'=>'Access',
  'db2'=>'DB2',
  'firebird'=>'Firebird',
  'informix'=>'Informix',
  'mssql'=>'MSSQL',
  'mysql'=>'MySQL',
  'oracle'=>'Oracle',
  'postgres'=>'Postgres',
  'sqlite'=>'SQLite'
}
SHARED_ADAPTER_SETUP =

Procs to run for specific database types to get the mock adapter to work with the shared adapter

{
  'postgres' => lambda do |db|
    db.instance_eval do
      @server_version = 90103
      initialize_postgres_adapter
    end
    db.extend(Module.new do
      def bound_variable_arg(arg, conn)
        arg
      end

      def primary_key(table)
        :id
      end
    end)
  end,
  'oracle' => lambda do |db|
    db.instance_eval do
      @primary_key_sequences = {}
    end
  end
}
DatasetClass =
self

Constants inherited from Database

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

Instance Attribute Summary collapse

Attributes inherited from Database

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

Instance Method Summary collapse

Methods inherited from Database

#<<, #[], adapter_class, #adapter_scheme, adapter_scheme, #add_column, #add_index, #add_servers, #after_commit, #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, #dump_foreign_key_migration, #dump_indexes_migration, #dump_schema_cache, #dump_schema_cache?, #dump_schema_migration, #dump_table_schema, #each_server, #extend_datasets, #extension, #fetch, #foreign_key_list, #from, #from_application_timestamp, #get, #global_index_namespace?, identifier_input_method, #identifier_input_method, #identifier_input_method=, identifier_input_method=, #identifier_output_method, identifier_output_method, #identifier_output_method=, identifier_output_method=, #in_transaction?, #indexes, #inspect, #literal, #load_schema_cache, #load_schema_cache?, #log_exception, #log_info, #log_yield, #logger=, #prepared_statement, #query, #quote_identifiers=, quote_identifiers=, #quote_identifiers?, register_extension, #remove_servers, #rename_column, #rename_table, #run, #schema, #select, #serial_primary_key_options, #servers, #set_column_default, #set_column_type, #set_prepared_statement, single_threaded=, #single_threaded?, #supports_create_table_if_not_exists?, #supports_deferrable_constraints?, #supports_deferrable_foreign_key_constraints?, #supports_drop_table_if_exists?, #supports_prepared_transactions?, #supports_savepoints_in_prepared_transactions?, #supports_transaction_isolation_levels?, #supports_transactional_ddl?, #synchronize, #table_exists?, #tables, #test_connection, #to_application_timestamp, #transaction, #typecast_value, #uri, #url, #valid_connection?, #views

Methods included from Sequel::Metaprogramming

#meta_def

Constructor Details

#initialize(opts = {}) ⇒ Database

Additional options supported:

:autoid

Call #autoid= with the value

:columns

Call #columns= with the value

:fetch

Call #fetch= with the value

:numrows

Call #numrows= with the value

:extend

A module the object is extended with.

:sqls

The array to store the SQL queries in.



137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# File 'lib/sequel/adapters/mock.rb', line 137

def initialize(opts={})
  super
  opts = @opts
  @sqls = opts[:sqls] || []
  if mod_name = SHARED_ADAPTERS[opts[:host]]
    @shared_adapter = true
    require "sequel/adapters/shared/#{opts[:host]}"
    extend Sequel.const_get(mod_name)::DatabaseMethods
    extend_datasets Sequel.const_get(mod_name)::DatasetMethods
    if pr = SHARED_ADAPTER_SETUP[opts[:host]]
      pr.call(self)
    end
  end
  self.autoid = opts[:autoid]
  self.columns = opts[:columns]
  self.fetch = opts[:fetch]
  self.numrows = opts[:numrows]
  extend(opts[:extend]) if opts[:extend]
  sqls
end

Instance Attribute Details

#autoid=(value) ⇒ Object (writeonly)

Set the autogenerated primary key integer to be returned when running an insert query. Argument types supported:

nil

Return nil for all inserts

Integer

Starting integer for next insert, with futher inserts getting an incremented value

Array

First insert gets the first value in the array, second gets the second value, etc.

Proc

Called with the insert SQL query, uses the value returned

Class

Should be an Exception subclass, will create a new instance an raise it wrapped in a DatabaseError.



86
87
88
# File 'lib/sequel/adapters/mock.rb', line 86

def autoid=(value)
  @autoid = value
end

#columns=(value) ⇒ Object

Set the columns to set in the dataset when the dataset fetches rows. Argument types supported:

nil

Set no columns

Array of Symbols: Used for all datasets Array (otherwise): First retrieval gets the first value in the

array, second gets the second value, etc.
Proc

Called with the select SQL query, uses the value returned, which should be an array of symbols



96
97
98
# File 'lib/sequel/adapters/mock.rb', line 96

def columns=(value)
  @columns = value
end

#fetch=(value) ⇒ Object (writeonly)

Set the hashes to yield by execute when retrieving rows. Argument types supported:

nil

Yield no rows

Hash

Always yield a single row with this hash

Array of Hashes

Yield separately for each hash in this array

Array (otherwise)

First retrieval gets the first value in the array, second gets the second value, etc.

Proc

Called with the select SQL query, uses the value returned, which should be a hash or array of hashes.

Class

Should be an Exception subclass, will create a new instance an raise it wrapped in a DatabaseError.



111
112
113
# File 'lib/sequel/adapters/mock.rb', line 111

def fetch=(value)
  @fetch = value
end

#numrows=(value) ⇒ Object (writeonly)

Set the number of rows to return from update or delete. Argument types supported:

nil

Return 0 for all updates and deletes

Integer

Used for all updates and deletes

Array

First update/delete gets the first value in the array, second gets the second value, etc.

Proc

Called with the update/delete SQL query, uses the value returned.

Class

Should be an Exception subclass, will create a new instance an raise it wrapped in a DatabaseError.



124
125
126
# File 'lib/sequel/adapters/mock.rb', line 124

def numrows=(value)
  @numrows = value
end

#server_versionObject

Mock the server version, useful when using the shared adapters



127
128
129
# File 'lib/sequel/adapters/mock.rb', line 127

def server_version
  @server_version
end

Instance Method Details

#connect(server) ⇒ Object

Return a related Connection option connecting to the given shard.



159
160
161
# File 'lib/sequel/adapters/mock.rb', line 159

def connect(server)
  Connection.new(self, server, server_opts(server))
end

#disconnect_connection(c) ⇒ Object



163
164
# File 'lib/sequel/adapters/mock.rb', line 163

def disconnect_connection(c)
end

#execute(sql, opts = {}, &block) ⇒ Object Also known as: execute_ddl

Store the sql used for later retrieval with #sqls, and return the appropriate value using either the #autoid, #fetch, or #numrows methods.



169
170
171
# File 'lib/sequel/adapters/mock.rb', line 169

def execute(sql, opts={}, &block)
  synchronize(opts[:server]){|c| _execute(c, sql, opts, &block)} 
end

#execute_dui(sql, opts = {}) ⇒ Object

Store the sql used, and return the value of the #numrows method.



175
176
177
# File 'lib/sequel/adapters/mock.rb', line 175

def execute_dui(sql, opts={})
  execute(sql, opts.merge(:meth=>:numrows))
end

#execute_insert(sql, opts = {}) ⇒ Object

Store the sql used, and return the value of the #autoid method.



180
181
182
# File 'lib/sequel/adapters/mock.rb', line 180

def execute_insert(sql, opts={})
  execute(sql, opts.merge(:meth=>:autoid))
end

#sqlsObject

Return all stored SQL queries, and clear the cache of SQL queries.



186
187
188
189
190
# File 'lib/sequel/adapters/mock.rb', line 186

def sqls
  s = @sqls.dup
  @sqls.clear
  s
end

#supports_savepoints?Boolean

Enable use of savepoints.

Returns:

  • (Boolean)


193
194
195
# File 'lib/sequel/adapters/mock.rb', line 193

def supports_savepoints?
  shared_adapter? ? super : true
end