ffebd51c178297e99a5a4d2ba4dd43230034077c
angie
  Thu Apr 23 10:33:20 2015 -0700
In getBedFieldSlNameList, when parsing the field string from bedSqlFieldsExceptForChrom,
skip over placeholder field '.' in addition to placeholder 0.  Letting the '.' slip through
was not a problem until 1d8a8611 in which joinerDtfFromDottedTriple was changed to use
strrchr instead of strchr to separate the field name from the track name, to accommodate
track hubs with . in the track name.
refs #15117

diff --git src/hg/hgTables/joining.c src/hg/hgTables/joining.c
index 34a5183..772439e 100644
--- src/hg/hgTables/joining.c
+++ src/hg/hgTables/joining.c
@@ -1055,31 +1055,32 @@
 {
 struct slName *snList = NULL, *sn = NULL;
 int fieldCount = 0;
 char *fields = NULL;
 char *words[16];
 char dtf[256];
 int i;
 if (hti == NULL)
     errAbort("Can't find table info for table %s.%s", db, table);
 bedSqlFieldsExceptForChrom(hti, &fieldCount, &fields);
 /* Update our notion of fieldCount -- the chrom field is omitted, and 
  * (if applicable) the reserved field is omitted too: */
 fieldCount = chopCommas(fields, words);
 for (i=fieldCount-1;  i >= 0;  i--)
     {
-    if (sameString(words[i], "0"))
+    // Skip placeholder field names:
+    if (sameString(words[i], "0") || sameString(words[i], "'.'"))
 	continue;
     safef(dtf, sizeof(dtf), "%s.%s.%s", db, table, words[i]);
     sn = slNameNew(dtf);
     slAddHead(&snList, sn);
     }
 safef(dtf, sizeof(dtf), "%s.%s.%s", db, table, hti->chromField);
 sn = slNameNew(dtf);
 slAddHead(&snList, sn);
 freez(&fields);
 return snList;
 }
 
 
 static int *getBedFieldIndices(struct joinedTables *joined,
 			       struct hTableInfo *hti)