Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions changelog/unreleased/calcite-sql-params.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
title: Avoid forwarding unrelated request parameters to Calcite from the /sql handler
type: changed
authors:
- name: Jan Høydahl
links:
- name: PR#4607
url: https://github.com/apache/solr/pull/4607
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import org.apache.calcite.config.Lex;
import org.apache.solr.client.solrj.io.Tuple;
import org.apache.solr.client.solrj.io.comp.StreamComparator;
Expand Down Expand Up @@ -56,6 +56,8 @@ public class SQLHandler extends RequestHandlerBase

static final String sqlNonCloudErrorMsg = "/sql handler only works in Solr Cloud mode";

static final Set<String> CONNECTION_PARAMS = Set.of("aggregationMode", "numWorkers");

private boolean isCloud = false;

@Override
Expand Down Expand Up @@ -103,11 +105,12 @@ public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) throw
String url = CalciteSolrDriver.CONNECT_STRING_PREFIX;

Properties properties = new Properties();
// Add all query parameters
Iterator<String> parameterNamesIterator = params.getParameterNamesIterator();
while (parameterNamesIterator.hasNext()) {
String param = parameterNamesIterator.next();
properties.setProperty(param, params.get(param));
// Forward only the parameters the handler supports as connection configuration.
for (String param : CONNECTION_PARAMS) {
String value = params.get(param);
if (value != null) {
properties.setProperty(param, value);
}
}

// Set these last to ensure that they are set properly
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,24 @@ public void testBasicSelect() throws Exception {
tuples = getTuples(sParams, baseUrl);

assertEquals(0, tuples.size());

// Verify that we only forward parameters we care about
sParams =
params(
CommonParams.QT,
"/sql",
"typeSystem",
"does.not.Exist",
"stmt",
"select id, field_i, str_s from collection1 where text_t='XXXX' order by field_i desc limit 1");

tuples = getTuples(sParams, baseUrl);

assertEquals(1, tuples.size());
tuple = tuples.get(0);
assertEquals(8, tuple.getLong("id").longValue());
assertEquals(60, tuple.getLong("field_i").longValue());
assertEquals("c", tuple.get("str_s"));
}

@Test
Expand Down
Loading