[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153096877
  
--- Diff: 
integration/spark-common-test/src/test/scala/org/apache/carbondata/spark/testsuite/describeTable/TestDescribeTable.scala
 ---
@@ -34,7 +34,7 @@ class TestDescribeTable extends QueryTest with 
BeforeAndAfterAll {
 sql("CREATE TABLE Desc2(Dec2Col1 BigInt, Dec2Col2 String, Dec2Col3 
Bigint, Dec2Col4 Decimal) stored by 'carbondata'")
   }
 
-  test("test describe table") {
+  ignore("test describe table") {
--- End diff --

Although describe table is working But it is showing some format mismatch. 
This is among of few of the pending issues like Subquery processing. Will fix 
this soon.


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153096178
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/parser/CarbonSparkSqlParser.scala
 ---
@@ -69,12 +71,11 @@ class CarbonSparkSqlParser(conf: SQLConf, sparkSession: 
SparkSession) extends Ab
   }
 }
 
-class CarbonSqlAstBuilder(conf: SQLConf) extends SparkSqlAstBuilder(conf) {
-
-  val parser = new CarbonSpark2SqlParser
+class CarbonHelperqlAstBuilder(conf: SQLConf, parser: 
CarbonSpark2SqlParser)
--- End diff --

Done


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153096152
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/parser/CarbonSparkSqlParser.scala
 ---
@@ -184,10 +126,86 @@ class CarbonSqlAstBuilder(conf: SQLConf) extends 
SparkSqlAstBuilder(conf) {
 }
   }
 
-  private def needToConvertToLowerCase(key: String): Boolean = {
-val noConvertList = Array("LIST_INFO", "RANGE_INFO")
-!noConvertList.exists(x => x.equalsIgnoreCase(key));
+  def getPropertyKeyValues(ctx: TablePropertyListContext): Map[String, 
String]
+  = {
+Option(ctx).map(visitPropertyKeyValues)
+  .getOrElse(Map.empty)
   }
 
+  def createCarbontable(tableHeader: CreateTableHeaderContext,
+  skewSpecContext: SkewSpecContext,
+  bucketSpecContext: BucketSpecContext,
+  partitionColumns: ColTypeListContext,
+  columns : ColTypeListContext,
+  tablePropertyList : TablePropertyListContext) : LogicalPlan = {
+// val parser = new CarbonSpark2SqlParser
+
+val (name, temp, ifNotExists, external) = 
visitCreateTableHeader(tableHeader)
+// TODO: implement temporary tables
+if (temp) {
+  throw new ParseException(
+"CREATE TEMPORARY TABLE is not supported yet. " +
+"Please use CREATE TEMPORARY VIEW as an alternative.", tableHeader)
+}
+if (skewSpecContext != null) {
+  operationNotAllowed("CREATE TABLE ... SKEWED BY", skewSpecContext)
+}
+if (bucketSpecContext != null) {
+  operationNotAllowed("CREATE TABLE ... CLUSTERED BY", 
bucketSpecContext)
+}
+val partitionByStructFields = 
Option(partitionColumns).toSeq.flatMap(visitColTypeList)
+val partitionerFields = partitionByStructFields.map { structField =>
+  PartitionerField(structField.name, 
Some(structField.dataType.toString), null)
+}
+val cols = Option(columns).toSeq.flatMap(visitColTypeList)
+val properties = getPropertyKeyValues(tablePropertyList)
+
+// Ensuring whether no duplicate name is used in table definition
+val colNames = cols.map(_.name)
+if (colNames.length != colNames.distinct.length) {
+  val duplicateColumns = colNames.groupBy(identity).collect {
+case (x, ys) if ys.length > 1 => "\"" + x + "\""
+  }
+  operationNotAllowed(s"Duplicated column names found in table 
definition of $name: " +
--- End diff --

Its same like earlier.


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153096166
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/parser/CarbonSparkSqlParser.scala
 ---
@@ -184,10 +126,86 @@ class CarbonSqlAstBuilder(conf: SQLConf) extends 
SparkSqlAstBuilder(conf) {
 }
   }
 
-  private def needToConvertToLowerCase(key: String): Boolean = {
-val noConvertList = Array("LIST_INFO", "RANGE_INFO")
-!noConvertList.exists(x => x.equalsIgnoreCase(key));
+  def getPropertyKeyValues(ctx: TablePropertyListContext): Map[String, 
String]
+  = {
+Option(ctx).map(visitPropertyKeyValues)
+  .getOrElse(Map.empty)
   }
 
+  def createCarbontable(tableHeader: CreateTableHeaderContext,
--- End diff --

Ok


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153096184
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/parser/CarbonSparkSqlParser.scala
 ---
@@ -18,16 +18,17 @@ package org.apache.spark.sql.parser
 
 import scala.collection.mutable
 
-import org.apache.spark.sql.{CarbonEnv, SparkSession}
-import org.apache.spark.sql.catalyst.parser.{AbstractSqlParser, 
ParseException, SqlBaseParser}
+import org.apache.spark.sql.{CarbonClassReflectionUtils, CarbonEnv, 
SparkSession}
+import org.apache.spark.sql.catalyst.parser.{AbstractSqlParser, 
AstBuilder, ParseException, SqlBaseParser}
 import org.apache.spark.sql.catalyst.parser.ParserUtils._
-import 
org.apache.spark.sql.catalyst.parser.SqlBaseParser.{CreateTableContext, 
TablePropertyListContext}
+import org.apache.spark.sql.catalyst.parser.SqlBaseParser._
 import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan
+import org.apache.spark.sql.execution.command.{CarbonCreateTableCommand, 
PartitionerField, TableModel}
 import org.apache.spark.sql.execution.SparkSqlAstBuilder
-import org.apache.spark.sql.execution.command.{BucketFields, 
CarbonCreateTableCommand, Field, PartitionerField, TableModel}
 import org.apache.spark.sql.internal.{SQLConf, VariableSubstitution}
+import org.apache.spark.util.Utils
--- End diff --

Done


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153096126
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/util/AlterTableUtil.scala ---
@@ -21,10 +21,11 @@ import scala.collection.JavaConverters._
 import scala.collection.mutable.ListBuffer
 
 import org.apache.spark.SparkConf
-import org.apache.spark.sql.{CarbonEnv, SparkSession}
+import org.apache.spark.sql.{CarbonEnv, CarbonSession, SparkSession}
 import org.apache.spark.sql.catalyst.TableIdentifier
-import org.apache.spark.sql.hive.{CarbonRelation, CarbonSessionState}
+import org.apache.spark.sql.hive.{CarbonRelation, HiveExternalCatalog}
 import org.apache.spark.sql.hive.HiveExternalCatalog._
+import org.apache.spark.sql.internal.SessionState
--- End diff --

Ok


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153096045
  
--- Diff: integration/spark2/src/main/spark2.1/CarbonSessionState.scala ---
@@ -24,16 +24,18 @@ import 
org.apache.spark.sql.catalyst.catalog.{FunctionResourceLoader, GlobalTemp
 import org.apache.spark.sql.catalyst.expressions.{PredicateSubquery, 
ScalarSubquery}
 import org.apache.spark.sql.catalyst.optimizer.Optimizer
 import org.apache.spark.sql.catalyst.parser.ParserInterface
+import 
org.apache.spark.sql.catalyst.parser.SqlBaseParser.CreateTableContext
 import org.apache.spark.sql.catalyst.plans.logical.{Filter, LogicalPlan, 
SubqueryAlias}
-import org.apache.spark.sql.execution.SparkOptimizer
+import org.apache.spark.sql.execution.{SparkOptimizer, SparkSqlAstBuilder}
 import org.apache.spark.sql.execution.datasources._
 import org.apache.spark.sql.execution.strategy.{CarbonLateDecodeStrategy, 
DDLStrategy}
 import org.apache.spark.sql.internal.SQLConf
 import org.apache.spark.sql.optimizer.CarbonLateDecodeRule
-import org.apache.spark.sql.parser.CarbonSparkSqlParser
+import org.apache.spark.sql.parser.{CarbonHelperqlAstBuilder, 
CarbonSpark2SqlParser, CarbonSparkSqlParser}
 
 import org.apache.carbondata.core.datamap.DataMapStoreManager
 import org.apache.carbondata.core.metadata.AbsoluteTableIdentifier
+import org.apache.carbondata.core.util.CarbonProperties
--- End diff --

Removed


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153096083
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/util/CarbonClassReflectionUtils.scala
 ---
@@ -0,0 +1,186 @@
+/*
+ * 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.spark.sql
+
+import scala.reflect.runtime._
+import scala.reflect.runtime.universe._
+
+import org.apache.spark.SparkContext
+import org.apache.spark.sql.catalyst.TableIdentifier
+import org.apache.spark.sql.catalyst.analysis.UnresolvedRelation
+import org.apache.spark.sql.catalyst.parser.AstBuilder
+import org.apache.spark.sql.catalyst.plans.logical.{LogicalPlan, Project, 
SubqueryAlias}
+import org.apache.spark.sql.internal.{SessionState, SQLConf}
+import org.apache.spark.sql.parser.CarbonSpark2SqlParser
+import org.apache.spark.util.Utils
+
+import org.apache.carbondata.common.logging.LogServiceFactory
+
+/**
+ * Reflection APIs
+ */
+
+object CarbonClassReflectionUtils {
+
+  private val LOGGER = 
LogServiceFactory.getLogService(this.getClass.getCanonicalName)
+
+  private val rm = universe.runtimeMirror(getClass.getClassLoader)
+
+  /**
+   * Returns the field val from a object through reflection.
+   * @param name - name of the field being retrieved.
+   * @param obj - Object from which the field has to be retrieved.
+   * @tparam T
+   * @return
+   */
+  def getField[T: TypeTag: reflect.ClassTag](name: String, obj: T): Any = {
+val im = rm.reflect(obj)
+
+im.symbol.typeSignature.members.find(
+  _.name.toString.equals(name)).map(
+  l => im.reflectField(l.asTerm).get.asInstanceOf[LogicalPlan]
+).getOrElse(null)
+  }
+
+  def hasField[T: TypeTag: reflect.ClassTag](name: String, obj: T): 
Boolean = {
--- End diff --

Done


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153095995
  
--- Diff: integration/spark2/src/main/spark2.2/CarbonSessionState.scala ---
@@ -0,0 +1,256 @@
+/*
+ * 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.spark.sql.hive
+
+import org.apache.hadoop.conf.Configuration
+import org.apache.spark.sql._
+import org.apache.spark.sql.catalyst.TableIdentifier
+import org.apache.spark.sql.catalyst.analysis.{Analyzer, FunctionRegistry}
+import org.apache.spark.sql.catalyst.catalog._
+import org.apache.spark.sql.catalyst.expressions.ScalarSubquery
+import org.apache.spark.sql.catalyst.optimizer.Optimizer
+import org.apache.spark.sql.catalyst.parser.ParserInterface
+import 
org.apache.spark.sql.catalyst.parser.SqlBaseParser.{CreateHiveTableContext, 
CreateTableContext}
+import org.apache.spark.sql.catalyst.plans.logical.{Filter, LogicalPlan, 
SubqueryAlias}
+import org.apache.spark.sql.catalyst.rules.Rule
+import org.apache.spark.sql.execution.datasources.{FindDataSourceTable, 
LogicalRelation, PreWriteCheck, ResolveSQLOnFile, _}
+import org.apache.spark.sql.execution.strategy.{CarbonLateDecodeStrategy, 
DDLStrategy}
+import org.apache.spark.sql.execution.{SparkOptimizer, SparkSqlAstBuilder}
+import org.apache.spark.sql.hive.client.HiveClient
+import org.apache.spark.sql.internal.{SQLConf, SessionState}
+import org.apache.spark.sql.optimizer.CarbonLateDecodeRule
+import org.apache.spark.sql.parser.{CarbonHelperqlAstBuilder, 
CarbonSpark2SqlParser, CarbonSparkSqlParser}
+
+import org.apache.carbondata.core.datamap.DataMapStoreManager
+import org.apache.carbondata.core.metadata.AbsoluteTableIdentifier
+
+/**
+ * This class will have carbon catalog and refresh the relation from cache 
if the carbontable in
+ * carbon catalog is not same as cached carbon relation's carbon table
+ *
+ * @param externalCatalog
+ * @param globalTempViewManager
+ * @param sparkSession
+ * @param functionResourceLoader
+ * @param functionRegistry
+ * @param conf
+ * @param hadoopConf
+ */
+class CarbonSessionCatalog(
+externalCatalog: HiveExternalCatalog,
+globalTempViewManager: GlobalTempViewManager,
+functionRegistry: FunctionRegistry,
+sparkSession: SparkSession,
+conf: SQLConf,
+hadoopConf: Configuration,
+parser: ParserInterface,
+functionResourceLoader: FunctionResourceLoader)
+  extends HiveSessionCatalog(
+externalCatalog,
+globalTempViewManager,
+new HiveMetastoreCatalog(sparkSession),
+functionRegistry,
+conf,
+hadoopConf,
+parser,
+functionResourceLoader
+  ) {
+
+  lazy val carbonEnv = {
+val env = new CarbonEnv
+env.init(sparkSession)
+env
+  }
+
+  def getCarbonEnv() : CarbonEnv = {
+carbonEnv
+  }
+
+
+  private def refreshRelationFromCache(identifier: TableIdentifier,
+  carbonDatasourceHadoopRelation: CarbonDatasourceHadoopRelation): 
Boolean = {
+var isRefreshed = false
+val storePath = CarbonEnv.getInstance(sparkSession).storePath
+carbonEnv.carbonMetastore.
+  checkSchemasModifiedTimeAndReloadTables(storePath)
+
+val tableMeta = carbonEnv.carbonMetastore
+  
.getTableFromMetadataCache(carbonDatasourceHadoopRelation.carbonTable.getDatabaseName,
+carbonDatasourceHadoopRelation.carbonTable.getFactTableName)
+if (tableMeta.isEmpty || (tableMeta.isDefined &&
+  
tableMeta.get.carbonTable.getTableLastUpdatedTime !=
+  
carbonDatasourceHadoopRelation.carbonTable.getTableLastUpdatedTime)) {
+  refreshTable(identifier)
+  DataMapStoreManager.getInstance().
+clearDataMap(AbsoluteTableIdentifier.from(storePath,
+  identifier.database.getOrElse("default"), identifier.table))
+  

[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153096010
  
--- Diff: integration/spark2/src/main/spark2.1/CarbonSessionState.scala ---
@@ -150,9 +153,8 @@ class CarbonSessionState(sparkSession: SparkSession) 
extends HiveSessionState(sp
 DataSourceAnalysis(conf) ::
 (if (conf.runSQLonFile) {
   new ResolveDataSource(sparkSession) :: Nil
-} else {
-  Nil
-})
+} else {  Nil }
+  )
--- End diff --

Ok


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153096029
  
--- Diff: integration/spark2/src/main/spark2.1/CarbonSessionState.scala ---
@@ -84,8 +86,8 @@ class CarbonSessionCatalog(
 var toRefreshRelation = false
 rtnRelation match {
   case SubqueryAlias(_,
-  LogicalRelation(carbonDatasourceHadoopRelation: 
CarbonDatasourceHadoopRelation, _, _),
-  _) =>
+  LogicalRelation(carbonDatasourceHadoopRelation: 
CarbonDatasourceHadoopRelation, _, _),
+  _) =>
--- End diff --

Done


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153096069
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/util/CarbonClassReflectionUtils.scala
 ---
@@ -0,0 +1,186 @@
+/*
+ * 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.spark.sql
+
+import scala.reflect.runtime._
+import scala.reflect.runtime.universe._
+
+import org.apache.spark.SparkContext
+import org.apache.spark.sql.catalyst.TableIdentifier
+import org.apache.spark.sql.catalyst.analysis.UnresolvedRelation
+import org.apache.spark.sql.catalyst.parser.AstBuilder
+import org.apache.spark.sql.catalyst.plans.logical.{LogicalPlan, Project, 
SubqueryAlias}
+import org.apache.spark.sql.internal.{SessionState, SQLConf}
+import org.apache.spark.sql.parser.CarbonSpark2SqlParser
+import org.apache.spark.util.Utils
+
+import org.apache.carbondata.common.logging.LogServiceFactory
+
+/**
+ * Reflection APIs
+ */
+
+object CarbonClassReflectionUtils {
--- End diff --

Ok


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153096000
  
--- Diff: integration/spark2/src/main/spark2.1/CarbonSessionState.scala ---
@@ -207,3 +213,26 @@ class CarbonOptimizer(
 super.execute(transFormedPlan)
   }
 }
+
+class CarbonSqlAstBuilder(conf: SQLConf, parser: CarbonSpark2SqlParser) 
extends
+  SparkSqlAstBuilder(conf) {
+
+  val helper = new CarbonHelperqlAstBuilder(conf, parser)
+
+  override def visitCreateTable(ctx: CreateTableContext): LogicalPlan = {
+val fileStorage = helper.getFileStorage(ctx.createFileFormat)
+
+if (fileStorage.equalsIgnoreCase("'carbondata'") ||
+fileStorage.equalsIgnoreCase("'org.apache.carbondata.format'")) {
+  helper
+.createCarbontable(ctx.createTableHeader,
--- End diff --

Done


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153095958
  
--- Diff: 
integration/spark2/src/test/scala/org/apache/spark/carbondata/restructure/AlterTableValidationTestCase.scala
 ---
@@ -85,71 +85,75 @@ class AlterTableValidationTestCase extends 
Spark2QueryTest with BeforeAndAfterAl
   "('DICTIONARY_EXCLUDE'='nodict', 'DEFAULT.VALUE.NoDict'= 'abcd')")
 checkAnswer(sql("select distinct(nodict) from restructure"), 
Row("abcd"))
   }
-  test("test add timestamp no dictionary column") {
-sql(
-  "alter table restructure add columns(tmpstmp timestamp) 
TBLPROPERTIES ('DEFAULT.VALUE" +
-  ".tmpstmp'= '17-01-2007')")
-checkAnswer(sql("select distinct(tmpstmp) from restructure"),
-  Row(new java.sql.Timestamp(107, 0, 17, 0, 0, 0, 0)))
-checkExistence(sql("desc restructure"), true, "tmpstmptimestamp")
-  }
-
-  test("test add timestamp direct dictionary column") {
-sql(
-  "alter table restructure add columns(tmpstmp1 timestamp) 
TBLPROPERTIES ('DEFAULT.VALUE" +
-  ".tmpstmp1'= '17-01-3007','DICTIONARY_INCLUDE'='tmpstmp1')")
-checkAnswer(sql("select distinct(tmpstmp1) from restructure"),
-  Row(null))
-checkExistence(sql("desc restructure"), true, "tmpstmptimestamp")
-  }
-
-  test("test add timestamp column and load as dictionary") {
-sql("create table table1(name string) stored by 'carbondata'")
-sql("insert into table1 select 'abc'")
-sql("alter table table1 add columns(tmpstmp timestamp) TBLPROPERTIES " 
+
-"('DEFAULT.VALUE.tmpstmp'='17-01-3007','DICTIONARY_INCLUDE'= 
'tmpstmp')")
-sql("insert into table1 select 'name','17-01-2007'")
-checkAnswer(sql("select * from table1"),
-  Seq(Row("abc",null),
-Row("name",Timestamp.valueOf("2007-01-17 00:00:00.0"
-  }
-
-  test("test add msr column") {
-sql(
-  "alter table restructure add columns(msrField 
decimal(5,2))TBLPROPERTIES ('DEFAULT.VALUE" +
-  ".msrfield'= '123.45')")
-checkExistence(sql("desc restructure"), true, "msrfielddecimal(5,2)")
-val output = sql("select msrField from restructure").collect
-checkAnswer(sql("select distinct(msrField) from restructure"),
-  Row(new BigDecimal("123.45").setScale(2, RoundingMode.HALF_UP)))
-  }
-
-  test("test add all datatype supported dictionary column") {
-sql(
-  "alter table restructure add columns(strfld string, datefld date, 
tptfld timestamp, " +
-  "shortFld smallInt, " +
-  "intFld int, longFld bigint, dblFld double,dcml 
decimal(5,4))TBLPROPERTIES" +
-  
"('DICTIONARY_INCLUDE'='datefld,shortFld,intFld,longFld,dblFld,dcml', 
'DEFAULT.VALUE" +
-  ".dblFld'= '12345')")
-checkAnswer(sql("select distinct(dblFld) from restructure"),
-  Row(java.lang.Double.parseDouble("12345")))
-checkExistence(sql("desc restructure"), true, "strfldstring")
-checkExistence(sql("desc restructure"), true, "dateflddate")
-checkExistence(sql("desc restructure"), true, "tptfldtimestamp")
-checkExistence(sql("desc restructure"), true, "shortfldsmallint")
-checkExistence(sql("desc restructure"), true, "intfldint")
-checkExistence(sql("desc restructure"), true, "longfldbigint")
-checkExistence(sql("desc restructure"), true, "dblflddouble")
-checkExistence(sql("desc restructure"), true, "dcmldecimal(5,4)")
-  }
-
-  test(
-"test add decimal without scale and precision, default precision and 
scale (10,0) should be " +
-"used")
-  {
-sql("alter table restructure add columns(dcmldefault decimal)")
-checkExistence(sql("desc restructure"), true, 
"dcmldefaultdecimal(10,0)")
-  }
+//  test("test add timestamp no dictionary column") {
--- End diff --

Ok


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153095978
  
--- Diff: pom.xml ---
@@ -509,6 +501,8 @@
 
${basedir}/integration/hive/src/main/java
 
${basedir}/integration/presto/src/main/scala
 
${basedir}/integration/presto/src/main/java
+
${basedir}/streaming/src/main/java
+
${basedir}/streaming/src/main/java
--- End diff --

Removed


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153095841
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/parser/CarbonSpark2SqlParser.scala
 ---
@@ -177,7 +213,24 @@ class CarbonSpark2SqlParser extends CarbonDDLSqlParser 
{
 
   protected lazy val table: Parser[UnresolvedRelation] = {
 rep1sep(attributeName, ".") ~ opt(ident) ^^ {
-  case tableIdent ~ alias => UnresolvedRelation(tableIdent, alias)
+  case tableIdent ~ alias => UnresolvedRelation(tableIdent)
+}
+  }
+
+  protected lazy val aliasTable: Parser[(UnresolvedRelation, List[String], 
Option[String],
+TableIdentifier)] = {
+rep1sep(attributeName, ".") ~ opt(ident) ^^ {
+  case tableIdent ~ alias =>
+
+val tableIdentifier: TableIdentifier = 
toTableIdentifier(tableIdent)
+val localAlias: Option[String] = alias
--- End diff --

Done


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153095195
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/parser/CarbonSpark2SqlParser.scala
 ---
@@ -17,19 +17,23 @@
 
 package org.apache.spark.sql.parser
 
+import java.lang.reflect.InvocationTargetException
--- End diff --

Ok


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread jackylk
Github user jackylk commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153095637
  
--- Diff: 
integration/spark-common-test/src/test/scala/org/apache/carbondata/spark/testsuite/describeTable/TestDescribeTable.scala
 ---
@@ -34,7 +34,7 @@ class TestDescribeTable extends QueryTest with 
BeforeAndAfterAll {
 sql("CREATE TABLE Desc2(Dec2Col1 BigInt, Dec2Col2 String, Dec2Col3 
Bigint, Dec2Col4 Decimal) stored by 'carbondata'")
   }
 
-  test("test describe table") {
+  ignore("test describe table") {
--- End diff --

Why ignore this?


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153095165
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/internal/CarbonSqlConf.scala
 ---
@@ -32,76 +32,6 @@ class CarbonSQLConf(sparkSession: SparkSession) {
   /**
* To initialize dynamic param defaults along with usage docs
*/
-  def addDefaultCarbonParams(): Unit = {
-val ENABLE_UNSAFE_SORT =
-  SQLConfigBuilder(CarbonCommonConstants.ENABLE_UNSAFE_SORT)
-.doc("To enable/ disable unsafe sort.")
-.booleanConf
-
.createWithDefault(carbonProperties.getProperty(CarbonCommonConstants.ENABLE_UNSAFE_SORT,
-  CarbonCommonConstants.ENABLE_UNSAFE_SORT_DEFAULT).toBoolean)
-val CARBON_CUSTOM_BLOCK_DISTRIBUTION =
-  
SQLConfigBuilder(CarbonCommonConstants.CARBON_CUSTOM_BLOCK_DISTRIBUTION)
-.doc("To enable/ disable carbon custom block distribution.")
-.booleanConf
-.createWithDefault(carbonProperties
-  
.getProperty(CarbonCommonConstants.CARBON_CUSTOM_BLOCK_DISTRIBUTION,
-
CarbonCommonConstants.CARBON_CUSTOM_BLOCK_DISTRIBUTION_DEFAULT).toBoolean)
-val BAD_RECORDS_LOGGER_ENABLE =
-  
SQLConfigBuilder(CarbonLoadOptionConstants.CARBON_OPTIONS_BAD_RECORDS_LOGGER_ENABLE)
-.doc("To enable/ disable carbon bad record logger.")
-.booleanConf
-.createWithDefault(CarbonLoadOptionConstants
-  .CARBON_OPTIONS_BAD_RECORDS_LOGGER_ENABLE_DEFAULT.toBoolean)
-val BAD_RECORDS_ACTION =
-  
SQLConfigBuilder(CarbonLoadOptionConstants.CARBON_OPTIONS_BAD_RECORDS_ACTION)
-.doc("To configure the bad records action.")
-.stringConf
-.createWithDefault(carbonProperties
-  .getProperty(CarbonCommonConstants.CARBON_BAD_RECORDS_ACTION,
-CarbonCommonConstants.CARBON_BAD_RECORDS_ACTION_DEFAULT))
-val IS_EMPTY_DATA_BAD_RECORD =
-  
SQLConfigBuilder(CarbonLoadOptionConstants.CARBON_OPTIONS_IS_EMPTY_DATA_BAD_RECORD)
-.doc("Property to decide weather empty data to be considered bad/ 
good record.")
-.booleanConf
-
.createWithDefault(CarbonLoadOptionConstants.CARBON_OPTIONS_IS_EMPTY_DATA_BAD_RECORD_DEFAULT
-  .toBoolean)
-val SORT_SCOPE =
-  SQLConfigBuilder(CarbonLoadOptionConstants.CARBON_OPTIONS_SORT_SCOPE)
-.doc("Property to specify sort scope.")
-.stringConf
-
.createWithDefault(carbonProperties.getProperty(CarbonCommonConstants.LOAD_SORT_SCOPE,
-  CarbonCommonConstants.LOAD_SORT_SCOPE_DEFAULT))
-val BATCH_SORT_SIZE_INMB =
-  
SQLConfigBuilder(CarbonLoadOptionConstants.CARBON_OPTIONS_BATCH_SORT_SIZE_INMB)
-.doc("Property to specify batch sort size in MB.")
-.stringConf
-.createWithDefault(carbonProperties
-  .getProperty(CarbonCommonConstants.LOAD_BATCH_SORT_SIZE_INMB,
-CarbonCommonConstants.LOAD_BATCH_SORT_SIZE_INMB_DEFAULT))
-val SINGLE_PASS =
-  
SQLConfigBuilder(CarbonLoadOptionConstants.CARBON_OPTIONS_SINGLE_PASS)
-.doc("Property to enable/disable single_pass.")
-.booleanConf
-
.createWithDefault(CarbonLoadOptionConstants.CARBON_OPTIONS_SINGLE_PASS_DEFAULT.toBoolean)
-val BAD_RECORD_PATH =
-  
SQLConfigBuilder(CarbonLoadOptionConstants.CARBON_OPTIONS_BAD_RECORD_PATH)
-.doc("Property to configure the bad record location.")
-.stringConf
-
.createWithDefault(carbonProperties.getProperty(CarbonCommonConstants.CARBON_BADRECORDS_LOC,
-  CarbonCommonConstants.CARBON_BADRECORDS_LOC_DEFAULT_VAL))
-val GLOBAL_SORT_PARTITIONS =
-  
SQLConfigBuilder(CarbonLoadOptionConstants.CARBON_OPTIONS_GLOBAL_SORT_PARTITIONS)
-.doc("Property to configure the global sort partitions.")
-.stringConf
-.createWithDefault(carbonProperties
-  .getProperty(CarbonCommonConstants.LOAD_GLOBAL_SORT_PARTITIONS,
-CarbonCommonConstants.LOAD_GLOBAL_SORT_PARTITIONS_DEFAULT))
-val DATEFORMAT =
-  SQLConfigBuilder(CarbonLoadOptionConstants.CARBON_OPTIONS_DATEFORMAT)
-.doc("Property to configure data format for date type columns.")
-.stringConf
-
.createWithDefault(CarbonLoadOptionConstants.CARBON_OPTIONS_DATEFORMAT_DEFAULT)
-  }
--- End diff --

These are not being referred any more


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153095183
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/optimizer/CarbonLateDecodeRule.scala
 ---
@@ -38,7 +38,6 @@ import org.apache.carbondata.core.stats.QueryStatistic
 import org.apache.carbondata.core.util.CarbonTimeStatisticsFactory
 import org.apache.carbondata.spark.CarbonAliasDecoderRelation
 
-
--- End diff --

Ok


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153095139
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonRelation.scala
 ---
@@ -172,7 +172,13 @@ case class CarbonRelation(
   }
 
   // TODO: Use data from the footers.
-  override lazy val statistics = Statistics(sizeInBytes = this.sizeInBytes)
+  // TODO For 2.1
+  //  override lazy val statistics = Statistics(sizeInBytes = 
this.sizeInBytes)
+  // Todo for 2.2
+  //  override def computeStats(conf: SQLConf): Statistics = 
Statistics(sizeInBytes =
+  //  this.sizeInBytes)
+
+  // override lazy val statistics = Statistics(sizeInBytes = 
this.sizeInBytes)
--- End diff --

Will resolve it as soon as possible. 


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153095114
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonHiveMetaStore.scala
 ---
@@ -153,8 +153,11 @@ class CarbonHiveMetaStore extends CarbonFileMetastore {
 val dbName = oldTableIdentifier.getDatabaseName
 val tableName = oldTableIdentifier.getTableName
 val schemaParts = 
CarbonUtil.convertToMultiGsonStrings(wrapperTableInfo, "=", "'", "")
-
sparkSession.sessionState.asInstanceOf[CarbonSessionState].metadataHive.runSqlHive(
-  s"ALTER TABLE $dbName.$tableName SET SERDEPROPERTIES($schemaParts)")
+val hiveClient = 
sparkSession.asInstanceOf[CarbonSession].sharedState.externalCatalog
+  .asInstanceOf[HiveExternalCatalog].client
+hiveClient.runSqlHive(s"ALTER TABLE $dbName.$tableName SET 
SERDEPROPERTIES($schemaParts)")
+
+sparkSession.sessionState
--- End diff --

Removed


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153095100
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonFileMetastore.scala
 ---
@@ -115,18 +121,37 @@ class CarbonFileMetastore extends CarbonMetaStore {
 lookupRelation(TableIdentifier(tableName, dbName))(sparkSession)
   }
 
+  val rm = universe.runtimeMirror(getClass.getClassLoader)
+
+  def getField[T: TypeTag : reflect.ClassTag](name: String, obj: T): 
CatalogTable = {
+val im = rm.reflect(obj)
+val sym = im.symbol.typeSignature.member(TermName(name))
+val tableMeta = im.reflectMethod(sym.asMethod).apply()
+tableMeta.asInstanceOf[CatalogTable]
+  }
+
   override def lookupRelation(tableIdentifier: TableIdentifier)
 (sparkSession: SparkSession): LogicalPlan = {
 val database = tableIdentifier.database.getOrElse(
   sparkSession.catalog.currentDatabase)
 val relation = 
sparkSession.sessionState.catalog.lookupRelation(tableIdentifier) match {
   case SubqueryAlias(_,
-  LogicalRelation(carbonDatasourceHadoopRelation: 
CarbonDatasourceHadoopRelation, _, _),
-  _) =>
+  LogicalRelation(carbonDatasourceHadoopRelation: 
CarbonDatasourceHadoopRelation, _, _)) =>
 carbonDatasourceHadoopRelation.carbonRelation
   case LogicalRelation(
   carbonDatasourceHadoopRelation: CarbonDatasourceHadoopRelation, _, 
_) =>
 carbonDatasourceHadoopRelation.carbonRelation
+  case SubqueryAlias(_, c: CatalogRelation) if 
sparkSession.version.contains("2.2") &&
+   getField("tableMeta", c)
+ 
.asInstanceOf[CatalogTable].provider
+ .isDefined &&
+   getField("tableMeta", c)
+ 
.asInstanceOf[CatalogTable].provider.get
+ 
.equals("org.apache.spark.sql.CarbonSource") =>
--- End diff --

Done


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153095079
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonFileMetastore.scala
 ---
@@ -115,18 +121,37 @@ class CarbonFileMetastore extends CarbonMetaStore {
 lookupRelation(TableIdentifier(tableName, dbName))(sparkSession)
   }
 
+  val rm = universe.runtimeMirror(getClass.getClassLoader)
+
+  def getField[T: TypeTag : reflect.ClassTag](name: String, obj: T): 
CatalogTable = {
+val im = rm.reflect(obj)
+val sym = im.symbol.typeSignature.member(TermName(name))
+val tableMeta = im.reflectMethod(sym.asMethod).apply()
+tableMeta.asInstanceOf[CatalogTable]
--- End diff --

Ok


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153094856
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonFileMetastore.scala
 ---
@@ -115,18 +121,37 @@ class CarbonFileMetastore extends CarbonMetaStore {
 lookupRelation(TableIdentifier(tableName, dbName))(sparkSession)
   }
 
+  val rm = universe.runtimeMirror(getClass.getClassLoader)
+
+  def getField[T: TypeTag : reflect.ClassTag](name: String, obj: T): 
CatalogTable = {
--- End diff --

Ok


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153094754
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonAnalysisRules.scala
 ---
@@ -201,8 +237,10 @@ case class CarbonIUDAnalysisRule(sparkSession: 
SparkSession) extends Rule[Logica
   override def apply(logicalplan: LogicalPlan): LogicalPlan = {
 
 logicalplan transform {
-  case UpdateTable(t, cols, sel, where) => processUpdateQuery(t, cols, 
sel, where)
-  case DeleteRecords(statement, table) => 
processDeleteRecordsQuery(statement, table)
+  case UpdateTable(t, cols, sel, alias, where) => 
processUpdateQuery(t, cols, sel, alias, where)
+  case DeleteRecords(statement, alias, table) => 
processDeleteRecordsQuery(statement,
+alias,
+table)
--- End diff --

Done


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153094607
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonAnalysisRules.scala
 ---
@@ -143,52 +168,63 @@ case class CarbonIUDAnalysisRule(sparkSession: 
SparkSession) extends Rule[Logica
   selectPlan
 }
 val finalPlan = if (filter.length > 0) {
-  val alias = table.alias.getOrElse("")
   var transformed: Boolean = false
   // Create a dummy projection to include filter conditions
   var newPlan: LogicalPlan = null
   if (table.tableIdentifier.database.isDefined) {
 newPlan = parser.parsePlan("select * from  " +
-   table.tableIdentifier.database.getOrElse("") + "." +
-   table.tableIdentifier.table + " " + alias + " " + filter)
+   
table.tableIdentifier.database.getOrElse("") + "." +
+   table.tableIdentifier.table + " " + 
alias.getOrElse("") + " " +
+   filter)
   }
   else {
 newPlan = parser.parsePlan("select * from  " +
-   table.tableIdentifier.table + " " + alias + " " + filter)
+   table.tableIdentifier.table + " " + 
alias.getOrElse("") + " " +
+   filter)
   }
   newPlan transform {
-case UnresolvedRelation(t, Some(a))
-  if !transformed && t == table.tableIdentifier && a == alias =>
+case CarbonUnresolvedRelation(t)
+  if !transformed && t == table.tableIdentifier =>
   transformed = true
-  // Add the filter condition of update statement  on destination 
table
-  SubqueryAlias(alias, updatedSelectPlan, 
Option(table.tableIdentifier))
+
+  val subqueryAlias = CarbonClassReflectionUtils
+.getSubqueryAlias(sparkSession, alias, updatedSelectPlan, 
Some(table.tableIdentifier))
+  subqueryAlias
   }
 } else {
   updatedSelectPlan
 }
 val tid = 
CarbonTableIdentifierImplicit.toTableIdentifier(Seq(table.tableIdentifier.toString()))
 val tidSeq = Seq(GetDB.getDatabaseName(tid.database, sparkSession))
-val destinationTable = UnresolvedRelation(table.tableIdentifier, 
table.alias)
+val destinationTable = CarbonClassReflectionUtils
+  .getUnresolvedRelation(table.tableIdentifier, alias)
+
 ProjectForUpdate(destinationTable, columns, Seq(finalPlan))
   }
 
-  def processDeleteRecordsQuery(selectStmt: String, table: 
UnresolvedRelation): LogicalPlan = {
-   val tidSeq = Seq(GetDB.getDatabaseName(table.tableIdentifier.database, 
sparkSession),
- table.tableIdentifier.table)
+
+  def processDeleteRecordsQuery(selectStmt: String,
+  alias: Option[String],
+  table: UnresolvedRelation): LogicalPlan = {
+val tidSeq = Seq(GetDB.getDatabaseName(table.tableIdentifier.database, 
sparkSession),
+  table.tableIdentifier.table)
 var addedTupleId = false
 val parsePlan = parser.parsePlan(selectStmt)
+
 val selectPlan = parsePlan transform {
   case relation: UnresolvedRelation
 if table.tableIdentifier == relation.tableIdentifier && 
!addedTupleId =>
 addedTupleId = true
 val tupleId = 
UnresolvedAlias(Alias(UnresolvedFunction("getTupleId",
   Seq.empty, isDistinct = false), "tupleId")())
-val alias = table.alias match {
-  case Some(alias) => Some(table.alias.toSeq)
+
+val localalias = alias match {
--- End diff --

Done


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153094548
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonAnalysisRules.scala
 ---
@@ -143,52 +168,63 @@ case class CarbonIUDAnalysisRule(sparkSession: 
SparkSession) extends Rule[Logica
   selectPlan
 }
 val finalPlan = if (filter.length > 0) {
-  val alias = table.alias.getOrElse("")
   var transformed: Boolean = false
   // Create a dummy projection to include filter conditions
   var newPlan: LogicalPlan = null
   if (table.tableIdentifier.database.isDefined) {
 newPlan = parser.parsePlan("select * from  " +
-   table.tableIdentifier.database.getOrElse("") + "." +
-   table.tableIdentifier.table + " " + alias + " " + filter)
+   
table.tableIdentifier.database.getOrElse("") + "." +
+   table.tableIdentifier.table + " " + 
alias.getOrElse("") + " " +
+   filter)
   }
   else {
 newPlan = parser.parsePlan("select * from  " +
-   table.tableIdentifier.table + " " + alias + " " + filter)
+   table.tableIdentifier.table + " " + 
alias.getOrElse("") + " " +
+   filter)
   }
   newPlan transform {
-case UnresolvedRelation(t, Some(a))
-  if !transformed && t == table.tableIdentifier && a == alias =>
+case CarbonUnresolvedRelation(t)
+  if !transformed && t == table.tableIdentifier =>
   transformed = true
-  // Add the filter condition of update statement  on destination 
table
-  SubqueryAlias(alias, updatedSelectPlan, 
Option(table.tableIdentifier))
+
+  val subqueryAlias = CarbonClassReflectionUtils
+.getSubqueryAlias(sparkSession, alias, updatedSelectPlan, 
Some(table.tableIdentifier))
+  subqueryAlias
   }
 } else {
   updatedSelectPlan
 }
 val tid = 
CarbonTableIdentifierImplicit.toTableIdentifier(Seq(table.tableIdentifier.toString()))
 val tidSeq = Seq(GetDB.getDatabaseName(tid.database, sparkSession))
-val destinationTable = UnresolvedRelation(table.tableIdentifier, 
table.alias)
+val destinationTable = CarbonClassReflectionUtils
+  .getUnresolvedRelation(table.tableIdentifier, alias)
--- End diff --

Done


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153094509
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonAnalysisRules.scala
 ---
@@ -143,52 +168,63 @@ case class CarbonIUDAnalysisRule(sparkSession: 
SparkSession) extends Rule[Logica
   selectPlan
 }
 val finalPlan = if (filter.length > 0) {
-  val alias = table.alias.getOrElse("")
   var transformed: Boolean = false
   // Create a dummy projection to include filter conditions
   var newPlan: LogicalPlan = null
   if (table.tableIdentifier.database.isDefined) {
 newPlan = parser.parsePlan("select * from  " +
-   table.tableIdentifier.database.getOrElse("") + "." +
-   table.tableIdentifier.table + " " + alias + " " + filter)
+   
table.tableIdentifier.database.getOrElse("") + "." +
+   table.tableIdentifier.table + " " + 
alias.getOrElse("") + " " +
+   filter)
   }
   else {
 newPlan = parser.parsePlan("select * from  " +
-   table.tableIdentifier.table + " " + alias + " " + filter)
+   table.tableIdentifier.table + " " + 
alias.getOrElse("") + " " +
+   filter)
   }
   newPlan transform {
-case UnresolvedRelation(t, Some(a))
-  if !transformed && t == table.tableIdentifier && a == alias =>
+case CarbonUnresolvedRelation(t)
+  if !transformed && t == table.tableIdentifier =>
   transformed = true
-  // Add the filter condition of update statement  on destination 
table
-  SubqueryAlias(alias, updatedSelectPlan, 
Option(table.tableIdentifier))
+
+  val subqueryAlias = CarbonClassReflectionUtils
+.getSubqueryAlias(sparkSession, alias, updatedSelectPlan, 
Some(table.tableIdentifier))
+  subqueryAlias
--- End diff --

Done


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153094428
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonAnalysisRules.scala
 ---
@@ -143,52 +246,250 @@ case class CarbonIUDAnalysisRule(sparkSession: 
SparkSession) extends Rule[Logica
   selectPlan
 }
 val finalPlan = if (filter.length > 0) {
-  val alias = table.alias.getOrElse("")
   var transformed: Boolean = false
   // Create a dummy projection to include filter conditions
   var newPlan: LogicalPlan = null
   if (table.tableIdentifier.database.isDefined) {
 newPlan = parser.parsePlan("select * from  " +
-   table.tableIdentifier.database.getOrElse("") + "." +
-   table.tableIdentifier.table + " " + alias + " " + filter)
+   
table.tableIdentifier.database.getOrElse("") + "." +
+   table.tableIdentifier.table + " " + 
alias.getOrElse("") + " " +
+   filter)
--- End diff --

Done


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153094337
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonAnalysisRules.scala
 ---
@@ -95,12 +107,23 @@ case class CarbonIUDAnalysisRule(sparkSession: 
SparkSession) extends Rule[Logica
 def prepareTargetReleation(relation: UnresolvedRelation): 
SubqueryAlias = {
   val tupleId = UnresolvedAlias(Alias(UnresolvedFunction("getTupleId",
 Seq.empty, isDistinct = false), "tupleId")())
+
+  val localAlias = alias match {
+case Some(a) => Some(alias.toSeq)
+case _ => None
+  }
   val projList = Seq(
-UnresolvedAlias(UnresolvedStar(Option(table.alias.toSeq))), 
tupleId)
-  // include tuple id and rest of the required columns in subqury
-  SubqueryAlias(table.alias.getOrElse(""),
-Project(projList, relation), Option(table.tableIdentifier))
+UnresolvedAlias(UnresolvedStar(localAlias)), tupleId)
+
+  val subqueryAlias =
+CarbonClassReflectionUtils
+  .getSubqueryAlias(sparkSession,
+alias,
+Project(projList, relation),
+Some(table.tableIdentifier))
+  subqueryAlias
--- End diff --

Done


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153094267
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonAnalysisRules.scala
 ---
@@ -95,12 +107,23 @@ case class CarbonIUDAnalysisRule(sparkSession: 
SparkSession) extends Rule[Logica
 def prepareTargetReleation(relation: UnresolvedRelation): 
SubqueryAlias = {
   val tupleId = UnresolvedAlias(Alias(UnresolvedFunction("getTupleId",
 Seq.empty, isDistinct = false), "tupleId")())
+
+  val localAlias = alias match {
+case Some(a) => Some(alias.toSeq)
+case _ => None
+  }
--- End diff --

Done


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153076600
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonAnalysisRules.scala
 ---
@@ -58,6 +57,8 @@ object CarbonPreInsertionCasts extends Rule[LogicalPlan] {
 )
 }
 if (child.output.size >= relation.carbonRelation.output.size) {
+  sparkVersion21 = !CarbonClassReflectionUtils.hasField("query", 
InsertIntoCarbonTable)
--- End diff --

In some places the SparkContext or SparkSession is directly not available. 
Therefore used the approach of accessing the field and if not present the 
assume it as other version. 


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153076559
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonAnalysisRules.scala
 ---
@@ -24,17 +24,15 @@ import 
org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, NamedExpress
 import org.apache.spark.sql.catalyst.plans.Inner
 import org.apache.spark.sql.catalyst.plans.logical._
 import org.apache.spark.sql.catalyst.rules._
-import org.apache.spark.sql.execution.SparkSqlParser
 import 
org.apache.spark.sql.execution.command.mutation.ProjectForDeleteCommand
 import org.apache.spark.sql.execution.datasources.LogicalRelation
+import org.apache.spark.sql.CarbonExpressions.CarbonUnresolvedRelation
 
 import org.apache.carbondata.core.constants.CarbonCommonConstants
 
 
-/**
- * Insert into carbon table from other source
- */
--- End diff --

Moved Back.


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153076529
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/execution/strategy/DDLStrategy.scala
 ---
@@ -155,6 +161,14 @@ class DDLStrategy(sparkSession: SparkSession) extends 
SparkStrategy {
 val cmd =
   CreateDataSourceTableCommand(updatedCatalog, ignoreIfExists = 
mode == SaveMode.Ignore)
 ExecutedCommandExec(cmd) :: Nil
+  case CreateDataSourceTableCommand(table, ignoreIfExists)
+if table.provider.get != DDLUtils.HIVE_PROVIDER
+   && 
table.provider.get.equals("org.apache.spark.sql.CarbonSource") =>
+val updatedCatalog =
+  CarbonSource.updateCatalogTableWithCarbonSchema(table, 
sparkSession)
+val cmd =
+  CreateDataSourceTableCommand(updatedCatalog, ignoreIfExists)
--- End diff --

Done


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153076517
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/execution/strategy/DDLStrategy.scala
 ---
@@ -155,6 +161,14 @@ class DDLStrategy(sparkSession: SparkSession) extends 
SparkStrategy {
 val cmd =
   CreateDataSourceTableCommand(updatedCatalog, ignoreIfExists = 
mode == SaveMode.Ignore)
 ExecutedCommandExec(cmd) :: Nil
+  case CreateDataSourceTableCommand(table, ignoreIfExists)
+if table.provider.get != DDLUtils.HIVE_PROVIDER
+   && 
table.provider.get.equals("org.apache.spark.sql.CarbonSource") =>
+val updatedCatalog =
+  CarbonSource.updateCatalogTableWithCarbonSchema(table, 
sparkSession)
--- End diff --

Done


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153076491
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/execution/strategy/DDLStrategy.scala
 ---
@@ -26,13 +26,19 @@ import 
org.apache.spark.sql.execution.command.management.{AlterTableCompactionCo
 import 
org.apache.spark.sql.execution.command.partition.ShowCarbonPartitionsCommand
 import 
org.apache.spark.sql.execution.command.schema.{AlterTableAddColumnCommand, 
AlterTableDataTypeChangeCommand, AlterTableDropColumnCommand, 
AlterTableRenameTableCommand}
 import 
org.apache.spark.sql.hive.execution.command.{CarbonDropDatabaseCommand, 
CarbonResetCommand, CarbonSetCommand}
+import org.apache.spark.sql.CarbonExpressions.{CarbonDescribeTable => 
DescribeTableCommand}
+import org.apache.spark.sql.catalyst.catalog.CatalogTypes
 
 import org.apache.carbondata.core.util.CarbonUtil
 import 
org.apache.carbondata.spark.exception.MalformedCarbonCommandException
 
 /**
  * Carbon strategies for ddl commands
  */
+case class CarbonDescribeTableCommand (
--- End diff --

Done


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153076471
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/execution/strategy/DDLStrategy.scala
 ---
@@ -26,13 +26,19 @@ import 
org.apache.spark.sql.execution.command.management.{AlterTableCompactionCo
 import 
org.apache.spark.sql.execution.command.partition.ShowCarbonPartitionsCommand
 import 
org.apache.spark.sql.execution.command.schema.{AlterTableAddColumnCommand, 
AlterTableDataTypeChangeCommand, AlterTableDropColumnCommand, 
AlterTableRenameTableCommand}
 import 
org.apache.spark.sql.hive.execution.command.{CarbonDropDatabaseCommand, 
CarbonResetCommand, CarbonSetCommand}
+import org.apache.spark.sql.CarbonExpressions.{CarbonDescribeTable => 
DescribeTableCommand}
+import org.apache.spark.sql.catalyst.catalog.CatalogTypes
--- End diff --

Done


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153076462
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/execution/strategy/CarbonLateDecodeStrategy.scala
 ---
@@ -42,6 +43,7 @@ import 
org.apache.carbondata.spark.CarbonAliasDecoderRelation
 import org.apache.carbondata.spark.rdd.CarbonScanRDD
 import org.apache.carbondata.spark.util.CarbonScalaUtil
 
+
--- End diff --

Done


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153076436
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/execution/command/schema/AlterTableDropColumnCommand.scala
 ---
@@ -20,9 +20,10 @@ package org.apache.spark.sql.execution.command.schema
 import scala.collection.JavaConverters._
 import scala.collection.mutable.ListBuffer
 
+import org.apache.hadoop.hive.ql.session.SessionState
--- End diff --

Done


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153076449
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/execution/command/schema/AlterTableDropColumnCommand.scala
 ---
@@ -120,10 +121,7 @@ private[sql] case class AlterTableDropColumnCommand(
   val schemaEvolutionEntry = new SchemaEvolutionEntry(timeStamp)
   schemaEvolutionEntry.setRemoved(deletedColumnSchema.toList.asJava)
   AlterTableUtil
-.updateSchemaInfo(carbonTable,
-  schemaEvolutionEntry,
-  tableInfo)(sparkSession,
-  sparkSession.sessionState.asInstanceOf[CarbonSessionState])
+  .updateSchemaInfo(carbonTable, schemaEvolutionEntry, 
tableInfo)(sparkSession)
--- End diff --

Done


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153076418
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/execution/command/schema/AlterTableDataTypeChangeCommand.scala
 ---
@@ -94,10 +95,7 @@ private[sql] case class AlterTableDataTypeChangeCommand(
   
tableInfo.getFact_table.getSchema_evolution.getSchema_evolution_history.get(0)
 .setTime_stamp(System.currentTimeMillis)
   AlterTableUtil
-.updateSchemaInfo(carbonTable,
-  schemaEvolutionEntry,
-  tableInfo)(sparkSession,
-  sparkSession.sessionState.asInstanceOf[CarbonSessionState])
+  .updateSchemaInfo(carbonTable, schemaEvolutionEntry, 
tableInfo)(sparkSession)
--- End diff --

Done


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153076398
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/execution/CastExpressionOptimization.scala
 ---
@@ -21,12 +21,14 @@ import java.text.{ParseException, SimpleDateFormat}
 import java.util
 import java.util.{Locale, TimeZone}
 
+import scala.Option
 import scala.collection.JavaConverters._
 
-import org.apache.spark.sql.catalyst.expressions.{Attribute, Cast, 
EmptyRow, EqualTo, Expression, GreaterThan, GreaterThanOrEqual, In, LessThan, 
LessThanOrEqual, Literal, Not}
+import org.apache.spark.sql.catalyst.expressions.{Attribute, EmptyRow, 
EqualTo, Expression, GreaterThan, GreaterThanOrEqual, In, LessThan, 
LessThanOrEqual, Literal, Not}
 import org.apache.spark.sql.CastExpr
 import org.apache.spark.sql.sources
-import org.apache.spark.sql.types.{DoubleType, IntegerType, StringType, 
TimestampType}
+import org.apache.spark.sql.types.{DataType, DoubleType, IntegerType, 
StringType, TimestampType}
+import org.apache.spark.sql.CarbonExpressions.{MatchCast => Cast}
--- End diff --

Ok


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153076329
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/CarbonExpressions.scala 
---
@@ -0,0 +1,110 @@
+/*
+ * 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.spark.sql
+
+import org.apache.spark.sql.catalyst.TableIdentifier
+import org.apache.spark.sql.catalyst.analysis.UnresolvedRelation
+import 
org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec
+import org.apache.spark.sql.catalyst.expressions.{Attribute, Cast, 
Expression}
+import org.apache.spark.sql.catalyst.plans.logical.{LogicalPlan, 
SubqueryAlias}
+import org.apache.spark.sql.execution.command.DescribeTableCommand
+import org.apache.spark.sql.types.DataType
+
+/**
+ * This class contains the wrappers of all the case classes which are 
common
+ * across spark version 2.1 and 2.2 but have change in parameter list.
+ * Below are the overriden unapply methods in order to make it work
+ * across both the version of spark2.1 and spark 2.2
+ */
+object CarbonExpressions {
+
+  /**
+   * unapply method of Cast class.
+   */
+  object MatchCast {
+def unapply(expr: Expression): Option[(Attribute, DataType)] = {
+  if (expr.isInstanceOf[Cast] && 
expr.asInstanceOf[Cast].child.isInstanceOf[Attribute]) {
+Some((expr.asInstanceOf[Cast].child.asInstanceOf[Attribute], 
expr.asInstanceOf[Cast].child
+  .dataType))
+  } else {
+None
+  }
+}
+  }
+
+  /**
+   * unapply method of Describe Table format.
+   */
+  object CarbonDescribeTable {
+def unapply(plan: LogicalPlan): Option[(TableIdentifier, 
TablePartitionSpec, Boolean)] = {
+  if (plan.isInstanceOf[DescribeTableCommand]) {
+val describeTableCommand = plan.asInstanceOf[DescribeTableCommand]
+if (describeTableCommand.table.isInstanceOf[TableIdentifier] &&
+
describeTableCommand.partitionSpec.isInstanceOf[TablePartitionSpec] &&
+describeTableCommand.isExtended.isInstanceOf[Boolean]) {
+  Some(describeTableCommand.table,
+describeTableCommand.partitionSpec,
+describeTableCommand.isExtended)
+} else {
+  None
+}
+  } else {
+None
+  }
+}
+  }
+
+  /**
+   * unapply method of SubqueryAlias.
+   */
+  object CarbonSubqueryAlias {
+def unapply(plan: LogicalPlan): Option[(String, LogicalPlan)] = {
+  if (plan.isInstanceOf[SubqueryAlias]) {
+val subqueryAlias = plan.asInstanceOf[SubqueryAlias]
+if (subqueryAlias.alias.isInstanceOf[String] &&
+subqueryAlias.child.isInstanceOf[LogicalPlan]) {
+  Some(subqueryAlias.alias,
+subqueryAlias.child)
+} else {
+  None
+}
+  } else {
+None
+  }
+}
+  }
+
+  /**
+   * uapply method of UnresolvedRelation
+   */
+  object CarbonUnresolvedRelation {
+def unapply(plan: LogicalPlan): Option[(TableIdentifier)] = {
+  if (plan.isInstanceOf[UnresolvedRelation]) {
--- End diff --

Done


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153076321
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/CarbonExpressions.scala 
---
@@ -0,0 +1,110 @@
+/*
+ * 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.spark.sql
+
+import org.apache.spark.sql.catalyst.TableIdentifier
+import org.apache.spark.sql.catalyst.analysis.UnresolvedRelation
+import 
org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec
+import org.apache.spark.sql.catalyst.expressions.{Attribute, Cast, 
Expression}
+import org.apache.spark.sql.catalyst.plans.logical.{LogicalPlan, 
SubqueryAlias}
+import org.apache.spark.sql.execution.command.DescribeTableCommand
+import org.apache.spark.sql.types.DataType
+
+/**
+ * This class contains the wrappers of all the case classes which are 
common
+ * across spark version 2.1 and 2.2 but have change in parameter list.
+ * Below are the overriden unapply methods in order to make it work
+ * across both the version of spark2.1 and spark 2.2
+ */
+object CarbonExpressions {
+
+  /**
+   * unapply method of Cast class.
+   */
+  object MatchCast {
+def unapply(expr: Expression): Option[(Attribute, DataType)] = {
+  if (expr.isInstanceOf[Cast] && 
expr.asInstanceOf[Cast].child.isInstanceOf[Attribute]) {
+Some((expr.asInstanceOf[Cast].child.asInstanceOf[Attribute], 
expr.asInstanceOf[Cast].child
+  .dataType))
+  } else {
+None
+  }
+}
+  }
+
+  /**
+   * unapply method of Describe Table format.
+   */
+  object CarbonDescribeTable {
+def unapply(plan: LogicalPlan): Option[(TableIdentifier, 
TablePartitionSpec, Boolean)] = {
+  if (plan.isInstanceOf[DescribeTableCommand]) {
--- End diff --

Done


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153076325
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/CarbonExpressions.scala 
---
@@ -0,0 +1,110 @@
+/*
+ * 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.spark.sql
+
+import org.apache.spark.sql.catalyst.TableIdentifier
+import org.apache.spark.sql.catalyst.analysis.UnresolvedRelation
+import 
org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec
+import org.apache.spark.sql.catalyst.expressions.{Attribute, Cast, 
Expression}
+import org.apache.spark.sql.catalyst.plans.logical.{LogicalPlan, 
SubqueryAlias}
+import org.apache.spark.sql.execution.command.DescribeTableCommand
+import org.apache.spark.sql.types.DataType
+
+/**
+ * This class contains the wrappers of all the case classes which are 
common
+ * across spark version 2.1 and 2.2 but have change in parameter list.
+ * Below are the overriden unapply methods in order to make it work
+ * across both the version of spark2.1 and spark 2.2
+ */
+object CarbonExpressions {
+
+  /**
+   * unapply method of Cast class.
+   */
+  object MatchCast {
+def unapply(expr: Expression): Option[(Attribute, DataType)] = {
+  if (expr.isInstanceOf[Cast] && 
expr.asInstanceOf[Cast].child.isInstanceOf[Attribute]) {
+Some((expr.asInstanceOf[Cast].child.asInstanceOf[Attribute], 
expr.asInstanceOf[Cast].child
+  .dataType))
+  } else {
+None
+  }
+}
+  }
+
+  /**
+   * unapply method of Describe Table format.
+   */
+  object CarbonDescribeTable {
+def unapply(plan: LogicalPlan): Option[(TableIdentifier, 
TablePartitionSpec, Boolean)] = {
+  if (plan.isInstanceOf[DescribeTableCommand]) {
+val describeTableCommand = plan.asInstanceOf[DescribeTableCommand]
+if (describeTableCommand.table.isInstanceOf[TableIdentifier] &&
+
describeTableCommand.partitionSpec.isInstanceOf[TablePartitionSpec] &&
+describeTableCommand.isExtended.isInstanceOf[Boolean]) {
+  Some(describeTableCommand.table,
+describeTableCommand.partitionSpec,
+describeTableCommand.isExtended)
+} else {
+  None
+}
+  } else {
+None
+  }
+}
+  }
+
+  /**
+   * unapply method of SubqueryAlias.
+   */
+  object CarbonSubqueryAlias {
+def unapply(plan: LogicalPlan): Option[(String, LogicalPlan)] = {
+  if (plan.isInstanceOf[SubqueryAlias]) {
--- End diff --

Done


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread sounakr
Github user sounakr commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153076314
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/CarbonExpressions.scala 
---
@@ -0,0 +1,110 @@
+/*
+ * 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.spark.sql
+
+import org.apache.spark.sql.catalyst.TableIdentifier
+import org.apache.spark.sql.catalyst.analysis.UnresolvedRelation
+import 
org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec
+import org.apache.spark.sql.catalyst.expressions.{Attribute, Cast, 
Expression}
+import org.apache.spark.sql.catalyst.plans.logical.{LogicalPlan, 
SubqueryAlias}
+import org.apache.spark.sql.execution.command.DescribeTableCommand
+import org.apache.spark.sql.types.DataType
+
+/**
+ * This class contains the wrappers of all the case classes which are 
common
+ * across spark version 2.1 and 2.2 but have change in parameter list.
+ * Below are the overriden unapply methods in order to make it work
+ * across both the version of spark2.1 and spark 2.2
+ */
+object CarbonExpressions {
+
+  /**
+   * unapply method of Cast class.
+   */
+  object MatchCast {
+def unapply(expr: Expression): Option[(Attribute, DataType)] = {
+  if (expr.isInstanceOf[Cast] && 
expr.asInstanceOf[Cast].child.isInstanceOf[Attribute]) {
--- End diff --

Done.


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153064291
  
--- Diff: pom.xml ---
@@ -554,6 +553,8 @@
 
${basedir}/integration/hive/src/main/java
 
${basedir}/integration/presto/src/main/scala
 
${basedir}/integration/presto/src/main/java
+
${basedir}/streaming/src/main/java
+
${basedir}/streaming/src/main/java
--- End diff --

why are these added?


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153064274
  
--- Diff: pom.xml ---
@@ -509,6 +501,8 @@
 
${basedir}/integration/hive/src/main/java
 
${basedir}/integration/presto/src/main/scala
 
${basedir}/integration/presto/src/main/java
+
${basedir}/streaming/src/main/java
+
${basedir}/streaming/src/main/java
--- End diff --

why are these added?


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153064253
  
--- Diff: 
integration/spark2/src/test/scala/org/apache/spark/carbondata/restructure/AlterTableValidationTestCase.scala
 ---
@@ -85,71 +85,75 @@ class AlterTableValidationTestCase extends 
Spark2QueryTest with BeforeAndAfterAl
   "('DICTIONARY_EXCLUDE'='nodict', 'DEFAULT.VALUE.NoDict'= 'abcd')")
 checkAnswer(sql("select distinct(nodict) from restructure"), 
Row("abcd"))
   }
-  test("test add timestamp no dictionary column") {
-sql(
-  "alter table restructure add columns(tmpstmp timestamp) 
TBLPROPERTIES ('DEFAULT.VALUE" +
-  ".tmpstmp'= '17-01-2007')")
-checkAnswer(sql("select distinct(tmpstmp) from restructure"),
-  Row(new java.sql.Timestamp(107, 0, 17, 0, 0, 0, 0)))
-checkExistence(sql("desc restructure"), true, "tmpstmptimestamp")
-  }
-
-  test("test add timestamp direct dictionary column") {
-sql(
-  "alter table restructure add columns(tmpstmp1 timestamp) 
TBLPROPERTIES ('DEFAULT.VALUE" +
-  ".tmpstmp1'= '17-01-3007','DICTIONARY_INCLUDE'='tmpstmp1')")
-checkAnswer(sql("select distinct(tmpstmp1) from restructure"),
-  Row(null))
-checkExistence(sql("desc restructure"), true, "tmpstmptimestamp")
-  }
-
-  test("test add timestamp column and load as dictionary") {
-sql("create table table1(name string) stored by 'carbondata'")
-sql("insert into table1 select 'abc'")
-sql("alter table table1 add columns(tmpstmp timestamp) TBLPROPERTIES " 
+
-"('DEFAULT.VALUE.tmpstmp'='17-01-3007','DICTIONARY_INCLUDE'= 
'tmpstmp')")
-sql("insert into table1 select 'name','17-01-2007'")
-checkAnswer(sql("select * from table1"),
-  Seq(Row("abc",null),
-Row("name",Timestamp.valueOf("2007-01-17 00:00:00.0"
-  }
-
-  test("test add msr column") {
-sql(
-  "alter table restructure add columns(msrField 
decimal(5,2))TBLPROPERTIES ('DEFAULT.VALUE" +
-  ".msrfield'= '123.45')")
-checkExistence(sql("desc restructure"), true, "msrfielddecimal(5,2)")
-val output = sql("select msrField from restructure").collect
-checkAnswer(sql("select distinct(msrField) from restructure"),
-  Row(new BigDecimal("123.45").setScale(2, RoundingMode.HALF_UP)))
-  }
-
-  test("test add all datatype supported dictionary column") {
-sql(
-  "alter table restructure add columns(strfld string, datefld date, 
tptfld timestamp, " +
-  "shortFld smallInt, " +
-  "intFld int, longFld bigint, dblFld double,dcml 
decimal(5,4))TBLPROPERTIES" +
-  
"('DICTIONARY_INCLUDE'='datefld,shortFld,intFld,longFld,dblFld,dcml', 
'DEFAULT.VALUE" +
-  ".dblFld'= '12345')")
-checkAnswer(sql("select distinct(dblFld) from restructure"),
-  Row(java.lang.Double.parseDouble("12345")))
-checkExistence(sql("desc restructure"), true, "strfldstring")
-checkExistence(sql("desc restructure"), true, "dateflddate")
-checkExistence(sql("desc restructure"), true, "tptfldtimestamp")
-checkExistence(sql("desc restructure"), true, "shortfldsmallint")
-checkExistence(sql("desc restructure"), true, "intfldint")
-checkExistence(sql("desc restructure"), true, "longfldbigint")
-checkExistence(sql("desc restructure"), true, "dblflddouble")
-checkExistence(sql("desc restructure"), true, "dcmldecimal(5,4)")
-  }
-
-  test(
-"test add decimal without scale and precision, default precision and 
scale (10,0) should be " +
-"used")
-  {
-sql("alter table restructure add columns(dcmldefault decimal)")
-checkExistence(sql("desc restructure"), true, 
"dcmldefaultdecimal(10,0)")
-  }
+//  test("test add timestamp no dictionary column") {
--- End diff --

Don't comment any tests, just ignore. It should be fixed soon.


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153064235
  
--- Diff: integration/spark2/src/main/spark2.2/CarbonSessionState.scala ---
@@ -0,0 +1,256 @@
+/*
+ * 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.spark.sql.hive
+
+import org.apache.hadoop.conf.Configuration
+import org.apache.spark.sql._
+import org.apache.spark.sql.catalyst.TableIdentifier
+import org.apache.spark.sql.catalyst.analysis.{Analyzer, FunctionRegistry}
+import org.apache.spark.sql.catalyst.catalog._
+import org.apache.spark.sql.catalyst.expressions.ScalarSubquery
+import org.apache.spark.sql.catalyst.optimizer.Optimizer
+import org.apache.spark.sql.catalyst.parser.ParserInterface
+import 
org.apache.spark.sql.catalyst.parser.SqlBaseParser.{CreateHiveTableContext, 
CreateTableContext}
+import org.apache.spark.sql.catalyst.plans.logical.{Filter, LogicalPlan, 
SubqueryAlias}
+import org.apache.spark.sql.catalyst.rules.Rule
+import org.apache.spark.sql.execution.datasources.{FindDataSourceTable, 
LogicalRelation, PreWriteCheck, ResolveSQLOnFile, _}
+import org.apache.spark.sql.execution.strategy.{CarbonLateDecodeStrategy, 
DDLStrategy}
+import org.apache.spark.sql.execution.{SparkOptimizer, SparkSqlAstBuilder}
+import org.apache.spark.sql.hive.client.HiveClient
+import org.apache.spark.sql.internal.{SQLConf, SessionState}
+import org.apache.spark.sql.optimizer.CarbonLateDecodeRule
+import org.apache.spark.sql.parser.{CarbonHelperqlAstBuilder, 
CarbonSpark2SqlParser, CarbonSparkSqlParser}
+
+import org.apache.carbondata.core.datamap.DataMapStoreManager
+import org.apache.carbondata.core.metadata.AbsoluteTableIdentifier
+
+/**
+ * This class will have carbon catalog and refresh the relation from cache 
if the carbontable in
+ * carbon catalog is not same as cached carbon relation's carbon table
+ *
+ * @param externalCatalog
+ * @param globalTempViewManager
+ * @param sparkSession
+ * @param functionResourceLoader
+ * @param functionRegistry
+ * @param conf
+ * @param hadoopConf
+ */
+class CarbonSessionCatalog(
+externalCatalog: HiveExternalCatalog,
+globalTempViewManager: GlobalTempViewManager,
+functionRegistry: FunctionRegistry,
+sparkSession: SparkSession,
+conf: SQLConf,
+hadoopConf: Configuration,
+parser: ParserInterface,
+functionResourceLoader: FunctionResourceLoader)
+  extends HiveSessionCatalog(
+externalCatalog,
+globalTempViewManager,
+new HiveMetastoreCatalog(sparkSession),
+functionRegistry,
+conf,
+hadoopConf,
+parser,
+functionResourceLoader
+  ) {
+
+  lazy val carbonEnv = {
+val env = new CarbonEnv
+env.init(sparkSession)
+env
+  }
+
+  def getCarbonEnv() : CarbonEnv = {
+carbonEnv
+  }
+
+
+  private def refreshRelationFromCache(identifier: TableIdentifier,
+  carbonDatasourceHadoopRelation: CarbonDatasourceHadoopRelation): 
Boolean = {
+var isRefreshed = false
+val storePath = CarbonEnv.getInstance(sparkSession).storePath
+carbonEnv.carbonMetastore.
+  checkSchemasModifiedTimeAndReloadTables(storePath)
+
+val tableMeta = carbonEnv.carbonMetastore
+  
.getTableFromMetadataCache(carbonDatasourceHadoopRelation.carbonTable.getDatabaseName,
+carbonDatasourceHadoopRelation.carbonTable.getFactTableName)
+if (tableMeta.isEmpty || (tableMeta.isDefined &&
+  
tableMeta.get.carbonTable.getTableLastUpdatedTime !=
+  
carbonDatasourceHadoopRelation.carbonTable.getTableLastUpdatedTime)) {
+  refreshTable(identifier)
+  DataMapStoreManager.getInstance().
+clearDataMap(AbsoluteTableIdentifier.from(storePath,
+  identifier.database.getOrElse("default"), identifier.table))
+  

[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153064193
  
--- Diff: integration/spark2/src/main/spark2.1/CarbonSessionState.scala ---
@@ -150,9 +153,8 @@ class CarbonSessionState(sparkSession: SparkSession) 
extends HiveSessionState(sp
 DataSourceAnalysis(conf) ::
 (if (conf.runSQLonFile) {
   new ResolveDataSource(sparkSession) :: Nil
-} else {
-  Nil
-})
+} else {  Nil }
+  )
--- End diff --

Keep format as old


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153064203
  
--- Diff: integration/spark2/src/main/spark2.1/CarbonSessionState.scala ---
@@ -207,3 +213,26 @@ class CarbonOptimizer(
 super.execute(transFormedPlan)
   }
 }
+
+class CarbonSqlAstBuilder(conf: SQLConf, parser: CarbonSpark2SqlParser) 
extends
+  SparkSqlAstBuilder(conf) {
+
+  val helper = new CarbonHelperqlAstBuilder(conf, parser)
+
+  override def visitCreateTable(ctx: CreateTableContext): LogicalPlan = {
+val fileStorage = helper.getFileStorage(ctx.createFileFormat)
+
+if (fileStorage.equalsIgnoreCase("'carbondata'") ||
+fileStorage.equalsIgnoreCase("'org.apache.carbondata.format'")) {
+  helper
+.createCarbontable(ctx.createTableHeader,
--- End diff --

move line up


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153064184
  
--- Diff: integration/spark2/src/main/spark2.1/CarbonSessionState.scala ---
@@ -133,7 +134,9 @@ class CarbonSessionState(sparkSession: SparkSession) 
extends HiveSessionState(sp
   override lazy val sqlParser: ParserInterface = new 
CarbonSparkSqlParser(conf, sparkSession)
 
   experimentalMethods.extraStrategies =
-Seq(new CarbonLateDecodeStrategy, new DDLStrategy(sparkSession))
+Seq(new CarbonLateDecodeStrategy,
+  new DDLStrategy(sparkSession)
+)
--- End diff --

Keep the format as old like
 `Seq(new CarbonLateDecodeStrategy, new DDLStrategy(sparkSession))`


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062859
  
--- Diff: integration/spark2/src/main/spark2.1/CarbonSessionState.scala ---
@@ -107,15 +110,14 @@ class CarbonSessionCatalog(
 carbonEnv.carbonMetastore.
   checkSchemasModifiedTimeAndReloadTables(storePath)
 
-val tableMeta = carbonEnv.carbonMetastore
-  
.getTableFromMetadataCache(carbonDatasourceHadoopRelation.carbonTable.getDatabaseName,
-carbonDatasourceHadoopRelation.carbonTable.getFactTableName)
-if (tableMeta.isEmpty || (tableMeta.isDefined &&
-tableMeta.get.carbonTable.getTableLastUpdatedTime !=
-  
carbonDatasourceHadoopRelation.carbonTable.getTableLastUpdatedTime)) {
+val table = carbonEnv.carbonMetastore.getTableFromMetadataCache(
+  carbonDatasourceHadoopRelation.carbonTable.getDatabaseName,
+  carbonDatasourceHadoopRelation.carbonTable.getFactTableName)
+if (table.isEmpty || (table.isDefined &&
+  table.get.carbonTable.getTableLastUpdatedTime !=
--- End diff --

wrong indentation


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062848
  
--- Diff: integration/spark2/src/main/spark2.1/CarbonSessionState.scala ---
@@ -84,8 +86,8 @@ class CarbonSessionCatalog(
 var toRefreshRelation = false
 rtnRelation match {
   case SubqueryAlias(_,
-  LogicalRelation(carbonDatasourceHadoopRelation: 
CarbonDatasourceHadoopRelation, _, _),
-  _) =>
+  LogicalRelation(carbonDatasourceHadoopRelation: 
CarbonDatasourceHadoopRelation, _, _),
+  _) =>
--- End diff --

Move this line up


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062831
  
--- Diff: integration/spark2/src/main/spark2.1/CarbonSessionState.scala ---
@@ -24,16 +24,18 @@ import 
org.apache.spark.sql.catalyst.catalog.{FunctionResourceLoader, GlobalTemp
 import org.apache.spark.sql.catalyst.expressions.{PredicateSubquery, 
ScalarSubquery}
 import org.apache.spark.sql.catalyst.optimizer.Optimizer
 import org.apache.spark.sql.catalyst.parser.ParserInterface
+import 
org.apache.spark.sql.catalyst.parser.SqlBaseParser.CreateTableContext
 import org.apache.spark.sql.catalyst.plans.logical.{Filter, LogicalPlan, 
SubqueryAlias}
-import org.apache.spark.sql.execution.SparkOptimizer
+import org.apache.spark.sql.execution.{SparkOptimizer, SparkSqlAstBuilder}
 import org.apache.spark.sql.execution.datasources._
 import org.apache.spark.sql.execution.strategy.{CarbonLateDecodeStrategy, 
DDLStrategy}
 import org.apache.spark.sql.internal.SQLConf
 import org.apache.spark.sql.optimizer.CarbonLateDecodeRule
-import org.apache.spark.sql.parser.CarbonSparkSqlParser
+import org.apache.spark.sql.parser.{CarbonHelperqlAstBuilder, 
CarbonSpark2SqlParser, CarbonSparkSqlParser}
 
 import org.apache.carbondata.core.datamap.DataMapStoreManager
 import org.apache.carbondata.core.metadata.AbsoluteTableIdentifier
+import org.apache.carbondata.core.util.CarbonProperties
--- End diff --

Remove unused import


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062806
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/util/CarbonClassReflectionUtils.scala
 ---
@@ -0,0 +1,186 @@
+/*
+ * 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.spark.sql
+
+import scala.reflect.runtime._
+import scala.reflect.runtime.universe._
+
+import org.apache.spark.SparkContext
+import org.apache.spark.sql.catalyst.TableIdentifier
+import org.apache.spark.sql.catalyst.analysis.UnresolvedRelation
+import org.apache.spark.sql.catalyst.parser.AstBuilder
+import org.apache.spark.sql.catalyst.plans.logical.{LogicalPlan, Project, 
SubqueryAlias}
+import org.apache.spark.sql.internal.{SessionState, SQLConf}
+import org.apache.spark.sql.parser.CarbonSpark2SqlParser
+import org.apache.spark.util.Utils
+
+import org.apache.carbondata.common.logging.LogServiceFactory
+
+/**
+ * Reflection APIs
+ */
+
+object CarbonClassReflectionUtils {
--- End diff --

Separete as 2 classes , one is commonReflection and other is reflection 
util. Move as much code as possible to common reflection util. 
And try to make the code more generic.


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062777
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/util/CarbonClassReflectionUtils.scala
 ---
@@ -0,0 +1,186 @@
+/*
+ * 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.spark.sql
+
+import scala.reflect.runtime._
+import scala.reflect.runtime.universe._
+
+import org.apache.spark.SparkContext
+import org.apache.spark.sql.catalyst.TableIdentifier
+import org.apache.spark.sql.catalyst.analysis.UnresolvedRelation
+import org.apache.spark.sql.catalyst.parser.AstBuilder
+import org.apache.spark.sql.catalyst.plans.logical.{LogicalPlan, Project, 
SubqueryAlias}
+import org.apache.spark.sql.internal.{SessionState, SQLConf}
+import org.apache.spark.sql.parser.CarbonSpark2SqlParser
+import org.apache.spark.util.Utils
+
+import org.apache.carbondata.common.logging.LogServiceFactory
+
+/**
+ * Reflection APIs
+ */
+
+object CarbonClassReflectionUtils {
+
+  private val LOGGER = 
LogServiceFactory.getLogService(this.getClass.getCanonicalName)
+
+  private val rm = universe.runtimeMirror(getClass.getClassLoader)
+
+  /**
+   * Returns the field val from a object through reflection.
+   * @param name - name of the field being retrieved.
+   * @param obj - Object from which the field has to be retrieved.
+   * @tparam T
+   * @return
+   */
+  def getField[T: TypeTag: reflect.ClassTag](name: String, obj: T): Any = {
+val im = rm.reflect(obj)
+
+im.symbol.typeSignature.members.find(
+  _.name.toString.equals(name)).map(
+  l => im.reflectField(l.asTerm).get.asInstanceOf[LogicalPlan]
+).getOrElse(null)
+  }
+
+  def hasField[T: TypeTag: reflect.ClassTag](name: String, obj: T): 
Boolean = {
--- End diff --

remove this method


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062729
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/util/AlterTableUtil.scala ---
@@ -21,10 +21,11 @@ import scala.collection.JavaConverters._
 import scala.collection.mutable.ListBuffer
 
 import org.apache.spark.SparkConf
-import org.apache.spark.sql.{CarbonEnv, SparkSession}
+import org.apache.spark.sql.{CarbonEnv, CarbonSession, SparkSession}
 import org.apache.spark.sql.catalyst.TableIdentifier
-import org.apache.spark.sql.hive.{CarbonRelation, CarbonSessionState}
+import org.apache.spark.sql.hive.{CarbonRelation, HiveExternalCatalog}
 import org.apache.spark.sql.hive.HiveExternalCatalog._
+import org.apache.spark.sql.internal.SessionState
--- End diff --

Remove unused import


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062720
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/parser/CarbonSparkSqlParser.scala
 ---
@@ -184,10 +126,86 @@ class CarbonSqlAstBuilder(conf: SQLConf) extends 
SparkSqlAstBuilder(conf) {
 }
   }
 
-  private def needToConvertToLowerCase(key: String): Boolean = {
-val noConvertList = Array("LIST_INFO", "RANGE_INFO")
-!noConvertList.exists(x => x.equalsIgnoreCase(key));
+  def getPropertyKeyValues(ctx: TablePropertyListContext): Map[String, 
String]
+  = {
+Option(ctx).map(visitPropertyKeyValues)
+  .getOrElse(Map.empty)
   }
 
+  def createCarbontable(tableHeader: CreateTableHeaderContext,
+  skewSpecContext: SkewSpecContext,
+  bucketSpecContext: BucketSpecContext,
+  partitionColumns: ColTypeListContext,
+  columns : ColTypeListContext,
+  tablePropertyList : TablePropertyListContext) : LogicalPlan = {
+// val parser = new CarbonSpark2SqlParser
+
+val (name, temp, ifNotExists, external) = 
visitCreateTableHeader(tableHeader)
+// TODO: implement temporary tables
+if (temp) {
+  throw new ParseException(
+"CREATE TEMPORARY TABLE is not supported yet. " +
+"Please use CREATE TEMPORARY VIEW as an alternative.", tableHeader)
+}
+if (skewSpecContext != null) {
+  operationNotAllowed("CREATE TABLE ... SKEWED BY", skewSpecContext)
+}
+if (bucketSpecContext != null) {
+  operationNotAllowed("CREATE TABLE ... CLUSTERED BY", 
bucketSpecContext)
+}
+val partitionByStructFields = 
Option(partitionColumns).toSeq.flatMap(visitColTypeList)
+val partitionerFields = partitionByStructFields.map { structField =>
+  PartitionerField(structField.name, 
Some(structField.dataType.toString), null)
+}
+val cols = Option(columns).toSeq.flatMap(visitColTypeList)
+val properties = getPropertyKeyValues(tablePropertyList)
+
+// Ensuring whether no duplicate name is used in table definition
+val colNames = cols.map(_.name)
+if (colNames.length != colNames.distinct.length) {
+  val duplicateColumns = colNames.groupBy(identity).collect {
+case (x, ys) if ys.length > 1 => "\"" + x + "\""
+  }
+  operationNotAllowed(s"Duplicated column names found in table 
definition of $name: " +
--- End diff --

Indentation is wrong


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-26 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062664
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/parser/CarbonSparkSqlParser.scala
 ---
@@ -69,12 +71,11 @@ class CarbonSparkSqlParser(conf: SQLConf, sparkSession: 
SparkSession) extends Ab
   }
 }
 
-class CarbonSqlAstBuilder(conf: SQLConf) extends SparkSqlAstBuilder(conf) {
-
-  val parser = new CarbonSpark2SqlParser
+class CarbonHelperqlAstBuilder(conf: SQLConf, parser: 
CarbonSpark2SqlParser)
--- End diff --

Correct the name


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062519
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/parser/CarbonSpark2SqlParser.scala
 ---
@@ -17,19 +17,23 @@
 
 package org.apache.spark.sql.parser
 
+import java.lang.reflect.InvocationTargetException
--- End diff --

Remove unused import


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062511
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/optimizer/CarbonLateDecodeRule.scala
 ---
@@ -38,7 +38,6 @@ import org.apache.carbondata.core.stats.QueryStatistic
 import org.apache.carbondata.core.util.CarbonTimeStatisticsFactory
 import org.apache.carbondata.spark.CarbonAliasDecoderRelation
 
-
--- End diff --

Don't change class unnecessarly


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062493
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonRelation.scala
 ---
@@ -172,7 +172,13 @@ case class CarbonRelation(
   }
 
   // TODO: Use data from the footers.
-  override lazy val statistics = Statistics(sizeInBytes = this.sizeInBytes)
+  // TODO For 2.1
+  //  override lazy val statistics = Statistics(sizeInBytes = 
this.sizeInBytes)
+  // Todo for 2.2
+  //  override def computeStats(conf: SQLConf): Statistics = 
Statistics(sizeInBytes =
+  //  this.sizeInBytes)
+
+  // override lazy val statistics = Statistics(sizeInBytes = 
this.sizeInBytes)
--- End diff --

It would be a big problem if we can't implement it. Please check it on 
priority


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062473
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonHiveMetaStore.scala
 ---
@@ -153,8 +153,11 @@ class CarbonHiveMetaStore extends CarbonFileMetastore {
 val dbName = oldTableIdentifier.getDatabaseName
 val tableName = oldTableIdentifier.getTableName
 val schemaParts = 
CarbonUtil.convertToMultiGsonStrings(wrapperTableInfo, "=", "'", "")
-
sparkSession.sessionState.asInstanceOf[CarbonSessionState].metadataHive.runSqlHive(
-  s"ALTER TABLE $dbName.$tableName SET SERDEPROPERTIES($schemaParts)")
+val hiveClient = 
sparkSession.asInstanceOf[CarbonSession].sharedState.externalCatalog
+  .asInstanceOf[HiveExternalCatalog].client
+hiveClient.runSqlHive(s"ALTER TABLE $dbName.$tableName SET 
SERDEPROPERTIES($schemaParts)")
+
+sparkSession.sessionState
--- End diff --

unused code, remove it.


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062458
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonFileMetastore.scala
 ---
@@ -115,18 +121,37 @@ class CarbonFileMetastore extends CarbonMetaStore {
 lookupRelation(TableIdentifier(tableName, dbName))(sparkSession)
   }
 
+  val rm = universe.runtimeMirror(getClass.getClassLoader)
+
+  def getField[T: TypeTag : reflect.ClassTag](name: String, obj: T): 
CatalogTable = {
+val im = rm.reflect(obj)
+val sym = im.symbol.typeSignature.member(TermName(name))
+val tableMeta = im.reflectMethod(sym.asMethod).apply()
+tableMeta.asInstanceOf[CatalogTable]
--- End diff --

No need to typecast


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062453
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonFileMetastore.scala
 ---
@@ -115,18 +121,37 @@ class CarbonFileMetastore extends CarbonMetaStore {
 lookupRelation(TableIdentifier(tableName, dbName))(sparkSession)
   }
 
+  val rm = universe.runtimeMirror(getClass.getClassLoader)
+
+  def getField[T: TypeTag : reflect.ClassTag](name: String, obj: T): 
CatalogTable = {
--- End diff --

It should be only method exists, all use that method from the utility.  


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062424
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonFileMetastore.scala
 ---
@@ -115,18 +121,37 @@ class CarbonFileMetastore extends CarbonMetaStore {
 lookupRelation(TableIdentifier(tableName, dbName))(sparkSession)
   }
 
+  val rm = universe.runtimeMirror(getClass.getClassLoader)
+
+  def getField[T: TypeTag : reflect.ClassTag](name: String, obj: T): 
CatalogTable = {
+val im = rm.reflect(obj)
+val sym = im.symbol.typeSignature.member(TermName(name))
+val tableMeta = im.reflectMethod(sym.asMethod).apply()
+tableMeta.asInstanceOf[CatalogTable]
+  }
+
   override def lookupRelation(tableIdentifier: TableIdentifier)
 (sparkSession: SparkSession): LogicalPlan = {
 val database = tableIdentifier.database.getOrElse(
   sparkSession.catalog.currentDatabase)
 val relation = 
sparkSession.sessionState.catalog.lookupRelation(tableIdentifier) match {
   case SubqueryAlias(_,
-  LogicalRelation(carbonDatasourceHadoopRelation: 
CarbonDatasourceHadoopRelation, _, _),
-  _) =>
+  LogicalRelation(carbonDatasourceHadoopRelation: 
CarbonDatasourceHadoopRelation, _, _)) =>
 carbonDatasourceHadoopRelation.carbonRelation
   case LogicalRelation(
   carbonDatasourceHadoopRelation: CarbonDatasourceHadoopRelation, _, 
_) =>
 carbonDatasourceHadoopRelation.carbonRelation
+  case SubqueryAlias(_, c: CatalogRelation) if 
sparkSession.version.contains("2.2") &&
+   getField("tableMeta", c)
+ 
.asInstanceOf[CatalogTable].provider
+ .isDefined &&
+   getField("tableMeta", c)
+ 
.asInstanceOf[CatalogTable].provider.get
+ 
.equals("org.apache.spark.sql.CarbonSource") =>
--- End diff --

Indentation and format is wrong.


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062410
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonFileMetastore.scala
 ---
@@ -115,18 +121,37 @@ class CarbonFileMetastore extends CarbonMetaStore {
 lookupRelation(TableIdentifier(tableName, dbName))(sparkSession)
   }
 
+  val rm = universe.runtimeMirror(getClass.getClassLoader)
+
+  def getField[T: TypeTag : reflect.ClassTag](name: String, obj: T): 
CatalogTable = {
--- End diff --

Move this method to utility


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062388
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonAnalysisRules.scala
 ---
@@ -201,8 +237,10 @@ case class CarbonIUDAnalysisRule(sparkSession: 
SparkSession) extends Rule[Logica
   override def apply(logicalplan: LogicalPlan): LogicalPlan = {
 
 logicalplan transform {
-  case UpdateTable(t, cols, sel, where) => processUpdateQuery(t, cols, 
sel, where)
-  case DeleteRecords(statement, table) => 
processDeleteRecordsQuery(statement, table)
+  case UpdateTable(t, cols, sel, alias, where) => 
processUpdateQuery(t, cols, sel, alias, where)
+  case DeleteRecords(statement, alias, table) => 
processDeleteRecordsQuery(statement,
+alias,
+table)
--- End diff --

format it properly. like
```
case DeleteRecords(statement, alias, table) =>
processDeleteRecordsQuery(
  statement, 
  alias, 
  table)
```


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062364
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonAnalysisRules.scala
 ---
@@ -143,52 +168,63 @@ case class CarbonIUDAnalysisRule(sparkSession: 
SparkSession) extends Rule[Logica
   selectPlan
 }
 val finalPlan = if (filter.length > 0) {
-  val alias = table.alias.getOrElse("")
   var transformed: Boolean = false
   // Create a dummy projection to include filter conditions
   var newPlan: LogicalPlan = null
   if (table.tableIdentifier.database.isDefined) {
 newPlan = parser.parsePlan("select * from  " +
-   table.tableIdentifier.database.getOrElse("") + "." +
-   table.tableIdentifier.table + " " + alias + " " + filter)
+   
table.tableIdentifier.database.getOrElse("") + "." +
+   table.tableIdentifier.table + " " + 
alias.getOrElse("") + " " +
+   filter)
   }
   else {
 newPlan = parser.parsePlan("select * from  " +
-   table.tableIdentifier.table + " " + alias + " " + filter)
+   table.tableIdentifier.table + " " + 
alias.getOrElse("") + " " +
+   filter)
   }
   newPlan transform {
-case UnresolvedRelation(t, Some(a))
-  if !transformed && t == table.tableIdentifier && a == alias =>
+case CarbonUnresolvedRelation(t)
+  if !transformed && t == table.tableIdentifier =>
   transformed = true
-  // Add the filter condition of update statement  on destination 
table
-  SubqueryAlias(alias, updatedSelectPlan, 
Option(table.tableIdentifier))
+
+  val subqueryAlias = CarbonClassReflectionUtils
+.getSubqueryAlias(sparkSession, alias, updatedSelectPlan, 
Some(table.tableIdentifier))
+  subqueryAlias
   }
 } else {
   updatedSelectPlan
 }
 val tid = 
CarbonTableIdentifierImplicit.toTableIdentifier(Seq(table.tableIdentifier.toString()))
 val tidSeq = Seq(GetDB.getDatabaseName(tid.database, sparkSession))
-val destinationTable = UnresolvedRelation(table.tableIdentifier, 
table.alias)
+val destinationTable = CarbonClassReflectionUtils
+  .getUnresolvedRelation(table.tableIdentifier, alias)
+
 ProjectForUpdate(destinationTable, columns, Seq(finalPlan))
   }
 
-  def processDeleteRecordsQuery(selectStmt: String, table: 
UnresolvedRelation): LogicalPlan = {
-   val tidSeq = Seq(GetDB.getDatabaseName(table.tableIdentifier.database, 
sparkSession),
- table.tableIdentifier.table)
+
+  def processDeleteRecordsQuery(selectStmt: String,
+  alias: Option[String],
+  table: UnresolvedRelation): LogicalPlan = {
+val tidSeq = Seq(GetDB.getDatabaseName(table.tableIdentifier.database, 
sparkSession),
+  table.tableIdentifier.table)
 var addedTupleId = false
 val parsePlan = parser.parsePlan(selectStmt)
+
 val selectPlan = parsePlan transform {
   case relation: UnresolvedRelation
 if table.tableIdentifier == relation.tableIdentifier && 
!addedTupleId =>
 addedTupleId = true
 val tupleId = 
UnresolvedAlias(Alias(UnresolvedFunction("getTupleId",
   Seq.empty, isDistinct = false), "tupleId")())
-val alias = table.alias match {
-  case Some(alias) => Some(table.alias.toSeq)
+
+val localalias = alias match {
--- End diff --

use directly like below
```
alias.map(Seq(_))
```


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062354
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonAnalysisRules.scala
 ---
@@ -143,52 +168,63 @@ case class CarbonIUDAnalysisRule(sparkSession: 
SparkSession) extends Rule[Logica
   selectPlan
 }
 val finalPlan = if (filter.length > 0) {
-  val alias = table.alias.getOrElse("")
   var transformed: Boolean = false
   // Create a dummy projection to include filter conditions
   var newPlan: LogicalPlan = null
   if (table.tableIdentifier.database.isDefined) {
 newPlan = parser.parsePlan("select * from  " +
-   table.tableIdentifier.database.getOrElse("") + "." +
-   table.tableIdentifier.table + " " + alias + " " + filter)
+   
table.tableIdentifier.database.getOrElse("") + "." +
+   table.tableIdentifier.table + " " + 
alias.getOrElse("") + " " +
+   filter)
   }
   else {
 newPlan = parser.parsePlan("select * from  " +
-   table.tableIdentifier.table + " " + alias + " " + filter)
+   table.tableIdentifier.table + " " + 
alias.getOrElse("") + " " +
+   filter)
   }
   newPlan transform {
-case UnresolvedRelation(t, Some(a))
-  if !transformed && t == table.tableIdentifier && a == alias =>
+case CarbonUnresolvedRelation(t)
+  if !transformed && t == table.tableIdentifier =>
   transformed = true
-  // Add the filter condition of update statement  on destination 
table
-  SubqueryAlias(alias, updatedSelectPlan, 
Option(table.tableIdentifier))
+
+  val subqueryAlias = CarbonClassReflectionUtils
+.getSubqueryAlias(sparkSession, alias, updatedSelectPlan, 
Some(table.tableIdentifier))
+  subqueryAlias
   }
 } else {
   updatedSelectPlan
 }
 val tid = 
CarbonTableIdentifierImplicit.toTableIdentifier(Seq(table.tableIdentifier.toString()))
 val tidSeq = Seq(GetDB.getDatabaseName(tid.database, sparkSession))
-val destinationTable = UnresolvedRelation(table.tableIdentifier, 
table.alias)
+val destinationTable = CarbonClassReflectionUtils
+  .getUnresolvedRelation(table.tableIdentifier, alias)
--- End diff --

Format like below.
```
val destinationTable = 
  
CarbonClassReflectionUtils.getUnresolvedRelation(table.tableIdentifier, alias)
```


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062338
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonAnalysisRules.scala
 ---
@@ -143,52 +168,63 @@ case class CarbonIUDAnalysisRule(sparkSession: 
SparkSession) extends Rule[Logica
   selectPlan
 }
 val finalPlan = if (filter.length > 0) {
-  val alias = table.alias.getOrElse("")
   var transformed: Boolean = false
   // Create a dummy projection to include filter conditions
   var newPlan: LogicalPlan = null
   if (table.tableIdentifier.database.isDefined) {
 newPlan = parser.parsePlan("select * from  " +
-   table.tableIdentifier.database.getOrElse("") + "." +
-   table.tableIdentifier.table + " " + alias + " " + filter)
+   
table.tableIdentifier.database.getOrElse("") + "." +
+   table.tableIdentifier.table + " " + 
alias.getOrElse("") + " " +
+   filter)
   }
   else {
 newPlan = parser.parsePlan("select * from  " +
-   table.tableIdentifier.table + " " + alias + " " + filter)
+   table.tableIdentifier.table + " " + 
alias.getOrElse("") + " " +
+   filter)
   }
   newPlan transform {
-case UnresolvedRelation(t, Some(a))
-  if !transformed && t == table.tableIdentifier && a == alias =>
+case CarbonUnresolvedRelation(t)
+  if !transformed && t == table.tableIdentifier =>
   transformed = true
-  // Add the filter condition of update statement  on destination 
table
-  SubqueryAlias(alias, updatedSelectPlan, 
Option(table.tableIdentifier))
+
+  val subqueryAlias = CarbonClassReflectionUtils
+.getSubqueryAlias(sparkSession, alias, updatedSelectPlan, 
Some(table.tableIdentifier))
+  subqueryAlias
--- End diff --

Don't assign to the variable, just return it.  And format the code as below.
```
CarbonClassReflectionUtils.getSubqueryAlias(
  sparkSession, 
  alias, 
  updatedSelectPlan, 
  Some(table.tableIdentifier))
```


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062310
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonAnalysisRules.scala
 ---
@@ -143,52 +246,250 @@ case class CarbonIUDAnalysisRule(sparkSession: 
SparkSession) extends Rule[Logica
   selectPlan
 }
 val finalPlan = if (filter.length > 0) {
-  val alias = table.alias.getOrElse("")
   var transformed: Boolean = false
   // Create a dummy projection to include filter conditions
   var newPlan: LogicalPlan = null
   if (table.tableIdentifier.database.isDefined) {
 newPlan = parser.parsePlan("select * from  " +
-   table.tableIdentifier.database.getOrElse("") + "." +
-   table.tableIdentifier.table + " " + alias + " " + filter)
+   
table.tableIdentifier.database.getOrElse("") + "." +
+   table.tableIdentifier.table + " " + 
alias.getOrElse("") + " " +
+   filter)
--- End diff --

Please format like old code


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062213
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonAnalysisRules.scala
 ---
@@ -95,12 +107,23 @@ case class CarbonIUDAnalysisRule(sparkSession: 
SparkSession) extends Rule[Logica
 def prepareTargetReleation(relation: UnresolvedRelation): 
SubqueryAlias = {
   val tupleId = UnresolvedAlias(Alias(UnresolvedFunction("getTupleId",
 Seq.empty, isDistinct = false), "tupleId")())
+
+  val localAlias = alias match {
+case Some(a) => Some(alias.toSeq)
+case _ => None
+  }
   val projList = Seq(
-UnresolvedAlias(UnresolvedStar(Option(table.alias.toSeq))), 
tupleId)
-  // include tuple id and rest of the required columns in subqury
-  SubqueryAlias(table.alias.getOrElse(""),
-Project(projList, relation), Option(table.tableIdentifier))
+UnresolvedAlias(UnresolvedStar(localAlias)), tupleId)
+
+  val subqueryAlias =
+CarbonClassReflectionUtils
+  .getSubqueryAlias(sparkSession,
+alias,
+Project(projList, relation),
+Some(table.tableIdentifier))
+  subqueryAlias
--- End diff --

Please format like this 
```
CarbonClassReflectionUtils.getSubqueryAlias(
  sparkSession, 
  alias, 
  Project(projList, relation), 
  Some(table.tableIdentifier))
```


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062196
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonAnalysisRules.scala
 ---
@@ -95,12 +107,23 @@ case class CarbonIUDAnalysisRule(sparkSession: 
SparkSession) extends Rule[Logica
 def prepareTargetReleation(relation: UnresolvedRelation): 
SubqueryAlias = {
   val tupleId = UnresolvedAlias(Alias(UnresolvedFunction("getTupleId",
 Seq.empty, isDistinct = false), "tupleId")())
+
+  val localAlias = alias match {
+case Some(a) => Some(alias.toSeq)
+case _ => None
+  }
   val projList = Seq(
-UnresolvedAlias(UnresolvedStar(Option(table.alias.toSeq))), 
tupleId)
-  // include tuple id and rest of the required columns in subqury
-  SubqueryAlias(table.alias.getOrElse(""),
-Project(projList, relation), Option(table.tableIdentifier))
+UnresolvedAlias(UnresolvedStar(localAlias)), tupleId)
+
+  val subqueryAlias =
--- End diff --

no need assign to a variable, return directly


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062164
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonAnalysisRules.scala
 ---
@@ -95,12 +107,23 @@ case class CarbonIUDAnalysisRule(sparkSession: 
SparkSession) extends Rule[Logica
 def prepareTargetReleation(relation: UnresolvedRelation): 
SubqueryAlias = {
   val tupleId = UnresolvedAlias(Alias(UnresolvedFunction("getTupleId",
 Seq.empty, isDistinct = false), "tupleId")())
+
+  val localAlias = alias match {
+case Some(a) => Some(alias.toSeq)
+case _ => None
+  }
--- End diff --

Instead of use like this, you can use like `alias.map(Seq(_))` in all places


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062076
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonAnalysisRules.scala
 ---
@@ -58,6 +57,8 @@ object CarbonPreInsertionCasts extends Rule[LogicalPlan] {
 )
 }
 if (child.output.size >= relation.carbonRelation.output.size) {
+  sparkVersion21 = !CarbonClassReflectionUtils.hasField("query", 
InsertIntoCarbonTable)
--- End diff --

Don't check the version depends on field, please check spark version


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062059
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/hive/CarbonAnalysisRules.scala
 ---
@@ -24,17 +24,15 @@ import 
org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, NamedExpress
 import org.apache.spark.sql.catalyst.plans.Inner
 import org.apache.spark.sql.catalyst.plans.logical._
 import org.apache.spark.sql.catalyst.rules._
-import org.apache.spark.sql.execution.SparkSqlParser
 import 
org.apache.spark.sql.execution.command.mutation.ProjectForDeleteCommand
 import org.apache.spark.sql.execution.datasources.LogicalRelation
+import org.apache.spark.sql.CarbonExpressions.CarbonUnresolvedRelation
 
 import org.apache.carbondata.core.constants.CarbonCommonConstants
 
 
-/**
- * Insert into carbon table from other source
- */
--- End diff --

Why removed comment


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062031
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/execution/strategy/DDLStrategy.scala
 ---
@@ -155,6 +161,14 @@ class DDLStrategy(sparkSession: SparkSession) extends 
SparkStrategy {
 val cmd =
   CreateDataSourceTableCommand(updatedCatalog, ignoreIfExists = 
mode == SaveMode.Ignore)
 ExecutedCommandExec(cmd) :: Nil
+  case CreateDataSourceTableCommand(table, ignoreIfExists)
+if table.provider.get != DDLUtils.HIVE_PROVIDER
+   && 
table.provider.get.equals("org.apache.spark.sql.CarbonSource") =>
+val updatedCatalog =
+  CarbonSource.updateCatalogTableWithCarbonSchema(table, 
sparkSession)
--- End diff --

Move line up


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153062036
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/execution/strategy/DDLStrategy.scala
 ---
@@ -155,6 +161,14 @@ class DDLStrategy(sparkSession: SparkSession) extends 
SparkStrategy {
 val cmd =
   CreateDataSourceTableCommand(updatedCatalog, ignoreIfExists = 
mode == SaveMode.Ignore)
 ExecutedCommandExec(cmd) :: Nil
+  case CreateDataSourceTableCommand(table, ignoreIfExists)
+if table.provider.get != DDLUtils.HIVE_PROVIDER
+   && 
table.provider.get.equals("org.apache.spark.sql.CarbonSource") =>
+val updatedCatalog =
+  CarbonSource.updateCatalogTableWithCarbonSchema(table, 
sparkSession)
+val cmd =
+  CreateDataSourceTableCommand(updatedCatalog, ignoreIfExists)
--- End diff --

Move line up


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153061398
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/execution/strategy/CarbonLateDecodeStrategy.scala
 ---
@@ -42,6 +43,7 @@ import 
org.apache.carbondata.spark.CarbonAliasDecoderRelation
 import org.apache.carbondata.spark.rdd.CarbonScanRDD
 import org.apache.carbondata.spark.util.CarbonScalaUtil
 
+
--- End diff --

remove empty line


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153061370
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/execution/command/schema/AlterTableDropColumnCommand.scala
 ---
@@ -120,10 +121,7 @@ private[sql] case class AlterTableDropColumnCommand(
   val schemaEvolutionEntry = new SchemaEvolutionEntry(timeStamp)
   schemaEvolutionEntry.setRemoved(deletedColumnSchema.toList.asJava)
   AlterTableUtil
-.updateSchemaInfo(carbonTable,
-  schemaEvolutionEntry,
-  tableInfo)(sparkSession,
-  sparkSession.sessionState.asInstanceOf[CarbonSessionState])
+  .updateSchemaInfo(carbonTable, schemaEvolutionEntry, 
tableInfo)(sparkSession)
--- End diff --

Move the line up


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153061350
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/execution/command/schema/AlterTableDropColumnCommand.scala
 ---
@@ -20,9 +20,10 @@ package org.apache.spark.sql.execution.command.schema
 import scala.collection.JavaConverters._
 import scala.collection.mutable.ListBuffer
 
+import org.apache.hadoop.hive.ql.session.SessionState
--- End diff --

remove unused import


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153061341
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/execution/command/schema/AlterTableDataTypeChangeCommand.scala
 ---
@@ -94,10 +95,7 @@ private[sql] case class AlterTableDataTypeChangeCommand(
   
tableInfo.getFact_table.getSchema_evolution.getSchema_evolution_history.get(0)
 .setTime_stamp(System.currentTimeMillis)
   AlterTableUtil
-.updateSchemaInfo(carbonTable,
-  schemaEvolutionEntry,
-  tableInfo)(sparkSession,
-  sparkSession.sessionState.asInstanceOf[CarbonSessionState])
+  .updateSchemaInfo(carbonTable, schemaEvolutionEntry, 
tableInfo)(sparkSession)
--- End diff --

move the line up


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153061334
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/execution/command/schema/AlterTableDataTypeChangeCommand.scala
 ---
@@ -19,9 +19,10 @@ package org.apache.spark.sql.execution.command.schema
 
 import scala.collection.JavaConverters._
 
+import org.apache.hadoop.hive.ql.session.SessionState
--- End diff --

Remove the unnecessary import


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153061299
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/execution/CastExpressionOptimization.scala
 ---
@@ -21,12 +21,14 @@ import java.text.{ParseException, SimpleDateFormat}
 import java.util
 import java.util.{Locale, TimeZone}
 
+import scala.Option
 import scala.collection.JavaConverters._
 
-import org.apache.spark.sql.catalyst.expressions.{Attribute, Cast, 
EmptyRow, EqualTo, Expression, GreaterThan, GreaterThanOrEqual, In, LessThan, 
LessThanOrEqual, Literal, Not}
+import org.apache.spark.sql.catalyst.expressions.{Attribute, EmptyRow, 
EqualTo, Expression, GreaterThan, GreaterThanOrEqual, In, LessThan, 
LessThanOrEqual, Literal, Not}
 import org.apache.spark.sql.CastExpr
 import org.apache.spark.sql.sources
-import org.apache.spark.sql.types.{DoubleType, IntegerType, StringType, 
TimestampType}
+import org.apache.spark.sql.types.{DataType, DoubleType, IntegerType, 
StringType, TimestampType}
+import org.apache.spark.sql.CarbonExpressions.{MatchCast => Cast}
--- End diff --

Don't change the other imports, there are unnecessary imports here 


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153061284
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/CarbonSession.scala ---
@@ -43,14 +43,15 @@ class CarbonSession(@transient val sc: SparkContext,
   }
 
   @transient
-  override lazy val sessionState: SessionState = new 
CarbonSessionState(this)
+  override lazy val sessionState: SessionState = CarbonClassReflectionUtils
+.getSessionState(sparkContext, this)
--- End diff --

Change the format like this
```
override lazy val sessionState: SessionState =
CarbonClassReflectionUtils.getSessionState(sparkContext, this)
```


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153061160
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/CarbonExpressions.scala 
---
@@ -0,0 +1,110 @@
+/*
+ * 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.spark.sql
+
+import org.apache.spark.sql.catalyst.TableIdentifier
+import org.apache.spark.sql.catalyst.analysis.UnresolvedRelation
+import 
org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec
+import org.apache.spark.sql.catalyst.expressions.{Attribute, Cast, 
Expression}
+import org.apache.spark.sql.catalyst.plans.logical.{LogicalPlan, 
SubqueryAlias}
+import org.apache.spark.sql.execution.command.DescribeTableCommand
+import org.apache.spark.sql.types.DataType
+
+/**
+ * This class contains the wrappers of all the case classes which are 
common
+ * across spark version 2.1 and 2.2 but have change in parameter list.
+ * Below are the overriden unapply methods in order to make it work
+ * across both the version of spark2.1 and spark 2.2
+ */
+object CarbonExpressions {
+
+  /**
+   * unapply method of Cast class.
+   */
+  object MatchCast {
+def unapply(expr: Expression): Option[(Attribute, DataType)] = {
+  if (expr.isInstanceOf[Cast] && 
expr.asInstanceOf[Cast].child.isInstanceOf[Attribute]) {
+Some((expr.asInstanceOf[Cast].child.asInstanceOf[Attribute], 
expr.asInstanceOf[Cast].child
+  .dataType))
+  } else {
+None
+  }
+}
+  }
+
+  /**
+   * unapply method of Describe Table format.
+   */
+  object CarbonDescribeTable {
+def unapply(plan: LogicalPlan): Option[(TableIdentifier, 
TablePartitionSpec, Boolean)] = {
+  if (plan.isInstanceOf[DescribeTableCommand]) {
+val describeTableCommand = plan.asInstanceOf[DescribeTableCommand]
+if (describeTableCommand.table.isInstanceOf[TableIdentifier] &&
+
describeTableCommand.partitionSpec.isInstanceOf[TablePartitionSpec] &&
+describeTableCommand.isExtended.isInstanceOf[Boolean]) {
+  Some(describeTableCommand.table,
+describeTableCommand.partitionSpec,
+describeTableCommand.isExtended)
+} else {
+  None
+}
+  } else {
+None
+  }
+}
+  }
+
+  /**
+   * unapply method of SubqueryAlias.
+   */
+  object CarbonSubqueryAlias {
+def unapply(plan: LogicalPlan): Option[(String, LogicalPlan)] = {
+  if (plan.isInstanceOf[SubqueryAlias]) {
+val subqueryAlias = plan.asInstanceOf[SubqueryAlias]
+if (subqueryAlias.alias.isInstanceOf[String] &&
+subqueryAlias.child.isInstanceOf[LogicalPlan]) {
+  Some(subqueryAlias.alias,
+subqueryAlias.child)
+} else {
+  None
+}
+  } else {
+None
+  }
+}
+  }
+
+  /**
+   * uapply method of UnresolvedRelation
+   */
+  object CarbonUnresolvedRelation {
+def unapply(plan: LogicalPlan): Option[(TableIdentifier)] = {
+  if (plan.isInstanceOf[UnresolvedRelation]) {
--- End diff --

use `match {case }` instead of if else here


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153061142
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/CarbonExpressions.scala 
---
@@ -0,0 +1,110 @@
+/*
+ * 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.spark.sql
+
+import org.apache.spark.sql.catalyst.TableIdentifier
+import org.apache.spark.sql.catalyst.analysis.UnresolvedRelation
+import 
org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec
+import org.apache.spark.sql.catalyst.expressions.{Attribute, Cast, 
Expression}
+import org.apache.spark.sql.catalyst.plans.logical.{LogicalPlan, 
SubqueryAlias}
+import org.apache.spark.sql.execution.command.DescribeTableCommand
+import org.apache.spark.sql.types.DataType
+
+/**
+ * This class contains the wrappers of all the case classes which are 
common
+ * across spark version 2.1 and 2.2 but have change in parameter list.
+ * Below are the overriden unapply methods in order to make it work
+ * across both the version of spark2.1 and spark 2.2
+ */
+object CarbonExpressions {
+
+  /**
+   * unapply method of Cast class.
+   */
+  object MatchCast {
+def unapply(expr: Expression): Option[(Attribute, DataType)] = {
+  if (expr.isInstanceOf[Cast] && 
expr.asInstanceOf[Cast].child.isInstanceOf[Attribute]) {
+Some((expr.asInstanceOf[Cast].child.asInstanceOf[Attribute], 
expr.asInstanceOf[Cast].child
+  .dataType))
+  } else {
+None
+  }
+}
+  }
+
+  /**
+   * unapply method of Describe Table format.
+   */
+  object CarbonDescribeTable {
+def unapply(plan: LogicalPlan): Option[(TableIdentifier, 
TablePartitionSpec, Boolean)] = {
+  if (plan.isInstanceOf[DescribeTableCommand]) {
--- End diff --

use `match {case }` instead of if else here


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153061126
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/CarbonExpressions.scala 
---
@@ -0,0 +1,110 @@
+/*
+ * 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.spark.sql
+
+import org.apache.spark.sql.catalyst.TableIdentifier
+import org.apache.spark.sql.catalyst.analysis.UnresolvedRelation
+import 
org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec
+import org.apache.spark.sql.catalyst.expressions.{Attribute, Cast, 
Expression}
+import org.apache.spark.sql.catalyst.plans.logical.{LogicalPlan, 
SubqueryAlias}
+import org.apache.spark.sql.execution.command.DescribeTableCommand
+import org.apache.spark.sql.types.DataType
+
+/**
+ * This class contains the wrappers of all the case classes which are 
common
+ * across spark version 2.1 and 2.2 but have change in parameter list.
+ * Below are the overriden unapply methods in order to make it work
+ * across both the version of spark2.1 and spark 2.2
+ */
+object CarbonExpressions {
+
+  /**
+   * unapply method of Cast class.
+   */
+  object MatchCast {
+def unapply(expr: Expression): Option[(Attribute, DataType)] = {
+  if (expr.isInstanceOf[Cast] && 
expr.asInstanceOf[Cast].child.isInstanceOf[Attribute]) {
--- End diff --

use `match {case }` instead of if else here


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153061102
  
--- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/CarbonEnv.scala ---
@@ -22,6 +22,7 @@ import java.util.concurrent.ConcurrentHashMap
 
 import org.apache.spark.sql.hive.{CarbonMetaStore, CarbonMetaStoreFactory, 
CarbonSessionCatalog}
 import org.apache.spark.sql.internal.CarbonSQLConf
+import org.apache.spark.util.Utils
--- End diff --

remove the unnecessary import


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153061073
  
--- Diff: 
integration/spark-common/src/main/scala/org/apache/spark/util/CarbonReflectionUtils.scala
 ---
@@ -0,0 +1,90 @@
+/*
+ * 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.spark.util
+
+import java.util
+
+import scala.reflect.runtime._
+import scala.reflect.runtime.universe._
+
+import org.apache.spark.sql.catalyst.TableIdentifier
+import org.apache.spark.sql.catalyst.analysis.UnresolvedRelation
+import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan
+
+import org.apache.carbondata.common.logging.LogServiceFactory
+
+/**
+ * Reflection APIs
+ */
+
+object CarbonReflectionUtils {
+
+  private val LOGGER = 
LogServiceFactory.getLogService(this.getClass.getCanonicalName)
+
+  private val rm = universe.runtimeMirror(getClass.getClassLoader)
+
+  /**
+   * Returns the field val from a object through reflection.
+   * @param name - name of the field being retrieved.
+   * @param obj - Object from which the field has to be retrieved.
+   * @tparam T
+   * @return
+   */
+  def getField[T: TypeTag: reflect.ClassTag](name: String, obj: T): Any = {
+val im = rm.reflect(obj)
+
+im.symbol.typeSignature.members.find(
+  _.name.toString.equals(name)).map(
+  l => im.reflectField(l.asTerm).get.asInstanceOf[LogicalPlan]
+).getOrElse(null)
+  }
+
+  def hasField[T: TypeTag: reflect.ClassTag](name: String, obj: T): 
Boolean = {
+val hasField : Boolean = if 
(typeOf[T].members.filter(!_.isMethod).toList.contains(name)) {
+  true
+} else {
+  false
+}
+hasField
+  }
+
+  def getUnresolvedRelation(tableIdentifier: TableIdentifier,
+  tableAlias: Option[String] = None): UnresolvedRelation = {
+
+val clazz = 
Utils.classForName("org.apache.spark.sql.catalyst.analysis.UnresolvedRelation")
+try {
+  // For 2.1
+  clazz.getDeclaredField("alias")
+  val ctor = clazz.getConstructors.head
+  ctor.setAccessible(true)
+  val unresolvedrelation = ctor
+.newInstance(tableIdentifier,
+  tableAlias).asInstanceOf[UnresolvedRelation]
+  unresolvedrelation
+} catch {
+  case ce: NoSuchFieldException =>
--- End diff --

Please check based on spark version, not through an exception.


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153061021
  
--- Diff: 
integration/spark-common/src/main/scala/org/apache/spark/util/CarbonReflectionUtils.scala
 ---
@@ -0,0 +1,90 @@
+/*
+ * 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.spark.util
+
+import java.util
+
+import scala.reflect.runtime._
+import scala.reflect.runtime.universe._
+
+import org.apache.spark.sql.catalyst.TableIdentifier
+import org.apache.spark.sql.catalyst.analysis.UnresolvedRelation
+import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan
+
+import org.apache.carbondata.common.logging.LogServiceFactory
+
+/**
+ * Reflection APIs
+ */
+
+object CarbonReflectionUtils {
+
+  private val LOGGER = 
LogServiceFactory.getLogService(this.getClass.getCanonicalName)
+
+  private val rm = universe.runtimeMirror(getClass.getClassLoader)
+
+  /**
+   * Returns the field val from a object through reflection.
+   * @param name - name of the field being retrieved.
+   * @param obj - Object from which the field has to be retrieved.
+   * @tparam T
+   * @return
+   */
+  def getField[T: TypeTag: reflect.ClassTag](name: String, obj: T): Any = {
+val im = rm.reflect(obj)
+
+im.symbol.typeSignature.members.find(
+  _.name.toString.equals(name)).map(
+  l => im.reflectField(l.asTerm).get.asInstanceOf[LogicalPlan]
--- End diff --

no need to type cast


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153061030
  
--- Diff: 
integration/spark-common/src/main/scala/org/apache/spark/util/CarbonReflectionUtils.scala
 ---
@@ -0,0 +1,90 @@
+/*
+ * 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.spark.util
+
+import java.util
+
+import scala.reflect.runtime._
+import scala.reflect.runtime.universe._
+
+import org.apache.spark.sql.catalyst.TableIdentifier
+import org.apache.spark.sql.catalyst.analysis.UnresolvedRelation
+import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan
+
+import org.apache.carbondata.common.logging.LogServiceFactory
+
+/**
+ * Reflection APIs
+ */
+
+object CarbonReflectionUtils {
+
+  private val LOGGER = 
LogServiceFactory.getLogService(this.getClass.getCanonicalName)
+
+  private val rm = universe.runtimeMirror(getClass.getClassLoader)
+
+  /**
+   * Returns the field val from a object through reflection.
+   * @param name - name of the field being retrieved.
+   * @param obj - Object from which the field has to be retrieved.
+   * @tparam T
+   * @return
+   */
+  def getField[T: TypeTag: reflect.ClassTag](name: String, obj: T): Any = {
+val im = rm.reflect(obj)
+
+im.symbol.typeSignature.members.find(
+  _.name.toString.equals(name)).map(
--- End diff --

move this line up


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153061017
  
--- Diff: 
integration/spark-common/src/main/scala/org/apache/spark/util/CarbonReflectionUtils.scala
 ---
@@ -0,0 +1,90 @@
+/*
+ * 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.spark.util
+
+import java.util
+
+import scala.reflect.runtime._
+import scala.reflect.runtime.universe._
+
+import org.apache.spark.sql.catalyst.TableIdentifier
+import org.apache.spark.sql.catalyst.analysis.UnresolvedRelation
+import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan
+
+import org.apache.carbondata.common.logging.LogServiceFactory
+
+/**
+ * Reflection APIs
+ */
+
+object CarbonReflectionUtils {
+
+  private val LOGGER = 
LogServiceFactory.getLogService(this.getClass.getCanonicalName)
+
+  private val rm = universe.runtimeMirror(getClass.getClassLoader)
+
+  /**
+   * Returns the field val from a object through reflection.
+   * @param name - name of the field being retrieved.
+   * @param obj - Object from which the field has to be retrieved.
+   * @tparam T
+   * @return
+   */
+  def getField[T: TypeTag: reflect.ClassTag](name: String, obj: T): Any = {
+val im = rm.reflect(obj)
+
+im.symbol.typeSignature.members.find(
+  _.name.toString.equals(name)).map(
+  l => im.reflectField(l.asTerm).get.asInstanceOf[LogicalPlan]
+).getOrElse(null)
+  }
+
+  def hasField[T: TypeTag: reflect.ClassTag](name: String, obj: T): 
Boolean = {
--- End diff --

remove this method as version check should be from spark


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153060970
  
--- Diff: 
integration/spark-common/src/main/scala/org/apache/spark/sql/optimizer/CarbonDecoderOptimizerHelper.scala
 ---
@@ -84,7 +98,16 @@ class CarbonDecoderProcessor {
 }
 nodeList.add(ArrayCarbonNode(nodeListSeq))
   case e: UnaryNode => process(e.child, nodeList)
-  case i: InsertIntoTable => process(i.child, nodeList)
+  case i: InsertIntoTable =>
+var sparkVersion21: Boolean = false
+
+sparkVersion21 = !CarbonReflectionUtils.hasField("query", 
InsertIntoTable)
--- End diff --

Based on the version availability from spark check the version not depends 
on the field.


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-25 Thread ravipesala
Github user ravipesala commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r153060899
  
--- Diff: 
integration/spark-common/src/main/scala/org/apache/spark/sql/optimizer/CarbonDecoderOptimizerHelper.scala
 ---
@@ -59,6 +62,17 @@ case class CarbonDictionaryTempDecoder(
 
 class CarbonDecoderProcessor {
 
+  val rm = universe.runtimeMirror(getClass.getClassLoader)
+
+  def getField[T: TypeTag: reflect.ClassTag]( name: String, obj: T): Any = 
{
--- End diff --

Remove this method as it seems not used.


---


[GitHub] carbondata pull request #1469: [WIP] Spark-2.2 Carbon Integration - Phase 1

2017-11-24 Thread zzcclp
Github user zzcclp commented on a diff in the pull request:

https://github.com/apache/carbondata/pull/1469#discussion_r152921148
  
--- Diff: 
integration/spark-common-cluster-test/src/test/scala/org/apache/carbondata/cluster/sdv/generated/CarbonV1toV3CompatabilityTestCase.scala
 ---
@@ -49,8 +49,10 @@ class CarbonV1toV3CompatabilityTestCase extends 
QueryTest with BeforeAndAfterAll
   .getOrCreateCarbonSession(storeLocation, 
metaLocation).asInstanceOf[CarbonSession]
 println("store path from env : " + 
CarbonEnv.getInstance(localspark).storePath)
 localspark.sparkContext.setLogLevel("WARN")
-localspark.sessionState.asInstanceOf[CarbonSessionState].metadataHive
-  .runSqlHive(
+
localspark.asInstanceOf[CarbonSession].asInstanceOf[CarbonSession].sharedState.externalCatalog
+  .asInstanceOf[HiveExternalCatalog].client.runSqlHive(
--- End diff --

I just commented this line temporarily, use spark.run to run this sql, 
because class HiveExternalCatalog cannot be accessed in non-org.apache.spark 
package.


---


  1   2   >