Skip to content

Commit 50d0966

Browse files
kyleconroyclaude
andcommitted
Handle LIKE expression alias in WITH clause
- Add explainLikeExprWithAlias function for proper alias output - Add LikeExpr case in explainWithElement Fixes 03314_analyzer_resolve_in_parent_scope_2/stmt3 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 20d3016 commit 50d0966

3 files changed

Lines changed: 22 additions & 5 deletions

File tree

internal/explain/expressions.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1176,6 +1176,8 @@ func explainWithElement(sb *strings.Builder, n *ast.WithElement, indent string,
11761176
explainArrayAccessWithAlias(sb, e, n.Name, indent, depth)
11771177
case *ast.BetweenExpr:
11781178
explainBetweenExprWithAlias(sb, e, n.Name, indent, depth)
1179+
case *ast.LikeExpr:
1180+
explainLikeExprWithAlias(sb, e, n.Name, indent, depth)
11791181
case *ast.UnaryExpr:
11801182
// For unary minus with numeric literal, output as negative literal with alias
11811183
if e.Op == "-" {

internal/explain/functions.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1448,6 +1448,25 @@ func explainLikeExpr(sb *strings.Builder, n *ast.LikeExpr, indent string, depth
14481448
Node(sb, n.Pattern, depth+2)
14491449
}
14501450

1451+
func explainLikeExprWithAlias(sb *strings.Builder, n *ast.LikeExpr, alias string, indent string, depth int) {
1452+
// LIKE is represented as Function like
1453+
fnName := "like"
1454+
if n.CaseInsensitive {
1455+
fnName = "ilike"
1456+
}
1457+
if n.Not {
1458+
fnName = "not" + strings.Title(fnName)
1459+
}
1460+
if alias != "" {
1461+
fmt.Fprintf(sb, "%sFunction %s (alias %s) (children %d)\n", indent, fnName, alias, 1)
1462+
} else {
1463+
fmt.Fprintf(sb, "%sFunction %s (children %d)\n", indent, fnName, 1)
1464+
}
1465+
fmt.Fprintf(sb, "%s ExpressionList (children %d)\n", indent, 2)
1466+
Node(sb, n.Expr, depth+2)
1467+
Node(sb, n.Pattern, depth+2)
1468+
}
1469+
14511470
func explainBetweenExpr(sb *strings.Builder, n *ast.BetweenExpr, indent string, depth int) {
14521471
if n.Not {
14531472
// NOT BETWEEN is transformed to: expr < low OR expr > high
Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1 @@
1-
{
2-
"explain_todo": {
3-
"stmt3": true
4-
}
5-
}
1+
{}

0 commit comments

Comments
 (0)