Upgrade Avatica and Calcite. Fix NPE bug

This commit is contained in:
Kevin Risden 2016-10-31 10:14:09 -05:00
parent 3856ce4b5c
commit 28fb5855f4
10 changed files with 10 additions and 188 deletions

View File

@ -99,8 +99,8 @@ io.netty.netty-all.version = 4.0.36.Final
/org.apache.ant/ant = 1.8.2
/org.apache.avro/avro = 1.7.5
org.apache.calcite.version = 1.10.0
org.apache.calcite.avatica.version = 1.9.0-SNAPSHOT
org.apache.calcite.version = 1.11.0-SNAPSHOT
org.apache.calcite.avatica.version = 1.9.0
/org.apache.calcite.avatica/avatica-core = ${org.apache.calcite.avatica.version}
/org.apache.calcite/calcite-core = ${org.apache.calcite.version}
/org.apache.calcite/calcite-linq4j = ${org.apache.calcite.version}

View File

@ -1,182 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to you under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.calcite.config;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.apache.calcite.avatica.ConnectionProperty;
import org.apache.calcite.avatica.util.Casing;
import org.apache.calcite.avatica.util.Quoting;
import org.apache.calcite.model.JsonSchema;
import org.apache.calcite.sql.validate.SqlConformance;
import static org.apache.calcite.avatica.ConnectionConfigImpl.PropEnv;
import static org.apache.calcite.avatica.ConnectionConfigImpl.parse;
/**
* Properties that may be specified on the JDBC connect string.
*/
public enum CalciteConnectionProperty implements ConnectionProperty {
/** Whether to store query results in temporary tables. */
AUTO_TEMP("autoTemp", Type.BOOLEAN, false, false),
/** Whether Calcite should use materializations. */
MATERIALIZATIONS_ENABLED("materializationsEnabled", Type.BOOLEAN, true,
false),
/** Whether Calcite should create materializations. */
CREATE_MATERIALIZATIONS("createMaterializations", Type.BOOLEAN, true, false),
/** How NULL values should be sorted if neither NULLS FIRST nor NULLS LAST are
* specified. The default, HIGH, sorts NULL values the same as Oracle. */
DEFAULT_NULL_COLLATION("defaultNullCollation", Type.ENUM, NullCollation.HIGH, NullCollation.class,
true),
/** How many rows the Druid adapter should fetch at a time when executing
* "select" queries. */
DRUID_FETCH("druidFetch", Type.NUMBER, 16384, false),
/** URI of the model. */
MODEL("model", Type.STRING, null, false),
/** Lexical policy. */
LEX("lex", Type.ENUM, Lex.ORACLE, Lex.class, false),
/** Collection of built-in functions and operators. Valid values include
* "standard" and "oracle". */
FUN("fun", Type.STRING, "standard", true),
/** How identifiers are quoted.
* If not specified, value from {@link #LEX} is used. */
QUOTING("quoting", Type.ENUM, null, Quoting.class, false),
/** How identifiers are stored if they are quoted.
* If not specified, value from {@link #LEX} is used. */
QUOTED_CASING("quotedCasing", Type.ENUM, null, Casing.class, false),
/** How identifiers are stored if they are not quoted.
* If not specified, value from {@link #LEX} is used. */
UNQUOTED_CASING("unquotedCasing", Type.ENUM, null, Casing.class, false),
/** Whether identifiers are matched case-sensitively.
* If not specified, value from {@link #LEX} is used. */
CASE_SENSITIVE("caseSensitive", Type.BOOLEAN, null, false),
/** Name of initial schema. */
SCHEMA("schema", Type.STRING, null, false),
/** Schema factory.
*
* <p>The name of a class that implements
* {@link org.apache.calcite.schema.SchemaFactory}.
*
* <p>Ignored if {@link #MODEL} is specified. */
SCHEMA_FACTORY("schemaFactory", Type.PLUGIN, null, false),
/** Schema type.
*
* <p>Value may be null, "MAP", "JDBC", or "CUSTOM"
* (implicit if {@link #SCHEMA_FACTORY} is specified).
* The value "NONE" is converted to null.
*
* <p>Ignored if {@link #MODEL} is specified. */
SCHEMA_TYPE("schemaType", Type.ENUM, JsonSchema.Type.NONE, JsonSchema.Type.class, false),
/** Specifies whether Spark should be used as the engine for processing that
* cannot be pushed to the source system. If false (the default), Calcite
* generates code that implements the Enumerable interface. */
SPARK("spark", Type.BOOLEAN, false, false),
/** Time zone, for example 'gmt-3'. Default is the JVM's time zone. */
TIME_ZONE("timeZone", Type.STRING, null, false),
/** If the planner should try de-correlating as much as it is possible.
* If true (the default), Calcite de-correlates the plan. */
FORCE_DECORRELATE("forceDecorrelate", Type.BOOLEAN, true, false),
/** Type system. The name of a class that implements
* {@link org.apache.calcite.rel.type.RelDataTypeSystem} and has a public
* default constructor or an {@code INSTANCE} constant. */
TYPE_SYSTEM("typeSystem", Type.PLUGIN, null, false),
/** SQL conformance level. */
CONFORMANCE("conformance", Type.ENUM, SqlConformance.DEFAULT, SqlConformance.class, false);
private final String camelName;
private final Type type;
private final Object defaultValue;
private final Class valueClass;
private final boolean required;
private static final Map<String, CalciteConnectionProperty> NAME_TO_PROPS;
/** Deprecated; use {@link #TIME_ZONE}. */
@Deprecated // to be removed before 2.0
public static final CalciteConnectionProperty TIMEZONE = TIME_ZONE;
static {
NAME_TO_PROPS = new HashMap<>();
for (CalciteConnectionProperty p : CalciteConnectionProperty.values()) {
NAME_TO_PROPS.put(p.camelName.toUpperCase(), p);
NAME_TO_PROPS.put(p.name(), p);
}
}
CalciteConnectionProperty(String camelName, Type type, Object defaultValue,
boolean required) {
this(camelName, type, defaultValue, type.defaultValueClass(), required);
}
CalciteConnectionProperty(String camelName, Type type, Object defaultValue,
Class valueClass, boolean required) {
this.camelName = camelName;
this.type = type;
this.defaultValue = defaultValue;
this.valueClass = valueClass;
this.required = required;
assert defaultValue == null || type.valid(defaultValue, valueClass);
}
public String camelName() {
return camelName;
}
public Object defaultValue() {
return defaultValue;
}
public Type type() {
return type;
}
public boolean required() {
return required;
}
public Class valueClass() {
return valueClass;
}
public PropEnv wrap(Properties properties) {
return new PropEnv(parse(properties, NAME_TO_PROPS), this);
}
}
// End CalciteConnectionProperty.java

