Changes regarding standard_conforming_strings in postgres
[clsql.git] / sql / expressions.lisp
index 4c57bc3e86f71ae6f97a174587bb93b546a034fb..1b3b1a486ca2f42ab44f586b4b358d5d7275c9e0 100644 (file)
 
 (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)
           (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))))