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)); }