liuyongvs commented on code in PR #3262:
URL: https://github.com/apache/calcite/pull/3262#discussion_r1227567195
##########
core/src/main/java/org/apache/calcite/sql/fun/SqlLibraryOperators.java:
##########
@@ -1005,6 +1012,23 @@ private static RelDataType
arrayReturnType(SqlOperatorBinding opBinding) {
ReturnTypes.TO_MAP_VALUES_NULLABLE,
OperandTypes.MAP);
+ private static RelDataType deriveTypeMapFromEntries(SqlOperatorBinding
opBinding) {
+ final RelDataType entriesType = opBinding.collectOperandTypes().get(0);
+ final RelDataType entryType = entriesType.getComponentType();
+ return SqlTypeUtil.createMapType(
+ opBinding.getTypeFactory(),
+ requireNonNull(entryType.getFieldList().get(0).getType(), "inferred
key type"),
+ requireNonNull(entryType.getFieldList().get(1).getType(), "inferred
value type"),
+ entriesType.isNullable() || entryType.isNullable());
+ }
+
Review Comment:
comments:
```
comments:
because my other prs will conflict it, so i don't submit it now. so i add an
summary:
the spark MAP_FROM_ENTRIES nullable have 2 case:
1) input is nullable
2) array, which contains null entry like this ,it will also return null
so we should take this into consideration, type and result, i will add
comment in the pr when you review you will see
// spark
spark-sql> select map_from_entries(array(struct(1, 'a'), null));
NULL
// calcite should test this
f.checkNull("map_from_entries(array[row(1, 'a'), null])");
f.checkType("map_from_entries(array[row(1, 'a'), null])",
"(INTEGER, CHAR(1)) MAP");
case class MapFromEntries(child: Expression)
extends UnaryExpression
with NullIntolerant
with QueryErrorsBase {
@transient
private lazy val dataTypeDetails: Option[(MapType, Boolean, Boolean)] =
child.dataType match {
case ArrayType(
StructType(Array(
StructField(_, keyType, keyNullable, _),
StructField(_, valueType, valueNullable, _))),
containsNull) => Some((MapType(keyType, valueType, valueNullable),
keyNullable, containsNull))
case _ => None
}
@transient private lazy val nullEntries: Boolean = dataTypeDetails.get._3
override def nullable: Boolean = child.nullable || nullEntries
```
--
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]