dd7bcd673c6cebe1517e6ab04bddc180d751cc4a
angie
  Fri Feb 21 14:38:09 2020 -0800
cartTrackDbTablesForTrack was applying all.joiner to composite parent track (fruitless) - apply to subtrack tables.  refs #25015

diff --git src/hg/lib/cartTrackDb.c src/hg/lib/cartTrackDb.c
index 531fe13..a1b6e91 100644
--- src/hg/lib/cartTrackDb.c
+++ src/hg/lib/cartTrackDb.c
@@ -374,55 +374,60 @@
         pList = slCat(pList, subList);
         }
     }
 freez(&trackDupe);
 }
 
 struct slName *cartTrackDbTablesForTrack(char *db, struct trackDb *track, boolean useJoiner)
 /* Return list of all tables associated with track.  If useJoiner, the result can include
  * non-positional tables that are related to track by all.joiner. */
 {
 static struct joiner *allJoiner = NULL;
 struct hash *uniqHash = newHash(8);
 struct slName *name, *nameList = NULL;
 char *trackTable = track->table;
 
+/* suppress for parent tracks -- only the subtracks have tables */
+if (track->subtracks == NULL)
+    {
+    name = slNameNew(trackTable);
+    slAddHead(&nameList, name);
     hashAdd(uniqHash, trackTable, NULL);
+    }
+addTablesAccordingToTrackType(db, &nameList, uniqHash, track);
 if (useJoiner)
     {
     if (allJoiner == NULL)
         allJoiner = joinerRead("all.joiner");
+    struct slName *joinedList = NULL, *t;
+    for (t = nameList;  t != NULL;  t = t->next)
+        {
         struct joinerPair *jpList, *jp;
-    jpList = joinerRelate(allJoiner, db, trackTable, db);
+        jpList = joinerRelate(allJoiner, db, t->name, db);
         for (jp = jpList; jp != NULL; jp = jp->next)
             {
             struct joinerDtf *dtf = jp->b;
             if (cartTrackDbIsAccessDenied(dtf->database, dtf->table))
                 continue;
             char buf[256];
             char *s;
             if (sameString(dtf->database, db))
                 s = dtf->table;
             else
                 {
                 safef(buf, sizeof(buf), "%s.%s", dtf->database, dtf->table);
                 s = buf;
                 }
             if (!hashLookup(uniqHash, s))
                 {
                 hashAdd(uniqHash, s, NULL);
                 name = slNameNew(s);
-	    slAddHead(&nameList, name);
+                slAddHead(&joinedList, name);
                 }
             }
-    slNameSort(&nameList);
 	}
-/* suppress for parent tracks -- only the subtracks have tables */
-if (track->subtracks == NULL)
-    {
-    name = slNameNew(trackTable);
-    slAddHead(&nameList, name);
+    slNameSort(&joinedList);
+    nameList = slCat(nameList, joinedList);
     }
-addTablesAccordingToTrackType(db, &nameList, uniqHash, track);
 hashFree(&uniqHash);
 return nameList;
 }