diff implementations/mtp/methods.lisp @ 53:ce4a90427366

implementations/mtp/: add interface to datasets darcs-hash:20070621120721-c0ce4-54d29dd03ab4d7d61c70ed808d0fd3277687929e.gz
author Marcus Pearce <m.pearce@gold.ac.uk>
date Thu, 21 Jun 2007 13:07:21 +0100
parents 894fb5156603
children 8b31d54c95be
line wrap: on
line diff
--- a/implementations/mtp/methods.lisp	Wed Jun 20 17:05:15 2007 +0100
+++ b/implementations/mtp/methods.lisp	Thu Jun 21 13:07:21 2007 +0100
@@ -4,6 +4,30 @@
 
 #.(clsql:locally-enable-sql-reader-syntax)
 
+(defgeneric get-dataset (identifer))
+
+(defmethod get-dataset ((identifier mtp-dataset-identifier))
+  (let* ((dataset-id (dataset-id identifier))
+         (where-clause [= [dataset-id] dataset-id])
+         (data (clsql:select [*] :from [mtp-dataset] :where where-clause))
+         (dataset (make-mtp-dataset :dataset-id (first data) 
+                                    :description (second data) 
+                                    :timebase (third data) 
+                                    :midc (fourth data)))
+         (compositions nil)
+         (composition-count 
+          (1+ 
+           (car 
+            (clsql:select [max [composition-id]] :from [mtp-composition] 
+                          :where where-clause :flatp t :field-names nil)))))
+    (dotimes (composition-id composition-count) 
+      (push (get-composition 
+             (make-mtp-composition-identifier dataset-id composition-id))
+            compositions))
+    (sequence:adjust-sequence dataset (length compositions)
+                              :initial-contents (nreverse compositions))
+    dataset))
+
 (defmethod get-composition ((identifier mtp-composition-identifier))
   (let* ((dataset-id (dataset-id identifier))
          (composition-id (composition-id identifier))