Tencent/WeKnora · error
AlternativeSubPlan nodes are not allowed
Error message
AlternativeSubPlan nodes are not allowed
What it means
Default-deny guard in validateNode: an AlternativeSubPlan node was found. Like SubPlan, it is an internal planner-only representation and its presence in a user query is treated as tampering, so validation fails closed.
Source
Thrown at internal/utils/inject.go:2068
return err
}
}
if err := v.validateNode(wd.StartOffset, result); err != nil {
return err
}
if err := v.validateNode(wd.EndOffset, result); err != nil {
return err
}
}
// SubPlan - BLOCK: This is an internal representation, should not appear in user queries
if node.GetSubPlan() != nil {
return fmt.Errorf("SubPlan nodes are not allowed")
}
// AlternativeSubPlan - BLOCK
if node.GetAlternativeSubPlan() != nil {
return fmt.Errorf("AlternativeSubPlan nodes are not allowed")
}
// ============================================================
// SECURITY: DEFAULT-DENY.
// The recursive branches above validate every expression type we know how
// to inspect. Any node type NOT in the recognized set below is REJECTED,
// because an unhandled type can smuggle a dangerous FuncCall past the
// blacklist (e.g. PG17's JSON_SCALAR wrapping pg_read_file). Whenever a new
// recursive handler is added above, add its Node_* wrapper here as well.
// ============================================================
switch node.Node.(type) {
case
// Recognized expression types (validated recursively above).
*pg_query.Node_FuncCall,
*pg_query.Node_FuncExpr,
*pg_query.Node_ColumnRef,
*pg_query.Node_TypeCast,
*pg_query.Node_AExpr,View on GitHub (pinned to 988cbb0330)
Solutions
- Rewrite without subquery constructs
- Log the request as a potential validation bypass attempt
- Validate only freshly parsed ASTs, never planner output
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at internal/utils/inject.go:2068 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of Tencent/WeKnora@988cbb0330 (2026-09-02).
Data as JSON: /api/errors/8c457c2f3d40f7df.
Report an issue: GitHub.