This is the header of the cadabra source file.


;;;; a CMUCL/OCI implementation of a subset of the DBI interface
;;;;
;;;; The original version of this code was copyright (c) 1999-2000 Cadabra Inc.
;;;; It was placed in the public domain by Cadabra in January 2000.
;;;; 
;;;; The implementors of the original version were Winton Davies
;;;; <wdavies@cadabra.com> and William Newman <william.newman@airmail.net>.
;;;; The code will be maintained by Winton Davies.

;;;; known issues:
;;;;   * The code will leak C resources if errors occur in the the wrong
;;;;     places, since it doesn't wrap its allocation/deallocation
;;;;     logic in the necessary EVAL-WHENs to prevent this. (This could be
;;;;     easily be an issue for long-running processes which recover from
;;;;     database errors instead of simply terminating when they occur. It's
;;;;     not an issue for programs which consider database errors so abnormal
;;;;     that they die immediately when they encounter one.)
;;;;   * Instead of reading Oracle header files automatically, this code
;;;;     uses constants, types, and function signatures manually transcribed
;;;;     from the Oracle header files. Thus, changes in the header files
;;;;     may require manual maintenance of the code. (This version was written
;;;;     for Oracle 8.1.5.)
;;;;   * various KLUDGEs noted in the code

;;;; log:
;;;;   6. * moved test suite to separate file
;;;;      * removed trailing spaces from all strings returned from database
;;;;      * fixed error in LIST-ALL-DATABASE-TABLES interface: DB should be
;;;;        a &KEY argument, not an &OPTIONAL argument
;;;;   7. * merged Winton's code to allow the SQL function to ask OCI
;;;;        whether an operation returns a table, and not to worry about
;;;;        the TYPE keyword argument if no table is returned
;;;;      * reduced +N-BUF-ROWS+ from 1000 to reduce probability of
;;;;        hitting CMUCL 18b 8Mb-of-C-data limit
;;;;      * changed NOT-USED argument of FETCH-ROW to EOF-ERRORP, to
;;;;        conform to Allegro interface
;;;;      * found apparent bug in OCI (wrong size of value returned for the
;;;;        +oci-attr-data-size+ attribute); added workaround
;;;;      * found and documented the unnecessariness of "workaround" for
;;;;        "WITH-ALIEN not working" (which was actually a conceptual error 
;;;;        on WHN's part, expecting WITH-ALIEN to work the same way as
;;;;        MAKE-ALIEN, not expecting one less level of indirection)
;;;;      * cleaned up NULLS-OK-USE-THIS-ERRHP weirdness and inflexibility,
;;;;        splitting the one argument into separate NULLS-OK and ERRHP
;;;;        arguments
;;;;      * added :ERRHP optional arguments to various OERR expressions,
;;;;        so that now failures are more likely to generate informative
;;;;        error messages instead of just "OCI Error (and no ERRHP 
;;;;        available to find subcode)"
;;;;   8. * added code to deallocate C resources
;;;;   9. * Added in an extra field for DATE-FORMAT and DATE-FORMAT-LENGTH 
;;;;        Munged the code for datatype and colsize. Winton Davies.
;;;;  10. * cleaned up remnants of old date-is-fixed-length-field design
;;;;        assumption, getting rid of +OCi-date-bytes+
;;;;      * reduced consing in FETCH-ROW and associated functions
;;;;      * replaced WARN with IWARN for implementor-only warnings
;;;;  11. * fixed bad (THE (ALIEN (* FLOAT)) B) declaration for
;;;;        SQLT_FLT buffers (should be (ALIEN (* DOUBLE)) instead;
;;;;        and for some reason fell through the cracks of CMUCL's
;;;;        "declarations are assertions" principle)
;;;;      * deleted various FIXME notes a la "does this code ever get
;;;;        exercised?" and "are these really all the cases we need?"
;;;;      * changed the IWARN call to a KLUDGE comment, deleted IWARN
;;;;      * tidied up comments
;;;;      * changed page breaks from lots-of-semicolons Cadabra style 
;;;;        to ^L CMUCL style
;;;;      * declared DBI-ERROR to be INLINE
;;;;      * fixed definition of +oci-htype-env+
;;;;      * reviewed and corrected C resource deallocation code
;;;;  12. * Made load-foreign depend on ORACLE-HOME for more portability.

