src/hg/lib/mdb.c 1.7
1.7 2010/05/11 16:03:48 tdreszer
Improve multi-var query
Index: src/hg/lib/mdb.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/lib/mdb.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -b -B -U 4 -r1.6 -r1.7
--- src/hg/lib/mdb.c 11 May 2010 01:43:30 -0000 1.6
+++ src/hg/lib/mdb.c 11 May 2010 16:03:48 -0000 1.7
@@ -1152,9 +1152,9 @@
if(!sqlTableExists(conn,table))
return NULL;
struct dyString *dy = newDyString(4096);
- dyStringPrintf(dy, "select distinct obj,var,varType,val from %s", table);
+ dyStringPrintf(dy, "select obj,var,varType,val from %s", table);
struct mdbByVar *rootVar;
for(rootVar=mdbByVars;rootVar!=NULL;rootVar=rootVar->next)
{
@@ -1234,22 +1234,23 @@
if(!sqlTableExists(conn,table))
return NULL;
struct dyString *dy = newDyString(4096);
- dyStringPrintf(dy, "select distinct obj,var,varType,val from %s", table);
+ dyStringPrintf(dy, "select t1.obj,t1.var,t1.varType,t1.val from %s t1", table);
struct mdbByVar *rootVar;
boolean gotVar = FALSE;
- for(rootVar=mdbByVars;rootVar!=NULL;rootVar=rootVar->next)
+ int tix;
+ for(rootVar=mdbByVars,tix=2;rootVar!=NULL;rootVar=rootVar->next,tix++)
{
if(!gotVar)
{
- dyStringPrintf(dy, " where obj in ");
+ dyStringPrintf(dy, " where t1.obj in ");
gotVar=TRUE;
}
else
- dyStringPrintf(dy, " AND obj in ");
- dyStringPrintf(dy, "(select obj from %s where var ",table);
+ dyStringPrintf(dy, " AND t1.obj in ");
+ dyStringPrintf(dy, "(select t%d.obj from %s t%d where t%d.obj = t1.obj and t%d.var ",tix,table,tix,tix,tix);
if(rootVar->notEqual && rootVar->vals == NULL)
dyStringPrintf(dy, "%s",strchr(rootVar->var,'%')?"NOT ":"!");
@@ -1264,9 +1265,9 @@
continue;
if(!multiVals)
{
- dyStringPrintf(dy, " and val ");
+ dyStringPrintf(dy, " and t%d.val ",tix);
if(rootVar->notEqual)
dyStringPrintf(dy, "%s",strchr(limbVal->val,'%')?"NOT ":"!");
if(limbVal->next == NULL) // only one val
{