View File

@ -101,7 +101,7 @@ public class SQLHandler extends RequestHandlerBase implements SolrCoreAware , Pe
throw new Exception("stmt parameter cannot be null");
}
String url = "jdbc:calcitesolr:";
String url = CalciteSolrDriver.CONNECT_STRING_PREFIX;
Properties properties = new Properties();
// Add all query parameters

View File

@ -47,6 +47,10 @@ public class CalciteSolrDriver extends Driver {
@Override
public Connection connect(String url, Properties info) throws SQLException {
if(!this.acceptsURL(url)) {
return null;
}
Connection connection = super.connect(url, info);
CalciteConnection calciteConnection = (CalciteConnection) connection;
final SchemaPlus rootSchema = calciteConnection.getRootSchema();

View File

@ -1 +0,0 @@
bbddcaa253f82976cde4f7db115731e96a05c00a

View File

@ -0,0 +1 @@
c16b346eef02495f2f4b429fe04c33e526ec0229

View File

@ -1 +0,0 @@
06550935a70e0d503ae1a11a251066dbb1bc20bb

View File

@ -0,0 +1 @@
1f21f343b06236702bb8b5dad167374b7b13768b

View File

@ -1 +0,0 @@
cb161081f3cca51d7a2089df746d771a8af2a577

View File

@ -0,0 +1 @@
2be11a01e467b25e6f8925e4dfa94a77ec9746dd