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