changed key handling.
This commit is contained in:
+29
-17
@@ -56,24 +56,24 @@
|
|||||||
|
|
||||||
(define/contract (ks-set! ksh key value)
|
(define/contract (ks-set! ksh key value)
|
||||||
(-> keystore? any/c any/c boolean?)
|
(-> keystore? any/c any/c boolean?)
|
||||||
(ks-set!* (keystore-dbh ksh) (value->string key) (format "~a" key) (value->string value)))
|
(ks-set!* (keystore-dbh ksh) (key->string key) (format "~a" key) (value->string value)))
|
||||||
|
|
||||||
(define/contract (ks-exists? ksh key)
|
(define/contract (ks-exists? ksh key)
|
||||||
(-> keystore? any/c boolean?)
|
(-> keystore? any/c boolean?)
|
||||||
(ks-exists?* (keystore-dbh ksh) (value->string key)))
|
(ks-exists?* (keystore-dbh ksh) (key->string key)))
|
||||||
|
|
||||||
(define/contract (ks-get ksh key . default-value)
|
(define/contract (ks-get ksh key . default-value)
|
||||||
(-> keystore? any/c ... any/c any/c)
|
(-> keystore? any/c ... any/c any/c)
|
||||||
(ks-get* (keystore-dbh ksh) (value->string key) default-value))
|
(ks-get* (keystore-dbh ksh) (key->string key) default-value))
|
||||||
|
|
||||||
(define/contract (ks-drop! ksh key)
|
(define/contract (ks-drop! ksh key)
|
||||||
(-> keystore? any/c boolean?)
|
(-> keystore? any/c boolean?)
|
||||||
(ks-drop!* (keystore-dbh ksh) (value->string key)))
|
(ks-drop!* (keystore-dbh ksh) (key->string key)))
|
||||||
|
|
||||||
(define/contract (ks-key-values-glob ksh gl)
|
(define/contract (ks-key-values-glob ksh gl)
|
||||||
(-> keystore? string? list?)
|
(-> keystore? string? list?)
|
||||||
(map (λ (row)
|
(map (λ (row)
|
||||||
(cons (string->value (vector-ref row 0)) (string->value (vector-ref row 1))))
|
(cons (string->key (vector-ref row 0)) (string->value (vector-ref row 1))))
|
||||||
(query-rows (keystore-dbh ksh)
|
(query-rows (keystore-dbh ksh)
|
||||||
"SELECT key, value FROM keystore WHERE str_key GLOB $1"
|
"SELECT key, value FROM keystore WHERE str_key GLOB $1"
|
||||||
(string-downcase gl))))
|
(string-downcase gl))))
|
||||||
@@ -87,7 +87,7 @@
|
|||||||
(define/contract (ks-keys-glob ksh sqlite-like)
|
(define/contract (ks-keys-glob ksh sqlite-like)
|
||||||
(-> keystore? string? list?)
|
(-> keystore? string? list?)
|
||||||
(map (λ (row)
|
(map (λ (row)
|
||||||
(string->value (vector-ref row 0)))
|
(string->key (vector-ref row 0)))
|
||||||
(query-rows (keystore-dbh ksh)
|
(query-rows (keystore-dbh ksh)
|
||||||
"SELECT key FROM keystore WHERE str_key GLOB $1"
|
"SELECT key FROM keystore WHERE str_key GLOB $1"
|
||||||
(string-downcase sqlite-like))))
|
(string-downcase sqlite-like))))
|
||||||
@@ -171,12 +171,12 @@
|
|||||||
|
|
||||||
(define (ks-keys* dbh)
|
(define (ks-keys* dbh)
|
||||||
(map (λ (row)
|
(map (λ (row)
|
||||||
(string->value (vector-ref row 0)))
|
(string->key (vector-ref row 0)))
|
||||||
(query-rows dbh "SELECT key FROM keystore")))
|
(query-rows dbh "SELECT key FROM keystore")))
|
||||||
|
|
||||||
(define (ks-key-values* dbh)
|
(define (ks-key-values* dbh)
|
||||||
(map (λ (row)
|
(map (λ (row)
|
||||||
(cons (string->value (vector-ref row 0))
|
(cons (string->key (vector-ref row 0))
|
||||||
(string->value (vector-ref row 1))))
|
(string->value (vector-ref row 1))))
|
||||||
(query-rows dbh "SELECT key, value FROM keystore")))
|
(query-rows dbh "SELECT key, value FROM keystore")))
|
||||||
|
|
||||||
@@ -185,14 +185,26 @@
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(define (value->string v)
|
(define (value->string v)
|
||||||
(if (string? v)
|
(call-with-output-string
|
||||||
v
|
(λ (out) (write (serialize v) out))))
|
||||||
(call-with-output-string
|
|
||||||
(λ (out) (write (serialize v) out)))))
|
|
||||||
|
|
||||||
(define (string->value v)
|
(define (string->value v)
|
||||||
(if (and (string-prefix? v "((") (string-suffix? v ")"))
|
(deserialize
|
||||||
(deserialize
|
(call-with-input-string v (λ (in) (read in)))))
|
||||||
(call-with-input-string v (λ (in) (read in))))
|
|
||||||
v))
|
(define (key->string v)
|
||||||
|
(cond
|
||||||
|
((string? v) v)
|
||||||
|
((symbol? v) (string-append "@S:" (symbol->string v)))
|
||||||
|
((number? v) (string-append "@N:" (number->string v)))
|
||||||
|
(else (string-append "@SER:" (call-with-output-string
|
||||||
|
(λ (out) (write (serialize v) out))))))
|
||||||
|
)
|
||||||
|
|
||||||
|
(define (string->key v)
|
||||||
|
(cond
|
||||||
|
((string-prefix? v "@S:") (string->symbol (substring v 3)))
|
||||||
|
((string-prefix? v "@N:") (string->number (substring v 3)))
|
||||||
|
((string-prefix? v "@SER:") (string->value (substring v 5)))
|
||||||
|
(else v)))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user