METAMODEL-1128: Fixed

Fixes #136

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

Branch: refs/heads/5.x
Commit: f18ae8b75f5baf4832a3c1942a9fd82373fa7355
Parents: 11710af
Author: kaspersorensen <i.am.kasper.soren...@gmail.com>
Authored: Fri Nov 11 13:38:28 2016 -0800
Committer: kaspersorensen <i.am.kasper.soren...@gmail.com>
Committed: Fri Nov 11 13:38:28 2016 -0800

----------------------------------------------------------------------
 .../rest/ElasticSearchRestDataContext.java            | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/metamodel/blob/f18ae8b7/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/ElasticSearchRestDataContext.java
----------------------------------------------------------------------
diff --git 
a/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/ElasticSearchRestDataContext.java
 
b/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/ElasticSearchRestDataContext.java
index b55db13..920217f 100644
--- 
a/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/ElasticSearchRestDataContext.java
+++ 
b/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/ElasticSearchRestDataContext.java
@@ -95,6 +95,9 @@ public class ElasticSearchRestDataContext extends 
QueryPostprocessDataContext im
     // 1 minute timeout
     public static final String TIMEOUT_SCROLL = "1m";
 
+    // we scroll when more than 400 rows are expected
+    private static final int SCROLL_THRESHOLD = 400;
+
     private final JestClient elasticSearchClient;
 
     private final String indexName;
@@ -265,13 +268,18 @@ public class ElasticSearchRestDataContext extends 
QueryPostprocessDataContext im
         if (queryBuilder != null) {
             // where clause can be pushed down to an ElasticSearch query
             SearchSourceBuilder searchSourceBuilder = 
createSearchRequest(firstRow, maxRows, queryBuilder);
-            SearchResult result = executeSearch(table, searchSourceBuilder, 
false);
+            SearchResult result = executeSearch(table, searchSourceBuilder, 
scrollNeeded(maxRows));
 
             return new JestElasticSearchDataSet(elasticSearchClient, result, 
selectItems);
         }
         return super.materializeMainSchemaTable(table, selectItems, 
whereItems, firstRow, maxRows);
     }
 
+    private boolean scrollNeeded(int maxRows) {
+        // if either we don't know about max rows or max rows is set higher 
than threshold
+        return !limitMaxRowsIsSet(maxRows) || maxRows > SCROLL_THRESHOLD;
+    }
+
     private SearchResult executeSearch(Table table, SearchSourceBuilder 
searchSourceBuilder, boolean scroll) {
         Search.Builder builder = new 
Search.Builder(searchSourceBuilder.toString()).addIndex(getIndexName()).addType(
                 table.getName());
@@ -292,7 +300,7 @@ public class ElasticSearchRestDataContext extends 
QueryPostprocessDataContext im
 
     @Override
     protected DataSet materializeMainSchemaTable(Table table, Column[] 
columns, int maxRows) {
-        SearchResult searchResult = executeSearch(table, 
createSearchRequest(1, maxRows, null), limitMaxRowsIsSet(
+        SearchResult searchResult = executeSearch(table, 
createSearchRequest(1, maxRows, null), scrollNeeded(
                 maxRows));
 
         return new JestElasticSearchDataSet(elasticSearchClient, searchResult, 
columns);
@@ -306,6 +314,8 @@ public class ElasticSearchRestDataContext extends 
QueryPostprocessDataContext im
         }
         if (limitMaxRowsIsSet(maxRows)) {
             searchRequest.size(maxRows);
+        } else {
+            searchRequest.size(Integer.MAX_VALUE);
         }
 
         if (queryBuilder != null) {

Reply via email to