Skip to content

Commit 0d120ca

Browse files
mrdrivingduckcodex
andcommitted
refactor(scan): const-qualify LogicalGet helpers
Mark scan helper access to LogicalGet as read-only. This documents that predicate and partition filter extraction only inspect planner metadata and do not mutate the logical operator. Co-authored-by: GPT-5.5 <codex@users.noreply.github.com>
1 parent 912c587 commit 0d120ca

1 file changed

Lines changed: 13 additions & 10 deletions

File tree

src/paimon_storage/paimon_scan.cpp

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ struct PaimonScanBindData : public TableFunctionData {
6767
string table_schema_json;
6868
};
6969

70-
static std::shared_ptr<paimon::Predicate> TryConvertComparison(const BoundComparisonExpression &comp, LogicalGet &get) {
70+
static std::shared_ptr<paimon::Predicate> TryConvertComparison(const BoundComparisonExpression &comp,
71+
const LogicalGet &get) {
7172
// early exit: only handle comparison types supported by paimon-cpp
7273
switch (comp.type) {
7374
case ExpressionType::COMPARE_EQUAL:
@@ -130,7 +131,8 @@ static std::shared_ptr<paimon::Predicate> TryConvertComparison(const BoundCompar
130131
}
131132
}
132133

133-
static std::shared_ptr<paimon::Predicate> TryConvertBetween(const BoundBetweenExpression &between, LogicalGet &get) {
134+
static std::shared_ptr<paimon::Predicate> TryConvertBetween(const BoundBetweenExpression &between,
135+
const LogicalGet &get) {
134136
if (between.input->GetExpressionClass() != ExpressionClass::BOUND_COLUMN_REF ||
135137
between.lower->GetExpressionClass() != ExpressionClass::BOUND_CONSTANT ||
136138
between.upper->GetExpressionClass() != ExpressionClass::BOUND_CONSTANT) {
@@ -169,9 +171,9 @@ static std::shared_ptr<paimon::Predicate> TryConvertBetween(const BoundBetweenEx
169171
}
170172

171173
// Forward declaration for mutual recursion with TryConvertOperator.
172-
static std::shared_ptr<paimon::Predicate> TryConvertExpression(const Expression &expr, LogicalGet &get);
174+
static std::shared_ptr<paimon::Predicate> TryConvertExpression(const Expression &expr, const LogicalGet &get);
173175

174-
static std::shared_ptr<paimon::Predicate> TryConvertOperator(const BoundOperatorExpression &op, LogicalGet &get) {
176+
static std::shared_ptr<paimon::Predicate> TryConvertOperator(const BoundOperatorExpression &op, const LogicalGet &get) {
175177
// Validate children count per operator type.
176178
switch (op.type) {
177179
case ExpressionType::COMPARE_IN:
@@ -257,7 +259,7 @@ static std::shared_ptr<paimon::Predicate> TryConvertOperator(const BoundOperator
257259
}
258260

259261
static std::shared_ptr<paimon::Predicate> TryConvertConjunction(const BoundConjunctionExpression &conj,
260-
LogicalGet &get) {
262+
const LogicalGet &get) {
261263
std::vector<std::shared_ptr<paimon::Predicate>> predicates;
262264

263265
for (auto &child : conj.children) {
@@ -314,7 +316,8 @@ static PushdownFunction ClassifyFunction(const string &name) {
314316
return PushdownFunction::UNSUPPORTED;
315317
}
316318

317-
static std::shared_ptr<paimon::Predicate> TryConvertFunction(const BoundFunctionExpression &func, LogicalGet &get) {
319+
static std::shared_ptr<paimon::Predicate> TryConvertFunction(const BoundFunctionExpression &func,
320+
const LogicalGet &get) {
318321
// Gate: reject unsupported functions early.
319322
auto func_type = ClassifyFunction(func.function.name);
320323
if (func_type == PushdownFunction::UNSUPPORTED) {
@@ -386,7 +389,7 @@ static std::shared_ptr<paimon::Predicate> TryConvertFunction(const BoundFunction
386389
}
387390
}
388391

389-
static std::shared_ptr<paimon::Predicate> TryConvertExpression(const Expression &expr, LogicalGet &get) {
392+
static std::shared_ptr<paimon::Predicate> TryConvertExpression(const Expression &expr, const LogicalGet &get) {
390393
switch (expr.GetExpressionClass()) {
391394
case ExpressionClass::BOUND_COMPARISON:
392395
return TryConvertComparison(expr.Cast<BoundComparisonExpression>(), get);
@@ -403,8 +406,8 @@ static std::shared_ptr<paimon::Predicate> TryConvertExpression(const Expression
403406
}
404407
}
405408

406-
static bool TryExtractPartitionFilter(const Expression &expr, LogicalGet &get, const unordered_set<string> &part_keys,
407-
map<string, string> &part_filter) {
409+
static bool TryExtractPartitionFilter(const Expression &expr, const LogicalGet &get,
410+
const unordered_set<string> &part_keys, map<string, string> &part_filter) {
408411
switch (expr.GetExpressionClass()) {
409412
case ExpressionClass::BOUND_COMPARISON: {
410413
auto &comp = expr.Cast<BoundComparisonExpression>();
@@ -467,7 +470,7 @@ static bool TryExtractPartitionFilter(const Expression &expr, LogicalGet &get, c
467470
return false;
468471
}
469472

470-
static vector<map<string, string>> TryExtractPartitionFilters(const Expression &filter, LogicalGet &get,
473+
static vector<map<string, string>> TryExtractPartitionFilters(const Expression &filter, const LogicalGet &get,
471474
const unordered_set<string> &part_keys) {
472475
switch (filter.GetExpressionClass()) {
473476
// Single comparison: extract as one partition filter.

0 commit comments

Comments
 (0)