class MiniSql::Sqlite::Connection

Attributes

deserializer_cache[R]
param_encoder[R]
raw_connection[R]

Public Class Methods

new(raw_connection, args = nil) click to toggle source
# File lib/mini_sql/sqlite/connection.rb, line 8
def initialize(raw_connection, args = nil)
  @raw_connection = raw_connection
  @param_encoder = (args && args[:param_encoder]) || InlineParamEncoder.new(self)
  @deserializer_cache = (args && args[:deserializer_cache]) || DeserializerCache.new
end

Public Instance Methods

escape_string(str) click to toggle source
# File lib/mini_sql/sqlite/connection.rb, line 67
def escape_string(str)
  str.gsub("'", "''")
end
exec(sql, *params) click to toggle source
# File lib/mini_sql/sqlite/connection.rb, line 41
def exec(sql, *params)

  start = raw_connection.total_changes

  r = run(sql, *params)
  # this is not safe for multithreading, also for DELETE from TABLE will return
  # incorrect data
  if r.length > 0
    r.length
  else
    raw_connection.total_changes - start
  end
end
prepared(condition = true) click to toggle source
# File lib/mini_sql/sqlite/connection.rb, line 14
def prepared(condition = true)
  if condition
    @prepared ||= PreparedConnection.new(self)
  else
    self
  end
end
query(sql, *params) click to toggle source
# File lib/mini_sql/sqlite/connection.rb, line 55
def query(sql, *params)
  run(sql, *params) do |set|
    deserializer_cache.materialize(set)
  end
end
query_array(sql, *params) click to toggle source
# File lib/mini_sql/sqlite/connection.rb, line 37
def query_array(sql, *params)
  run(sql, *params)
end
query_decorator(decorator, sql, *params) click to toggle source
# File lib/mini_sql/sqlite/connection.rb, line 61
def query_decorator(decorator, sql, *params)
  run(sql, *params) do |set|
    deserializer_cache.materialize(set, decorator)
  end
end
query_hash(sql, *params) click to toggle source
# File lib/mini_sql/sqlite/connection.rb, line 27
def query_hash(sql, *params)
  r = []
  run(sql, *params) do |set|
    set.each_hash do |h|
      r << h
    end
  end
  r
end
query_single(sql, *params) click to toggle source
# File lib/mini_sql/sqlite/connection.rb, line 22
def query_single(sql, *params)
  # a bit lazy can be optimized
  run(sql, *params).flatten!
end

Private Instance Methods

run(sql, *params) { |execute| ... } click to toggle source
# File lib/mini_sql/sqlite/connection.rb, line 73
def run(sql, *params)
  if params && params.length > 0
    sql = param_encoder.encode(sql, *params)
  end
  if block_given?
    stmt = SQLite3::Statement.new(raw_connection, sql)
    result = yield stmt.execute
    stmt.close
    result
  else
    raw_connection.execute(sql)
  end
end