r9804: * doc/ref-ooddl.xml: minor changes to syntax and examples entries
[clsql.git] / tests / test-init.lisp
index 543ab871f6bfefebd69093f8cadeb4478cfeb3df..ac294a7e68b3de8735e92c4b5911cfa85e5a929e 100644 (file)
@@ -18,8 +18,9 @@
 
 (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-internal*)
 (defvar *rt-basic*)
+(defvar *rt-connection*)
 (defvar *rt-fddl*)
 (defvar *rt-fdml*)
 (defvar *rt-ooddl*)
@@ -30,6 +31,7 @@
 (defvar *test-database-type* nil)
 (defvar *test-database-underlying-type* nil)
 (defvar *test-database-user* nil)
+(defvar *test-start-utime* nil)
 
 (defclass thing ()
   ((extraterrestrial :initform nil :initarg :extraterrestrial)))
    (married :db-kind :base :accessor married :type boolean
             :initarg :married)
    (birthday :type clsql:wall-time :initarg :birthday)
+   (bd-utime :type clsql:universal-time :initarg :bd-utime)
    (hobby :db-kind :virtual :initarg :hobby :initform nil)))
   
 (def-view-class employee (person)
   ((emplid
     :db-kind :key
-    :db-constraints :not-null
+    :db-constraints (:not-null :unique)
     :type integer
     :initarg :emplid)
    (groupid
     :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
                                  :set nil)))
   (:base-table "ea_join"))
 
+(def-view-class big ()
+  ((i :type integer :initarg :i)
+   (bi :type bigint :initarg :bi)))
+
 (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))
     (clsql:create-view-from-class 'employee)
     (clsql:create-view-from-class 'company)
     (clsql:create-view-from-class 'address)
-    (clsql:create-view-from-class 'employee-address))
+    (clsql:create-view-from-class 'employee-address)
+    (clsql:create-view-from-class 'big))
 
-  (let ((*db-auto-sync* t))
+  (setq *test-start-utime* (get-universal-time))
+  (let* ((*db-auto-sync* t)
+        (now-time (clsql:utime->time *test-start-utime*)))
     (setf company1 (make-instance 'company
                                  :presidentid 1
                                  :companyid 1
                                   :groupid 1
                                   :married t 
                                   :height (1+ (random 1.00))
-                                  :birthday (clsql:get-time)
+                                  :bd-utime *test-start-utime*
+                                  :birthday now-time
                                   :first-name "Vladamir"
                                   :last-name "Lenin"
                                   :email "lenin@soviet.org"
                                   :groupid 1
                                   :height (1+ (random 1.00))
                                   :married t 
-                                  :birthday (clsql:get-time)
+                                  :bd-utime *test-start-utime*
+                                  :birthday now-time
                                   :first-name "Josef"
                                   :last-name "Stalin"
                                   :email "stalin@soviet.org"
                                   :groupid 1
                                   :height (1+ (random 1.00))
                                   :married t 
-                                  :birthday (clsql:get-time)
+                                  :bd-utime *test-start-utime*
+                                  :birthday now-time
                                   :first-name "Leon"
                                   :last-name "Trotsky"
                                   :email "trotsky@soviet.org"
                                   :groupid 1
                                   :height (1+ (random 1.00))
                                   :married nil
-                                  :birthday (clsql:get-time)
+                                  :bd-utime *test-start-utime*
+                                  :birthday now-time
                                   :first-name "Nikita"
                                   :last-name "Kruschev"
                                   :email "kruschev@soviet.org"
                                   :groupid 1
                                   :married nil
                                   :height (1+ (random 1.00))
-                                  :birthday (clsql:get-time)
+                                  :bd-utime *test-start-utime*
+                                  :birthday now-time
                                   :first-name "Leonid"
                                   :last-name "Brezhnev"
                                   :email "brezhnev@soviet.org"
                                   :groupid 1
                                   :married nil
                                   :height (1+ (random 1.00))
-                                  :birthday (clsql:get-time)
+                                  :bd-utime *test-start-utime*
+                                  :birthday now-time
                                   :first-name "Yuri"
                                   :last-name "Andropov"
                                   :email "andropov@soviet.org"
                                   :groupid 1
                                   :height (1+ (random 1.00))
                                   :married nil
-                                  :birthday (clsql:get-time)
+                                  :bd-utime *test-start-utime*
+                                  :birthday now-time
                                   :first-name "Konstantin"
                                   :last-name "Chernenko"
                                   :email "chernenko@soviet.org"
                                   :groupid 1
                                   :height (1+ (random 1.00))
                                   :married nil
-                                  :birthday (clsql:get-time)
+                                  :bd-utime *test-start-utime*
+                                  :birthday now-time
                                   :first-name "Mikhail"
                                   :last-name "Gorbachev"
                                   :email "gorbachev@soviet.org"
                                   :groupid 1 
                                   :married nil
                                   :height (1+ (random 1.00))
-                                  :birthday (clsql:get-time)
+                                  :bd-utime *test-start-utime*
+                                  :birthday now-time
                                   :first-name "Boris"
                                   :last-name "Yeltsin"
                                   :email "yeltsin@soviet.org"
                                    :groupid 1
                                    :married nil
                                    :height (1+ (random 1.00))
-                                   :birthday (clsql:get-time)
+                                   :bd-utime *test-start-utime*
+                                   :birthday now-time
                                    :first-name "Vladamir"
                                    :last-name "Putin"
                                    :email "putin@soviet.org"
                                           :verified nil)
          employee-address5 (make-instance 'employee-address
                                           :emplid 3
-                                          :addressid 2)
-         ))
+                                          :addressid 2))
+
+    (let ((max (expt 2 60)))
+      (dotimes (i 555)
+       (make-instance 'big :i (1+ i) :bi (truncate max (1+ i))))))
     
   ;; sleep to ensure birthdays are no longer at current time
   (sleep 1) 
          (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*)
              "")
          ))
 (defun compute-tests-for-backend (db-type db-underlying-type)
   (let ((test-forms '())
        (skip-tests '()))
-    (dolist (test-form (append *rt-connection* *rt-basic* *rt-fddl* *rt-fdml*
+    (dolist (test-form (append *rt-internal* *rt-connection* *rt-basic* *rt-fddl* *rt-fdml*
                               *rt-ooddl* *rt-oodml* *rt-syntax*))
       (let ((test (second test-form)))
        (cond
          ((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))
+          ((and (not (member *test-database-underlying-type* 
+                             '(:postgresql :oracle)))
+                (clsql-sys:in test :fddl/owner/1))
+           (push (cons test "table ownership 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-connect-to-database type (nth position (db-type-spec type (read-specs))))
   (test-initialise-database)
   *default-database*)