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]

Reply via email to