You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jb...@apache.org on 2016/02/08 00:43:11 UTC

lucene-solr git commit: SOLR-8654: SQL: Unlimited SELECT without an ORDER BY should sort by _version_ desc

Repository: lucene-solr
Updated Branches:
  refs/heads/master f77feb718 -> a01c518b9


SOLR-8654: SQL: Unlimited SELECT without an ORDER BY should sort by _version_ desc


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/a01c518b
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/a01c518b
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/a01c518b

Branch: refs/heads/master
Commit: a01c518b94f3cf871210252ff0b40f66c65741d4
Parents: f77feb7
Author: jbernste <jb...@apache.org>
Authored: Sun Feb 7 18:16:32 2016 -0500
Committer: jbernste <jb...@apache.org>
Committed: Sun Feb 7 18:17:21 2016 -0500

----------------------------------------------------------------------
 .../org/apache/solr/handler/SQLHandler.java     | 11 ++--
 .../solr/collection1/conf/schema-sql.xml        |  2 +-
 .../org/apache/solr/handler/TestSQLHandler.java | 53 ++++++++++++++++++++
 3 files changed, 58 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/a01c518b/solr/core/src/java/org/apache/solr/handler/SQLHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/SQLHandler.java b/solr/core/src/java/org/apache/solr/handler/SQLHandler.java
index 8324c85..a017f58 100644
--- a/solr/core/src/java/org/apache/solr/handler/SQLHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/SQLHandler.java
@@ -612,11 +612,12 @@ public class SQLHandler extends RequestHandlerBase implements SolrCoreAware {
       }
     } else {
       if(sqlVisitor.limit < 0) {
-        throw new IOException("order by is required for unlimited select statements.");
+        siBuf.append("_version_ desc");
+        fl = fl+",_version_";
       } else {
         siBuf.append("score desc");
         if(!score) {
-          fl = fl+(",score");
+          fl = fl+",score";
         }
       }
     }
@@ -640,11 +641,7 @@ public class SQLHandler extends RequestHandlerBase implements SolrCoreAware {
       tupleStream = new CloudSolrStream(zkHost, collection, params);
     }
 
-    if(sqlVisitor.hasColumnAliases) {
-      return new SelectStream(tupleStream, sqlVisitor.columnAliases);
-    } else {
-      return tupleStream;
-    }
+    return new SelectStream(tupleStream, sqlVisitor.columnAliases);
   }
 
   private static boolean sortsEqual(Bucket[] buckets, String direction, List<SortItem> sortItems, Map<String, String> reverseColumnAliases) {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/a01c518b/solr/core/src/test-files/solr/collection1/conf/schema-sql.xml
----------------------------------------------------------------------
diff --git a/solr/core/src/test-files/solr/collection1/conf/schema-sql.xml b/solr/core/src/test-files/solr/collection1/conf/schema-sql.xml
index 25a9bc0..bf16327 100644
--- a/solr/core/src/test-files/solr/collection1/conf/schema-sql.xml
+++ b/solr/core/src/test-files/solr/collection1/conf/schema-sql.xml
@@ -499,7 +499,7 @@
 
     <field name="tlong" type="tlong" indexed="true" stored="true" />
 
-    <field name="_version_" type="long" indexed="true" stored="true"/>
+    <field name="_version_" type="long" indexed="true" docValues="true" stored="true"/>
 
     <!-- Dynamic field definitions.  If a field name is not found, dynamicFields
          will be used if the name matches any of the patterns.

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/a01c518b/solr/core/src/test/org/apache/solr/handler/TestSQLHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/handler/TestSQLHandler.java b/solr/core/src/test/org/apache/solr/handler/TestSQLHandler.java
index e376c18..0e5cbaf 100644
--- a/solr/core/src/test/org/apache/solr/handler/TestSQLHandler.java
+++ b/solr/core/src/test/org/apache/solr/handler/TestSQLHandler.java
@@ -281,6 +281,59 @@ public class TestSQLHandler extends AbstractFullDistribZkTestBase {
       assert(tuple.getLong("field_i") == 7);
       assert(tuple.get("str_s").equals("a"));
 
+
+      params = new HashMap();
+      params.put(CommonParams.QT, "/sql");
+
+      //Test unlimited unsorted result. Should sort on _version_ desc
+      params.put("stmt", "select 'id', field_i, str_s from collection1 where 'text'='XXXX'");
+
+      solrStream = new SolrStream(jetty.url, params);
+      tuples = getTuples(solrStream);
+
+      assert(tuples.size() == 8);
+
+      tuple = tuples.get(0);
+      assert(tuple.getLong("id") == 8);
+      assert(tuple.getLong("field_i") == 60);
+      assert(tuple.get("str_s").equals("c"));
+
+      tuple = tuples.get(1);
+      assert(tuple.getLong("id") == 7);
+      assert(tuple.getLong("field_i") == 50);
+      assert(tuple.get("str_s").equals("c"));
+
+      tuple = tuples.get(2);
+      assert(tuple.getLong("id") == 6);
+      assert(tuple.getLong("field_i") == 40);
+      assert(tuple.get("str_s").equals("c"));
+
+      tuple = tuples.get(3);
+      assert(tuple.getLong("id") == 5);
+      assert(tuple.getLong("field_i") == 30);
+      assert(tuple.get("str_s").equals("c"));
+
+      tuple = tuples.get(4);
+      assert(tuple.getLong("id") == 4);
+      assert(tuple.getLong("field_i") == 11);
+      assert(tuple.get("str_s").equals("b"));
+
+      tuple = tuples.get(5);
+      assert(tuple.getLong("id") == 3);
+      assert(tuple.getLong("field_i") == 20);
+      assert(tuple.get("str_s").equals("a"));
+
+      tuple = tuples.get(6);
+      assert(tuple.getLong("id") == 2);
+      assert(tuple.getLong("field_i") == 8);
+      assert(tuple.get("str_s").equals("b"));
+
+      tuple = tuples.get(7);
+      assert(tuple.getLong("id") == 1);
+      assert(tuple.getLong("field_i") == 7);
+      assert(tuple.get("str_s").equals("a"));
+
+
       params = new HashMap();
       params.put(CommonParams.QT, "/sql");
       params.put("stmt", "select id, field_i, str_s from collection1 where text='XXXX' order by field_i desc limit 1");