github-actions[bot] commented on code in PR #67921:
URL: https://github.com/apache/doris/pull/67921#discussion_r4004062604
##########
fe/fe-core/src/main/java/org/apache/doris/datasource/lance/LanceTypeConverter.java:
##########
@@ -89,7 +84,8 @@ private static Type toDorisType(Field field, boolean
allowNull) {
ArrowType arrowType = field.getType();
switch (arrowType.getTypeID()) {
case Null:
- return allowNull ? Type.NULL : Type.UNSUPPORTED;
+ // Required Null leaves cannot use the nullable SerDe that
handles Arrow NA buffers.
+ return field.isNullable() ? Type.NULL : Type.UNSUPPORTED;
Review Comment:
[P1] Preserve the upgrade fence through file()\n\nThis change makes nullable
nested Null roots queryable and marks them as requiring the current BE reader,
but the generic `file(uri=..., format="lance", ...S3 properties...)` path loses
that marker: `FileTableValuedFunction` delegates the schema and Lance scan
metadata while inheriting its own empty `lanceCurrentReaderColumns`, and
`TVFScanNode` consults that wrapper from `FunctionGenTable`. It can therefore
select a smooth-upgrade source BE that lacks the new Arrow NA materialization
path and can crash on this column. Please delegate
`requiresCurrentLanceReader()` through the wrapper and cover this route in the
upgrade test.
##########
be/src/core/data_type/data_type.h:
##########
@@ -170,7 +170,9 @@ class IDataType : private boost::noncopyable {
auto node = ptype->add_types();
node->set_type(TTypeNodeType::SCALAR);
auto scalar_type = node->mutable_scalar_type();
- scalar_type->set_type(doris::to_thrift(get_primitive_type()));
+ // NULL uses UInt8 internally; preserve its logical type even inside
complex schemas.
+ scalar_type->set_type(is_null_literal() ? TPrimitiveType::NULL_TYPE
Review Comment:
[P1] Keep local Lance execution on the schema backend\n\nThis change allows
a current BE to return nested logical NULL types during Local Lance schema
discovery, but the generic `file(file_path=..., format="lance",
shared_storage="true")` wrapper loses Local execution-backend affinity.
`FunctionGenTable` retains `FileTableValuedFunction`, so `TVFScanNode` misses
its `instanceof LocalTableValuedFunction` branch and can schedule the dataset
on an old smooth-upgrade source BE that cannot materialize the new nested Arrow
NA shape. Forwarding the S3 capability check does not cover Local because its
safety invariant is backend affinity; please expose and delegate the effective
execution backend (or unwrap the delegate) and add a generic-file Local upgrade
test.
--
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]