X-Git-Url: http://git.kpe.io/?p=clsql.git;a=blobdiff_plain;f=sql%2Fexpressions.lisp;h=35b163f5c3a91b65088116d0b6ac2dec502cb4c3;hp=29363afbdbdda080c79ecacad004f26cb1a87d33;hb=eabede9da3e61ef5191b601dcf9b30f30f613f3e;hpb=7b89378f8c7b8437bef05f9b50f3613099ea41c0 diff --git a/sql/expressions.lisp b/sql/expressions.lisp index 29363af..35b163f 100644 --- a/sql/expressions.lisp +++ b/sql/expressions.lisp @@ -249,6 +249,10 @@ (declare (ignore sql)) nil) +(defmethod collect-table-refs ((sql list)) + (loop for i in sql + appending (listify (collect-table-refs i)))) + (defmethod collect-table-refs ((sql sql-ident-attribute)) (let ((qual (slot-value sql 'qualifier))) (when qual @@ -286,6 +290,9 @@ sql `(make-instance 'sql-ident-table :name ',name :table-alias ',alias))) +(defmethod collect-table-refs ((sql sql-ident-table)) + (list sql)) + (defmethod output-sql ((expr sql-ident-table) database) (with-slots (name alias) expr (flet ((p (s) ;; the etypecase is in sql-escape too @@ -1098,23 +1105,27 @@ uninclusive, and the args from that keyword to the end." (cons (symbol-name-default-case "UNSIGNED") "UNSIGNED") (cons (symbol-name-default-case "ZEROFILL") "ZEROFILL") (cons (symbol-name-default-case "AUTO-INCREMENT") "AUTO_INCREMENT") + (cons (symbol-name-default-case "AUTOINCREMENT") "AUTOINCREMENT") (cons (symbol-name-default-case "DEFAULT") "DEFAULT") (cons (symbol-name-default-case "UNIQUE") "UNIQUE") (cons (symbol-name-default-case "IDENTITY") "IDENTITY (1,1)") ;; added for sql-server support )) (defmethod database-constraint-statement (constraint-list database) - (declare (ignore database)) - (make-constraints-description constraint-list)) + (make-constraints-description constraint-list database)) + +(defmethod database-translate-constraint (constraint database) + (assoc (symbol-name constraint) + *constraint-types* + :test #'equal)) -(defun make-constraints-description (constraint-list) +(defun make-constraints-description (constraint-list database) (if constraint-list (let ((string "")) (do ((constraint constraint-list (cdr constraint))) ((null constraint) string) - (let ((output (assoc (symbol-name (car constraint)) - *constraint-types* - :test #'equal))) + (let ((output (database-translate-constraint (car constraint) + database))) (if (null output) (error 'sql-user-error :message (format nil "unsupported column constraint '~A'"