case-insensitive tag search

This commit is contained in:
ed 2021-07-18 21:34:36 +02:00
parent ec788fa491
commit ebc9de02b0
3 changed files with 23 additions and 2 deletions

View file

@ -176,6 +176,9 @@ small collection of user feedback
* Windows: msys2-python 3.8.6 occasionally throws `RuntimeError: release unlocked lock` when leaving a scoped mutex in up2k * Windows: msys2-python 3.8.6 occasionally throws `RuntimeError: release unlocked lock` when leaving a scoped mutex in up2k
* this is an msys2 bug, the regular windows edition of python is fine * this is an msys2 bug, the regular windows edition of python is fine
* VirtualBox: sqlite throws `Disk I/O Error` when running in a VM and the up2k database is in a vboxsf
* use `--hist` or the `hist` volflag (`-v [...]:chist=/tmp/foo`) to place the db inside the vm instead
# the browser # the browser

View file

@ -7,6 +7,7 @@ import time
import threading import threading
from datetime import datetime from datetime import datetime
from .__init__ import unicode
from .util import s3dec, Pebkac, min_ex from .util import s3dec, Pebkac, min_ex
from .up2k import up2k_wark_from_hashlist from .up2k import up2k_wark_from_hashlist
@ -90,6 +91,8 @@ class U2idx(object):
mt_ctr = 0 mt_ctr = 0
mt_keycmp = "substr(up.w,1,16)" mt_keycmp = "substr(up.w,1,16)"
mt_keycmp2 = None mt_keycmp2 = None
ptn_lc = re.compile(r" (mt[0-9]+\.v) ([=<!>]+) \? $")
ptn_lcv = re.compile(r"[a-zA-Z]")
while True: while True:
uq = uq.strip() uq = uq.strip()
@ -182,6 +185,21 @@ class U2idx(object):
va.append(v) va.append(v)
is_key = True is_key = True
# lowercase tag searches
m = ptn_lc.search(q)
if not m or not ptn_lcv.search(unicode(v)):
continue
va.pop()
va.append(v.lower())
q = q[: m.start()]
field, oper = m.groups()
if oper in ["=", "=="]:
q += " {} like ? ".format(field)
else:
q += " lower({}) {} ? ".format(field, oper)
try: try:
return self.run_query(vols, joins + "where " + q, va) return self.run_query(vols, joins + "where " + q, va)
except Exception as ex: except Exception as ex:

View file

@ -596,7 +596,7 @@ class Up2k(object):
c2 = conn.cursor() c2 = conn.cursor()
c3 = conn.cursor() c3 = conn.cursor()
n_left = cur.execute("select count(w) from up").fetchone()[0] n_left = cur.execute("select count(w) from up").fetchone()[0]
for w, rd, fn in cur.execute("select w, rd, fn from up"): for w, rd, fn in cur.execute("select w, rd, fn from up order by rd, fn"):
n_left -= 1 n_left -= 1
q = "select w from mt where w = ?" q = "select w from mt where w = ?"
if c2.execute(q, (w[:16],)).fetchone(): if c2.execute(q, (w[:16],)).fetchone():