;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL.
;;;; *************************************************************************
-(in-package #:clsql)
+(in-package #:clsql-sys)
(defvar +empty-string+ "''")
(convert-to-db-default-case (symbol-name type) database)))
(format *sql-stream* "~@[~A.~]~A"
(when qualifier
- (convert-to-db-default-case (sql-escape qualifier) database))
+ (typecase qualifier
+ (string (format nil "~s" qualifier))
+ (t (convert-to-db-default-case (sql-escape qualifier)
+ database))))
(sql-escape (convert-to-db-default-case name database))))
t))
(defvar *select-arguments*
'(:all :database :distinct :flatp :from :group-by :having :order-by
:order-by-descending :set-operation :where :offset :limit
- :inner-join :on))
+ :inner-join :on
+ ;; below keywords are not a SQL argument, but these keywords may terminate select
+ :caching :refresh))
(defun query-arg-p (sym)
(member sym *select-arguments*))
(output-sql (apply #'vector selections) database)
(when from
(write-string " FROM " *sql-stream*)
- (if (listp from)
- (output-sql (apply #'vector from) database)
- (output-sql from database)))
+ (typecase from
+ (list (output-sql (apply #'vector from) database))
+ (string (write-string
+ (sql-escape
+ (convert-to-db-default-case from database)) *sql-stream*))
+ (t (output-sql from database))))
(when inner-join
(write-string " INNER JOIN " *sql-stream*)
(output-sql inner-join database))
t)
(defmethod output-sql ((query sql-object-query) database)
+ (declare (ignore database))
(with-slots (objects)
query
(when objects