792699d7c080a26288f50741fbfeca218d3ef2b5 larrym Wed Feb 9 10:02:10 2011 -0800 use return json for codonToPos and exonToPos diff --git src/hg/hgApi/hgApi.c src/hg/hgApi/hgApi.c index 42f5a33..8672362 100644 --- src/hg/hgApi/hgApi.c +++ src/hg/hgApi/hgApi.c @@ -203,47 +203,48 @@ dyStringPrintf(output,"Track %s not found",trackName); } else dyStringAppend(output,"No track variable found"); } else if(sameString(cmd, "codonToPos") || sameString(cmd, "exonToPos")) { char query[256]; struct sqlResult *sr; char **row; struct genePred *gp; char *name = cgiString("name"); char *table = cgiString("table"); int num = cgiInt("num"); struct sqlConnection *conn = hAllocConn(database); - safef(query, sizeof(query), "select name, chrom, strand, txStart, txEnd, cdsStart, cdsEnd, exonCount, exonStarts, exonEnds from %s where name = '%s'", table, name); + safef(query, sizeof(query), "select name, chrom, strand, txStart, txEnd, cdsStart, cdsEnd, exonCount, exonStarts, exonEnds from %s where name = '%s'", sqlEscapeString(table), sqlEscapeString(name)); sr = sqlGetResult(conn, query); if ((row = sqlNextRow(sr)) != NULL) { gp = genePredLoad(row); boolean found; int start, end; if(sameString(cmd, "codonToPos")) found = codonToPos(gp, num, &start, &end); else found = exonToPos(gp, num, &start, &end); if(found) - // change to using JSON. - dyStringPrintf(output, "%s:%d-%d", gp->chrom, start + 1, end); + dyStringPrintf(output, "{\"pos\": \"%s:%d-%d\"}", gp->chrom, start + 1, end); + else + dyStringPrintf(output, "{\"error\": \"%d is an invalid %s for this gene\"}", num, sameString(cmd, "codonToPos") ? "codon" : "exon"); } else - errAbort("Couldn't find name: %s", name); + dyStringPrintf(output, "{\"error\": \"Couldn't find item: %s\"}", name); sqlFreeResult(&sr); hFreeConn(&conn); } else { warn("unknwon cmd: %s",cmd); fail("Unsupported 'cmd' parameter"); } // It's debatable whether the type should be text/plain, text/javascript or application/javascript; I think // any of the types containing "javascript" don't work with IE6, so I'm using text/plain puts("Content-Type:text/javascript\n"); //puts("\n"); if(jsonp)