From d04bd384095b11526f6bf259514c0f963220a9b5 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Sun, 30 Aug 2026 20:44:23 +0200 Subject: [PATCH] Tests take the connection parameters from libpq --- .clj-kondo/config.edn | 4 +++- src/babashka/postgres.clj | 13 +++++++++++++ test/babashka/postgres_test.clj | 11 +++-------- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/.clj-kondo/config.edn b/.clj-kondo/config.edn index 7791f3c..65d53e8 100644 --- a/.clj-kondo/config.edn +++ b/.clj-kondo/config.edn @@ -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]}}} diff --git a/src/babashka/postgres.clj b/src/babashka/postgres.clj index b41a000..456f29b 100644 --- a/src/babashka/postgres.clj +++ b/src/babashka/postgres.clj @@ -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) @@ -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]}] diff --git a/test/babashka/postgres_test.clj b/test/babashka/postgres_test.clj index 9d8c0d0..ded62d0 100644 --- a/test/babashka/postgres_test.clj +++ b/test/babashka/postgres_test.clj @@ -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")}]