diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/TypeCoercion.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/TypeCoercion.scala index f9edca53d571e..7dd26b62b1fc4 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/TypeCoercion.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/TypeCoercion.scala @@ -325,11 +325,11 @@ object TypeCoercion { assert(newChildren.length == 2) Except(newChildren.head, newChildren.last, isAll) - case s @ Intersect(left, right) if s.childrenResolved && + case s @ Intersect(left, right, isAll) if s.childrenResolved && left.output.length == right.output.length && !s.resolved => val newChildren: Seq[LogicalPlan] = buildNewChildrenWithWiderTypes(left :: right :: Nil) assert(newChildren.length == 2) - Intersect(newChildren.head, newChildren.last) + Intersect(newChildren.head, newChildren.last, isAll) case s: Union if s.childrenResolved && s.children.forall(_.output.length == s.children.head.output.length) && !s.resolved => diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/generators.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/generators.scala index 7391db7211098..d6e67b9ac3d10 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/generators.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/generators.scala @@ -249,32 +249,6 @@ case class ReplicateRows(children: Seq[Expression]) extends Generator with Codeg } } -/** - * Replicate the row N times. N is specified as the first argument to the function. - * This is an internal function solely used by optimizer to rewrite EXCEPT ALL AND - * INTERSECT ALL queries. - */ -case class ReplicateRows(children: Seq[Expression]) extends Generator with CodegenFallback { - private lazy val numColumns = children.length - 1 // remove the multiplier value from output. - - override def elementSchema: StructType = - StructType(children.tail.zipWithIndex.map { - case (e, index) => StructField(s"col$index", e.dataType) - }) - - override def eval(input: InternalRow): TraversableOnce[InternalRow] = { - val numRows = children.head.eval(input).asInstanceOf[Long] - val values = children.tail.map(_.eval(input)).toArray - Range.Long(0, numRows, 1).map { _ => - val fields = new Array[Any](numColumns) - for (col <- 0 until numColumns) { - fields.update(col, values(col)) - } - InternalRow(fields: _*) - } - } -} - /** * Wrapper around another generator to specify outer behavior. This is used to implement functions * such as explode_outer. This expression gets replaced during analysis.