From 11043432e6e4a058a219abd492b46cc644f35329 Mon Sep 17 00:00:00 2001 From: travisutk Date: Mon, 29 Mar 2010 23:00:22 +0000 Subject: [PATCH 1/1] Removed recursive SQL. Glitch/runch now runs in a minute instead of days for large databases. git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@447 12e2690d-a6be-4b82-a7b7-67c4a43b65c8 --- client/GoodFETGlitch.py | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/client/GoodFETGlitch.py b/client/GoodFETGlitch.py index e9598f9..9924107 100644 --- a/client/GoodFETGlitch.py +++ b/client/GoodFETGlitch.py @@ -82,17 +82,38 @@ class GoodFETGlitch(GoodFET): sys.stdout.flush(); self.db.execute("drop table if exists glitchrange;"); self.db.execute("create table glitchrange(time integer primary key asc,max,min);"); - self.db.execute("insert into glitchrange(time,max,min) select distinct time, 0, 0 from glitches;"); self.db.commit(); - print "Maximums..."; + print "Calculating ranges..."; sys.stdout.flush(); - self.db.execute("update glitchrange set max=(select max(vcc) from glitches where glitches.time=glitchrange.time and count=0);"); - self.db.commit(); - print "Minimums..."; - sys.stdout.flush(); - self.db.execute("update glitchrange set min=(select min(vcc) from glitches where glitches.time=glitchrange.time and count>0);"); + + maxes={}; + mins={}; + + c=self.db.cursor(); + c.execute("select time,vcc,count from glitches;"); #Limit 10000 for testing. + progress=0; + for r in c: + progress=progress+1; + if progress % 1000000==0: print "%09i rows crunched." % progress; + t=r[0]; + v=r[1]; + count=r[2]; + if count==0: + try: oldmax=maxes[t]; + except: oldmax=-1; + if v>oldmax: maxes[t]=v; + elif count==1: + try: oldmin=mins[t]; + except: oldmin=0x10000; + if v