;; FDML
+(defgeneric choose-database-for-instance (object &optional database)
+ (:documentation "Used by the oodml functions to select which
+ database object to use. Chooses the database associated with the
+ object primarily, falls back to the database provided as an argument
+ or the *DEFAULT-DATABASE*."))
(defgeneric execute-command (expression &key database)
(:documentation
supplied slots with other attributes having default
values. Furthermore, OBJECT becomes associated with DATABASE."))
-(defgeneric update-records-from-instance (object &key database this-class)
+(defgeneric update-records-from-instance (object &key database)
(:documentation
"Using an instance of a View Class, OBJECT, update the table
that stores its instance data. DATABASE defaults to
using values from the slot values of OBJECT, and OBJECT becomes
associated with DATABASE."))
-(defgeneric delete-instance-records (object)
+(defgeneric delete-instance-records (object &key database)
(:documentation
"Deletes the records represented by OBJECT in the appropriate
table of the database associated with OBJECT. If OBJECT is not
yet associated with a database, an error is signalled."))
-(defgeneric update-instance-from-records (object &key database this-class)
+(defgeneric update-instance-from-records (object &key database)
(:documentation
"Updates the slot values of the View Class instance OBJECT
using the attribute values of the appropriate table of DATABASE
used to specify any operations that need to be made on View
Classes instances which have been updated in calls to SELECT."))
-(defgeneric update-slot-with-null (instance slotname slotdef)
+(defgeneric update-slot-with-null (instance 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
)
(defgeneric read-sql-value (val type database db-type)
)
+(defgeneric database-add-autoincrement-sequence (class database)
+ (:method (class database) nil)
+ (:documentation "If a database needs to add a sequence for its
+ autoincrement to work, this is where it should go. Default is
+ that it doesnt so just return nil"))
+(defgeneric database-remove-autoincrement-sequence (class database)
+ (:method (class database) nil)
+ (:documentation "If a database needs to add a sequence for its
+ autoincrement to work, this is where it should go. Default is
+ that it doesnt so just return nil"))
+(defgeneric auto-increment-sequence-name (class slotdef database)
+ (:documentation "The sequence name to create for this autoincremnt column on this class
+ if returns nil, there is no associated sequence "))
+
+(defmethod auto-increment-sequence-name :around (class slot database)
+ (when (auto-increment-column-p slot database)
+ (call-next-method)))
+
+(defgeneric database-last-auto-increment-id (database table column)
+ )
+
;; Generation of SQL strings from lisp expressions
(defgeneric database-constraint-statement (constraints database)
)
+
+(defgeneric database-translate-constraint (constraint database)
+ (:documentation "Given a column constraint returns its
+database-specific name. For example, auto-increment constraints can
+have different names in different database engines."))
+
+(defgeneric filter-select-list ( view-class clsql-sys::select-list database)
+ (:documentation
+ "Gives fine grained control over sql to be executed and mapped to slots
+ called with a dummy instance (so that class precedence can be used)")
+ )
+
+(defgeneric view-classes-and-storable-slots (view-class &key to-database-p)
+ (:documentation "A method that collects all the classes and storable slots
+ that need to be read from or written to the database.
+ to-database-p should be T if we are writing this object to the database
+ and nil when we are reading this object from the database"))