Update of /project/elephant/cvsroot/elephant/src/db-clsql In directory clnet:/tmp/cvs-serv16382/src/db-clsql
Modified Files: sql-controller.lisp Log Message: char to unsigned char fix in BDB; cleaned up modular serializer initialization in BDB and SQL backends and main protocol
--- /project/elephant/cvsroot/elephant/src/db-clsql/sql-controller.lisp 2007/02/02 23:51:58 1.14 +++ /project/elephant/cvsroot/elephant/src/db-clsql/sql-controller.lisp 2007/02/04 04:34:56 1.15 @@ -238,7 +238,7 @@ ;; ALL OF THIS needs to be inside a transaction. (clsql::create-table [version] '( - ([serializerversion] text :not-null) + ([dbversion] text :not-null) ) :database con ) ) @@ -313,34 +313,34 @@ controller that is independant of the serializer as the serializer is dispatched based on the code version which is a list of the form '(0 6 0)" - (let* ((con (controller-db sc)) - (version (elephant::controller-version-cached sc))) - (if version version - (let ((tuples - (clsql::select [serializerversion] - :from [version] - :database con))) - ;; The table should exists, but there may or may not be a record there... - (setf (elephant::controller-version-cached sc) - (if tuples - (read-from-string (caar tuples)) - (clsql::insert-records :into [version] - :attributes '(serializerversion) - :values (list (format nil "~A" *elephant-code-version*)) - :database con) - ) - ))))) + (let* ((con (controller-db sc))) + (let ((tuples + (clsql::select [dbversion] + :from [version] + :database con))) + ;; The table should exists, but there may or may not be a record there... + (if tuples + (read-from-string (caar tuples)) + nil)))) + +(defun set-database-version (sc) + (let ((con (controller-db sc))) + (clsql::insert-records :into [version] + :attributes '(dbversion) + :values (list (format nil "~A" *elephant-code-version*)) + :database con)))
(defmethod open-controller ((sc sql-store-controller) ;; At present these three have no meaning &key (recover nil) - (recover-fatal nil) + (recover-fatal nil) (thread t)) (declare (ignore recover recover-fatal thread)) (the sql-store-controller (let* ((dbtype (car (second (controller-spec sc)))) + (new-p (not (probe-file (cadr (second (controller-spec sc)))))) (con (clsql:connect (cdr (second (controller-spec sc))) :database-type dbtype :if-exists :old))) @@ -353,7 +353,9 @@ (unless (version-table-exists con) (with-transaction (:store-controller sc) (create-version-table con))) - (elephant::initialize-serializer sc) + ;; Set elephant version if new + (when new-p (set-database-version sc)) + (initialize-serializer sc) ;; These should get oid 0 and 1 respectively (setf (slot-value sc 'root) (make-instance 'sql-btree :sc sc :from-oid 0)) (setf (slot-value sc 'class-root) (make-instance 'sql-btree :sc sc :from-oid 1))