(clsql-sys:file-enable-sql-reader-syntax)
+(defmacro has-sql-value-conversion-error (() &body body)
+ `(let (*debugger-hook*)
+ (handler-case
+ (progn ,@body nil)
+ (clsql-sys::sql-value-conversion-error (c)
+ (declare (ignore c))
+ t))))
(setq *rt-oodml*
'(
+(deftest :oodml/read-symbol-value/1-into-this-package
+ (clsql-sys::read-sql-value
+ (clsql-sys::database-output-sql-as-type 'symbol 'clsql-tests::foo nil nil)
+ 'symbol nil nil)
+ clsql-tests::foo)
+
+(deftest :oodml/read-symbol-value/2-into-another-pacakge
+ (clsql-sys::read-sql-value
+ (clsql-sys::database-output-sql-as-type 'symbol 'clsql-sys::foo nil nil)
+ 'symbol nil nil)
+ clsql-sys::foo)
+
+(deftest :oodml/read-symbol-value/3-keyword
+ (clsql-sys::read-sql-value
+ (clsql-sys::database-output-sql-as-type 'keyword ':foo nil nil)
+ 'keyword nil nil)
+ :foo)
+
+(deftest :oodml/read-symbol-value/4-keyword-error
+ (has-sql-value-conversion-error ()
+ (clsql-sys::read-sql-value
+ (clsql-sys::database-output-sql-as-type 'keyword 'foo nil nil)
+ 'keyword nil nil))
+ T)
+
+(deftest :oodml/read-symbol-value/5-unknown-type-error-1
+ (has-sql-value-conversion-error ()
+ (clsql-sys::read-sql-value
+ (clsql-sys::database-output-sql-as-type 'bloop 'foo nil nil)
+ 'bloop nil nil))
+ t)
+
+(deftest :oodml/read-symbol-value/6-unknown-type-error-2
+ (has-sql-value-conversion-error ()
+ (clsql-sys::read-sql-value
+ (clsql-sys::database-output-sql-as-type 'bloop 'foo nil nil)
+ '(or integer float) nil nil))
+ t)
+
+(deftest :oodml/read-symbol-value/read-list
+ (clsql-sys::read-sql-value
+ (clsql-sys::database-output-sql-as-type
+ 'list '(("status" "new" "open")) nil nil)
+ 'list nil nil)
+ (("status" "new" "open")))
+
(deftest :oodml/select/1
(with-dataset *ds-employees*
(mapcar #'(lambda (e) (slot-value e 'last-name))
(deftest :oodm/retrieval/4
(with-dataset *ds-employees*
- (mapcar #'(lambda (ea) (typep (slot-value ea 'address) 'address))
+ (every #'(lambda (ea) (typep (slot-value ea 'address) 'address))
(select 'employee-address :flatp t :caching nil)))
- (t t t t t))
+ t)
(deftest :oodm/retrieval/5
(with-dataset *ds-employees*
- (mapcar #'(lambda (ea) (typep (slot-value ea 'address) 'address))
- (select 'deferred-employee-address :flatp t :caching nil)))
- (t t t t t))
+ (every #'(lambda (ea) (typep (slot-value ea 'address) 'address))
+ (select 'deferred-employee-address :flatp t :caching nil)))
+ t)
(deftest :oodm/retrieval/6
(with-dataset *ds-employees*
(with-dataset *ds-employees*
(mapcar #'(lambda (ea) (slot-value (slot-value ea 'address) 'street-number))
(select 'employee-address :flatp t :order-by [aaddressid] :caching nil)))
- (10 10 nil nil nil))
+ (10 10 nil nil nil nil))
(deftest :oodm/retrieval/9
(with-dataset *ds-employees*
(mapcar #'(lambda (ea) (slot-value (slot-value ea 'address) 'street-number))
(select 'deferred-employee-address :flatp t :order-by [aaddressid] :caching nil)))
- (10 10 nil nil nil))
+ (10 10 nil nil nil nil))
+
+(deftest :oodm/retrieval/10-slot-columns
+ (with-dataset *ds-employees*
+ (mapcar #'title
+ (select 'employee :flatp t :caching nil
+ :where [<= [emplid] 3]
+ :order-by `((,[emplid] :asc)))))
+ (supplicant :adherent cl-user::novice))
;; tests update-records-from-instance
(deftest :oodml/update-records/1
(progn
(clsql:update-records [node]
:av-pairs '(([title] "altered title"))
- :where [= [node-id] 9])
+ :where [= [node-id] (node-id loc2)])
(clsql:update-slot-from-record loc2 'title)
(print-loc loc2))
(progn
(clsql:update-records [subloc]
:av-pairs '(([loc] "altered loc"))
- :where [= [subloc-id] 11])
+ :where [= [subloc-id] (subloc-id subloc2)])
(clsql:update-slot-from-record subloc2 'loc)
(print-subloc subloc2)))))
"9: location-2" "11: second subloc"
(deftest :oodml/cache/1
(with-dataset *ds-employees*
- (progn
+ (let ((*default-caching* t))
(setf (clsql-sys:record-caches *default-database*) nil)
(let ((employees (select 'employee)))
(every #'(lambda (a b) (eq a b))
(deftest :oodml/cache/2
(with-dataset *ds-employees*
- (let ((employees (select 'employee)))
+ (let* ((*default-caching* t)
+ (employees (select 'employee)))
(equal employees (select 'employee :flatp t))))
nil)
(deftest :oodml/refresh/1
(with-dataset *ds-employees*
- (let ((addresses (select 'address)))
+ (let* ((clsql-sys:*default-caching* t)
+ (addresses (select 'address)))
(equal addresses (select 'address :refresh t))))
t)
(deftest :oodml/refresh/2
(with-dataset *ds-employees*
- (let* ((addresses (select 'address :order-by [addressid] :flatp t :refresh t))
+ (let* ((clsql-sys:*default-caching* t)
+ (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"))
(deftest :oodml/refresh/3
(with-dataset *ds-employees*
- (let* ((addresses (select 'address :order-by [addressid] :flatp t)))
+ (let* ((clsql-sys:*default-caching* t)
+ (addresses (select 'address :order-by [addressid] :flatp t)))
(values
(equal addresses (select 'address :refresh t :flatp t))
(equal addresses (select 'address :flatp t)))))
(deftest :oodml/refresh/4
(with-dataset *ds-employees*
- (let* ((addresses (select 'address :order-by [addressid] :flatp t :refresh t))
+ (let* ((clsql-sys:*default-caching* t)
+ (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)))
- (delete-records :from [addr] :where [= [addressid] 1000])
(values
(length addresses)
(length new-addresses)
(eq (first addresses) (first new-addresses))
(eq (second addresses) (second new-addresses))))))
- 2 3 t t)
+ 3 4 t t)
-(deftest :oodml/uoj/1
+(deftest :oodml/uoj/full-set
(with-dataset *ds-employees*
(progn
- (let* ((dea-list (select 'deferred-employee-address :caching nil :order-by ["ea_join" aaddressid]
- :flatp t))
+ (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-objects-joins dea-list)
+ (update-objects-joins dea-list :slots 'address :max-len nil)
(values
initially-unbound
(equal dea-list dea-list-copy)
(every #'(lambda (dea) (slot-boundp dea 'address)) dea-list)
(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))
+ t t t t (1 1 2 2 2 3))
+
+(deftest :oodml/uoj/batched
+ (with-dataset *ds-employees*
+ (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-objects-joins dea-list :slots 'address :max-len 2)
+ (values
+ initially-unbound
+ (equal dea-list dea-list-copy)
+ (every #'(lambda (dea) (slot-boundp dea 'address)) dea-list)
+ (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 3))
;; update-object-joins needs to be fixed for multiple keys
#+ignore
-(deftest :oodml/uoj/2
+(deftest :oodml/uoj/multi-key
(progn
(clsql:update-objects-joins (list company1))
(mapcar #'(lambda (e)
t)
))
+