septeql

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit db3f88efe0e86453ce6b173fcbb051b110d60e75
parent 405455a226eabd2a7348128743d569f508d7fe38
Author: septeql <septeql@telent.net>
Date:   Thu, 28 Aug 2008 12:13:10 +0000

add <>, POSITION, IN
Diffstat:
Msepteql.lisp | 13++++++++++++-
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