Skip to content

Commit 1e99b02

Browse files
committed
Make do-select work even with select-by-sql.
1 parent 7c71f59 commit 1e99b02

File tree

2 files changed

+14
-10
lines changed

2 files changed

+14
-10
lines changed

README.markdown

+2
Original file line numberDiff line numberDiff line change
@@ -626,6 +626,8 @@ Since `insert-dao`, `update-dao` and `delete-dao` are defined as generic functio
626626
do (return dao))
627627
```
628628

629+
The query form must be one of `select-dao`, `retrieve-dao`, or `select-by-sql`.
630+
629631
## Installation
630632

631633
```common-lisp

src/core/dao.lisp

+12-10
Original file line numberDiff line numberDiff line change
@@ -230,13 +230,16 @@
230230
collect value)))))
231231

232232
(defun select-by-sql (class sql &key binds)
233-
(mapcar (lambda (result)
234-
(apply #'make-dao-instance class result))
235-
(retrieve-by-sql sql :binds binds)))
233+
(if *want-cursor*
234+
(select-by-sql-as-cursor class sql :binds binds)
235+
(mapcar (lambda (result)
236+
(apply #'make-dao-instance class result))
237+
(retrieve-by-sql sql :binds binds))))
236238

237239
(defun include-foreign-objects (foreign-class records)
238240
(when records
239-
(let ((foreign-class (ensure-class foreign-class)))
241+
(let ((*want-cursor* nil)
242+
(foreign-class (ensure-class foreign-class)))
240243
(when (cdr (table-primary-key foreign-class))
241244
(error "Cannot use 'includes' with a class which has composite primary keys."))
242245
(let* ((class (class-of (first records)))
@@ -360,12 +363,11 @@
360363
(dolist (,clause (list ,@clauses))
361364
(when ,clause
362365
(add-child ,sql ,clause)))
363-
(if *want-cursor*
364-
(select-by-sql-as-cursor ,class ,sql)
365-
(let ((,results (select-by-sql ,class ,sql)))
366-
(dolist (,foreign-class (remove-duplicates ,include-classes))
367-
(include-foreign-objects ,foreign-class ,results))
368-
(values ,results ,sql)))))))))))
366+
(let ((,results (select-by-sql ,class ,sql)))
367+
(unless *want-cursor*
368+
(dolist (,foreign-class (remove-duplicates ,include-classes))
369+
(include-foreign-objects ,foreign-class ,results)))
370+
(values ,results ,sql))))))))))
369371

370372
(defun where-and (fields-and-values class)
371373
(when fields-and-values

0 commit comments

Comments
 (0)