CMSIS-DSP: Reworked mechanism for naming of tests.
diff --git a/CMSIS/DSP/Testing/addToDB.py b/CMSIS/DSP/Testing/addToDB.py
index 5b43cff..32e2f29 100755
--- a/CMSIS/DSP/Testing/addToDB.py
+++ b/CMSIS/DSP/Testing/addToDB.py
@@ -17,25 +17,28 @@
 import datetime, time
 import re 
 
-# For table creation
-MKSTRFIELD=['NAME']
+# For sql table creation
+MKSTRFIELD=[]
 MKBOOLFIELD=['HARDFP', 'FASTMATH', 'NEON', 'HELIUM','UNROLL', 'ROUNDING','OPTIMIZED']
 MKINTFIELD=['ID', 'CYCLES']
-MKDATEFIELD=['DATE']
-MKKEYFIELD=['CATEGORY', 'PLATFORM', 'CORE', 'COMPILER','TYPE',"RUN"]
+MKDATEFIELD=[]
+MKKEYFIELD=['DATE','NAME','CATEGORY', 'PLATFORM', 'CORE', 'COMPILER','TYPE',"RUN"]
 MKKEYFIELDID={'CATEGORY':'categoryid', 
+   'NAME':'testnameid',
+   'DATE':'testdateid',
    'PLATFORM':'platformid', 
    'CORE':'coreid', 
    'COMPILER':'compilerid',
    'TYPE':'typeid',
    'RUN':'runid'}
 
-# For table value extraction
-VALSTRFIELD=['NAME','VERSION']
+# For csv table value extraction
+VALSTRFIELD=['TESTNAME','VERSION']
 VALBOOLFIELD=['HARDFP', 'FASTMATH', 'NEON', 'HELIUM','UNROLL', 'ROUNDING','OPTIMIZED']
 VALINTFIELD=['ID', 'CYCLES']
-VALDATEFIELD=['DATE']
-VALKEYFIELD=['CATEGORY', 'PLATFORM', 'CORE', 'COMPILER','TYPE']
+VALDATEFIELD=[]
+# Some of those fields may be created by the parsing of other fields
+VALKEYFIELD=['DATE','NAME','CATEGORY', 'PLATFORM', 'CORE', 'COMPILER','TYPE']
 
 def joinit(iterable, delimiter):
     it = iter(iterable)
@@ -101,6 +104,8 @@
      # Create foreign keys
      sql += "%sFOREIGN KEY(typeid) REFERENCES TYPE(typeid)," % start
      sql += "FOREIGN KEY(categoryid) REFERENCES CATEGORY(categoryid),"
+     sql += "FOREIGN KEY(testnameid) REFERENCES TESTNAME(testnameid),"
+     sql += "FOREIGN KEY(testdateid) REFERENCES TESTDATE(testdateid),"
      sql += "FOREIGN KEY(platformid) REFERENCES PLATFORM(platformid),"
      sql += "FOREIGN KEY(coreid) REFERENCES CORE(coreid),"
      sql += "FOREIGN KEY(compilerid) REFERENCES COMPILER(compilerid)"
@@ -134,9 +139,10 @@
       return(result[0])
     else:
       fullDate = datetime.datetime.now()
-      conn.execute("INSERT INTO COMPILER(compilerkindid,version,date) VALUES(?,?,?)" ,(kind,version,fullDate))
+      dateid = findInTable(conn,"TESTDATE","date",str(fullDate),"testdateid")
+      conn.execute("INSERT INTO COMPILER(compilerkindid,version,testdateid) VALUES(?,?,?)" ,(kind,version,dateid))
       conn.commit()
-      r = conn.execute("select compilerid from COMPILER where compilerkindid=? AND version=? AND date=?"  , (kind,version,fullDate))
+      r = conn.execute("select compilerid from COMPILER where compilerkindid=? AND version=? AND testdateid=?"  , (kind,version,dateid))
       result=r.fetchone()
       if result != None:
          #print(result)
@@ -175,34 +181,36 @@
             keys[field]=row[field]
             if field == "NAME":
                 name = row[field]
-                if re.match(r'^.*_f64',name):
+            if field == "TESTNAME":
+                testname = row[field]
+                if re.match(r'^.*_f64',testname):
                   keys["TYPE"] = "f64"
