From: Kevin M. Rosenberg Date: Wed, 5 May 2004 06:23:38 +0000 (+0000) Subject: r9242: make update-records-from-instance on make-instance selectable X-Git-Tag: v3.8.6~518 X-Git-Url: http://git.kpe.io/?p=clsql.git;a=commitdiff_plain;h=79cdb16ebd29e11e9762ec81c32314433d85eaad r9242: make update-records-from-instance on make-instance selectable --- diff --git a/ChangeLog b/ChangeLog index 223de7d..fe6e0f9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,7 +4,9 @@ * sql/objects.lisp: Make SELECT a normal function. SELECT now accepts type-modified database identifiers, such as [foo :string] which means that the values in column foo are returned - as Lisp strings. + as Lisp strings. Add new *update-records-on-make-instance* special + variable controlling automatic creation of new instances. + * sql/packages.lisp: Export *update-records-on-make-instance* * test/test-fdml.lisp: Add tests for type-modified database identifiers. diff --git a/sql/objects.lisp b/sql/objects.lisp index 833abd7..1342fe3 100644 --- a/sql/objects.lisp +++ b/sql/objects.lisp @@ -21,6 +21,10 @@ (:metaclass standard-db-class) (:documentation "Superclass for all CLSQL View Classes.")) +(defvar *update-records-on-make-instance* nil + "When T, UPDATE-RECORDS-FROM-INSTANCE will be automatically called +when a new instance of a view-class is created.") + (defvar *db-deserializing* nil) (defvar *db-initializing* nil) @@ -39,17 +43,19 @@ (setf (slot-value instance slot-name) nil)))))) (call-next-method)) +#+ignore ;; not currently used (defmethod (setf slot-value-using-class) (new-value (class standard-db-class) instance slot) (declare (ignore new-value instance slot)) (call-next-method)) -(defmethod initialize-instance :around ((object standard-db-object) +(defmethod initialize-instance ((object standard-db-object) &rest all-keys &key &allow-other-keys) (declare (ignore all-keys)) (let ((*db-initializing* t)) (call-next-method) - (unless *db-deserializing* + (when (and *update-records-on-make-instance* + (not *db-deserializing*)) #+nil (created-object object) (update-records-from-instance object)))) diff --git a/sql/package.lisp b/sql/package.lisp index 7a48137..98bfd2d 100644 --- a/sql/package.lisp +++ b/sql/package.lisp @@ -350,6 +350,8 @@ #:locally-enable-sql-reader-syntax ; syntax xx #:restore-sql-reader-syntax-state ; syntax xx + #:*update-records-on-make-instance* + ;;------------------------------------------------ ;; Miscellaneous Extensions ;;------------------------------------------------