7a5ae9c2c1d5519793a4bdd99cca3a911c14b68e angie Fri Nov 18 16:36:51 2016 -0800 Added support for split tables to annoStreamDb since ChrisV found it was missing which broke some hgIntegrator queries in hg18 and older dbs. refs #18397 diff --git src/hg/lib/hAnno.c src/hg/lib/hAnno.c index 847d03f..ca724be 100644 --- src/hg/lib/hAnno.c +++ src/hg/lib/hAnno.c @@ -96,38 +96,42 @@ // hg19.wgEncodeOpenChromSynthGm12878Pk.pValue has sql type "float unsigned", // and I'd rather pretend it's just a float than work unsigned floats into autoSql. if (sameString(sqlType, "float unsigned")) sqlType = "float"; char *asType = asTypeNameFromSqlType(sqlType); if (asType == NULL) errAbort("No asTypeInfo for sql type '%s'!", field->type); dyStringPrintf(dy, " %s %s;\t\"\"\n", asType, field->field); } dyStringAppend(dy, " )\n"); return asParseText(dy->string); } struct asObject *hAnnoGetAutoSqlForDbTable(char *db, char *table, struct trackDb *tdb, boolean skipBin) -/* Get autoSql for db.dbTable from tdb and/or db.tableDescriptions; +/* Get autoSql for db.table from optional tdb and/or db.tableDescriptions; * if it doesn't match columns, make one up from db.table sql fields. * Some subtleties are lost in translation from .as to .sql, that's why * we try tdb & db.tableDescriptions first. But ultimately we need to return * an asObj whose columns match all fields of the table. */ { struct sqlConnection *conn = hAllocConn(db); -struct sqlFieldInfo *fieldList = sqlFieldInfoGet(conn, table); +char maybeSplitTable[HDB_MAX_TABLE_STRING]; +if (!hFindSplitTable(db, NULL, table, maybeSplitTable, NULL)) + errAbort("hAnnoGetAutoSqlForDbTable: can't find table (or split table) for '%s.%s'", + db, table); +struct sqlFieldInfo *fieldList = sqlFieldInfoGet(conn, maybeSplitTable); struct asObject *asObj = NULL; if (tdb != NULL) asObj = asForTdb(conn, tdb); if (asObj == NULL) asObj = asFromTableDescriptions(conn, table); hFreeConn(&conn); if (columnsMatch(asObj, fieldList)) return asObj; else { // Special case for pgSnp, which includes its bin column in autoSql... struct asObject *pgSnpAsO = pgSnpAsObj(); if (columnsMatch(pgSnpAsO, fieldList)) return pgSnpAsO; return asObjectFromFields(table, fieldList, skipBin); @@ -387,24 +391,20 @@ { struct asObject *asObj = getAutoSqlForType(db, chrom, tdb); if (!asObj && !isHubTrack(tdb->track)) { // If none of the above, it must be a database table; deduce autoSql from sql fields. char *dataDb = db, *dbTable = tdb->table; if (isCustomTrack(tdb->track)) { dbTable = trackDbSetting(tdb, "dbTableName"); if (dbTable) dataDb = CUSTOM_TRASH; else return NULL; } - char maybeSplitTable[HDB_MAX_TABLE_STRING]; - if (!hFindSplitTable(dataDb, chrom, dbTable, maybeSplitTable, NULL)) - errAbort("hAnnoGetAutoSqlForTdb: can't find table (or split table) for '%s.%s'", - dataDb, dbTable); - asObj = hAnnoGetAutoSqlForDbTable(dataDb, maybeSplitTable, tdb, TRUE); + asObj = hAnnoGetAutoSqlForDbTable(dataDb, dbTable, tdb, TRUE); } return asObj; }