Artifact
ab856615aabe26c5cc9ed236fa95a5a93e63c99b:
0000: 3b 3b 20 43 6f 70 79 72 69 67 68 74 20 32 30 30 ;; Copyright 200
0010: 37 2d 32 30 31 31 2c 20 4d 61 74 74 68 65 77 20 7-2011, Matthew
0020: 57 65 6c 6c 61 6e 64 2e 0a 3b 3b 20 0a 3b 3b 20 Welland..;; .;;
0030: 20 54 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 This program is
0040: 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65 20 made available
0050: 75 6e 64 65 72 20 74 68 65 20 47 4e 55 20 47 50 under the GNU GP
0060: 4c 20 76 65 72 73 69 6f 6e 20 32 2e 30 20 6f 72 L version 2.0 or
0070: 0a 3b 3b 20 20 67 72 65 61 74 65 72 2e 20 53 65 .;; greater. Se
0080: 65 20 74 68 65 20 61 63 63 6f 6d 70 61 6e 79 69 e the accompanyi
0090: 6e 67 20 66 69 6c 65 20 43 4f 50 59 49 4e 47 20 ng file COPYING
00a0: 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 3b 3b 20 for details..;;
00b0: 0a 3b 3b 20 20 54 68 69 73 20 70 72 6f 67 72 61 .;; This progra
00c0: 6d 20 69 73 20 64 69 73 74 72 69 62 75 74 65 64 m is distributed
00d0: 20 57 49 54 48 4f 55 54 20 41 4e 59 20 57 41 52 WITHOUT ANY WAR
00e0: 52 41 4e 54 59 3b 20 77 69 74 68 6f 75 74 20 65 RANTY; without e
00f0: 76 65 6e 20 74 68 65 0a 3b 3b 20 20 69 6d 70 6c ven the.;; impl
0100: 69 65 64 20 77 61 72 72 61 6e 74 79 20 6f 66 20 ied warranty of
0110: 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54 59 20 MERCHANTABILITY
0120: 6f 72 20 46 49 54 4e 45 53 53 20 46 4f 52 20 41 or FITNESS FOR A
0130: 20 50 41 52 54 49 43 55 4c 41 52 0a 3b 3b 20 20 PARTICULAR.;;
0140: 50 55 52 50 4f 53 45 2e 0a 0a 3b 3b 3d 3d 3d 3d PURPOSE...;;====
0150: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0160: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0170: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0180: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0190: 3d 3d 0a 3b 3b 20 54 68 65 20 6d 65 74 61 20 64 ==.;; The meta d
01a0: 61 74 61 20 6b 65 79 20 73 74 6f 72 65 2c 20 6a ata key store, j
01b0: 75 73 74 20 61 20 67 65 6e 65 72 61 6c 20 64 75 ust a general du
01c0: 6d 70 69 6e 67 20 67 72 6f 75 6e 64 20 66 6f 72 mping ground for
01d0: 20 76 61 6c 75 65 73 0a 3b 3b 20 6f 6e 6c 79 20 values.;; only
01e0: 75 73 65 64 20 6f 63 63 61 73 69 6f 6e 61 6c 6c used occasionall
01f0: 79 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d y.;;============
0200: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0210: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0220: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0230: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 28 ==========..;; (
0240: 64 65 63 6c 61 72 65 20 28 75 6e 69 74 20 6b 65 declare (unit ke
0250: 79 73 74 6f 72 65 29 29 0a 0a 28 6d 6f 64 75 6c ystore))..(modul
0260: 65 20 6b 65 79 73 74 6f 72 65 0a 20 20 20 20 2a e keystore. *
0270: 0a 0a 28 69 6d 70 6f 72 74 20 63 68 69 63 6b 65 ..(import chicke
0280: 6e 20 73 63 68 65 6d 65 20 64 61 74 61 2d 73 74 n scheme data-st
0290: 72 75 63 74 75 72 65 73 20 65 78 74 72 61 73 20 ructures extras
02a0: 73 72 66 69 2d 31 33 20 70 6f 72 74 73 20 29 0a srfi-13 ports ).
02b0: 0a 0a 28 64 65 66 69 6e 65 20 28 6b 65 79 73 74 ..(define (keyst
02c0: 6f 72 65 3a 67 65 74 20 64 62 20 6b 65 79 29 0a ore:get db key).
02d0: 20 20 28 64 62 69 3a 67 65 74 2d 6f 6e 65 20 64 (dbi:get-one d
02e0: 62 20 22 53 45 4c 45 43 54 20 76 61 6c 75 65 20 b "SELECT value
02f0: 46 52 4f 4d 20 6d 65 74 61 64 61 74 61 20 57 48 FROM metadata WH
0300: 45 52 45 20 6b 65 79 3d 3f 3b 22 20 6b 65 79 29 ERE key=?;" key)
0310: 29 0a 0a 28 64 65 66 69 6e 65 20 28 6b 65 79 73 )..(define (keys
0320: 74 6f 72 65 3a 73 65 74 21 20 64 62 20 6b 65 79 tore:set! db key
0330: 20 76 61 6c 75 65 29 0a 20 20 28 6c 65 74 20 28 value). (let (
0340: 28 63 75 72 72 2d 76 61 6c 20 28 6b 65 79 73 74 (curr-val (keyst
0350: 6f 72 65 3a 67 65 74 20 64 62 20 6b 65 79 29 29 ore:get db key))
0360: 29 0a 20 20 20 20 28 69 66 20 63 75 72 72 2d 76 ). (if curr-v
0370: 61 6c 0a 09 28 64 62 69 3a 65 78 65 63 20 64 62 al..(dbi:exec db
0380: 20 22 55 50 44 41 54 45 20 6d 65 74 61 64 61 74 "UPDATE metadat
0390: 61 20 53 45 54 20 76 61 6c 75 65 3d 3f 20 57 48 a SET value=? WH
03a0: 45 52 45 20 6b 65 79 3d 3f 3b 22 20 76 61 6c 75 ERE key=?;" valu
03b0: 65 20 6b 65 79 29 0a 09 28 64 62 69 3a 65 78 65 e key)..(dbi:exe
03c0: 63 20 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54 c db "INSERT INT
03d0: 4f 20 6d 65 74 61 64 61 74 61 20 28 6b 65 79 2c O metadata (key,
03e0: 76 61 6c 75 65 29 20 56 41 4c 55 45 53 20 28 3f value) VALUES (?
03f0: 2c 3f 29 3b 22 20 6b 65 79 20 76 61 6c 75 65 29 ,?);" key value)
0400: 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 6b 65 )))..(define (ke
0410: 79 73 74 6f 72 65 3a 64 65 6c 21 20 64 62 20 6b ystore:del! db k
0420: 65 79 29 0a 20 20 28 64 62 69 3a 65 78 65 63 20 ey). (dbi:exec
0430: 64 62 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 db "DELETE FROM
0440: 6d 65 74 61 64 61 74 61 20 57 48 45 52 45 20 6b metadata WHERE k
0450: 65 79 3d 3f 3b 22 20 6b 65 79 29 29 0a 0a 29 0a ey=?;" key))..).