2f27aa530e1c46d8b8696ea46d00e34764c5d027 kent Tue Jun 16 14:44:34 2015 -0700 Fixing crash on fetching ctgPos2 features. diff --git src/hg/das/das.c src/hg/das/das.c index 2865029..68f3102 100644 --- src/hg/das/das.c +++ src/hg/das/das.c @@ -832,46 +832,57 @@ printf(" %d\n", end); printf(" %s\n", score); printf(" %c\n", dasStrand(strand[0])); printf(" -\n"); printf(" \n", name, chrom, start); printf(" Link to UCSC Browser\n", chrom, start, end, database); printf(" \n"); printf("\n"); } static void dasOutBedSegment(struct sqlResult *sr, int rowOffset, char *table, struct tableDef *td, struct trackTable *tt) /* output BEDs and BED like tables resulting from query */ { char **row; + +/* Get offset of standard bed fields. For compatibility revert to standard positions if not + * found */ +int chromIx = sqlFieldColumn(sr, "chrom"); +if (chromIx < 0) chromIx = rowOffset + 0; +int chromStartIx = sqlFieldColumn(sr, "chromStart"); +if (chromStartIx < 0) chromStartIx = rowOffset + 1; +int chromEndIx = sqlFieldColumn(sr, "chromEnd"); +if (chromEndIx < 0) chromEndIx = rowOffset + 2; + + int scoreIx = sqlFieldColumn(sr, "score"); int strandIx = sqlFieldColumn(sr, "strand"); int nameIx = sqlFieldColumn(sr, "name"); if (scoreIx == -1) scoreIx = sqlFieldColumn(sr, "gcPpt"); if (scoreIx == -1) scoreIx = sqlFieldColumn(sr, "dataValue"); // bedGraph while ((row = sqlNextRow(sr)) != NULL) { char *strand = (strandIx >= 0 ? row[strandIx] : "0"); char *score = (scoreIx >= 0 ? row[scoreIx] : "-"); char *name = (nameIx >= 0 ? row[nameIx] : td->name); - dasOutBed(row[0+rowOffset], - sqlUnsigned(row[1+rowOffset]), - sqlUnsigned(row[2+rowOffset]), + dasOutBed(row[chromIx], + sqlUnsigned(row[chromStartIx]), + sqlUnsigned(row[chromEndIx]), name, strand, score, td, tt); } } static void writeSegmentFeaturesTable(struct segment *segment, struct tableDef *td, struct hash *trackHash, struct sqlConnection *conn) /* write segments features for a table */ { int rowOffset; boolean hasBin; char table[HDB_MAX_TABLE_STRING]; verbose(2, "track %s\n", td->name);