class MicroSql

Public Instance Methods

ask(sql, *args) click to toggle source
# File lib/micro_sql.rb, line 36
def ask(sql, *args)
  results = execute :ask, sql, *args
  format_results_for_ask(results)
end
create(url) click to toggle source
# File lib/micro_sql.rb, line 24
def create(url)
  scheme = URI.parse(url).scheme
  klass_name = if !scheme
    "MicroSql::SqliteAdapter"
  else
    "MicroSql::#{scheme[0...1].upcase}#{scheme[1..-1]}Adapter"
  end

  eval(klass_name).send(:new, url)
end
exec(sql, *args) click to toggle source
# File lib/micro_sql.rb, line 45
def exec(sql, *args)
  execute :prepare, sql, *args
end
exec!(sql, *args) click to toggle source
# File lib/micro_sql.rb, line 41
def exec!(sql, *args)
  execute :no_prepare, sql, *args
end
insert(table, *values) click to toggle source
# File lib/micro_sql.rb, line 80
def insert(table, *values)
  hashes, arrays = values.partition do |value| value.is_a?(Hash) end

  id1 = insert_array_values(table, arrays)
  id2 = insert_hash_values(table, hashes)
  
  id1 || id2
end
key_value_table(name) click to toggle source
# File lib/micro_sql.rb, line 141
def key_value_table(name)
  @key_value_tables ||= Hash.new { |hash, key|
    hash[key] = MicroSql::KeyValueTable.new(self, key)
  }

  @key_value_tables[name] 
end
rollback!() click to toggle source
# File lib/micro_sql.rb, line 74
def rollback!
  raise RollbackException
end
table(sql_or_name) click to toggle source
# File lib/micro_sql.rb, line 123
def table(sql_or_name)
  @tables ||= {}

  return table_from_name(sql_or_name) if sql_or_name !~ /\s/

  table = Table.new(self, sql_or_name)
  @tables[table.table_name] = table 
end
tables() click to toggle source
# File lib/micro_sql.rb, line 119
def tables
  raise "Implementation missing: #{self.class}#tables"
end
transaction() { || ... } click to toggle source
# File lib/micro_sql.rb, line 64
def transaction(&block)
  r = nil
  @impl.transaction do
    r = yield
  end
  r
rescue RollbackException
  nil
end

Private Instance Methods

format_results_for_ask(results) click to toggle source
# File lib/micro_sql.rb, line 51
def format_results_for_ask(results)
  return results unless results.is_a?(Array)

  results = results.first

  return results unless results.is_a?(Array)
  return results if results.length != 1

  results.first
end
insert_array_values(table, values) click to toggle source
# File lib/micro_sql.rb, line 91
def insert_array_values(table, values)
  width = values.map(&:length).max
  return if width == 0 || width == nil
  
  sql = insert_sql(table, width, nil)
  values.inject(0) do |r, value|
    exec sql, *value
  end
end
insert_hash_values(table, values) click to toggle source
# File lib/micro_sql.rb, line 101
def insert_hash_values(table, values)
  keys = values.map(&:keys).flatten.uniq
  return if keys.empty?

  sql = insert_sql(table, keys.length, keys)
  values.inject(0) do |r, rec|
    exec sql, *rec.values_at(*keys)
  end
end
insert_sql(table, width, keys = nil) click to toggle source
# File lib/micro_sql.rb, line 111
def insert_sql(table, width, keys = nil)
  sql = "INSERT INTO #{table}"
  sql += "(#{keys.join(",")})" if keys
  sql += " VALUES(" + ([ "?" ] * width).join(",") + ")"
end
prepare(sql) click to toggle source
# File lib/micro_sql.rb, line 161
def prepare(sql)
  key = sql
  prepared_queries.fetch(key)
rescue KeyError
  prepared_queries[key] = prepare_query(key, sql) 
end
prepared_queries() click to toggle source
# File lib/micro_sql.rb, line 153
def prepared_queries
  @prepared_queries ||= {}
end
table_from_name(name) click to toggle source
# File lib/micro_sql.rb, line 134
def table_from_name(name)
  @tables[name] ||= Table.new(self, name)
rescue RuntimeError
end
unprepare(key) click to toggle source
# File lib/micro_sql.rb, line 157
def unprepare(key)
  @prepared_queries.delete key
end