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");