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.
-
#execute(raw) ⇒ Object
private
Executes raw sql directly on the connection.
-
#initialize(mapper, uri) ⇒ 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) ⇒ 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
44 45 46 47 48 49 |
# File 'lib/lotus/model/adapters/sql_adapter.rb', line 44 def initialize(mapper, uri) super @connection = Sequel.connect(@uri) 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.
101 102 103 |
# File 'lib/lotus/model/adapters/sql_adapter.rb', line 101 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.
116 117 118 |
# File 'lib/lotus/model/adapters/sql_adapter.rb', line 116 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.
226 227 228 |
# File 'lib/lotus/model/adapters/sql_adapter.rb', line 226 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.
61 62 63 64 65 |
# File 'lib/lotus/model/adapters/sql_adapter.rb', line 61 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.
89 90 91 92 93 |
# File 'lib/lotus/model/adapters/sql_adapter.rb', line 89 def delete(collection, entity) command( _find(collection, entity.id) ).delete end |
#execute(raw) ⇒ 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.
Executes raw sql directly on the connection
239 240 241 242 243 244 245 |
# File 'lib/lotus/model/adapters/sql_adapter.rb', line 239 def execute(raw) begin @connection.execute(raw) rescue Sequel::DatabaseError => e raise Lotus::Model::InvalidQueryError.new(e.) end 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
132 133 134 |
# File 'lib/lotus/model/adapters/sql_adapter.rb', line 132 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.
213 214 215 216 217 |
# File 'lib/lotus/model/adapters/sql_adapter.rb', line 213 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.
76 77 78 79 80 |
# File 'lib/lotus/model/adapters/sql_adapter.rb', line 76 def update(collection, entity) command( _find(collection, entity.id) ).update(entity) end |