X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=sql%2Fgenerics.lisp;h=748cbd90f97c717c8c20039c1cf688c900cd9b27;hb=534849c88501e0ea2ee5dbf78d13d8cb73814d71;hp=792a9dec90c5ac7277369e4905b1755a995908e0;hpb=e567409d9fff3f7231c2a0bb69b345e19de2b246;p=clsql.git diff --git a/sql/generics.lisp b/sql/generics.lisp index 792a9de..748cbd9 100644 --- a/sql/generics.lisp +++ b/sql/generics.lisp @@ -4,12 +4,10 @@ ;;;; ;;;; Name: generics.lisp ;;;; Purpose: Generic function definitions for DB interfaces -;;;; Author: Kevin M. Rosenberg based on +;;;; Author: Kevin M. Rosenberg ;;;; Created: Apr 2004 ;;;; -;;;; $Id$ -;;;; -;;;; This file, part of CLSQL, is Copyright (c) 2002-2004 by Kevin M. Rosenberg +;;;; This file, part of CLSQL, is Copyright (c) 2004-2010 by Kevin M. Rosenberg ;;;; ;;;; CLSQL users are granted the rights to distribute and use this software ;;;; as governed by the terms of the Lisp Lesser GNU Public License @@ -20,6 +18,11 @@ ;; 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 @@ -84,7 +87,7 @@ case, a record is created in the appropriate table of DATABASE 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 @@ -119,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 @@ -141,6 +144,27 @@ DATABASE-NULL-VALUE on the type of the slot.")) ) (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