Skip to content

Commit 127b0d4

Browse files
committed
Add REPL convenience functions
1 parent 02b0de8 commit 127b0d4

6 files changed

Lines changed: 60 additions & 14 deletions

File tree

deps.edn

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
{:deps {org.clojure/clojure {:mvn/version "1.12.0"}
22
org.duct-framework/database.sql.hikaricp {:mvn/version "0.7.0"}
33
org.duct-framework/migrator.ragtime {:mvn/version "0.5.1"}
4-
integrant/integrant {:mvn/version "0.13.1"}}}
4+
org.duct-framework/repl.refers {:mvn/version "0.1.0"}
5+
integrant/integrant {:mvn/version "0.13.1"}
6+
com.github.seancorfield/next.jdbc {:mvn/version "1.3.967"}}}

project.clj

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,9 @@
66
:dependencies [[org.clojure/clojure "1.12.0"]
77
[org.duct-framework/database.sql.hikaricp "0.7.0"]
88
[org.duct-framework/migrator.ragtime "0.5.1"]
9-
[integrant "0.13.1"]])
9+
[org.duct-framework/repl.refers "0.1.0"]
10+
[integrant "0.13.1"]
11+
[com.github.seancorfield/next.jdbc "1.3.967"]]
12+
:profiles
13+
{:dev {:dependencies [[org.xerial/sqlite-jdbc "3.47.0.0"]
14+
[integrant/repl "0.4.0"]]}})

src/duct/module/sql.clj

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,18 @@
22
(:require [integrant.core :as ig]))
33

44
(defmethod ig/expand-key :duct.module/sql [_ _]
5-
{:duct.database.sql/hikaricp
6-
{:logger (ig/refset :duct/logger)
7-
:jdbcUrl (ig/var 'jdbc-url)}
8-
:duct.migrator/ragtime
9-
{:logger (ig/refset :duct/logger)
10-
:database (ig/ref :duct.database/sql)
11-
:strategy (ig/profile
12-
:main :raise-error
13-
:repl :rebase
14-
:test :rebase)
15-
:migrations-file "migrations.edn"}})
5+
(let [components {:duct.database.sql/hikaricp
6+
{:logger (ig/refset :duct/logger)
7+
:jdbcUrl (ig/var 'jdbc-url)}
8+
:duct.migrator/ragtime
9+
{:logger (ig/refset :duct/logger)
10+
:database (ig/ref :duct.database/sql)
11+
:strategy :rebase
12+
:migrations-file "migrations.edn"}}]
13+
(ig/profile
14+
:main (assoc-in components [:duct.migrator/ragtime :strategy]
15+
:raise-error)
16+
:test components
17+
:repl (assoc components :duct.repl/refers
18+
'{db duct.repl.sql/db
19+
sql duct.repl.sql/sql}))))

src/duct/repl/sql.clj

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
(ns duct.repl.sql
2+
(:require [integrant.core :as ig]
3+
[next.jdbc :as jdbc]))
4+
5+
(defn db
6+
"Get the database from the system map."
7+
[]
8+
(val (ig/find-derived-1
9+
(var-get (requiring-resolve 'integrant.repl.state/system))
10+
:duct.database/sql)))
11+
12+
(defn sql
13+
"Run a string of SQL (plus any extra params) on the database."
14+
[stmt & params]
15+
(jdbc/execute! (db) (into [stmt] params)))

test/duct/module/sql_test.clj

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@
2727
{:database (ig/ref :duct.database/sql)
2828
:logger (ig/refset :duct/logger)
2929
:strategy :rebase
30-
:migrations-file "migrations.edn"}}
30+
:migrations-file "migrations.edn"}
31+
:duct.repl/refers
32+
'{db duct.repl.sql/db
33+
sql duct.repl.sql/sql}}
3134
(-> {:duct.module/sql {}}
3235
(ig/expand (ig/deprofile [:repl]))
3336
(ig/bind {'jdbc-url "jdbc:sqlite:"})))))

test/duct/repl/sql_test.clj

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
(ns duct.repl.sql-test
2+
(:require [clojure.test :refer [deftest is]]
3+
[duct.repl.sql :as sql]
4+
[integrant.core :as ig]
5+
[integrant.repl :as igrepl]))
6+
7+
(deftest test-user-fns
8+
(let [tempfile (java.io.File/createTempFile "duct-test" ".sqlite")
9+
config (-> {:duct.module/sql {}}
10+
(ig/expand (ig/deprofile [:repl]))
11+
(ig/bind {'jdbc-url (str "jdbc:sqlite:" tempfile)}))]
12+
(ig/load-namespaces config)
13+
(igrepl/set-prep! (fn [] config))
14+
(igrepl/go)
15+
(is (= [{:foo 1}]
16+
(sql/sql "SELECT 1 AS foo")))
17+
(igrepl/halt)))

0 commit comments

Comments
 (0)