Github user ueshin commented on a diff in the pull request:
https://github.com/apache/spark/pull/21073#discussion_r197063803
--- Diff:
sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CollectionExpressionsSuite.scala
---
@@ -80,6 +80,138 @@ class CollectionExpressionsSuite extends SparkFunSuite
with ExpressionEvalHelper
checkEvaluation(MapEntries(ms2), null)
}
+ test("Map Concat") {
+ val m0 = Literal.create(Map("a" -> "1", "b" -> "2"),
MapType(StringType, StringType,
+ valueContainsNull = false))
+ val m1 = Literal.create(Map("c" -> "3", "a" -> "4"),
MapType(StringType, StringType,
+ valueContainsNull = false))
+ val m2 = Literal.create(Map("d" -> "4", "e" -> "5"),
MapType(StringType, StringType))
+ val m3 = Literal.create(Map("a" -> "1", "b" -> "2"),
MapType(StringType, StringType))
+ val m4 = Literal.create(Map("a" -> null, "c" -> "3"),
MapType(StringType, StringType))
+ val m5 = Literal.create(Map("a" -> 1, "b" -> 2), MapType(StringType,
IntegerType))
+ val m6 = Literal.create(Map("a" -> null, "c" -> 3),
MapType(StringType, IntegerType))
+ val m7 = Literal.create(Map(List(1, 2) -> 1, List(3, 4) -> 2),
+ MapType(ArrayType(IntegerType), IntegerType))
+ val m8 = Literal.create(Map(List(5, 6) -> 3, List(1, 2) -> 4),
+ MapType(ArrayType(IntegerType), IntegerType))
+ val m9 = Literal.create(Map(Map(1 -> 2, 3 -> 4) -> 1, Map(5 -> 6, 7 ->
8) -> 2),
+ MapType(MapType(IntegerType, IntegerType), IntegerType))
+ val m10 = Literal.create(Map(Map(9 -> 10, 11 -> 12) -> 3, Map(1 -> 2,
3 -> 4) -> 4),
+ MapType(MapType(IntegerType, IntegerType), IntegerType))
+ val m11 = Literal.create(Map(1 -> "1", 2 -> "2"), MapType(IntegerType,
StringType,
+ valueContainsNull = false))
+ val m12 = Literal.create(Map(3 -> "3", 4 -> "4"), MapType(IntegerType,
StringType,
+ valueContainsNull = false))
+ val mNull = Literal.create(null, MapType(StringType, StringType))
+
+ // overlapping maps
+ checkEvaluation(MapConcat(Seq(m0, m1)),
+ (
+ Array("a", "b", "c", "a"), // keys
+ Array("1", "2", "3", "4") // values
+ )
+ )
+
+ // maps with no overlap
+ checkEvaluation(MapConcat(Seq(m0, m2)),
+ Map("a" -> "1", "b" -> "2", "d" -> "4", "e" -> "5"))
+
+ // 3 maps
+ checkEvaluation(MapConcat(Seq(m0, m1, m2)),
+ (
+ Array("a", "b", "c", "a", "d", "e"), // keys
+ Array("1", "2", "3", "4", "4", "5") // values
+ )
+ )
+
+ // null reference values
+ checkEvaluation(MapConcat(Seq(m3, m4)),
+ (
+ Array("a", "b", "a", "c"), // keys
+ Array("1", "2", null, "3") // values
+ )
+ )
+
+ // null primitive values
+ checkEvaluation(MapConcat(Seq(m5, m6)),
+ (
+ Array("a", "b", "a", "c"), // keys
+ Array(1, 2, null, 3) // values
+ )
+ )
+
+ // keys that are primitive
+ checkEvaluation(MapConcat(Seq(m11, m12)),
+ (
+ Array(1, 2, 3, 4), // keys
+ Array("1", "2", "3", "4") // values
+ )
+ )
+
+ // keys that are arrays, with overlap
+ checkEvaluation(MapConcat(Seq(m7, m8)),
+ (
+ Array(List(1, 2), List(3, 4), List(5, 6), List(1, 2)), // keys
+ Array(1, 2, 3, 4) // values
+ )
+ )
+
+ // keys that are maps, with overlap
+ checkEvaluation(MapConcat(Seq(m9, m10)),
+ (
+ Array(Map(1 -> 2, 3 -> 4), Map(5 -> 6, 7 -> 8), Map(9 -> 10, 11 ->
12),
+ Map(1 -> 2, 3 -> 4)), // keys
+ Array(1, 2, 3, 4) // values
+ )
+ )
+
+ // null map
+ checkEvaluation(MapConcat(Seq(m0, mNull)),
+ null)
--- End diff --
This should be 1 line? Also the following lines.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]