;;;;
;;;; Name: generics.lisp
;;;; Purpose: Generic function definitions for DB interfaces
-;;;; Author: Kevin M. Rosenberg based on
+;;;; Author: Kevin M. Rosenberg
;;;; Created: Apr 2004
;;;;
-;;;; $Id: db-interface.lisp 9123 2004-04-21 20:34:42Z kevin $
-;;;;
-;;;; 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
(in-package #:clsql-sys)
+
+;; FDML
+
+(defgeneric execute-command (expression &key database)
+ (:documentation
+ "Executes the SQL command EXPRESSION, which may be an SQL
+expression or a string representing any SQL statement apart from
+a query, on the supplied DATABASE which defaults to
+*DEFAULT-DATABASE*."))
+
+
+(defgeneric query (query-expression &key database result-types flatp field-names)
+ (:documentation
+ "Executes the SQL query expression QUERY-EXPRESSION, which may
+be an SQL expression or a string, on the supplied DATABASE which
+defaults to *DEFAULT-DATABASE*. RESULT-TYPES is a list of symbols
+which specifies the lisp type for each field returned by
+QUERY-EXPRESSION. If RESULT-TYPES is nil all results are returned
+as strings whereas the default value of :auto means that the lisp
+types are automatically computed for each field. FIELD-NAMES is t
+by default which means that the second value returned is a list
+of strings representing the columns selected by
+QUERY-EXPRESSION. If FIELD-NAMES is nil, the list of column names
+is not returned as a second value. FLATP has a default value of
+nil which means that the results are returned as a list of
+lists. If FLATP is t and only one result is returned for each
+record selected by QUERY-EXPRESSION, the results are returned as
+elements of a list."))
+
+
+;; OODML
+
(defgeneric update-record-from-slot (object slot &key database)
(:documentation
"Updates the value stored in the column represented by the
associated with DATABASE."))
(defgeneric update-record-from-slots (object slots &key database)
- (:documentation
+ (:documentation
"Updates the values stored in the columns represented by the
slots, specified by the CLOS slot names SLOTS, of View Class
instance OBJECT. DATABASE defaults to *DEFAULT-DATABASE* and
supplied slots with other attributes having default
values. Furthermore, OBJECT becomes associated with DATABASE."))
-(defgeneric update-records-from-instance (object &key database)
+(defgeneric update-records-from-instance (object &key database this-class)
(:documentation
"Using an instance of a View Class, OBJECT, update the table
that stores its instance data. DATABASE defaults to
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)
+(defgeneric update-instance-from-records (object &key database this-class)
(:documentation
"Updates the slot values of the View Class instance OBJECT
using the attribute values of the appropriate table of DATABASE
instances of the class on which the join is made are not
updated."))
-(defgeneric instance-refreshed (object)
- (:documentation
+(defgeneric instance-refreshed (object)
+ (:documentation
"Provides a hook which is called within an object oriented
call to SELECT with a non-nil value of REFRESH when the View
Class instance OBJECT has been updated from the database. A
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 output-sql-hash-key (arg database)
- )
-
-(defgeneric collect-table-refs (sql)
- )
-(defgeneric database-output-sql (arg database)
- )
-(defgeneric database-constraint-description (constraint database)
- )
(defgeneric database-pkey-constraint (class database)
)
-(defgeneric database-constraint-statement (constraints database)
- )
-(defgeneric %install-class (class database)
+(defgeneric %install-class (class database &key transactions)
)
(defgeneric database-generate-column-definition (class slotdef database)
)
)
(defgeneric read-sql-value (val type database db-type)
)
+(defgeneric database-make-autoincrement-sequence (class slotdef database)
+ )
+;; Generation of SQL strings from lisp expressions
+
+(defgeneric output-sql (expr database)
+ (:documentation "Writes an SQL string appropriate for DATABASE
+ and corresponding to the lisp expression EXPR to
+ *SQL-STREAM*. The function SQL-OUTPUT is a top-level call for
+ generating SQL strings which initialises *SQL-STREAM*, calls
+ OUTPUT-SQL and reads the generated SQL string from
+ *SQL-STREAM*."))
+
+(defgeneric database-output-sql (expr database)
+ (:documentation "Returns an SQL string appropriate for DATABASE
+ and corresponding to the lisp expression
+ EXPR. DATABASE-OUTPUT-SQL is called by OUTPUT-SQL when no more
+ specific method exists for EXPR."))
+
+(defgeneric output-sql-hash-key (expr database)
+ (:documentation "Returns a list (or other object suitable for
+use as the key of an EQUAL hash table) which uniquely identifies
+the arguments EXPR and DATABASE."))
+
+(defgeneric collect-table-refs (sql)
+ )
+
+(defgeneric database-constraint-statement (constraints database)
+ )