From 71eb59e0435f744db2d5cf8c58b1fca70af9b824 Mon Sep 17 00:00:00 2001 From: Joel Bernstein Date: Fri, 29 Sep 2017 10:36:26 -0400 Subject: [PATCH] SOLR-11420: sql Streaming Expression should use the default collection if none is provided --- .../apache/solr/client/solrj/io/stream/SqlStream.java | 7 +------ .../client/solrj/io/stream/expr/StreamFactory.java | 6 ++++++ .../client/solrj/io/stream/StreamExpressionTest.java | 10 ++++++++++ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/SqlStream.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/SqlStream.java index d2296b7da3c..93345e76ae9 100644 --- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/SqlStream.java +++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/SqlStream.java @@ -73,12 +73,7 @@ public class SqlStream extends TupleStream implements Expressible { // Collection Name if(null == collectionName){ - throw new IOException(String.format(Locale.ROOT,"invalid expression %s - collectionName expected as first operand",expression)); - } - - // Validate there are no unknown parameters - zkHost and alias are namedParameter so we don't need to count it twice - if(expression.getParameters().size() != 1 + namedParams.size()){ - throw new IOException(String.format(Locale.ROOT,"invalid expression %s - unknown operands found",expression)); + collectionName = factory.getDefaultCollection(); } // Named parameters - passed directly to solr as solrparams diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/expr/StreamFactory.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/expr/StreamFactory.java index f4c9b580808..321545bd77a 100644 --- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/expr/StreamFactory.java +++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/expr/StreamFactory.java @@ -46,6 +46,7 @@ public class StreamFactory implements Serializable { private transient HashMap collectionZkHosts; private transient HashMap> functionNames; private transient String defaultZkHost; + private transient String defaultCollection; public StreamFactory(){ collectionZkHosts = new HashMap<>(); @@ -54,9 +55,14 @@ public class StreamFactory implements Serializable { public StreamFactory withCollectionZkHost(String collectionName, String zkHost){ this.collectionZkHosts.put(collectionName, zkHost); + this.defaultCollection = collectionName; return this; } + public String getDefaultCollection() { + return defaultCollection; + } + public StreamFactory withDefaultZkHost(String zkHost) { this.defaultZkHost = zkHost; return this; diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamExpressionTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamExpressionTest.java index 949d2240528..d84120f442d 100644 --- a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamExpressionTest.java +++ b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamExpressionTest.java @@ -279,6 +279,16 @@ public class StreamExpressionTest extends SolrCloudTestCase { assert (tuples.size() == 5); assertOrder(tuples, 0, 1, 2, 3, 4); + //Test with using the default collection + solrParams = new ModifiableSolrParams(); + solrParams.add("qt", "/stream"); + solrParams.add("expr", "sql(stmt=\"select id from collection1 order by a_i asc\")"); + solrStream = new SolrStream(shardUrls.get(0), solrParams); + solrStream.setStreamContext(streamContext); + tuples = getTuples(solrStream); + assert (tuples.size() == 5); + assertOrder(tuples, 0, 1, 2, 3, 4); + } finally { solrClientCache.close(); }