r9804: * doc/ref-ooddl.xml: minor changes to syntax and examples entries
[clsql.git] / tests / test-oodml.lisp
index 2ae3005c55e16e73b5fd7473b233408313103f36..58de7289d77b8600b230e56b1275b1da6acca9f6 100644 (file)
             (employee-addresses employee2))
          ((t t 2 2 2)))
 
+        (deftest :oodml/select/11 
+         (values (mapcar #'(lambda (x) (slot-value x 'emplid))
+                         (clsql:select 'employee :order-by '(([emplid] :asc)) 
+                                       :flatp t))
+          (mapcar #'(lambda (x) (slot-value x 'emplid))
+          (clsql:select 'employee :order-by '(([emplid] :desc)) 
+                        :flatp t)))
+         (1 2 3 4 5 6 7 8 9 10)
+         (10 9 8 7 6 5 4 3 2 1))
+
        ;; test retrieval is deferred
        (deftest :oodm/retrieval/1
            (every #'(lambda (e) (not (slot-boundp e 'company)))
          ("Lenin" "Stalin" "Trotsky"))
 
 
-      (deftest oodml/cache/1
+      (deftest :oodml/cache/1
          (progn
            (setf (clsql-sys:record-caches *default-database*) nil)
            (let ((employees (select 'employee)))
                     employees (select 'employee))))
        t)
 
-       (deftest oodml/cache/2
+       (deftest :oodml/cache/2
            (let ((employees (select 'employee)))
              (equal employees (select 'employee :flatp t)))
          nil)
        
-       (deftest oodml/refresh/1
+       (deftest :oodml/refresh/1
            (let ((addresses (select 'address)))
              (equal addresses (select 'address :refresh t)))
          t)
 
-       (deftest oodml/refresh/2
-           (let* ((addresses (select 'address :order-by [addressid] :flatp t))
+       (deftest :oodml/refresh/2
+           (let* ((addresses (select 'address :order-by [addressid] :flatp t :refresh t))
                   (city (slot-value (car addresses) 'city)))
              (clsql:update-records [addr] 
                               :av-pairs '((city_field "A new city"))
                        new-city)))
          t "Leningrad" "A new city")
        
-       (deftest oodml/refresh/3
+       (deftest :oodml/refresh/3
            (let* ((addresses (select 'address :order-by [addressid] :flatp t)))
              (values
               (equal addresses (select 'address :refresh t :flatp t))
               (equal addresses (select 'address :flatp t))))
          nil nil)
        
-       (deftest oodml/refresh/4
-           (let* ((addresses (select 'address :order-by [addressid] :flatp t))
+       (deftest :oodml/refresh/4
+           (let* ((addresses (select 'address :order-by [addressid] :flatp t :refresh t))
                   (*db-auto-sync* t))
              (make-instance 'address :addressid 1000 :city "A new address city")
              (let ((new-addresses (select 'address :order-by [addressid] :flatp t :refresh t)))
          2 3 t t)
                
              
-       (deftest oodml/uoj/1
+       (deftest :oodml/uoj/1
            (progn
              (let* ((dea-list (select 'deferred-employee-address :caching nil :order-by [ea_join aaddressid]
                                       :flatp t))
                     (dea-list-copy (copy-seq dea-list))
                     (initially-unbound (every #'(lambda (dea) (not (slot-boundp dea 'address))) dea-list)))
-               (update-object-joins dea-list)
+               (update-objects-joins dea-list)
                (values
                 initially-unbound
                 (equal dea-list dea-list-copy)
                 (every #'(lambda (dea) (typep (slot-value dea 'address) 'address)) dea-list)
                 (mapcar #'(lambda (dea) (slot-value (slot-value dea 'address) 'addressid)) dea-list))))
          t t t t (1 1 2 2 2))
+       
+       (deftest :oodml/big/1 
+           (let ((objs (clsql:select 'big :order-by [i] :flatp t)))
+             (values
+              (length objs)
+              (do ((i 0 (1+ i))
+                   (max (expt 2 60))
+                   (rest objs (cdr rest)))
+                  ((= i (length objs)) t)
+                (let ((obj (car rest))
+                      (index (1+ i)))
+                  (unless (and (eql (slot-value obj 'i) index)
+                               (eql (slot-value obj 'bi) (truncate max index)))
+                    (print index)
+                    (describe obj)
+                    (return nil))))))
+         555 t)
+
+        (deftest :oodml/db-auto-sync/1 
+            (values
+              (progn 
+                (make-instance 'employee :emplid 20 :groupid 1 
+                               :last-name "Ivanovich")
+                (select [last-name] :from [employee] :where [= [emplid] 20]
+                        :flatp t :field-names nil))
+             (let ((*db-auto-sync* t))
+               (make-instance 'employee :emplid 20 :groupid 1 
+                              :last-name "Ivanovich")
+               (prog1 (select [last-name] :from [employee] :flatp t
+                              :field-names nil 
+                              :where [= [emplid] 20])
+                 (delete-records :from [employee] :where [= [emplid] 20]))))
+          nil ("Ivanovich"))
+
+        (deftest :oodml/db-auto-sync/2
+            (values
+             (let ((instance (make-instance 'employee :emplid 20 :groupid 1 
+                                            :last-name "Ivanovich")))
+               (setf (slot-value instance 'last-name) "Bulgakov")
+               (select [last-name] :from [employee] :where [= [emplid] 20]
+                       :flatp t :field-names nil))
+             (let* ((*db-auto-sync* t)
+                    (instance (make-instance 'employee :emplid 20 :groupid 1 
+                                             :last-name "Ivanovich")))
+               (setf (slot-value instance 'last-name) "Bulgakov")
+               (prog1 (select [last-name] :from [employee] :flatp t
+                              :field-names nil 
+                              :where [= [emplid] 20])
+                 (delete-records :from [employee] :where [= [emplid] 20]))))
+          nil ("Bulgakov"))
+       
+        (deftest :oodml/setf-slot-value/1 
+            (let* ((*db-auto-sync* t)
+                   (instance (make-instance 'employee :emplid 20 :groupid 1)))
+              (prog1 
+                  (setf 
+                   (slot-value instance 'first-name) "Mikhail"
+                   (slot-value instance 'last-name) "Bulgakov")
+                (delete-records :from [employee] :where [= [emplid] 20])))
+          "Bulgakov")
+
        ))
+
 #.(clsql:restore-sql-reader-syntax-state)