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