65bab3c27c40f988621003b34a72bc873d124d22 hiram Tue May 21 16:20:34 2019 -0700 need to return data in order by chromStart to allow fetching all track data with maxItemLimit interferrence refs #18869 diff --git src/hg/hubApi/getData.c src/hg/hubApi/getData.c index 74eefe1..8ecc036 100644 --- src/hg/hubApi/getData.c +++ src/hg/hubApi/getData.c @@ -128,34 +128,30 @@ char *chrom, unsigned start, unsigned end) /* output the SQL table data for given track */ { /* for MySQL select statements, name for 'chrom' 'start' 'end' to use * for a table which has different names than that */ char chromName[256]; char startName[256]; char endName[256]; /* defaults, normal stuff */ safef(chromName, sizeof(chromName), "chrom"); safef(startName, sizeof(startName), "chromStart"); safef(endName, sizeof(endName), "chromEnd"); -/* XXX - need to add wiggle data table processing here to output the - * the data points instead of what it does now: the wig SQL table - */ - /* 'track' name in trackDb often refers to a SQL 'table' */ char *sqlTable = cloneString(track); /* might have a specific table defined instead of the track name */ char *tableName = trackDbSetting(tdb, "table"); if (isNotEmpty(tableName)) { freeMem(sqlTable); sqlTable = cloneString(tableName); jsonWriteString(jw, "sqlTable", sqlTable); } /* to be determined if this name is used or changes */ char *splitSqlTable = cloneString(sqlTable); /* this function knows how to deal with split chromosomes, the NULL @@ -233,50 +229,50 @@ jsonWriteString(jw, "chrom", chrom); struct chromInfo *ci = hGetChromInfo(db, chrom); jsonWriteNumber(jw, "start", (long long)0); jsonWriteNumber(jw, "end", (long long)ci->size); if (startsWith("wig", tdb->type)) { if (jsonOutputArrays || debug) wigColumnTypes(jw); jsonWriteListStart(jw, chrom); itemsReturned += wigTableDataOutput(jw, db, splitSqlTable, chrom, 0, ci->size, 0); jsonWriteListEnd(jw); return; /* DONE */ } else { - sqlDyStringPrintf(query, "select * from %s where %s='%s'", splitSqlTable, chromName, chrom); + sqlDyStringPrintf(query, "select * from %s where %s='%s' order by %s", splitSqlTable, chromName, chrom, startName); } } else /* fully specified chrom:start-end */ { jsonWriteString(jw, "chrom", chrom); if (startsWith("wig", tdb->type)) { if (jsonOutputArrays || debug) wigColumnTypes(jw); jsonWriteListStart(jw, chrom); itemsReturned += wigTableDataOutput(jw, db, splitSqlTable, chrom, start, end, 0); jsonWriteListEnd(jw); return; /* DONE */ } else { sqlDyStringPrintf(query, "select * from %s where ", splitSqlTable); hAddBinToQuery(start, end, query); - sqlDyStringPrintf(query, "%s='%s' AND %s > %u AND %s < %u", chromName, chrom, endName, start, startName, end); + sqlDyStringPrintf(query, "%s='%s' AND %s > %u AND %s < %u ORDER BY %s", chromName, chrom, endName, start, startName, end, startName); } } if (debug) jsonWriteString(jw, "select", query->string); /* continuing, could be wiggle output with no chrom specified */ char **columnNames = NULL; char **columnTypes = NULL; int *jsonTypes = NULL; struct asObject *as = asForTable(conn, splitSqlTable, tdb); struct asColumn *columnEl = as->columnList; int asColumnCount = slCount(columnEl); int columnCount = tableColumns(conn, jw, splitSqlTable, &columnNames, &columnTypes, &jsonTypes); if (jsonOutputArrays || debug)