8a0946dd6870f10cde056ba243f1fb4ec1fd16b4 angie Thu Feb 27 11:58:33 2014 -0800 Adding support for plain VCF custom tracks (as opposed to VCF+tabix),since users seem to want to upload VCF, and as long as the file is not too big it will work OK. This means adding a new track type vcf (as opposed to vcfTabix) and supporting it in hgTracks, hgTrackUi, hgc, hgTables and hgVai. (and others I've forgotten?) refs #12416 diff --git src/hg/lib/vcfUi.c src/hg/lib/vcfUi.c index e0c6f35..d5f7e88 100644 --- src/hg/lib/vcfUi.c +++ src/hg/lib/vcfUi.c @@ -118,47 +118,59 @@ } puts("</TABLE>"); } } //TODO: share this code w/hgTracks, hgc in hg/lib/vcfFile.c static struct vcfFile *vcfHopefullyOpenHeader(struct cart *cart, struct trackDb *tdb) /* Defend against network errors and return the vcfFile object with header data, or NULL. */ { #if (defined USE_TABIX && defined KNETFILE_HOOKS) knetUdcInstall(); if (udcCacheTimeout() < 300) udcSetCacheTimeout(300); #endif//def USE_TABIX && KNETFILE_HOOKS char *db = cartString(cart, "db"); -struct sqlConnection *conn = hAllocConnTrack(db, tdb); +char *table = tdb->table; +char *dbTableName = trackDbSetting(tdb, "dbTableName"); +struct sqlConnection *conn; +if (isCustomTrack(tdb->track) && isNotEmpty(dbTableName)) + { + conn = hAllocConn(CUSTOM_TRASH); + table = dbTableName; + } +else + conn = hAllocConnTrack(db, tdb); char *fileOrUrl = NULL; char *chrom = cartOptionalString(cart, "c"); if (chrom != NULL) - fileOrUrl = bbiNameFromSettingOrTableChrom(tdb, conn, tdb->table, chrom); + fileOrUrl = bbiNameFromSettingOrTableChrom(tdb, conn, table, chrom); if (fileOrUrl == NULL) - fileOrUrl = bbiNameFromSettingOrTableChrom(tdb, conn, tdb->table, hDefaultChrom(db)); + fileOrUrl = bbiNameFromSettingOrTableChrom(tdb, conn, table, hDefaultChrom(db)); hFreeConn(&conn); if (fileOrUrl == NULL) return NULL; int vcfMaxErr = 100; struct vcfFile *vcff = NULL; /* protect against temporary network error */ struct errCatch *errCatch = errCatchNew(); if (errCatchStart(errCatch)) { + if (startsWithWord("vcfTabix", tdb->type)) vcff = vcfTabixFileMayOpen(fileOrUrl, NULL, 0, 0, vcfMaxErr, -1); + else + vcff = vcfFileMayOpen(fileOrUrl, NULL, 0, 0, vcfMaxErr, -1, FALSE); } errCatchEnd(errCatch); if (errCatch->gotError) { if (isNotEmpty(errCatch->message->string)) warn("unable to open %s: %s", fileOrUrl, errCatch->message->string); } errCatchFree(&errCatch); return vcff; } static void vcfCfgHapClusterEnable(struct cart *cart, struct trackDb *tdb, char *name, boolean parentLevel) /* Let the user enable/disable haplotype sorting display. */ {