26501d3ac1d4eea1d3c539dbbd13e15e46737759 hiram Tue Sep 24 11:57:57 2019 -0700 correctly recognize the "tableBrowser off" entry in trackDb for protected tables refs #24208 diff --git src/hg/hubApi/list.c src/hg/hubApi/list.c index 706f7b1..f79a9ae 100644 --- src/hg/hubApi/list.c +++ src/hg/hubApi/list.c @@ -300,52 +300,52 @@ fprintf(stderr, "%s", errCatch->message->string); errCatchFree(&errCatch); return itemCount; } static void outputTrackDbVars(struct jsonWrite *jw, struct trackDb *tdb, long long itemCount) /* JSON output the fundamental trackDb variables */ { if (NULL == tdb) /* might not be any trackDb */ return; boolean isContainer = tdbIsComposite(tdb) || tdbIsCompositeView(tdb); boolean protectedData = FALSE; -if (trackDbSetting(tdb, "tableBrowser")) - protectedData = TRUE; +protectedData = protectedTrack(tdb); jsonWriteString(jw, "shortLabel", tdb->shortLabel); jsonWriteString(jw, "type", tdb->type); jsonWriteString(jw, "longLabel", tdb->longLabel); if (! isContainer) /* containers do not have items to count */ jsonWriteNumber(jw, "itemCount", itemCount); if (tdb->parent) { jsonWriteString(jw, "parent", tdb->parent->track); if (tdb->parent->parent) jsonWriteString(jw, "parentParent", tdb->parent->parent->track); } if (tdb->settingsHash) { struct hashEl *hel; struct hashCookie hc = hashFirst(tdb->settingsHash); while ((hel = hashNext(&hc)) != NULL) { if (sameWord("track", hel->name)) continue; // already output in header - if (sameWord("tableBrowser", hel->name)) + if (sameWord("tableBrowser", hel->name) + && startsWithWord("off", (char*)hel->val)) jsonWriteBoolean(jw, "protectedData", TRUE); else if (isEmpty((char *)hel->val)) jsonWriteString(jw, hel->name, "empty"); else if (protectedData && sameWord(hel->name, "bigDataUrl")) jsonWriteString(jw, hel->name, "protectedData"); else jsonWriteString(jw, hel->name, (char *)hel->val); } } } static void hubSchemaJsonOutput(FILE *f, char *hubUrl, char *genome, char *track) /* for given hubUrl and track, output the schema for the hub track */ { struct trackHub *hub = errCatchTrackHubOpen(hubUrl); @@ -489,55 +489,55 @@ jsonWriteNumber(jw, "dataTimeStamp", (long long)dataTimeStamp); freeMem(dataTime); char **columnNames = NULL; char **columnTypes = NULL; int *jsonTypes = NULL; int columnCount = 0; struct asObject *as = NULL; struct asColumn *columnEl = NULL; int asColumnCount = 0; long long itemCount = 0; if (bbi) { /* do not show itemCount for protected data */ - if (! trackDbSetting(thisTrack, "tableBrowser")) + if (! protectedTrack(thisTrack)) { char *indexFileOrUrl = hReplaceGbdb(trackDbSetting(thisTrack, "bigDataIndex")); itemCount = bbiItemCount(bigDataUrl, thisTrack->type, indexFileOrUrl); } if (startsWith("bigWig", thisTrack->type)) { wigColumnTypes(jw); } else { as = bigBedAsOrDefault(bbi); struct sqlFieldType *fiList = sqlFieldTypesFromAs(as); bigColumnTypes(jw, fiList, as); } } else { columnCount = tableColumns(conn, splitTableName, &columnNames, &columnTypes, &jsonTypes); as = asForTable(conn, splitTableName, thisTrack); columnEl = as->columnList; asColumnCount = slCount(columnEl); /* do not show counts for protected data */ - if (! trackDbSetting(thisTrack, "tableBrowser")) + if (! protectedTrack(thisTrack)) { char query[2048]; sqlSafef(query, sizeof(query), "select count(*) from %s", splitTableName); if (hti && hti->isSplit) /* punting on split table item count */ itemCount = 0; else { itemCount = sqlQuickNum(conn, query); } } hFreeConn(&conn); if (hti && (hti->isSplit || debug)) jsonWriteBoolean(jw, "splitTable", hti->isSplit); @@ -673,31 +673,31 @@ char **row; while ((row = sqlNextRow(sr)) != NULL) { itemCount += bbiItemCount(hReplaceGbdb(row[0]), type, NULL); } sqlFreeResult(&sr); return itemCount; } static long long dataItemCount(char *db, struct trackDb *tdb) /* determine how many items are in this data set */ { long long itemCount = 0; if (trackHasNoData(tdb)) /* container 'tracks' have no data items */ return itemCount; -if (trackDbSetting(tdb, "tableBrowser")) /* private data */ +if (protectedTrack(tdb)) /* private data */ return itemCount; if (sameWord("downloadsOnly", tdb->type)) return itemCount; char *bigDataUrl = hReplaceGbdb(trackDbSetting(tdb, "bigDataUrl")); if (isNotEmpty(bigDataUrl)) { char *indexFileOrUrl = hReplaceGbdb(trackDbSetting(tdb, "bigDataIndex")); itemCount = bbiItemCount(bigDataUrl, tdb->type, indexFileOrUrl); } else { /* prepare for getting table row count, find table name */ /* the trackDb might have a specific table defined */ char *tableName = trackDbSetting(tdb, "table"); @@ -738,31 +738,31 @@ } /* static long long dataItemCount(char *db, struct trackDb *tdb) */ static void recursiveTrackList(struct jsonWrite *jw, struct trackDb *tdb, char *db) /* output trackDb tags only for real tracks, not containers, * recursive when subtracks exist */ { boolean isContainer = tdbIsComposite(tdb) || tdbIsCompositeView(tdb); /* do *NOT* print containers when 'trackLeavesOnly' requested */ if (! (trackLeavesOnly && isContainer) ) { long long itemCount = 0; /* do not show counts for protected data or continers (== no items)*/ - if (! (isContainer || trackDbSetting(tdb, "tableBrowser"))) + if (! (isContainer || protectedTrack(tdb))) itemCount = dataItemCount(db, tdb); jsonWriteObjectStart(jw, tdb->track); if (tdbIsComposite(tdb)) jsonWriteString(jw, "compositeContainer", "TRUE"); if (tdbIsCompositeView(tdb)) jsonWriteString(jw, "compositeViewContainer", "TRUE"); outputTrackDbVars(jw, tdb, itemCount); if (tdb->subtracks) { struct trackDb *el = NULL; for (el = tdb->subtracks; el != NULL; el = el->next ) recursiveTrackList(jw, el, db); }