r9179: 30 Apr 2004 Marcus Pearce (m.t.pearce@city.ac.uk)
[clsql.git] / sql / generics.lisp
index a8de765681f9521c8f8b5e0329c23ca1903f3440..d1b642aecf2202ebcf595302c926b082b5caa393 100644 (file)
 
 (in-package #:clsql-sys)
 
+(defgeneric update-record-from-slot (object slot &key database)
+  (:documentation
+   "The generic function UPDATE-RECORD-FROM-SLOT updates an individual
+data item in the column represented by SLOT. The DATABASE is only used
+if OBJECT is not yet associated with any database, in which case a
+record is created in DATABASE. Only SLOT is initialized in this case;
+other columns in the underlying database receive default values. The
+argument SLOT is the CLOS slot name; the corresponding column names
+are derived from the View Class definition."))
+
+(defgeneric update-record-from-slots (object slots &key database)
+  (:documentation 
+   "The generic function UPDATE-RECORD-FROM-SLOTS updates data in the
+columns represented by SLOTS. The DATABASE is only used if OBJECT is
+not yet associated with any database, in which case a record is
+created in DATABASE. Only slots are initialized in this case; other
+columns in the underlying database receive default values. The
+argument SLOTS contains the CLOS slot names; the corresponding column
+names are derived from the view class definition."))
+
+(defgeneric update-records-from-instance (object &key database)
+  (:documentation
+   "Using an instance of a view class, OBJECT, update the database
+table that stores its instance data. If OBJECT is already associated
+with a database, that database is used, and DATABASE is ignored. If
+OBJECT is not yet associated with a database, a record is created for
+instance in the appropriate table of DATABASE and the instance becomes
+associated with that database."))
+
+(defgeneric delete-instance-records (instance)
+  (:documentation
+   "Deletes the records represented by INSTANCE from the database
+associated with it. If INSTANCE has no associated database, an error
+is signalled."))
+
+(defgeneric update-instance-from-records (instance &key database)
+  (:documentation
+   "The generic function UPDATE-INSTANCE-FROM-RECORDS updates the
+values in the slots of the View Class instance INSTANCE using the data
+in the database DATABASE which defaults to the DATABASE that instance
+is associated with, or the value of *DEFAULT-DATABASE*. If INSTANCE is
+associated with a database, then DATABASE must be that same
+database. The update is not recursive on joins. Join slots (that is,
+slots with :db-kind :join ) are updated, but the joined objects are
+not updated."))
+
+(defgeneric update-slot-from-record (instance slot &key database)
+  (:documentation
+   "Updates the value in the slot SLOT of the View Class instance
+INSTANCE using the data in the database DATABASE which defaults to the
+database that INSTANCE is associated with, or the value of
+*DEFAULT-DATABASE*. The argument SLOT is the CLOS slot name, the
+corresponding column names are derived from the View Class
+definition. The update is not recursive on joins. Join slots (that is,
+slots with :db-kind :join) are updated, but the joined objects are not
+updated."))
+
+(defgeneric instance-refreshed (instance) 
+  (:documentation 
+   "The function INSTANCE-REFRESHED is called inside SELECT when its
+REFRESH argument is true and the instance INSTANCE has just been
+updated. The supplied method on STANDARD-DB-OBJECT does nothing. If
+your application needs to take action when a View Class instance has
+been updated by (select ... :refresh t) then add an INSTANCE-REFRESH
+method specializing on your subclass of STANDARD-DB-OBJECT."))
+
+(defgeneric database-null-value (type)
+  (:documentation 
+   "Return an expression of type TYPE which SQL NULL values will be
+converted into."))
+
+(defgeneric update-slot-with-null (instance slotname slotdef)
+  (:documentation "Called to update a slot when its column has a NULL
+value.  If nulls are allowed for the column, the slot's value will be
+nil, otherwise its value will be set to the result of calling
+DATABASE-NULL-VALUE on the type of the slot."))
+
 (defgeneric output-sql (expr database)
   )
 
   )
 (defgeneric read-sql-value  (val type database)
   )
-(defgeneric postinitialize  (object)
-  )
 (defgeneric add-to-relation  (target slot-name value)
   )
 (defgeneric remove-from-relation  (target slot-name value)