You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by pb...@apache.org on 2018/10/17 19:25:00 UTC
[29/32] phoenix git commit: PHOENIX-4957 Add NO_INDEX hint so
IndexTool uses the data table instead of index table
PHOENIX-4957 Add NO_INDEX hint so IndexTool uses the data table instead of index table
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/99e6cd4a
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/99e6cd4a
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/99e6cd4a
Branch: refs/heads/4.14-cdh5.11
Commit: 99e6cd4a62734307f29110f4e12a3f0e96b6e24c
Parents: 9fbfb45
Author: Vincent Poon <vi...@apache.org>
Authored: Tue Oct 9 00:38:09 2018 +0100
Committer: Pedro Boado <pb...@apache.org>
Committed: Wed Oct 17 20:23:34 2018 +0100
----------------------------------------------------------------------
.../phoenix/compile/PostIndexDDLCompiler.java | 2 +-
.../compile/PostIndexDDLCompilerTest.java | 68 ++++++++++++++++++++
2 files changed, 69 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/phoenix/blob/99e6cd4a/phoenix-core/src/main/java/org/apache/phoenix/compile/PostIndexDDLCompiler.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/PostIndexDDLCompiler.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/PostIndexDDLCompiler.java
index b3cedf6..1bd3aed 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/compile/PostIndexDDLCompiler.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/PostIndexDDLCompiler.java
@@ -104,7 +104,7 @@ public class PostIndexDDLCompiler {
updateStmtStr.append("UPSERT /*+ NO_INDEX */ INTO ").append(schemaName.length() == 0 ? "" : '"' + schemaName + "\".").append('"').append(tableName).append("\"(")
.append(indexColumns).append(") ");
final StringBuilder selectQueryBuilder = new StringBuilder();
- selectQueryBuilder.append(" SELECT ").append(dataColumns).append(" FROM ")
+ selectQueryBuilder.append(" SELECT /*+ NO_INDEX */ ").append(dataColumns).append(" FROM ")
.append(schemaName.length() == 0 ? "" : '"' + schemaName + "\".").append('"').append(dataTable.getTableName().getString()).append('"');
this.selectQuery = selectQueryBuilder.toString();
updateStmtStr.append(this.selectQuery);
http://git-wip-us.apache.org/repos/asf/phoenix/blob/99e6cd4a/phoenix-core/src/test/java/org/apache/phoenix/compile/PostIndexDDLCompilerTest.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/test/java/org/apache/phoenix/compile/PostIndexDDLCompilerTest.java b/phoenix-core/src/test/java/org/apache/phoenix/compile/PostIndexDDLCompilerTest.java
new file mode 100644
index 0000000..9df2fec
--- /dev/null
+++ b/phoenix-core/src/test/java/org/apache/phoenix/compile/PostIndexDDLCompilerTest.java
@@ -0,0 +1,68 @@
+/*
+ * 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.phoenix.compile;
+
+import static org.junit.Assert.assertEquals;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+
+import org.apache.phoenix.jdbc.PhoenixConnection;
+import org.apache.phoenix.jdbc.PhoenixStatement;
+import org.apache.phoenix.query.BaseConnectionlessQueryTest;
+import org.apache.phoenix.schema.PTable;
+import org.apache.phoenix.schema.PTableKey;
+import org.apache.phoenix.schema.TableRef;
+import org.junit.Test;
+
+public class PostIndexDDLCompilerTest extends BaseConnectionlessQueryTest {
+
+ @Test
+ public void testHintInSubquery() throws Exception {
+ try (Connection conn = DriverManager.getConnection(getUrl())) {
+ setupTables(conn);
+ PhoenixStatement stmt = conn.createStatement().unwrap(PhoenixStatement.class);
+ String query = "UPSERT /*+ NO_INDEX */ INTO T(k, v1) SELECT /*+ NO_INDEX */ k,v1 FROM T WHERE v1 = '4'";
+ MutationPlan plan = stmt.compileMutation(query);
+ assertEquals("T", plan.getQueryPlan().getTableRef().getTable().getTableName().getString());
+ query = "UPSERT INTO T(k, v1) SELECT /*+ NO_INDEX */ k,v1 FROM T WHERE v1 = '4'";
+ plan = stmt.compileMutation(query);
+ // TODO the following should actually use data table T if we supported hints in subqueries
+ assertEquals("IDX", plan.getQueryPlan().getTableRef().getTable().getTableName().getString());
+ }
+ }
+
+ @Test
+ public void testCompile() throws Exception {
+ try (Connection conn = DriverManager.getConnection(getUrl())) {
+ setupTables(conn);
+ PhoenixConnection pConn = conn.unwrap(PhoenixConnection.class);
+ PTable pDataTable = pConn.getTable(new PTableKey(null, "T"));
+ PostIndexDDLCompiler compiler = new PostIndexDDLCompiler(pConn, new TableRef(pDataTable));
+ MutationPlan plan = compiler.compile(pConn.getTable(new PTableKey(null, "IDX")));
+ assertEquals("T", plan.getQueryPlan().getTableRef().getTable().getTableName().getString());
+ }
+ }
+
+ private void setupTables(Connection conn) throws SQLException {
+ conn.createStatement().execute("CREATE TABLE T (k VARCHAR NOT NULL PRIMARY KEY, v1 CHAR(15), v2 VARCHAR)");
+ conn.createStatement().execute("CREATE INDEX IDX ON T(v1, v2)");
+ }
+
+}