(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)
: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))
(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
(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*)
"")
))
((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))