github-actions[bot] commented on code in PR #69949:
URL: https://github.com/apache/doris/pull/69949#discussion_r4444976891


##########
be/src/core/column/column_map.cpp:
##########
@@ -741,12 +741,6 @@ bool ColumnMap::has_enough_capacity(const IColumn& src) 
const {
            offsets_column->has_enough_capacity(*src_concrete.offsets_column);
 }
 
-ColumnPtr ColumnMap::convert_to_full_column_if_const() const {

Review Comment:
   [P1] Detach sink Maps before removing their wrapper isolation
   
   Removing this override makes ordinary conversion retain the same Map parent, 
but `OlapTableBlockConvertor::_validate_data()` still calls it before TYPE_MAP 
validation replaces key/value pointers during non-strict VARCHAR truncation 
(`vtablet_block_convertor.cpp:517`). For a non-null source `m 
MAP<INT,VARCHAR(10)>` containing `{1:'abcdef'}`, insert `SELECT k,m,m` into 
non-null `MAP<INT,VARCHAR(3)>` and `MAP<INT,VARCHAR(10)>` outputs with 
`enable_insert_strict=false`. Both outputs can retain one parent: BE 
`DataTypeString::equals()` ignores length, making the FE-inserted Map cast an 
identity cast, and projection/sink output preserves shared pointers. Validating 
the narrow slot installs a replacement values child containing `'abc'` on that 
parent, so the wider slot also stores `'abc'` instead of `'abcdef'`. The 
deleted implementation gave each slot a separate parent and isolated this 
replacement. Detach the owned Map at the mutating sink boundary and cover this 
shared-input narrow/wi
 de case in the same change.



-- 
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]

Reply via email to