f6def44785079440787ef7b1c05660e6d16f992b
angie
  Wed Jan 4 11:01:51 2017 -0800
If hTableExists is passed a db that doesn't exist (e.g. from all.joiner), it should return FALSE instead of crashing.  fixes #18586

diff --git src/hg/lib/hdb.c src/hg/lib/hdb.c
index 8da9231..358e252 100644
--- src/hg/lib/hdb.c
+++ src/hg/lib/hdb.c
@@ -807,31 +807,34 @@
 {
 if (trackHubDatabase(db))
     {
     struct trackHub *hub = hubConnectGetHubForDb(db);
     if (hub != NULL)
         {
         struct trackHubGenome *hubGenome = trackHubFindGenome(hub, db);
         struct trackDb *tdbList = trackHubTracksForGenome(hub, hubGenome), *tdb;
         for (tdb = tdbList;  tdb != NULL;  tdb = tdb->next)
             {
             hashAdd(dbTblHash, tdb->table, slNameNew(tdb->table));
             }
         }
     return;
     }
-struct sqlConnection *conn = hAllocConnProfile(profile, db);
+struct sqlConnection *conn = hAllocConnProfileMaybe(profile, db);
+if (conn == NULL)
+    // Database does not exist, so no tables in the database exist -- leave the hash empty.
+    return;
 struct slName *allTables =  sqlListTables(conn);
 
 if (!sameString(CUSTOM_TRASH,db) && !sameString("hgFixed",db) && hCanHaveSplitTables(db))
     {
     /* Consolidate split tables into one list per track: */
     struct slName *tbl = NULL, *nextTbl = NULL;
     for (tbl = allTables;  tbl != NULL;  tbl = nextTbl)
 	{
 	struct hashEl *tHel = NULL;
 	char trackName[HDB_MAX_TABLE_STRING];
 	char chrom[HDB_MAX_CHROM_STRING];
 	nextTbl = tbl->next;
 	tbl->next = NULL;
 	hParseTableName(db, tbl->name, trackName, chrom);
 	tHel = hashLookup(dbTblHash, trackName);