mirror of
https://gitea.invidious.io/iv-org/shard-crystal-db.git
synced 2024-08-15 00:53:32 +00:00
allow scalar to return custom types
This commit is contained in:
parent
34ae9d5775
commit
b2da4f3f6e
3 changed files with 9 additions and 20 deletions
|
@ -197,6 +197,13 @@ describe DB do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "drivers should return custom values as scalar" do
|
||||||
|
DB.open("foo://host") do |db|
|
||||||
|
FooDriver.fake_row = [FooValue.new(3), FooValue.new(99)] of FooDriver::Any
|
||||||
|
db.scalar("query").as(FooValue).value.should eq(3)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
it "Foo and Bar drivers should not implement each other read" do
|
it "Foo and Bar drivers should not implement each other read" do
|
||||||
with_witness do |w|
|
with_witness do |w|
|
||||||
DB.open("foo://host") do |db|
|
DB.open("foo://host") do |db|
|
||||||
|
|
|
@ -4,7 +4,7 @@ module DB
|
||||||
#
|
#
|
||||||
# Three kind of statements can be performed:
|
# Three kind of statements can be performed:
|
||||||
# 1. `#exec` waits no record response from the database. An `ExecResult` is returned.
|
# 1. `#exec` waits no record response from the database. An `ExecResult` is returned.
|
||||||
# 2. `#scalar` reads a single value of the response. A `DB::Any` is returned.
|
# 2. `#scalar` reads a single value of the response. A union of possible values is returned.
|
||||||
# 3. `#query` returns a `ResultSet` that allows iteration over the rows in the response and column information.
|
# 3. `#query` returns a `ResultSet` that allows iteration over the rows in the response and column information.
|
||||||
#
|
#
|
||||||
# Arguments can be passed by position
|
# Arguments can be passed by position
|
||||||
|
|
|
@ -45,25 +45,7 @@ module DB
|
||||||
def scalar(*args)
|
def scalar(*args)
|
||||||
query(*args) do |rs|
|
query(*args) do |rs|
|
||||||
rs.each do
|
rs.each do
|
||||||
# return case rs.read?(rs.column_type(0)) # :-( Some day...
|
return rs.read?(rs.column_type(0))
|
||||||
case rs.column_type(0)
|
|
||||||
when String.class
|
|
||||||
return rs.read?(String)
|
|
||||||
when Int32.class
|
|
||||||
return rs.read?(Int32)
|
|
||||||
when Int64.class
|
|
||||||
return rs.read?(Int64)
|
|
||||||
when Float32.class
|
|
||||||
return rs.read?(Float32)
|
|
||||||
when Float64.class
|
|
||||||
return rs.read?(Float64)
|
|
||||||
when Bytes.class
|
|
||||||
return rs.read?(Bytes)
|
|
||||||
when Nil.class
|
|
||||||
return rs.read?(Int32)
|
|
||||||
else
|
|
||||||
raise "not implemented for #{rs.column_type(0)} type"
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue