r9395: 18 May 2004 Kevin Rosenberg (kevin@rosenberg.net)
[clsql.git] / tests / test-basic.lisp
index a6a501ec1a3e8606d2d7eb9988fadada71565b9c..1cd09d2b50fe1171da577a48444b2f093e5597a6 100644 (file)
@@ -3,7 +3,7 @@
 ;;;; FILE IDENTIFICATION
 ;;;;
 ;;;; Name:    test-basic.lisp
 ;;;; FILE IDENTIFICATION
 ;;;;
 ;;;; Name:    test-basic.lisp
-;;;; Purpose: Tests for clsql-base and result types
+;;;; Purpose: Tests for clsql string-based queries and result types
 ;;;; Author:  Kevin M. Rosenberg
 ;;;; Created: Mar 2002
 ;;;;
 ;;;; Author:  Kevin M. Rosenberg
 ;;;; Created: Mar 2002
 ;;;;
 
 (in-package #:clsql-tests)
 
 
 (in-package #:clsql-tests)
 
-(defun test-basic-initialize ()
-  (ignore-errors
-   (clsql:execute-command "DROP TABLE TYPE_TABLE"))
-  (clsql:execute-command 
-   "CREATE TABLE TYPE_TABLE (t_int integer, t_float double precision, t_bigint BIGINT, t_str VARCHAR(30))")
-  (dotimes (i 11)
-    (let* ((test-int (- i 5))
-          (test-flt (transform-float-1 test-int)))
-      (clsql:execute-command
-       (format nil "INSERT INTO TYPE_TABLE VALUES (~a,~a,~a,'~a')"
-              test-int
-              (clsql-base:number-to-sql-string test-flt)
-              (transform-bigint-1 test-int)
-              (clsql-base:number-to-sql-string test-flt)
-              )))))
-
-(defun test-basic-forms ()
-  (append
-   (test-basic-forms-untyped)
-   '(
-     (deftest BASIC/TYPE/1
+(setq *rt-basic*
+  '(
+    (deftest :BASIC/TYPE/1
        (let ((results '()))
          (dolist (row (query "select * from TYPE_TABLE" :result-types :auto)
        (let ((results '()))
          (dolist (row (query "select * from TYPE_TABLE" :result-types :auto)
-                   results)
-           (destructuring-bind (int float bigint str) row
+                  results)
+           (destructuring-bind (int float str) row
              (push (list (integerp int)
                          (typep float 'double-float)
              (push (list (integerp int)
                          (typep float 'double-float)
-                         (if (member *test-database-type* '(:odbc :aodbc))  
-                             t
-                           (integerp bigint))
                          (stringp str))
                    results))))
                          (stringp str))
                    results))))
-      ((t t t t) (t t t t) (t t t t) (t t t t) (t t t t) (t t t t) (t t t t) (t t t t) (t t t t) (t t t t) (t t t t)))
-    
+      ((t t t) (t t t) (t t t) (t t t) (t t t) (t t t) (t t t) (t t t) (t t t) (t t t) (t t t)))
 
 
-     (deftest BASIC/TYPE/2
+     (deftest :BASIC/TYPE/2
         (let ((results '()))
           (dolist (row (query "select * from TYPE_TABLE" :result-types :auto)
                     results)
         (let ((results '()))
           (dolist (row (query "select * from TYPE_TABLE" :result-types :auto)
                     results)
-            (destructuring-bind (int float bigint str) row
-              (push (list (double-float-equal 
-                           (transform-float-1 int)
-                           float)
-                          (double-float-equal
-                           (parse-double str)
-                           float))
-                    results))))
+            (destructuring-bind (int float str) row
+              (setq results
+                    (cons (list (double-float-equal 
+                                 (transform-float-1 int)
+                                 float)
+                                (double-float-equal
+                                 (parse-double str)
+                                 float))
+                          results))))
+          results)
        ((t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t)))
        ((t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t)))
-     )))
 
 
-(defun test-basic-forms-untyped ()
-  '((deftest BASIC/SELECT/1
+  (deftest :BASIC/SELECT/1
        (let ((rows (query "select * from TYPE_TABLE" :result-types :auto)))
          (values 
           (length rows)
           (length (car rows))))
        (let ((rows (query "select * from TYPE_TABLE" :result-types :auto)))
          (values 
           (length rows)
           (length (car rows))))
-      11 4)
+      11 3)
     
     
-    (deftest BASIC/SELECT/2
+    (deftest :BASIC/SELECT/2
        (let ((results '()))
          (dolist (row (query "select * from TYPE_TABLE" :result-types nil)
                    results)
        (let ((results '()))
          (dolist (row (query "select * from TYPE_TABLE" :result-types nil)
                    results)
-           (destructuring-bind (int float bigint str) row
+           (destructuring-bind (int float str) row
              (push (list (stringp int)
                          (stringp float)
              (push (list (stringp int)
                          (stringp float)
-                         (stringp bigint)
                          (stringp str))
                    results))))
                          (stringp str))
                    results))))
-      ((t t t t) (t t t t) (t t t t) (t t t t) (t t t t) (t t t t) (t t t t) (t t t t) (t t t t) (t t t t) (t t t t)))
+      ((t t t) (t t t) (t t t) (t t t) (t t t) (t t t) (t t t) (t t t) (t t t) (t t t) (t t t)))
     
     
-    (deftest BASIC/SELECT/3
+    (deftest :BASIC/SELECT/3
        (let ((results '()))
          (dolist (row (query "select * from TYPE_TABLE" :result-types nil)
                    results)
        (let ((results '()))
          (dolist (row (query "select * from TYPE_TABLE" :result-types nil)
                    results)
-           (destructuring-bind (int float bigint str) row
+           (destructuring-bind (int float str) row
              (push (list (double-float-equal 
                           (transform-float-1 (parse-integer int))
                           (parse-double float))
              (push (list (double-float-equal 
                           (transform-float-1 (parse-integer int))
                           (parse-double float))
                    results))))
       ((t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t)))
 
                    results))))
       ((t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t)))
 
-    (deftest BASIC/MAP/1
+    (deftest :BASIC/MAP/1
        (let ((results '())
        (let ((results '())
-             (rows (map-query 'vector #'list "select * from TYPE_TABLE" 
+             (rows (map-query 'vector #'identity "select * from TYPE_TABLE" 
                               :result-types nil)))
                               :result-types nil)))
+         (declare (type (simple-array list (*)) rows))
          (dotimes (i (length rows) results)
            (push
             (list
          (dotimes (i (length rows) results)
            (push
             (list
               (transform-float-1 (parse-integer (first (aref rows i))))
               (parse-double (second (aref rows i)))))
             results)))
               (transform-float-1 (parse-integer (first (aref rows i))))
               (parse-double (second (aref rows i)))))
             results)))
-      ((t 4 t t) (t 4 t t) (t 4 t t) (t 4 t t) (t 4 t t) (t 4 t t) (t 4 t t) (t 4 t t) (t 4 t t) (t 4 t t) (t 4 t t)))
+      ((t 3 t t) (t 3 t t) (t 3 t t) (t 3 t t) (t 3 t t) (t 3 t t) (t 3 t t) (t 3 t t) (t 3 t t) (t 3 t t) (t 3 t t)))
     
     
-    (deftest BASIC/MAP/2
+    (deftest :BASIC/MAP/2
        (let ((results '())
        (let ((results '())
-             (rows (map-query 'list #'list "select * from TYPE_TABLE" 
+             (rows (map-query 'list #'identity "select * from TYPE_TABLE" 
                               :result-types nil)))
          (dotimes (i (length rows) results)
            (push
                               :result-types nil)))
          (dotimes (i (length rows) results)
            (push
               (transform-float-1 (parse-integer (first (nth i rows))))
               (parse-double (second (nth i rows)))))
             results)))
               (transform-float-1 (parse-integer (first (nth i rows))))
               (parse-double (second (nth i rows)))))
             results)))
-      ((t 4 t t) (t 4 t t) (t 4 t t) (t 4 t t) (t 4 t t) (t 4 t t) (t 4 t t) (t 4 t t) (t 4 t t) (t 4 t t) (t 4 t t)))
+      ((t 3 t t) (t 3 t t) (t 3 t t) (t 3 t t) (t 3 t t) (t 3 t t) (t 3 t t) (t 3 t t) (t 3 t t) (t 3 t t) (t 3 t t)))
+    
+    (deftest :BASIC/MAP/3
+           (let ((results '())
+             (rows (map-query 'list #'identity "select * from TYPE_TABLE" 
+                              :result-types :auto)))
+             (dotimes (i (length rows) results)
+               (push
+                (list
+                 (listp (nth i rows))
+                 (length (nth i rows))
+                 (eql (- i 5)
+                      (first (nth i rows)))
+                 (double-float-equal
+                  (transform-float-1 (first (nth i rows)))
+                  (second (nth i rows))))
+                results)))
+      ((t 3 t t) (t 3 t t) (t 3 t t) (t 3 t t) (t 3 t t) (t 3 t t) (t 3 t t) (t 3 t t) (t 3 t t) (t 3 t t) (t 3 t t)))
 
 
-    (deftest BASIC/DO/1
+    (deftest :BASIC/DO/1
        (let ((results '()))
        (let ((results '()))
-         (do-query ((int float bigint str) "select * from TYPE_TABLE")
-           (push (list (double-float-equal 
-                        (transform-float-1 (parse-integer int))
-                        (parse-double float))
-                       (double-float-equal
-                        (parse-double str)
-                        (parse-double float)))
-                 results))
+         (do-query ((int float str) "select * from TYPE_TABLE" :result-types nil)
+           (let ((int-number (parse-integer int)))
+             (setq results
+                   (cons (list (double-float-equal (transform-float-1
+                                                    int-number)
+                                                   (parse-double float))
+                             (double-float-equal (parse-double str)
+                                                 (parse-double float)))
+                       results))))
          results)
       ((t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t)))
          results)
       ((t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t)))
+
+    (deftest :BASIC/DO/2
+       (let ((results '()))
+         (do-query ((int float str) "select * from TYPE_TABLE" :result-types :auto)
+           (setq results
+                 (cons
+                  (list (double-float-equal 
+                         (transform-float-1 int)
+                         float)
+                        (double-float-equal
+                         (parse-double str)
+                         float))
+                  results)))
+         results)
+      ((t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t)))
+
+
+    (deftest :BASIC/BIGINT/1
+       (let ((results '()))
+         (dolist (row (query "select * from TYPE_BIGINT" :result-types :auto)
+                  results)
+           (destructuring-bind (int bigint) row
+             (push (list (integerp int)
+                         (if (and (eq :odbc *test-database-type*)
+                                  (eq :postgresql *test-database-underlying-type*))
+                             ;; ODBC/Postgresql may return returns bigints as strings or integer
+                             ;; depending upon the platform
+                             t
+                           (integerp bigint)))
+                   results))))
+      ((t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t) (t t)))
+
     ))
 
 
     ))
 
 
+(defun test-basic-initialize ()
+  (ignore-errors
+   (clsql:execute-command "DROP TABLE TYPE_TABLE")
+   (clsql:execute-command "DROP TABLE TYPE_BIGINT"))
+
+  (clsql:execute-command 
+   "CREATE TABLE TYPE_TABLE (t_int integer, t_float double precision, t_str VARCHAR(30))")
+
+  (if (clsql-sys:db-type-has-bigint? *test-database-type*)
+    (clsql:execute-command "CREATE TABLE TYPE_BIGINT (t_int integer, t_bigint BIGINT)")
+    (clsql:execute-command "CREATE TABLE TYPE_BIGINT (t_int integer)"))
+
+  (dotimes (i 11)
+    (let* ((test-int (- i 5))
+          (test-flt (transform-float-1 test-int)))
+      (clsql:execute-command
+       (format nil "INSERT INTO TYPE_TABLE VALUES (~a,~a,'~a')"
+              test-int
+              (clsql-sys:number-to-sql-string test-flt)
+              (clsql-sys:number-to-sql-string test-flt)
+              ))
+      (when (clsql-sys:db-type-has-bigint? *test-database-type*)
+       (clsql:execute-command
+        (format nil "INSERT INTO TYPE_BIGINT VALUES (~a,~a)"
+                test-int
+                (transform-bigint-1 test-int)
+                ))))))
+
 ;;;; Testing functions
 
 (defun transform-float-1 (i)
 ;;;; Testing functions
 
 (defun transform-float-1 (i)