🔍 分析 (Analyze)
这个 issue 的核心不是“新增能力”,而是“收敛默认值语义”。
之前有些默认值散落在调用点,例如 unwrap_or(false)、unwrap_or_default()。短期看没问题,但长期会造成两个风险:
- 新调用点容易忘记协议默认值;
- 同一属性在不同模块里可能被写成不同默认行为。
📍 定位 (Locate)
主要涉及这些位置:
kernel/src/table_properties.rskernel/src/scan/data_skipping/stats_schema/column_filter.rskernel/src/table_configuration.rskernel/src/transaction/mod.rskernel/src/table_features/mod.rs
🛠️ 执行 (Execute)
这次采用“在 TableProperties 提供 resolved accessor”的方案:
- 新增 accessor:
data_skipping_num_indexed_cols()is_change_data_feed_enabled()is_row_tracking_enabled()is_row_tracking_suspended()
- 在上述调用点替换 ad-hoc
unwrap_or逻辑,统一走 accessor。 - 补齐单测,验证:
- 默认值行为正确;
- 显式配置覆盖默认值时行为正确。
本地验证:
cargo fmt --allcargo test -p delta_kernel
✅ 总结 (Summary)
这类重构的价值在于“减少未来错误”,不是立刻增加功能。
把默认值解释权收口到 TableProperties 后,调用方只消费业务语义,不再重复携带协议细节。对后续新增属性和重构来说,review 成本和回归风险都会更低。