From 6f7577dacc910ec3beab10509e63e7306114ed1f Mon Sep 17 00:00:00 2001 From: Sabra Crolleton Date: Wed, 14 Dec 2022 08:48:23 -0500 Subject: [PATCH] Added more tests to s-sql --- doc/s-sql.org | 4 +-- s-sql/tests/tests.lisp | 55 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 56 insertions(+), 3 deletions(-) diff --git a/doc/s-sql.org b/doc/s-sql.org index 712f1c4..e75ec02 100644 --- a/doc/s-sql.org +++ b/doc/s-sql.org @@ -964,13 +964,13 @@ Beginning in Postmodern v. 1.33.7, you can use lists with :in. IMPORTANT REGARDING PARAMETERIZED QUERIES: For Postmodern versions before 1.33.7, you cannot use a list in a parameterized statement. You have to convert the list to a vector and use :any* rather than :in. See [[file:s-sql.html#sql-op-any][S-SQL#sql-op-any]] for more details. #+begin_src lisp - (pomo:query (:select 'name :from 'employee :where (:= 'id (:any* '$1))) + (query (:select 'name :from 'employee :where (:= 'id (:any* '$1))) #(1 3) :column) '("Jason" "Celia") #+end_src ;; Beginning with Postmodern version 1.33.7 you can also use lists #+begin_src lisp - (pomo:query (:select 'name :from 'employee :where (:= 'id (:any* '$1))) + (query (:select 'name :from 'employee :where (:= 'id (:any* '$1))) '(1 3) :column) '("Jason" "Celia") #+end_src diff --git a/s-sql/tests/tests.lisp b/s-sql/tests/tests.lisp index e32d928..c22047e 100644 --- a/s-sql/tests/tests.lisp +++ b/s-sql/tests/tests.lisp @@ -307,7 +307,60 @@ name." (is (equal (s-sql::to-s-sql-string '("alpha" "beta" "ceta" "Tau")) "(\"alpha\",\"beta\",\"ceta\",\"Tau\")")) (is (equal (s-sql::to-s-sql-string '(1 2 3 4)) - "(1,2,3,4)"))) + "(1,2,3,4)")) + (is (equal (s-sql::to-s-sql-string #("alpha" "beta" "ceta" "Tau")) + "{\"alpha\",\"beta\",\"ceta\",\"Tau\"}")) + (build-employee-table) + (with-test-connection + (is (equal (query (:select 'name 'salary + :from 'employee + :where (:in 'name '("Jason" "Robert")))) + '(("Jason" 40420) ("Robert" 14420)))) + (is (equal (let ((emp-ids '(1 2))) + (query (:select 'name + :from 'employee + :where (:in 'id emp-ids)))) + '(("Jason") ("Robert")))) + (is (equal (let ((emp-ids '(1 2))) + (query (:order-by + (:select 'name + :from 'employee + :where (:not-in 'id emp-ids)) + 'name))) + '(("Alison") ("Celia") ("Chris") ("David") ("James") ("Linda") ("Mary")))) + (is (equal (let ((a "Jason")) + (query (:select 'name 'salary + :from 'employee + :where (:in 'name `(,a "Robert"))))) + '(("Jason" 40420) ("Robert" 14420)))) + (is (equal (query (:select 'name + :from 'employee + :where (:= 'id (:any* '$1))) + #(1 3) :column) + '("Jason" "Celia"))) + (is (equal (query (:select 'name + :from 'employee + :where (:= 'id (:any* '$1))) + '(1 3) :column) + '("Jason" "Celia"))) + (is (equal (let ((toy-query (vector 1 2))) + (query (:select 'name + :from 'employee + :where (:= 'id (:any* '$1))) + toy-query)) + '(("Jason") ("Robert")))) + (is (equal (let ((toy-query (list 1 2))) + (query (:select 'name + :from 'employee + :where (:= 'id (:any* '$1))) + toy-query)) + '(("Jason") ("Robert")))) + (is (equal (let ((toy-query '(1 2))) + (query (:select 'name + :from 'employee + :where (:= 'id (:any* '$1))) + toy-query)) + '(("Jason") ("Robert")))))) (test sql-escape-string "Testing sql-escape-string. Escape string data so it can be used in a query."