- (let* ((*db-deserializing* t)
- (*default-database* (or database
- (error 'clsql-no-database-error nil))))
- (flet ((table-sql-expr (table)
- (sql-expression :table (view-table table)))
- (ref-equal (ref1 ref2)
- (equal (sql ref1)
- (sql ref2)))
- (tables-equal (table-a table-b)
- (string= (string (slot-value table-a 'name))
- (string (slot-value table-b 'name)))))
-
- (let* ((sclasses (mapcar #'find-class view-classes))
- (sels (mapcar #'generate-selection-list sclasses))
- (fullsels (apply #'append sels))
- (sel-tables (collect-table-refs where))
- (tables (remove-duplicates (append (mapcar #'table-sql-expr sclasses) sel-tables)
- :test #'tables-equal))
- (res nil))
+ (remf args :flatp)
+ (remf args :result-types)
+ (labels ((table-sql-expr (table)
+ (sql-expression :table (view-table table)))
+ (ref-equal (ref1 ref2)
+ (equal (sql ref1)
+ (sql ref2)))
+ (tables-equal (table-a table-b)
+ (string= (string (slot-value table-a 'name))
+ (string (slot-value table-b 'name))))
+ (build-object (vals vclass selects)
+ (let* ((class-name (class-name vclass))
+ (db-vals (butlast vals (- (list-length vals)
+ (list-length selects))))
+ (*db-initializing* t)
+ (obj (make-instance class-name :view-database database)))
+ ;; use refresh keyword here
+ (setf obj (get-slot-values-from-view obj (mapcar #'car selects)
+ db-vals))
+ (when refresh (instance-refreshed obj))
+ obj))
+ (build-objects (vals sclasses sels)
+ (let ((objects (mapcar #'(lambda (sclass sel)
+ (prog1 (build-object vals sclass sel)
+ (setf vals (nthcdr (list-length sel)
+ vals))))
+ sclasses sels)))
+ (if (and flatp (= (length sclasses) 1))
+ (car objects)
+ objects))))
+ (let* ((*db-deserializing* t)
+ (*default-database* (or database
+ (error 'clsql-no-database-error nil)))
+ (sclasses (mapcar #'find-class view-classes))
+ (sels (mapcar #'generate-selection-list sclasses))
+ (fullsels (apply #'append sels))
+ (sel-tables (collect-table-refs where))
+ (tables (remove-duplicates (append (mapcar #'table-sql-expr sclasses)
+ sel-tables)
+ :test #'tables-equal))
+ (res nil))