sql
`(make-instance 'sql-ident-table :name ',name :table-alias ',alias)))
-(defun generate-sql (expr database)
- (let ((*sql-stream* (make-string-output-stream)))
- (output-sql expr database)
- (get-output-stream-string *sql-stream*)))
-
(defmethod output-sql ((expr sql-ident-table) database)
(with-slots (name alias)
expr
:test (lambda (tab1 tab2)
(equal (slot-value tab1 'name)
(slot-value tab2 'name))))))
+(defvar *in-subselect* nil)
(defmethod output-sql ((expr sql-function-exp) database)
(with-slots (name args)
expr
(output-sql name database)
- (when args (output-sql args database)))
+ (let ((*in-subselect* nil)) ;; aboid double parens
+ (when args (output-sql args database))))
t)
:group-by group-by :having having :order-by order-by
:inner-join inner-join :on on))))))
-(defvar *in-subselect* nil)
-
(defmethod output-sql ((query sql-query) database)
(with-slots (distinct selections from where group-by having order-by
limit offset inner-join on all set-operation)
;; Convert type spec to sql syntax
;;
-(defmethod database-constraint-description (constraint database)
- (declare (ignore database))
- (let ((output (assoc (symbol-name constraint) *constraint-types*
- :test #'equal)))
- (if (null output)
- (error 'sql-user-error
- :message (format nil "unsupported column constraint '~A'"
- constraint))
- (cdr output))))
-
(defmethod database-constraint-statement (constraint-list database)
(declare (ignore database))
(make-constraints-description constraint-list))