aboutsummaryrefslogtreecommitdiff
path: root/sql/catalyst
diff options
context:
space:
mode:
authorTakuya UESHIN <ueshin@happy-camper.st>2014-07-16 11:13:38 -0700
committerReynold Xin <rxin@apache.org>2014-07-16 11:13:48 -0700
commitbf1ddc7b848c9dae671d6dff7d20d160abbe7b5c (patch)
treeacda4a6f1ee6f3478025b35657bf51d226b3dbfd /sql/catalyst
parentfb38b9cc517904bf7e8bd55ac2934f5bbe6bb2e1 (diff)
downloadspark-bf1ddc7b848c9dae671d6dff7d20d160abbe7b5c.tar.gz
spark-bf1ddc7b848c9dae671d6dff7d20d160abbe7b5c.tar.bz2
spark-bf1ddc7b848c9dae671d6dff7d20d160abbe7b5c.zip
[SPARK-2518][SQL] Fix foldability of Substring expression.
This is a follow-up of #1428. Author: Takuya UESHIN <ueshin@happy-camper.st> Closes #1432 from ueshin/issues/SPARK-2518 and squashes the following commits: 37d1ace [Takuya UESHIN] Fix foldability of Substring expression. (cherry picked from commit cc965eea510397642830acb21f61127b68c098d6) Signed-off-by: Reynold Xin <rxin@apache.org>
Diffstat (limited to 'sql/catalyst')
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringOperations.scala2
-rw-r--r--sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/ConstantFoldingSuite.scala15
2 files changed, 14 insertions, 3 deletions
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringOperations.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringOperations.scala
index f1b27c3cb5..97fc3a3b14 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringOperations.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringOperations.scala
@@ -216,6 +216,8 @@ case class Substring(str: Expression, pos: Expression, len: Expression) extends
type EvaluatedType = Any
+ override def foldable = str.foldable && pos.foldable && len.foldable
+
def nullable: Boolean = str.nullable || pos.nullable || len.nullable
def dataType: DataType = {
if (!resolved) {
diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/ConstantFoldingSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/ConstantFoldingSuite.scala
index 0ff8206401..ff8d0d06c4 100644
--- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/ConstantFoldingSuite.scala
+++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/ConstantFoldingSuite.scala
@@ -201,7 +201,12 @@ class ConstantFoldingSuite extends PlanTest {
Like(Literal(null, StringType), "abc") as 'c13,
Like("abc", Literal(null, StringType)) as 'c14,
- Upper(Literal(null, StringType)) as 'c15)
+ Upper(Literal(null, StringType)) as 'c15,
+
+ Substring(Literal(null, StringType), 0, 1) as 'c16,
+ Substring("abc", Literal(null, IntegerType), 1) as 'c17,
+ Substring("abc", 0, Literal(null, IntegerType)) as 'c18
+ )
val optimized = Optimize(originalQuery.analyze)
@@ -228,8 +233,12 @@ class ConstantFoldingSuite extends PlanTest {
Literal(null, BooleanType) as 'c13,
Literal(null, BooleanType) as 'c14,
- Literal(null, StringType) as 'c15)
- .analyze
+ Literal(null, StringType) as 'c15,
+
+ Literal(null, StringType) as 'c16,
+ Literal(null, StringType) as 'c17,
+ Literal(null, StringType) as 'c18
+ ).analyze
comparePlans(optimized, correctAnswer)
}