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
(when from
(write-string " FROM " *sql-stream*)
(typecase from
- (list (output-sql (apply #'vector from) database))
+ (list (output-sql (apply #'vector (remove-duplicates
+ from
+ :test #'(lambda (a b)
+ (string-equal (symbol-name (slot-value a 'name))
+ (symbol-name (slot-value b 'name))))))
+ database))
(string (write-string from *sql-stream*))
(t (output-sql from database))))
(when inner-join
;; 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))