Github user pepinoflo commented on a diff in the pull request:
https://github.com/apache/spark/pull/21208#discussion_r186292213
--- Diff:
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/collectionOperations.scala
---
@@ -1229,3 +1229,140 @@ case class Flatten(child: Expression) extends
UnaryExpression {
override def prettyName: String = "flatten"
}
+
+/**
+ * Returns the array containing the given input value (left) count (right)
times.
+ */
+@ExpressionDescription(
+ usage = "_FUNC_(element, count) - Returns the array containing element
count times.",
+ examples = """
+ Examples:
+ > SELECT _FUNC_('123', 2);
+ ['123', '123']
+ """)
+case class ArrayRepeat(left: Expression, right: Expression)
+ extends BinaryExpression with ExpectsInputTypes {
+
+ override def dataType: ArrayType = ArrayType(left.dataType,
left.nullable)
+
+ override def inputTypes: Seq[AbstractDataType] = Seq(AnyDataType,
IntegerType)
+
+ override def nullable: Boolean = right.nullable
+
+ override def eval(input: InternalRow): Any = {
+ val count = right.eval(input)
+ if (count == null) {
+ null
+ } else {
+ new
GenericArrayData(List.fill(count.asInstanceOf[Int])(left.eval(input)))
+ }
+ }
+
+ override def prettyName: String = "array_repeat"
+
+ override def nullSafeCodeGen(ctx: CodegenContext,
--- End diff --
It was because if right is null we don't want to do code gen and return
null instead. Do you think it would make more sense removing this one and put
all the code in `doGenCode`? This would also fix the problem of doing
`left.genCode.isNull` in the middle of `doGenCode`.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]