r10077: * multiple: Apply patch from Joerg Hoehle with multiple
[clsql.git] / tests / test-fddl.lisp
index b75f2cf2dbdc6ceb60ca2d091ed3dd8c65623c14..f5527c773f7cce25f3ff017cc3f6c40cddb7f28f 100644 (file)
       (clsql:drop-table "MyMixedCase"))
   ((5) (6)))
 
+(deftest :fddl/table/6 
+    (values
+     (clsql:table-exists-p [foo])
+     (progn
+       (let ((*backend-warning-behavior*
+              (if (member *test-database-type* 
+                          '(:postgresql :postgresql-socket))
+                  :ignore
+                  :warn)))
+         (clsql:create-table [foo] 
+                             '(([bar] integer :not-null :unique :primary-key) 
+                               ([baz] string :not-null :unique))))
+       (clsql:table-exists-p [foo]))
+     (progn
+       (clsql:drop-table [foo])
+       (clsql:table-exists-p [foo])))
+  nil t nil)    
+
+(deftest :fddl/table/7 
+    (values
+     (clsql:table-exists-p [foo])
+     (progn
+       (let ((*backend-warning-behavior*
+              (if (member *test-database-type* 
+                          '(:postgresql :postgresql-socket))
+                  :ignore
+                  :warn)))
+         (clsql:create-table [foo] '(([bar] integer :not-null) 
+                                     ([baz] string :not-null))
+                             :constraints '("UNIQUE (bar,baz)" 
+                                            "PRIMARY KEY (bar)")))
+       (clsql:table-exists-p [foo]))
+     (progn
+       (clsql:drop-table [foo])
+       (clsql:table-exists-p [foo])))
+  nil t nil)    
+
 (deftest :fddl/attributes/1
     (apply #'values
            (sort 
   t)
 
 (deftest :fddl/attributes/7
-    (and (member (clsql:attribute-type [bd_utime] [employee]) '(:bigint :int8 :number)) t)
+    (and (member (clsql:attribute-type [bd_utime] [employee]) '(:bigint :int8 :char)) t)
   t)
 
 
     (let ((names '("foo" foo [foo]))
           (result '()))
       (dolist (name names)
-        (clsql:create-index name :on [employee] :attributes '([emplid]))
+        (clsql:create-index name :on [employee] :attributes '([last-name]))
         (push (clsql:index-exists-p name :owner *test-database-user*) result)
        (clsql:drop-index name :on [employee] :if-does-not-exist :ignore))
       (apply #'values result))
   t t t)
 
-;; test list-table-indexes
+;; test list-indexes with keyword :ON 
 (deftest :fddl/index/3
     (progn
       (clsql:create-table [i3test] '(([a] (string 10))
        (sort 
        (mapcar 
         #'string-downcase
-        (clsql:list-table-indexes [i3test] :owner *test-database-user*))
+        (clsql:list-indexes :on [i3test] :owner *test-database-user*))
        #'string-lessp)
        (progn
         (clsql:drop-index [bar] :on [i3test])
            (max (expt 2 60))
            (rest rows (cdr rest)))
           ((= i (length rows)) t)
-        (let ((row (car rest))
-              (index (1+ i)))
-          (unless (and (eql (first row) index)
-                       (eql (second row) (truncate max index)))
+        (let ((index (1+ i))
+              (int (first (car rest)))
+              (bigint (second (car rest))))
+          (when (and (or (eq *test-database-type* :oracle)
+                         (and (eq *test-database-type* :odbc)
+                              (eq *test-database-underlying-type* :postgresql)))
+                     (stringp bigint))
+            (setf bigint (parse-integer bigint)))
+          (unless (and (eql int index)
+                       (eql bigint (truncate max index)))
             (return nil))))))
   555 t)
 
-          
-))
+(deftest :fddl/owner/1 
+    (and 
+     ;; user tables are an improper subset of all tables 
+     (= (length (intersection (clsql:list-tables :owner nil) 
+                              (clsql:list-tables :owner :all)
+                              :test #'string=))
+        (length (clsql:list-tables :owner nil)))
+     ;; user tables are a proper subset of all tables 
+     (> (length (clsql:list-tables :owner :all)) 
+        (length (clsql:list-tables :owner nil))))
+  t) 
+
+(deftest :fddl/cache-table-queries/1 
+ (list 
+  (gethash "EMPLOYEE" (clsql-sys::attribute-cache clsql:*default-database*))
+  (progn 
+    (clsql:cache-table-queries "EMPLOYEE" :action t)
+    (gethash "EMPLOYEE" (clsql-sys::attribute-cache clsql:*default-database*)))
+  (progn 
+    (clsql:list-attribute-types "EMPLOYEE")
+    (not 
+     (null 
+      (cadr 
+       (gethash "EMPLOYEE" 
+                (clsql-sys::attribute-cache clsql:*default-database*))))))
+  (progn 
+    (clsql:cache-table-queries "EMPLOYEE" :action :flush)
+    (gethash "EMPLOYEE" (clsql-sys::attribute-cache clsql:*default-database*))))
+ (nil (t nil) t (t nil)))
+
+  ))
 
 #.(clsql:restore-sql-reader-syntax-state)