From 0ac903f527a966584c4ea981cc1c325c829c32fc Mon Sep 17 00:00:00 2001 From: Ryan Culpepper Date: Wed, 28 Nov 2012 15:44:48 -0500 Subject: [PATCH] work around missing _v2 functions on old libsqlite3 versions Missing sqlite3_next_stmt is still a problem, but harder to work around. --- collects/db/private/sqlite3/ffi.rkt | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/collects/db/private/sqlite3/ffi.rkt b/collects/db/private/sqlite3/ffi.rkt index 073fe54425..8f83244970 100644 --- a/collects/db/private/sqlite3/ffi.rkt +++ b/collects/db/private/sqlite3/ffi.rkt @@ -25,6 +25,13 @@ (define-sqlite sqlite3_libversion_number (_fun -> _int)) +(define-sqlite sqlite3_open + (_fun (filename ignored-flags) :: + (filename : _bytes) + (db : (_ptr o _sqlite3_database)) + -> (result : _int) + -> (values db result))) + (define-sqlite sqlite3_open_v2 (_fun (filename flags) :: (filename : _bytes) @@ -32,7 +39,8 @@ (flags : _int) (vfs : _pointer = #f) -> (result : _int) - -> (values db result))) + -> (values db result)) + #:fail (lambda () sqlite3_open)) (define-sqlite sqlite3_close (_fun _sqlite3_database @@ -49,6 +57,16 @@ (ptr-set! rawcopy _byte n 0) copy)) +(define-sqlite sqlite3_prepare + (_fun (db sql) :: + (db : _sqlite3_database) + (sql-buffer : _bytes = (copy-buffer sql)) + ((bytes-length sql-buffer) : _int) + (statement : (_ptr o _sqlite3_statement/null)) + (tail : (_ptr o _bytes)) ;; points into sql-buffer (atomic-interior) + -> (result : _int) + -> (values result statement (and tail (positive? (bytes-length tail)))))) + (define-sqlite sqlite3_prepare_v2 (_fun (db sql) :: (db : _sqlite3_database) @@ -58,7 +76,8 @@ (statement : (_ptr o _sqlite3_statement/null)) (tail : (_ptr o _bytes)) ;; points into sql-buffer (atomic-interior) -> (result : _int) - -> (values result statement (and tail (positive? (bytes-length tail)))))) + -> (values result statement (and tail (positive? (bytes-length tail))))) + #:fail (lambda () sqlite3_prepare)) (define-sqlite sqlite3_finalize (_fun _sqlite3_statement