X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=sql%2Fexpressions.lisp;h=1b3b1a486ca2f42ab44f586b4b358d5d7275c9e0;hb=refs%2Fheads%2F6.8.0;hp=4c57bc3e86f71ae6f97a174587bb93b546a034fb;hpb=22f792cf09747cce9998bed27bbd7ea3cf21b878;p=clsql.git diff --git a/sql/expressions.lisp b/sql/expressions.lisp index 4c57bc3..1b3b1a4 100644 --- a/sql/expressions.lisp +++ b/sql/expressions.lisp @@ -420,13 +420,13 @@ (defmethod output-sql ((expr sql-assignment-exp) database) (with-slots (operator sub-expressions) - expr - (do ((sub sub-expressions (cdr sub))) - ((null (cdr sub)) (output-sql (car sub) database)) - (output-sql (car sub) database) + expr + (output-sql (car sub-expressions) database) + (dolist (sub (cdr sub-expressions)) (write-char #\Space *sql-stream*) (%write-operator operator database) - (write-char #\Space *sql-stream*))) + (write-char #\Space *sql-stream*) + (output-sql sub database))) t) (defclass sql-value-exp (%sql-expression) @@ -450,8 +450,6 @@ (remove-duplicates tabs :test #'database-identifier-equal)) nil))) - - (defmethod output-sql ((expr sql-value-exp) database) (with-slots (modifier components) expr @@ -1011,9 +1009,7 @@ uninclusive, and the args from that keyword to the end." (setf (aref buf j) #\')) ((and (char= char #\\) ;; MTP: only escape backslash with pgsql/mysql - (member (database-underlying-type database) - '(:postgresql :mysql) - :test #'eq)) + (database-escape-backslashes database)) (setf (aref buf j) #\\) (incf j) (setf (aref buf j) #\\)) @@ -1234,3 +1230,16 @@ uninclusive, and the args from that keyword to the end." returns nil if there are no children" (clsql-ors clauses)) + +(defclass sql-escape-string-exp (%sql-expression) + ((string + :initarg :string + :initform nil)) + (:documentation + "An escaped string string expression (postgresql E'stuff') .")) + +(defmethod output-sql ((exp sql-escape-string-exp) database) + (with-slots (string) exp + (when string + (write-char #\E *sql-stream*) + (output-sql string database))))