r11727: 17 Jun 2007 Kevin Rosenberg <kevin@rosenberg.net>
authorKevin M. Rosenberg <kevin@rosenberg.net>
Sun, 17 Jun 2007 19:39:07 +0000 (19:39 +0000)
committerKevin M. Rosenberg <kevin@rosenberg.net>
Sun, 17 Jun 2007 19:39:07 +0000 (19:39 +0000)
        * db-mysql/mysql-loader.lisp: Do not bother loading libmysqlclient since
        that library is dymically linked to clsql-mysql library. Thus, the mysql
        library will be automatically loaded.

ChangeLog
db-mysql/mysql-loader.lisp
tests/test-connection.lisp
tests/test-init.lisp

index 427a9e20bc5a65aa8485385290c86d03b1a6432f..f6b1fb36190fb3c8e19fc8d826a1e0fa08d7e5b3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+17 Jun 2007  Kevin Rosenberg <kevin@rosenberg.net>
+       * db-mysql/mysql-loader.lisp: Do not bother loading libmysqlclient since
+       that library is dymically linked to clsql-mysql library. Thus, the mysql
+       library will be automatically loaded.
+
 29 May 2007  Kevin Rosenberg <kevin@rosenberg.net>
        * tests/test-fddl.lisp: Add :order-by for :fddl/big/1 as
        reported by Ricardo Boccato Alves
