r9001: Initial port to UFFI of SQL-ODBC
[clsql.git] / db-odbc / odbc-ff-interface.lisp
diff --git a/db-odbc/odbc-ff-interface.lisp b/db-odbc/odbc-ff-interface.lisp
new file mode 100644 (file)
index 0000000..48bbe1c
--- /dev/null
@@ -0,0 +1,349 @@
+;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Package: odbc -*-
+;;;; *************************************************************************
+;;;; FILE IDENTIFICATION
+;;;;
+;;;; Name:     odbc-ff-interface.lisp
+;;;; Purpose:  Function definitions for UFFI interface to ODBC
+;;;; Author:   Kevin M. Rosenberg
+;;;;
+;;;; $Id: odbc-package.lisp 7061 2003-09-07 06:34:45Z kevin $
+;;;;
+;;;; This file, part of CLSQL, is Copyright (c) 2004 by Kevin M. Rosenberg
+;;;; and Copyright (C) Paul Meurer 1999 - 2001. All rights reserved.
+;;;;
+;;;; CLSQL users are granted the rights to distribute and use this software
+;;;; as governed by the terms of the Lisp Lesser GNU Public License
+;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL.
+;;;; *************************************************************************
+
+(in-package #:odbc)
+
+(def-foreign-type sql-handle (* :void))
+(def-foreign-type sql-handle-ptr (* sql-handle))
+(def-foreign-type string-ptr (* :void))
+
+(def-type long-ptr-type '(* :long))
+
+
+(def-function "SQLAllocEnv"
+    ((*phenv sql-handle-ptr)    ; HENV   FAR *phenv
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+(def-function "SQLAllocConnect"
+    ((henv sql-handle)          ; HENV        henv
+     (*phdbc sql-handle-ptr)    ; HDBC   FAR *phdbc
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+(def-function "SQLConnect"
+    ((hdbc sql-handle)          ; HDBC        hdbc
+     (*szDSN string-ptr)        ; UCHAR  FAR *szDSN
+     (cbDSN :short)             ; SWORD       cbDSN
+     (*szUID string-ptr)        ; UCHAR  FAR *szUID 
+     (cbUID :short)             ; SWORD       cbUID
+     (*szAuthStr string-ptr)    ; UCHAR  FAR *szAuthStr
+     (cbAuthStr :short)         ; SWORD       cbAuthStr
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+(def-function "SQLDriverConnect"
+    ((hdbc sql-handle)          ; HDBC        hdbc
+     (hwnd sql-handle)          ; SQLHWND     hwnd
+     (*szConnStrIn string-ptr)  ; UCHAR  FAR *szConnStrIn
+     (cbConnStrIn :short)       ; SWORD       cbConnStrIn
+     (*szConnStrOut string-ptr) ; UCHAR  FAR *szConnStrOut
+     (cbConnStrOutMax :short)   ; SWORD       cbConnStrOutMax
+     (*pcbConnStrOut :pointer-void)      ; SWORD  FAR *pcbConnStrOut
+     (fDriverCompletion :short) ; UWORD       fDriverCompletion
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+(def-function "SQLDisconnect"
+    ((hdbc sql-handle))         ; HDBC        hdbc
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+  
+(def-function "SQLAllocStmt"
+    ((hdbc sql-handle)          ; HDBC        hdbc
+     (*phstmt sql-handle-ptr)   ; HSTMT  FAR *phstmt
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+(def-function "SQLGetInfo"
+    ((hdbc sql-handle)          ; HDBC        hdbc
+     (fInfoType :short)         ; UWORD       fInfoType
+     (rgbInfoValue :pointer-void)        ; PTR         rgbInfoValue
+     (cbInfoValueMax :short)    ; SWORD       cbInfoValueMax
+     (*pcbInfoValue :pointer-void)       ; SWORD  FAR *pcbInfoValue
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+(def-function "SQLPrepare"
+    ((hstmt sql-handle)         ; HSTMT       hstmt
+     (*szSqlStr string-ptr)     ; UCHAR  FAR *szSqlStr
+     (cbSqlStr :long)           ; SDWORD      cbSqlStr
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+(def-function "SQLExecute"
+    ((hstmt sql-handle)         ; HSTMT       hstmt
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+(def-function "SQLExecDirect"
+    ((hstmt sql-handle)         ; HSTMT       hstmt
+     (*szSqlStr string-ptr)     ; UCHAR  FAR *szSqlStr
+     (cbSqlStr :long)           ; SDWORD      cbSqlStr
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+(def-function "SQLFreeStmt"
+    ((hstmt sql-handle)         ; HSTMT       hstmt
+     (fOption :short))          ; UWORD       fOption
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+  (def-function "SQLCancel"
+      ((hstmt sql-handle)         ; HSTMT       hstmt
+       )
+    :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+(def-function "SQLError"
+    ((henv sql-handle)          ; HENV        henv
+     (hdbc sql-handle)          ; HDBC        hdbc
+     (hstmt sql-handle)         ; HSTMT       hstmt
+     (*szSqlState string-ptr)   ; UCHAR  FAR *szSqlState
+     (*pfNativeError :pointer-void)      ; SDWORD FAR *pfNativeError
+     (*szErrorMsg string-ptr)   ; UCHAR  FAR *szErrorMsg
+     (cbErrorMsgMax :short)     ; SWORD       cbErrorMsgMax
+     (*pcbErrorMsg :pointer-void)        ; SWORD  FAR *pcbErrorMsg
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+(def-function "SQLNumResultCols"
+    ((hstmt sql-handle)         ; HSTMT       hstmt
+     (*pccol :pointer-void)              ; SWORD  FAR *pccol
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+(def-function "SQLRowCount"
+    ((hstmt sql-handle)         ; HSTMT       hstmt
+     (*pcrow :pointer-void)              ; SDWORD FAR *pcrow
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+(def-function "SQLDescribeCol"
+    ((hstmt sql-handle)         ; HSTMT       hstmt
+     (icol :short)              ; UWORD       icol
+     (*szColName string-ptr)    ; UCHAR  FAR *szColName
+     (cbColNameMax :short)      ; SWORD       cbColNameMax
+     (*pcbColName :pointer-void)         ; SWORD  FAR *pcbColName
+     (*pfSqlType :pointer-void)          ; SWORD  FAR *pfSqlType
+     (*pcbColDef :pointer-void)          ; UDWORD FAR *pcbColDef
+     (*pibScale :pointer-void)           ; SWORD  FAR *pibScale
+     (*pfNullable :pointer-void)         ; SWORD  FAR *pfNullable
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+(def-function "SQLColAttributes"
+    ((hstmt sql-handle)         ; HSTMT       hstmt
+     (icol :short)              ; UWORD       icol
+     (fDescType :short)         ; UWORD       fDescType
+     (rgbDesc :pointer-void)             ; PTR         rgbDesc
+     (cbDescMax :short)         ; SWORD       cbDescMax
+     (*pcbDesc :pointer-void)            ; SWORD  FAR *pcbDesc
+     (*pfDesc :pointer-void)             ; SDWORD FAR *pfDesc
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+(def-function "SQLColumns"
+    ((hstmt sql-handle)             ; HSTMT       hstmt
+     (*szTableQualifier string-ptr) ; UCHAR  FAR *szTableQualifier
+     (cbTableQualifier :short)      ; SWORD       cbTableQualifier
+     (*szTableOwner string-ptr)     ; UCHAR  FAR *szTableOwner
+     (cbTableOwner :short)          ; SWORD       cbTableOwner
+     (*szTableName string-ptr)      ; UCHAR  FAR *szTableName
+     (cbTableName :short)           ; SWORD       cbTableName
+     (*szColumnName string-ptr)     ; UCHAR  FAR *szColumnName
+     (cbColumnName :short)          ; SWORD       cbColumnName
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+(def-function "SQLBindCol"
+    ((hstmt sql-handle)         ; HSTMT       hstmt
+     (icol :short)              ; UWORD       icol
+     (fCType :short)            ; SWORD       fCType
+     (rgbValue :pointer-void)            ; PTR         rgbValue
+     (cbValueMax :long)         ; SDWORD      cbValueMax
+     (*pcbValue :pointer-void)           ; SDWORD FAR *pcbValue
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+(def-function "SQLFetch"
+    ((hstmt sql-handle)         ; HSTMT       hstmt
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+(def-function "SQLTransact"
+    ((henv sql-handle)          ; HENV        henv
+     (hdbc sql-handle)          ; HDBC        hdbc
+     (fType :short)             ; UWORD       fType ($SQL_COMMIT or $SQL_ROLLBACK)
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+;; ODBC 2.0
+(def-function "SQLDescribeParam"
+    ((hstmt sql-handle)         ; HSTMT       hstmt
+     (ipar :short)              ; UWORD       ipar
+     (*pfSqlType :pointer-void)          ; SWORD  FAR *pfSqlType
+     (*pcbColDef :pointer-void)          ; UDWORD FAR *pcbColDef
+     (*pibScale :pointer-void)           ; SWORD  FAR *pibScale
+     (*pfNullable :pointer-void)         ; SWORD  FAR *pfNullable
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+;; ODBC 2.0
+(def-function "SQLBindParameter"
+    ((hstmt sql-handle)         ; HSTMT       hstmt
+     (ipar :short)              ; UWORD       ipar
+     (fParamType :short)        ; SWORD       fParamType
+     (fCType :short)            ; SWORD       fCType
+     (fSqlType :short)          ; SWORD       fSqlType
+     (cbColDef :long)           ; UDWORD      cbColDef
+     (ibScale :short)           ; SWORD       ibScale
+     (rgbValue :pointer-void)            ; PTR         rgbValue
+     (cbValueMax :long)         ; SDWORD      cbValueMax
+     (*pcbValue :pointer-void)           ; SDWORD FAR *pcbValue
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+;; level 1
+(def-function "SQLGetData"
+    ((hstmt sql-handle)         ; HSTMT       hstmt
+     (icol :short)              ; UWORD       icol
+     (fCType :short)            ; SWORD       fCType
+     (rgbValue :pointer-void)            ; PTR         rgbValue
+     (cbValueMax :long)         ; SDWORD      cbValueMax
+     (*pcbValue :pointer-void)           ; SDWORD FAR *pcbValue
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+(def-function "SQLParamData"
+    ((hstmt sql-handle)         ; HSTMT       hstmt
+     (*prgbValue :pointer-void)          ; PTR    FAR *prgbValue
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+(def-function "SQLPutData"
+    ((hstmt sql-handle)         ; HSTMT       hstmt
+     (rgbValue :pointer-void)            ; PTR         rgbValue
+     (cbValue :long)            ; SDWORD      cbValue
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+(def-function "SQLGetConnectOption"
+    ((hdbc sql-handle)          ; HDBC        hdbc
+     (fOption :short)           ; UWORD       fOption
+     (pvParam :pointer-void)             ; PTR         pvParam
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+(def-function "SQLSetConnectOption"
+    ((hdbc sql-handle)          ; HDBC        hdbc
+     (fOption :short)           ; UWORD       fOption
+     (vParam :long)             ; UDWORD      vParam
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+(def-function "SQLSetPos"
+    ((hstmt sql-handle)         ; HSTMT       hstmt
+     (irow :short)              ; UWORD       irow
+     (fOption :short)           ; UWORD       fOption
+     (fLock :short)             ; UWORD       fLock
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+                                       ; level 2
+(def-function "SQLExtendedFetch"
+    ((hstmt sql-handle)         ; HSTMT       hstmt
+     (fFetchType :short)        ; UWORD       fFetchType
+     (irow :long)               ; SDWORD      irow
+     (*pcrow :pointer-void)              ; UDWORD FAR *pcrow
+     (*rgfRowStatus :pointer-void)       ; UWORD  FAR *rgfRowStatus
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+(def-function "SQLDataSources"
+    ((henv sql-handle)          ; HENV        henv
+     (fDirection :short)
+     (*szDSN string-ptr)        ; UCHAR  FAR *szDSN
+     (cbDSNMax :short)          ; SWORD       cbDSNMax
+     (*pcbDSN :pointer-void)             ; SWORD      *pcbDSN
+     (*szDescription string-ptr) ; UCHAR     *szDescription
+     (cbDescriptionMax :short)  ; SWORD       cbDescriptionMax
+     (*pcbDescription :pointer-void)     ; SWORD      *pcbDescription
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+(def-function "SQLFreeEnv"
+    ((henv sql-handle)          ; HSTMT       hstmt
+     )
+  :module :odbc
+  :returning :short)              ; RETCODE_SQL_API
+
+
+;;; foreign type definitions
+
+;;(defmacro %sql-len-data-at-exec (length) 
+;;  `(- $SQL_LEN_DATA_AT_EXEC_OFFSET ,length))
+
+
+(def-struct sql-c-time 
+    (hour   :short)
+  (minute :short)
+  (second :short))
+
+(def-struct sql-c-date
+    (year  :short)
+    (month :short)
+    (day   :short))
+  
+(def-struct sql-c-timestamp
+    (year     :short)
+    (month    :short)
+    (day      :short)
+    (hour     :short)
+    (minute   :short)
+    (second   :short)
+    (fraction :long))
+