+2011-01-04 Russ Tyndall <russ@acceleration.net>
+ * sql/operations.lisp
+
+ Fixed bug reported by JTK related to the not-null sql-expression
+ especially as used in conjunction with the is operator.
+
+ Made null called with more than one argument throw an exception
+ instead of silently discarding all arguments past the first
+
2012-01-04 Nathan Bird <nathan@acceleration.net>
* db-odbc/odbc-api.lisp (%sql-driver-connect): in the call to
(make-instance 'sql-query-modifier-exp
:modifier 'having :components rest))
-(defsql sql-null (:symbol "null") (&rest rest)
- (if rest
+(defsql sql-null (:symbol "null") (&optional not-null-thing)
+ (if not-null-thing
(make-instance 'sql-relational-exp :operator 'is
- :sub-expressions (list (car rest) nil))
+ :sub-expressions (list not-null-thing nil))
(make-instance 'sql-value-exp :components 'null)))
-(defsql sql-not-null (:symbol "not-null") ()
- (make-instance 'sql-value-exp
- :components '|NOT NULL|))
+(defsql sql-not-null (:symbol "not-null") (&optional not-null-thing)
+ (if not-null-thing
+ (make-instance
+ 'sql-relational-exp
+ :operator 'IS
+ :sub-expressions (list not-null-thing
+ (sql-expression :string "NOT NULL")))
+ (sql-expression :string "NOT NULL")))
(defsql sql-exists (:symbol "exists") (&rest rest)
(make-instance 'sql-function-exp
(clsql:sql [not [null]])
"(NOT (NULL))")
+(deftest :syntax/null/5
+ (clsql:sql [is [foo.bar] [null]])
+ "(FOO.BAR IS NULL)")
+
+(deftest :syntax/null/6
+ (clsql:sql [is [foo.bar] [not-null]])
+ "(FOO.BAR IS NOT NULL)")
+
+(deftest :syntax/null/7
+ (clsql:sql [not-null [foo.bar]])
+ "(FOO.BAR IS NOT NULL)")
+
(deftest :syntax/relational/1