Skip to content

Commit f41f9e6

Browse files
committed
feat (Repository): #db can be DB::Database or DB::Connection
It allows to use temporary connections, e.g. in transctions
1 parent e1b899c commit f41f9e6

2 files changed

Lines changed: 16 additions & 4 deletions

File tree

spec/repository_spec.cr

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ module Onyx::SQL
6262
class Repository
6363
def initialize(@db : MockDB, @logger = Onyx::SQL::Repository::Logger::Dummy.new)
6464
end
65+
66+
protected def db_driver
67+
db.driver
68+
end
6569
end
6670
end
6771

src/onyx-sql/repository.cr

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,14 @@ module Onyx::SQL
2222
# # 442μs
2323
# ```
2424
class Repository
25-
# A `DB::Database` instance for this repository.
25+
# A `::DB::Database | ::DB::Connection` instance for this repository.
2626
property db
2727

2828
# A `Repository::Logger` instance for this repository.
2929
property logger
3030

3131
# Initialize the repository.
32-
def initialize(@db : DB::Database, @logger : Logger = Logger::Standard.new)
32+
def initialize(@db : ::DB::Database | ::DB::Connection, @logger : Logger = Logger::Standard.new)
3333
end
3434

3535
protected def postgresql?
@@ -45,7 +45,7 @@ module Onyx::SQL
4545
# If the `#db` driver is `PG::Driver`, replace all `?` with `$1`, `$2` etc. Otherwise return *sql_query* untouched.
4646
def prepare_query(sql_query : String)
4747
{% begin %}
48-
case db.driver
48+
case db_driver
4949
{% if Object.all_subclasses.any? { |sc| sc.stringify == "PG::Driver" } %}
5050
when PG::Driver
5151
counter = 0
@@ -59,7 +59,7 @@ module Onyx::SQL
5959
# Return `#db` driver name, e.g. `"postgresql"` for `PG::Driver`.
6060
def driver
6161
{% begin %}
62-
case db.driver
62+
case db_driver
6363
{% if Object.all_subclasses.any? { |sc| sc.stringify == "PG::Driver" } %}
6464
when PG::Driver then "postgresql"
6565
{% end %}
@@ -70,5 +70,13 @@ module Onyx::SQL
7070
end
7171
{% end %}
7272
end
73+
74+
protected def db_driver
75+
if db.is_a?(::DB::Database)
76+
db.as(::DB::Database).driver
77+
else
78+
db.as(::DB::Connection).context.as(::DB::Database).driver
79+
end
80+
end
7381
end
7482
end

0 commit comments

Comments
 (0)