Author: ryan
Date: Fri Sep 14 15:45:02 2007
New Revision: 575809

URL: http://svn.apache.org/viewvc?rev=575809&view=rev
Log:
escape all non-alpha/numeric characters with \

Thanks erik.  See also: 575369 

Added:
    lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/util/
    
lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/util/ClientUtilsTest.java
   (with props)
Modified:
    
lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/util/ClientUtils.java

Modified: 
lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/util/ClientUtils.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/util/ClientUtils.java?rev=575809&r1=575808&r2=575809&view=diff
==============================================================================
--- 
lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/util/ClientUtils.java
 (original)
+++ 
lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/util/ClientUtils.java
 Fri Sep 14 15:45:02 2007
@@ -29,6 +29,8 @@
 import java.util.Date;
 import java.util.Iterator;
 import java.util.TimeZone;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.apache.commons.httpclient.util.DateParseException;
 import org.apache.commons.httpclient.util.DateUtil;
@@ -161,38 +163,15 @@
     }
   }
   
-
+  private static final Pattern escapePattern = Pattern.compile( "(\\W)" );
+  
   /**
    * See: http://lucene.apache.org/java/docs/queryparsersyntax.html#Escaping 
Special Characters
    */
   public static String escapeQueryChars( String input ) 
   {
-    char buff[] = input.toCharArray();
-    StringBuilder str = new StringBuilder( buff.length+5 );
-    for( char c : buff ) {
-      switch( c ) {
-      case '+':
-      case '-':
-      case '&':
-      case '|':
-      case '(':
-      case ')':
-      case '{':
-      case '}':
-      case '[':
-      case ']':
-      case '^':
-      case '"':
-      case '*':
-      case ':':
-      case '~':
-      case '!':
-      case '\\':
-        str.append( '\\' );
-      }
-      str.append( c );
-    }
-    return str.toString();
+    Matcher matcher = escapePattern.matcher( input );
+    return matcher.replaceAll( "\\\\$1" );
   }
   
 

Added: 
lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/util/ClientUtilsTest.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/util/ClientUtilsTest.java?rev=575809&view=auto
==============================================================================
--- 
lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/util/ClientUtilsTest.java
 (added)
+++ 
lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/util/ClientUtilsTest.java
 Fri Sep 14 15:45:02 2007
@@ -0,0 +1,37 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.solr.client.solrj.util;
+
+import junit.framework.TestCase;
+
+/**
+ * 
+ * @version $Id$
+ * @since solr 1.3
+ */
+public class ClientUtilsTest extends TestCase {
+  
+  public void testEscapeQuery() 
+  { 
+    assertEquals( "nochange", ClientUtils.escapeQueryChars( "nochange" ) );
+    assertEquals( "12345", ClientUtils.escapeQueryChars( "12345" ) );
+    assertEquals( "with\\ space", ClientUtils.escapeQueryChars( "with space" ) 
);
+    assertEquals( "h\\:ello\\!", ClientUtils.escapeQueryChars( "h:ello!" ) );
+    assertEquals( "h\\~\\!", ClientUtils.escapeQueryChars( "h~!" ) );
+  }
+}

Propchange: 
lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/util/ClientUtilsTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/util/ClientUtilsTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL


Reply via email to