Github user kevinyu98 commented on a diff in the pull request: https://github.com/apache/spark/pull/12646#discussion_r116914922 --- Diff: sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringExpressions.scala --- @@ -461,68 +462,249 @@ case class FindInSet(left: Expression, right: Expression) extends BinaryExpressi } /** - * A function that trim the spaces from both ends for the specified string. + * A function that trim the spaces or a trim string from both ends for the specified string. */ @ExpressionDescription( - usage = "_FUNC_(str) - Removes the leading and trailing space characters from `str`.", + usage = """ + _FUNC_(str) - Removes the leading and trailing space characters from `str`. + _FUNC_(BOTH trimString FROM str) - Remove the leading and trailing trimString from `str` + _FUNC_(LEADING trimChar FROM str) - Remove the leading trimString from `str` + _FUNC_(TRAILING trimChar FROM str) - Remove the trailing trimString from `str` + """, extended = """ + Arguments: + str - a string expression + trimString - the trim string + BOTH, FROM - these are keyword to specify for trim string from both side of the string + LEADING, FROM - these are keyword to specify for trim string from left side of the string + TRAILING, FROM - these are keyword to specify for trim string from right side of the string Examples: > SELECT _FUNC_(' SparkSQL '); SparkSQL + > SELECT _FUNC_(BOTH 'SL' FROM 'SSparkSQLS'); + parkSQ + > SELECT _FUNC_(LEADING 'paS' FROM 'SSparkSQLS'); + rkSQLS + > SELECT _FUNC_(TRAILING 'SLQ' FROM 'SSparkSQLS'); + SSparkS """) -case class StringTrim(child: Expression) - extends UnaryExpression with String2StringExpression { +case class StringTrim(children: Seq[Expression]) --- End diff -- I think we need to overwrite the nullSafeCodeGen from BinaryExpression, it will be the right.genCode(ctx), I am not sure it will be able to check the NonEmpty or not. Also I remembered there is another place we need to make hack changes if we use binaryExpression, it is at visitFunctionCall in AstBuilder.scala, for the existing trim() function, the arguments will be built with one expression, but the trim function registered with two expressions, so I have to create one more default expression for the trim() function, otherwise, it will fail at Analyzer.scala with this failure case Failure(e) => throw new AnalysisException(s"Invalid number of arguments for function $name") based on the above, I chose the Seq(expressions) > StringTrim has a sequence of children (one or two children in our case), so you can't make sure it's unary yes
--- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. --- --------------------------------------------------------------------- To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org For additional commands, e-mail: reviews-h...@spark.apache.org