Tencent/WeKnora · error
SubPlan nodes are not allowed
Error message
SubPlan nodes are not allowed
What it means
Default-deny guard in validateNode: a SubPlan node was found. SubPlan is an internal planner representation that should never appear in a user-parsed query, so its presence indicates a smuggled or malformed AST and the query is rejected.
Source
Thrown at internal/utils/inject.go:2063
return err
}
}
for _, order := range wd.OrderClause {
if err := v.validateNode(order, result); err != nil {
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).View on GitHub (pinned to 988cbb0330)
Solutions
- Rewrite the query without subquery expressions
- Treat this as an attempted bypass and log it for security review
- Ensure only freshly parsed user SQL reaches the validator
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at internal/utils/inject.go:2063 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/b50c997db9525a3a.
Report an issue: GitHub.