You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ja...@apache.org on 2018/11/10 20:59:06 UTC
[03/22] phoenix git commit: PHOENIX-4971 Drop index will execute
successfully using Incorrect name of parent tables
PHOENIX-4971 Drop index will execute successfully using Incorrect name of parent tables
Signed-off-by: Geoffrey Jacoby <gj...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/527098ed
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/527098ed
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/527098ed
Branch: refs/heads/omid2
Commit: 527098ed621d62ba18fc19099ec67d8b29e027f4
Parents: 3903ad7
Author: Jaanai <cl...@gmail.com>
Authored: Sun Oct 28 19:10:51 2018 +0800
Committer: Geoffrey Jacoby <gj...@apache.org>
Committed: Sun Oct 28 15:28:39 2018 -0700
----------------------------------------------------------------------
.../phoenix/end2end/index/DropMetadataIT.java | 23 +++++++++++++++++++-
.../phoenix/exception/SQLExceptionCode.java | 2 ++
.../apache/phoenix/schema/MetaDataClient.java | 15 +++++++++++++
3 files changed, 39 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/phoenix/blob/527098ed/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/DropMetadataIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/DropMetadataIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/DropMetadataIT.java
index b92ed8d..3c670c5 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/DropMetadataIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/DropMetadataIT.java
@@ -18,9 +18,12 @@
package org.apache.phoenix.end2end.index;
import static org.apache.phoenix.util.TestUtil.HBASE_NATIVE_SCHEMA_NAME;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import java.sql.Connection;
import java.sql.DriverManager;
+import java.sql.SQLException;
import java.util.Properties;
import org.apache.hadoop.hbase.HColumnDescriptor;
@@ -29,6 +32,7 @@ import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.phoenix.end2end.ParallelStatsDisabledIT;
+import org.apache.phoenix.exception.SQLExceptionCode;
import org.apache.phoenix.jdbc.PhoenixConnection;
import org.apache.phoenix.query.QueryServices;
import org.apache.phoenix.util.PropertiesUtil;
@@ -56,7 +60,24 @@ public class DropMetadataIT extends ParallelStatsDisabledIT {
String url = QueryUtil.getConnectionUrl(props, config, PRINCIPAL);
return DriverManager.getConnection(url, props);
}
-
+
+ @Test
+ public void testDropIndexTableHasSameNameWithDataTable() {
+ String tableName = generateUniqueName();
+ String indexName = "IDX_" + tableName;
+ try (Connection conn = DriverManager.getConnection(getUrl())) {
+ String createTable = "CREATE TABLE " + tableName + " (id varchar not null primary key, col integer)";
+ conn.createStatement().execute(createTable);
+ String createIndex = "CREATE INDEX " + indexName + " on " + tableName + "(col)";
+ conn.createStatement().execute(createIndex);
+ String dropIndex = "DROP INDEX " + indexName + " on " + indexName;
+ conn.createStatement().execute(dropIndex);
+ fail("should not execute successfully");
+ } catch (SQLException e) {
+ assertTrue(SQLExceptionCode.PARENT_TABLE_NOT_FOUND.getErrorCode() == e.getErrorCode());
+ }
+ }
+
@Test
public void testDropViewKeepsHTable() throws Exception {
Connection conn = getConnection();
http://git-wip-us.apache.org/repos/asf/phoenix/blob/527098ed/phoenix-core/src/main/java/org/apache/phoenix/exception/SQLExceptionCode.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/exception/SQLExceptionCode.java b/phoenix-core/src/main/java/org/apache/phoenix/exception/SQLExceptionCode.java
index d84857d..6696521 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/exception/SQLExceptionCode.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/exception/SQLExceptionCode.java
@@ -184,6 +184,8 @@ public enum SQLExceptionCode {
INVALID_REPLAY_AT(533, "42910", "Value of REPLAY_AT cannot be less than zero."),
UNEQUAL_SCN_AND_BUILD_INDEX_AT(534, "42911", "If both specified, values of CURRENT_SCN and BUILD_INDEX_AT must be equal."),
ONLY_INDEX_UPDATABLE_AT_SCN(535, "42912", "Only an index may be updated when the BUILD_INDEX_AT property is specified"),
+ PARENT_TABLE_NOT_FOUND(536, "42913", "Can't drop the index because the parent table in the DROP statement is incorrect."),
+
/**
* HBase and Phoenix specific implementation defined sub-classes.
* Column family related exceptions.
http://git-wip-us.apache.org/repos/asf/phoenix/blob/527098ed/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java b/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java
index 66e8baa..6563c40 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java
@@ -23,6 +23,7 @@ import static org.apache.hadoop.hbase.HColumnDescriptor.TTL;
import static org.apache.phoenix.coprocessor.BaseScannerRegionObserver.ANALYZE_TABLE;
import static org.apache.phoenix.coprocessor.BaseScannerRegionObserver.RUN_UPDATE_STATS_ASYNC_ATTRIB;
import static org.apache.phoenix.exception.SQLExceptionCode.INSUFFICIENT_MULTI_TENANT_COLUMNS;
+import static org.apache.phoenix.exception.SQLExceptionCode.PARENT_TABLE_NOT_FOUND;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.APPEND_ONLY_SCHEMA;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.ARG_POSITION;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.ARRAY_SIZE;
@@ -3036,6 +3037,20 @@ public class MetaDataClient {
}
MutationState dropTable(String schemaName, String tableName, String parentTableName, PTableType tableType,
boolean ifExists, boolean cascade, boolean skipAddingParentColumns) throws SQLException {
+ // Checking the parent table whether exists
+ String fullTableName = SchemaUtil.getTableName(schemaName, tableName);
+ try {
+ PTable ptable = connection.getTable(new PTableKey(connection.getTenantId(), fullTableName));
+ if (parentTableName != null &&!parentTableName.equals(ptable.getParentTableName().getString())) {
+ throw new SQLExceptionInfo.Builder(PARENT_TABLE_NOT_FOUND)
+ .setSchemaName(schemaName).setTableName(tableName).build().buildException();
+ }
+ } catch (TableNotFoundException e) {
+ if (!ifExists) {
+ throw e;
+ }
+ }
+
connection.rollback();
boolean wasAutoCommit = connection.getAutoCommit();
PName tenantId = connection.getTenantId();