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