j@251: (cl:in-package #:amuse-datasets) j@251: j@251: (defmethod make-dataset ((identifier db-dataset-identifier) j@251: composition-identifiers &optional j@251: description) j@251: (make-instance 'db-dataset j@251: :%data composition-identifiers j@251: :identifier identifier j@251: :description description)) j@251: j@251: (defmethod get-dataset ((dataset-identifier db-dataset-identifier)) j@251: (let ((dataset-header (clsql:query (format nil " j@251: SELECT description j@251: FROM amuse_datasets j@251: WHERE dataset_id = ~S" (dataset-id dataset-identifier)) j@251: :database j@251: amuse-database-admin:*amuse-database* j@251: :flatp t j@251: :field-names nil)) j@251: (dataset-rows (clsql:query (format nil " j@251: SELECT implementation_name, composition_id j@251: FROM amuse_datasets_join j@251: LEFT JOIN amuse_implementations j@251: USING (implementation_id) j@251: WHERE dataset_id = ~S" j@251: (dataset-id j@251: dataset-identifier)) j@251: :flatp t j@251: :field-names nil j@251: :database j@251: amuse-database-admin:*amuse-database*))) j@251: (make-dataset dataset-identifier j@251: (%init-dataset-rows dataset-rows) j@251: (car dataset-header)))) j@251: j@251: (defun %init-dataset-rows (dataset-rows) j@251: (loop for row in dataset-rows j@251: collect (make-composition-identifier j@251: (find-package (first row)) (second row)) j@251: into composition-identifiers j@251: finally (return composition-identifiers))) j@251: j@251: (defmethod assign-composition-to-dataset (composition-identifier j@251: (dataset-identifier j@251: db-dataset-identifier)) j@251: (clsql:execute-command (format nil " j@251: INSERT INTO amuse_datasets_join j@251: SET dataset_id := ~S, j@251: implementation_id := (SELECT get_impl_id('~A')), j@251: composition_id := ~S;" j@251: (dataset-id dataset-identifier) j@251: (amuse-database-admin:implementation-namestring j@251: composition-identifier) j@251: (composition-id j@251: composition-identifier))) j@251: :database amuse-database-admin:*amuse-database*)