e03583f4f127daf45c58bb5e8c39ce545df597f8 max Fri Apr 4 03:26:52 2014 -0700 when using a failover connection but no table cache, merge the tablelists from both the failover connection and the main connection. Otherwise only local tracks show up. for this, extracting old code into a new function and calling it twice. (NB: This code change is very hard to see in the diff algorithm we use in the git reports. The "patience" algorithm is a lot better: git diff --patience jksql.c) diff --git src/hg/lib/jksql.c src/hg/lib/jksql.c index 8910bb6..b16f317 100644 --- src/hg/lib/jksql.c +++ src/hg/lib/jksql.c @@ -728,58 +728,71 @@ sqlSafef(query, sizeof(query), "SELECT DISTINCT tableName FROM %s WHERE tableName %s ORDER BY tableName", tableList, likeExpr); struct sqlResult *sr = sqlGetResult(conn, query); char **row; while ((row = sqlNextRow(sr)) != NULL) { el = slNameNew(row[0]); slAddHead(&list, el); } slReverse(&list); sqlFreeResult(&sr); return list; } -struct slName *sqlListTablesLike(struct sqlConnection *conn, char *likeExpr) -/* Return list of tables in database associated with conn. Optionally filter list with - * given LIKE expression that can be NULL or string e.g. "LIKE 'snp%'". */ -{ -struct slName *list = NULL, *el; -struct sqlResult *sr; -char **row; - -struct sqlConnection *cacheConn = sqlTableCacheFindConn(conn); - -if (cacheConn) - list = sqlTableCacheQuery(cacheConn, likeExpr); -else +static struct slName *sqlListTablesForConn(struct sqlConnection *conn, char *likeExpr) +/* run SHOW TABLES on connection and return a slName list */ { char query[256]; if (likeExpr == NULL) safef(query, sizeof(query), "NOSQLINJ SHOW TABLES"); else safef(query, sizeof(query), "NOSQLINJ SHOW TABLES %s", likeExpr); +struct slName *list = NULL, *el; + +struct sqlResult *sr; +char **row; sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { el = slNameNew(row[0]); slAddHead(&list, el); } slReverse(&list); sqlFreeResult(&sr); +return list; +} + +struct slName *sqlListTablesLike(struct sqlConnection *conn, char *likeExpr) +/* Return list of tables in database associated with conn. Optionally filter list with + * given LIKE expression that can be NULL or string e.g. "LIKE 'snp%'". */ +{ +struct slName *list = NULL; + +struct sqlConnection *cacheConn = sqlTableCacheFindConn(conn); + +if (cacheConn) + list = sqlTableCacheQuery(cacheConn, likeExpr); +else + list = sqlListTablesForConn(conn, likeExpr); + +if (conn->failoverConn != NULL) + { + struct slName *failoverList = sqlListTablesForConn(conn->failoverConn, likeExpr); + slSortMergeUniq(list, failoverList, slNameCmp, slNameFree); } return list; } struct slName *sqlListTables(struct sqlConnection *sc) /* Return list of tables in database associated with conn. */ { return sqlListTablesLike(sc, NULL); } struct sqlResult *sqlDescribe(struct sqlConnection *conn, char *table) /* run the sql DESCRIBE command or get a cached table description and return the sql result */ { char query[1024];