r9209: read tinyint as integer for odbc, handle boolean reading/writing fields
[clsql.git] / sql / classes.lisp
index c6cf764ab9debdfea53a8c2494aa77883702f92d..b7cd0c6b95f16157ecfba0748f1d973c372edab8 100644 (file)
   (with-slots (qualifier name type params)
       expr
     (if (and (not qualifier) (not type))
-       (write-string (sql-escape (convert-to-db-default-case (symbol-name name) database)) *sql-stream*)
+       (write-string (sql-escape (convert-to-db-default-case 
+                                  (symbol-name name) database)) *sql-stream*)
       (format *sql-stream* "~@[~A.~]~A~@[ ~A~]"
-             (if qualifier (sql-escape qualifier) qualifier)
+             (when qualifier
+                 (convert-to-db-default-case (sql-escape qualifier) database))
              (sql-escape (convert-to-db-default-case name database))
-             type))
+             (when type
+                 (convert-to-db-default-case (symbol-name type) database))))
     t))
 
 (defmethod output-sql-hash-key ((expr sql-ident-attribute) database)
   (declare (ignore environment))
   (with-slots (alias name)
     sql
-    `(make-instance 'sql-ident-table :name name :alias ',alias)))
+    `(make-instance 'sql-ident-table :name ',name :table-alias ',alias)))
 
 (defun generate-sql (expr database)
   (let ((*sql-stream* (make-string-output-stream)))
@@ -433,22 +436,30 @@ uninclusive, and the args from that keyword to the end."
         select-args)))
 
 (defun make-query (&rest args)
-  (multiple-value-bind (selections arglist)
-      (query-get-selections args)
-    (destructuring-bind (&key all flatp set-operation distinct from where
-                              group-by having order-by order-by-descending
-                              offset limit &allow-other-keys)
-        arglist
-      (if (null selections)
-          (error "No target columns supplied to select statement."))
-      (if (null from)
-          (error "No source tables supplied to select statement."))
-      (make-instance 'sql-query :selections selections
-                     :all all :flatp flatp :set-operation set-operation
-                     :distinct distinct :from from :where where
-                     :limit limit :offset offset
-                     :group-by group-by :having having :order-by order-by
-                     :order-by-descending order-by-descending))))
+  (flet ((select-objects (target-args)
+           (and target-args
+                (every #'(lambda (arg)
+                           (and (symbolp arg)
+                                (find-class arg nil)))
+                       target-args))))
+    (multiple-value-bind (selections arglist)
+       (query-get-selections args)
+      (if (select-objects selections) 
+         (apply #'select args)
+         (destructuring-bind (&key all flatp set-operation distinct from where
+                                   group-by having order-by order-by-descending
+                                   offset limit &allow-other-keys)
+             arglist
+           (if (null selections)
+               (error "No target columns supplied to select statement."))
+           (if (null from)
+               (error "No source tables supplied to select statement."))
+           (make-instance 'sql-query :selections selections
+                          :all all :flatp flatp :set-operation set-operation
+                          :distinct distinct :from from :where where
+                          :limit limit :offset offset
+                          :group-by group-by :having having :order-by order-by
+                          :order-by-descending order-by-descending))))))
 
 (defvar *in-subselect* nil)
 
@@ -690,8 +701,9 @@ uninclusive, and the args from that keyword to the end."
 ;; Column constraint types
 ;;
 (defparameter *constraint-types*
-  '(("NOT-NULL" . "NOT NULL")
-    ("PRIMARY-KEY" . "PRIMARY KEY")))
+  (list 
+   (cons (symbol-name-default-case "NOT-NULL") "NOT NULL") 
+   (cons (symbol-name-default-case "PRIMARY-KEY") "PRIMARY KEY")))
 
 ;;
 ;; Convert type spec to sql syntax