commit db3f88efe0e86453ce6b173fcbb051b110d60e75
parent 405455a226eabd2a7348128743d569f508d7fe38
Author: septeql <septeql@telent.net>
Date: Thu, 28 Aug 2008 12:13:10 +0000
add <>, POSITION, IN
Diffstat:
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/septeql.lisp b/septeql.lisp
@@ -24,7 +24,7 @@ interpolated into a SQL statement as a string literal"
;;;; parsing expressions that return scalar values.
-(defparameter *infix-syntax* '(+ - / * = > < >= <= like ilike is and
+(defparameter *infix-syntax* '(+ - / * = > < >= <= <> like ilike is and
or |::| ~ ~* ! !*)
"Functions to be transformed to infix syntax. Must be column-expr * column-expr => column-expr")
@@ -67,6 +67,12 @@ interpolated into a SQL statement as a string literal"
(defmacro define-scalar-translator (name args &body forms)
`(make-scalar-translator (quote ,name) (lambda ,args ,@forms)))
+(define-scalar-translator position (needle haystack)
+ (format nil "position(~A in ~A)"
+ (translate-scalar needle)
+ (translate-scalar haystack)))
+
+
(define-scalar-translator as (column-expr alias)
(format nil "~A AS ~A" (translate-scalar column-expr) (lisp-to-sql-name alias)))
@@ -74,6 +80,7 @@ interpolated into a SQL statement as a string literal"
(format nil "cast(~A as ~A)" (translate-scalar column-expr)
(lisp-to-sql-name type)))
+
(define-scalar-translator case (&rest clauses)
(with-output-to-string (o)
(princ "(CASE " o)
@@ -96,6 +103,10 @@ interpolated into a SQL statement as a string literal"
(define-scalar-translator ++ (&rest columns)
(infixize "||" (mapcar #'translate-scalar columns)))
+(define-scalar-translator in (column-expr choices)
+ (format nil "~A IN (~{~A~^,~})" (translate-scalar column-expr)
+ (mapcar #'translate-scalar choices)))
+
;;;; and relations