You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2015/08/01 00:42:51 UTC
[14/50] [abbrv] incubator-calcite git commit: First swipe at
[CALCITE-522] (Xavier Leong)
First swipe at [CALCITE-522] (Xavier Leong)
Build static DatabaseProperties map, name change on Meta enum, cache
DatabaseProperties lookup at RemoteMeta.
Close apache/incubator-calcite#77
Project: http://git-wip-us.apache.org/repos/asf/incubator-calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-calcite/commit/93c2ff51
Tree: http://git-wip-us.apache.org/repos/asf/incubator-calcite/tree/93c2ff51
Diff: http://git-wip-us.apache.org/repos/asf/incubator-calcite/diff/93c2ff51
Branch: refs/heads/branch-release
Commit: 93c2ff517f44ca35285811130ce86f1a022956bb
Parents: a357e91
Author: Xavier Leong <le...@persistent.my>
Authored: Thu Apr 16 11:25:10 2015 +0800
Committer: Julian Hyde <jh...@apache.org>
Committed: Sat Apr 25 17:01:51 2015 -0700
----------------------------------------------------------------------
.../apache/calcite/avatica/jdbc/JdbcMeta.java | 37 ++++------
.../calcite/avatica/RemoteDriverTest.java | 43 +++++++++++
.../avatica/AvaticaDatabaseMetaData.java | 10 +--
.../java/org/apache/calcite/avatica/Meta.java | 46 ++++++++++--
.../org/apache/calcite/avatica/MetaImpl.java | 18 +----
.../calcite/avatica/remote/JsonService.java | 8 ++
.../calcite/avatica/remote/LocalService.java | 7 ++
.../calcite/avatica/remote/RemoteMeta.java | 14 ++++
.../apache/calcite/avatica/remote/Service.java | 33 ++++++++-
.../apache/calcite/jdbc/CalciteMetaImpl.java | 23 +-----
.../apache/calcite/jdbc/DatabaseProperties.java | 78 ++++++++++++++++++++
.../calcite/jdbc/CalciteRemoteDriverTest.java | 33 +++++++++
12 files changed, 276 insertions(+), 74 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/93c2ff51/avatica-server/src/main/java/org/apache/calcite/avatica/jdbc/JdbcMeta.java
----------------------------------------------------------------------
diff --git a/avatica-server/src/main/java/org/apache/calcite/avatica/jdbc/JdbcMeta.java b/avatica-server/src/main/java/org/apache/calcite/avatica/jdbc/JdbcMeta.java
index 2beeadf..e790e9f 100644
--- a/avatica-server/src/main/java/org/apache/calcite/avatica/jdbc/JdbcMeta.java
+++ b/avatica-server/src/main/java/org/apache/calcite/avatica/jdbc/JdbcMeta.java
@@ -348,34 +348,27 @@ public class JdbcMeta implements Meta {
}
}
- public String getSqlKeywords() {
+ public String getDatabaseProperties(Meta.DatabaseProperties propertyName) {
try {
- return connection.getMetaData().getSQLKeywords();
- } catch (SQLException e) {
- throw new RuntimeException(e);
- }
- }
-
- public String getNumericFunctions() {
- try {
- return connection.getMetaData().getNumericFunctions();
+ switch(propertyName) {
+ case NUMERIC_FUNCTIONS:
+ return connection.getMetaData().getNumericFunctions();
+ case SYSTEM_FUNCTIONS:
+ return connection.getMetaData().getSystemFunctions();
+ case TIME_DATE_FUNCTIONS:
+ return connection.getMetaData().getTimeDateFunctions();
+ case STRING_FUNCTIONS:
+ return connection.getMetaData().getStringFunctions();
+ case SQL_KEYWORDS:
+ return connection.getMetaData().getSQLKeywords();
+ default:
+ return "";
+ }
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
- public String getStringFunctions() {
- return null;
- }
-
- public String getSystemFunctions() {
- return null;
- }
-
- public String getTimeDateFunctions() {
- return null;
- }
-
public MetaResultSet getTables(String catalog, Pat schemaPattern,
Pat tableNamePattern, List<String> typeList) {
try {
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/93c2ff51/avatica-server/src/test/java/org/apache/calcite/avatica/RemoteDriverTest.java
----------------------------------------------------------------------
diff --git a/avatica-server/src/test/java/org/apache/calcite/avatica/RemoteDriverTest.java b/avatica-server/src/test/java/org/apache/calcite/avatica/RemoteDriverTest.java
index 3fbd8a7..7ec10d8 100644
--- a/avatica-server/src/test/java/org/apache/calcite/avatica/RemoteDriverTest.java
+++ b/avatica-server/src/test/java/org/apache/calcite/avatica/RemoteDriverTest.java
@@ -109,6 +109,49 @@ public class RemoteDriverTest {
connection.close();
}
+ @Test public void testDatabaseProperties() throws Exception {
+ final Connection connection = ljs();
+ for (Meta.DatabaseProperties p : Meta.DatabaseProperties.values()) {
+ switch(p) {
+ case NUMERIC_FUNCTIONS:
+ assertEquals("Fail to get NUMERIC_FUNCTIONS",
+ "ABS,ACOS,ASIN,ATAN,ATAN2,BITAND,BITOR,BITXOR,"
+ + "CEILING,COS,COT,DEGREES,EXP,FLOOR,LOG,LOG10,MOD,"
+ + "PI,POWER,RADIANS,RAND,ROUND,ROUNDMAGIC,SIGN,SIN,"
+ + "SQRT,TAN,TRUNCATE",
+ connection.getMetaData().getNumericFunctions());
+ break;
+ case SYSTEM_FUNCTIONS:
+ assertEquals("Fail to get SYSTEM_FUNCTIONS",
+ "DATABASE,IFNULL,USER",
+ connection.getMetaData().getSystemFunctions());
+ break;
+ case TIME_DATE_FUNCTIONS:
+ assertEquals("Fail to get TIME_DATE_FUNCTIONS",
+ "CURDATE,CURTIME,DATEDIFF,DAYNAME,DAYOFMONTH,DAYOFWEEK,"
+ + "DAYOFYEAR,HOUR,MINUTE,MONTH,MONTHNAME,NOW,QUARTER,SECOND,"
+ + "SECONDS_SINCE_MIDNIGHT,TIMESTAMPADD,TIMESTAMPDIFF,"
+ + "TO_CHAR,WEEK,YEAR",
+ connection.getMetaData().getTimeDateFunctions());
+ break;
+ case SQL_KEYWORDS:
+ assertEquals("Fail to get SQL_KEYWORDS",
+ "", //No SQL keywords return for HSQLDB
+ connection.getMetaData().getSQLKeywords());
+ break;
+ case STRING_FUNCTIONS:
+ assertEquals("Fail to get STRING_FUNCTIONS",
+ "ASCII,CHAR,CONCAT,DIFFERENCE,HEXTORAW,INSERT,LCASE,"
+ + "LEFT,LENGTH,LOCATE,LTRIM,RAWTOHEX,REPEAT,REPLACE,"
+ + "RIGHT,RTRIM,SOUNDEX,SPACE,SUBSTR,UCASE",
+ connection.getMetaData().getStringFunctions());
+ break;
+ default:
+ }
+ }
+ connection.close();
+ }
+
@Test public void testTables() throws Exception {
final Connection connection = mjs();
final ResultSet resultSet =
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/93c2ff51/avatica/src/main/java/org/apache/calcite/avatica/AvaticaDatabaseMetaData.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/AvaticaDatabaseMetaData.java b/avatica/src/main/java/org/apache/calcite/avatica/AvaticaDatabaseMetaData.java
index 915a0b4..32f7e37 100644
--- a/avatica/src/main/java/org/apache/calcite/avatica/AvaticaDatabaseMetaData.java
+++ b/avatica/src/main/java/org/apache/calcite/avatica/AvaticaDatabaseMetaData.java
@@ -182,23 +182,23 @@ public class AvaticaDatabaseMetaData implements DatabaseMetaData {
}
public String getSQLKeywords() throws SQLException {
- return connection.meta.getSqlKeywords();
+ return connection.meta.getDatabaseProperties(Meta.DatabaseProperties.SQL_KEYWORDS);
}
public String getNumericFunctions() throws SQLException {
- return connection.meta.getNumericFunctions();
+ return connection.meta.getDatabaseProperties(Meta.DatabaseProperties.NUMERIC_FUNCTIONS);
}
public String getStringFunctions() throws SQLException {
- return connection.meta.getStringFunctions();
+ return connection.meta.getDatabaseProperties(Meta.DatabaseProperties.STRING_FUNCTIONS);
}
public String getSystemFunctions() throws SQLException {
- return connection.meta.getSystemFunctions();
+ return connection.meta.getDatabaseProperties(Meta.DatabaseProperties.SYSTEM_FUNCTIONS);
}
public String getTimeDateFunctions() throws SQLException {
- return connection.meta.getTimeDateFunctions();
+ return connection.meta.getDatabaseProperties(Meta.DatabaseProperties.TIME_DATE_FUNCTIONS);
}
public String getSearchStringEscape() throws SQLException {
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/93c2ff51/avatica/src/main/java/org/apache/calcite/avatica/Meta.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/Meta.java b/avatica/src/main/java/org/apache/calcite/avatica/Meta.java
index c796d32..0c9e8ad 100644
--- a/avatica/src/main/java/org/apache/calcite/avatica/Meta.java
+++ b/avatica/src/main/java/org/apache/calcite/avatica/Meta.java
@@ -40,15 +40,15 @@ import java.util.Objects;
* that each provider must implement. This is not ideal.</p>
*/
public interface Meta {
- String getSqlKeywords();
- String getNumericFunctions();
-
- String getStringFunctions();
-
- String getSystemFunctions();
-
- String getTimeDateFunctions();
+ /**
+ * Return database static properties, deprecating single function call getNumericFunctions,
+ * getStringFunctions, getSystemFunctions, getSqlKeywords and getTimeDateFunctions
+ *
+ * @param DatabaseProperty to get
+ * @return CSV String of the supported function/keyword
+ */
+ String getDatabaseProperties(DatabaseProperties databaseProperty);
MetaResultSet getTables(String catalog,
Pat schemaPattern,
@@ -238,6 +238,36 @@ public interface Meta {
}
}
+ /** Database Properties Enum for Meta#{@link Meta#getDatabaseProperties(DatabaseProperties)}}
+ */
+ enum DatabaseProperties {
+ NUMERIC_FUNCTIONS,
+ STRING_FUNCTIONS,
+ SYSTEM_FUNCTIONS,
+ TIME_DATE_FUNCTIONS,
+ SQL_KEYWORDS;
+ }
+
+ /** POJO for Meta#{@link Meta#getDatabaseProperties(PropertyName)}}
+ *
+ * <p>Payload for {@link Service.DatabasePropertyRequest} and
+ * {@link Service.DatabasePropertyResponse}
+ *
+ * For {@link Service.Request}, the value is set to null
+ */
+ class DatabaseProperty {
+ public final DatabaseProperties databaseProperty;
+ public final String value;
+
+ @JsonCreator
+ public DatabaseProperty(
+ @JsonProperty("propertyName") DatabaseProperties dbProp,
+ @JsonProperty("value") String value) {
+ this.databaseProperty = dbProp;
+ this.value = value;
+ }
+ }
+
/** Response from execute.
*
* <p>Typically a query will have a result set and rowCount = -1;
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/93c2ff51/avatica/src/main/java/org/apache/calcite/avatica/MetaImpl.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/MetaImpl.java b/avatica/src/main/java/org/apache/calcite/avatica/MetaImpl.java
index 4371047..c310a9f 100644
--- a/avatica/src/main/java/org/apache/calcite/avatica/MetaImpl.java
+++ b/avatica/src/main/java/org/apache/calcite/avatica/MetaImpl.java
@@ -510,23 +510,7 @@ public abstract class MetaImpl implements Meta {
public static class MetaSuperTable {
}
- public String getSqlKeywords() {
- return "";
- }
-
- public String getNumericFunctions() {
- return "";
- }
-
- public String getStringFunctions() {
- return "";
- }
-
- public String getSystemFunctions() {
- return "";
- }
-
- public String getTimeDateFunctions() {
+ public String getDatabaseProperties(Meta.DatabaseProperties propName) {
return "";
}
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/93c2ff51/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonService.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonService.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonService.java
index ccc74f8..cabd6c1 100644
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonService.java
+++ b/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonService.java
@@ -249,6 +249,14 @@ public abstract class JsonService implements Service {
throw handle(e);
}
}
+
+ public DatabasePropertyResponse apply(DatabasePropertyRequest request) {
+ try {
+ return decode(apply(encode(request)), DatabasePropertyResponse.class);
+ } catch (IOException e) {
+ throw handle(e);
+ }
+ }
}
// End JsonService.java
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/93c2ff51/avatica/src/main/java/org/apache/calcite/avatica/remote/LocalService.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/LocalService.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/LocalService.java
index bea1664..c43fbc5 100644
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/LocalService.java
+++ b/avatica/src/main/java/org/apache/calcite/avatica/remote/LocalService.java
@@ -191,6 +191,13 @@ public class LocalService implements Service {
meta.connectionSync(new Meta.ConnectionHandle(request.connectionId), request.connProps);
return new ConnectionSyncResponse(connProps);
}
+
+ public DatabasePropertyResponse apply(DatabasePropertyRequest request) {
+ final Meta.DatabaseProperty dbProperty = new Meta.DatabaseProperty(
+ request.dbProps.databaseProperty,
+ meta.getDatabaseProperties(request.dbProps.databaseProperty));
+ return new DatabasePropertyResponse(dbProperty);
+ }
}
// End LocalService.java
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/93c2ff51/avatica/src/main/java/org/apache/calcite/avatica/remote/RemoteMeta.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/RemoteMeta.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/RemoteMeta.java
index 4267186..fc6e912 100644
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/RemoteMeta.java
+++ b/avatica/src/main/java/org/apache/calcite/avatica/remote/RemoteMeta.java
@@ -36,6 +36,7 @@ import java.util.Map;
class RemoteMeta extends MetaImpl {
final Service service;
final Map<String, ConnectionPropertiesImpl> propsMap = new HashMap<>();
+ private final Map<Meta.DatabaseProperties, String> dbPropMap = new HashMap<>();
public RemoteMeta(AvaticaConnection connection, Service service) {
super(connection);
@@ -61,6 +62,19 @@ class RemoteMeta extends MetaImpl {
response.ownStatement, signature0, response.firstFrame);
}
+ @Override public String getDatabaseProperties(Meta.DatabaseProperties databaseProperty) {
+ String dbProp = dbPropMap.get(databaseProperty);
+ if (dbProp == null) {
+ final Meta.DatabaseProperty dbProps =
+ new Meta.DatabaseProperty(databaseProperty, null);
+ final Service.DatabasePropertyResponse response =
+ service.apply(new Service.DatabasePropertyRequest(dbProps));
+ dbPropMap.put(databaseProperty, response.dbProps.value);
+ dbProp = response.dbProps.value;
+ }
+ return dbProp;
+ }
+
@Override public StatementHandle createStatement(ConnectionHandle ch) {
connectionSync(ch, new ConnectionPropertiesImpl()); // sync connection state if necessary
final Service.CreateStatementResponse response =
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/93c2ff51/avatica/src/main/java/org/apache/calcite/avatica/remote/Service.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/Service.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/Service.java
index 3e9f24f..1014dfd 100644
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/Service.java
+++ b/avatica/src/main/java/org/apache/calcite/avatica/remote/Service.java
@@ -42,6 +42,7 @@ public interface Service {
CloseStatementResponse apply(CloseStatementRequest request);
CloseConnectionResponse apply(CloseConnectionRequest request);
ConnectionSyncResponse apply(ConnectionSyncRequest request);
+ DatabasePropertyResponse apply(DatabasePropertyRequest request);
/** Factory that creates a {@code Service}. */
interface Factory {
@@ -70,7 +71,8 @@ public interface Service {
name = "closeStatement"),
@JsonSubTypes.Type(value = CloseConnectionRequest.class,
name = "closeConnection"),
- @JsonSubTypes.Type(value = ConnectionSyncRequest.class, name = "connectionSync") })
+ @JsonSubTypes.Type(value = ConnectionSyncRequest.class, name = "connectionSync"),
+ @JsonSubTypes.Type(value = DatabasePropertyRequest.class, name = "databaseProperties") })
abstract class Request {
abstract Response accept(Service service);
}
@@ -90,7 +92,8 @@ public interface Service {
name = "closeStatement"),
@JsonSubTypes.Type(value = CloseConnectionResponse.class,
name = "closeConnection"),
- @JsonSubTypes.Type(value = ConnectionSyncResponse.class, name = "connectionSync") })
+ @JsonSubTypes.Type(value = ConnectionSyncResponse.class, name = "connectionSync"),
+ @JsonSubTypes.Type(value = DatabasePropertyResponse.class, name = "databaseProperties") })
abstract class Response {
}
@@ -103,6 +106,21 @@ public interface Service {
}
/** Request for
+ * {@link org.apache.calcite.avatica.Meta#getDatabaseProperties()}. */
+ class DatabasePropertyRequest extends Request {
+ public final Meta.DatabaseProperty dbProps;
+
+ @JsonCreator
+ public DatabasePropertyRequest(@JsonProperty("dbProps") Meta.DatabaseProperty dbProps) {
+ this.dbProps = dbProps;
+ }
+
+ DatabasePropertyResponse accept(Service service) {
+ return service.apply(this);
+ }
+ }
+
+ /** Request for
* {@link Meta#getSchemas(String, org.apache.calcite.avatica.Meta.Pat)}. */
class SchemasRequest extends Request {
public final String catalog;
@@ -434,6 +452,17 @@ public interface Service {
this.connProps = connProps;
}
}
+
+ /** Response for
+ * {@link Meta#getDatabaseProperties(Meta.DatabaseProperty)}. */
+ class DatabasePropertyResponse extends Response {
+ public final Meta.DatabaseProperty dbProps;
+
+ @JsonCreator
+ public DatabasePropertyResponse(@JsonProperty("dbProps") Meta.DatabaseProperty dbProps) {
+ this.dbProps = dbProps;
+ }
+ }
}
// End Service.java
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/93c2ff51/core/src/main/java/org/apache/calcite/jdbc/CalciteMetaImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/jdbc/CalciteMetaImpl.java b/core/src/main/java/org/apache/calcite/jdbc/CalciteMetaImpl.java
index e08e6a2..18dd609 100644
--- a/core/src/main/java/org/apache/calcite/jdbc/CalciteMetaImpl.java
+++ b/core/src/main/java/org/apache/calcite/jdbc/CalciteMetaImpl.java
@@ -44,8 +44,6 @@ import org.apache.calcite.schema.SchemaPlus;
import org.apache.calcite.schema.Table;
import org.apache.calcite.schema.impl.AbstractTableQueryable;
import org.apache.calcite.server.CalciteServerStatement;
-import org.apache.calcite.sql.SqlJdbcFunctionCall;
-import org.apache.calcite.sql.parser.SqlParser;
import org.apache.calcite.util.Util;
import com.google.common.annotations.VisibleForTesting;
@@ -53,6 +51,7 @@ import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
+
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
@@ -210,24 +209,8 @@ public class CalciteMetaImpl extends MetaImpl {
return (CalciteConnectionImpl) connection;
}
- public String getSqlKeywords() {
- return SqlParser.create("").getMetadata().getJdbcKeywords();
- }
-
- public String getNumericFunctions() {
- return SqlJdbcFunctionCall.getNumericFunctions();
- }
-
- public String getStringFunctions() {
- return SqlJdbcFunctionCall.getStringFunctions();
- }
-
- public String getSystemFunctions() {
- return SqlJdbcFunctionCall.getSystemFunctions();
- }
-
- public String getTimeDateFunctions() {
- return SqlJdbcFunctionCall.getTimeDateFunctions();
+ @Override public String getDatabaseProperties(Meta.DatabaseProperties dbProp) {
+ return org.apache.calcite.jdbc.DatabaseProperties.getProperty(dbProp);
}
public MetaResultSet getTables(String catalog,
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/93c2ff51/core/src/main/java/org/apache/calcite/jdbc/DatabaseProperties.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/jdbc/DatabaseProperties.java b/core/src/main/java/org/apache/calcite/jdbc/DatabaseProperties.java
new file mode 100644
index 0000000..59c231b
--- /dev/null
+++ b/core/src/main/java/org/apache/calcite/jdbc/DatabaseProperties.java
@@ -0,0 +1,78 @@
+/*
+ * 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.jdbc;
+
+import org.apache.calcite.avatica.AvaticaDatabaseMetaData;
+import org.apache.calcite.avatica.Meta;
+import org.apache.calcite.sql.SqlJdbcFunctionCall;
+import org.apache.calcite.sql.parser.SqlParser;
+
+import java.util.HashMap;
+import java.util.Map;
+
+
+/**
+ * Definition of a database static properties.
+ * {@link Meta.PropertyName} enumerates current database properties,
+ * supporting some of the static String properties return via
+ * {@link AvaticaDatabaseMetaData}
+ */
+public enum DatabaseProperties {
+ NUMERIC_FUNCTIONS(Meta.DatabaseProperties.NUMERIC_FUNCTIONS,
+ SqlJdbcFunctionCall.getNumericFunctions()),
+ STRING_FUNCTIONS(Meta.DatabaseProperties.STRING_FUNCTIONS,
+ SqlJdbcFunctionCall.getStringFunctions()),
+ SYSTEM_FUNCTIONS(Meta.DatabaseProperties.SYSTEM_FUNCTIONS,
+ SqlJdbcFunctionCall.getSystemFunctions()),
+ TIME_DATE_FUNCTIONS(Meta.DatabaseProperties.TIME_DATE_FUNCTIONS,
+ SqlJdbcFunctionCall.getTimeDateFunctions()),
+ SQL_KEYWORDS(Meta.DatabaseProperties.SQL_KEYWORDS,
+ SqlParser.create("").getMetadata().getJdbcKeywords());
+
+ private Meta.DatabaseProperties databaseProperty;
+ private String defaultValue;
+ private static final Map<Meta.DatabaseProperties, DatabaseProperties> NAME_TO_PROPS;
+
+ static {
+ NAME_TO_PROPS = new HashMap<Meta.DatabaseProperties, DatabaseProperties>();
+ for (DatabaseProperties p : DatabaseProperties.values()) {
+ NAME_TO_PROPS.put(p.databaseProperty, p);
+ }
+ }
+
+ DatabaseProperties(Meta.DatabaseProperties dbProp, String defaultValue) {
+ this.databaseProperty = dbProp;
+ this.defaultValue = defaultValue;
+ }
+
+ public Meta.DatabaseProperties databaseProperty() {
+ return this.databaseProperty;
+ }
+
+ public String defaultValue() {
+ return this.defaultValue;
+ }
+
+ public static String getProperty(Meta.DatabaseProperties dbProps) {
+ final DatabaseProperties dbProp = NAME_TO_PROPS.get(dbProps);
+ if (dbProp != null) {
+ return dbProp.defaultValue;
+ } else {
+ return "";
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/93c2ff51/core/src/test/java/org/apache/calcite/jdbc/CalciteRemoteDriverTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/jdbc/CalciteRemoteDriverTest.java b/core/src/test/java/org/apache/calcite/jdbc/CalciteRemoteDriverTest.java
index f0b3b93..db71914 100644
--- a/core/src/test/java/org/apache/calcite/jdbc/CalciteRemoteDriverTest.java
+++ b/core/src/test/java/org/apache/calcite/jdbc/CalciteRemoteDriverTest.java
@@ -194,6 +194,39 @@ public class CalciteRemoteDriverTest {
assertThat(connection.isClosed(), is(true));
}
+ @Test public void testMetaFunctionsLocal() throws Exception {
+ final Connection connection =
+ CalciteAssert.hr().connect();
+ assertThat(connection.isClosed(), is(false));
+ for (DatabaseProperties p : DatabaseProperties.values()) {
+ switch(p.databaseProperty()) {
+ case NUMERIC_FUNCTIONS:
+ assertThat(connection.getMetaData().getNumericFunctions(),
+ is(p.defaultValue()));
+ break;
+ case SYSTEM_FUNCTIONS:
+ assertThat(connection.getMetaData().getSystemFunctions(),
+ is(p.defaultValue()));
+ break;
+ case TIME_DATE_FUNCTIONS:
+ assertThat(connection.getMetaData().getTimeDateFunctions(),
+ is(p.defaultValue()));
+ break;
+ case SQL_KEYWORDS:
+ assertThat(connection.getMetaData().getSQLKeywords(),
+ is(p.defaultValue()));
+ break;
+ case STRING_FUNCTIONS:
+ assertThat(connection.getMetaData().getStringFunctions(),
+ is(p.defaultValue()));
+ break;
+ default:
+ }
+ }
+ connection.close();
+ assertThat(connection.isClosed(), is(true));
+ }
+
@Test public void testRemoteCatalogs() throws Exception {
CalciteAssert.hr().with(REMOTE_CONNECTION_FACTORY)
.metaData(GET_CATALOGS)