mirror of
https://github.com/9001/copyparty.git
synced 2025-08-17 09:02:15 -06:00
did you know rhel 7 has an sqlite3 from 2015
This commit is contained in:
parent
bb5169710a
commit
24fdada0a0
|
@ -67,10 +67,15 @@ class Up2k(object):
|
|||
self.n_mtag_tags_added = 0
|
||||
|
||||
self.mem_cur = None
|
||||
self.sqlite_ver = None
|
||||
self.no_expr_idx = False
|
||||
if HAVE_SQLITE3:
|
||||
# mojibake detector
|
||||
self.mem_cur = self._orz(":memory:")
|
||||
self.mem_cur.execute(r"create table a (b text)")
|
||||
self.sqlite_ver = tuple([int(x) for x in sqlite3.sqlite_version.split(".")])
|
||||
if self.sqlite_ver < (3, 9):
|
||||
self.no_expr_idx = True
|
||||
|
||||
if WINDOWS:
|
||||
# usually fails to set lastmod too quickly
|
||||
|
@ -140,12 +145,34 @@ class Up2k(object):
|
|||
|
||||
return ret
|
||||
|
||||
def _expr_idx_filter(self, flags):
|
||||
if not self.no_expr_idx:
|
||||
return False, flags
|
||||
|
||||
ret = {k: v for k, v in flags.items() if not k.startswith("e2t")}
|
||||
if ret.keys() == flags.keys():
|
||||
return False, flags
|
||||
|
||||
return True, ret
|
||||
|
||||
def init_indexes(self, auth):
|
||||
self.pp = ProgressPrinter()
|
||||
vols = auth.vfs.all_vols.values()
|
||||
t0 = time.time()
|
||||
have_e2d = False
|
||||
|
||||
if self.no_expr_idx:
|
||||
modified = False
|
||||
for vol in vols:
|
||||
m, f = self._expr_idx_filter(vol.flags)
|
||||
if m:
|
||||
vol.flags = f
|
||||
modified = True
|
||||
|
||||
if modified:
|
||||
msg = "\033[33mdisabling -e2t because your sqlite belongs in a museum"
|
||||
self.log(msg)
|
||||
|
||||
live_vols = []
|
||||
for vol in vols:
|
||||
try:
|
||||
|
@ -157,7 +184,7 @@ class Up2k(object):
|
|||
vols = live_vols
|
||||
|
||||
need_mtag = False
|
||||
for vol in auth.vfs.all_vols.values():
|
||||
for vol in vols:
|
||||
if "e2t" in vol.flags:
|
||||
need_mtag = True
|
||||
|
||||
|
@ -213,6 +240,8 @@ class Up2k(object):
|
|||
if ptop in self.registry:
|
||||
return None
|
||||
|
||||
_, flags = self._expr_idx_filter(flags)
|
||||
|
||||
reg = {}
|
||||
path = os.path.join(ptop, ".hist", "up2k.snap")
|
||||
if "e2d" in flags and os.path.exists(path):
|
||||
|
@ -611,8 +640,12 @@ class Up2k(object):
|
|||
except:
|
||||
pass
|
||||
|
||||
idx = r"create index up_w on up(substr(w,1,16))"
|
||||
if self.no_expr_idx:
|
||||
idx = r"create index up_w on up(w)"
|
||||
|
||||
for cmd in [
|
||||
r"create index up_w on up(substr(w,1,16))",
|
||||
idx,
|
||||
r"create table mt (w text, k text, v int)",
|
||||
r"create index mt_w on mt(w)",
|
||||
r"create index mt_k on mt(k)",
|
||||
|
@ -657,8 +690,13 @@ class Up2k(object):
|
|||
cur = self.cur.get(cj["ptop"], None)
|
||||
reg = self.registry[cj["ptop"]]
|
||||
if cur:
|
||||
if self.no_expr_idx:
|
||||
q = r"select * from up where w = ?"
|
||||
argv = (wark,)
|
||||
else:
|
||||
q = r"select * from up where substr(w,1,16) = ? and w = ?"
|
||||
argv = (wark[:16], wark)
|
||||
|
||||
cur = cur.execute(q, argv)
|
||||
for _, dtime, dsize, dp_dir, dp_fn in cur:
|
||||
if dp_dir.startswith("//") or dp_fn.startswith("//"):
|
||||
|
|
Loading…
Reference in a new issue