src/hg/hgApi/hgApi.c 1.3
1.3 2010/05/30 21:11:47 larrym
add metaDb command
Index: src/hg/hgApi/hgApi.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgApi/hgApi.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -b -B -U 4 -r1.2 -r1.3
--- src/hg/hgApi/hgApi.c 21 May 2010 22:29:49 -0000 1.2
+++ src/hg/hgApi/hgApi.c 30 May 2010 21:11:47 -0000 1.3
@@ -50,22 +50,29 @@
}
int main(int argc, char *argv[])
{
-struct dyString *output = newDyString(1000);
+struct dyString *output = newDyString(10000);
char *database = cgiOptionalString("db");
char *cmd = cgiOptionalString("cmd");
char *jsonp = cgiOptionalString("jsonp");
if(database)
+ {
database = sqlEscapeString(database);
+ if(!hDbExists(database))
+ fail("Invalid database");
+ }
+else
+ fail("Missing 'db' parameter");
if(!cmd)
fail("Missing 'cmd' parameter");
if(!strcmp(cmd, "trackList"))
{
- if(database)
- {
+ // Return trackList for this assembly
+ // e.g. http://genome.ucsc.edu/hgApi?db=hg18&cmd=trackList
+
struct trackDb *tdb, *tdbList = NULL;
tdbList = hTrackDb(database, NULL);
dyStringPrintf(output, "[\n");
int count = 0;
@@ -75,12 +82,44 @@
count++;
}
dyStringAppend(output, "\n]\n");
}
+else if(!strcmp(cmd, "metaDb"))
+ {
+ // Return list of values for given metaDb var
+ // e.g. http://genome.ucsc.edu/hgApi?db=hg18&cmd=metaDb&var=cell
+
+ struct sqlConnection *conn = hAllocConn(database);
+ boolean metaDbExists = sqlTableExists(conn, "metaDb");
+ if(metaDbExists)
+ {
+ char query[256];
+ struct sqlResult *sr = NULL;
+ char **row;
+ int i;
+ struct slName *el, *termList = NULL;
+ char *var = cgiOptionalString("var");
+ if(var)
+ var = sqlEscapeString(var);
else
+ fail("Missing var parameter");
+ safef(query, sizeof(query), "select distinct val from metaDb where var = '%s'", var);
+ sr = sqlGetResult(conn, query);
+ while ((row = sqlNextRow(sr)) != NULL)
+ slNameAddHead(&termList, row[0]);
+ sqlFreeResult(&sr);
+ slSort(&termList, slNameCmpCase);
+ dyStringPrintf(output, "[\n");
+ for (el = termList, i = 0; el != NULL; el = el->next, i++)
{
- fail("Missing 'db' parameter");
+ if(i)
+ dyStringPrintf(output, ",\n");
+ dyStringPrintf(output, "'%s'", javaScriptLiteralEncode(el->name));
+ }
+ dyStringPrintf(output, "\n]\n");
}
+ else
+ fail("Assembly does not support metaDb");
}
else
fail("Unsupported 'cmd' parameter");