index 1c27ad3c603d0526e4af6150b695648ee78ac70f..0267343684e20c0e441ce595b0b01ac6eb776472 100644 (file)
@@ -40,9 +40,14 @@ set to the right path before compiling or loading the system.")
 (defmethod clsql-sys:database-type-load-foreign ((database-type (eql :mysql)))
   (clsql:push-library-path
    (make-pathname :directory clsql-mysql-system::*library-file-dir*))
-  (clsql-uffi:find-and-load-foreign-library *mysql-library-candidate-names*
-                                            :module "mysql"
-                                            :supporting-libraries *mysql-supporting-libraries*)
+
+  ;; since clsql-mysql is dynamically linked to libmysqlclient, do not need to
+  ;; load libmysqlclient directly
+  ;;
+  ;;(clsql-uffi:find-and-load-foreign-library *mysql-library-candidate-names*
+  ;;                                          :module "mysql"
+  ;;                                          :supporting-libraries *mysql-supporting-libraries*)
+
   (clsql-uffi:find-and-load-foreign-library *clsql-mysql-library-candidate-names*
                                             :module "clsql-mysql"
                                             :supporting-libraries *mysql-supporting-libraries*)
index 7f5a7864967310dac8cead368645d402daf35cc2..6c3bc97d6d4316ae75386f13b8e41f51d1a87686 100644 (file)
@@ -5,7 +5,7 @@
 ;;;; Created: 30/03/2004
 ;;;; Updated: $Id$
 ;;;;
-;;;; Tests for CLSQL database connections. 
+;;;; Tests for CLSQL database connections.
 ;;;;
 ;;;; This file is part of CLSQL.
 ;;;;
@@ -18,7 +18,7 @@
 
 (setq *rt-connection*
       '(
-       
+
 (deftest :connection/1
     (let ((database (clsql:find-database
                      (clsql:database-name clsql:*default-database*)
   t)
 
 (deftest :connection/2
-    (clsql-sys::string-to-list-connection-spec 
+    (clsql-sys::string-to-list-connection-spec
      "localhost/dbname/user/passwd")
   ("localhost" "dbname" "user" "passwd"))
 
 (deftest :connection/3
-    (clsql-sys::string-to-list-connection-spec 
+    (clsql-sys::string-to-list-connection-spec
      "dbname/user@hostname")
   ("hostname" "dbname" "user"))
 
+(deftest :db/1
+    (let ((inner-db-same)
+          (original-a)
+          (outer-db-unchanged))
+      (print "test-connection-spec")
+      (print *test-connection-spec*)
+      (clsql:with-database (a '*test-connection-spec* :database-type *test-connection-db-type*)
+        (setq original-a a)
+        (clsql:with-database (b '*test-connection-spec* :database-type *test-connection-db-type*)
+          (setq inner-db-same (eq a b)))
+        (setq outer-db-unchanged (eq a original-a))))
+  t t)
+
 ))
index 5cdcb78115516fe16e53bea8497bb2bdba9a2879..13538533f69686075d3eb34b4b114c1478629d7a 100644 (file)
@@ -5,7 +5,7 @@
 ;;;; Created: 30/03/2004
 ;;;; Updated: $Id$
 ;;;;
-;;;; Initialisation utilities for running regression tests on CLSQL. 
+;;;; Initialisation utilities for running regression tests on CLSQL.
 ;;;;
 ;;;; This file is part of CLSQL.
 ;;;;
@@ -32,6 +32,8 @@
 (defvar *test-database-underlying-type* nil)
 (defvar *test-database-user* nil)
 (defvar *test-start-utime* nil)
+(defvar *test-connection-spec* nil)
+(defvar *test-connection-db-type* nil)
 
 (defclass thing ()
   ((extraterrestrial :initform nil :initarg :extraterrestrial)))
@@ -44,7 +46,7 @@
    (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
   (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)
   (setf *test-database-user*
     (cond
      ((eq :oracle db-type) (second spec))
      ((>= (length spec) 3) (third spec))))
-  
+
   ;; Connect to the database
   (clsql:connect spec
                 :database-type db-type
                 :make-default t
                 :if-exists :old)
-  
+
   ;; Ensure database is empty
   (truncate-database :database *default-database*)
-  
+
   (setf *test-database-underlying-type*
        (clsql-sys:database-underlying-type *default-database*))
-  
+
   *default-database*)
 
 (defparameter company1 nil)
          employee1 (make-instance 'employee
                                   :emplid 1
                                   :groupid 1
-                                  :married t 
+                                  :married t
                                   :height (1+ (random 1.00))
                                   :bd-utime *test-start-utime*
                                   :birthday now-time
                                   :emplid 2
                                   :groupid 1
                                   :height (1+ (random 1.00))
-                                  :married t 
+                                  :married t
                                   :bd-utime *test-start-utime*
                                   :birthday now-time
                                   :first-name "Josef"
                                   :emplid 3
                                   :groupid 1
                                   :height (1+ (random 1.00))
-                                  :married t 
+                                  :married t
                                   :bd-utime *test-start-utime*
                                   :birthday now-time
                                   :first-name "Leon"
                                   :companyid 1)
          employee9 (make-instance 'employee
                                   :emplid 9
-                                  :groupid 1 
+                                  :groupid 1
                                   :married nil
                                   :height (1+ (random 1.00))
                                   :bd-utime *test-start-utime*
     (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) 
-  
+  (sleep 1)
+
   #||
   ;; Lenin manages everyone
   (clsql:add-to-relation employee2 'manager employee1)
   ;; Lenin is president of Widgets Inc.
   (clsql:add-to-relation company1 'president employee1)
   ||#
-  
+
   ;; store these instances
   #||
   (clsql:update-records-from-instance employee1)
     (load-necessary-systems specs)
     (dolist (db-type +all-db-types+)
       (dolist (spec (db-type-spec db-type specs))
-       (do-tests-for-backend db-type spec))))
+        (let ((*test-connection-spec* spec)
+              (*test-connection-db-type* db-type))
+          (do-tests-for-backend db-type spec)))))
   (zerop *error-count*))
 
 (defun load-necessary-systems (specs)
 ******************************************************************************
 "
          report-type
-         (clsql:format-time 
-          nil 
+         (clsql:format-time
+          nil
           (clsql:utime->time (get-universal-time)))
          (lisp-implementation-type)
          (lisp-implementation-version)
          (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*)
              "")
          ))
 
 (defun do-tests-for-backend (db-type spec)
   (test-connect-to-database db-type spec)
-  
+
   (unwind-protect
        (multiple-value-bind (test-forms skip-tests)
-         (compute-tests-for-backend db-type *test-database-underlying-type*)
-        
-        (write-report-banner "Test Suite" db-type *report-stream*)
-        
-       (test-initialise-database)
-       
-       (regression-test:rem-all-tests)
-       (dolist (test-form test-forms)
-         (eval test-form))
-       
-       (let ((remaining (regression-test:do-tests *report-stream*)))
-         (when (regression-test:pending-tests)
-           (incf *error-count* (length remaining))))
-       
-       (let ((sexp-error (list db-type 
-                               *test-database-underlying-type* 
-                               (get-universal-time)
-                               (length test-forms)
-                               (regression-test:pending-tests)
-                               (lisp-implementation-type) 
-                               (lisp-implementation-version)
-                               (machine-type))))
-         (when *sexp-report-stream*
-           (write sexp-error :stream *sexp-report-stream* :readably t)) 
-         (push sexp-error *error-list*))
-       
-       (format *report-stream* "~&Tests skipped:")
-       (if skip-tests
-           (dolist (skipped skip-tests)
-             (format *report-stream*
-                     "~&   ~20A ~A~%" (car skipped) (cdr skipped)))
-         (format *report-stream* " None~%")))
+           (compute-tests-for-backend db-type *test-database-underlying-type*)
+
+           (write-report-banner "Test Suite" db-type *report-stream*)
+
+           (test-initialise-database)
+
+           (regression-test:rem-all-tests)
+           (dolist (test-form test-forms)
+             (eval test-form))
+
+           (let ((remaining (regression-test:do-tests *report-stream*)))
+             (when (regression-test:pending-tests)
+               (incf *error-count* (length remaining))))
+
+           (let ((sexp-error (list db-type
+                                   *test-database-underlying-type*
+                                   (get-universal-time)
+                                   (length test-forms)
+                                   (regression-test:pending-tests)
+                                   (lisp-implementation-type)
+                                   (lisp-implementation-version)
+                                   (machine-type))))
+             (when *sexp-report-stream*
+               (write sexp-error :stream *sexp-report-stream* :readably t))
+             (push sexp-error *error-list*))
+
+           (format *report-stream* "~&Tests skipped:")
+           (if skip-tests
+               (dolist (skipped skip-tests)
+                 (format *report-stream*
+                         "~&   ~20A ~A~%" (car skipped) (cdr skipped)))
+               (format *report-stream* " None~%")))
     (disconnect)))
 
 
           (push (cons test "fancy math not supported") skip-tests))
          ((and (eql *test-database-type* :sqlite)
                (clsql-sys:in test :fddl/view/4 :fdml/select/10
-                               :fdml/select/21 :fdml/select/32 
+                               :fdml/select/21 :fdml/select/32
                                 :fdml/select/33))
           (push (cons test "not supported by sqlite") skip-tests))
          ((and (eql *test-database-type* :sqlite3)
                (clsql-sys:in test :fddl/view/4 :fdml/select/10
-                             :fdml/select/21 :fdml/select/32 
+                             :fdml/select/21 :fdml/select/32
                              :fdml/select/33))
           (push (cons test "not supported by sqlite3") skip-tests))
          ((and (not (clsql-sys:db-type-has-bigint? db-type))
                (clsql-sys:in test :fdml/select/26))
           (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 
+               (clsql-sys:in test :fdml/select/22 :fdml/query/5
                                :fdml/query/7 :fdml/query/8))
           (push (cons test "not supported by mysql") skip-tests))
          ((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 
+               (clsql-sys:in test :fdml/query/8 :fdml/select/21
                               :fddl/table/6))
           (push (cons test "syntax not supported") skip-tests))
           ((and (eq *test-database-type* :odbc)
                (eq *test-database-underlying-type* :postgresql)
                (clsql-sys:in test :fddl/owner/1))
            (push (cons test "table ownership not supported by postgresql odbc driver") skip-tests))
-         ((and (not (member *test-database-underlying-type* 
+         ((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))
           ((and (eq *test-database-underlying-type* :mssql)
                 (clsql-sys:in test :fdml/select/9))
            (push (cons test "mssql uses integer math for AVG") skip-tests))
-          ((and (not (member *test-database-underlying-type* 
+          ((and (not (member *test-database-underlying-type*
                              '(:postgresql :mysql :sqlite3)))
                 (clsql-sys:in test :fdml/select/37 :fdml/select/38))
            (push (cons test "LIMIT keyword not supported in SELECT") skip-tests))