Class: ActiveRecord::ConnectionAdapters::NullDBAdapter
- Inherits:
-
AbstractAdapter
- Object
- AbstractAdapter
- ActiveRecord::ConnectionAdapters::NullDBAdapter
show all
- Defined in:
- lib/active_record/connection_adapters/nulldb_adapter/table_definition.rb,
lib/active_record/connection_adapters/nulldb_adapter/index_definition.rb,
lib/active_record/connection_adapters/nulldb_adapter/configuration.rb,
lib/active_record/connection_adapters/nulldb_adapter/empty_result.rb,
lib/active_record/connection_adapters/nulldb_adapter/null_object.rb,
lib/active_record/connection_adapters/nulldb_adapter/checkpoint.rb,
lib/active_record/connection_adapters/nulldb_adapter/statement.rb,
lib/active_record/connection_adapters/nulldb_adapter/column.rb,
lib/active_record/connection_adapters/nulldb_adapter/core.rb
Defined Under Namespace
Classes: Checkpoint, Column, Configuration, EmptyResult, IndexDefinition, NullObject, Statement
Constant Summary
collapse
- TableDefinition =
ActiveRecord::ConnectionAdapters::TableDefinition
Class Method Summary
collapse
Instance Method Summary
collapse
-
#adapter_name ⇒ Object
-
#add_fk_constraint(*args) ⇒ Object
-
#add_index(table_name, column_names, options = {}) ⇒ Object
-
#add_index_options(table_name, column_name, options = {}) ⇒ Object
-
#add_pk_constraint(*args) ⇒ Object
-
#checkpoint! ⇒ Object
Inserts a checkpoint in the log.
-
#columns(table_name, name = nil) ⇒ Object
Retrieve table columns as defined by the schema.
-
#create_table(table_name, options = {}) {|table_definition| ... } ⇒ Object
-
#delete(statement, name = nil, binds = []) ⇒ Object
-
#exec_query(statement, name = 'SQL', binds = []) ⇒ Object
-
#execute(statement, name = nil) ⇒ Object
-
#execution_log ⇒ Object
A log of every statement that has been “executed” by this connection adapter instance.
-
#execution_log_since_checkpoint ⇒ Object
A log of every statement that has been “executed” since the last time #checkpoint! was called, or since the connection was created.
-
#index_name_exists?(table_name, index_name, default) ⇒ Boolean
-
#indexes(table_name, name = nil) ⇒ Object
Retrieve table indexes as defined by the schema.
-
#initialize(config = {}) ⇒ NullDBAdapter
constructor
-
#insert(statement, name = nil, primary_key = nil, object_id = nil, sequence_name = nil, binds = []) ⇒ Object
(also: #create)
-
#primary_key(table_name) ⇒ Object
-
#select_all(statement, name = nil, binds = []) ⇒ Object
-
#select_one(statement, name = nil, binds = []) ⇒ Object
-
#select_rows(statement, name = nil) ⇒ Object
-
#select_value(statement, name = nil, binds = []) ⇒ Object
-
#select_values(statement, name = nil) ⇒ Object
-
#supports_migrations? ⇒ Boolean
-
#tables ⇒ Object
Retrieve the table names defined by the schema.
-
#update(statement, name = nil, binds = []) ⇒ Object
Constructor Details
#initialize(config = {}) ⇒ NullDBAdapter
Recognized options:
:schema
-
path to the schema file, relative to Rails.root
18
19
20
21
22
23
24
25
26
27
28
|
# File 'lib/active_record/connection_adapters/nulldb_adapter/core.rb', line 18
def initialize(config={})
@log = StringIO.new
@logger = Logger.new(@log)
@last_unique_id = 0
@tables = {'schema_info' => new_table_definition(nil)}
@indexes = Hash.new { |hash, key| hash[key] = [] }
@schema_path = config.fetch(:schema){ "db/schema.rb" }
@config = config.merge(:adapter => :nulldb)
super(nil, @logger)
@visitor = Arel::Visitors::ToSql.new self if defined?(Arel::Visitors::ToSql)
end
|
Class Method Details
.insinuate_into_spec(config) ⇒ Object
A convenience method for integratinginto RSpec. See README for example of use.
5
6
7
8
9
10
11
12
13
|
# File 'lib/active_record/connection_adapters/nulldb_adapter/core.rb', line 5
def self.insinuate_into_spec(config)
config.before :all do
ActiveRecord::Base.establish_connection(:adapter => :nulldb)
end
config.after :all do
ActiveRecord::Base.establish_connection(:test)
end
end
|
Instance Method Details
#adapter_name ⇒ Object
49
50
51
|
# File 'lib/active_record/connection_adapters/nulldb_adapter/core.rb', line 49
def adapter_name
"NullDB"
end
|
#add_fk_constraint(*args) ⇒ Object
107
108
109
|
# File 'lib/active_record/connection_adapters/nulldb_adapter/core.rb', line 107
def add_fk_constraint(*args)
end
|
#add_index(table_name, column_names, options = {}) ⇒ Object
69
70
71
72
73
|
# File 'lib/active_record/connection_adapters/nulldb_adapter/core.rb', line 69
def add_index(table_name, column_names, options = {})
column_names = Array.wrap(column_names).map(&:to_s)
index_name, index_type, ignore = add_index_options(table_name, column_names, options)
@indexes[table_name] << IndexDefinition.new(table_name, index_name, (index_type == 'UNIQUE'), column_names, [], [])
end
|
#add_index_options(table_name, column_name, options = {}) ⇒ Object
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
# File 'lib/active_record/connection_adapters/nulldb_adapter/core.rb', line 76
def add_index_options(table_name, column_name, options = {})
column_names = Array.wrap(column_name)
index_name = index_name(table_name, :column => column_names)
if Hash === options
index_type = options[:unique] ? "UNIQUE" : ""
index_name = options[:name].to_s if options.key?(:name)
else
index_type = options
end
if index_name.length > index_name_length
raise ArgumentError, "Index name '#{index_name}' on table '#{table_name}' is too long; the limit is #{index_name_length} characters"
end
if index_name_exists?(table_name, index_name, false)
raise ArgumentError, "Index name '#{index_name}' on table '#{table_name}' already exists"
end
index_columns = quoted_columns_for_index(column_names, options).join(", ")
[index_name, index_type, index_columns]
end
|
#add_pk_constraint(*args) ⇒ Object
111
112
113
|
# File 'lib/active_record/connection_adapters/nulldb_adapter/core.rb', line 111
def add_pk_constraint(*args)
end
|
#checkpoint! ⇒ Object
Inserts a checkpoint in the log. See also #execution_log_since_checkpoint.
45
46
47
|
# File 'lib/active_record/connection_adapters/nulldb_adapter/core.rb', line 45
def checkpoint!
self.execution_log << Checkpoint.new
end
|
#columns(table_name, name = nil) ⇒ Object
Retrieve table columns as defined by the schema
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
# File 'lib/active_record/connection_adapters/nulldb_adapter/core.rb', line 121
def columns(table_name, name = nil)
if @tables.size <= 1
ActiveRecord::Migration.verbose = false
schema_path = if Pathname(@schema_path).absolute?
@schema_path
else
File.join(NullDB.configuration.project_root, @schema_path)
end
Kernel.load(schema_path)
end
if table = @tables[table_name]
table.columns.map do |col_def|
ActiveRecord::ConnectionAdapters::NullDBAdapter::Column.new(
col_def.name.to_s,
col_def.default,
col_def.type,
col_def.null
)
end
else
[]
end
end
|
#create_table(table_name, options = {}) {|table_definition| ... } ⇒ Object
57
58
59
60
61
62
63
64
65
66
67
|
# File 'lib/active_record/connection_adapters/nulldb_adapter/core.rb', line 57
def create_table(table_name, options = {})
table_definition = new_table_definition(self, table_name, options.delete(:temporary), options)
unless options[:id] == false
table_definition.primary_key(options[:primary_key] || "id")
end
yield table_definition if block_given?
@tables[table_name] = table_definition
end
|
#delete(statement, name = nil, binds = []) ⇒ Object
182
183
184
185
186
|
# File 'lib/active_record/connection_adapters/nulldb_adapter/core.rb', line 182
def delete(statement, name=nil, binds = [])
with_entry_point(:delete) do
super(statement, name)
end
end
|
#exec_query(statement, name = 'SQL', binds = []) ⇒ Object
156
157
158
159
|
# File 'lib/active_record/connection_adapters/nulldb_adapter/core.rb', line 156
def exec_query(statement, name = 'SQL', binds = [])
self.execution_log << Statement.new(entry_point, statement)
EmptyResult.new
end
|
#execute(statement, name = nil) ⇒ Object
151
152
153
154
|
# File 'lib/active_record/connection_adapters/nulldb_adapter/core.rb', line 151
def execute(statement, name = nil)
self.execution_log << Statement.new(entry_point, statement)
NullObject.new
end
|
#execution_log ⇒ Object
A log of every statement that has been “executed” by this connection adapter instance.
32
33
34
|
# File 'lib/active_record/connection_adapters/nulldb_adapter/core.rb', line 32
def execution_log
(@execution_log ||= [])
end
|
#execution_log_since_checkpoint ⇒ Object
A log of every statement that has been “executed” since the last time #checkpoint! was called, or since the connection was created.
38
39
40
41
42
|
# File 'lib/active_record/connection_adapters/nulldb_adapter/core.rb', line 38
def execution_log_since_checkpoint
checkpoint_index = @execution_log.rindex(Checkpoint.new)
checkpoint_index = checkpoint_index ? checkpoint_index + 1 : 0
@execution_log[(checkpoint_index..-1)]
end
|
#index_name_exists?(table_name, index_name, default) ⇒ Boolean
100
101
102
103
104
|
# File 'lib/active_record/connection_adapters/nulldb_adapter/core.rb', line 100
def index_name_exists?(table_name, index_name, default)
return default unless respond_to?(:indexes)
index_name = index_name.to_s
indexes(table_name).detect { |i| i.name == index_name }
end
|
#indexes(table_name, name = nil) ⇒ Object
Retrieve table indexes as defined by the schema
147
148
149
|
# File 'lib/active_record/connection_adapters/nulldb_adapter/core.rb', line 147
def indexes(table_name, name = nil)
@indexes[table_name]
end
|
#insert(statement, name = nil, primary_key = nil, object_id = nil, sequence_name = nil, binds = []) ⇒ Object
Also known as:
create
167
168
169
170
171
172
173
|
# File 'lib/active_record/connection_adapters/nulldb_adapter/core.rb', line 167
def insert(statement, name = nil, primary_key = nil, object_id = nil, sequence_name = nil, binds = [])
(object_id || next_unique_id).tap do
with_entry_point(:insert) do
super(statement, name, primary_key, object_id, sequence_name)
end
end
end
|
#primary_key(table_name) ⇒ Object
212
213
214
|
# File 'lib/active_record/connection_adapters/nulldb_adapter/core.rb', line 212
def primary_key(table_name)
columns(table_name).detect { |col| col.sql_type == :primary_key }.try(:name)
end
|
#select_all(statement, name = nil, binds = []) ⇒ Object
188
189
190
191
192
|
# File 'lib/active_record/connection_adapters/nulldb_adapter/core.rb', line 188
def select_all(statement, name=nil, binds = [])
with_entry_point(:select_all) do
super(statement, name)
end
end
|
#select_one(statement, name = nil, binds = []) ⇒ Object
194
195
196
197
198
|
# File 'lib/active_record/connection_adapters/nulldb_adapter/core.rb', line 194
def select_one(statement, name=nil, binds = [])
with_entry_point(:select_one) do
super(statement, name)
end
end
|
#select_rows(statement, name = nil) ⇒ Object
161
162
163
164
165
|
# File 'lib/active_record/connection_adapters/nulldb_adapter/core.rb', line 161
def select_rows(statement, name = nil)
[].tap do
self.execution_log << Statement.new(entry_point, statement)
end
end
|
#select_value(statement, name = nil, binds = []) ⇒ Object
200
201
202
203
204
|
# File 'lib/active_record/connection_adapters/nulldb_adapter/core.rb', line 200
def select_value(statement, name=nil, binds = [])
with_entry_point(:select_value) do
super(statement, name)
end
end
|
#select_values(statement, name = nil) ⇒ Object
206
207
208
209
210
|
# File 'lib/active_record/connection_adapters/nulldb_adapter/core.rb', line 206
def select_values(statement, name=nil)
with_entry_point(:select_values) do
super(statement, name)
end
end
|
#supports_migrations? ⇒ Boolean
53
54
55
|
# File 'lib/active_record/connection_adapters/nulldb_adapter/core.rb', line 53
def supports_migrations?
true
end
|
Retrieve the table names defined by the schema
116
117
118
|
# File 'lib/active_record/connection_adapters/nulldb_adapter/core.rb', line 116
def tables
@tables.keys.map(&:to_s)
end
|
#update(statement, name = nil, binds = []) ⇒ Object
176
177
178
179
180
|
# File 'lib/active_record/connection_adapters/nulldb_adapter/core.rb', line 176
def update(statement, name=nil, binds = [])
with_entry_point(:update) do
super(statement, name)
end
end
|