commit 8039911be01ca79fc2c87fc646e276646605ad0c
parent aa3ade3e5295a4464e080d5fcfaaad5a8be824b2
Author: Tomas Hlavaty <tom@logand.com>
Date:   Sun,  7 Aug 2011 20:58:11 +0200
cache-delayed-query added
Diffstat:
1 file changed, 10 insertions(+), 15 deletions(-)
diff --git a/compiler.lisp b/compiler.lisp
@@ -52,16 +52,15 @@
 (defmacro query1 (form &rest qvars)
   `(caar (query ,form ,@qvars)))
 
-#+nil
-(let ((fn '(lambda ,qvars (query ,form))))
-  (print (list :@@@ fn))
-  (or (when *delayed-query-cache*
-        (or (when (gethash fn *delayed-query-cache*)
-              (print (list :@@@-reusing (gethash fn *delayed-query-cache*)))
-              (gethash fn *delayed-query-cache*))
-            (setf (gethash fn *delayed-query-cache*)
-                  (compile nil fn))))
-      (compile nil fn)))
+(defmacro cache-delayed-query (form qvars)
+  `(let ((fn '(lambda ,qvars (query ,form))))
+     (print (list :@@@ fn))
+     (or (when *delayed-query-cache*
+           (or (when (gethash fn *delayed-query-cache*)
+                 (print (list :@@@-reusing (gethash fn *delayed-query-cache*)))
+                 (gethash fn *delayed-query-cache*))
+               (setf (gethash fn *delayed-query-cache*) (compile nil fn))))
+         (compile nil fn))))
 
 (defun when-backend-known (form qvars action env)
   (cond
@@ -73,11 +72,7 @@
      `(funcall
        (lambda ,qvars
          (assert *backend*)
-         ;; TODO caching?
-         (funcall (compile nil '(lambda ,qvars
-                                 (declare (ignorable ,@qvars))
-                                 (,action ,form)))
-                  ,@qvars))
+         (funcall (cache-delayed-query ,form ,qvars) ,@qvars))
        ,@qvars))))
 
 (defmacro execute-action (form)