mirror of
https://gitea.invidious.io/iv-org/shard-crystal-db.git
synced 2024-08-15 00:53:32 +00:00
column_count and column_names
close result_set and statements main entry points for exec_non_query and exec_query closing them when ready
This commit is contained in:
parent
e50cc4ec73
commit
caf2676aad
4 changed files with 56 additions and 0 deletions
|
@ -40,6 +40,14 @@ class DummyDriver < DB::Driver
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def column_count
|
||||||
|
2
|
||||||
|
end
|
||||||
|
|
||||||
|
def column_name(index)
|
||||||
|
"c#{index}"
|
||||||
|
end
|
||||||
|
|
||||||
private def read? : DB::Any?
|
private def read? : DB::Any?
|
||||||
n = @values.not_nil!.next
|
n = @values.not_nil!.next
|
||||||
raise "end of row" if n.is_a?(Iterator::Stop)
|
raise "end of row" if n.is_a?(Iterator::Stop)
|
||||||
|
|
|
@ -9,12 +9,35 @@ module DB
|
||||||
@driver = @driver_class.new(@options)
|
@driver = @driver_class.new(@options)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# :nodoc:
|
||||||
def prepare(query)
|
def prepare(query)
|
||||||
@driver.prepare(query)
|
@driver.prepare(query)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# :nodoc:
|
||||||
def exec(query, *args)
|
def exec(query, *args)
|
||||||
prepare(query).exec(*args)
|
prepare(query).exec(*args)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def exec_non_query(query, *args)
|
||||||
|
exec_query(query) do |result_set|
|
||||||
|
result_set.move_next
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# :nodoc:
|
||||||
|
def exec_query(query, *args)
|
||||||
|
result_set = exec(query, *args)
|
||||||
|
yield result_set
|
||||||
|
result_set.close
|
||||||
|
end
|
||||||
|
|
||||||
|
def exec_query_each(query, *args)
|
||||||
|
exec_query(query) do |result_set|
|
||||||
|
result_set.each do
|
||||||
|
yield result_set
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,8 +11,17 @@ module DB
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def close
|
||||||
|
@statement.close
|
||||||
|
end
|
||||||
|
|
||||||
abstract def move_next : Bool
|
abstract def move_next : Bool
|
||||||
|
|
||||||
|
abstract def column_count : Int32
|
||||||
|
abstract def column_name(index : Int32) : String
|
||||||
|
|
||||||
|
# abstract def column_type(index : Int32)
|
||||||
|
|
||||||
# list datatypes that must be supported form the driver
|
# list datatypes that must be supported form the driver
|
||||||
# users will call read(String) or read?(String) for nillables
|
# users will call read(String) or read?(String) for nillables
|
||||||
{% for t in DB::TYPES %}
|
{% for t in DB::TYPES %}
|
||||||
|
|
|
@ -3,6 +3,7 @@ module DB
|
||||||
getter driver
|
getter driver
|
||||||
|
|
||||||
def initialize(@driver)
|
def initialize(@driver)
|
||||||
|
@closed = false
|
||||||
end
|
end
|
||||||
|
|
||||||
def exec(*args) : ResultSet
|
def exec(*args) : ResultSet
|
||||||
|
@ -32,9 +33,24 @@ module DB
|
||||||
protected def before_execute
|
protected def before_execute
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Closes this statement.
|
||||||
|
def close
|
||||||
|
raise "Statement already closed" if @closed
|
||||||
|
@closed = true
|
||||||
|
on_close
|
||||||
|
end
|
||||||
|
|
||||||
|
# Returns `true` if this statement is closed. See `#close`.
|
||||||
|
def closed?
|
||||||
|
@closed
|
||||||
|
end
|
||||||
|
|
||||||
# 1-based positional arguments
|
# 1-based positional arguments
|
||||||
protected abstract def add_parameter(index : Int32, value)
|
protected abstract def add_parameter(index : Int32, value)
|
||||||
protected abstract def add_parameter(name : String, value)
|
protected abstract def add_parameter(name : String, value)
|
||||||
|
|
||||||
protected abstract def execute : ResultSet
|
protected abstract def execute : ResultSet
|
||||||
|
protected def on_close
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue