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. */
 {