Class: Lotus::Model::Adapters::SqlAdapter Private
- Includes:
- Implementation
- Defined in:
- lib/lotus/model/adapters/sql_adapter.rb
Overview
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
Adapter for SQL databases
In order to use it with a specific database, you must require the Ruby gem before of loading Lotus::Model.
Instance Method Summary collapse
-
#clear(collection) ⇒ Object
private
Deletes all the records from the given collection.
-
#command(query) ⇒ Lotus::Model::Adapters::Sql::Command
private
Fabricates a command for the given query.
-
#connection_string ⇒ String
private
Returns a string which can be executed to start a console suitable for the configured database, adding the necessary CLI flags, such as url, password, port number etc.
-
#create(collection, entity) ⇒ Object
private
Creates a record in the database for the given entity.
-
#delete(collection, entity) ⇒ Object
private
Deletes a record in the database corresponding to the given entity.
- #disconnect ⇒ Object private
-
#execute(raw) ⇒ NilClass
private
Executes a raw SQL command.
-
#fetch(raw, &blk) ⇒ Array
private
Fetches raw result sets for the given SQL query.
-
#initialize(mapper, uri, options = {}) ⇒ Lotus::Model::Adapters::SqlAdapter
constructor
private
Initialize the adapter.
-
#query(collection, context = nil, &blk) ⇒ Lotus::Model::Adapters::Sql::Query
private
Fabricates a query.
-
#transaction(options = {}) ⇒ Object
private
Wraps the given block in a transaction.
-
#update(collection, entity) ⇒ Object
private
Updates a record in the database corresponding to the given entity.
Methods included from Implementation
#all, #find, #first, #last, #persist
Methods inherited from Abstract
#all, #find, #first, #last, #persist
Constructor Details
#initialize(mapper, uri, options = {}) ⇒ Lotus::Model::Adapters::SqlAdapter
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Initialize the adapter.
Lotus::Model uses Sequel. For a complete reference of the connection URI, please see: sequel.jeremyevans.net/rdoc/files/doc/opening_databases_rdoc.html
45 46 47 48 49 50 |
# File 'lib/lotus/model/adapters/sql_adapter.rb', line 45 def initialize(mapper, uri, = {}) super @connection = Sequel.connect(@uri, @options) rescue Sequel::AdapterNotFound => e raise DatabaseAdapterNotFound.new(e.) end |
Instance Method Details
#clear(collection) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Deletes all the records from the given collection.
102 103 104 |
# File 'lib/lotus/model/adapters/sql_adapter.rb', line 102 def clear(collection) command(query(collection)).clear end |
#command(query) ⇒ Lotus::Model::Adapters::Sql::Command
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Fabricates a command for the given query.
117 118 119 |
# File 'lib/lotus/model/adapters/sql_adapter.rb', line 117 def command(query) Sql::Command.new(query) end |
#connection_string ⇒ String
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a string which can be executed to start a console suitable for the configured database, adding the necessary CLI flags, such as url, password, port number etc.
227 228 229 |
# File 'lib/lotus/model/adapters/sql_adapter.rb', line 227 def connection_string Sql::Console.new(@uri).connection_string end |
#create(collection, entity) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Creates a record in the database for the given entity. It assigns the ‘id` attribute, in case of success.
62 63 64 65 66 |
# File 'lib/lotus/model/adapters/sql_adapter.rb', line 62 def create(collection, entity) command( query(collection) ).create(entity) end |
#delete(collection, entity) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Deletes a record in the database corresponding to the given entity.
90 91 92 93 94 |
# File 'lib/lotus/model/adapters/sql_adapter.rb', line 90 def delete(collection, entity) command( _find(collection, entity.id) ).delete end |
#disconnect ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
273 274 275 276 |
# File 'lib/lotus/model/adapters/sql_adapter.rb', line 273 def disconnect @connection.disconnect @connection = DisconnectedResource.new end |
#execute(raw) ⇒ NilClass
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Executes a raw SQL command
240 241 242 243 244 245 246 247 |
# File 'lib/lotus/model/adapters/sql_adapter.rb', line 240 def execute(raw) begin @connection.execute(raw) nil rescue Sequel::DatabaseError => e raise Lotus::Model::InvalidCommandError.new(e.) end end |
#fetch(raw, &blk) ⇒ Array
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Fetches raw result sets for the given SQL query
259 260 261 262 263 264 265 266 267 |
# File 'lib/lotus/model/adapters/sql_adapter.rb', line 259 def fetch(raw, &blk) if block_given? @connection.fetch(raw, &blk) else @connection.fetch(raw).to_a end rescue Sequel::DatabaseError => e raise Lotus::Model::InvalidQueryError.new(e.) end |
#query(collection, context = nil, &blk) ⇒ Lotus::Model::Adapters::Sql::Query
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Fabricates a query
133 134 135 |
# File 'lib/lotus/model/adapters/sql_adapter.rb', line 133 def query(collection, context = nil, &blk) Sql::Query.new(_collection(collection), context, &blk) end |
#transaction(options = {}) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Wraps the given block in a transaction.
For performance reasons the block isn’t in the signature of the method, but it’s yielded at the lower level.
214 215 216 217 218 |
# File 'lib/lotus/model/adapters/sql_adapter.rb', line 214 def transaction( = {}) @connection.transaction() do yield end end |
#update(collection, entity) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Updates a record in the database corresponding to the given entity.
77 78 79 80 81 |
# File 'lib/lotus/model/adapters/sql_adapter.rb', line 77 def update(collection, entity) command( _find(collection, entity.id) ).update(entity) end |