#lang racket/base
(require racket/class
         "../generic/interfaces.rkt"
         "../generic/sql-data.rkt"
         "ffi-constants.rkt")
(provide dbsystem)
(define sqlite3-dbsystem%
  (class* object% (dbsystem<%>)
    (define/public (get-short-name) 'sqlite3)
    (define/public (get-known-types) '(any))
    (define/public (has-support? x) #f)
    (define/public (get-parameter-handlers param-typeids)
      (map (lambda (param-typeid) check-param)
           param-typeids))
    (define/public (field-dvecs->typeids dvecs)
      (map (lambda (dvec) (vector-ref dvec 0))
           dvecs))
    (define/public (describe-typeids typeids)
      (map (lambda _ '(#t any #f))
           typeids))
    (super-new)))
(define dbsystem
  (new sqlite3-dbsystem%))
(define (check-param fsym index param)
  (unless (or (real? param)
              (string? param)
              (bytes? param))
    (error/no-convert fsym "SQLite" "parameter" param))
  param)