4 May 2004 Kevin Rosenberg (kevin@rosenberg.net)
+ * Version 2.10.10-pre
* sql/metaclasses.lisp: Properly store specified-type from
direct-slot-definition and then store translated type in
effective-slot-definition
* base/basic-sql.lisp: Make :AUTO the default value for
:RESULT-TYPES for MAP-QUERY and DO-QUERY.
* sql/objects.lisp: Add bigint type
- * base/loop.lisp: Add placeholder and error message for object
- iteration. Use :result-type :auto for result-set. Remove
+ * base/loop.lisp: Add object iteration. Use :result-type
+ :auto for result-set. Remove
duplicate (and non-correct) code for non-list variables by
- simply making an atom variable into a list.
+ simply making an atom variable into a list.
* test/tests-basic.lisp: Add tests for :result-types for
MAP-QUERY and DO-QUERY
* test/test-fdml.lisp: Add test for result-types in LOOP
Add test that default :result-types is auto for FDML QUERY.
* sql/query.lisp: Set default for :result-types to :auto in
FDML QUERY.
+ * test/test-oodml.lisp: Enable OO loop iteration test with
+ slight change.
4 May 2004 Marcus Pearce (m.t.pearce@city.ac.uk)
* Version 2.10.9
o get :target-slot working
o implement :retrieval :immediate
- LOOP
- o should work with object queries as well as functional ones
-
>> Symbolic SQL syntax
o Complete sql expressions (see operations.lisp)
(cond
;; Object query resulting in a list of returned object instances
- #+ignore
((and (consp (first in-phrase))
- (consp (second (first in-phrase)))
+ (string-equal "select" (symbol-name (caar in-phrase)))
(eq 'quote (first (second (first in-phrase))))
(symbolp (second (second (first in-phrase)))))
(,step-var nil))
()
()
+ ()
(if (null ,result-var)
t
(progn
(cond
;; Object query resulting in a list of returned object instances
- ((and (consp (car in-phrase))
- (consp (second (car in-phrase)))
- (eq 'quote (first (second (car in-phrase))))
- (symbolp (second (second (car in-phrase)))))
- (loop-error "object query not yet supported"))
+ ((and (string-equal "select" (symbol-name (car in-phrase)))
+ (eq 'quote (first (second in-phrase)))
+ (symbolp (second (second in-phrase))))
+
+ (let ((result-var (gensym "LOOP-RECORD-RESULT-"))
+ (step-var (gensym "LOOP-RECORD-STEP-")))
+ (values
+ t
+ nil
+ `(,@(mapcar (lambda (v) `(,v nil)) iter-var)
+ (,result-var ,in-phrase)
+ (,step-var nil))
+ ()
+ ()
+ ()
+ `((if (null ,result-var)
+ t
+ (progn
+ (setq ,step-var (first ,result-var))
+ (setq ,result-var (rest ,result-var))
+ nil)))
+ `(,iter-var ,step-var)
+ `((if (null ,result-var)
+ t
+ (progn
+ (setq ,step-var (first ,result-var))
+ (setq ,result-var (rest ,result-var))
+ nil)))
+ `(,iter-var ,step-var)
+ ()
+ ()
+ )))
((consp iter-var)
(let ((query-var (gensym "LOOP-RECORD-"))
"Lenin"]])
(("Lenin" "Widgets Inc.")))
-#||
(deftest :oodml/iteration/3
- (loop for (e) being the tuples in
- [select 'employee :where [married] :order-by [emplid]]
- collect (slot-value e 'last-name))
+ (loop for (e) being the records in
+ (select 'employee :where [married] :order-by [emplid])
+ collect (slot-value e 'last-name))
("Lenin" "Stalin" "Trotsky"))
-||#
))