You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by an...@apache.org on 2019/01/26 17:08:50 UTC
[beam] branch master updated: [SQL] Fix CREATE EXTERNAL TABLE in
non-default schema (#7627)
This is an automated email from the ASF dual-hosted git repository.
anton pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git
The following commit(s) were added to refs/heads/master by this push:
new 5b46b02 [SQL] Fix CREATE EXTERNAL TABLE in non-default schema (#7627)
5b46b02 is described below
commit 5b46b02b49ca1c5c18682427a5a4a25596ca4287
Author: Gleb Kanterov <ka...@users.noreply.github.com>
AuthorDate: Sat Jan 26 18:08:37 2019 +0100
[SQL] Fix CREATE EXTERNAL TABLE in non-default schema (#7627)
* [SQL] Fix CREATE EXTERNAL TABLE in non-default schema
---
.../sql/impl/parser/SqlCreateExternalTable.java | 2 +-
.../extensions/sql/impl/parser/SqlDdlNodes.java | 13 ++++--
.../sdk/extensions/sql/impl/BeamSqlEnvTest.java | 49 ++++++++++++++++++++++
.../extensions/sql/impl/parser/BeamDDLTest.java | 14 +++++++
4 files changed, 73 insertions(+), 5 deletions(-)
diff --git a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/parser/SqlCreateExternalTable.java b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/parser/SqlCreateExternalTable.java
index 1ff2276..7041e33 100644
--- a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/parser/SqlCreateExternalTable.java
+++ b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/parser/SqlCreateExternalTable.java
@@ -151,7 +151,7 @@ public class SqlCreateExternalTable extends SqlCreate implements SqlExecutableSt
private Table toTable() {
return Table.builder()
.type(SqlDdlNodes.getString(type))
- .name(name.getSimple())
+ .name(SqlDdlNodes.name(name))
.schema(columnList.stream().collect(toSchema()))
.comment(SqlDdlNodes.getString(comment))
.location(SqlDdlNodes.getString(location))
diff --git a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/parser/SqlDdlNodes.java b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/parser/SqlDdlNodes.java
index c508502..d9ceeb5 100644
--- a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/parser/SqlDdlNodes.java
+++ b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/parser/SqlDdlNodes.java
@@ -48,20 +48,25 @@ public class SqlDdlNodes {
/** Returns the schema in which to create an object. */
static Pair<CalciteSchema, String> schema(
CalcitePrepare.Context context, boolean mutable, SqlIdentifier id) {
- final String name;
final List<String> path;
if (id.isSimple()) {
path = context.getDefaultSchemaPath();
- name = id.getSimple();
} else {
path = Util.skipLast(id.names);
- name = Util.last(id.names);
}
CalciteSchema schema = mutable ? context.getMutableRootSchema() : context.getRootSchema();
for (String p : path) {
schema = schema.getSubSchema(p, true);
}
- return Pair.of(schema, name);
+ return Pair.of(schema, name(id));
+ }
+
+ static String name(SqlIdentifier id) {
+ if (id.isSimple()) {
+ return id.getSimple();
+ } else {
+ return Util.last(id.names);
+ }
}
static @Nullable String getString(SqlNode n) {
diff --git a/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/impl/BeamSqlEnvTest.java b/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/impl/BeamSqlEnvTest.java
new file mode 100644
index 0000000..b812e4c
--- /dev/null
+++ b/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/impl/BeamSqlEnvTest.java
@@ -0,0 +1,49 @@
+/*
+ * 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.beam.sdk.extensions.sql.impl;
+
+import static org.junit.Assert.assertEquals;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import org.apache.beam.sdk.extensions.sql.meta.provider.test.TestTableProvider;
+import org.junit.Test;
+
+/** Tests for {@link BeamSqlEnv}. */
+public class BeamSqlEnvTest {
+
+ @Test
+ public void testCreateExternalTableInNestedTableProvider() throws Exception {
+ TestTableProvider root = new TestTableProvider();
+ TestTableProvider nested = new TestTableProvider();
+ TestTableProvider anotherOne = new TestTableProvider();
+
+ BeamSqlEnv env = BeamSqlEnv.withTableProvider(root);
+ env.addSchema("nested", nested);
+ env.addSchema("anotherOne", anotherOne);
+
+ Connection connection = env.connection;
+ connection.createStatement().execute("CREATE EXTERNAL TABLE nested.person (id INT) TYPE test");
+ connection.createStatement().execute("INSERT INTO nested.person(id) VALUES (1), (2), (6)");
+
+ ResultSet rs = connection.createStatement().executeQuery("SELECT SUM(id) FROM nested.person");
+ rs.next();
+
+ assertEquals(9, rs.getInt(1));
+ }
+}
diff --git a/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/impl/parser/BeamDDLTest.java b/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/impl/parser/BeamDDLTest.java
index bf77c14..53e05f7 100644
--- a/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/impl/parser/BeamDDLTest.java
+++ b/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/impl/parser/BeamDDLTest.java
@@ -163,6 +163,20 @@ public class BeamDDLTest {
}
@Test
+ public void testParseCreateExternalTable_withDatabase() throws Exception {
+ TestTableProvider rootProvider = new TestTableProvider();
+ TestTableProvider testProvider = new TestTableProvider();
+
+ BeamSqlEnv env = BeamSqlEnv.withTableProvider(rootProvider);
+ env.addSchema("test", testProvider);
+
+ assertNull(testProvider.getTables().get("person"));
+ env.executeDdl("CREATE EXTERNAL TABLE test.person (id INT) TYPE text");
+
+ assertNotNull(testProvider.getTables().get("person"));
+ }
+
+ @Test
public void testParseDropTable() throws Exception {
TestTableProvider tableProvider = new TestTableProvider();
BeamSqlEnv env = BeamSqlEnv.withTableProvider(tableProvider);