[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

Reply via email to