[ https://issues.apache.org/jira/browse/SPARK-4812?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Shixiong Zhu updated SPARK-4812:
--------------------------------
Description:
The problem is `codegenEnabled` is `val`, but it uses a `val` `sqlContext`, which can be override
by subclasses. Here is a simple example to show this issue.
{code}
scala> :paste
// Entering paste mode (ctrl-D to finish)
abstract class Foo {
protected val sqlContext = "Foo"
val codegenEnabled: Boolean = {
println(sqlContext) // it will call subclass's `sqlContext` which has not yet been initialized.
if (sqlContext != null) {
true
} else {
false
}
}
}
class Bar extends Foo {
override val sqlContext = "Bar"
}
println(new Bar().codegenEnabled)
// Exiting paste mode, now interpreting.
null
false
defined class Foo
defined class Bar
scala>
{code}
We should make `sqlContext` `final` to prevent subclasses from overriding it incorrectly.
was:
The problem is `codegenEnabled` is `val`, but it uses a `val` `sqlContext`, which can be override
by subclasses. Here is a simple example to show this issue.
{code}
scala> :paste
// Entering paste mode (ctrl-D to finish)
abstract class Foo {
protected val sqlContext = "Foo"
val codegenEnabled: Boolean = {
println(sqlContext) // it will call subclass's `sqlContext` which has not yet been initialized.
if (sqlContext != null) {
true
} else {
false
}
}
}
class Bar extends Foo {
override val sqlContext = "Bar"
}
println(new Bar().codegenEnabled)
// Exiting paste mode, now interpreting.
null
false
defined class Foo
defined class Bar
scala>
{code}
To fix it, should override codegenEnabled in `InMemoryColumnarTableScan`.
> SparkPlan.codegenEnabled may be initialized to a wrong value
> ------------------------------------------------------------
>
> Key: SPARK-4812
> URL: https://issues.apache.org/jira/browse/SPARK-4812
> Project: Spark
> Issue Type: Bug
> Components: SQL
> Reporter: Shixiong Zhu
> Assignee: Shixiong Zhu
>
> The problem is `codegenEnabled` is `val`, but it uses a `val` `sqlContext`, which can
be override by subclasses. Here is a simple example to show this issue.
> {code}
> scala> :paste
> // Entering paste mode (ctrl-D to finish)
> abstract class Foo {
> protected val sqlContext = "Foo"
> val codegenEnabled: Boolean = {
> println(sqlContext) // it will call subclass's `sqlContext` which has not yet been
initialized.
> if (sqlContext != null) {
> true
> } else {
> false
> }
> }
> }
> class Bar extends Foo {
> override val sqlContext = "Bar"
> }
> println(new Bar().codegenEnabled)
> // Exiting paste mode, now interpreting.
> null
> false
> defined class Foo
> defined class Bar
> scala>
> {code}
> We should make `sqlContext` `final` to prevent subclasses from overriding it incorrectly.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@spark.apache.org
For additional commands, e-mail: issues-help@spark.apache.org
|