class ObjectFramework::SQLite::Transaction
Public Class Methods
Source
# File lib/object_framework/sqlite/storage.rb, line 140 def initialize(database:, schema:, mode:, cancellation:, closed:) super(mode:) @database, @schema, @cancellation, @closed_callback = database, schema, cancellation, closed @compiler = Compiler.new(schema:) execute(mode == :write ? "BEGIN IMMEDIATE" : "BEGIN DEFERRED") @database.execute("PRAGMA query_only = ON") if mode == :read end
Calls superclass method
ObjectFramework::Persistence::Transaction::new
Public Instance Methods
Source
# File lib/object_framework/sqlite/storage.rb, line 195 def commit active! begin execute("COMMIT") @state = :committed rescue StandardError @state = :indeterminate unless @database.transaction_active? raise end end
Source
# File lib/object_framework/sqlite/storage.rb, line 148 def configuration active! %i[foreign_keys journal_mode synchronous].to_h { |name| [name, @database.get_first_value("PRAGMA #{name}")] } end
Source
# File lib/object_framework/sqlite/storage.rb, line 188 def delete(table, id) writable! @schema.table(table) execute("DELETE FROM #{@schema.quote(table)} WHERE \"id\" = ?", [id]) raise NotFound, "Unknown identity" if @database.changes.zero? end
Source
# File lib/object_framework/sqlite/storage.rb, line 153 def find(table, id) query(Persistence::Query.new(table:).where(id:).limit(1)).first end
Source
# File lib/object_framework/sqlite/storage.rb, line 163 def insert(table, row) writable! value = row_value(row) @schema.table(table) columns = value.keys bindings = columns.map { |column| @compiler.encode(table, column, value[column]) } execute("INSERT INTO #{@schema.quote(table)} (#{columns.map { |column| @schema.quote(column) }.join(', ')}) VALUES (#{(['?'] * columns.size).join(', ')})", bindings) value[:id] end
Source
# File lib/object_framework/sqlite/storage.rb, line 157 def query(query) active! sql, bindings = @compiler.query(query) execute(sql, bindings).map { |row| @compiler.decode(query.table, row) } end
Source
# File lib/object_framework/sqlite/storage.rb, line 173 def update(table, id, row) writable! value = row_value(row, id:) @schema.table(table) columns = @schema.table(table).keys - [:id] if columns.empty? raise NotFound, "Unknown identity" unless find(table, id) return end values = columns.map { |column| @compiler.encode(table, column, value[column]) } sql = "UPDATE #{@schema.quote(table)} SET #{columns.map { |column| "#{@schema.quote(column)} = ?" }.join(', ')} WHERE \"id\" = ?" execute(sql, values + [id]) raise NotFound, "Unknown identity" if @database.changes.zero? end