db: tried async execution with odbc... didn't work
Added note in TODO, my guess why not. Fixed odbc ffi bindings, added a few more status checks.
This commit is contained in:
parent
f339060e55
commit
281df3221e
|
@ -68,6 +68,11 @@ Misc
|
||||||
- how about implicit support only in 'in-query'?
|
- how about implicit support only in 'in-query'?
|
||||||
|
|
||||||
- ODBC: use async execution to avoid blocking all Racket threads
|
- ODBC: use async execution to avoid blocking all Racket threads
|
||||||
|
Status: Tried it. Oracle driver doesn't support async. PG, MY drivers don't support async.
|
||||||
|
DB2 driver does, but gives baffling HY010 function sequence errors, couldn't fix.
|
||||||
|
(Best theory so far: possible that DB2 requires polling args to be identical to original
|
||||||
|
call, which means (_ptr o X) args are the problem. Or maybe unixodbc's fault.)
|
||||||
|
Didn't try SQL Server. All in all, not worth it.
|
||||||
|
|
||||||
- add evt versions of functions
|
- add evt versions of functions
|
||||||
- for query functions (?)
|
- for query functions (?)
|
||||||
|
|
|
@ -123,6 +123,10 @@ Docs at http://msdn.microsoft.com/en-us/library/ms712628%28v=VS.85%29.aspx
|
||||||
|
|
||||||
(define-ffi-definer define-odbc odbc-lib)
|
(define-ffi-definer define-odbc odbc-lib)
|
||||||
|
|
||||||
|
(define (ok-status? n)
|
||||||
|
(or (= n SQL_SUCCESS)
|
||||||
|
(= n SQL_SUCCESS_WITH_INFO)))
|
||||||
|
|
||||||
(define-odbc SQLAllocHandle
|
(define-odbc SQLAllocHandle
|
||||||
(_fun (type : _sqlsmallint)
|
(_fun (type : _sqlsmallint)
|
||||||
(parent : _sqlhandle/null)
|
(parent : _sqlhandle/null)
|
||||||
|
@ -168,7 +172,8 @@ Docs at http://msdn.microsoft.com/en-us/library/ms712628%28v=VS.85%29.aspx
|
||||||
(len : (_ptr o _sqlsmallint))
|
(len : (_ptr o _sqlsmallint))
|
||||||
-> (status : _sqlreturn)
|
-> (status : _sqlreturn)
|
||||||
-> (values status
|
-> (values status
|
||||||
(bytes->string/utf-8 value #f 0 len)))))
|
(and (ok-status? status)
|
||||||
|
(bytes->string/utf-8 value #f 0 len))))))
|
||||||
|
|
||||||
(define-odbc SQLGetFunctions
|
(define-odbc SQLGetFunctions
|
||||||
(_fun (handle : _sqlhdbc)
|
(_fun (handle : _sqlhdbc)
|
||||||
|
@ -211,7 +216,7 @@ Docs at http://msdn.microsoft.com/en-us/library/ms712628%28v=VS.85%29.aspx
|
||||||
(out-len : (_ptr o _sqlsmallint))
|
(out-len : (_ptr o _sqlsmallint))
|
||||||
-> (status : _sqlreturn)
|
-> (status : _sqlreturn)
|
||||||
-> (values status
|
-> (values status
|
||||||
(and (or (= status SQL_SUCCESS) (= status SQL_SUCCESS_WITH_INFO))
|
(and (ok-status? status)
|
||||||
(bytes->string/utf-8 out-buf #f 0 out-len)))))
|
(bytes->string/utf-8 out-buf #f 0 out-len)))))
|
||||||
|
|
||||||
(define-odbc SQLDataSources
|
(define-odbc SQLDataSources
|
||||||
|
@ -226,9 +231,9 @@ Docs at http://msdn.microsoft.com/en-us/library/ms712628%28v=VS.85%29.aspx
|
||||||
(descr-length : (_ptr o _sqlsmallint))
|
(descr-length : (_ptr o _sqlsmallint))
|
||||||
-> (status : _sqlreturn)
|
-> (status : _sqlreturn)
|
||||||
-> (values status
|
-> (values status
|
||||||
(and (or (= status SQL_SUCCESS) (= status SQL_SUCCESS_WITH_INFO))
|
(and (ok-status? status)
|
||||||
(bytes->string/utf-8 server-buf #f 0 server-length))
|
(bytes->string/utf-8 server-buf #f 0 server-length))
|
||||||
(and (or (= status SQL_SUCCESS) (= status SQL_SUCCESS_WITH_INFO))
|
(and (ok-status? status)
|
||||||
(bytes->string/utf-8 descr-buf #f 0 descr-length)))))
|
(bytes->string/utf-8 descr-buf #f 0 descr-length)))))
|
||||||
|
|
||||||
(define-odbc SQLDrivers
|
(define-odbc SQLDrivers
|
||||||
|
@ -242,7 +247,7 @@ Docs at http://msdn.microsoft.com/en-us/library/ms712628%28v=VS.85%29.aspx
|
||||||
((if attrs-buf (bytes-length attrs-buf) 0) : _sqlsmallint)
|
((if attrs-buf (bytes-length attrs-buf) 0) : _sqlsmallint)
|
||||||
(attrs-length : (_ptr o _sqlsmallint))
|
(attrs-length : (_ptr o _sqlsmallint))
|
||||||
-> (status : _sqlreturn)
|
-> (status : _sqlreturn)
|
||||||
-> (if (or (= status SQL_SUCCESS) (= status SQL_SUCCESS_WITH_INFO))
|
-> (if (ok-status? status)
|
||||||
(values status
|
(values status
|
||||||
(bytes->string/utf-8 driver-buf #f 0 driver-length)
|
(bytes->string/utf-8 driver-buf #f 0 driver-length)
|
||||||
attrs-length)
|
attrs-length)
|
||||||
|
@ -308,7 +313,8 @@ Docs at http://msdn.microsoft.com/en-us/library/ms712628%28v=VS.85%29.aspx
|
||||||
(nullable : (_ptr o _sqlsmallint))
|
(nullable : (_ptr o _sqlsmallint))
|
||||||
-> (status : _sqlreturn)
|
-> (status : _sqlreturn)
|
||||||
-> (values status
|
-> (values status
|
||||||
(bytes->string/utf-8 column-buf #f 0 column-len)
|
(and (ok-status? status)
|
||||||
|
(bytes->string/utf-8 column-buf #f 0 column-len))
|
||||||
data-type size digits nullable)))
|
data-type size digits nullable)))
|
||||||
|
|
||||||
(define-odbc SQLFetch
|
(define-odbc SQLFetch
|
||||||
|
@ -356,9 +362,11 @@ Docs at http://msdn.microsoft.com/en-us/library/ms712628%28v=VS.85%29.aspx
|
||||||
(message-len : (_ptr o _sqlsmallint))
|
(message-len : (_ptr o _sqlsmallint))
|
||||||
-> (status : _sqlreturn)
|
-> (status : _sqlreturn)
|
||||||
-> (values status
|
-> (values status
|
||||||
(bytes->string/utf-8 sql-state-buf #\? 0 5)
|
(and (ok-status? status)
|
||||||
|
(bytes->string/utf-8 sql-state-buf #\? 0 5))
|
||||||
native-errcode
|
native-errcode
|
||||||
(bytes->string/utf-8 message-buf #\? 0 message-len))))
|
(and (ok-status? status)
|
||||||
|
(bytes->string/utf-8 message-buf #\? 0 message-len)))))
|
||||||
|
|
||||||
(define-odbc SQLEndTran
|
(define-odbc SQLEndTran
|
||||||
(_fun (handle completion-type) ::
|
(_fun (handle completion-type) ::
|
||||||
|
|
Loading…
Reference in New Issue
Block a user