0d892a1bae5000aa4b300d28da5d6c5b962ea223 hiram Sun Apr 28 13:54:19 2019 -0700 eliminating the db= argument everywhere, only need genome= refs #18869 diff --git src/hg/hubApi/getData.c src/hg/hubApi/getData.c index fd165ca..cbd5976 100644 --- src/hg/hubApi/getData.c +++ src/hg/hubApi/getData.c @@ -8,31 +8,31 @@ { struct wiggleDataStream *wds = wiggleDataStreamNew(); wds->setMaxOutput(wds, maxItemsOutput); wds->setChromConstraint(wds, chrom); wds->setPositionConstraint(wds, start, end); int operations = wigFetchAscii; (void) wds->getData(wds, database, table, operations); struct wigAsciiData *el; unsigned itemCount = 0; for (el = wds->ascii; (itemCount + itemsDone) < maxItemsOutput && el; el = el->next) { unsigned span = el->span; unsigned count = el->count; unsigned i = 0; struct asciiDatum *data = el->data; - for ( ; ((itemCount + itemsDone) < maxItemsOutput) && i < count; ++i,++data) + for ( ; (i < count) && ((itemCount + itemsDone) < maxItemsOutput); i++,data++) { int s = data->chromStart; int e = s + span; double val = data->value; if (jsonOutputArrays) { jsonWriteListStart(jw, NULL); jsonWriteNumber(jw, NULL, (long long)s); jsonWriteNumber(jw, NULL, (long long)e); jsonWriteDouble(jw, NULL, val); jsonWriteListEnd(jw); } else { jsonWriteObjectStart(jw, NULL); @@ -312,31 +312,31 @@ } jsonWriteListEnd(jw); } } unsigned itemsDone = 0; /* empty chrom, needs to run through all chrom names */ if (isEmpty(chrom)) { jsonWriteObjectStart(jw, track); /* begin track data output */ char fullTableName[256]; struct chromInfo *ciList = createChromInfoList(NULL, db); slSort(ciList, chromInfoCmp); struct chromInfo *ci = ciList; - for ( ; itemsDone < maxItemsOutput && ci != NULL; ci = ci->next ) + for ( ; ci && itemsDone < maxItemsOutput; ci = ci->next ) { jsonWriteListStart(jw, ci->chrom); /* starting a chrom output */ freeDyString(&query); query = dyStringNew(64); if (hti && hti->isSplit) /* when split, make up split chr name */ { safef(fullTableName, sizeof(fullTableName), "%s_%s", ci->chrom, hti->rootName); sqlDyStringPrintf(query, "select * from %s", fullTableName); } else sqlDyStringPrintf(query, "select * from %s", splitSqlTable); if (startsWith("wig", tdb->type)) itemsDone += wigTableDataOutput(jw, db, splitSqlTable, chrom, start, end, itemsDone); else @@ -344,57 +344,37 @@ columnCount, columnNames, jsonTypes, itemsDone); jsonWriteListEnd(jw); /* chrom data output list end */ } jsonWriteObjectEnd(jw); /* end track data output */ } else { /* a single chrom has been requested, run it */ jsonWriteListStart(jw, track); /* data output list starting */ itemsDone += sqlQueryJsonOutput(conn, jw, query->string, columnCount, columnNames, jsonTypes, itemsDone); jsonWriteListEnd(jw); /* data output list end */ } freeDyString(&query); } /* static void tableDataOutput(char *db, struct trackDb *tdb, ... ) */ -static boolean typedBig9Plus(struct trackDb *tdb) -/* check if track type is 'bed 9+ ...' to determine itemRgb for big* types */ -{ -if (isNotEmpty(tdb->type) && (allowedBigBedType(tdb->type))) - { - char *words[8]; - int wordCount; - wordCount = chopLine(cloneString(tdb->type), words); - if ( (wordCount > 1) && startsWith("bigBed", words[0])) - { - if (isAllDigits(words[1])) - if (8 < sqlUnsigned(words[1])) - return TRUE; - } - else - return TRUE; /* something other than bigBed */ - } -return FALSE; -} - static unsigned bbiDataOutput(struct jsonWrite *jw, struct bbiFile *bbi, char *chrom, unsigned start, unsigned end, struct sqlFieldType *fiList, struct trackDb *tdb, unsigned itemsDone) /* output bed data for one chrom in the given bbi file */ { char *itemRgb = trackDbSetting(tdb, "itemRgb"); -if (typedBig9Plus(tdb)) +if (bbi->definedFieldCount > 8) itemRgb = "on"; int *jsonTypes = NULL; int columnCount = slCount(fiList); AllocArray(jsonTypes, columnCount); int i = 0; struct sqlFieldType *fi; for ( fi = fiList; fi; fi = fi->next) { if (itemRgb) { if (8 == i && sameWord("on", itemRgb)) jsonTypes[i++] = JSON_STRING; else jsonTypes[i++] = autoSqlToJsonType(fi->type); } @@ -580,31 +560,31 @@ jsonWriteString(jw, "bigDataUrl", bigDataUrl); jsonWriteString(jw, "trackType", thisTrack->type); if (allowedBigBedType(thisTrack->type)) { struct asObject *as = bigBedAsOrDefault(bbi); struct sqlFieldType *fiList = sqlFieldTypesFromAs(as); if (jsonOutputArrays || debug) bigColumnTypes(jw, fiList, as); jsonWriteListStart(jw, track); unsigned itemsDone = 0; if (isEmpty(chrom)) { struct bbiChromInfo *bci; - for (bci = chromList; (itemsDone < maxItemsOutput) && bci; bci = bci->next) + for (bci = chromList; bci && (itemsDone < maxItemsOutput); bci = bci->next) { itemsDone += bbiDataOutput(jw, bbi, bci->name, 0, bci->size, fiList, thisTrack, itemsDone); } } else itemsDone += bbiDataOutput(jw, bbi, chrom, uStart, uEnd, fiList, thisTrack, itemsDone); jsonWriteListEnd(jw); } else if (startsWith("bigWig", thisTrack->type)) { if (jsonOutputArrays || debug) wigColumnTypes(jw); jsonWriteObjectStart(jw, track); @@ -686,31 +666,31 @@ char fullTableName[256]; safef(fullTableName, sizeof(fullTableName), "%s_%s", defaultChrom, hti->rootName); splitSqlTable = cloneString(fullTableName); } } if (! hTableOrSplitExists(db, sqlTable)) { if (! bigDataUrl) apiErrAbort(err400, err400Msg, "can not find specified 'track=%s' for endpoint: /getData/track?genome=%s;track=%s", track, db, track); else tableTrack = FALSE; } struct jsonWrite *jw = apiStartOutput(); -jsonWriteString(jw, "db", db); +jsonWriteString(jw, "genome", db); if (tableTrack) { char *dataTime = NULL; if (hti && hti->isSplit) dataTime = sqlTableUpdate(conn, splitSqlTable); else dataTime = sqlTableUpdate(conn, sqlTable); time_t dataTimeStamp = sqlDateToUnixTime(dataTime); replaceChar(dataTime, ' ', 'T'); /* ISO 8601 */ jsonWriteString(jw, "dataTime", dataTime); jsonWriteNumber(jw, "dataTimeStamp", (long long)dataTimeStamp); if (differentStringNullOk(sqlTable,track)) jsonWriteString(jw, "sqlTable", sqlTable); } jsonWriteString(jw, "trackType", thisTrack->type); @@ -763,31 +743,31 @@ jsonWriteNumber(jw, "end", uEnd); } if (allowedBigBedType(thisTrack->type)) { struct asObject *as = bigBedAsOrDefault(bbi); struct sqlFieldType *fiList = sqlFieldTypesFromAs(as); if (jsonOutputArrays || debug) bigColumnTypes(jw, fiList, as); jsonWriteListStart(jw, track); unsigned itemsDone = 0; if (isEmpty(chrom)) { struct bbiChromInfo *bci; - for (bci = chromList; (itemsDone < maxItemsOutput) && bci; bci = bci->next) + for (bci = chromList; bci && (itemsDone < maxItemsOutput); bci = bci->next) { itemsDone += bbiDataOutput(jw, bbi, bci->name, 0, bci->size, fiList, thisTrack, itemsDone); } } else itemsDone += bbiDataOutput(jw, bbi, chrom, uStart, uEnd, fiList, thisTrack, itemsDone); jsonWriteListEnd(jw); } else if (startsWith("bigWig", thisTrack->type)) { if (jsonOutputArrays || debug) wigColumnTypes(jw); @@ -830,31 +810,31 @@ if ( (sqlSigned(end) - sqlSigned(start)) > MAX_DNA_LENGTH) apiErrAbort(err400, err400Msg, "DNA sequence request %d too large, limit: %u for endpoint '/getData/sequence?genome=%s;chrom=%s;start=%s;end=%s'", sqlSigned(end) - sqlSigned(start), MAX_DNA_LENGTH, db, chrom, start, end); else seq = hChromSeqMixed(db, chrom, sqlSigned(start), sqlSigned(end)); long endTime = clock1000(); long long et = endTime - timeStart; if (NULL == seq) apiErrAbort(err400, err400Msg, "can not find sequence for chrom=%s for endpoint '/getData/sequence?genome=%s;chrom=%s'", chrom, db, chrom); struct jsonWrite *jw = apiStartOutput(); if (isNotEmpty(hubUrl)) jsonWriteString(jw, "hubUrl", hubUrl); if (measureTiming) jsonWriteNumber(jw, "dnaFetchTimeMs", et); - jsonWriteString(jw, "db", db); + jsonWriteString(jw, "genome", db); jsonWriteString(jw, "chrom", chrom); if (isEmpty(start) || isEmpty(end)) { jsonWriteNumber(jw, "start", (long long)0); jsonWriteNumber(jw, "end", (long long)ci->size); } else { jsonWriteNumber(jw, "start", (long long)sqlSigned(start)); jsonWriteNumber(jw, "end", (long long)sqlSigned(end)); } timeStart = clock1000(); jsonWriteString(jw, "dna", seq->dna); endTime = clock1000(); et = endTime - timeStart;