You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by yo...@apache.org on 2010/09/09 00:04:20 UTC

svn commit: r995264 - in /lucene/dev/trunk/solr/src: java/org/apache/solr/search/QueryParsing.java test/org/apache/solr/TestDistributedSearch.java test/org/apache/solr/search/TestQueryTypes.java

Author: yonik
Date: Wed Sep  8 22:04:19 2010
New Revision: 995264

URL: http://svn.apache.org/viewvc?rev=995264&view=rev
Log:
SOLR-2110: remove restrictions on local param substitution

Modified:
    lucene/dev/trunk/solr/src/java/org/apache/solr/search/QueryParsing.java
    lucene/dev/trunk/solr/src/test/org/apache/solr/TestDistributedSearch.java
    lucene/dev/trunk/solr/src/test/org/apache/solr/search/TestQueryTypes.java

Modified: lucene/dev/trunk/solr/src/java/org/apache/solr/search/QueryParsing.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/java/org/apache/solr/search/QueryParsing.java?rev=995264&r1=995263&r2=995264&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/java/org/apache/solr/search/QueryParsing.java (original)
+++ lucene/dev/trunk/solr/src/java/org/apache/solr/search/QueryParsing.java Wed Sep  8 22:04:19 2010
@@ -178,15 +178,15 @@ public class QueryParsing {
         // saw equals, so read value
         p.pos++;
         ch = p.peek();
+        boolean deref = false;
+        if (ch == '$') {
+          p.pos++;
+          ch = p.peek();
+          deref = true;  // dereference whatever value is read by treating it as a variable name
+        }
+
         if (ch == '\"' || ch == '\'') {
           val = p.getQuotedString();
-        } else if (ch == '$') {
-          p.pos++;
-          // dereference parameter
-          String pname = p.getId();
-          if (params != null) {
-            val = params.get(pname);
-          }
         } else {
           // read unquoted literal ended by whitespace or '}'
           // there is no escaping.
@@ -203,6 +203,12 @@ public class QueryParsing {
             p.pos++;
           }
         }
+
+        if (deref) {  // dereference parameter
+          if (params != null) {
+            val = params.get(val);
+          }
+        }
       }
       if (target != null) target.put(id, val);
     }

Modified: lucene/dev/trunk/solr/src/test/org/apache/solr/TestDistributedSearch.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/test/org/apache/solr/TestDistributedSearch.java?rev=995264&r1=995263&r2=995264&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/test/org/apache/solr/TestDistributedSearch.java (original)
+++ lucene/dev/trunk/solr/src/test/org/apache/solr/TestDistributedSearch.java Wed Sep  8 22:04:19 2010
@@ -177,7 +177,7 @@ public class TestDistributedSearch exten
     handle.put("facet_fields", SKIPVAL);    
     query("q","*:*", "rows",0, "facet","true", "facet.field",t1,"facet.limit",5, "facet.shard.limit",5);
     // check a complex key name
-   // query("q","*:*", "rows",0, "facet","true", "facet.field","{!key=a/b/c}"+t1,"facet.limit",5, "facet.shard.limit",5);
+    query("q","*:*", "rows",0, "facet","true", "facet.field","{!key=a/b/c}"+t1,"facet.limit",5, "facet.shard.limit",5);
     handle.remove("facet_fields");
 
 

Modified: lucene/dev/trunk/solr/src/test/org/apache/solr/search/TestQueryTypes.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/test/org/apache/solr/search/TestQueryTypes.java?rev=995264&r1=995263&r2=995264&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/test/org/apache/solr/search/TestQueryTypes.java (original)
+++ lucene/dev/trunk/solr/src/test/org/apache/solr/search/TestQueryTypes.java Wed Sep  8 22:04:19 2010
@@ -210,6 +210,14 @@ public class TestQueryTypes extends Abst
             ,"//result[@numFound='2']"
     );
 
+    // test wacky param names
+    assertQ(
+            req("q","{!prefix f=$a/b/c v=$'a b/c'}"
+                ,"a/b/c","v_t", "a b/c", "hel"
+            )
+            ,"//result[@numFound='2']"
+    );
+
     assertQ("test param subst with literal",
             req("q","{!prefix f=$myf v=$my.v}"
                 ,"myf","v_s", "my.v", "{!lit"