r9478: 25 May 2004 Kevin Rosenberg <kevin@rosenberg.net>
[clsql.git] / tests / test-init.lisp
index 10caf4c16bbb366b654340c35a3e009d75fad1a0..6f15d412303d28bc4cd9a055bf08806b0152899d 100644 (file)
@@ -19,6 +19,7 @@
 (defvar *report-stream* *standard-output* "Stream to send text report.")
 (defvar *sexp-report-stream* nil "Stream to send sexp report.")
 (defvar *rt-connection*)
+(defvar *rt-basic*)
 (defvar *rt-fddl*)
 (defvar *rt-fdml*)
 (defvar *rt-ooddl*)
     :initarg :groupid)
    (first-name
     :accessor first-name
-    :type (string 30)
+    :type (varchar 30)
     :initarg :first-name)
    (last-name
     :accessor last-name
-    :type (string 30)
+    :type (varchar 30)
     :initarg :last-name)
    (email
     :accessor employee-email
-    :type (string 100)
+    :type (varchar 100)
     :initarg :email)
    (ecompanyid
     :type integer
     :type integer
     :initarg :groupid)
    (name
-    :type (string 100)
+    :type (varchar 100)
     :initarg :name)
    (presidentid
     :type integer
     :type integer
     :initarg :street-number)
    (street-name
-    :type (string 30)
+    :type (varchar 30)
     :void-value ""
     :initarg :street-name)
    (city
     :column "city_field"
     :void-value "no city"
-    :type (string 30)
+    :type (varchar 30)
     :initarg :city)
    (postal-code
     :column zip
                                  :retrieval :immediate)))
   (:base-table "ea_join"))
 
+(def-view-class deferred-employee-address ()
+  ((aemplid :type integer :initarg :emplid)
+   (aaddressid :type integer :initarg :addressid)
+   (verified :type boolean :initarg :verified)
+   (address :db-kind :join
+           :db-info (:join-class address
+                                 :home-key aaddressid
+                                 :foreign-key addressid
+                                 :retrieval :deferred
+                                 :set nil)))
+  (:base-table "ea_join"))
+
 (defun test-connect-to-database (db-type spec)
   (when (clsql-sys:db-backend-has-create/destroy-db? db-type)
     (ignore-errors (destroy-database spec :database-type db-type))
     (ignore-errors (create-database spec :database-type db-type)))
   
   (setf *test-database-type* db-type)
-  (when (>= (length spec) 3)
-    (setq *test-database-user* (third spec)))
+  (setf *test-database-user*
+    (cond
+     ((eq :oracle db-type) (second spec))
+     ((>= (length spec) 3) (third spec))))
   
   ;; Connect to the database
   (clsql:connect spec
 
 (defun test-initialise-database ()
   (test-basic-initialize)
-  
   (let ((*backend-warning-behavior*
         (if (member *test-database-type* '(:postgresql :postgresql-socket))
             :ignore
 ***     CLSQL ~A begun at ~A
 ***     ~A
 ***     ~A on ~A
-***     Database ~A backend~A.
+***     Database ~:@(~A~) backend~A.
 ******************************************************************************
 "
          report-type
          (machine-type)
          db-type
          (if (not (eq db-type *test-database-underlying-type*))
-             (format nil " with underlying type ~A
+             (format nil " with underlying type ~:@(~A~)
                      *test-database-underlying-type*)
              "")
          ))
                                (lisp-implementation-version)
                                (machine-type))))
          (when *sexp-report-stream*
-           (write sexp-error :stream *sexp-report-stream*)) 
+           (write sexp-error :stream *sexp-report-stream* :readably t)) 
          (push sexp-error *error-list*))
        
        (format *report-stream* "~&Tests skipped:")
 
 
 (defun compute-tests-for-backend (db-type db-underlying-type)
-  (declare (ignorable db-type))
   (let ((test-forms '())
        (skip-tests '()))
-    (dolist (test-form (append (test-basic-forms)
-                              *rt-connection* *rt-fddl* *rt-fdml*
+    (dolist (test-form (append *rt-connection* *rt-basic* *rt-fddl* *rt-fdml*
                               *rt-ooddl* *rt-oodml* *rt-syntax*))
       (let ((test (second test-form)))
        (cond
                (clsql-sys:in test :fdml/select/11 :oodml/select/5))
           (push (cons test "boolean where not supported") skip-tests))
          ((and (null (clsql-sys:db-type-has-subqueries? db-underlying-type))
-               (clsql-sys:in test :fdml/select/5 :fdml/select/10))
+               (clsql-sys:in test :fdml/select/5 :fdml/select/10
+                              :fdml/select/32 :fdml/select/33))
           (push (cons test "subqueries not supported") skip-tests))
          ((and (null (clsql-sys:db-type-transaction-capable? db-underlying-type
                                                    *default-database*))
           (push (cons test "fancy math not supported") skip-tests))
          ((and (eql *test-database-type* :sqlite)
                (clsql-sys:in test :fddl/view/4 :fdml/select/10
-                               :fdml/select/21))
+                               :fdml/select/21 :fdml/select/32 
+                                :fdml/select/33))
           (push (cons test "not supported by sqlite") skip-tests))
+         ((and (not (clsql-sys:db-type-has-bigint? db-type))
+               (clsql-sys:in test :basic/bigint/1))
+          (push (cons test "bigint not supported") skip-tests))
+         ((and (eql *test-database-underlying-type* :mysql)
+               (clsql-sys:in test :fdml/select/26))
+          (push (cons test "string table aliases not supported on all mysql versions") skip-tests))
          ((and (eql *test-database-underlying-type* :mysql)
                (clsql-sys:in test :fdml/select/22 :fdml/query/5 
                                :fdml/query/7 :fdml/query/8))
           (push (cons test "not supported by mysql") skip-tests))
+         ((and (null (clsql-sys:db-type-has-union? db-underlying-type))
+               (clsql-sys:in test :fdml/query/6 :fdml/select/31))
+          (push (cons test "union not supported") skip-tests))
+         ((and (eq *test-database-type* :oracle)
+               (clsql-sys:in test :fdml/query/8 :fdml/select/21))
+          (push (cons test "syntax not supported") skip-tests))
          (t
           (push test-form test-forms)))))
       (values (nreverse test-forms) (nreverse skip-tests))))
 
 
-(defun rapid-load (type)
+(defun rapid-load (type &optional (position 0))
   "Rapid load for interactive testing."
   (when *default-database*
       (disconnect :database *default-database*))
-  (test-connect-to-database type (car (db-type-spec type (read-specs))))
-  (test-initialise-database))
+  (test-connect-to-database type (nth position (db-type-spec type (read-specs))))
+  (test-initialise-database)
+  *default-database*)
 
 (defun rl ()
   (rapid-load :postgresql))
   (rapid-load :mysql))
 
 (defun rlo ()
-  (rapid-load :odbc))
+  (rapid-load :oracle))