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
---