78 failures, 1 errors.

Signed-off-by: Sean Corfield <sean@corfield.org>
This commit is contained in:
Sean Corfield 2024-11-24 00:52:05 -08:00
parent 5f0c93642a
commit 564c43bc79
No known key found for this signature in database
3 changed files with 40 additions and 49 deletions

View file

@ -168,7 +168,7 @@
(is (= "Peach" ((column :FRUIT/name) row))))) (is (= "Peach" ((column :FRUIT/name) row)))))
(testing "custom row builder 2" (testing "custom row builder 2"
(let [row (p/-execute-one (ds) (let [row (p/-execute-one (ds)
["select fruit.*, id + 100 as newid from fruit where id = ?" 3] [(str "select fruit.*, " (index) " + 100 as newid from fruit where " (index) " = ?") 3]
(assoc (default-options) (assoc (default-options)
:builder-fn rs/as-modified-maps :builder-fn rs/as-modified-maps
:label-fn str/lower-case :label-fn str/lower-case
@ -236,7 +236,7 @@
(testing "row-numbers on bare abstraction" (testing "row-numbers on bare abstraction"
(is (= [1 2 3] (is (= [1 2 3]
(into [] (map rs/row-number) (into [] (map rs/row-number)
(p/-execute (ds) ["select * from fruit where id < ?" 4] (p/-execute (ds) [(str "select * from fruit where " (index) " < ?") 4]
;; we do not need a real builder here... ;; we do not need a real builder here...
(cond-> {:builder-fn (constantly nil)} (cond-> {:builder-fn (constantly nil)}
(derby?) (derby?)
@ -247,7 +247,7 @@
(is (= [1 2 3] (is (= [1 2 3]
(into [] (comp (map #(rs/datafiable-row % (ds) {})) (into [] (comp (map #(rs/datafiable-row % (ds) {}))
(map rs/row-number)) (map rs/row-number))
(p/-execute (ds) ["select * from fruit where id < ?" 4] (p/-execute (ds) [(str "select * from fruit where " (index) " < ?") 4]
;; ...but datafiable-row requires a real builder ;; ...but datafiable-row requires a real builder
(cond-> {:builder-fn rs/as-arrays} (cond-> {:builder-fn rs/as-arrays}
(derby?) (derby?)
@ -257,7 +257,7 @@
(deftest test-column-names (deftest test-column-names
(testing "column-names on bare abstraction" (testing "column-names on bare abstraction"
(is (= #{"id" "appearance" "grade" "cost" "name"} (is (= #{(index) "appearance" "grade" "cost" "name"}
(reduce (fn [_ row] (reduce (fn [_ row]
(-> row (-> row
(->> (rs/column-names) (->> (rs/column-names)
@ -265,11 +265,11 @@
(set) (set)
(reduced)))) (reduced))))
nil nil
(p/-execute (ds) ["select * from fruit where id < ?" 4] (p/-execute (ds) [(str "select * from fruit where " (index) " < ?") 4]
;; column-names require a real builder ;; column-names require a real builder
{:builder-fn rs/as-arrays}))))) {:builder-fn rs/as-arrays})))))
(testing "column-names on realized row" (testing "column-names on realized row"
(is (= #{"id" "appearance" "grade" "cost" "name"} (is (= #{(index) "appearance" "grade" "cost" "name"}
(reduce (fn [_ row] (reduce (fn [_ row]
(-> row (-> row
(rs/datafiable-row (ds) {}) (rs/datafiable-row (ds) {})
@ -278,7 +278,7 @@
(set) (set)
(reduced)))) (reduced))))
nil nil
(p/-execute (ds) ["select * from fruit where id < ?" 4] (p/-execute (ds) [(str "select * from fruit where " (index) " < ?") 4]
{:builder-fn rs/as-arrays})))))) {:builder-fn rs/as-arrays}))))))
(deftest test-over-partition-all (deftest test-over-partition-all
@ -306,7 +306,7 @@
(p/-execute (ds) [(str "select * from fruit where " (index) " = ?") 1] (p/-execute (ds) [(str "select * from fruit where " (index) " = ?") 1]
{:builder-fn (constantly nil)})))) {:builder-fn (constantly nil)}))))
(is (= [[2 [:name "Banana"]]] (is (= [[2 [:name "Banana"]]]
(into [] (map (juxt #(get % "id") ; get by string key works (into [] (map (juxt #(get % (index)) ; get by string key works
#(find % :name))) ; get MapEntry works #(find % :name))) ; get MapEntry works
(p/-execute (ds) [(str "select * from fruit where " (index) " = ?") 2] (p/-execute (ds) [(str "select * from fruit where " (index) " = ?") 2]
{:builder-fn (constantly nil)})))) {:builder-fn (constantly nil)}))))
@ -417,7 +417,7 @@
(defn fruit-builder [^ResultSet rs ^ResultSetMetaData rsmeta] (defn fruit-builder [^ResultSet rs ^ResultSetMetaData rsmeta]
(reify (reify
rs/RowBuilder rs/RowBuilder
(->row [_] (->Fruit (.getObject rs "id") (->row [_] (->Fruit (.getObject rs ^String (index))
(.getObject rs "name") (.getObject rs "name")
(.getObject rs "appearance") (.getObject rs "appearance")
(.getObject rs "cost") (.getObject rs "cost")
@ -497,10 +497,10 @@ CREATE TABLE CLOBBER (
(testing "get n on bare abstraction over arrays" (testing "get n on bare abstraction over arrays"
(is (= [1 2 3] (is (= [1 2 3]
(into [] (map #(get % 0)) (into [] (map #(get % 0))
(p/-execute (ds) ["select id from fruit where id < ?" 4] (p/-execute (ds) [(str "select " (index) " from fruit where " (index) " < ?") 4]
{:builder-fn rs/as-arrays}))))) {:builder-fn rs/as-arrays})))))
(testing "nth on bare abstraction over arrays" (testing "nth on bare abstraction over arrays"
(is (= [1 2 3] (is (= [1 2 3]
(into [] (map #(nth % 0)) (into [] (map #(nth % 0))
(p/-execute (ds) ["select id from fruit where id < ?" 4] (p/-execute (ds) [(str "select " (index) " from fruit where " (index) " < ?") 4]
{:builder-fn rs/as-arrays})))))) {:builder-fn rs/as-arrays}))))))

View file

@ -89,17 +89,22 @@
(is (map? row)) (is (map? row))
(is (= 2 ((column :FRUIT/ID) row)))))) (is (= 2 ((column :FRUIT/ID) row))))))
(defn- update-count [n]
(if (xtdb?)
{:next.jdbc/update-count 0}
{:next.jdbc/update-count n}))
(deftest test-update! (deftest test-update!
(let [ds-opts (jdbc/with-options (ds) (default-options))] (let [ds-opts (jdbc/with-options (ds) (default-options))]
(try (try
(is (= {:next.jdbc/update-count 1} (is (= (update-count 1)
(sql/update! ds-opts :fruit {:appearance "brown"} {(col-kw :id) 2}))) (sql/update! ds-opts :fruit {:appearance "brown"} {(col-kw :id) 2})))
(is (= "brown" ((column :FRUIT/APPEARANCE) (is (= "brown" ((column :FRUIT/APPEARANCE)
(sql/get-by-id ds-opts :fruit 2 (col-kw :id) {})))) (sql/get-by-id ds-opts :fruit 2 (col-kw :id) {}))))
(finally (finally
(sql/update! ds-opts :fruit {:appearance "yellow"} {(col-kw :id) 2}))) (sql/update! ds-opts :fruit {:appearance "yellow"} {(col-kw :id) 2})))
(try (try
(is (= {:next.jdbc/update-count 1} (is (= (update-count 1)
(sql/update! ds-opts :fruit {:appearance "green"} (sql/update! ds-opts :fruit {:appearance "green"}
["name = ?" "Banana"]))) ["name = ?" "Banana"])))
(is (= "green" ((column :FRUIT/APPEARANCE) (is (= "green" ((column :FRUIT/APPEARANCE)
@ -120,19 +125,17 @@
(xtdb?) (constantly 5) (xtdb?) (constantly 5)
:else :FRUIT/ID)] :else :FRUIT/ID)]
(testing "single insert/delete" (testing "single insert/delete"
(is (== 5 (new-key (doto (is (== 5 (new-key (sql/insert! (ds) :fruit
(sql/insert! (ds) :fruit (cond-> {:name (as-varchar "Kiwi")
(cond-> {:name (as-varchar "Kiwi") :appearance "green & fuzzy"
:appearance "green & fuzzy" :cost 100 :grade (as-real 99.9)}
:cost 100 :grade (as-real 99.9)} (xtdb?)
(xtdb?) (assoc :_id 5))
(assoc :_id 5)) {:suffix
{:suffix (when (sqlite?)
(when (sqlite?) "RETURNING *")}))))
"RETURNING *")})
(println (ds))))))
(is (= 5 (count (sql/query (ds) ["select * from fruit"])))) (is (= 5 (count (sql/query (ds) ["select * from fruit"]))))
(is (= {:next.jdbc/update-count 1} (is (= (update-count 1)
(sql/delete! (ds) :fruit {(col-kw :id) 5}))) (sql/delete! (ds) :fruit {(col-kw :id) 5})))
(is (= 4 (count (sql/query (ds) ["select * from fruit"]))))) (is (= 4 (count (sql/query (ds) ["select * from fruit"])))))
(testing "multiple insert/delete" (testing "multiple insert/delete"
@ -159,10 +162,10 @@
(when (sqlite?) (when (sqlite?)
"RETURNING *")})))) "RETURNING *")}))))
(is (= 7 (count (sql/query (ds) ["select * from fruit"])))) (is (= 7 (count (sql/query (ds) ["select * from fruit"]))))
(is (= {:next.jdbc/update-count 1} (is (= (update-count 1)
(sql/delete! (ds) :fruit {(col-kw :id) 6}))) (sql/delete! (ds) :fruit {(col-kw :id) 6})))
(is (= 6 (count (sql/query (ds) ["select * from fruit"])))) (is (= 6 (count (sql/query (ds) ["select * from fruit"]))))
(is (= {:next.jdbc/update-count 2} (is (= (update-count 2)
(sql/delete! (ds) :fruit [(str (index) " > ?") 4]))) (sql/delete! (ds) :fruit [(str (index) " > ?") 4])))
(is (= 4 (count (sql/query (ds) ["select * from fruit"]))))) (is (= 4 (count (sql/query (ds) ["select * from fruit"])))))
(testing "multiple insert/delete with sequential cols/rows" ; per #43 (testing "multiple insert/delete with sequential cols/rows" ; per #43
@ -189,10 +192,10 @@
(when (sqlite?) (when (sqlite?)
"RETURNING *")})))) "RETURNING *")}))))
(is (= 7 (count (sql/query (ds) ["select * from fruit"])))) (is (= 7 (count (sql/query (ds) ["select * from fruit"]))))
(is (= {:next.jdbc/update-count 1} (is (= (update-count 1)
(sql/delete! (ds) :fruit {(col-kw :id) 9}))) (sql/delete! (ds) :fruit {(col-kw :id) 9})))
(is (= 6 (count (sql/query (ds) ["select * from fruit"])))) (is (= 6 (count (sql/query (ds) ["select * from fruit"]))))
(is (= {:next.jdbc/update-count 2} (is (= (update-count 2)
(sql/delete! (ds) :fruit [(str (index) " > ?") 4]))) (sql/delete! (ds) :fruit [(str (index) " > ?") 4])))
(is (= 4 (count (sql/query (ds) ["select * from fruit"]))))) (is (= 4 (count (sql/query (ds) ["select * from fruit"])))))
(testing "multiple insert/delete with maps" (testing "multiple insert/delete with maps"
@ -226,10 +229,10 @@
(when (sqlite?) (when (sqlite?)
"RETURNING *")})))) "RETURNING *")}))))
(is (= 7 (count (sql/query (ds) ["select * from fruit"])))) (is (= 7 (count (sql/query (ds) ["select * from fruit"]))))
(is (= {:next.jdbc/update-count 1} (is (= (update-count 1)
(sql/delete! (ds) :fruit {(col-kw :id) 12}))) (sql/delete! (ds) :fruit {(col-kw :id) 12})))
(is (= 6 (count (sql/query (ds) ["select * from fruit"])))) (is (= 6 (count (sql/query (ds) ["select * from fruit"]))))
(is (= {:next.jdbc/update-count 2} (is (= (update-count 2)
(sql/delete! (ds) :fruit [(str (index) " > ?") 10]))) (sql/delete! (ds) :fruit [(str (index) " > ?") 10])))
(is (= 4 (count (sql/query (ds) ["select * from fruit"]))))) (is (= 4 (count (sql/query (ds) ["select * from fruit"])))))
(testing "empty insert-multi!" ; per #44 and #264 (testing "empty insert-multi!" ; per #44 and #264

View file

@ -117,12 +117,8 @@
(is (= (column :FRUIT/ID) (ffirst rs))) (is (= (column :FRUIT/ID) (ffirst rs)))
;; and all its corresponding values should be ints ;; and all its corresponding values should be ints
(is (every? int? (map first (rest rs)))) (is (every? int? (map first (rest rs))))
(when (xtdb?) (println (first rs) (let [n (max (.indexOf ^java.util.List (first rs) :name) 1)]
(.indexOf ^java.util.List (first rs) :name) (is (every? string? (map #(nth % n) (rest rs)))))))
(.indexOf (first rs) :name)))
(let [n (or (.indexOf ^java.util.List (first rs) :name) 1)]
(is (try (every? string? (map #(nth % n) (rest rs)))
(catch Throwable _ (println (rest rs))))))))
(testing "execute! with adapter" (testing "execute! with adapter"
(let [rs (jdbc/execute! ; test again, with adapter and lower columns (let [rs (jdbc/execute! ; test again, with adapter and lower columns
ds-opts ds-opts
@ -140,12 +136,8 @@
(is (= (col-kw :fruit/id) (ffirst rs))) (is (= (col-kw :fruit/id) (ffirst rs)))
;; and all its corresponding values should be ints ;; and all its corresponding values should be ints
(is (every? int? (map first (rest rs)))) (is (every? int? (map first (rest rs))))
(when (xtdb?) (println (first rs) (let [n (max (.indexOf ^java.util.List (first rs) :name) 1)]
(.indexOf ^java.util.List (first rs) :name) (is (every? string? (map #(nth % n) (rest rs)))))))
(.indexOf (first rs) :name)))
(let [n (or (.indexOf ^java.util.List (first rs) :name) 1)]
(is (try (every? string? (map #(nth % n) (rest rs)))
(catch Throwable _ (println (rest rs))))))))
(testing "execute! with unqualified" (testing "execute! with unqualified"
(let [rs (jdbc/execute! (let [rs (jdbc/execute!
(ds) (ds)
@ -169,12 +161,8 @@
(is (= (column :ID) (ffirst rs))) (is (= (column :ID) (ffirst rs)))
;; and all its corresponding values should be ints ;; and all its corresponding values should be ints
(is (every? int? (map first (rest rs)))) (is (every? int? (map first (rest rs))))
(when (xtdb?) (println (first rs) (let [n (max (.indexOf ^java.util.List (first rs) :name) 1)]
(.indexOf ^java.util.List (first rs) :name) (is (every? string? (map #(nth % n) (rest rs)))))))
(.indexOf (first rs) :name)))
(let [n (or (.indexOf ^java.util.List (first rs) :name) 1)]
(is (try (every? string? (map #(nth % n) (rest rs)))
(catch Throwable _ (println (rest rs))))))))
(testing "execute! with :max-rows / :maxRows" (testing "execute! with :max-rows / :maxRows"
(let [rs (jdbc/execute! (let [rs (jdbc/execute!
ds-opts ds-opts