Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .clj-kondo/config.edn
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
{:config-paths ["../resources/clj-kondo.exports/babashka/postgres"]
:lint-as {babashka.postgres-test/with-table clojure.core/with-open}}
:lint-as {babashka.postgres-test/with-table clojure.core/with-open}
;; the tests reach it with #'
:linters {:unused-private-var {:exclude [babashka.postgres/connection-params]}}}
13 changes: 13 additions & 0 deletions src/babashka/postgres.clj
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,11 @@
(defcfn ^:private c-server-version "PQserverVersion" [:pointer] :int)
(defcfn ^:private c-transaction-status "PQtransactionStatus" [:pointer] :int)
(defcfn ^:private c-parameter-status "PQparameterStatus" [:pointer :string] :string)
(defcfn ^:private c-host "PQhost" [:pointer] :string)
(defcfn ^:private c-port "PQport" [:pointer] :string)
(defcfn ^:private c-user "PQuser" [:pointer] :string)
(defcfn ^:private c-pass "PQpass" [:pointer] :string)
(defcfn ^:private c-db "PQdb" [:pointer] :string)
(defcfn ^:private c-get-result "PQgetResult" [:pointer] :pointer)
(defcfn ^:private c-put-copy-end "PQputCopyEnd" [:pointer :string] :int)
(defcfn ^:private c-get-copy-data "PQgetCopyData" [:pointer :pointer :int] :int)
Expand Down Expand Up @@ -175,6 +180,14 @@
(try ~@body
(finally (close! ~sym)))))

(defn- connection-params
"Returns the libpq parameters of an open connection as a map."
[{:keys [conn]}]
(into {}
(filter (fn [[_ v]] (not (str/blank? v))))
{:host (c-host conn) :port (c-port conn) :user (c-user conn)
:password (c-pass conn) :dbname (c-db conn)}))

(defn server-version
"Returns the server version of the connection as a string."
[{:keys [conn]}]
Expand Down
11 changes: 3 additions & 8 deletions test/babashka/postgres_test.clj
Original file line number Diff line number Diff line change
Expand Up @@ -201,17 +201,12 @@
(is (= [{:answer 42}] (pg/query conninfo "select 42 answer"))))
(testing "a map of libpq parameters connects"
(let [db (pg/connect conninfo)
m (try
(first (pg/query db "select host(inet_server_addr()) host,
inet_server_port() port,
current_user \"user\",
current_database() dbname"))
(finally (pg/close! db)))]
m (try (#'pg/connection-params db)
(finally (pg/close! db)))]
(is (= [{:one 1}] (pg/query m "select 1 one")))))
(testing "connect sets DateStyle to ISO when the server default differs"
(let [db (pg/connect conninfo)
m (try (first (pg/query db "select host(inet_server_addr()) host, inet_server_port() port,
current_user \"user\", current_database() dbname"))
m (try (#'pg/connection-params db)
(finally (pg/close! db)))]
(pg/with-conn [db (assoc m :options "-c DateStyle=German,DMY")]
(is (= [{:d (LocalDate/parse "2026-08-30")}]
Expand Down
Loading