summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorunwox <me@unwox.com>2024-10-17 10:32:35 +0600
committerunwox <me@unwox.com>2024-10-17 10:53:30 +0600
commitff8c6c9dde3a877b51e2fabafa579e2c05dc856e (patch)
tree3b6c9d8638ee78f913540e25ac7fc17433b906b6 /lib
parent43c7b5de358e8a158e9ed3c396d3866845682515 (diff)
implement caching
Diffstat (limited to 'lib')
-rw-r--r--lib/array.fnl12
-rw-r--r--lib/cache.fnl21
2 files changed, 32 insertions, 1 deletions
diff --git a/lib/array.fnl b/lib/array.fnl
index 8b81c5c..8af6244 100644
--- a/lib/array.fnl
+++ b/lib/array.fnl
@@ -53,6 +53,16 @@
(lua "return true")))
false)
+(fn list [obj]
+ (local result [])
+ (var cursor 1)
+ (each [_ v (pairs obj)]
+ (tset result cursor v)
+ (set cursor (+ 1 cursor)))
+ ;; sort so we always return the same list for the same object
+ (table.sort result)
+ result)
+
(local join table.concat)
-{: sort : concat : diff : unique : flatten : join : contains}
+{: sort : concat : diff : unique : flatten : join : contains : list}
diff --git a/lib/cache.fnl b/lib/cache.fnl
new file mode 100644
index 0000000..b21a05e
--- /dev/null
+++ b/lib/cache.fnl
@@ -0,0 +1,21 @@
+(local {: must} (require :lib.utils))
+
+(fn get [db key else]
+ (local result
+ (must (luna.db.query db "SELECT value FROM cache WHERE key = ?"
+ [key])))
+ (or (if (and result (< 0 (# result)))
+ (. (. result 1) 1)
+ nil)
+ else))
+
+(fn _set [db key value]
+ value
+ (must (luna.db.exec db "INSERT OR REPLACE INTO cache VALUES (?, ?)"
+ [key value]))
+ value)
+
+(fn clear-tx [tx]
+ (must (luna.db.exec-tx tx "DELETE FROM cache" [])))
+
+{: get :set _set : clear-tx}