a1dcdda03cad5b931d17066789091a64f8dceca6
max
  Tue Nov 22 16:05:21 2016 -0800
adding bigDataIndex support to the table browser, refs #18420

diff --git src/hg/hgTables/bam.c src/hg/hgTables/bam.c
index 44199fd..44d6322 100644
--- src/hg/hgTables/bam.c
+++ src/hg/hgTables/bam.c
@@ -162,31 +162,33 @@
 	fprintf(f, "# Filtering on %d columns\n", slCount(filter->columnList));
 	}
     }
 
 /* Loop through outputting each region */
 struct region *region, *regionList = getRegions();
 
 struct trackDb *tdb = findTdbForTable(db, curTrack, table, ctLookupName);
 int maxOut = bigFileMaxOutput();
 char *cacheDir =  cfgOption("cramRef");
 char *refUrl = trackDbSetting(tdb, "refUrl");
 for (region = regionList; region != NULL && (maxOut > 0); region = region->next)
     {
     struct lm *lm = lmInit(0);
     char *fileName = bamFileName(table, conn, region->chrom);
-    struct samAlignment *sam, *samList = bamFetchSamAlignmentPlus(fileName, region->chrom,
+    char *baiUrl = bigDataIndexFromCtOrHub(table, conn);
+
+    struct samAlignment *sam, *samList = bamAndIndexFetchSamAlignmentPlus(fileName, baiUrl, region->chrom,
     	region->start, region->end, lm, refUrl, cacheDir);
     char *row[SAMALIGNMENT_NUM_COLS];
     char numBuf[BAM_NUM_BUF_SIZE];
     for (sam = samList; sam != NULL && (maxOut > 0); sam = sam->next)
         {
 	samAlignmentToRow(sam, numBuf, row);
 	if (asFilterOnRow(filter, row))
 	    {
 	    /* if we're looking for identifiers, check if this matches */
 	    if ((idHash != NULL)&&(hashLookup(idHash, row[idFieldNum]) == NULL))
 		continue;
 
 	    int i;
 	    fprintf(f, "%s", row[columnArray[0]]);
 	    for (i=1; i<fieldCount; ++i)
@@ -303,30 +305,31 @@
     if (maxOut <= 0)
 	{
 	errAbort("Reached output limit of %d data values, please make region smaller,\n"
 	     "\tor set a higher output line limit with the filter settings.", bigFileMaxOutput());
 	}
     }
 slReverse(&bedList);
 return bedList;
 }
 
 struct slName *randomBamIds(char *table, struct sqlConnection *conn, int count)
 /* Return some semi-random qName based IDs from a BAM file. */
 {
 /* Read 10000 items from bam file,  or if they ask for a big list, then 4x what they ask for. */
 char *fileName = bamFileName(table, conn, NULL);
+
 samfile_t *fh = bamOpen(fileName, NULL);
 struct lm *lm = lmInit(0);
 int orderedCount = count * 4;
 if (orderedCount < 10000)
     orderedCount = 10000;
 bam_hdr_t *header = sam_hdr_read(fh);
 if (fh->format.format == cram) 
     {
     char *cacheDir =  cfgOption("cramRef");
     struct trackDb *tdb = findTdbForTable(database, curTrack, table, ctLookupName);
     char *refUrl = trackDbSetting(tdb, "refUrl");
     cram_set_cache_url(fh, cacheDir, refUrl);  
     }
 struct samAlignment *sam, *samList = bamReadNextSamAlignments(fh, header, orderedCount, lm);