stevomitric commented on code in PR #48546:
URL: https://github.com/apache/spark/pull/48546#discussion_r1862438348
##########
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/collationExpressions.scala:
##########
@@ -73,24 +75,57 @@ object CollateExpressionBuilder extends ExpressionBuilder {
* This function is pass-through, it will not modify the input data.
* Only type metadata will be updated.
*/
-case class Collate(child: Expression, collationName: String)
- extends UnaryExpression with ExpectsInputTypes {
- private val collationId = CollationFactory.collationNameToId(collationName)
- override def dataType: DataType = StringType(collationId)
+case class Collate(child: Expression, collation: Expression)
+ extends BinaryExpression with ExpectsInputTypes with CodegenFallback {
Review Comment:
Because if we call `defineCodeGen` then it will implicitly call CodeGen on
left and right child which results in execution error (right child is
unevaluable).
```scala
override protected def doGenCode(ctx: CodegenContext, ev: ExprCode):
ExprCode =
defineCodeGen(ctx, ev, (childGen, _) => childGen) // exception,
generates both left and right code
```
or
```scala
override protected def doGenCode(ctx: CodegenContext, ev: ExprCode):
ExprCode =
left.doGenCode(ctx, ev) // forbiden
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]