[CARBONDATA-3140]Block create like table command in carbon Why this PR? when like table is created using carbon table as source table, and the new table is dropped, it deletes the source table in spark-2.1 and works fine in other. Blocking the create like command for carbon table
This closes #2967 Project: http://git-wip-us.apache.org/repos/asf/carbondata/repo Commit: http://git-wip-us.apache.org/repos/asf/carbondata/commit/19e0a498 Tree: http://git-wip-us.apache.org/repos/asf/carbondata/tree/19e0a498 Diff: http://git-wip-us.apache.org/repos/asf/carbondata/diff/19e0a498 Branch: refs/heads/branch-1.5 Commit: 19e0a4988bc8265cc7fd3e485074372c0a5761d9 Parents: 3ebb6e5 Author: akashrn5 <akashnilu...@gamil.com> Authored: Fri Nov 30 16:01:34 2018 +0530 Committer: ravipesala <ravi.pes...@gmail.com> Committed: Fri Nov 30 21:57:21 2018 +0530 ---------------------------------------------------------------------- .../carbondata/core/memory/UnsafeMemoryManager.java | 2 +- .../createTable/TestCreateTableIfNotExists.scala | 14 ++++++++++++++ .../spark/sql/execution/strategy/DDLStrategy.scala | 9 +++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/carbondata/blob/19e0a498/core/src/main/java/org/apache/carbondata/core/memory/UnsafeMemoryManager.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/core/memory/UnsafeMemoryManager.java b/core/src/main/java/org/apache/carbondata/core/memory/UnsafeMemoryManager.java index 493ec0b..c59698f 100644 --- a/core/src/main/java/org/apache/carbondata/core/memory/UnsafeMemoryManager.java +++ b/core/src/main/java/org/apache/carbondata/core/memory/UnsafeMemoryManager.java @@ -129,7 +129,7 @@ public class UnsafeMemoryManager { memoryBlock = MemoryAllocator.HEAP.allocate(memoryRequested); if (LOGGER.isDebugEnabled()) { LOGGER.debug(String - .format("Creating onheap working Memory block (%d) with size: ", memoryBlock.size())); + .format("Creating onheap working Memory block with size: (%d)", memoryBlock.size())); } } return memoryBlock; http://git-wip-us.apache.org/repos/asf/carbondata/blob/19e0a498/integration/spark-common-test/src/test/scala/org/apache/carbondata/spark/testsuite/createTable/TestCreateTableIfNotExists.scala ---------------------------------------------------------------------- diff --git a/integration/spark-common-test/src/test/scala/org/apache/carbondata/spark/testsuite/createTable/TestCreateTableIfNotExists.scala b/integration/spark-common-test/src/test/scala/org/apache/carbondata/spark/testsuite/createTable/TestCreateTableIfNotExists.scala index a8fcf12..8f7afe4 100644 --- a/integration/spark-common-test/src/test/scala/org/apache/carbondata/spark/testsuite/createTable/TestCreateTableIfNotExists.scala +++ b/integration/spark-common-test/src/test/scala/org/apache/carbondata/spark/testsuite/createTable/TestCreateTableIfNotExists.scala @@ -20,11 +20,15 @@ package org.apache.carbondata.spark.testsuite.createTable import org.apache.spark.sql.test.util.QueryTest import org.scalatest.BeforeAndAfterAll +import org.apache.carbondata.common.exceptions.sql.MalformedCarbonCommandException + class TestCreateTableIfNotExists extends QueryTest with BeforeAndAfterAll { override def beforeAll { sql("use default") sql("drop table if exists test") + sql("drop table if exists sourceTable") + sql("drop table if exists targetTable") } test("test create table if not exists") { @@ -39,9 +43,19 @@ class TestCreateTableIfNotExists extends QueryTest with BeforeAndAfterAll { } } + test("test blocking of create table like command") { + sql("create table sourceTable(name string) stored by 'carbondata'") + val exception = intercept[MalformedCarbonCommandException] { + sql("create table targetTable like sourceTable") + } + assert(exception.getMessage.contains("Operation not allowed, when source table is carbon table")) + } + override def afterAll { sql("use default") sql("drop table if exists test") + sql("drop table if exists sourceTable") + sql("drop table if exists targetTable") } } http://git-wip-us.apache.org/repos/asf/carbondata/blob/19e0a498/integration/spark2/src/main/scala/org/apache/spark/sql/execution/strategy/DDLStrategy.scala ---------------------------------------------------------------------- diff --git a/integration/spark2/src/main/scala/org/apache/spark/sql/execution/strategy/DDLStrategy.scala b/integration/spark2/src/main/scala/org/apache/spark/sql/execution/strategy/DDLStrategy.scala index 6e183b2..4cc62c6 100644 --- a/integration/spark2/src/main/scala/org/apache/spark/sql/execution/strategy/DDLStrategy.scala +++ b/integration/spark2/src/main/scala/org/apache/spark/sql/execution/strategy/DDLStrategy.scala @@ -92,6 +92,15 @@ class DDLStrategy(sparkSession: SparkSession) extends SparkStrategy { ExecutedCommandExec( CarbonDropTableCommand(ifNotExists, identifier.database, identifier.table.toLowerCase)) :: Nil + case createLikeTable: CreateTableLikeCommand => + val isCarbonTable = CarbonEnv.getInstance(sparkSession).carbonMetastore + .tableExists(createLikeTable.sourceTable)(sparkSession) + if (isCarbonTable) { + throw new MalformedCarbonCommandException( + "Operation not allowed, when source table is carbon table") + } else { + ExecutedCommandExec(createLikeTable) :: Nil + } case InsertIntoCarbonTable(relation: CarbonDatasourceHadoopRelation, partition, child: LogicalPlan, overwrite, _) => ExecutedCommandExec(CarbonInsertIntoCommand(relation, child, overwrite, partition)) :: Nil