X-Git-Url: http://git.kpe.io/?p=clsql.git;a=blobdiff_plain;f=tests%2Ftest-init.lisp;h=ac294a7e68b3de8735e92c4b5911cfa85e5a929e;hp=b554625387ef557edc4a8376b5bfb877ba797f9f;hb=d0695ffb828519fade3aa5166236812e6144975b;hpb=d9b32644383f3c4087d0ecac10c645f38d17648d diff --git a/tests/test-init.lisp b/tests/test-init.lisp index b554625..ac294a7 100644 --- a/tests/test-init.lisp +++ b/tests/test-init.lisp @@ -18,6 +18,8 @@ (defvar *report-stream* *standard-output* "Stream to send text report.") (defvar *sexp-report-stream* nil "Stream to send sexp report.") +(defvar *rt-internal*) +(defvar *rt-basic*) (defvar *rt-connection*) (defvar *rt-fddl*) (defvar *rt-fdml*) @@ -29,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))) @@ -39,12 +42,13 @@ (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 @@ -54,15 +58,15 @@ :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 @@ -106,7 +110,7 @@ :type integer :initarg :groupid) (name - :type (string 100) + :type (varchar 100) :initarg :name) (presidentid :type integer @@ -136,13 +140,13 @@ :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 @@ -175,14 +179,20 @@ :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)) (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 @@ -219,7 +229,6 @@ (defun test-initialise-database () (test-basic-initialize) - (let ((*backend-warning-behavior* (if (member *test-database-type* '(:postgresql :postgresql-socket)) :ignore @@ -227,9 +236,12 @@ (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 @@ -240,7 +252,8 @@ :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" @@ -250,7 +263,8 @@ :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" @@ -261,7 +275,8 @@ :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" @@ -272,7 +287,8 @@ :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" @@ -283,7 +299,8 @@ :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" @@ -294,7 +311,8 @@ :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" @@ -305,7 +323,8 @@ :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" @@ -316,7 +335,8 @@ :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" @@ -327,7 +347,8 @@ :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" @@ -338,7 +359,8 @@ :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" @@ -370,8 +392,11 @@ :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) @@ -468,7 +493,7 @@ *** CLSQL ~A begun at ~A *** ~A *** ~A on ~A -*** Database ~A backend~A. +*** Database ~:@(~A~) backend~A. ****************************************************************************** " report-type @@ -480,7 +505,7 @@ (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*) "") )) @@ -526,11 +551,9 @@ (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-internal* *rt-connection* *rt-basic* *rt-fddl* *rt-fdml* *rt-ooddl* *rt-oodml* *rt-syntax*)) (let ((test (second test-form))) (cond @@ -556,9 +579,12 @@ :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") skip-tests)) + (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)) @@ -566,17 +592,25 @@ ((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-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)) @@ -585,4 +619,4 @@ (rapid-load :mysql)) (defun rlo () - (rapid-load :odbc)) + (rapid-load :oracle))