Overview
| Comment: | Allow to take zero SQL parameters |
|---|---|
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
0d3df6790a58452429db1a09661d3262 |
| User & Date: | joel on 2019-03-09 03:59:13 |
| Other Links: | manifest | tags |
Context
|
2019-03-09
| ||
| 04:00 | Small fixes in dust check-in: e18e8fa4 user: joel tags: trunk | |
| 03:59 | Allow to take zero SQL parameters check-in: 0d3df679 user: joel tags: trunk | |
|
2019-03-08
| ||
| 00:01 | Change scribble command in makefile so that it can link to documentation for packages installed in user scope check-in: 7e52d6a3 user: joel tags: trunk | |
Changes
Modified code-docs/sqlite-tools.scrbl from [dda37e2d] to [de7cfd61].
| ︙ | ︙ | |||
35 36 37 38 39 40 41 |
@section{Parameters}
@defparam[sqltools:dbc con connection? #:value "No DB connection!"]
The current database connection. This module assumes a single active connection and stores it in
this parameter so you don’t have to pass it to a function every time you execute a query. It’s
| | > | 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
@section{Parameters}
@defparam[sqltools:dbc con connection? #:value "No DB connection!"]
The current database connection. This module assumes a single active connection and stores it in
this parameter so you don’t have to pass it to a function every time you execute a query. It’s
provided here so you can use it directly with the functions provided by @racketmodname[db] (all of
which are re-provided by this module for convenience).
@defboolparam[sqltools:log-queries? v #:value #f]
A kill-switch that determines whether @racket[log-query] does anything.
@section{SQL building-blocks}
|
| ︙ | ︙ |
Modified sqlite-tools.rkt from [74d52a42] to [044c6c3e].
| ︙ | ︙ | |||
57 58 59 60 61 62 63 |
(#:primary-key-cols (listof stringish?))
. ->* . string?)]
[make-insert/replace-query (stringish? (listof stringish?) . -> . string?)]
[make-insert-rows-query (stringish? (listof stringish?) (listof (listof stringish?)) . -> . string?)]
[make-select-query (stringish? (listof stringish?) #:where stringish? . -> . string?)]
;; Database operations
| | | | 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
(#:primary-key-cols (listof stringish?))
. ->* . string?)]
[make-insert/replace-query (stringish? (listof stringish?) . -> . string?)]
[make-insert-rows-query (stringish? (listof stringish?) (listof (listof stringish?)) . -> . string?)]
[make-select-query (stringish? (listof stringish?) #:where stringish? . -> . string?)]
;; Database operations
[init-db! ((pathish?) () #:rest (listof string?) . ->* . void?)]
[query! ((string?) () #:rest (listof any/c) . ->* . void?)]
[select-rows! (case->
(stringish? (listof stringish?) any/c . -> . (or/c empty? hash?))
(string? (listof stringish?) . -> . (or/c empty? hash?)))]))
;; ~~~ Private use ~~~
(define uninitialized-connection "No DB connection!")
|
| ︙ | ︙ | |||
220 221 222 223 224 225 226 |
(for ([q (in-list qs)])
(query! q))))
;; Run a query with logging (if enabled) and return the result
(define (query! q . parameters)
(unless (good-connection?) (error "(query!) DB not connected"))
(log-query q)
| > | | 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 |
(for ([q (in-list qs)])
(query! q))))
;; Run a query with logging (if enabled) and return the result
(define (query! q . parameters)
(unless (good-connection?) (error "(query!) DB not connected"))
(log-query q)
(cond [(empty? parameters) (query-exec (sqltools:dbc) q)]
[else (apply query-exec (sqltools:dbc) q parameters)]))
;; Run a SELECT query, return a hash with field names as keys
(define select-rows!
(case-lambda
;; Use arbitrary query
[(query fieldnames)
(unless (good-connection?) (error "(select-rows!) DB not connected"))
|
| ︙ | ︙ | |||
247 248 249 250 251 252 253 | ;; TESTING: database connection state and queries (module+ test (define TESTDB "SQLITE-TOOLS-TEST.sqlite") ;; Check that things start out uninitialized and that queries don’t work (check-equal? (sqltools:dbc) uninitialized-connection) (check-false (file-exists? TESTDB)) | | | 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 | ;; TESTING: database connection state and queries (module+ test (define TESTDB "SQLITE-TOOLS-TEST.sqlite") ;; Check that things start out uninitialized and that queries don’t work (check-equal? (sqltools:dbc) uninitialized-connection) (check-false (file-exists? TESTDB)) (check-exn exn:fail? (lambda () (query! "SELECT 1"))) (check-exn exn:fail? (lambda () (select-rows! 'posts '(title) 1))) ;; Initialize db connection, create file with no schema (test-begin (check-equal? (init-db! TESTDB) (void)) (check-true (file-exists? TESTDB)) (delete-file TESTDB)) |
| ︙ | ︙ |