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