Skip to content
Snippets Groups Projects
Commit b6b10882 authored by Reynold Xin's avatar Reynold Xin
Browse files

[SPARK-21103][SQL] QueryPlanConstraints should be part of LogicalPlan

## What changes were proposed in this pull request?
QueryPlanConstraints should be part of LogicalPlan, rather than QueryPlan, since the constraint framework is only used for query plan rewriting and not for physical planning.

## How was this patch tested?
Should be covered by existing tests, since it is a simple refactoring.

Author: Reynold Xin <rxin@databricks.com>

Closes #18310 from rxin/SPARK-21103.
parent e862dc90
No related branches found
No related tags found
No related merge requests found
...@@ -22,10 +22,7 @@ import org.apache.spark.sql.catalyst.trees.TreeNode ...@@ -22,10 +22,7 @@ import org.apache.spark.sql.catalyst.trees.TreeNode
import org.apache.spark.sql.internal.SQLConf import org.apache.spark.sql.internal.SQLConf
import org.apache.spark.sql.types.{DataType, StructType} import org.apache.spark.sql.types.{DataType, StructType}
abstract class QueryPlan[PlanType <: QueryPlan[PlanType]] abstract class QueryPlan[PlanType <: QueryPlan[PlanType]] extends TreeNode[PlanType] {
extends TreeNode[PlanType]
with QueryPlanConstraints[PlanType] {
self: PlanType => self: PlanType =>
def conf: SQLConf = SQLConf.get def conf: SQLConf = SQLConf.get
......
...@@ -27,7 +27,7 @@ import org.apache.spark.sql.internal.SQLConf ...@@ -27,7 +27,7 @@ import org.apache.spark.sql.internal.SQLConf
import org.apache.spark.sql.types.StructType import org.apache.spark.sql.types.StructType
abstract class LogicalPlan extends QueryPlan[LogicalPlan] with Logging { abstract class LogicalPlan extends QueryPlan[LogicalPlan] with QueryPlanConstraints with Logging {
private var _analyzed: Boolean = false private var _analyzed: Boolean = false
......
...@@ -15,12 +15,12 @@ ...@@ -15,12 +15,12 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.spark.sql.catalyst.plans package org.apache.spark.sql.catalyst.plans.logical
import org.apache.spark.sql.catalyst.expressions._ import org.apache.spark.sql.catalyst.expressions._
trait QueryPlanConstraints[PlanType <: QueryPlan[PlanType]] { self: QueryPlan[PlanType] => trait QueryPlanConstraints { self: LogicalPlan =>
/** /**
* An [[ExpressionSet]] that contains invariants about the rows output by this operator. For * An [[ExpressionSet]] that contains invariants about the rows output by this operator. For
...@@ -99,7 +99,8 @@ trait QueryPlanConstraints[PlanType <: QueryPlan[PlanType]] { self: QueryPlan[Pl ...@@ -99,7 +99,8 @@ trait QueryPlanConstraints[PlanType <: QueryPlan[PlanType]] { self: QueryPlan[Pl
private lazy val aliasMap: AttributeMap[Expression] = AttributeMap( private lazy val aliasMap: AttributeMap[Expression] = AttributeMap(
expressions.collect { expressions.collect {
case a: Alias => (a.toAttribute, a.child) case a: Alias => (a.toAttribute, a.child)
} ++ children.flatMap(_.asInstanceOf[QueryPlanConstraints[PlanType]].aliasMap)) } ++ children.flatMap(_.asInstanceOf[QueryPlanConstraints].aliasMap))
// Note: the explicit cast is necessary, since Scala compiler fails to infer the type.
/** /**
* Infers an additional set of constraints from a given set of equality constraints. * Infers an additional set of constraints from a given set of equality constraints.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment