aa89efc2ddc1144cb2bf8958947363cc6d20cd7a
larrym
  Fri Mar 16 01:40:46 2012 -0700
trim spaces in keywords filter
diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c
index 32ca276..8ea716b 100644
--- src/hg/hgTracks/simpleTracks.c
+++ src/hg/hgTracks/simpleTracks.c
@@ -12145,73 +12145,75 @@
  * the value from the trackDb statement 'articleTable'
  * or the default value: <trackName>Article */
 {
 char *articleTable = trackDbSetting(tg->tdb, "t2gArticleTable");
 if (articleTable == NULL)
     {
     char buf[256];
     safef(buf, sizeof(buf), "%sArticle", tg->track);
     articleTable = cloneString(buf);
     }
 return articleTable;
 }
 
 static char *makeMysqlMatchStr(char *str)
 {
-// return a string with all words prefixed with a '+' to force a boolean AND query
+// return a string with all words prefixed with a '+' to force a boolean AND query;
+// we also strip leading/trailing spaces.
 char *matchStr = needMem(strlen(str) * 2 + 1);
 int i = 0;
-while(*str)
-    {
     for(;*str && isspace(*str);str++)
-        matchStr[i++] = *str;
-    if(*str)
+    ;
+while(*str)
         {
         matchStr[i++] = '+';
         for(; *str && !isspace(*str);str++)
             matchStr[i++] = *str;
-        }
+    for(;*str && isspace(*str);str++)
+        ;
     }
 matchStr[i++] = 0;
 return matchStr;
 }
 
 static void t2gLoadItems(struct track *tg)
 /* apply filter to t2g items */
 {
 struct sqlConnection *conn = hAllocConn(database);
 char *keywords = cartOptionalString(cart, "t2gKeywords");
 char *yearFilter = cartOptionalString(cart, "t2gYear");
 char *articleTable = t2gArticleTable(tg);
 if(yearFilter != NULL && sameWord(yearFilter, "anytime"))
     yearFilter = NULL;
+if(isNotEmpty(keywords))
+    keywords = makeMysqlMatchStr(sqlEscapeString(keywords));
 if(isEmpty(yearFilter) && isEmpty(keywords))
     loadGappedBed(tg);
 else
     {
     char extra[2048], yearWhere[256], keywordsWhere[1024], prefix[256];
     char **row;
     int rowOffset;
     struct linkedFeatures *lfList = NULL;
     struct trackDb *tdb = tg->tdb;
     int scoreMin = atoi(trackDbSettingClosestToHomeOrDefault(tdb, "scoreMin", "0"));
     int scoreMax = atoi(trackDbSettingClosestToHomeOrDefault(tdb, "scoreMax", "1000"));
     boolean useItemRgb = bedItemRgb(tdb);
 
     safef(prefix, sizeof(prefix),  "name IN (SELECT displayId FROM %s WHERE", articleTable);
     if(isNotEmpty(keywords))
-        safef(keywordsWhere, sizeof(keywordsWhere), "MATCH (citation, title, authors, abstract) AGAINST ('%s' IN BOOLEAN MODE)", makeMysqlMatchStr(sqlEscapeString(keywords)));
+        safef(keywordsWhere, sizeof(keywordsWhere), "MATCH (citation, title, authors, abstract) AGAINST ('%s' IN BOOLEAN MODE)", keywords);
     if(isNotEmpty(yearFilter))
         safef(yearWhere, sizeof(yearWhere), "year >= '%s'", sqlEscapeString(yearFilter));
     if(isEmpty(keywords))
         safef(extra, sizeof(extra), "%s %s)", prefix, yearWhere);
     else if(isEmpty(yearFilter))
         safef(extra, sizeof(extra), "%s %s)", prefix, keywordsWhere);
     else
         safef(extra, sizeof(extra), "%s %s AND %s)", prefix, yearWhere, keywordsWhere);
     struct sqlResult *sr = hExtendedRangeQuery(conn, tg->table, chromName, winStart, winEnd, extra,
                                                FALSE, NULL, &rowOffset);
     while ((row = sqlNextRow(sr)) != NULL)
 	{
         struct bed *bed = bedLoad12(row+rowOffset);
         slAddHead(&lfList, bedMungToLinkedFeatures(&bed, tdb, 12, scoreMin, scoreMax, useItemRgb));
         }