class Sequel::Mock::Database

  1. lib/sequel/adapters/mock.rb
Parent: Mock

Database class for Sequel's mock adapter.

Constants

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

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

SHARED_ADAPTER_SETUP = { '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, 'mssql' => lambda do |db| db.instance_eval do @server_version = 10000000 end end }  

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

Public Instance Aliases

execute_ddl -> execute

Attributes

autoid [W]

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.

columns [W]

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

fetch [W]

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.

numrows [W]

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.

server_version [RW]

Mock the server version, useful when using the shared adapters

Public Class methods

new (opts={})

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.

[show source]
# File lib/sequel/adapters/mock.rb, line 142
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
  else
    @shared_adapter = false
  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

Public Instance methods

connect (server)

Return a related Connection option connecting to the given shard.

[show source]
# File lib/sequel/adapters/mock.rb, line 166
def connect(server)
  Connection.new(self, server, server_opts(server))
end
disconnect_connection (c)
[show source]
# File lib/sequel/adapters/mock.rb, line 170
def disconnect_connection(c)
end
execute (sql, opts={}, &block)

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

[show source]
# File lib/sequel/adapters/mock.rb, line 176
def execute(sql, opts={}, &block)
  synchronize(opts[:server]){|c| _execute(c, sql, opts, &block)} 
end
execute_dui (sql, opts={})

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

[show source]
# File lib/sequel/adapters/mock.rb, line 182
def execute_dui(sql, opts={})
  execute(sql, opts.merge(:meth=>:numrows))
end
execute_insert (sql, opts={})

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

[show source]
# File lib/sequel/adapters/mock.rb, line 187
def execute_insert(sql, opts={})
  execute(sql, opts.merge(:meth=>:autoid))
end
sqls ()

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

[show source]
# File lib/sequel/adapters/mock.rb, line 193
def sqls
  s = @sqls.dup
  @sqls.clear
  s
end
supports_savepoints? ()

Enable use of savepoints.

[show source]
# File lib/sequel/adapters/mock.rb, line 200
def supports_savepoints?
  shared_adapter? ? super : true
end