blob: 8578a7e1ff3e30283fe88093f17f001066b3fc70 [file] [view]
# BE Core Module — Review Guide
## Allocator-Aware Containers
Types in `be/src/core/custom_allocator.h` exist to route owned memory through Doris allocation and tracking paths.
### Checkpoints
- [ ] For BE-owned buffers or containers whose memory should be tracked, prefer `DorisVector`, `DorisMap`, `DorisUniqueBufferPtr`, and related allocator-aware wrappers instead of the corresponding standard library ownership types
## COW Column Semantics
Vectorized columns (`IColumn`) use intrusive-reference-counted copy-on-write.
### Checkpoints
- [ ] Exclusive ownership guaranteed before `mutate()` on hot paths? Shared ownership triggers deep copy
- [ ] `assume_mutable_ref()` used only when exclusive ownership is already guaranteed?
- [ ] After `Block::mutate_columns()`, columns put back with `set_columns()`?
- [ ] `convert_to_full_column_if_const()` materializes only `ColumnConst`; ordinary columns may return shared storage?
## Type System and Serialization
### Upgrade/Downgrade Compatibility
- [ ] Serialized block/datatype layout changes gated with `be_exec_version` where required?
- [ ] Old and new serialization branches updated together (byte-size, serialize, deserialize)?
### Decimal and Type Metadata
- [ ] Decimal result types check precision growth limits, no accidental incompatible widening?
- [ ] `DecimalV2` `original_precision`/`original_scale` set intentionally, not left as `UINT32_MAX` sentinel?
- [ ] `TScalarType` optional fields filled for DECIMAL, CHAR/VARCHAR, DATETIMEV2?
- [ ] Flattened `TTypeDesc.types` traversal correct for nested complex types?
## Block Merge Nullable Trap
`MutableBlock::merge_impl()` assumes nullable promotion shape without dynamic checking in release builds.
- [ ] New block merge logic preserves nullable-promotion preconditions?