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