r9657: Cleanup and document the FDDL.
[clsql.git] / sql / package.lisp
1 ;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
2 ;;;; *************************************************************************
3 ;;;; FILE IDENTIFICATION
4 ;;;;
5 ;;;; Name:          package.lisp
6 ;;;; Purpose:       Package definition for SQL interface
7 ;;;;
8 ;;;; $Id$
9 ;;;; 
10 ;;;; This file is part of CLSQL.
11 ;;;;
12 ;;;; CLSQL users are granted the rights to distribute and use this software
13 ;;;; as governed by the terms of the Lisp Lesser GNU Public License
14 ;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL.
15 ;;;; *************************************************************************
16
17 (in-package #:cl-user)
18
19 ;;;; This file makes the required package definitions for CLSQL's
20 ;;;; core packages.
21
22 (eval-when (:compile-toplevel :load-toplevel :execute)
23  #+sbcl
24   (if (find-package 'sb-mop)
25       (pushnew :clsql-sbcl-mop cl:*features*)
26       (pushnew :clsql-sbcl-pcl cl:*features*))
27   
28   #+cmu
29   (if (eq (symbol-package 'pcl:find-class)
30           (find-package 'common-lisp))
31       (pushnew :clsql-cmucl-mop cl:*features*)
32       (pushnew :clsql-cmucl-pcl cl:*features*)))
33
34
35 (eval-when (:compile-toplevel :load-toplevel :execute)
36   (defpackage #:clsql-sys
37     (:use #:common-lisp
38           #+clsql-sbcl-mop #:sb-mop
39           #+clsql-cmucl-mop #:mop
40           #+allegro #:mop
41           #+lispworks #:clos
42           #+scl #:clos
43           #+openmcl #:openmcl-mop)
44     
45     #+allegro
46     (:shadowing-import-from 
47      #:excl)
48     #+lispworks
49     (:shadowing-import-from 
50      #:clos)
51     #+clsql-sbcl-mop 
52     (:shadowing-import-from 
53      #:sb-pcl
54      #:generic-function-lambda-list)
55     #+clsql-sbcl-pcl
56     (:shadowing-import-from 
57      #:sb-pcl
58      #:name
59      #:class-direct-slots
60      #:class-of #:class-name #:class-slots #:find-class
61      #:slot-boundp
62      #:standard-class
63      #:slot-definition-name #:finalize-inheritance
64      #:standard-direct-slot-definition
65      #:standard-effective-slot-definition #:validate-superclass
66      #:direct-slot-definition-class #:compute-effective-slot-definition
67      #:effective-slot-definition-class
68      #:slot-value-using-class
69      #:class-prototype #:generic-function-method-class #:intern-eql-specializer
70      #:make-method-lambda #:generic-function-lambda-list
71      #:class-precedence-list #:slot-definition-type
72      #:class-direct-superclasses
73      #:compute-class-precedence-list)
74     #+clsql-cmucl-mop 
75     (:shadowing-import-from 
76      #:pcl
77      #:generic-function-lambda-list)
78     #+clsql-cmucl-pcl
79     (:shadowing-import-from 
80      #:pcl
81      #:class-direct-slots
82      #:name
83      #:class-of  #:class-name #:class-slots #:find-class #:standard-class
84      #:slot-boundp
85      #:slot-definition-name #:finalize-inheritance
86      #:standard-direct-slot-definition #:standard-effective-slot-definition
87      #:validate-superclass #:direct-slot-definition-class
88      #:effective-slot-definition-class
89      #:compute-effective-slot-definition
90      #:slot-value-using-class
91      #:class-prototype #:generic-function-method-class #:intern-eql-specializer
92      #:make-method-lambda #:generic-function-lambda-list
93      #:class-precedence-list #:slot-definition-type
94      #:class-direct-superclasses
95      #:compute-class-precedence-list)
96     #+scl
97     (:shadowing-import-from 
98      #:clos
99      #:class-prototype  ;; note: make-method-lambda is not fbound
100      )
101     
102     (:export
103      ;; "Private" exports for use by interface packages
104      #:check-connection-spec
105      #:database-initialize-database-type
106      #:database-type-load-foreign
107      #:database-connect
108      #:database-disconnect
109      #:database-query
110      #:database-execute-command
111      #:database-create-sequence
112      #:database-drop-sequence
113      #:database-sequence-next
114      #:database-set-sequence-position
115      #:database-query-result-set
116      #:database-dump-result-set
117      #:database-store-next-row
118      #:database-list-tables
119      #:database-list-tables-and-sequences
120      #:database-table-exists-p
121      #:database-list-views
122      #:database-view-exists-p
123      #:database-list-indexes
124      #:database-list-table-indexes
125      #:database-index-exists-p
126      #:database-list-sequences
127      #:database-sequence-last
128      #:database-sequence-exists-p
129      #:database-list-attributes
130      #:database-attribute-type
131      #:database-type-library-loaded
132      #:database-create
133      #:database-destroy
134      #:database-probe
135      #:database-list
136      
137      #:db-backend-has-create/destroy-db?
138      #:db-type-has-views?
139      #:db-type-has-bigint?
140      #:db-type-has-union?
141      #:db-type-has-prepared-stmt?
142      #:db-type-has-subqueries?
143      #:db-type-has-boolean-where?
144      #:db-type-transaction-capable?
145      #:db-type-has-fancy-math?
146      #:db-type-default-case
147      #:db-type-use-column-on-drop-index? 
148      #:database-underlying-type
149      #:database-get-type-specifier
150      #:read-sql-value
151      #:database-output-sql-as-type
152      #:*loaded-database-types*
153      #:reload-database-types
154      #:is-database-open
155
156      ;; Large objects 
157      #:database-create-large-object
158      #:database-write-large-object
159      #:database-read-large-object
160      #:database-delete-large-object
161      #:create-large-object
162      #:write-large-object
163      #:read-large-object
164      #:delete-large-object
165
166      ;; Prepared statments
167      #:database-prepare
168      #:database-run-prepared
169      #:database-bind-parameter
170      #:database-free-prepared
171
172      ;; accessors for database class
173      #:name
174      #:connection-spec
175      #:transaction
176      #:transaction-level
177      #:conn-pool
178      #:command-recording-stream
179      #:result-recording-stream
180      #:record-caches
181      #:view-classes
182      #:database-state
183      #:attribute-cache
184      #:database-autocommit
185
186      ;; utils.lisp
187      #:without-interrupts
188      #:make-process-lock
189      #:with-process-lock
190      #:command-output
191      #:symbol-name-default-case
192      #:convert-to-db-default-case
193      #:ensure-keyword
194      #:getenv
195      #:number-to-sql-string
196      #:float-to-sql-string
197      #:sql-escape-quotes
198      #:sql-escape 
199      #:in
200
201      ;; Generic backends
202      #:generic-postgresql-database
203      #:generic-odbc-database
204
205          ;; Subclasses of sql-expresssion (expressions.lisp) 
206          #:sql-function-exp
207          #:sql-value-exp 
208          #:sql-set-exp 
209          #:sql-query-modifier-exp 
210          #:sql-relational-exp 
211          #:sql-upcase-like 
212          #:sql-assignment-exp 
213          #:sql-typecast-exp 
214          #:sql-between-exp 
215          #:sql-ident 
216          #:sql-ident-attribute
217          #:sql-ident-table 
218
219      .
220
221      ;; Shared exports for re-export by CLSQL package. 
222      #1=(
223
224          ;; Condition system (conditions.lisp) 
225          #:sql-user-error
226          #:sql-database-error
227          #:sql-database-data-error
228          #:sql-connection-error
229          #:sql-temporary-error
230          #:sql-timeout-error 
231          #:sql-fatal-error 
232          #:sql-error-error-id
233          #:sql-error-secondary-error-id
234          #:sql-error-database-message
235          ;; CLSQL Extensions
236          #:sql-condition
237          #:sql-error
238          #:sql-warning
239          #:sql-database-warning
240          #:*backend-warning-behavior*
241
242          ;; Connection/initialisation (base-classes.lisp, database.lisp, 
243          ;;   initialize.lisp)
244          #:*default-database-type*       
245          #:*default-database*            
246          #:*initialized-database-types*
247          #:initialize-database-type
248          #:connect                     
249          #:disconnect                  
250          #:*connect-if-exists*         
251          #:connected-databases         
252          #:database                    
253          #:database-name               
254          #:reconnect                   
255          #:find-database               
256          #:status                      
257          ;; CLSQL Extensions 
258          #:database-name-from-spec
259          #:database-type 
260          #:with-database
261          #:with-default-database
262          #:disconnect-pooled
263          #:list-databases
264          #:create-database
265          #:destroy-database
266          #:probe-database
267
268          ;; I/O Recording (recording.lisp) 
269          #:add-sql-stream             
270          #:delete-sql-stream          
271          #:list-sql-streams           
272          #:sql-recording-p            
273          #:sql-stream                   
274          #:start-sql-recording          
275          #:stop-sql-recording           
276
277          ;; FDDL (fddl.lisp) 
278          #:create-table                   
279          #:drop-table                     
280          #:list-tables                    
281          #:table-exists-p                 
282          #:list-attributes                
283          #:attribute-type                 
284          #:list-attribute-types           
285          #:create-view                    
286          #:drop-view                      
287          #:create-index                   
288          #:drop-index                     
289          ;; CLSQL Extensions 
290          #:list-views                  
291          #:view-exists-p               
292          #:list-indexes                
293          #:index-exists-p              
294          #:create-sequence             
295          #:drop-sequence               
296          #:list-sequences              
297          #:sequence-exists-p           
298          #:sequence-next               
299          #:sequence-last               
300          #:set-sequence-position       
301
302          ;; FDML (fdml.lisp) 
303          #:select 
304          #:cache-table-queries     
305          #:*cache-table-queries-default*
306          #:delete-records               
307          #:insert-records               
308          #:update-records               
309          #:execute-command              
310          #:query                        
311          #:print-query                  
312          #:do-query                     
313          #:map-query                    
314          #:loop
315          ;; CLSQL Extensions 
316          #:truncate-database
317          #:for-each-row
318          #:prepare-sql
319          #:bind-parameter
320          #:run-prepared-sql
321          #:free-prepared-sql
322
323          ;; Transaction handling (transaction.lisp) 
324          #:with-transaction
325          #:commit                        
326          #:rollback                      
327          ;; CLSQL Extensions 
328          #:add-transaction-commit-hook
329          #:add-transaction-rollback-hook
330          #:start-transaction             
331          #:in-transaction-p              
332          #:set-autocommit
333
334          ;; OODDL (ooddl.lisp) 
335          #:standard-db-object               
336          #:def-view-class                   
337          #:create-view-from-class           
338          #:drop-view-from-class             
339          #:list-classes                     
340          #:universal-time    
341          ;; CLSQL Extensions 
342          #:view-table        
343          #:bigint
344          #:varchar
345          #:generalized-boolean
346          #:*default-varchar-length*
347
348          ;; OODML (oodml.lisp) 
349          #:instance-refreshed               
350          #:update-objects-joins             
351          #:*default-update-objects-max-len* 
352          #:update-slot-from-record          
353          #:update-instance-from-records     
354          #:update-records-from-instance     
355          #:update-record-from-slot          
356          #:update-record-from-slots         
357          #:delete-instance-records          
358          ;; CLSQL Extensions 
359          #:*db-auto-sync*    
360          #:write-instance-to-stream
361          #:read-instance-from-stream
362          
363          ;; Symbolic SQL Syntax (syntax.lisp) 
364          #:sql                              
365          #:sql-expression                   
366          #:sql-operation                    
367          #:sql-operator                     
368          #:disable-sql-reader-syntax        
369          #:enable-sql-reader-syntax         
370          #:locally-disable-sql-reader-syntax
371          #:locally-enable-sql-reader-syntax 
372          #:restore-sql-reader-syntax-state  
373          
374          ;; SQL operations (operations.lisp) 
375          #:sql-query
376          #:sql-object-query
377          #:sql-any
378          #:sql-some 
379          #:sql-all
380          #:sql-not
381          #:sql-union
382          #:sql-intersect
383          #:sql-minus
384          #:sql-except 
385          #:sql-order-by 
386          #:sql-null
387          #:sql-*
388          #:sql-+
389          #:sql-/
390          #:sql--
391          #:sql-like
392          #:sql-and
393          #:sql-or
394          #:sql-in
395          #:sql-substr 
396          #:sql-concat-op 
397          #:sql-=
398          #:sql-<
399          #:sql->
400          #:sql->=
401          #:sql-<=
402          #:sql-<>
403          #:sql-count
404          #:sql-max
405          #:sql-min
406          #:sql-avg
407          #:sql-sum
408          #:sql-function 
409          #:sql-between 
410          #:sql-distinct 
411          #:sql-nvl 
412          #:sql-slot-value
413          #:sql-userenv 
414          ;; CLSQL Extensions 
415          #:sql-concat
416          #:sql-substring 
417          #:sql-limit 
418          #:sql-group-by
419          #:sql-having
420          #:sql-not-null
421          #:sql-exists
422          #:sql-uplike
423          #:sql-is
424          #:sql-==
425          #:sql-the 
426          #:sql-coalesce 
427          #:sql-view-class
428
429          ;; Time handling (time.lisp) 
430          #:bad-component
431          #:current-day
432          #:current-month
433          #:current-year
434          #:day-duration
435          #:db-timestring
436          #:decode-duration
437          #:decode-time
438          #:duration
439          #:duration+
440          #:duration<
441          #:duration<=
442          #:duration=
443          #:duration>
444          #:duration>=
445          #:duration-day
446          #:duration-hour
447          #:duration-minute
448          #:duration-month
449          #:duration-second
450          #:duration-year
451          #:duration-reduce 
452          #:duration-timestring
453          #:extract-roman 
454          #:format-duration
455          #:format-time
456          #:get-time
457          #:utime->time
458          #:interval-clear
459          #:interval-contained
460          #:interval-data
461          #:interval-edit
462          #:interval-end
463          #:interval-match
464          #:interval-push
465          #:interval-relation
466          #:interval-start
467          #:interval-type
468          #:make-duration
469          #:make-interval
470          #:make-time
471          #:merged-time
472          #:midnight
473          #:month-name
474          #:parse-date-time
475          #:parse-timestring
476          #:parse-yearstring
477          #:print-date
478          #:roll
479          #:roll-to
480          #:time
481          #:time+
482          #:time-
483          #:time-by-adding-duration
484          #:time-compare
485          #:time-difference
486          #:time-dow
487          #:time-element
488          #:time-max
489          #:time-min
490          #:time-mjd
491          #:time-msec
492          #:time-p
493          #:time-sec
494          #:time-well-formed
495          #:time-ymd
496          #:time<
497          #:time<=
498          #:time=
499          #:time>
500          #:time>=
501          #:timezone
502          #:universal-time
503          #:wall-time
504          #:wall-timestring
505          #:week-containing
506          #:gregorian-to-mjd
507          #:mjd-to-gregorian
508          ))
509     (:documentation "This is the INTERNAL SQL-Interface package of CLSQL."))
510
511
512 (defpackage #:clsql
513   (:use #:common-lisp)
514   (:import-from #:clsql-sys . #1#)
515   (:export . #1#)
516   (:documentation "This is the user package with CLSQL symbols."))
517
518 (defpackage #:clsql-user
519   (:use #:common-lisp)
520   (:import-from #:clsql-sys . #1#)
521   (:export . #1#)
522   (:documentation "This is the user package with CLSQL symbols."))
523
524   ;; This is from USQL's pcl-patch  
525   #+(or clsql-sbcl-pcl clsql-cmucl-pcl)
526   (progn
527     ;; Note that this will no longer required for cmucl as of version 19a. 
528     (in-package #+cmu :pcl #+sbcl :sb-pcl)
529     (defmacro pv-binding1 ((pv calls pv-table-symbol pv-parameters slot-vars) 
530                            &body body)
531       `(pv-env (,pv ,calls ,pv-table-symbol ,pv-parameters)
532         (let (,@(mapcar #'(lambda (slot-var p) `(,slot-var (get-slots-or-nil ,p)))
533                         slot-vars pv-parameters))
534           ,@(mapcar #'(lambda (slot-var) `(declare (ignorable ,slot-var))) slot-vars)
535           ,@body))))
536
537 ;; see http://thread.gmane.org/gmane.lisp.lispworks.general/681
538 #+lispworks
539 (setf *packages-for-warn-on-redefinition* 
540       (delete "SQL" *packages-for-warn-on-redefinition* :test 'string=))
541
542   #+sbcl
543   (if (find-package 'sb-mop)
544       (setq cl:*features* (delete :clsql-sbcl-mop cl:*features*))
545       (setq cl:*features* (delete :clsql-sbcl-pcl cl:*features*)))
546   
547   #+cmu
548   (if (find-package 'mop)
549       (setq cl:*features* (delete :clsql-cmucl-mop cl:*features*))
550       (setq cl:*features* (delete :clsql-cmucl-pcl cl:*features*)))
551
552 ) ;eval-when                                      
553