X-Git-Url: http://git.kpe.io/?p=clsql.git;a=blobdiff_plain;f=sql%2Fgenerics.lisp;h=c406a2b31de79224b941b89fd463f380f6fd7898;hp=3f3ee7c07262f20c338ce41adb3bfebbd711fb82;hb=775a7dfa8c524a06c8f9021a8390d58ecbcacf9c;hpb=7b4794147500df7188fef2fe4f5e16d05d552ffd diff --git a/sql/generics.lisp b/sql/generics.lisp index 3f3ee7c..c406a2b 100644 --- a/sql/generics.lisp +++ b/sql/generics.lisp @@ -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.")) -(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 @@ -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.")) -(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 @@ -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.")) -(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 @@ -144,12 +144,29 @@ DATABASE-NULL-VALUE on the type of the slot.")) ) (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) ) + + ;; Generation of SQL strings from lisp expressions (defgeneric output-sql (expr database) @@ -176,3 +193,14 @@ the arguments EXPR and 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.")) + +(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)") + )