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];