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