Skip to content

Commit 54c512b

Browse files
Davies Liudavies
authored andcommitted
[SPARK-8745] [SQL] remove GenerateProjection
cc rxin Author: Davies Liu <[email protected]> Closes #10316 from davies/remove_generate_projection.
1 parent a6325fc commit 54c512b

File tree

8 files changed

+11
-319
lines changed

8 files changed

+11
-319
lines changed

sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/GenerateProjection.scala

Lines changed: 0 additions & 238 deletions
This file was deleted.

sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/GenerateSafeProjection.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ import org.apache.spark.sql.catalyst.expressions.aggregate.NoOp
2222
import org.apache.spark.sql.catalyst.util.{GenericArrayData, ArrayBasedMapData}
2323
import org.apache.spark.sql.types._
2424

25+
/**
26+
* Java can not access Projection (in package object)
27+
*/
28+
abstract class BaseProjection extends Projection {}
2529

2630
/**
2731
* Generates byte code that produces a [[MutableRow]] object (not an [[UnsafeRow]]) that can update

sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CodeGenerationSuite.scala

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
package org.apache.spark.sql.catalyst.expressions
1919

2020
import org.apache.spark.SparkFunSuite
21-
import org.apache.spark.sql.{Row, RandomDataGenerator}
22-
import org.apache.spark.sql.catalyst.{CatalystTypeConverters, InternalRow}
21+
import org.apache.spark.sql.Row
22+
import org.apache.spark.sql.catalyst.InternalRow
2323
import org.apache.spark.sql.catalyst.dsl.expressions._
2424
import org.apache.spark.sql.catalyst.expressions.codegen._
2525
import org.apache.spark.sql.types._
@@ -38,7 +38,6 @@ class CodeGenerationSuite extends SparkFunSuite with ExpressionEvalHelper {
3838
val futures = (1 to 20).map { _ =>
3939
future {
4040
GeneratePredicate.generate(EqualTo(Literal(1), Literal(1)))
41-
GenerateProjection.generate(EqualTo(Literal(1), Literal(1)) :: Nil)
4241
GenerateMutableProjection.generate(EqualTo(Literal(1), Literal(1)) :: Nil)
4342
GenerateOrdering.generate(Add(Literal(1), Literal(1)).asc :: Nil)
4443
}

sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/ExpressionEvalHelper.scala

Lines changed: 1 addition & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ trait ExpressionEvalHelper extends GeneratorDrivenPropertyChecks {
4343
val catalystValue = CatalystTypeConverters.convertToCatalyst(expected)
4444
checkEvaluationWithoutCodegen(expression, catalystValue, inputRow)
4545
checkEvaluationWithGeneratedMutableProjection(expression, catalystValue, inputRow)
46-
checkEvaluationWithGeneratedProjection(expression, catalystValue, inputRow)
4746
if (GenerateUnsafeProjection.canSupport(expression.dataType)) {
4847
checkEvalutionWithUnsafeProjection(expression, catalystValue, inputRow)
4948
}
@@ -120,42 +119,6 @@ trait ExpressionEvalHelper extends GeneratorDrivenPropertyChecks {
120119
}
121120
}
122121

123-
protected def checkEvaluationWithGeneratedProjection(
124-
expression: Expression,
125-
expected: Any,
126-
inputRow: InternalRow = EmptyRow): Unit = {
127-
128-
val plan = generateProject(
129-
GenerateProjection.generate(Alias(expression, s"Optimized($expression)")() :: Nil),
130-
expression)
131-
132-
val actual = plan(inputRow)
133-
val expectedRow = InternalRow(expected)
134-
135-
// We reimplement hashCode in generated `SpecificRow`, make sure it's consistent with our
136-
// interpreted version.
137-
if (actual.hashCode() != expectedRow.hashCode()) {
138-
val ctx = new CodeGenContext
139-
val evaluated = expression.gen(ctx)
140-
fail(
141-
s"""
142-
|Mismatched hashCodes for values: $actual, $expectedRow
143-
|Hash Codes: ${actual.hashCode()} != ${expectedRow.hashCode()}
144-
|Expressions: $expression
145-
|Code: $evaluated
146-
""".stripMargin)
147-
}
148-
149-
if (actual != expectedRow) {
150-
val input = if (inputRow == EmptyRow) "" else s", input: $inputRow"
151-
fail("Incorrect Evaluation in codegen mode: " +
152-
s"$expression, actual: $actual, expected: $expectedRow$input")
153-
}
154-
if (actual.copy() != expectedRow) {
155-
fail(s"Copy of generated Row is wrong: actual: ${actual.copy()}, expected: $expectedRow")
156-
}
157-
}
158-
159122
protected def checkEvalutionWithUnsafeProjection(
160123
expression: Expression,
161124
expected: Any,
@@ -202,7 +165,7 @@ trait ExpressionEvalHelper extends GeneratorDrivenPropertyChecks {
202165
checkEvaluationWithOptimization(expression, expected)
203166

204167
var plan = generateProject(
205-
GenerateProjection.generate(Alias(expression, s"Optimized($expression)")() :: Nil),
168+
GenerateMutableProjection.generate(Alias(expression, s"Optimized($expression)")() :: Nil)(),
206169
expression)
207170
var actual = plan(inputRow).get(0, expression.dataType)
208171
assert(checkResult(actual, expected))

sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/MathFunctionsSuite.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ package org.apache.spark.sql.catalyst.expressions
2020
import com.google.common.math.LongMath
2121

2222
import org.apache.spark.SparkFunSuite
23-
import org.apache.spark.sql.catalyst.dsl.expressions._
24-
import org.apache.spark.sql.catalyst.expressions.codegen.{GenerateProjection, GenerateMutableProjection}
2523
import org.apache.spark.sql.catalyst.InternalRow
24+
import org.apache.spark.sql.catalyst.dsl.expressions._
25+
import org.apache.spark.sql.catalyst.expressions.codegen.GenerateMutableProjection
2626
import org.apache.spark.sql.catalyst.optimizer.DefaultOptimizer
2727
import org.apache.spark.sql.catalyst.plans.logical.{OneRowRelation, Project}
2828
import org.apache.spark.sql.types._

sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/codegen/CodegenExpressionCachingSuite.scala

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,6 @@ class CodegenExpressionCachingSuite extends SparkFunSuite {
3434
assert(instance.apply(null).getBoolean(0) === false)
3535
}
3636

37-
test("GenerateProjection should initialize expressions") {
38-
val expr = And(NondeterministicExpression(), NondeterministicExpression())
39-
val instance = GenerateProjection.generate(Seq(expr))
40-
assert(instance.apply(null).getBoolean(0) === false)
41-
}
42-
4337
test("GenerateMutableProjection should initialize expressions") {
4438
val expr = And(NondeterministicExpression(), NondeterministicExpression())
4539
val instance = GenerateMutableProjection.generate(Seq(expr))()
@@ -64,18 +58,6 @@ class CodegenExpressionCachingSuite extends SparkFunSuite {
6458
assert(instance2.apply(null).getBoolean(0) === true)
6559
}
6660

67-
test("GenerateProjection should not share expression instances") {
68-
val expr1 = MutableExpression()
69-
val instance1 = GenerateProjection.generate(Seq(expr1))
70-
assert(instance1.apply(null).getBoolean(0) === false)
71-
72-
val expr2 = MutableExpression()
73-
expr2.mutableState = true
74-
val instance2 = GenerateProjection.generate(Seq(expr2))
75-
assert(instance1.apply(null).getBoolean(0) === false)
76-
assert(instance2.apply(null).getBoolean(0) === true)
77-
}
78-
7961
test("GenerateMutableProjection should not share expression instances") {
8062
val expr1 = MutableExpression()
8163
val instance1 = GenerateMutableProjection.generate(Seq(expr1))()

sql/core/src/main/scala/org/apache/spark/sql/execution/local/ExpandNode.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ package org.apache.spark.sql.execution.local
1919

2020
import org.apache.spark.sql.SQLConf
2121
import org.apache.spark.sql.catalyst.InternalRow
22-
import org.apache.spark.sql.catalyst.expressions.{Attribute, Expression, Projection}
22+
import org.apache.spark.sql.catalyst.expressions._
2323

2424
case class ExpandNode(
2525
conf: SQLConf,
@@ -36,7 +36,7 @@ case class ExpandNode(
3636

3737
override def open(): Unit = {
3838
child.open()
39-
groups = projections.map(ee => newProjection(ee, child.output)).toArray
39+
groups = projections.map(ee => newMutableProjection(ee, child.output)()).toArray
4040
idx = groups.length
4141
}
4242

0 commit comments

Comments
 (0)