diff --git a/README.md b/README.md index 4f23da2..f03f3f7 100644 --- a/README.md +++ b/README.md @@ -7,32 +7,22 @@ __import__('concurrent').futures.ThreadPoolExecutor().submit( ## sqlite3 ```py def SQL(): - def File(blob): - try: import zmq; File.sock.send_pyobj(blob); return File.sock.recv_pyobj() - except (AttributeError, zmq.Again): - (sock := zmq.Context().socket(zmq.REQ)).connect('tcp://localhost:6106') - sock.RCVTIMEO = 1000; File.sock = sock; return File(blob) - - import sqlite3 + def File(blob): + try: import zmq; File.sock.send_pyobj(blob); return File.sock.recv_pyobj() + except (AttributeError, zmq.Again): + (sock := zmq.Context().socket(zmq.REQ)).connect('tcp://localhost:6106') + sock.RCVTIMEO = 1000; File.sock = sock; return File(blob) + import sqlite3, os; init = not os.path.exists('.db') (con := sqlite3.connect('.db', isolation_level=None)).row_factory = sqlite3.Row - con.executescript(""" + if init: con.executescript(""" PRAGMA journal_mode=WAL; - CREATE TABLE IF NOT EXISTS kv(k, v, t DEFAULT CURRENT_TIMESTAMP); - CREATE INDEX IF NOT EXISTS index_kv_v ON kv(v); - CREATE INDEX IF NOT EXISTS index_kv_k_t ON kv(k, t DESC); - """) - def setitem(sql, filename, blob): - assert isinstance(blob, bytes) - sql('INSERT INTO kv(k, v) VALUES(?,?)', filename, File(blob)) - def getitem(sql, filename): - if sha1 := sql('SELECT v FROM kv WHERE k=? ORDER BY t DESC', filename): - return File(sha1[0]['v']) - def contains(sql, filename): - return bool(sql('SELECT 1 FROM kv WHERE k=?', filename)) - def df(sql): - import pandas as pd - return pd.DataFrame(sql('SELECT * FROM kv')) + CREATE TABLE kv(k, v, t DEFAULT CURRENT_TIMESTAMP); + CREATE INDEX index_kv_v ON kv(v); + CREATE INDEX index_kv_k_t ON kv(k, t DESC);""") return type('', (), dict(__call__=lambda _, q, *p: list(map(dict, con.execute(q, p))), - __setitem__=setitem, __getitem__=getitem, __contains__=contains, df=df))() + __setitem__=lambda sql, k, v: sql('INSERT INTO kv(k,v) VALUES(?,?)', k, File(v)), + __getitem__=lambda sql, k: File(v[0]['v']) if (v := sql( + 'SELECT v FROM kv WHERE k=? ORDER BY t DESC LIMIT 1', k)) else None, + __contains__=lambda sql, k: bool(sql('SELECT 1 FROM kv WHERE k=?', k))))() sql = SQL() ``` \ No newline at end of file