X-Git-Url: http://git.kpe.io/?p=clsql.git;a=blobdiff_plain;f=tests%2Ftest-syntax.lisp;h=bf647f1d789f8dce599d3e3deafbee990461ef20;hp=ac8247ef45d903e4aa90938d310d94ae1a21a0cf;hb=5ed1f05543cbd24b3f2bb735f2cfc03ea85e51ec;hpb=71ac7a8d3e5bea99472b07fa2a089c7173abb1f7 diff --git a/tests/test-syntax.lisp b/tests/test-syntax.lisp index ac8247e..bf647f1 100644 --- a/tests/test-syntax.lisp +++ b/tests/test-syntax.lisp @@ -9,7 +9,7 @@ ;;;; Description ========================================================== ;;;; ====================================================================== ;;;; -;;;; Tests for the CLSQL Symbolic SQL syntax. +;;;; Tests for the CLSQL Symbolic SQL syntax. ;;;; ;;;; ====================================================================== @@ -17,9 +17,10 @@ #.(clsql:locally-enable-sql-reader-syntax) + (setq *rt-syntax* '( - + (deftest :syntax/generic/1 (clsql:sql "foo") "'foo'") @@ -40,6 +41,9 @@ (clsql:sql ["SELECT FOO,BAR FROM BAZ"]) "SELECT FOO,BAR FROM BAZ") +(deftest :syntax/generic/6 + (clsql:sql "What's up Doc?") + "'What''s up Doc?'") (deftest :syntax/ident/1 (clsql:sql [foo]) @@ -50,29 +54,46 @@ "FOO.BAR") (deftest :syntax/ident/3 - (clsql:sql ["foo" bar]) - "FOO.BAR") - -;(deftest :syntax/ident/4 -; (clsql:sql [foo "bar"]) -; "FOO \"bar\"") - -(deftest :syntax/ident/5 (clsql:sql [foo :integer]) "FOO") -(deftest :syntax/ident/6 +(deftest :syntax/ident/4 (clsql:sql [foo bar :integer]) "FOO.BAR") +(deftest :syntax/ident/5 + (clsql:sql [foo "bar"]) + "FOO \"bar\"") + +(deftest :syntax/ident/6 + (clsql:sql ["foo" bar]) + "\"foo\".BAR") + (deftest :syntax/ident/7 (clsql:sql ["foo" bar :integer]) + "\"foo\".BAR") + + +(deftest :syntax/attribute/1 + (clsql:sql (clsql:sql-expression :table 'foo :attribute 'bar)) "FOO.BAR") +(deftest :syntax/attribute/2 + (clsql:sql (clsql:sql-expression :table 'foo :attribute "bar")) + "FOO.\"bar\"") + +(deftest :syntax/attribute/3 + (clsql:sql (clsql:sql-expression :table "foo" :attribute 'bar)) + "\"foo\".BAR") + +(deftest :syntax/attribute/4 + (clsql:sql (clsql:sql-expression :table "foo" :attribute "bar")) + "\"foo\".\"bar\"") + (deftest :syntax/subquery/1 (clsql:sql [any '(3 4)]) - "(ANY ((3,4)))") + "ANY((3,4))") (deftest :syntax/subquery/2 (clsql:sql [in [foo] '(foo bar baz)]) @@ -80,18 +101,18 @@ (deftest :syntax/subquery/3 (clsql:sql [all '(foo bar baz)]) - "(ALL ((FOO,BAR,BAZ)))") + "ALL((FOO,BAR,BAZ))") (deftest :syntax/subquery/4 (clsql:sql [exists '(foo bar baz)]) - "(EXISTS ((FOO,BAR,BAZ)))") + "EXISTS((FOO,BAR,BAZ))") (deftest :syntax/subquery/5 (clsql:sql [some '(foo bar baz)]) - "(SOME ((FOO,BAR,BAZ)))") + "SOME((FOO,BAR,BAZ))") -(deftest :syntax/aggregate/1 +(deftest :syntax/aggregate/1 (clsql:sql [max [+ [foo] [* 1000 [bar]]]]) "MAX((FOO + (1000 * BAR)))") @@ -112,7 +133,7 @@ "COUNT(FOO)") -(deftest :syntax/logical/1 +(deftest :syntax/logical/1 (clsql:sql [and [foo] [bar]]) "(FOO AND BAR)") @@ -120,19 +141,19 @@ (clsql:sql [or [foo] [bar]]) "(FOO OR BAR)") -(deftest :syntax/logical/3 +(deftest :syntax/logical/3 (clsql:sql [not [foo]]) "(NOT (FOO))") -(deftest :syntax/null/1 +(deftest :syntax/null/1 (clsql:sql [null [foo]]) "(FOO IS NULL)") (deftest :syntax/null/2 (clsql:sql [not [null [foo]]]) "(NOT ((FOO IS NULL)))") - + (deftest :syntax/null/3 (clsql:sql [null]) "NULL") @@ -169,16 +190,16 @@ "(BAZ <> BEEP)") -(deftest :syntax/between/1 +(deftest :syntax/between/1 (clsql:sql [between [- [foo] 1] [* [bar] 5] [/ [baz] 9]]) "(FOO - 1) BETWEEN (BAR * 5) AND (BAZ / 9)") -(deftest :syntax/between/2 +(deftest :syntax/between/2 (clsql:sql [not [between [- [foo] 1] [* [bar] 5] [/ [baz] 9]]]) "(NOT ((FOO - 1) BETWEEN (BAR * 5) AND (BAZ / 9)))") -(deftest :syntax/arithmetic/1 +(deftest :syntax/arithmetic/1 (clsql:sql [+ [foo bar] [baz]]) "(FOO.BAR + BAZ)") @@ -203,17 +224,25 @@ "(2 * 3)") -(deftest :syntax/substr/1 +(deftest :syntax/substr/1 (clsql:sql [substr [hello] 1 4]) + "SUBSTR(HELLO,1,4)") + +(deftest :syntax/substring/1 + (clsql:sql [substring [hello] 1 4]) "SUBSTRING(HELLO,1,4)") -(deftest :syntax/concat/1 - (clsql:sql [\|\| [foo] [bar] [baz]]) +(deftest :syntax/concat/1 + (clsql:sql [|| [foo] [bar] [baz]]) "(FOO || BAR || BAZ)") +(deftest :syntax/concat/2 + (clsql:sql [concat [foo] [bar]]) + "CONCAT(FOO,BAR)") -(deftest :syntax/pattern/1 + +(deftest :syntax/pattern/1 (clsql:sql [like [foo] "%v"]) "(FOO LIKE '%v')") @@ -222,7 +251,7 @@ "(NOT ((FOO LIKE '%v')))") -(deftest :syntax/distinct/1 +(deftest :syntax/distinct/1 (clsql:sql [distinct [foo bar :string]]) "DISTINCT FOO.BAR") @@ -231,20 +260,42 @@ "DISTINCT FOO, BAR") -(deftest :syntax/order-by/1 +(deftest :syntax/order-by/1 (clsql:sql [order-by [foo]]) "ORDER BY FOO") -(deftest :syntax/group-by/1 +(deftest :syntax/group-by/1 (clsql:sql [group-by [foo]]) "GROUP BY FOO") +(deftest :syntax/group-by/2 + (clsql:sql + (clsql-sys::make-query [foo] [bar] [count [foo]] + :from [table] + :group-by '([foo] [bar]) + :order-by '([foo] [bar]))) + "SELECT FOO,BAR,COUNT(FOO) FROM TABLE GROUP BY FOO,BAR ORDER BY FOO,BAR") + + +(deftest :syntax/coalesce/1 + (clsql:sql [coalesce [foo] [bar] "not specified"]) + "COALESCE(FOO,BAR,'not specified')") -(deftest :syntax/sets/1 +(deftest :syntax/coalesce/2 + (clsql:sql [nvl [foo] "not specified"]) + "COALESCE(FOO,'not specified')") + +(deftest :syntax/nvl/1 + (clsql:sql [nvl [foo] "not specified"]) + "COALESCE(FOO,'not specified')") + + + +(deftest :syntax/sets/1 (clsql:sql [union [select [foo] :from [bar]] [select [baz] :from [bar]]]) "SELECT FOO FROM BAR UNION SELECT BAZ FROM BAR") -(deftest :syntax/sets/2 +(deftest :syntax/sets/2 (clsql:sql [intersect [select [foo] :from [bar]] [select [baz] :from [bar]]]) "SELECT FOO FROM BAR INTERSECT SELECT BAZ FROM BAR") @@ -252,6 +303,10 @@ (clsql:sql [except [select [foo] :from [bar]] [select [baz] :from [bar]]]) "SELECT FOO FROM BAR EXCEPT SELECT BAZ FROM BAR") +(deftest :syntax/sets/4 + (clsql:sql [minus [select [foo] :from [bar]] [select [baz] :from [bar]]]) + "SELECT FOO FROM BAR MINUS SELECT BAZ FROM BAR") + (deftest :syntax/function/1 (clsql:sql [function "COS" [age]]) @@ -266,7 +321,7 @@ (clsql:sql [select [person_id] [surname] :from [person]]) "SELECT PERSON_ID,SURNAME FROM PERSON") -(deftest :syntax/query/2 +(deftest :syntax/query/2 (clsql:sql [select [foo] [bar *] :from '([baz] [bar]) :where [or [= [foo] 3] @@ -283,19 +338,19 @@ (deftest :syntax/query/4 (clsql:sql [select [count [*]] :from [emp]]) "SELECT COUNT(*) FROM EMP") - -(deftest :syntax/expression1 + +(deftest :syntax/expression/1 (clsql:sql (clsql:sql-operation 'select (clsql:sql-expression :table 'foo :attribute 'bar) (clsql:sql-expression :attribute 'baz) - :from (list + :from (list (clsql:sql-expression :table 'foo) (clsql:sql-expression :table 'quux)) :where - (clsql:sql-operation 'or + (clsql:sql-operation 'or (clsql:sql-operation '> (clsql:sql-expression :attribute 'baz) @@ -306,7 +361,7 @@ :attribute 'bar) "SU%")))) "SELECT FOO.BAR,BAZ FROM FOO,QUUX WHERE ((BAZ > 3) OR (FOO.BAR LIKE 'SU%'))") - + (deftest :syntax/expression/2 (clsql:sql (apply (clsql:sql-operator 'and)