From 9372ce11cdcf18e7874fab1106abc0616ea4ee42 Mon Sep 17 00:00:00 2001 From: Sean Corfield Date: Wed, 24 Jul 2019 17:32:58 -0700 Subject: [PATCH] Fix #50 by testing against (embedded) PostgreSQL This is the first database that returns lowercase columns in results so there are a lot of conditionals in the tests now. It also returns entire rows on inserts instead of just the generated key. --- CHANGELOG.md | 2 +- deps.edn | 1 + doc/getting-started.md | 2 +- test/next/jdbc/optional_test.clj | 20 ++--- test/next/jdbc/prepare_test.clj | 4 +- test/next/jdbc/result_set_test.clj | 49 +++++------ test/next/jdbc/sql_test.clj | 133 +++++++++++++++-------------- test/next/jdbc/test_fixtures.clj | 24 +++++- test/next/jdbc_test.clj | 24 +++--- 9 files changed, 138 insertions(+), 121 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5311fa5..024918e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ Only accretive/fixative changes will be made from now on. The following changes have been committed to the **master** branch since the 1.0.3 release: -* None. +* Fix #50 by adding machinery to test against (embedded) PostgreSQL! ## Stable Builds diff --git a/deps.edn b/deps.edn index 97df3db..3aa36a6 100644 --- a/deps.edn +++ b/deps.edn @@ -14,6 +14,7 @@ net.sourceforge.jtds/jtds {:mvn/version "1.3.1"} mysql/mysql-connector-java {:mvn/version "5.1.41"} ; behind org.postgresql/postgresql {:mvn/version "42.2.6"} + com.opentable.components/otj-pg-embedded {:mvn/version "0.13.1"} com.impossibl.pgjdbc-ng/pgjdbc-ng {:mvn/version "0.8.2"} org.xerial/sqlite-jdbc {:mvn/version "3.28.0"} com.microsoft.sqlserver/mssql-jdbc {:mvn/version "7.2.2.jre8"}}} diff --git a/doc/getting-started.md b/doc/getting-started.md index c934d5a..1f3945f 100644 --- a/doc/getting-started.md +++ b/doc/getting-started.md @@ -18,7 +18,7 @@ for `deps.edn` or: ``` for `project.clj` or `build.boot`. -In addition, you will need to add dependencies for the JDBC drivers you wish to use for whatever databases you are using. You can see the drivers and versions that `next.jdbc` is tested against in [the project's `deps.edn` file](https://github.com/seancorfield/next-jdbc/blob/master/deps.edn#L11-L19), but many other JDBC drivers for other databases should also work (e.g., Oracle, Red Shift). +In addition, you will need to add dependencies for the JDBC drivers you wish to use for whatever databases you are using. You can see the drivers and versions that `next.jdbc` is tested against in [the project's `deps.edn` file](https://github.com/seancorfield/next-jdbc/blob/master/deps.edn#L11-L20), but many other JDBC drivers for other databases should also work (e.g., Oracle, Red Shift). ## An Example REPL Session diff --git a/test/next/jdbc/optional_test.clj b/test/next/jdbc/optional_test.clj index 7b64763..67d8a56 100644 --- a/test/next/jdbc/optional_test.clj +++ b/test/next/jdbc/optional_test.clj @@ -6,7 +6,7 @@ [clojure.test :refer [deftest is testing use-fixtures]] [next.jdbc.optional :as opt] [next.jdbc.protocols :as p] - [next.jdbc.test-fixtures :refer [with-test-db ds]])) + [next.jdbc.test-fixtures :refer [with-test-db ds postgres?]])) (set! *warn-on-reflection* true) @@ -18,17 +18,17 @@ ["select * from fruit where id = ?" 1] {:builder-fn opt/as-maps})] (is (map? row)) - (is (not (contains? row :FRUIT/GRADE))) - (is (= 1 (:FRUIT/ID row))) - (is (= "Apple" (:FRUIT/NAME row))))) + (is (not (contains? row (if (postgres?) :fruit/grade :FRUIT/GRADE)))) + (is (= 1 ((if (postgres?) :fruit/id :FRUIT/ID) row))) + (is (= "Apple" ((if (postgres?) :fruit/name :FRUIT/NAME) row))))) (testing "unqualified row builder" (let [row (p/-execute-one (ds) ["select * from fruit where id = ?" 2] {:builder-fn opt/as-unqualified-maps})] (is (map? row)) - (is (not (contains? row :COST))) - (is (= 2 (:ID row))) - (is (= "Banana" (:NAME row))))) + (is (not (contains? row (if (postgres?) :cost :COST)))) + (is (= 2 ((if (postgres?) :id :ID) row))) + (is (= "Banana" ((if (postgres?) :name :NAME) row))))) (testing "lower-case row builder" (let [row (p/-execute-one (ds) ["select * from fruit where id = ?" 3] @@ -51,6 +51,6 @@ :label-fn str/lower-case :qualifier-fn identity})] (is (map? row)) - (is (not (contains? row :FRUIT/appearance))) - (is (= 3 (:FRUIT/id row))) - (is (= "Peach" (:FRUIT/name row)))))) + (is (not (contains? row (if (postgres?) :fruit/appearance :FRUIT/appearance)))) + (is (= 3 ((if (postgres?) :fruit/id :FRUIT/id) row))) + (is (= "Peach" ((if (postgres?) :fruit/name :FRUIT/name) row)))))) diff --git a/test/next/jdbc/prepare_test.clj b/test/next/jdbc/prepare_test.clj index b01304c..5f45666 100644 --- a/test/next/jdbc/prepare_test.clj +++ b/test/next/jdbc/prepare_test.clj @@ -8,7 +8,7 @@ `execute-batch!` here." (:require [clojure.test :refer [deftest is testing use-fixtures]] [next.jdbc :as jdbc] - [next.jdbc.test-fixtures :refer [with-test-db ds sqlite?]] + [next.jdbc.test-fixtures :refer [with-test-db ds postgres? sqlite?]] [next.jdbc.prepare :as prep] [next.jdbc.specs :as specs])) @@ -73,7 +73,7 @@ INSERT INTO fruit (name, appearance) VALUES (?,?) (conj result (count (jdbc/execute! t ["select * from fruit"])))))))) (is (= 4 (count (jdbc/execute! (ds) ["select * from fruit"]))))) (testing "large batch insert" - (when-not (sqlite?) + (when-not (or (postgres?) (sqlite?)) (is (= [1 1 1 1 1 1 1 1 1 13] (jdbc/with-transaction [t (ds) {:rollback-only true}] (with-open [ps (jdbc/prepare t [" diff --git a/test/next/jdbc/result_set_test.clj b/test/next/jdbc/result_set_test.clj index ad592f1..9937d7f 100644 --- a/test/next/jdbc/result_set_test.clj +++ b/test/next/jdbc/result_set_test.clj @@ -11,7 +11,7 @@ [clojure.test :refer [deftest is testing use-fixtures]] [next.jdbc.protocols :as p] [next.jdbc.result-set :as rs] - [next.jdbc.test-fixtures :refer [with-test-db ds]]) + [next.jdbc.test-fixtures :refer [with-test-db ds postgres?]]) (:import (java.sql ResultSet ResultSetMetaData))) (set! *warn-on-reflection* true) @@ -28,9 +28,8 @@ (is (= 1 v)) (let [object (d/nav data :table/fruit_id v)] ;; check nav produces a single map with the expected key/value data - ;; and remember H2 is all UPPERCASE! - (is (= 1 (:FRUIT/ID object))) - (is (= "Apple" (:FRUIT/NAME object)))))) + (is (= 1 ((if (postgres?) :fruit/id :FRUIT/ID) object))) + (is (= "Apple" ((if (postgres?) :fruit/name :FRUIT/NAME) object)))))) (testing "custom schema :one" (let [connectable (ds) test-row (rs/datafiable-row {:foo/bar 2} connectable @@ -41,9 +40,8 @@ (is (= 2 v)) (let [object (d/nav data :foo/bar v)] ;; check nav produces a single map with the expected key/value data - ;; and remember H2 is all UPPERCASE! - (is (= 2 (:FRUIT/ID object))) - (is (= "Banana" (:FRUIT/NAME object)))))) + (is (= 2 ((if (postgres?) :fruit/id :FRUIT/ID) object))) + (is (= "Banana" ((if (postgres?) :fruit/name :FRUIT/NAME) object)))))) (testing "custom schema :many" (let [connectable (ds) test-row (rs/datafiable-row {:foo/bar 3} connectable @@ -54,10 +52,9 @@ (is (= 3 v)) (let [object (d/nav data :foo/bar v)] ;; check nav produces a result set with the expected key/value data - ;; and remember H2 is all UPPERCASE! (is (vector? object)) - (is (= 3 (:FRUIT/ID (first object)))) - (is (= "Peach" (:FRUIT/NAME (first object)))))))) + (is (= 3 ((if (postgres?) :fruit/id :FRUIT/ID) (first object)))) + (is (= "Peach" ((if (postgres?) :fruit/name :FRUIT/NAME) (first object)))))))) (deftest test-map-row-builder (testing "default row builder" @@ -65,27 +62,27 @@ ["select * from fruit where id = ?" 1] {})] (is (map? row)) - (is (contains? row :FRUIT/GRADE)) - (is (nil? (:FRUIT/GRADE row))) - (is (= 1 (:FRUIT/ID row))) - (is (= "Apple" (:FRUIT/NAME row)))) + (is (contains? row (if (postgres?) :fruit/grade :FRUIT/GRADE))) + (is (nil? ((if (postgres?) :fruit/grade :FRUIT/GRADE) row))) + (is (= 1 ((if (postgres?) :fruit/id :FRUIT/ID) row))) + (is (= "Apple" ((if (postgres?) :fruit/name :FRUIT/NAME) row)))) (let [rs (p/-execute-all (ds) ["select * from fruit order by id"] {})] (is (every? map? rs)) - (is (= 1 (:FRUIT/ID (first rs)))) - (is (= "Apple" (:FRUIT/NAME (first rs)))) - (is (= 4 (:FRUIT/ID (last rs)))) - (is (= "Orange" (:FRUIT/NAME (last rs)))))) + (is (= 1 ((if (postgres?) :fruit/id :FRUIT/ID) (first rs)))) + (is (= "Apple" ((if (postgres?) :fruit/name :FRUIT/NAME) (first rs)))) + (is (= 4 ((if (postgres?) :fruit/id :FRUIT/ID) (last rs)))) + (is (= "Orange" ((if (postgres?) :fruit/name :FRUIT/NAME) (last rs)))))) (testing "unqualified row builder" (let [row (p/-execute-one (ds) ["select * from fruit where id = ?" 2] {:builder-fn rs/as-unqualified-maps})] (is (map? row)) - (is (contains? row :COST)) - (is (nil? (:COST row))) - (is (= 2 (:ID row))) - (is (= "Banana" (:NAME row))))) + (is (contains? row (if (postgres?) :cost :COST))) + (is (nil? ((if (postgres?) :cost :COST) row))) + (is (= 2 ((if (postgres?) :id :ID) row))) + (is (= "Banana" ((if (postgres?) :name :NAME) row))))) (testing "lower-case row builder" (let [row (p/-execute-one (ds) ["select * from fruit where id = ?" 3] @@ -109,10 +106,10 @@ :label-fn str/lower-case :qualifier-fn identity})] (is (map? row)) - (is (contains? row :FRUIT/appearance)) - (is (nil? (:FRUIT/appearance row))) - (is (= 3 (:FRUIT/id row))) - (is (= "Peach" (:FRUIT/name row)))))) + (is (contains? row (if (postgres?) :fruit/appearance :FRUIT/appearance))) + (is (nil? ((if (postgres?) :fruit/appearance :FRUIT/appearance) row))) + (is (= 3 ((if (postgres?) :fruit/id :FRUIT/id) row))) + (is (= "Peach" ((if (postgres?) :fruit/name :FRUIT/name) row)))))) (deftest test-mapify (testing "no row builder is used" diff --git a/test/next/jdbc/sql_test.clj b/test/next/jdbc/sql_test.clj index ea89850..d346e66 100644 --- a/test/next/jdbc/sql_test.clj +++ b/test/next/jdbc/sql_test.clj @@ -9,7 +9,7 @@ [next.jdbc.specs :as specs] [next.jdbc.sql :as sql] [next.jdbc.test-fixtures - :refer [with-test-db ds derby? sqlite?]])) + :refer [with-test-db ds derby? postgres? sqlite?]])) (set! *warn-on-reflection* true) @@ -82,33 +82,33 @@ (is (= 4 (count rs))) (is (every? map? rs)) (is (every? meta rs)) - (is (= 1 (:FRUIT/ID (first rs)))) - (is (= 4 (:FRUIT/ID (last rs)))))) + (is (= 1 ((if (postgres?) :fruit/id :FRUIT/ID) (first rs)))) + (is (= 4 ((if (postgres?) :fruit/id :FRUIT/ID) (last rs)))))) (deftest test-find-by-keys (let [rs (sql/find-by-keys (ds) :fruit {:appearance "yellow"})] (is (= 1 (count rs))) (is (every? map? rs)) (is (every? meta rs)) - (is (= 2 (:FRUIT/ID (first rs)))))) + (is (= 2 ((if (postgres?) :fruit/id :FRUIT/ID) (first rs)))))) (deftest test-get-by-id (let [row (sql/get-by-id (ds) :fruit 3)] (is (map? row)) - (is (= "Peach" (:FRUIT/NAME row)))) + (is (= "Peach" ((if (postgres?) :fruit/name :FRUIT/NAME) row)))) (let [row (sql/get-by-id (ds) :fruit "juicy" :appearance {})] (is (map? row)) - (is (= 4 (:FRUIT/ID row))) - (is (= "Orange" (:FRUIT/NAME row)))) + (is (= 4 ((if (postgres?) :fruit/id :FRUIT/ID) row))) + (is (= "Orange" ((if (postgres?) :fruit/name :FRUIT/NAME) row)))) (let [row (sql/get-by-id (ds) :fruit "Banana" :FRUIT/NAME {})] (is (map? row)) - (is (= 2 (:FRUIT/ID row))))) + (is (= 2 ((if (postgres?) :fruit/id :FRUIT/ID) row))))) (deftest test-update! (try (is (= {:next.jdbc/update-count 1} (sql/update! (ds) :fruit {:appearance "brown"} {:id 2}))) - (is (= "brown" (:FRUIT/APPEARANCE + (is (= "brown" ((if (postgres?) :fruit/appearance :FRUIT/APPEARANCE) (sql/get-by-id (ds) :fruit 2)))) (finally (sql/update! (ds) :fruit {:appearance "yellow"} {:id 2}))) @@ -116,68 +116,69 @@ (is (= {:next.jdbc/update-count 1} (sql/update! (ds) :fruit {:appearance "green"} ["name = ?" "Banana"]))) - (is (= "green" (:FRUIT/APPEARANCE + (is (= "green" ((if (postgres?) :fruit/appearance :FRUIT/APPEARANCE) (sql/get-by-id (ds) :fruit 2)))) (finally (sql/update! (ds) :fruit {:appearance "yellow"} {:id 2})))) (deftest test-insert-delete - (testing "single insert/delete" - (is (= (cond (derby?) - {:1 5M} - (sqlite?) - {(keyword "last_insert_rowid()") 5} - :else - {:FRUIT/ID 5}) - (sql/insert! (ds) :fruit - {:name "Kiwi" :appearance "green & fuzzy" - :cost 100 :grade 99.9}))) - (is (= 5 (count (sql/query (ds) ["select * from fruit"])))) - (is (= {:next.jdbc/update-count 1} - (sql/delete! (ds) :fruit {:id 5}))) - (is (= 4 (count (sql/query (ds) ["select * from fruit"]))))) - (testing "multiple insert/delete" - (is (= (cond (derby?) - [{:1 nil}] ; WTF Apache Derby? - (sqlite?) - [{(keyword "last_insert_rowid()") 8}] - :else - [{:FRUIT/ID 6} {:FRUIT/ID 7} {:FRUIT/ID 8}]) - (sql/insert-multi! (ds) :fruit - [:name :appearance :cost :grade] - [["Kiwi" "green & fuzzy" 100 99.9] - ["Grape" "black" 10 50] - ["Lemon" "yellow" 20 9.9]]))) - (is (= 7 (count (sql/query (ds) ["select * from fruit"])))) - (is (= {:next.jdbc/update-count 1} - (sql/delete! (ds) :fruit {:id 6}))) - (is (= 6 (count (sql/query (ds) ["select * from fruit"])))) - (is (= {:next.jdbc/update-count 2} - (sql/delete! (ds) :fruit ["id > ?" 4]))) - (is (= 4 (count (sql/query (ds) ["select * from fruit"]))))) - (testing "multiple insert/delete with sequential cols/rows" ; per #43 - (is (= (cond (derby?) - [{:1 nil}] ; WTF Apache Derby? - (sqlite?) - [{(keyword "last_insert_rowid()") 11}] - :else - [{:FRUIT/ID 9} {:FRUIT/ID 10} {:FRUIT/ID 11}]) - (sql/insert-multi! (ds) :fruit - '(:name :appearance :cost :grade) - '(("Kiwi" "green & fuzzy" 100 99.9) - ("Grape" "black" 10 50) - ("Lemon" "yellow" 20 9.9))))) - (is (= 7 (count (sql/query (ds) ["select * from fruit"])))) - (is (= {:next.jdbc/update-count 1} - (sql/delete! (ds) :fruit {:id 9}))) - (is (= 6 (count (sql/query (ds) ["select * from fruit"])))) - (is (= {:next.jdbc/update-count 2} - (sql/delete! (ds) :fruit ["id > ?" 4]))) - (is (= 4 (count (sql/query (ds) ["select * from fruit"]))))) - (testing "empty insert-multi!" ; per #44 - (is (= [] (sql/insert-multi! (ds) :fruit - [:name :appearance :cost :grade] - []))))) + (let [new-key (cond (derby?) :1 + (postgres?) :fruit/id + (sqlite?) (keyword "last_insert_rowid()") + :else :FRUIT/ID)] + (testing "single insert/delete" + (is (= (if (derby?) 5M 5) + (new-key (sql/insert! (ds) :fruit + {:name "Kiwi" :appearance "green & fuzzy" + :cost 100 :grade 99.9})))) + (is (= 5 (count (sql/query (ds) ["select * from fruit"])))) + (is (= {:next.jdbc/update-count 1} + (sql/delete! (ds) :fruit {:id 5}))) + (is (= 4 (count (sql/query (ds) ["select * from fruit"]))))) + (testing "multiple insert/delete" + (is (= (cond (derby?) + [nil] ; WTF Apache Derby? + (sqlite?) + [8] + :else + [6 7 8]) + (mapv new-key + (sql/insert-multi! (ds) :fruit + [:name :appearance :cost :grade] + [["Kiwi" "green & fuzzy" 100 99.9] + ["Grape" "black" 10 50] + ["Lemon" "yellow" 20 9.9]])))) + (is (= 7 (count (sql/query (ds) ["select * from fruit"])))) + (is (= {:next.jdbc/update-count 1} + (sql/delete! (ds) :fruit {:id 6}))) + (is (= 6 (count (sql/query (ds) ["select * from fruit"])))) + (is (= {:next.jdbc/update-count 2} + (sql/delete! (ds) :fruit ["id > ?" 4]))) + (is (= 4 (count (sql/query (ds) ["select * from fruit"]))))) + (testing "multiple insert/delete with sequential cols/rows" ; per #43 + (is (= (cond (derby?) + [nil] ; WTF Apache Derby? + (sqlite?) + [11] + :else + [9 10 11]) + (mapv new-key + (sql/insert-multi! (ds) :fruit + '(:name :appearance :cost :grade) + '(("Kiwi" "green & fuzzy" 100 99.9) + ("Grape" "black" 10 50) + ("Lemon" "yellow" 20 9.9)))))) + (is (= 7 (count (sql/query (ds) ["select * from fruit"])))) + (is (= {:next.jdbc/update-count 1} + (sql/delete! (ds) :fruit {:id 9}))) + (is (= 6 (count (sql/query (ds) ["select * from fruit"])))) + (is (= {:next.jdbc/update-count 2} + (sql/delete! (ds) :fruit ["id > ?" 4]))) + (is (= 4 (count (sql/query (ds) ["select * from fruit"]))))) + (testing "empty insert-multi!" ; per #44 + (is (= [] (sql/insert-multi! (ds) :fruit + [:name :appearance :cost :grade] + [])))))) (deftest no-empty-example-maps (is (thrown? clojure.lang.ExceptionInfo diff --git a/test/next/jdbc/test_fixtures.clj b/test/next/jdbc/test_fixtures.clj index d4e19f8..9e8d0b2 100644 --- a/test/next/jdbc/test_fixtures.clj +++ b/test/next/jdbc/test_fixtures.clj @@ -3,7 +3,9 @@ (ns next.jdbc.test-fixtures "Multi-database testing fixtures." (:require [next.jdbc :as jdbc] - [next.jdbc.sql :as sql])) + [next.jdbc.sql :as sql]) + (:import (com.opentable.db.postgres.embedded EmbeddedPostgres) + (javax.sql DataSource))) (set! *warn-on-reflection* true) @@ -17,12 +19,19 @@ (def ^:private test-sqlite {:dbtype "sqlite" :dbname "clojure_test_sqlite"}) -(def ^:private test-db-specs [test-derby test-h2-mem test-h2 test-hsql test-sqlite]) +;; this is just a dummy db-spec -- it's handled in with-test-db below +(def ^:private test-postgres {:dbtype "embedded-postgres"}) +(defonce embedded-pg (atom nil)) + +(def ^:private test-db-specs + [test-derby test-h2-mem test-h2 test-hsql test-sqlite test-postgres]) (def ^:private test-db-spec (atom nil)) (defn derby? [] (= "derby" (:dbtype @test-db-spec))) +(defn postgres? [] (= "embedded-postgres" (:dbtype @test-db-spec))) + (defn sqlite? [] (= "sqlite" (:dbtype @test-db-spec))) (def ^:private test-datasource (atom nil)) @@ -41,12 +50,21 @@ [t] (doseq [db test-db-specs] (reset! test-db-spec db) - (reset! test-datasource (jdbc/get-datasource db)) + (if (= "embedded-postgres" (:dbtype db)) + (do + (when-not @embedded-pg + (reset! embedded-pg (EmbeddedPostgres/start))) + (reset! test-datasource + (.getPostgresDatabase ^EmbeddedPostgres @embedded-pg))) + (reset! test-datasource (jdbc/get-datasource db))) (let [auto-inc-pk (cond (or (derby?) (= "hsqldb" (:dbtype db))) (str "GENERATED ALWAYS AS IDENTITY" " (START WITH 1, INCREMENT BY 1)" " PRIMARY KEY") + (postgres?) + (str "GENERATED ALWAYS AS IDENTITY" + " PRIMARY KEY") (sqlite?) "PRIMARY KEY AUTOINCREMENT" :else diff --git a/test/next/jdbc_test.clj b/test/next/jdbc_test.clj index bdacf55..7c456d6 100644 --- a/test/next/jdbc_test.clj +++ b/test/next/jdbc_test.clj @@ -4,7 +4,7 @@ "Not exactly a test suite -- more a series of examples." (:require [clojure.test :refer [deftest is testing use-fixtures]] [next.jdbc :as jdbc] - [next.jdbc.test-fixtures :refer [with-test-db ds]] + [next.jdbc.test-fixtures :refer [with-test-db ds postgres?]] [next.jdbc.prepare :as prep] [next.jdbc.result-set :as rs] [next.jdbc.specs :as specs]) @@ -25,7 +25,7 @@ (ds) ["select * from fruit where appearance = ?" "red"]))))) (testing "execute-one!" - (is (= "Apple" (:FRUIT/NAME + (is (= "Apple" ((if (postgres?) :fruit/name :FRUIT/NAME) (jdbc/execute-one! (ds) ["select * from fruit where appearance = ?" "red"]))))) @@ -34,7 +34,7 @@ (ds) ["select * from fruit where appearance = ?" "red"])] (is (= 1 (count rs))) - (is (= 1 (:FRUIT/ID (first rs))))) + (is (= 1 ((if (postgres?) :fruit/id :FRUIT/ID) (first rs))))) (let [rs (jdbc/execute! (ds) ["select * from fruit order by id"] @@ -42,8 +42,8 @@ (is (every? map? rs)) (is (every? meta rs)) (is (= 4 (count rs))) - (is (= 1 (:FRUIT/ID (first rs)))) - (is (= 4 (:FRUIT/ID (last rs))))) + (is (= 1 ((if (postgres?) :fruit/id :FRUIT/ID) (first rs)))) + (is (= 4 ((if (postgres?) :fruit/id :FRUIT/ID) (last rs))))) (let [rs (jdbc/execute! (ds) ["select * from fruit order by id"] @@ -54,7 +54,7 @@ ;; columns come first (is (every? qualified-keyword? (first rs))) ;; :FRUIT/ID should be first column - (is (= :FRUIT/ID (ffirst rs))) + (is (= (if (postgres?) :fruit/id :FRUIT/ID) (ffirst rs))) ;; and all its corresponding values should be ints (is (every? int? (map first (rest rs)))) (is (every? string? (map second (rest rs))))) @@ -65,8 +65,8 @@ (is (every? map? rs)) (is (every? meta rs)) (is (= 4 (count rs))) - (is (= 1 (:ID (first rs)))) - (is (= 4 (:ID (last rs))))) + (is (= 1 ((if (postgres?) :id :ID) (first rs)))) + (is (= 4 ((if (postgres?) :id :ID) (last rs))))) (let [rs (jdbc/execute! (ds) ["select * from fruit order by id"] @@ -77,7 +77,7 @@ ;; columns come first (is (every? simple-keyword? (first rs))) ;; :ID should be first column - (is (= :ID (ffirst rs))) + (is (= (if (postgres?) :id :ID) (ffirst rs))) ;; and all its corresponding values should be ints (is (every? int? (map first (rest rs)))) (is (every? string? (map second (rest rs)))))) @@ -90,8 +90,8 @@ (is (every? map? rs)) (is (every? meta rs)) (is (= 4 (count rs))) - (is (= 1 (:FRUIT/ID (first rs)))) - (is (= 4 (:FRUIT/ID (last rs))))) + (is (= 1 ((if (postgres?) :fruit/id :FRUIT/ID) (first rs)))) + (is (= 4 ((if (postgres?) :fruit/id :FRUIT/ID) (last rs))))) (let [rs (with-open [con (jdbc/get-connection (ds)) ps (jdbc/prepare con @@ -100,7 +100,7 @@ (is (every? map? rs)) (is (every? meta rs)) (is (= 1 (count rs))) - (is (= 4 (:FRUIT/ID (first rs)))))) + (is (= 4 ((if (postgres?) :fruit/id :FRUIT/ID) (first rs)))))) (testing "transact" (is (= [{:next.jdbc/update-count 1}] (jdbc/transact (ds)