985e22c1c56d7ba2909a96c1a66d8c4cff894340 braney Fri May 12 15:50:27 2017 -0700 fix a bug in outputting large composites diff --git src/hg/hgComposite/hgComposite.c src/hg/hgComposite/hgComposite.c index 269e6f3..8b14828 100644 --- src/hg/hgComposite/hgComposite.c +++ src/hg/hgComposite/hgComposite.c @@ -187,54 +187,53 @@ { if (composite == NULL) errAbort("track not in composite"); AllocVar(track); track->name = tdb->track; track->shortLabel = tdb->shortLabel; track->longLabel = tdb->shortLabel; slAddHead(&composite->trackList, track); } } } return compositeList; } -static char *getSqlBigWig(char *db, struct trackDb *tdb) +static char *getSqlBigWig(struct sqlConnection *conn, char *db, struct trackDb *tdb) { -struct sqlConnection *conn = hAllocConn(db); - char buffer[4096]; safef(buffer, sizeof buffer, "NOSQLINJ select fileName from %s", tdb->table); return sqlQuickString(conn, buffer); } static int snakePalette2[] = { 0x1f77b4, 0xaec7e8, 0xff7f0e, 0xffbb78, 0x2ca02c, 0x98df8a, 0xd62728, 0xff9896, 0x9467bd, 0xc5b0d5, 0x8c564b, 0xc49c94, 0xe377c2, 0xf7b6d2, 0x7f7f7f, 0xc7c7c7, 0xbcbd22, 0xdbdb8d, 0x17becf, 0x9edae5 }; -void outTdb(char *db, FILE *f, char *name, struct trackDb *tdb, char *parent, unsigned int color) +void outTdb(struct sqlConnection *conn, char *db, FILE *f, char *name, struct trackDb *tdb, char *parent, unsigned int color) { char *dataUrl = NULL; char *bigDataUrl = trackDbSetting(tdb, "bigDataUrl"); + if (bigDataUrl == NULL) { if (startsWith("bigWig", tdb->type)) - dataUrl = getSqlBigWig(db, tdb); + dataUrl = getSqlBigWig(conn, db, tdb); } struct hashCookie cookie = hashFirst(tdb->settingsHash); struct hashEl *hel; fprintf(f, "\ttrack %s\n", name); while ((hel = hashNext(&cookie)) != NULL) { if (differentString(hel->name, "parent") && differentString(hel->name, "polished")&& differentString(hel->name, "color")&& differentString(hel->name, "track")) fprintf(f, "\t%s %s\n", hel->name, (char *)hel->val); } if (bigDataUrl == NULL) { if (dataUrl != NULL) fprintf(f, "\tbigDataUrl %s\n", dataUrl); } fprintf(f, "\tparent %s\n",parent); @@ -293,51 +292,49 @@ if (hubName == NULL) { trashDirDateFile(&hubTn, "hgComposite", "hub", ".txt"); hubName = cloneString(hubTn.forCgi); cartSetString(cart, buffer, hubName); FILE *f = mustOpen(hubName, "a"); outHubHeader(f, db, hubName); fclose(f); cartSetString(cart, "hubUrl", hubName); cartSetString(cart, hgHubConnectRemakeTrackHub, hubName); } return hubName; } -//static void outputCompositeHub(char *db, char *hubName, struct trackDb *fullTrackList, struct composite *compositeList, struct hash *nameHash) static void outputCompositeHub(char *db, char *hubName, struct composite *compositeList, struct hash *nameHash) { -// Do we already have a hub? chmod(hubName, 0666); FILE *f = mustOpen(hubName, "w"); outHubHeader(f, db, hubName); int useColor = 0; struct composite *composite; +struct sqlConnection *conn = hAllocConn(db); for(composite = compositeList; composite; composite = composite->next) { outComposite(f, composite); struct trackDb *tdb; struct track *track; for (track = composite->trackList; track; track = track->next) { tdb = hashMustFindVal(nameHash, track->name); - //tdb = findTrack(track->name, fullTrackList); - outTdb(db, f, track->name,tdb, composite->name, snakePalette2[useColor]); + outTdb(conn, db, f, track->name,tdb, composite->name, snakePalette2[useColor]); useColor++; if (useColor == (sizeof snakePalette2 / sizeof(int))) useColor = 0; } } fclose(f); } void topLabelSpansStart(char *label) { printf("<span style='display: inline-block; padding-right: 5px;'>" "<span style='display: block;'>%s</span>\n" "<span style='display: block; padding-bottom: 5px;'>\n", label); }