typed-racket/typed-racket-test/succeed/pr468-in-query.rkt
WarGrey Gyoudmon Ju 3077af848b in-query returns a sequence of single value (#468)
this is an trade-off since dynamically-valued interfaces are almost impossible to typecheck
https://github.com/racket/typed-racket/pull/468

Also, the `SQL-Datum` is now more precision, since `Any` shadows
all opaque types (such as `SQL-Null`) which may lead to contract errors.
2017-01-06 11:34:54 -05:00

33 lines
1.1 KiB
Racket

#lang typed/racket
;; https://github.com/racket/typed-racket/issues/460
;; https://github.com/racket/typed-racket/pull/468
(require typed/db)
(define sqlite : Connection (sqlite3-connect #:database 'memory))
(struct master ([id : Integer] [type : Symbol] [name : String] [sql : String])
#:prefab #:type-name Master
#:constructor-name make-master)
(define record : Master
(make-master (current-milliseconds) 'table "manual_index"
"CREATE TABLE manual_index(id, name, content);"))
(query-exec sqlite (master-sql record))
(query-exec sqlite "insert into manual_index values ($1, $2, $3)"
(master-id record) (master-name record) (~s record))
(for ([s (in-query sqlite "SELECT content FROM manual_index WHERE name = $1;" (master-name record))])
(define ?record (with-input-from-string (~a s) read))
(if (not (master? ?record))
(fprintf (current-error-port) "in-query: unexpected value: ~s"
?record)
(fprintf (current-output-port) "[~a]~a: ~s~n"
(master-type ?record)
(master-name ?record)
(master-sql ?record))))
(disconnect sqlite)