src/hg/utils/tdbQuery/tdbQuery.c 1.17

1.17 2009/12/05 03:52:19 kent
When you do a -check also does check of query.
Index: src/hg/utils/tdbQuery/tdbQuery.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/utils/tdbQuery/tdbQuery.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -b -B -U 4 -r1.16 -r1.17
--- src/hg/utils/tdbQuery/tdbQuery.c	5 Dec 2009 02:45:48 -0000	1.16
+++ src/hg/utils/tdbQuery/tdbQuery.c	5 Dec 2009 03:52:19 -0000	1.17
@@ -128,15 +128,28 @@
     }
 return FALSE;
 }
 
-static void doChecks(struct tdbRecord *recordList, struct lm *lm)
+static void doChecks(struct tdbRecord *recordList, struct rqlStatement *rql, struct lm *lm)
 /* Do additional checks. */
 {
 /* Do checks that tags are all legitimate and with correct types. */
 char tagTypeFile[PATH_LEN];
 safef(tagTypeFile, sizeof(tagTypeFile), "%s/%s", clRoot, "tagTypes.tab");
 struct hash *tagTypeHash = readTagTypeHash(tagTypeFile);
+struct slName *field;
+for (field = rql->fieldList; field != NULL; field = field->next)
+    {
+    if (!hashLookup(tagTypeHash, field->name))
+        errAbort("Field %s in query doesn't exist in %s.", field->name, tagTypeFile);
+    }
+struct slName *var;
+for (var = rql->whereVarList; var != NULL; var = var->next)
+    {
+    if (!hashLookup(tagTypeHash, var->name))
+        errAbort("Tag %s doesn't exist. Maybe you meant '%s'?\nMaybe %s is hosed?.", 
+		var->name, var->name, tagTypeFile);
+    }
 struct tdbRecord *record;
 for (record = recordList; record != NULL; record = record->next)
     {
     struct tdbField *typeField = tdbRecordField(record, "type");
@@ -921,9 +934,9 @@
 
     overridePrioritiesAndVisibilities(recordList, p, lm);
 
     if (clCheck)
-        doChecks(recordList, lm);
+        doChecks(recordList, rql, lm);
 
     struct tdbRecord *record;
     boolean doSelect = sameString(rql->command, "select");
     for (record = recordList; record != NULL; record = record->next)