Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -569,11 +569,22 @@ case class FindInSet(left: Expression, right: Expression) extends BinaryExpressi

trait String2TrimExpression extends Expression with ImplicitCastInputTypes {

protected def srcStr: Expression
protected def trimStr: Option[Expression]

override def children: Seq[Expression] = srcStr +: trimStr.toSeq
override def dataType: DataType = StringType
override def inputTypes: Seq[AbstractDataType] = Seq.fill(children.size)(StringType)

override def nullable: Boolean = children.exists(_.nullable)
override def foldable: Boolean = children.forall(_.foldable)

// To match the actual parameter order.
override def sql: String = if (trimStr.isDefined) {
s"$prettyName(${trimStr.get.sql}, ${srcStr.sql})"
} else {
super.sql
}
}

object StringTrim {
Expand Down Expand Up @@ -641,11 +652,6 @@ case class StringTrim(

override def prettyName: String = "trim"

override def children: Seq[Expression] = if (trimStr.isDefined) {
srcStr :: trimStr.get :: Nil
} else {
srcStr :: Nil
}
override def eval(input: InternalRow): Any = {
val srcString = srcStr.eval(input).asInstanceOf[UTF8String]
if (srcString == null) {
Expand Down Expand Up @@ -741,12 +747,6 @@ case class StringTrimLeft(

override def prettyName: String = "ltrim"

override def children: Seq[Expression] = if (trimStr.isDefined) {
srcStr :: trimStr.get :: Nil
} else {
srcStr :: Nil
}

override def eval(input: InternalRow): Any = {
val srcString = srcStr.eval(input).asInstanceOf[UTF8String]
if (srcString == null) {
Expand Down Expand Up @@ -844,12 +844,6 @@ case class StringTrimRight(

override def prettyName: String = "rtrim"

override def children: Seq[Expression] = if (trimStr.isDefined) {
srcStr :: trimStr.get :: Nil
} else {
srcStr :: Nil
}

override def eval(input: InternalRow): Any = {
val srcString = srcStr.eval(input).asInstanceOf[UTF8String]
if (srcString == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,8 @@ FROM (
encode(string(id + 2), 'utf-8') col3,
encode(string(id + 3), 'utf-8') col4
FROM range(10)
)
);

-- trim
SELECT trim(" xyz "), ltrim(" xyz "), rtrim(" xyz ");
SELECT trim('xyz', 'yxTomxx'), ltrim('xyz', 'yxTomxx'), rtrim('xyz', 'yxTomxx');
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
-- Automatically generated by SQLQueryTestSuite
-- Number of queries: 15
-- Number of queries: 17


-- !query 0
Expand Down Expand Up @@ -161,3 +161,19 @@ struct<plan:string>
== Physical Plan ==
*Project [concat(cast(id#xL as string), cast(encode(cast((id#xL + 2) as string), utf-8) as string), cast(encode(cast((id#xL + 3) as string), utf-8) as string)) AS col#x]
+- *Range (0, 10, step=1, splits=2)


-- !query 15
SELECT trim(" xyz "), ltrim(" xyz "), rtrim(" xyz ")
-- !query 15 schema
struct<trim( xyz ):string,ltrim( xyz ):string,rtrim( xyz ):string>
-- !query 15 output
xyz xyz xyz


-- !query 16
SELECT trim('xyz', 'yxTomxx'), ltrim('xyz', 'yxTomxx'), rtrim('xyz', 'yxTomxx')
-- !query 16 schema
struct<trim(xyz, yxTomxx):string,ltrim(xyz, yxTomxx):string,rtrim(xyz, yxTomxx):string>
-- !query 16 output
Tom Tomxx yxTom