otis 2004/03/03 04:07:13 Modified: src/java/org/apache/lucene/queryParser QueryParser.java QueryParser.jj QueryParserTokenManager.java src/test/org/apache/lucene/queryParser TestQueryParser.java Log: - Applied a patch that treats \n and \r characters in query strings the same way that \t and " " are treated. http://issues.apache.org/bugzilla/show_bug.cgi?id=18847 Contributed by Daniel Naber Revision Changes Path 1.10 +25 -25 jakarta-lucene/src/java/org/apache/lucene/queryParser/QueryParser.java Index: QueryParser.java =================================================================== RCS file: /home/cvs/jakarta-lucene/src/java/org/apache/lucene/queryParser/QueryParser.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- QueryParser.java 3 Mar 2004 11:24:48 -0000 1.9 +++ QueryParser.java 3 Mar 2004 12:07:13 -0000 1.10 @@ -76,8 +76,8 @@ Locale locale = Locale.getDefault(); /** Parses a query string, returning a [EMAIL PROTECTED] org.apache.lucene.search.Query}. - * @param query the query string to be parsed. - * @param field the default field for query terms. + * @param query the query string to be parsed. + * @param field the default field for query terms. * @param analyzer used to find terms in the query text. * @throws ParseException if the parsing fails */ @@ -88,7 +88,7 @@ } /** Constructs a query parser. - * @param f the default field for query terms. + * @param f the default field for query terms. * @param a used to find terms in the query text. */ public QueryParser(String f, Analyzer a) { @@ -99,7 +99,7 @@ /** Parses a query string, returning a * <a href="lucene.search.Query.html">Query</a>. - * @param query the query string to be parsed. + * @param query the query string to be parsed. * @throws ParseException if the parsing fails */ public Query parse(String query) throws ParseException { @@ -302,7 +302,7 @@ { BooleanQuery query = new BooleanQuery(); for (int i = 0; i < clauses.size(); i++) { - query.add((BooleanClause)clauses.elementAt(i)); + query.add((BooleanClause)clauses.elementAt(i)); } return query; } @@ -331,7 +331,7 @@ protected Query getWildcardQuery(String field, String termStr) throws ParseException { if (lowercaseWildcardTerms) { - termStr = termStr.toLowerCase(); + termStr = termStr.toLowerCase(); } Term t = new Term(field, termStr); return new WildcardQuery(t); @@ -363,7 +363,7 @@ protected Query getPrefixQuery(String field, String termStr) throws ParseException { if (lowercaseWildcardTerms) { - termStr = termStr.toLowerCase(); + termStr = termStr.toLowerCase(); } Term t = new Term(field, termStr); return new PrefixQuery(t); @@ -511,7 +511,7 @@ if (clauses.size() == 1 && firstQuery != null) {if (true) return firstQuery;} else { - {if (true) return getBooleanQuery(clauses);} + {if (true) return getBooleanQuery(clauses);} } throw new Error("Missing return statement in function"); } @@ -522,7 +522,7 @@ if (jj_2_1(2)) { fieldToken = jj_consume_token(TERM); jj_consume_token(COLON); - field=discardEscapeChar(fieldToken.image); + field=discardEscapeChar(fieldToken.image); } else { ; } @@ -557,10 +557,10 @@ } if (boost != null) { float f = (float)1.0; - try { - f = Float.valueOf(boost.image).floatValue(); + try { + f = Float.valueOf(boost.image).floatValue(); q.setBoost(f); - } catch (Exception ignored) { } + } catch (Exception ignored) { } } {if (true) return q;} throw new Error("Missing return statement in function"); @@ -627,11 +627,11 @@ } String termImage=discardEscapeChar(term.image); if (wildcard) { - q = getWildcardQuery(field, termImage); + q = getWildcardQuery(field, termImage); } else if (prefix) { q = getPrefixQuery(field, - discardEscapeChar(term.image.substring - (0, term.image.length()-1))); + discardEscapeChar(term.image.substring + (0, term.image.length()-1))); } else if (fuzzy) { q = getFuzzyQuery(field, termImage); } else { @@ -685,13 +685,13 @@ if (goop1.kind == RANGEIN_QUOTED) { goop1.image = goop1.image.substring(1, goop1.image.length()-1); } else { - goop1.image = discardEscapeChar(goop1.image); + goop1.image = discardEscapeChar(goop1.image); } if (goop2.kind == RANGEIN_QUOTED) { goop2.image = goop2.image.substring(1, goop2.image.length()-1); - } else { - goop2.image = discardEscapeChar(goop2.image); - } + } else { + goop2.image = discardEscapeChar(goop2.image); + } q = getRangeQuery(field, analyzer, goop1.image, goop2.image, true); break; case RANGEEX_START: @@ -745,9 +745,9 @@ } if (goop2.kind == RANGEEX_QUOTED) { goop2.image = goop2.image.substring(1, goop2.image.length()-1); - } else { - goop2.image = discardEscapeChar(goop2.image); - } + } else { + goop2.image = discardEscapeChar(goop2.image); + } q = getRangeQuery(field, analyzer, goop1.image, goop2.image, false); break; @@ -791,9 +791,9 @@ f = Float.valueOf(boost.image).floatValue(); } catch (Exception ignored) { - /* Should this be handled somehow? (defaults to "no boost", if - * boost number is invalid) - */ + /* Should this be handled somehow? (defaults to "no boost", if + * boost number is invalid) + */ } // avoid boosting null queries, such as those caused by stop words 1.41 +2 -2 jakarta-lucene/src/java/org/apache/lucene/queryParser/QueryParser.jj Index: QueryParser.jj =================================================================== RCS file: /home/cvs/jakarta-lucene/src/java/org/apache/lucene/queryParser/QueryParser.jj,v retrieving revision 1.40 retrieving revision 1.41 diff -u -r1.40 -r1.41 --- QueryParser.jj 3 Mar 2004 11:24:48 -0000 1.40 +++ QueryParser.jj 3 Mar 2004 12:07:13 -0000 1.41 @@ -443,11 +443,11 @@ <#_NUM_CHAR: ["0"-"9"] > | <#_ESCAPED_CHAR: "\\" [ "\\", "+", "-", "!", "(", ")", ":", "^", "[", "]", "\"", "{", "}", "~", "*", "?" ] > -| <#_TERM_START_CHAR: ( ~[ " ", "\t", "+", "-", "!", "(", ")", ":", "^", +| <#_TERM_START_CHAR: ( ~[ " ", "\t", "\n", "\r", "+", "-", "!", "(", ")", ":", "^", "[", "]", "\"", "{", "}", "~", "*", "?" ] | <_ESCAPED_CHAR> ) > | <#_TERM_CHAR: ( <_TERM_START_CHAR> | <_ESCAPED_CHAR> ) > -| <#_WHITESPACE: ( " " | "\t" ) > +| <#_WHITESPACE: ( " " | "\t" | "\n" | "\r") > } <DEFAULT, RangeIn, RangeEx> SKIP : { 1.2 +8 -8 jakarta-lucene/src/java/org/apache/lucene/queryParser/QueryParserTokenManager.java Index: QueryParserTokenManager.java =================================================================== RCS file: /home/cvs/jakarta-lucene/src/java/org/apache/lucene/queryParser/QueryParserTokenManager.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- QueryParserTokenManager.java 11 Sep 2003 01:51:33 -0000 1.1 +++ QueryParserTokenManager.java 3 Mar 2004 12:07:13 -0000 1.2 @@ -121,13 +121,13 @@ switch(jjstateSet[--i]) { case 0: - if ((0x7bffd0f8fffffdffL & l) != 0L) + if ((0x7bffd0f8ffffd9ffL & l) != 0L) { if (kind > 17) kind = 17; jjCheckNAddStates(0, 6); } - else if ((0x100000200L & l) != 0L) + else if ((0x100002600L & l) != 0L) { if (kind > 6) kind = 6; @@ -174,14 +174,14 @@ jjstateSet[jjnewStateCnt++] = 18; break; case 19: - if ((0x7bffd0f8fffffdffL & l) == 0L) + if ((0x7bffd0f8ffffd9ffL & l) == 0L) break; if (kind > 17) kind = 17; jjCheckNAddStates(0, 6); break; case 20: - if ((0x7bffd0f8fffffdffL & l) == 0L) + if ((0x7bffd0f8ffffd9ffL & l) == 0L) break; if (kind > 17) kind = 17; @@ -195,7 +195,7 @@ jjCheckNAddTwoStates(20, 21); break; case 23: - if ((0x7bffd0f8fffffdffL & l) != 0L) + if ((0x7bffd0f8ffffd9ffL & l) != 0L) jjCheckNAddStates(7, 9); break; case 24: @@ -207,7 +207,7 @@ jjCheckNAddStates(7, 9); break; case 27: - if ((0xfbffd4f8fffffdffL & l) == 0L) + if ((0xfbffd4f8ffffd9ffL & l) == 0L) break; if (kind > 21) kind = 21; @@ -501,7 +501,7 @@ kind = 32; jjCheckNAdd(4); } - if ((0x100000200L & l) != 0L) + if ((0x100002600L & l) != 0L) { if (kind > 6) kind = 6; @@ -761,7 +761,7 @@ kind = 28; jjCheckNAdd(4); } - if ((0x100000200L & l) != 0L) + if ((0x100002600L & l) != 0L) { if (kind > 6) kind = 6; 1.25 +36 -0 jakarta-lucene/src/test/org/apache/lucene/queryParser/TestQueryParser.java Index: TestQueryParser.java =================================================================== RCS file: /home/cvs/jakarta-lucene/src/test/org/apache/lucene/queryParser/TestQueryParser.java,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- TestQueryParser.java 3 Mar 2004 11:24:49 -0000 1.24 +++ TestQueryParser.java 3 Mar 2004 12:07:13 -0000 1.25 @@ -371,6 +371,42 @@ assertQueryEquals("[ a\\\\ TO a\\* ]", null, "[a\\ TO a*]"); } + public void testTabNewlineCarriageReturn() + throws Exception { + assertQueryEqualsDOA("+weltbank +worlbank", null, + "+weltbank +worlbank"); + + assertQueryEqualsDOA("+weltbank\n+worlbank", null, + "+weltbank +worlbank"); + assertQueryEqualsDOA("weltbank \n+worlbank", null, + "+weltbank +worlbank"); + assertQueryEqualsDOA("weltbank \n +worlbank", null, + "+weltbank +worlbank"); + + assertQueryEqualsDOA("+weltbank\r+worlbank", null, + "+weltbank +worlbank"); + assertQueryEqualsDOA("weltbank \r+worlbank", null, + "+weltbank +worlbank"); + assertQueryEqualsDOA("weltbank \r +worlbank", null, + "+weltbank +worlbank"); + + assertQueryEqualsDOA("+weltbank\r\n+worlbank", null, + "+weltbank +worlbank"); + assertQueryEqualsDOA("weltbank \r\n+worlbank", null, + "+weltbank +worlbank"); + assertQueryEqualsDOA("weltbank \r\n +worlbank", null, + "+weltbank +worlbank"); + assertQueryEqualsDOA("weltbank \r \n +worlbank", null, + "+weltbank +worlbank"); + + assertQueryEqualsDOA("+weltbank\t+worlbank", null, + "+weltbank +worlbank"); + assertQueryEqualsDOA("weltbank \t+worlbank", null, + "+weltbank +worlbank"); + assertQueryEqualsDOA("weltbank \t +worlbank", null, + "+weltbank +worlbank"); + } + public void testSimpleDAO() throws Exception { assertQueryEqualsDOA("term term term", null, "+term +term +term");
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]