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