7ac9dba0abbb050561bb41ea08d98fa76a27d4cb
max
Thu Feb 13 03:03:31 2025 -0800
improvements to data schema page to make it easier for users to convert and download big data, refs #35223
diff --git src/hg/hgTables/schema.c src/hg/hgTables/schema.c
index eee29ba6393..f7a8c031077 100644
--- src/hg/hgTables/schema.c
+++ src/hg/hgTables/schema.c
@@ -178,41 +178,48 @@
if (sameString("bin", row[0]))
hPrintf("Indexing field to speed chromosome range queries.");
else
hPrintf(" ");
}
hPrintf("");
}
puts("");
if (example != NULL)
example = example->next;
}
hTableEnd();
sqlFreeResult(&sr);
}
-static void explainCoordSystem()
+void explainCoordSystem()
/* Our coord system is counter-intuitive to users. Warn them in advance to
* reduce the frequency with which they find this "bug" on their own and
* we have to explain it on the genome list. */
{
printf("
Note: all start coordinates in our database are 0-based, not \n"
"1-based. See explanation \n"
""
"here.", cgiAppendSForHttps());
}
+void printTableBrowserLink(struct trackDb *tdb, char* table)
+/* print link to table browser that opens this table */
+{
+printf("To download this table in various text formats, and intersect or correlate with other tables, use our "
+ "Table Browser.
",
+ database, tdb->grp, tdb->track, table);
+}
static void printSampleRows(int sampleCount, struct sqlConnection *conn, char *table)
/* Put up sample values. */
{
char query[256];
struct sqlResult *sr;
char **row;
int i, columnCount = 0;
int itemRgbCol = -1;
boolean showItemRgb = FALSE;
showItemRgb=bedItemRgb(findTdbForTable(database, curTrack, table, ctLookupName));
// should we expect itemRgb instead of "reserved"
/* Make table with header row containing name of fields. */
@@ -412,30 +419,31 @@
hPrintf("MariaDB table dump directory
", db);
char *bigDataUrl = trackDbSetting(tdb, "bigDataUrl");
if (sameString(table, "knownGene") && bigDataUrl!=NULL)
{
hPrintf("This track is available both in ASCII MariaDB table dump format and bigGenePred (bigBed) format.
");
printDownloadLink("bigBed", tdb, bigDataUrl);
}
}
describeFields(db, splitTable, asObj, conn);
if (tdbForConn && sameString(tdbForConn->track, table))
{
struct trackDb *childTdb = tdbForTrack(db, table, NULL);
addNotesForBbiTables(childTdb, conn);
+ printTableBrowserLink(tdbForConn, table);
}
jpList = joinerRelate(joiner, db, table, NULL);
/* sort and unique list */
slUniqify(&jpList, joinerPairCmpOnAandB, joinerPairFree);
if (jpList != NULL)
{
webNewSection("Connected Tables and Joining Fields");
for (jp = jpList; jp != NULL; jp = jp->next)
{
if (cartTrackDbIsAccessDenied(jp->b->database, jp->b->table))
continue;
struct joinerSet *js = jp->identifier;