;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
;;;; ======================================================================
-;;;; File: test-fddl.lisp
-;;;; Author: Marcus Pearce <m.t.pearce@city.ac.uk>
-;;;; Created: 30/03/2004
-;;;; Updated: $Id$
+;;;; File: test-fddl.lisp
+;;;; Authors: Marcus Pearce <m.t.pearce@city.ac.uk> and Kevin Rosenberg
+;;;; Created: 30/03/2004
+;;;; Updated: $Id$
;;;;
;;;; Tests for the CLSQL Functional Data Definition Language
;;;; (FDDL).
(apply #'values
(sort (mapcar #'string-downcase
(clsql:list-tables :owner *test-database-user*))
- #'string>))
- "employee" "company")
+ #'string<))
+ "addr" "company" "ea_join" "employee" "type_bigint" "type_table")
;; create a table, test for its existence, drop it and test again
(deftest :fddl/table/2
(sort
(mapcar #'string-downcase
(clsql:list-attributes [employee]
- :owner *test-database-user*))
+ :owner *test-database-user*))
#'string<))
- "birthday" "companyid" "email" "emplid" "first_name" "groupid" "height"
+ "birthday" "ecompanyid" "email" "emplid" "first_name" "groupid" "height"
"last_name" "managerid" "married")
(deftest :fddl/attributes/2
(clsql:list-attribute-types [employee]
:owner *test-database-user*))
#'string<))
- "birthday" "companyid" "email" "emplid" "first_name" "groupid" "height"
+ "birthday" "ecompanyid" "email" "emplid" "first_name" "groupid" "height"
"last_name" "managerid" "married")
+;; Attribute types are vendor specific so need to test a range
+(deftest :fddl/attributes/3
+ (and (member (clsql:attribute-type [emplid] [employee]) '(:int :integer :int4 :number)) t)
+ t)
+
+(deftest :fddl/attributes/4
+ (multiple-value-bind (type length scale nullable)
+ (clsql:attribute-type [first-name] [employee])
+ (values (clsql-sys:in type :varchar :varchar2) length scale nullable))
+ t 30 nil 1)
+
+(deftest :fddl/attributes/5
+ (and (member (clsql:attribute-type [birthday] [employee]) '(:datetime :timestamp :date)) t)
+ t)
+
+(deftest :fddl/attributes/6
+ (and (member (clsql:attribute-type [height] [employee]) '(:float :float8 :number)) t)
+ t)
+
+
+
;; create a view, test for existence, drop it and test again
(deftest :fddl/view/1
(progn (clsql:create-view [lenins-group]
t nil)
;; create a view, list its attributes and drop it
-(when (clsql-base-sys:db-type-has-views? *test-database-underlying-type*)
+(when (clsql-sys:db-type-has-views? *test-database-underlying-type*)
(deftest :fddl/view/2
(progn (clsql:create-view [lenins-group]
:as [select [first-name] [last-name] [email]
;; test list-table-indexes
(deftest :fddl/index/3
(progn
- (clsql:execute-command "CREATE TABLE I3TEST (a char(10), b integer)")
- (clsql:create-index [bar] :on [i3test] :attributes
- '([a]) :unique t)
+ (clsql:create-table [i3test] '(([a] (string 10))
+ ([b] integer)))
(clsql:create-index [foo] :on [i3test] :attributes
- '([b]) :unique nil)
+ '([b]) :unique nil)
+ (clsql:create-index [bar] :on [i3test] :attributes
+ '([a]) :unique t)
(values
-
+ (clsql:table-exists-p [i3test])
+ (clsql:index-exists-p [foo])
+ (clsql:index-exists-p [bar])
(sort
(mapcar
#'string-downcase
(clsql:list-table-indexes [i3test] :owner *test-database-user*))
- #'string-lessp)
- (sort (clsql:list-table-indexes [company] :owner *test-database-user*)
- #'string-lessp)
+ #'string-lessp)
(progn
(clsql:drop-index [bar] :on [i3test])
(clsql:drop-index [foo] :on [i3test])
- (clsql:execute-command "DROP TABLE I3TEST")
+ (clsql:drop-table [i3test])
t)))
- ("bar" "foo") nil t)
+ t t t ("bar" "foo") t)
;; create an sequence, test for existence, drop it and test again
(deftest :fddl/sequence/1