-                if re.match(r'^.*_f32',name):
+                if re.match(r'^.*_f32',testname):
                   keys["TYPE"] = "f32"
-                if re.match(r'^.*_f16',name):
+                if re.match(r'^.*_f16',testname):
                   keys["TYPE"] = "f16"
-                if re.match(r'^.*_q31',name):
+                if re.match(r'^.*_q31',testname):
                   keys["TYPE"] = "q31"
-                if re.match(r'^.*_q15',name):
+                if re.match(r'^.*_q15',testname):
                   keys["TYPE"] = "q15"
-                if re.match(r'^.*_q7',name):
+                if re.match(r'^.*_q7',testname):
                   keys["TYPE"] = "q7"
 
-                if re.match(r'^.*_s8',name):
+                if re.match(r'^.*_s8',testname):
                   keys["TYPE"] = "s8"
-                if re.match(r'^.*_u8',name):
+                if re.match(r'^.*_u8',testname):
                   keys["TYPE"] = "u8"
-                if re.match(r'^.*_s16',name):
+                if re.match(r'^.*_s16',testname):
                   keys["TYPE"] = "s16"
-                if re.match(r'^.*_u16',name):
+                if re.match(r'^.*_u16',testname):
                   keys["TYPE"] = "u16"
-                if re.match(r'^.*_s32',name):
+                if re.match(r'^.*_s32',testname):
                   keys["TYPE"] = "s32"
-                if re.match(r'^.*_u32',name):
+                if re.match(r'^.*_u32',testname):
                   keys["TYPE"] = "u32"
-                if re.match(r'^.*_s64',name):
+                if re.match(r'^.*_s64',testname):
                   keys["TYPE"] = "s64"
-                if re.match(r'^.*_u64',name):
+                if re.match(r'^.*_u64',testname):
                   keys["TYPE"] = "u64"
             
         if field in VALINTFIELD:
@@ -224,6 +232,12 @@
               testField=re.sub(r'^(.*)[:]([^:]+)(F16|F32|F64|Q31|Q15|Q7)$',r'\1',row[field])
               val = findInTable(conn,"CATEGORY","category",testField,"categoryid")
               keys[field]=val
+            if field == "NAME":
+              val = findInTable(conn,"TESTNAME","name",row[field],"testnameid")
+              keys[field]=val
+            if field == "DATE":
+              val = findInTable(conn,"TESTDATE","date",str(row[field]),"testdateid")
+              keys[field]=val
             if field == "CORE":
               val = findInTable(conn,"CORE","coredef",row[field],"coreid")
               keys[field]=val
@@ -261,7 +275,8 @@
    return({'compilerid':compilerid,'platformid':platformid,'coreid':coreid})
 
 def addConfig(conn,config,fullDate):
-  conn.execute("INSERT INTO CONFIG(compilerid,platformid,coreid,date) VALUES(?,?,?,?)" ,(config['compilerid'],config['platformid'],config['coreid'],fullDate))
+  dateid = findInTable(conn,"TESTDATE","date",str(fullDate),"testdateid")
+  conn.execute("INSERT INTO CONFIG(compilerid,platformid,coreid,testdateid) VALUES(?,?,?,?)" ,(config['compilerid'],config['platformid'],config['coreid'],dateid))
   conn.commit()
 
 def getGroup(a):
@@ -297,13 +312,13 @@
 
 parser = argparse.ArgumentParser(description='Generate summary benchmarks')
 
-parser.add_argument('-f', nargs='?',type = str, default="Output.pickle", help="File path")
+parser.add_argument('-f', nargs='?',type = str, default="Output.pickle", help="Pickle")
 parser.add_argument('-b', nargs='?',type = str, default="FullBenchmark", help="Full Benchmark dir path")
 #parser.add_argument('-e', action='store_true', help="Embedded test")
 parser.add_argument('-o', nargs='?',type = str, default="bench.db", help="Benchmark database")
 parser.add_argument('-r', nargs='?',type = int, default=0, help="Run ID")
 
-parser.add_argument('others', nargs=argparse.REMAINDER)
+parser.add_argument('others', nargs=argparse.REMAINDER, help="Suite class")
 
 args = parser.parse_args()