class SQLite3::Database

Attributes

logging[RW]

Public Class Methods

new(filename) click to toggle source
# File lib/motion-sqlite3/database.rb, line 5
def initialize(filename)
  @handle = Pointer.new(::Sqlite3.type)
  @logging = false

  result = sqlite3_open(filename, @handle)
  raise SQLite3Error, sqlite3_errmsg(@handle.value_with_autorelease) if result != SQLITE_OK
end

Public Instance Methods

execute(sql, params = nil) { |result| ... } click to toggle source
# File lib/motion-sqlite3/database.rb, line 13
def execute(sql, params = nil, &block)
  raise ArgumentError if sql.nil?

  if @logging
    puts "   SQL: #{sql}"
    puts "Params: #{params}" if params && ! params.empty?
  end

  prepare(sql, params) do |statement|
    results = statement.execute

    if block_given?
      results.each do |result|
        yield result
      end
    else
      rows = []

      results.each do |result|
        rows << result
      end

      rows
    end
  end
end
execute_scalar(*args) click to toggle source
# File lib/motion-sqlite3/database.rb, line 40
def execute_scalar(*args)
  execute(*args).first.values.first
end
transaction() { || ... } click to toggle source
# File lib/motion-sqlite3/database.rb, line 44
def transaction(&block)
  execute("BEGIN TRANSACTION")

  begin
    result = yield
  rescue
    execute("ROLLBACK TRANSACTION")
    raise
  end

  execute("COMMIT TRANSACTION")

  result
end

Private Instance Methods

prepare(sql, params) { |statement| ... } click to toggle source
# File lib/motion-sqlite3/database.rb, line 61
def prepare(sql, params, &block)
  statement = Statement.new(@handle, sql, params)
  result = nil

  begin
    result = yield statement

  ensure
    statement.finalize
  end

  result
end