]> CyberLeo.Net >> Repos - CDN/taggery.git/blob - lib/kvs.sh
Add debugging options
[CDN/taggery.git] / lib / kvs.sh
1 t="$(printf '\t')"
2
3 [ "${kvs}" ] || {
4   cat <<EOF
5 KVS v0.1
6 Copyright - http://wiki.cyberleo.net/wiki/CyberLeo/COPYRIGHT?version=4
7
8 Set the following variables before sourcing this library:
9
10  kvs  - Path and filename of the kvdb database file
11 EOF
12   kill $$
13   exit 1
14 }
15
16
17 [ -s "${kvs}" ] || echo "${t}${t}# KVSv0 id-key-value database" > "${kvs}"
18
19 # Add or replace a value stored for a given key and id in the kvs
20 kvs_set() {
21   [ "${1}" -a "${2}" ] || return 255
22   local id="${1}"
23   local var="${2}"
24   local val="${3}"
25   printf "%s\t%s\t%s\n" "${id}" "${var}" "${val}" >> "${kvs}"
26 }
27
28 # Fetch the most recent value stored for a given key and id from the kvs
29 kvs_get() {
30   [ "${1}" -a "${2}" ] || return 255
31   local id="${1}"
32   local var="${2}"
33   grep "^${id}${t}${var}${t}" "${kvs}" | tail -n 1 | cut -d"${t}" -f3-
34 }
35
36 # Fetch all values stored for a given id
37 kvs_get_all() {
38   [ "${1}" ] || return 255
39   local id="${1}"
40   grep "^${id}${t}" "${kvs}"
41 }
42
43 # Does the kvs have any entries for a given ID?
44 kvs_has_id() {
45   [ "${1}" ] || return 255
46   local id="${1}"
47   grep -q "^${id}${t}" "${kvs}"
48 }
49
50 # Does the kvs have a given key for a given ID?
51 kvs_has_key() {
52   [ "${1}" -a "${2}" ] || return 255
53   local id="${1}"
54   local var="${2}"
55   grep -q "^${id}${t}${var}${t}" "${kvs}"
56 }
57
58 # Remove a given key with a given ID from the kvs
59 kvs_unset() {
60   [ "${1}" -a "${2}" ] || return 255
61   local id="${1}"
62   local var="${2}"
63   grep -v "^${id}${t}${var}${t}" "${kvs}" > "${kvs}.tmp" && mv -f "${kvs}.tmp" "${kvs}" || rm -f "${kvs}.tmp"
64 }
65
66 # Remove all keys with a given ID from the kvs
67 kvs_unset_all() {
68   [ "${1}" ] || return 255
69   local id="${1}"
70   grep -v "^${id}${t}" "${kvs}" > "${kvs}.tmp" && mv -f "${kvs}.tmp" "${kvs}" || rm -f "${kvs}.tmp"
71 }