* sql/generic-postgresql.lisp: Add support for
prepared statements.
* tests/test-internal.lisp: New file
+ * sql/odbc-api.lisp: Update to using ODBC V3 protocol
27 May 2004 Kevin Rosenberg <kevin@rosenberg.net>
* Version 2.11.3
()
(SQLAllocEnv phenv)
(deref-pointer phenv 'sql-handle)))))
- (%set-attr-odbc-version henv $SQL_OV_ODBC2)
+ (%set-attr-odbc-version henv $SQL_OV_ODBC3)
henv))
(#.$SQL_DATE $SQL_C_DATE)
(#.$SQL_TIME $SQL_C_TIME)
(#.$SQL_TIMESTAMP $SQL_C_TIMESTAMP)
+ (#.$SQL_TYPE_DATE $SQL_C_TYPE_DATE)
+ (#.$SQL_TYPE_TIME $SQL_C_TYPE_TIME)
+ (#.$SQL_TYPE_TIMESTAMP $SQL_C_TYPE_TIMESTAMP)
((#.$SQL_BINARY #.$SQL_VARBINARY #.$SQL_LONGVARBINARY) $SQL_C_BINARY)
(#.$SQL_TINYINT $SQL_C_STINYINT)
(#.$SQL_BIT $SQL_C_BIT)))
(read-from-string (get-cast-foreign-string data-ptr))))
(t
(case c-type
- (#.$SQL_C_DATE
+ ((#.$SQL_C_DATE #.$SQL_C_TYPE_DATE)
(funcall *time-conversion-function* (date-to-universal-time data-ptr)))
- (#.$SQL_C_TIME
+ ((#.$SQL_C_TIME #.$SQL_C_TYPE_TIME)
(multiple-value-bind (universal-time frac) (time-to-universal-time data-ptr)
(funcall *time-conversion-function* universal-time frac)))
- (#.$SQL_C_TIMESTAMP
+ ((#.$SQL_C_TIMESTAMP #.$SQL_C_TYPE_TIMESTAMP)
(multiple-value-bind (universal-time frac) (timestamp-to-universal-time data-ptr)
(funcall *time-conversion-function* universal-time frac)))
(#.$SQL_INTEGER
(data-ptr
(case c-type ;; add more?
(#.$SQL_C_SLONG (uffi:allocate-foreign-object #.$ODBC-LONG-TYPE))
- (#.$SQL_C_DATE (allocate-foreign-object 'sql-c-date))
- (#.$SQL_C_TIME (allocate-foreign-object 'sql-c-time))
- (#.$SQL_C_TIMESTAMP (allocate-foreign-object 'sql-c-timestamp))
+ ((#.$SQL_C_DATE #.$SQL_C_TYPE_DATE) (allocate-foreign-object 'sql-c-date))
+ ((#.$SQL_C_TIME #.$SQL_C_TYPE_TIME) (allocate-foreign-object 'sql-c-time))
+ ((#.$SQL_C_TIMESTAMP #.$SQL_C_TYPE_TIMESTAMP) (allocate-foreign-object 'sql-c-timestamp))
(#.$SQL_C_FLOAT (uffi:allocate-foreign-object :float))
(#.$SQL_C_DOUBLE (uffi:allocate-foreign-object :double))
(#.$SQL_C_BIT (uffi:allocate-foreign-object :byte))
(defconstant $SQL_TINYINT -6)
(defconstant $SQL_BIT -7)
+;; For ODBC3
+(defconstant $SQL_TYPE_DATE 91)
+(defconstant $SQL_TYPE_TIME 92)
+(defconstant $SQL_TYPE_TIMESTAMP 93)
+
(defconstant $SQL_INTERVAL_YEAR -80)
(defconstant $SQL_INTERVAL_MONTH -81)
(defconstant $SQL_INTERVAL_YEAR_TO_MONTH -82)
(defconstant $SQL_C_UTINYINT (+ $SQL_TINYINT $SQL_UNSIGNED_OFFSET)) ;;UNSIGNED TINYINT
(defconstant $SQL_C_BOOKMARK $SQL_C_ULONG) ;; BOOKMARK
+;;; ODBC3
+(defconstant $SQL_C_TYPE_DATE $SQL_TYPE_DATE)
+(defconstant $SQL_C_TYPE_TIME $SQL_TYPE_TIME)
+(defconstant $SQL_C_TYPE_TIMESTAMP $SQL_TYPE_TIMESTAMP)
+
;; Options for SQLDriverConnect
(defconstant $SQL_DRIVER_NOPROMPT 0)
(defconstant $SQL_DRIVER_COMPLETE 1)
(#.odbc::$SQL_SMALLINT :short)
((#.odbc::$SQL_FLOAT #.odbc::$SQL_DOUBLE) #.odbc::$ODBC-LONG-TYPE)
(#.odbc::$SQL_REAL #.odbc::$ODBC-LONG-TYPE)
- (#.odbc::$SQL_DATE 'sql-c-date)
- (#.odbc::$SQL_TIME 'sql-c-time)
- (#.odbc::$SQL_TIMESTAMP 'sql-c-timestamp)
+ ((#.odbc::$SQL_DATE #.odbc::$SQL_TYPE_DATE) 'sql-c-date)
+ ((#.odbc::$SQL_TIME #.odbc::$SQL_TYPE_TIME) 'sql-c-time)
+ ((#.odbc::$SQL_TIMESTAMP #.odbc::$SQL_TYPE_TIMESTAMP) 'sql-c-timestamp)
;;((#.odbc::$SQL_BINARY #.odbc::$SQL_VARBINARY #.odbc::$SQL_LONGVARBINARY) odbc::$SQL_C_BINARY) ; ??
(#.odbc::$SQL_TINYINT :short)
;;(#.odbc::$SQL_BIT odbc::$SQL_C_BIT) ; ??
:password password
:data-source-name dsn))))
(store-type-of-connected-database db)
+ ;; Ensure this database type is initialized so can check capabilities of
+ ;; underlying database
+ (initialize-database-type :database-type db-type)
db)
(error () ;; Init or Connect failed
(error 'sql-connection-error
query-expression :db (odbc-conn database)
:result-types result-types
:column-names field-names)
+ #+ignore
(error ()
(error 'sql-database-data-error
:database database