db: avoid Racket C API

Also, the use of `scheme_make_sized_byte_string` was incorrect, since
it expects 3 arguments.
This commit is contained in:
Matthew Flatt 2018-04-15 07:42:49 -06:00
parent 69f5395d5d
commit ecd0aee2b7

View File

@ -251,9 +251,10 @@
(define-sqlite sqlite3_value_blob (_fun _sqlite3_value -> _pointer)) (define-sqlite sqlite3_value_blob (_fun _sqlite3_value -> _pointer))
(define-sqlite sqlite3_value_text (_fun _sqlite3_value -> _pointer)) (define-sqlite sqlite3_value_text (_fun _sqlite3_value -> _pointer))
(define-ffi-definer define-rkt #f) (define (pointer->bytes p len)
(define-rkt scheme_make_sized_utf8_string (_fun _pointer _intptr -> _racket)) (define bstr (make-bytes len))
(define-rkt scheme_make_sized_byte_string (_fun _pointer _intptr -> _racket)) (memcpy bstr p len)
bstr)
(define _sqlite3_value* (define _sqlite3_value*
(make-ctype _sqlite3_value (make-ctype _sqlite3_value
@ -263,10 +264,10 @@
(cond [(= type SQLITE_INTEGER) (sqlite3_value_int64 v)] (cond [(= type SQLITE_INTEGER) (sqlite3_value_int64 v)]
[(= type SQLITE_FLOAT) (sqlite3_value_double v)] [(= type SQLITE_FLOAT) (sqlite3_value_double v)]
[(= type SQLITE_TEXT) [(= type SQLITE_TEXT)
(scheme_make_sized_utf8_string (sqlite3_value_text v) (bytes->string/utf-8 (pointer->bytes (sqlite3_value_text v)
(sqlite3_value_bytes v))] (sqlite3_value_bytes v)))]
[(= type SQLITE_BLOB) [(= type SQLITE_BLOB)
(scheme_make_sized_byte_string (sqlite3_value_blob v) (pointer->bytes (sqlite3_value_blob v)
(sqlite3_value_bytes v))] (sqlite3_value_bytes v))]
[else (error '_sqlite3_value* "cannot convert: ~e (type = ~s)" v type)])))) [else (error '_sqlite3_value* "cannot convert: ~e (type = ~s)" v type)]))))