3f4772e689c620fa0db33a2522e362cdcc216047 braney Sat Oct 17 07:24:30 2020 -0700 almost done with the clinvar submissions track! diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c index 181ee56..5da2e8a 100644 --- src/hg/hgc/hgc.c +++ src/hg/hgc/hgc.c @@ -1538,39 +1538,35 @@ for (count = 0; col != NULL && count < fieldCount; col = col->next) { struct slPair *field; AllocVar(field); char *fieldName = col->name; char *fieldVal = row[count]; field->name = fieldName; field->val = fieldVal; slAddHead(&fields, field); count++; } slReverse(fields); return fields; } -int extraFieldsPrint(struct trackDb *tdb,struct sqlResult *sr,char **fields,int fieldCount) +int extraFieldsPrintAs(struct trackDb *tdb,struct sqlResult *sr,char **fields,int fieldCount, struct asObject *as) // Any extra bed or bigBed fields (defined in as and occurring after N in bed N + types. // sr may be null for bigBeds. // Returns number of extra fields actually printed. { -struct asObject *as = asForDb(tdb, database); -if (as == NULL) - return 0; - // We are trying to print extra fields so we need to figure out how many fields to skip int start = extraFieldsStart(tdb, fieldCount, as); struct asColumn *col = as->columnList; char *urlsStr = trackDbSettingClosestToHomeOrDefault(tdb, "urls", NULL); struct hash* fieldToUrl = hashFromString(urlsStr); boolean skipEmptyFields = trackDbSettingOn(tdb, "skipEmptyFields"); // make list of fields to skip char *skipFieldsStr = trackDbSetting(tdb, "skipFields"); struct slName *skipIds = NULL; if (skipFieldsStr) skipIds = slNameListFromComma(skipFieldsStr); // make list of fields that are separated from other fields @@ -1628,42 +1624,57 @@ printf("<tr><td>%s</td>", entry); // bold style now in HGStyle.css if (col->isList || col->isArray || col->lowType->stringy || asTypesIsInt(col->lowType->type)) printIdOrLinks(col, fieldToUrl, tdb, fields[ix]); else if (asTypesIsFloating(col->lowType->type)) { double valDouble = strtod(fields[ix],NULL); if (errno == 0 && valDouble != 0) printf("<td>%g</td></tr>\n", valDouble); else printf("<td>%s</td></tr>\n", fields[ix]); // decided not to print error } else printf("<td>%s</td></tr>\n", fields[ix]); } -asObjectFree(&as); if (skipIds) slFreeList(skipIds); if (sepFields) slFreeList(sepFields); if (count > 0) printf("</table>\n"); return count; } +int extraFieldsPrint(struct trackDb *tdb,struct sqlResult *sr,char **fields,int fieldCount) +// Any extra bed or bigBed fields (defined in as and occurring after N in bed N + types. +// sr may be null for bigBeds. +// Returns number of extra fields actually printed. +{ +struct asObject *as = asForDb(tdb, database); +if (as == NULL) + return 0; + +int ret = extraFieldsPrintAs(tdb, sr, fields,fieldCount, as); +//asObjectFree(&as); + +return ret; +} + + void genericBedClick(struct sqlConnection *conn, struct trackDb *tdb, char *item, int start, int bedSize) /* Handle click in generic BED track. */ { char table[HDB_MAX_TABLE_STRING]; boolean hasBin; struct bed *bed; char query[512]; struct sqlResult *sr; char **row; boolean firstTime = TRUE; if (!hFindSplitTable(database, seqName, tdb->table, table, sizeof table, &hasBin)) errAbort("genericBedClick track %s not found", tdb->table); if (bedSize <= 3)