initial version of the autoincrement support for sqlite3 backend
[clsql.git] / sql / generics.lisp
index 3f3ee7c07262f20c338ce41adb3bfebbd711fb82..7f276fc196e397a68444c479135949e7ebe929a2 100644 (file)
@@ -77,7 +77,7 @@ represented by SLOTS are initialised from the values of the
 supplied slots with other attributes having default
 values. Furthermore, OBJECT becomes associated with DATABASE."))
 
 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
   (:documentation
    "Using an instance of a View Class, OBJECT, update the table
 that stores its instance data. DATABASE defaults to
@@ -93,7 +93,7 @@ associated with DATABASE."))
 table of the database associated with OBJECT. If OBJECT is not
 yet associated with a database, an error is signalled."))
 
 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
   (:documentation
    "Updates the slot values of the View Class instance OBJECT
 using the attribute values of the appropriate table of DATABASE
@@ -122,7 +122,7 @@ effects. Methods specialised on particular View Classes can be
 used to specify any operations that need to be made on View
 Classes instances which have been updated in calls to SELECT."))
 
 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
   (: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
@@ -144,12 +144,29 @@ DATABASE-NULL-VALUE on the type of the slot."))
   )
 (defgeneric read-sql-value  (val type database db-type)
   )
   )
 (defgeneric read-sql-value  (val type database db-type)
   )
-(defgeneric database-make-autoincrement-sequence (class slotdef database)
-  )
+(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)
   )
 
 
 (defgeneric database-last-auto-increment-id (database table column)
   )
 
+
+
 ;; Generation of SQL strings from lisp expressions
 
 (defgeneric output-sql (expr database)
 ;; Generation of SQL strings from lisp expressions
 
 (defgeneric output-sql (expr database)
@@ -176,3 +193,8 @@ the arguments EXPR and DATABASE."))
 
 (defgeneric database-constraint-statement  (constraints database)
   )
 
 (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."))