aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Armbrust <michael@databricks.com>2015-07-21 11:18:39 -0700
committerMichael Armbrust <michael@databricks.com>2015-07-21 11:18:39 -0700
commit87d890cc105a7f41478433b28f53c9aa431db211 (patch)
tree44ff316233602692b93ea1393a9a06e6d1604501
parent89db3c0b6edcffed7e1e12c202e6827271ddba26 (diff)
downloadspark-87d890cc105a7f41478433b28f53c9aa431db211.tar.gz
spark-87d890cc105a7f41478433b28f53c9aa431db211.tar.bz2
spark-87d890cc105a7f41478433b28f53c9aa431db211.zip
Revert "[SPARK-9154] [SQL] codegen StringFormat"
This reverts commit 7f072c3d5ec50c65d76bd9f28fac124fce96a89e. Revert #7546 Author: Michael Armbrust <michael@databricks.com> Closes #7570 from marmbrus/revert9154 and squashes the following commits: ed2c32a [Michael Armbrust] Revert "[SPARK-9154] [SQL] codegen StringFormat"
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringOperations.scala42
-rw-r--r--sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/StringExpressionsSuite.scala18
-rw-r--r--sql/core/src/test/scala/org/apache/spark/sql/StringFunctionsSuite.scala10
3 files changed, 11 insertions, 59 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 280ae0e546..fe57d17f1e 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
@@ -526,7 +526,7 @@ case class StringRPad(str: Expression, len: Expression, pad: Expression)
/**
* Returns the input formatted according do printf-style format strings
*/
-case class StringFormat(children: Expression*) extends Expression with ImplicitCastInputTypes {
+case class StringFormat(children: Expression*) extends Expression with CodegenFallback {
require(children.nonEmpty, "printf() should take at least 1 argument")
@@ -536,10 +536,6 @@ case class StringFormat(children: Expression*) extends Expression with ImplicitC
private def format: Expression = children(0)
private def args: Seq[Expression] = children.tail
- override def inputTypes: Seq[AbstractDataType] =
- children.zipWithIndex.map(x => if (x._2 == 0) StringType else AnyDataType)
-
-
override def eval(input: InternalRow): Any = {
val pattern = format.eval(input)
if (pattern == null) {
@@ -555,42 +551,6 @@ case class StringFormat(children: Expression*) extends Expression with ImplicitC
}
}
- override def genCode(ctx: CodeGenContext, ev: GeneratedExpressionCode): String = {
- val pattern = children.head.gen(ctx)
-
- val argListGen = children.tail.map(x => (x.dataType, x.gen(ctx)))
- val argListCode = argListGen.map(_._2.code + "\n")
-
- val argListString = argListGen.foldLeft("")((s, v) => {
- val nullSafeString =
- if (ctx.boxedType(v._1) != ctx.javaType(v._1)) {
- // Java primitives get boxed in order to allow null values.
- s"(${v._2.isNull}) ? (${ctx.boxedType(v._1)}) null : " +
- s"new ${ctx.boxedType(v._1)}(${v._2.primitive})"
- } else {
- s"(${v._2.isNull}) ? null : ${v._2.primitive}"
- }
- s + "," + nullSafeString
- })
-
- val form = ctx.freshName("formatter")
- val formatter = classOf[java.util.Formatter].getName
- val sb = ctx.freshName("sb")
- val stringBuffer = classOf[StringBuffer].getName
- s"""
- ${pattern.code}
- boolean ${ev.isNull} = ${pattern.isNull};
- ${ctx.javaType(dataType)} ${ev.primitive} = ${ctx.defaultValue(dataType)};
- if (!${ev.isNull}) {
- ${argListCode.mkString}
- $stringBuffer $sb = new $stringBuffer();
- $formatter $form = new $formatter($sb, ${classOf[Locale].getName}.US);
- $form.format(${pattern.primitive}.toString() $argListString);
- ${ev.primitive} = UTF8String.fromString($sb.toString());
- }
- """
- }
-
override def prettyName: String = "printf"
}
diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/StringExpressionsSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/StringExpressionsSuite.scala
index 3c2d88731b..96c540ab36 100644
--- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/StringExpressionsSuite.scala
+++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/StringExpressionsSuite.scala
@@ -351,16 +351,18 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper {
}
test("FORMAT") {
- checkEvaluation(StringFormat(Literal("aa%d%s"), Literal(123), Literal("a")), "aa123a")
+ val f = 'f.string.at(0)
+ val d1 = 'd.int.at(1)
+ val s1 = 's.int.at(2)
+
+ val row1 = create_row("aa%d%s", 12, "cc")
+ val row2 = create_row(null, 12, "cc")
+ checkEvaluation(StringFormat(Literal("aa%d%s"), Literal(123), Literal("a")), "aa123a", row1)
checkEvaluation(StringFormat(Literal("aa")), "aa", create_row(null))
- checkEvaluation(StringFormat(Literal("aa%d%s"), Literal(123), Literal("a")), "aa123a")
- checkEvaluation(StringFormat(Literal("aa%d%s"), 12, "cc"), "aa12cc")
+ checkEvaluation(StringFormat(Literal("aa%d%s"), Literal(123), Literal("a")), "aa123a", row1)
- checkEvaluation(StringFormat(Literal.create(null, StringType), 12, "cc"), null)
- checkEvaluation(
- StringFormat(Literal("aa%d%s"), Literal.create(null, IntegerType), "cc"), "aanullcc")
- checkEvaluation(
- StringFormat(Literal("aa%d%s"), 12, Literal.create(null, StringType)), "aa12null")
+ checkEvaluation(StringFormat(f, d1, s1), "aa12cc", row1)
+ checkEvaluation(StringFormat(f, d1, s1), null, row2)
}
test("INSTR") {
diff --git a/sql/core/src/test/scala/org/apache/spark/sql/StringFunctionsSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/StringFunctionsSuite.scala
index 3702e73b4e..d1f855903c 100644
--- a/sql/core/src/test/scala/org/apache/spark/sql/StringFunctionsSuite.scala
+++ b/sql/core/src/test/scala/org/apache/spark/sql/StringFunctionsSuite.scala
@@ -132,16 +132,6 @@ class StringFunctionsSuite extends QueryTest {
checkAnswer(
df.selectExpr("printf(a, b, c)"),
Row("aa123cc"))
-
- val df2 = Seq(("aa%d%s".getBytes, 123, "cc")).toDF("a", "b", "c")
-
- checkAnswer(
- df2.select(formatString($"a", $"b", $"c"), formatString("aa%d%s", "b", "c")),
- Row("aa123cc", "aa123cc"))
-
- checkAnswer(
- df2.selectExpr("printf(a, b, c)"),
- Row("aa123cc"))
}
test("string instr function") {