diff --git a/ast/ast.go b/ast/ast.go index 44e1209e07..b605969697 100644 --- a/ast/ast.go +++ b/ast/ast.go @@ -272,11 +272,12 @@ type CreateQuery struct { Columns []*ColumnDeclaration `json:"columns,omitempty"` Indexes []*IndexDefinition `json:"indexes,omitempty"` Projections []*Projection `json:"projections,omitempty"` - Constraints []*Constraint `json:"constraints,omitempty"` - Engine *EngineClause `json:"engine,omitempty"` - OrderBy []Expression `json:"order_by,omitempty"` - PartitionBy Expression `json:"partition_by,omitempty"` - PrimaryKey []Expression `json:"primary_key,omitempty"` + Constraints []*Constraint `json:"constraints,omitempty"` + ColumnsPrimaryKey []Expression `json:"columns_primary_key,omitempty"` // PRIMARY KEY in column list + Engine *EngineClause `json:"engine,omitempty"` + OrderBy []Expression `json:"order_by,omitempty"` + PartitionBy Expression `json:"partition_by,omitempty"` + PrimaryKey []Expression `json:"primary_key,omitempty"` SampleBy Expression `json:"sample_by,omitempty"` TTL *TTLClause `json:"ttl,omitempty"` Settings []*SettingExpr `json:"settings,omitempty"` @@ -502,6 +503,7 @@ type DropQuery struct { Policy string `json:"policy,omitempty"` // For DROP POLICY RowPolicy string `json:"row_policy,omitempty"` // For DROP ROW POLICY SettingsProfile string `json:"settings_profile,omitempty"` // For DROP SETTINGS PROFILE + Index string `json:"index,omitempty"` // For DROP INDEX Temporary bool `json:"temporary,omitempty"` OnCluster string `json:"on_cluster,omitempty"` DropDatabase bool `json:"drop_database,omitempty"` @@ -642,6 +644,7 @@ const ( AlterMovePartition AlterCommandType = "MOVE_PARTITION" AlterFreezePartition AlterCommandType = "FREEZE_PARTITION" AlterFreeze AlterCommandType = "FREEZE" + AlterApplyPatches AlterCommandType = "APPLY_PATCHES" AlterDeleteWhere AlterCommandType = "DELETE_WHERE" AlterUpdate AlterCommandType = "UPDATE" AlterAddProjection AlterCommandType = "ADD_PROJECTION" @@ -669,6 +672,18 @@ func (t *TruncateQuery) Pos() token.Position { return t.Position } func (t *TruncateQuery) End() token.Position { return t.Position } func (t *TruncateQuery) statementNode() {} +// DeleteQuery represents a lightweight DELETE statement. +type DeleteQuery struct { + Position token.Position `json:"-"` + Database string `json:"database,omitempty"` + Table string `json:"table"` + Where Expression `json:"where,omitempty"` +} + +func (d *DeleteQuery) Pos() token.Position { return d.Position } +func (d *DeleteQuery) End() token.Position { return d.Position } +func (d *DeleteQuery) statementNode() {} + // UseQuery represents a USE statement. type UseQuery struct { Position token.Position `json:"-"` @@ -1106,10 +1121,12 @@ func (d *DropWorkloadQuery) statementNode() {} // CreateIndexQuery represents a CREATE INDEX statement. type CreateIndexQuery struct { - Position token.Position `json:"-"` - IndexName string `json:"index_name"` - Table string `json:"table"` - Columns []Expression `json:"columns,omitempty"` + Position token.Position `json:"-"` + IndexName string `json:"index_name"` + Table string `json:"table"` + Columns []Expression `json:"columns,omitempty"` + Type string `json:"type,omitempty"` // Index type (minmax, bloom_filter, etc.) + Granularity int `json:"granularity,omitempty"` // GRANULARITY value } func (c *CreateIndexQuery) Pos() token.Position { return c.Position } diff --git a/internal/explain/explain.go b/internal/explain/explain.go index 5b37927157..4aeec06836 100644 --- a/internal/explain/explain.go +++ b/internal/explain/explain.go @@ -238,6 +238,8 @@ func Node(sb *strings.Builder, node interface{}, depth int) { explainOptimizeQuery(sb, n, indent, depth) case *ast.TruncateQuery: explainTruncateQuery(sb, n, indent) + case *ast.DeleteQuery: + explainDeleteQuery(sb, n, indent, depth) case *ast.CheckQuery: explainCheckQuery(sb, n, indent) case *ast.CreateIndexQuery: diff --git a/internal/explain/expressions.go b/internal/explain/expressions.go index 2d37b0867d..20ef91a44b 100644 --- a/internal/explain/expressions.go +++ b/internal/explain/expressions.go @@ -864,6 +864,35 @@ func explainWithElement(sb *strings.Builder, n *ast.WithElement, indent string, return } } + // Arrays containing non-literal expressions should be rendered as Function array + if e.Type == ast.LiteralArray { + if exprs, ok := e.Value.([]ast.Expression); ok { + needsFunctionFormat := false + for _, elem := range exprs { + if !isSimpleLiteralOrNegation(elem) { + needsFunctionFormat = true + break + } + } + if needsFunctionFormat { + // Render as Function array with alias + if n.Name != "" { + fmt.Fprintf(sb, "%sFunction array (alias %s) (children %d)\n", indent, n.Name, 1) + } else { + fmt.Fprintf(sb, "%sFunction array (children %d)\n", indent, 1) + } + if len(exprs) > 0 { + fmt.Fprintf(sb, "%s ExpressionList (children %d)\n", indent, len(exprs)) + } else { + fmt.Fprintf(sb, "%s ExpressionList\n", indent) + } + for _, elem := range exprs { + Node(sb, elem, depth+2) + } + return + } + } + } if n.Name != "" { fmt.Fprintf(sb, "%sLiteral %s (alias %s)\n", indent, FormatLiteral(e), n.Name) } else { diff --git a/internal/explain/format.go b/internal/explain/format.go index e52e8d18ba..5258a7669e 100644 --- a/internal/explain/format.go +++ b/internal/explain/format.go @@ -357,6 +357,8 @@ func NormalizeFunctionName(name string) string { "least": "least", "concat_ws": "concat", "position": "position", + "date_diff": "dateDiff", + "datediff": "dateDiff", // SQL standard ANY/ALL subquery operators - simple cases "anyequals": "in", "allnotequals": "notIn", diff --git a/internal/explain/functions.go b/internal/explain/functions.go index 88e139f983..34c6b4344b 100644 --- a/internal/explain/functions.go +++ b/internal/explain/functions.go @@ -372,9 +372,9 @@ func explainDateAddSubWithInterval(sb *strings.Builder, opFunc string, arg1, arg } // handleDateDiff handles DATE_DIFF/DATEDIFF -// DATE_DIFF(unit, date1, date2) -> dateDiff('unit', date1, date2) +// DATE_DIFF(unit, date1, date2[, timezone]) -> dateDiff('unit', date1, date2[, timezone]) func handleDateDiff(sb *strings.Builder, n *ast.FunctionCall, alias string, indent string, depth int) bool { - if len(n.Arguments) != 3 { + if len(n.Arguments) < 3 || len(n.Arguments) > 4 { return false } @@ -392,12 +392,17 @@ func handleDateDiff(sb *strings.Builder, n *ast.FunctionCall, alias string, inde return false } + argCount := 3 + if len(n.Arguments) == 4 { + argCount = 4 + } + if alias != "" { fmt.Fprintf(sb, "%sFunction dateDiff (alias %s) (children %d)\n", indent, alias, 1) } else { fmt.Fprintf(sb, "%sFunction dateDiff (children %d)\n", indent, 1) } - fmt.Fprintf(sb, "%s ExpressionList (children %d)\n", indent, 3) + fmt.Fprintf(sb, "%s ExpressionList (children %d)\n", indent, argCount) // First arg: unit as lowercase string literal fmt.Fprintf(sb, "%s Literal \\'%s\\'\n", indent, strings.ToLower(unitName)) @@ -406,6 +411,11 @@ func handleDateDiff(sb *strings.Builder, n *ast.FunctionCall, alias string, inde Node(sb, date1Arg, depth+2) Node(sb, date2Arg, depth+2) + // Fourth arg: optional timezone + if len(n.Arguments) == 4 { + Node(sb, n.Arguments[3], depth+2) + } + return true } @@ -1334,13 +1344,10 @@ func explainExtractExprWithAlias(sb *strings.Builder, n *ast.ExtractExpr, alias // EXTRACT is represented as Function toYear, toMonth, etc. // ClickHouse uses specific function names for date/time extraction fnName := extractFieldToFunction(n.Field) - // Use alias from parameter, or fall back to expression's alias - effectiveAlias := alias - if effectiveAlias == "" { - effectiveAlias = n.Alias - } - if effectiveAlias != "" { - fmt.Fprintf(sb, "%sFunction %s (alias %s) (children %d)\n", indent, fnName, effectiveAlias, 1) + // Only use the external alias parameter (from explicit AS on EXTRACT itself) + // NOT the alias from the From expression - that stays on the inner expression + if alias != "" { + fmt.Fprintf(sb, "%sFunction %s (alias %s) (children %d)\n", indent, fnName, alias, 1) } else { fmt.Fprintf(sb, "%sFunction %s (children %d)\n", indent, fnName, 1) } diff --git a/internal/explain/select.go b/internal/explain/select.go index c9a56cd3cc..1033efbf70 100644 --- a/internal/explain/select.go +++ b/internal/explain/select.go @@ -19,19 +19,165 @@ func explainSelectIntersectExceptQuery(sb *strings.Builder, n *ast.SelectInterse } } + // Check if first operand has a WITH clause to be inherited by subsequent operands + var inheritedWith []ast.Expression + if len(n.Selects) > 0 { + inheritedWith = extractWithClause(n.Selects[0]) + } + childIndent := strings.Repeat(" ", depth+1) for i, sel := range n.Selects { if hasExcept && i == 0 { // Wrap first operand in SelectWithUnionQuery -> ExpressionList format - fmt.Fprintf(sb, "%sSelectWithUnionQuery (children 1)\n", childIndent) - fmt.Fprintf(sb, "%s ExpressionList (children 1)\n", childIndent) - Node(sb, sel, depth+3) + // But if it's already a SelectWithUnionQuery, don't double-wrap + if _, isUnion := sel.(*ast.SelectWithUnionQuery); isUnion { + Node(sb, sel, depth+1) + } else { + fmt.Fprintf(sb, "%sSelectWithUnionQuery (children 1)\n", childIndent) + fmt.Fprintf(sb, "%s ExpressionList (children 1)\n", childIndent) + Node(sb, sel, depth+3) + } + } else if i > 0 && len(inheritedWith) > 0 { + // Subsequent operands inherit the WITH clause from the first operand + explainSelectQueryWithInheritedWith(sb, sel, inheritedWith, depth+1) } else { Node(sb, sel, depth+1) } } } +// extractWithClause extracts the WITH clause from a statement (if it's a SelectQuery) +func extractWithClause(stmt ast.Statement) []ast.Expression { + switch s := stmt.(type) { + case *ast.SelectQuery: + return s.With + case *ast.SelectWithUnionQuery: + // Check the first select in the union + if len(s.Selects) > 0 { + return extractWithClause(s.Selects[0]) + } + } + return nil +} + +// explainSelectQueryWithInheritedWith outputs a SELECT with an inherited WITH clause +// The inherited WITH clause is output AFTER the columns (not before, like a regular WITH) +func explainSelectQueryWithInheritedWith(sb *strings.Builder, stmt ast.Statement, inheritedWith []ast.Expression, depth int) { + sq, ok := stmt.(*ast.SelectQuery) + if !ok { + // Not a SelectQuery, output normally + Node(sb, stmt, depth) + return + } + + // If the SelectQuery already has a WITH clause, output normally + if len(sq.With) > 0 { + Node(sb, stmt, depth) + return + } + + // Output SelectQuery with inherited WITH clause after columns + indent := strings.Repeat(" ", depth) + children := countSelectQueryChildren(sq) + 1 // +1 for inherited WITH clause + fmt.Fprintf(sb, "%sSelectQuery (children %d)\n", indent, children) + + // Columns (ExpressionList) - output BEFORE inherited WITH + fmt.Fprintf(sb, "%s ExpressionList (children %d)\n", indent, len(sq.Columns)) + for _, col := range sq.Columns { + Node(sb, col, depth+2) + } + + // Inherited WITH clause (ExpressionList) - output AFTER columns + fmt.Fprintf(sb, "%s ExpressionList (children %d)\n", indent, len(inheritedWith)) + for _, w := range inheritedWith { + Node(sb, w, depth+2) + } + + // FROM (including ARRAY JOIN as part of TablesInSelectQuery) + if sq.From != nil || sq.ArrayJoin != nil { + TablesWithArrayJoin(sb, sq.From, sq.ArrayJoin, depth+1) + } + // PREWHERE + if sq.PreWhere != nil { + Node(sb, sq.PreWhere, depth+1) + } + // WHERE + if sq.Where != nil { + Node(sb, sq.Where, depth+1) + } + // GROUP BY (skip for GROUP BY ALL which doesn't output an expression list) + if len(sq.GroupBy) > 0 && !sq.GroupByAll { + fmt.Fprintf(sb, "%s ExpressionList (children %d)\n", indent, len(sq.GroupBy)) + for _, g := range sq.GroupBy { + Node(sb, g, depth+2) + } + } + // HAVING + if sq.Having != nil { + Node(sb, sq.Having, depth+1) + } + // QUALIFY + if sq.Qualify != nil { + Node(sb, sq.Qualify, depth+1) + } + // WINDOW clause + if len(sq.Window) > 0 { + fmt.Fprintf(sb, "%s ExpressionList (children %d)\n", indent, len(sq.Window)) + for range sq.Window { + fmt.Fprintf(sb, "%s WindowListElement\n", indent) + } + } + // ORDER BY + if len(sq.OrderBy) > 0 { + fmt.Fprintf(sb, "%s ExpressionList (children %d)\n", indent, len(sq.OrderBy)) + for _, o := range sq.OrderBy { + Node(sb, o, depth+2) + } + } + // INTERPOLATE + if len(sq.Interpolate) > 0 { + fmt.Fprintf(sb, "%s ExpressionList (children %d)\n", indent, len(sq.Interpolate)) + for _, i := range sq.Interpolate { + Node(sb, i, depth+2) + } + } + // OFFSET + if sq.Offset != nil { + Node(sb, sq.Offset, depth+1) + } + // LIMIT BY handling + if sq.LimitByLimit != nil { + Node(sb, sq.LimitByLimit, depth+1) + if len(sq.LimitBy) > 0 { + fmt.Fprintf(sb, "%s ExpressionList (children %d)\n", indent, len(sq.LimitBy)) + for _, expr := range sq.LimitBy { + Node(sb, expr, depth+2) + } + } + if sq.Limit != nil { + Node(sb, sq.Limit, depth+1) + } + } else if len(sq.LimitBy) > 0 { + if sq.Limit != nil { + Node(sb, sq.Limit, depth+1) + } + fmt.Fprintf(sb, "%s ExpressionList (children %d)\n", indent, len(sq.LimitBy)) + for _, expr := range sq.LimitBy { + Node(sb, expr, depth+2) + } + } else if sq.Limit != nil { + Node(sb, sq.Limit, depth+1) + } + // SETTINGS + if len(sq.Settings) > 0 && !sq.SettingsAfterFormat { + fmt.Fprintf(sb, "%s Set\n", indent) + } + // TOP clause + if sq.Top != nil { + Node(sb, sq.Top, depth+1) + } +} + func explainSelectWithUnionQuery(sb *strings.Builder, n *ast.SelectWithUnionQuery, indent string, depth int) { if n == nil { return diff --git a/internal/explain/statements.go b/internal/explain/statements.go index 3b14cbc2ca..69c5a09bdc 100644 --- a/internal/explain/statements.go +++ b/internal/explain/statements.go @@ -219,6 +219,10 @@ func explainCreateQuery(sb *strings.Builder, n *ast.CreateQuery, indent string, if len(primaryKeyColumns) > 0 { childrenCount++ // Add for Function tuple containing PRIMARY KEY columns } + // Check for inline PRIMARY KEY (from column list, e.g., "n int, primary key n") + if len(n.ColumnsPrimaryKey) > 0 { + childrenCount++ // Add for the primary key identifier(s) + } fmt.Fprintf(sb, "%s Columns definition (children %d)\n", indent, childrenCount) if len(n.Columns) > 0 { fmt.Fprintf(sb, "%s ExpressionList (children %d)\n", indent, len(n.Columns)) @@ -254,6 +258,12 @@ func explainCreateQuery(sb *strings.Builder, n *ast.CreateQuery, indent string, fmt.Fprintf(sb, "%s Identifier %s\n", indent, colName) } } + // Output inline PRIMARY KEY (from column list) + if len(n.ColumnsPrimaryKey) > 0 { + for _, pk := range n.ColumnsPrimaryKey { + Node(sb, pk, depth+2) + } + } } // For materialized views, output AsSelect before storage definition if n.Materialized && n.AsSelect != nil { @@ -463,6 +473,14 @@ func explainDropQuery(sb *strings.Builder, n *ast.DropQuery, indent string, dept return } + // DROP INDEX - outputs as DropIndexQuery with two spaces before table name + if n.Index != "" { + fmt.Fprintf(sb, "%sDropIndexQuery %s (children %d)\n", indent, n.Table, 2) + fmt.Fprintf(sb, "%s Identifier %s\n", indent, n.Index) + fmt.Fprintf(sb, "%s Identifier %s\n", indent, n.Table) + return + } + // Handle multiple tables: DROP TABLE t1, t2, t3 if len(n.Tables) > 1 { fmt.Fprintf(sb, "%sDropQuery (children %d)\n", indent, 1) @@ -630,9 +648,9 @@ func explainSystemQuery(sb *strings.Builder, n *ast.SystemQuery, indent string) } func explainExplainQuery(sb *strings.Builder, n *ast.ExplainQuery, indent string, depth int) { - // Determine the type string - only show if explicitly specified + // Determine the type string - only show if explicitly specified AND not PLAN (default) typeStr := "" - if n.ExplicitType { + if n.ExplicitType && n.ExplainType != ast.ExplainPlan { typeStr = " " + string(n.ExplainType) } @@ -1014,6 +1032,15 @@ func explainDataType(sb *strings.Builder, n *ast.DataType, indent string, depth func explainObjectTypeArgument(sb *strings.Builder, n *ast.ObjectTypeArgument, indent string, depth int) { fmt.Fprintf(sb, "%sASTObjectTypeArgument (children %d)\n", indent, 1) + // SKIP function calls are unwrapped - only the path/pattern is shown + if fn, ok := n.Expr.(*ast.FunctionCall); ok { + if strings.ToUpper(fn.Name) == "SKIP" || strings.ToUpper(fn.Name) == "SKIP REGEXP" { + if len(fn.Arguments) > 0 { + Node(sb, fn.Arguments[0], depth+1) + return + } + } + } Node(sb, n.Expr, depth+1) } @@ -1171,7 +1198,8 @@ func explainAlterCommand(sb *strings.Builder, cmd *ast.AlterCommand, indent stri fmt.Fprintf(sb, "%s Identifier %s\n", indent, cmd.ColumnName) } if cmd.Partition != nil { - Node(sb, cmd.Partition, depth+1) + fmt.Fprintf(sb, "%s Partition (children 1)\n", indent) + Node(sb, cmd.Partition, depth+2) } case ast.AlterCommentColumn: if cmd.ColumnName != "" { @@ -1206,7 +1234,7 @@ func explainAlterCommand(sb *strings.Builder, cmd *ast.AlterCommand, indent stri case ast.AlterModifySetting: fmt.Fprintf(sb, "%s Set\n", indent) case ast.AlterDropPartition, ast.AlterDetachPartition, ast.AlterAttachPartition, - ast.AlterReplacePartition, ast.AlterFetchPartition, ast.AlterMovePartition, ast.AlterFreezePartition: + ast.AlterReplacePartition, ast.AlterFetchPartition, ast.AlterMovePartition, ast.AlterFreezePartition, ast.AlterApplyPatches: if cmd.Partition != nil { // PARTITION ALL is shown as Partition_ID (empty) in EXPLAIN AST if ident, ok := cmd.Partition.(*ast.Identifier); ok && strings.ToUpper(ident.Name()) == "ALL" { @@ -1403,7 +1431,7 @@ func countAlterCommandChildren(cmd *ast.AlterCommand) int { case ast.AlterModifySetting: children = 1 case ast.AlterDropPartition, ast.AlterDetachPartition, ast.AlterAttachPartition, - ast.AlterReplacePartition, ast.AlterFetchPartition, ast.AlterMovePartition, ast.AlterFreezePartition: + ast.AlterReplacePartition, ast.AlterFetchPartition, ast.AlterMovePartition, ast.AlterFreezePartition, ast.AlterApplyPatches: if cmd.Partition != nil { children++ } @@ -1490,6 +1518,25 @@ func explainTruncateQuery(sb *strings.Builder, n *ast.TruncateQuery, indent stri } } +func explainDeleteQuery(sb *strings.Builder, n *ast.DeleteQuery, indent string, depth int) { + if n == nil { + fmt.Fprintf(sb, "%s*ast.DeleteQuery\n", indent) + return + } + + // Count children: Where expression + table identifier + children := 1 // table identifier + if n.Where != nil { + children++ + } + + fmt.Fprintf(sb, "%sDeleteQuery %s (children %d)\n", indent, n.Table, children) + if n.Where != nil { + Node(sb, n.Where, depth+1) + } + fmt.Fprintf(sb, "%s Identifier %s\n", indent, n.Table) +} + func explainCheckQuery(sb *strings.Builder, n *ast.CheckQuery, indent string) { if n == nil { fmt.Fprintf(sb, "%s*ast.CheckQuery\n", indent) @@ -1545,8 +1592,13 @@ func explainCreateIndexQuery(sb *strings.Builder, n *ast.CreateIndexQuery, inden // Child 1: Index name fmt.Fprintf(sb, "%s Identifier %s\n", indent, n.IndexName) - // Child 2: Index wrapper with columns - fmt.Fprintf(sb, "%s Index (children 1)\n", indent) + // Child 2: Index wrapper with columns and type + // Index has 1 child for columns-only, 2 children if TYPE is specified + indexChildren := 1 + if n.Type != "" { + indexChildren = 2 + } + fmt.Fprintf(sb, "%s Index (children %d)\n", indent, indexChildren) // For single column, output as Identifier // For multiple columns or if there are any special cases, output as Function tuple @@ -1564,6 +1616,12 @@ func explainCreateIndexQuery(sb *strings.Builder, n *ast.CreateIndexQuery, inden fmt.Fprintf(sb, "%s ExpressionList\n", indent) } + // Output TYPE as Function with empty ExpressionList + if n.Type != "" { + fmt.Fprintf(sb, "%s Function %s (children 1)\n", indent, n.Type) + fmt.Fprintf(sb, "%s ExpressionList\n", indent) + } + // Child 3: Table name fmt.Fprintf(sb, "%s Identifier %s\n", indent, n.Table) } diff --git a/parser/expression.go b/parser/expression.go index 26b8007f3f..0dc3728b35 100644 --- a/parser/expression.go +++ b/parser/expression.go @@ -67,10 +67,19 @@ func (p *Parser) precedence(tok token.Token) int { // precedenceForCurrent returns the precedence for the current token, // with special handling for tuple access (number starting with dot) +// and infix NOT operators (NOT BETWEEN, NOT IN, NOT LIKE, etc.) func (p *Parser) precedenceForCurrent() int { if p.currentIs(token.NUMBER) && strings.HasPrefix(p.current.Value, ".") { return HIGHEST // Tuple access like t.1 } + // When NOT is followed by BETWEEN, IN, LIKE, ILIKE, or REGEXP, + // it's an infix operator with COMPARE precedence, not prefix NOT + if p.currentIs(token.NOT) { + if p.peekIs(token.BETWEEN) || p.peekIs(token.IN) || p.peekIs(token.LIKE) || + p.peekIs(token.ILIKE) || p.peekIs(token.REGEXP) { + return COMPARE + } + } return p.precedence(p.current.Token) } @@ -143,6 +152,8 @@ func (p *Parser) parseFunctionArgumentList() []ast.Expression { expr := p.parseExpression(LOWEST) if expr != nil { + // Handle implicit alias (identifier without AS) + expr = p.parseImplicitAlias(expr) exprs = append(exprs, expr) } @@ -154,6 +165,8 @@ func (p *Parser) parseFunctionArgumentList() []ast.Expression { } expr := p.parseExpression(LOWEST) if expr != nil { + // Handle implicit alias (identifier without AS) + expr = p.parseImplicitAlias(expr) exprs = append(exprs, expr) } } @@ -1390,6 +1403,8 @@ func (p *Parser) parseExtract() ast.Expression { if p.currentIs(token.FROM) { p.nextToken() from := p.parseExpression(LOWEST) + // Handle implicit alias (identifier without AS) + from = p.parseImplicitAlias(from) p.expect(token.RPAREN) return &ast.ExtractExpr{ Position: pos, @@ -1425,7 +1440,10 @@ func (p *Parser) parseExtract() ast.Expression { // or extract(expr, pattern) where expr can be any expression var args []ast.Expression for !p.currentIs(token.RPAREN) && !p.currentIs(token.EOF) { - args = append(args, p.parseExpression(LOWEST)) + arg := p.parseExpression(LOWEST) + // Handle implicit alias (identifier without AS) + arg = p.parseImplicitAlias(arg) + args = append(args, arg) if p.currentIs(token.COMMA) { p.nextToken() } else { diff --git a/parser/parser.go b/parser/parser.go index 9e8cda19ed..c8c395afe5 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -130,6 +130,9 @@ func (p *Parser) parseStatement() ast.Statement { return p.parseInsert() case token.CREATE: return p.parseCreate() + case token.REPLACE: + // REPLACE TABLE is equivalent to CREATE OR REPLACE TABLE + return p.parseReplace() case token.DROP: // Check for DROP SETTINGS PROFILE if p.peekIs(token.SETTINGS) { @@ -202,6 +205,8 @@ func (p *Parser) parseStatement() ast.Statement { return p.parseSet() case token.UPDATE: return p.parseUpdate() + case token.DELETE: + return p.parseDelete() case token.OPTIMIZE: return p.parseOptimize() case token.SYSTEM: @@ -296,8 +301,8 @@ func (p *Parser) parseSelectWithUnion() *ast.SelectWithUnionQuery { } ops = append(ops, op) - // Parse the next operand - can be a SELECT with UNION/UNION ALL - // (UNION has higher precedence than EXCEPT) + // Parse the next operand + // UNION has LOWER precedence than INTERSECT/EXCEPT, so don't consume UNION here var nextStmt ast.Statement if p.currentIs(token.LPAREN) { p.nextToken() // skip ( @@ -308,11 +313,12 @@ func (p *Parser) parseSelectWithUnion() *ast.SelectWithUnionQuery { p.expect(token.RPAREN) nextStmt = nested } else { - // Parse SELECT with possible UNION/UNION ALL - nextStmt = p.parseSelectWithUnionOnly() - if nextStmt == nil { + // Parse just a SELECT (don't consume UNION which has lower precedence) + sel := p.parseSelect() + if sel == nil { break } + nextStmt = sel } stmts = append(stmts, nextStmt) } @@ -321,18 +327,19 @@ func (p *Parser) parseSelectWithUnion() *ast.SelectWithUnionQuery { result := buildIntersectExceptTree(stmts, ops) query.Selects = append(query.Selects, result) - return query - } - - // Handle regular case (UNION, INTERSECT ALL, EXCEPT ALL, or single SELECT) - if firstWasParenthesized { - if nested, ok := firstItem.(*ast.SelectWithUnionQuery); ok { - for _, s := range nested.Selects { - query.Selects = append(query.Selects, s) + // Don't return yet - there might be a UNION ALL following the INTERSECT/EXCEPT chain + // Fall through to the UNION parsing section + } else { + // Handle regular case (UNION, INTERSECT ALL, EXCEPT ALL, or single SELECT) + if firstWasParenthesized { + if nested, ok := firstItem.(*ast.SelectWithUnionQuery); ok { + for _, s := range nested.Selects { + query.Selects = append(query.Selects, s) + } } + } else { + query.Selects = append(query.Selects, firstItem) } - } else { - query.Selects = append(query.Selects, firstItem) } // Parse UNION/INTERSECT ALL/EXCEPT ALL clauses @@ -390,10 +397,35 @@ func (p *Parser) parseSelectWithUnion() *ast.SelectWithUnionQuery { } // parseIntersectExceptWithFirstOperand handles the case where UNION is followed by INTERSECT/EXCEPT -// The unionQuery contains the selects that form the first operand +// Precedence: INTERSECT > UNION > EXCEPT +// So: "A UNION ALL B INTERSECT C" = "A UNION ALL (B INTERSECT C)" - pop last SELECT for INTERSECT +// "A UNION ALL B EXCEPT C" = "(A UNION ALL B) EXCEPT C" - use entire UNION for EXCEPT func (p *Parser) parseIntersectExceptWithFirstOperand(unionQuery *ast.SelectWithUnionQuery) *ast.SelectWithUnionQuery { - // Collect all operands and operators - stmts := []ast.Statement{unionQuery} + // Check if we're starting with INTERSECT or EXCEPT to determine precedence behavior + startsWithIntersect := p.currentIs(token.INTERSECT) + + var firstOperand ast.Statement + if startsWithIntersect { + // INTERSECT has higher precedence than UNION + // Pop the last select from unionQuery to be the first operand of INTERSECT + firstOperand = unionQuery.Selects[len(unionQuery.Selects)-1] + unionQuery.Selects = unionQuery.Selects[:len(unionQuery.Selects)-1] + // Also remove the last union mode if it exists + if len(unionQuery.UnionModes) > 0 { + unionQuery.UnionModes = unionQuery.UnionModes[:len(unionQuery.UnionModes)-1] + } + } else { + // EXCEPT has lower precedence than UNION + // Use the entire union as the first operand + firstOperand = unionQuery + // Create a new query to hold the result + unionQuery = &ast.SelectWithUnionQuery{ + Position: unionQuery.Position, + } + } + + // Collect operands starting with the first operand + stmts := []ast.Statement{firstOperand} var ops []string // Parse all INTERSECT/EXCEPT clauses @@ -439,11 +471,50 @@ func (p *Parser) parseIntersectExceptWithFirstOperand(unionQuery *ast.SelectWith // Build the tree with proper precedence result := buildIntersectExceptTree(stmts, ops) - // Return wrapped in SelectWithUnionQuery - return &ast.SelectWithUnionQuery{ - Position: unionQuery.Position, - Selects: []ast.Statement{result}, + // Add the result to the union query + unionQuery.Selects = append(unionQuery.Selects, result) + + // Continue parsing any UNION/UNION ALL that follows the INTERSECT/EXCEPT chain + for p.currentIs(token.UNION) || p.currentIs(token.EXCEPT) || p.currentIs(token.INTERSECT) { + // If we hit another INTERSECT/EXCEPT, we need to handle it recursively + if p.isIntersectExceptWithWrapper() { + return p.parseIntersectExceptWithFirstOperand(unionQuery) + } + + p.nextToken() // skip UNION + + var mode string + if p.currentIs(token.ALL) { + unionQuery.UnionAll = true + mode = "ALL" + p.nextToken() + } else if p.currentIs(token.DISTINCT) { + mode = "DISTINCT" + p.nextToken() + } + unionQuery.UnionModes = append(unionQuery.UnionModes, "UNION "+mode) + + // Handle parenthesized subqueries + if p.currentIs(token.LPAREN) { + p.nextToken() // skip ( + nested := p.parseSelectWithUnion() + if nested == nil { + break + } + p.expect(token.RPAREN) + for _, s := range nested.Selects { + unionQuery.Selects = append(unionQuery.Selects, s) + } + } else { + sel := p.parseSelect() + if sel == nil { + break + } + unionQuery.Selects = append(unionQuery.Selects, sel) + } } + + return unionQuery } // parseSelectWithUnionOnly parses SELECT with UNION/UNION ALL but stops at INTERSECT/EXCEPT. @@ -988,7 +1059,8 @@ func (p *Parser) parseWithClause() []ast.Expression { // AS name is optional if p.currentIs(token.AS) { p.nextToken() - if p.currentIs(token.IDENT) { + // Alias can be IDENT or certain keywords (KEY, VALUES, etc.) + if p.currentIs(token.IDENT) || p.current.Token.IsKeyword() { elem.Name = p.current.Value p.nextToken() } @@ -1060,13 +1132,10 @@ func (p *Parser) parseTableElementWithJoin() *ast.TablesInSelectQueryElement { if p.currentIs(token.COMMA) { p.nextToken() elem.Table = p.parseTableExpression() - // ClickHouse adds an empty TableJoin node for comma joins, but only - // when the table is NOT a subquery (subqueries don't get TableJoin nodes) + // ClickHouse adds an empty TableJoin node for comma joins if elem.Table != nil { - if _, isSubquery := elem.Table.Table.(*ast.Subquery); !isSubquery { - elem.Join = &ast.TableJoin{ - Position: elem.Position, - } + elem.Join = &ast.TableJoin{ + Position: elem.Position, } } return elem @@ -1758,6 +1827,26 @@ func (p *Parser) parseCreate() ast.Statement { return create } +// parseReplace handles REPLACE TABLE syntax, which is equivalent to CREATE OR REPLACE TABLE +func (p *Parser) parseReplace() ast.Statement { + pos := p.current.Pos + p.nextToken() // skip REPLACE + + // REPLACE TABLE name ... + if !p.currentIs(token.TABLE) { + return nil + } + p.nextToken() // skip TABLE + + create := &ast.CreateQuery{ + Position: pos, + OrReplace: true, // REPLACE TABLE implies OR REPLACE + } + + p.parseCreateTable(create) + return create +} + func (p *Parser) parseCreateIndex(pos token.Position) *ast.CreateIndexQuery { p.nextToken() // skip INDEX @@ -1765,10 +1854,7 @@ func (p *Parser) parseCreateIndex(pos token.Position) *ast.CreateIndexQuery { Position: pos, } - // Parse index name - query.IndexName = p.parseIdentifierName() - - // Skip IF NOT EXISTS if present + // Skip IF NOT EXISTS if present (comes before index name) if p.currentIs(token.IF) { p.nextToken() // IF if p.currentIs(token.NOT) { @@ -1779,6 +1865,9 @@ func (p *Parser) parseCreateIndex(pos token.Position) *ast.CreateIndexQuery { } } + // Parse index name + query.IndexName = p.parseIdentifierName() + // Expect ON if p.currentIs(token.ON) { p.nextToken() @@ -1816,6 +1905,22 @@ func (p *Parser) parseCreateIndex(pos token.Position) *ast.CreateIndexQuery { } } + // Parse TYPE clause + if p.currentIs(token.IDENT) && strings.ToUpper(p.current.Value) == "TYPE" { + p.nextToken() // skip TYPE + query.Type = p.parseIdentifierName() + } + + // Parse GRANULARITY clause + if p.currentIs(token.IDENT) && strings.ToUpper(p.current.Value) == "GRANULARITY" { + p.nextToken() // skip GRANULARITY + if p.currentIs(token.NUMBER) { + val, _ := strconv.Atoi(p.current.Value) + query.Granularity = val + p.nextToken() + } + } + return query } @@ -1888,6 +1993,34 @@ func (p *Parser) parseCreateTable(create *ast.CreateQuery) { p.nextToken() } } + } else if p.currentIs(token.PRIMARY) { + // Handle PRIMARY KEY as table constraint: PRIMARY KEY (col1, col2) or PRIMARY KEY col + p.nextToken() // skip PRIMARY + if p.currentIs(token.KEY) { + p.nextToken() // skip KEY + } + // Parse the primary key column(s) into create.PrimaryKey + if p.currentIs(token.LPAREN) { + p.nextToken() // skip ( + for !p.currentIs(token.RPAREN) && !p.currentIs(token.EOF) { + expr := p.parseExpression(LOWEST) + if expr != nil { + create.ColumnsPrimaryKey = append(create.ColumnsPrimaryKey, expr) + } + if p.currentIs(token.COMMA) { + p.nextToken() + } else { + break + } + } + p.expect(token.RPAREN) + } else { + // Single column: PRIMARY KEY col + expr := p.parseExpression(LOWEST) + if expr != nil { + create.ColumnsPrimaryKey = append(create.ColumnsPrimaryKey, expr) + } + } } else { col := p.parseColumnDeclaration() if col != nil { @@ -3623,11 +3756,27 @@ func (p *Parser) parseDataType() *ast.DataType { } } + if isNamedParam { // Parse as name + type pair + // For JSON/OBJECT types, the name can be a dotted path like a.b.c pos := p.current.Pos - paramName := p.current.Value + var nameParts []string + nameParts = append(nameParts, p.current.Value) p.nextToken() + // Parse additional dotted parts if this is a JSON/OBJECT type + if isObjectType { + for p.currentIs(token.DOT) { + p.nextToken() // consume dot + if p.currentIs(token.IDENT) || p.current.Token.IsKeyword() { + nameParts = append(nameParts, p.current.Value) + p.nextToken() + } else { + break + } + } + } + paramName := strings.Join(nameParts, ".") // Parse the type for this parameter paramType := p.parseDataType() if paramType != nil { @@ -3888,6 +4037,7 @@ func (p *Parser) parseDrop() *ast.DropQuery { dropFunction = true p.nextToken() case token.INDEX: + drop.Index = "_pending_" p.nextToken() case token.SETTINGS: // DROP SETTINGS PROFILE @@ -3983,6 +4133,20 @@ func (p *Parser) parseDrop() *ast.DropQuery { drop.RowPolicy = tableName } else if drop.SettingsProfile == "_pending_" { drop.SettingsProfile = tableName + } else if drop.Index == "_pending_" { + drop.Index = tableName + // For DROP INDEX, parse ON table_name + if p.currentIs(token.ON) { + p.nextToken() // skip ON + tableNamePart := p.parseIdentifierName() + if p.currentIs(token.DOT) { + p.nextToken() + drop.Database = tableNamePart + drop.Table = p.parseIdentifierName() + } else { + drop.Table = tableNamePart + } + } } else if dropDictionary { drop.Dictionary = tableName // Also set Table/Tables for backward compatibility with AST JSON @@ -4404,10 +4568,18 @@ func (p *Parser) parseAlterCommand() *ast.AlterCommand { } else if p.currentIs(token.COLUMN) { cmd.Type = ast.AlterClearColumn p.nextToken() - if p.currentIs(token.IDENT) { + if p.currentIs(token.IDENT) || p.current.Token.IsKeyword() { cmd.ColumnName = p.current.Value p.nextToken() } + // Parse IN PARTITION + if p.currentIs(token.IN) { + p.nextToken() // skip IN + if p.currentIs(token.PARTITION) { + p.nextToken() // skip PARTITION + cmd.Partition = p.parseExpression(LOWEST) + } + } } else if p.currentIs(token.IDENT) && strings.ToUpper(p.current.Value) == "PROJECTION" { cmd.Type = ast.AlterClearProjection p.nextToken() @@ -4595,6 +4767,20 @@ func (p *Parser) parseAlterCommand() *ast.AlterCommand { } } } + case token.APPLY: + // APPLY PATCHES IN PARTITION expr + p.nextToken() // skip APPLY + if p.currentIs(token.IDENT) && strings.ToUpper(p.current.Value) == "PATCHES" { + p.nextToken() // skip PATCHES + cmd.Type = ast.AlterApplyPatches + if p.currentIs(token.IN) { + p.nextToken() // skip IN + if p.currentIs(token.PARTITION) { + p.nextToken() // skip PARTITION + cmd.Partition = p.parseExpression(LOWEST) + } + } + } case token.DELETE: // DELETE WHERE condition - mutation to delete rows cmd.Type = ast.AlterDeleteWhere @@ -4781,6 +4967,39 @@ func (p *Parser) parseUpdate() *ast.UpdateQuery { return update } +func (p *Parser) parseDelete() *ast.DeleteQuery { + del := &ast.DeleteQuery{ + Position: p.current.Pos, + } + + p.nextToken() // skip DELETE + + // Skip optional FROM + if p.currentIs(token.FROM) { + p.nextToken() + } + + // Parse table name (can be database.table) + tableName := p.parseIdentifierName() + if tableName != "" { + if p.currentIs(token.DOT) { + p.nextToken() + del.Database = tableName + del.Table = p.parseIdentifierName() + } else { + del.Table = tableName + } + } + + // Parse WHERE clause + if p.currentIs(token.WHERE) { + p.nextToken() // skip WHERE + del.Where = p.parseExpression(LOWEST) + } + + return del +} + func (p *Parser) parseUse() *ast.UseQuery { use := &ast.UseQuery{ Position: p.current.Pos, @@ -5296,7 +5515,14 @@ func (p *Parser) parseSystem() *ast.SystemQuery { p.nextToken() } } else { - sys.Table = tableName + // For RELOAD DICTIONARY commands, the dictionary name appears as both database and table in EXPLAIN + if strings.Contains(strings.ToUpper(sys.Command), "RELOAD DICTIONARY") || + strings.Contains(strings.ToUpper(sys.Command), "DROP REPLICA") { + sys.Database = tableName + sys.Table = tableName + } else { + sys.Table = tableName + } } } @@ -5308,7 +5534,7 @@ func (p *Parser) parseSystem() *ast.SystemQuery { func (p *Parser) isSystemCommandKeyword() bool { switch p.current.Token { case token.TTL, token.SYNC, token.DROP, token.FORMAT, token.FOR, token.INDEX, token.INSERT, - token.PRIMARY, token.KEY: + token.PRIMARY, token.KEY, token.DISTRIBUTED: return true } // Handle identifiers that are part of SYSTEM commands (not table names) @@ -5861,8 +6087,8 @@ func (p *Parser) parseProjection() *ast.Projection { Position: p.current.Pos, } - // Parse projection name - if p.currentIs(token.IDENT) { + // Parse projection name (can be identifier or keyword like VALUES) + if p.currentIs(token.IDENT) || p.current.Token.IsKeyword() { proj.Name = p.current.Value p.nextToken() } diff --git a/parser/testdata/00446_clear_column_in_partition_zookeeper_long/metadata.json b/parser/testdata/00446_clear_column_in_partition_zookeeper_long/metadata.json index f205ba26ea..0967ef424b 100644 --- a/parser/testdata/00446_clear_column_in_partition_zookeeper_long/metadata.json +++ b/parser/testdata/00446_clear_column_in_partition_zookeeper_long/metadata.json @@ -1,14 +1 @@ -{ - "explain_todo": { - "stmt11": true, - "stmt24": true, - "stmt31": true, - "stmt34": true, - "stmt37": true, - "stmt38": true, - "stmt43": true, - "stmt44": true, - "stmt48": true, - "stmt8": true - } -} +{} diff --git a/parser/testdata/00834_not_between/metadata.json b/parser/testdata/00834_not_between/metadata.json index 1295a45747..0967ef424b 100644 --- a/parser/testdata/00834_not_between/metadata.json +++ b/parser/testdata/00834_not_between/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt3": true - } -} +{} diff --git a/parser/testdata/01036_no_superfluous_dict_reload_on_create_database/metadata.json b/parser/testdata/01036_no_superfluous_dict_reload_on_create_database/metadata.json index b563327205..0967ef424b 100644 --- a/parser/testdata/01036_no_superfluous_dict_reload_on_create_database/metadata.json +++ b/parser/testdata/01036_no_superfluous_dict_reload_on_create_database/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt7": true - } -} +{} diff --git a/parser/testdata/01114_clear_column_compact_parts/metadata.json b/parser/testdata/01114_clear_column_compact_parts/metadata.json index 943b275814..0967ef424b 100644 --- a/parser/testdata/01114_clear_column_compact_parts/metadata.json +++ b/parser/testdata/01114_clear_column_compact_parts/metadata.json @@ -1,6 +1 @@ -{ - "explain_todo": { - "stmt4": true, - "stmt6": true - } -} +{} diff --git a/parser/testdata/01148_zookeeper_path_macros_unfolding/metadata.json b/parser/testdata/01148_zookeeper_path_macros_unfolding/metadata.json index 0e0e61ec33..bd82208299 100644 --- a/parser/testdata/01148_zookeeper_path_macros_unfolding/metadata.json +++ b/parser/testdata/01148_zookeeper_path_macros_unfolding/metadata.json @@ -1,7 +1,6 @@ { "explain_todo": { "stmt16": true, - "stmt23": true, "stmt9": true } } diff --git a/parser/testdata/01157_replace_table/metadata.json b/parser/testdata/01157_replace_table/metadata.json index dc7c7543a0..179651647d 100644 --- a/parser/testdata/01157_replace_table/metadata.json +++ b/parser/testdata/01157_replace_table/metadata.json @@ -1,15 +1,7 @@ { "explain_todo": { - "stmt11": true, - "stmt12": true, "stmt13": true, - "stmt15": true, - "stmt16": true, "stmt17": true, - "stmt19": true, - "stmt20": true, - "stmt28": true, - "stmt30": true, "stmt9": true } } diff --git a/parser/testdata/01166_truncate_multiple_partitions/metadata.json b/parser/testdata/01166_truncate_multiple_partitions/metadata.json index d0821ccce9..4832621a07 100644 --- a/parser/testdata/01166_truncate_multiple_partitions/metadata.json +++ b/parser/testdata/01166_truncate_multiple_partitions/metadata.json @@ -2,12 +2,10 @@ "explain_todo": { "stmt10": true, "stmt11": true, - "stmt17": true, "stmt22": true, "stmt23": true, "stmt24": true, "stmt25": true, - "stmt3": true, "stmt8": true, "stmt9": true } diff --git a/parser/testdata/01185_create_or_replace_table/metadata.json b/parser/testdata/01185_create_or_replace_table/metadata.json index ae11f9e277..0967ef424b 100644 --- a/parser/testdata/01185_create_or_replace_table/metadata.json +++ b/parser/testdata/01185_create_or_replace_table/metadata.json @@ -1,6 +1 @@ -{ - "explain_todo": { - "stmt13": true, - "stmt2": true - } -} +{} diff --git a/parser/testdata/01214_point_in_Mecca/metadata.json b/parser/testdata/01214_point_in_Mecca/metadata.json index 277764f7c2..0967ef424b 100644 --- a/parser/testdata/01214_point_in_Mecca/metadata.json +++ b/parser/testdata/01214_point_in_Mecca/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt67": true - } -} +{} diff --git a/parser/testdata/01225_drop_dictionary_as_table/metadata.json b/parser/testdata/01225_drop_dictionary_as_table/metadata.json index 1295a45747..0967ef424b 100644 --- a/parser/testdata/01225_drop_dictionary_as_table/metadata.json +++ b/parser/testdata/01225_drop_dictionary_as_table/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt3": true - } -} +{} diff --git a/parser/testdata/01254_dict_create_without_db/metadata.json b/parser/testdata/01254_dict_create_without_db/metadata.json index b65b07d7a6..0967ef424b 100644 --- a/parser/testdata/01254_dict_create_without_db/metadata.json +++ b/parser/testdata/01254_dict_create_without_db/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt4": true - } -} +{} diff --git a/parser/testdata/01254_dict_load_after_detach_attach/metadata.json b/parser/testdata/01254_dict_load_after_detach_attach/metadata.json index dbdbb76d4f..0967ef424b 100644 --- a/parser/testdata/01254_dict_load_after_detach_attach/metadata.json +++ b/parser/testdata/01254_dict_load_after_detach_attach/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt6": true - } -} +{} diff --git a/parser/testdata/01318_decrypt/metadata.json b/parser/testdata/01318_decrypt/metadata.json index f0e678ed48..0967ef424b 100644 --- a/parser/testdata/01318_decrypt/metadata.json +++ b/parser/testdata/01318_decrypt/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt47": true - } -} +{} diff --git a/parser/testdata/01318_encrypt/metadata.json b/parser/testdata/01318_encrypt/metadata.json index 6f1e887072..0967ef424b 100644 --- a/parser/testdata/01318_encrypt/metadata.json +++ b/parser/testdata/01318_encrypt/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt46": true - } -} +{} diff --git a/parser/testdata/01387_clear_column_default_depends/metadata.json b/parser/testdata/01387_clear_column_default_depends/metadata.json index 13dfdf58b8..0967ef424b 100644 --- a/parser/testdata/01387_clear_column_default_depends/metadata.json +++ b/parser/testdata/01387_clear_column_default_depends/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt28": true - } -} +{} diff --git a/parser/testdata/01388_clear_all_columns/metadata.json b/parser/testdata/01388_clear_all_columns/metadata.json index 7ad5569408..0967ef424b 100644 --- a/parser/testdata/01388_clear_all_columns/metadata.json +++ b/parser/testdata/01388_clear_all_columns/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt9": true - } -} +{} diff --git a/parser/testdata/01416_clear_column_pk/metadata.json b/parser/testdata/01416_clear_column_pk/metadata.json index ef382ce51e..0967ef424b 100644 --- a/parser/testdata/01416_clear_column_pk/metadata.json +++ b/parser/testdata/01416_clear_column_pk/metadata.json @@ -1,6 +1 @@ -{ - "explain_todo": { - "stmt4": true, - "stmt5": true - } -} +{} diff --git a/parser/testdata/01516_create_table_primary_key/metadata.json b/parser/testdata/01516_create_table_primary_key/metadata.json index cd2e7a01a1..7ecc69f977 100644 --- a/parser/testdata/01516_create_table_primary_key/metadata.json +++ b/parser/testdata/01516_create_table_primary_key/metadata.json @@ -6,7 +6,6 @@ "stmt22": true, "stmt28": true, "stmt31": true, - "stmt32": true, - "stmt7": true + "stmt32": true } } diff --git a/parser/testdata/01532_primary_key_without_order_by_zookeeper/metadata.json b/parser/testdata/01532_primary_key_without_order_by_zookeeper/metadata.json index 9a2ac55cd1..76e9caa7a7 100644 --- a/parser/testdata/01532_primary_key_without_order_by_zookeeper/metadata.json +++ b/parser/testdata/01532_primary_key_without_order_by_zookeeper/metadata.json @@ -1,8 +1,6 @@ { "explain_todo": { - "stmt13": true, "stmt22": true, - "stmt29": true, "stmt38": true } } diff --git a/parser/testdata/01710_projection_aggregate_functions_null_for_empty/metadata.json b/parser/testdata/01710_projection_aggregate_functions_null_for_empty/metadata.json index af48d4c110..0967ef424b 100644 --- a/parser/testdata/01710_projection_aggregate_functions_null_for_empty/metadata.json +++ b/parser/testdata/01710_projection_aggregate_functions_null_for_empty/metadata.json @@ -1 +1 @@ -{"explain_todo":{"stmt2":true}} +{} diff --git a/parser/testdata/01890_cross_join_explain_crash/metadata.json b/parser/testdata/01890_cross_join_explain_crash/metadata.json index 01b09ab8c2..0967ef424b 100644 --- a/parser/testdata/01890_cross_join_explain_crash/metadata.json +++ b/parser/testdata/01890_cross_join_explain_crash/metadata.json @@ -1 +1 @@ -{"explain_todo":{"stmt3":true,"stmt4":true,"stmt5":true,"stmt6":true}} +{} diff --git a/parser/testdata/01930_optimize_skip_unused_shards_rewrite_in/metadata.json b/parser/testdata/01930_optimize_skip_unused_shards_rewrite_in/metadata.json index 1295a45747..0967ef424b 100644 --- a/parser/testdata/01930_optimize_skip_unused_shards_rewrite_in/metadata.json +++ b/parser/testdata/01930_optimize_skip_unused_shards_rewrite_in/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt3": true - } -} +{} diff --git a/parser/testdata/02004_intersect_except_distinct_operators/metadata.json b/parser/testdata/02004_intersect_except_distinct_operators/metadata.json index ed99a48b08..0967ef424b 100644 --- a/parser/testdata/02004_intersect_except_distinct_operators/metadata.json +++ b/parser/testdata/02004_intersect_except_distinct_operators/metadata.json @@ -1,17 +1 @@ -{ - "explain_todo": { - "stmt21": true, - "stmt22": true, - "stmt23": true, - "stmt27": true, - "stmt31": true, - "stmt32": true, - "stmt33": true, - "stmt34": true, - "stmt35": true, - "stmt36": true, - "stmt38": true, - "stmt39": true, - "stmt42": true - } -} +{} diff --git a/parser/testdata/02004_intersect_except_operators/metadata.json b/parser/testdata/02004_intersect_except_operators/metadata.json index 72b95f6c78..0967ef424b 100644 --- a/parser/testdata/02004_intersect_except_operators/metadata.json +++ b/parser/testdata/02004_intersect_except_operators/metadata.json @@ -1,17 +1 @@ -{ - "explain_todo": { - "stmt19": true, - "stmt20": true, - "stmt21": true, - "stmt25": true, - "stmt29": true, - "stmt30": true, - "stmt31": true, - "stmt32": true, - "stmt33": true, - "stmt34": true, - "stmt36": true, - "stmt37": true, - "stmt40": true - } -} +{} diff --git a/parser/testdata/02008_test_union_distinct_in_subquery/metadata.json b/parser/testdata/02008_test_union_distinct_in_subquery/metadata.json index f2fc483897..ccc75f74d5 100644 --- a/parser/testdata/02008_test_union_distinct_in_subquery/metadata.json +++ b/parser/testdata/02008_test_union_distinct_in_subquery/metadata.json @@ -1,9 +1,5 @@ { "explain_todo": { - "stmt10": true, - "stmt11": true, - "stmt12": true, - "stmt13": true, "stmt15": true, "stmt9": true } diff --git a/parser/testdata/02124_encrypt_decrypt_nullable/metadata.json b/parser/testdata/02124_encrypt_decrypt_nullable/metadata.json index 0707617c9d..0967ef424b 100644 --- a/parser/testdata/02124_encrypt_decrypt_nullable/metadata.json +++ b/parser/testdata/02124_encrypt_decrypt_nullable/metadata.json @@ -1,14 +1 @@ -{ - "explain_todo": { - "stmt10": true, - "stmt11": true, - "stmt13": true, - "stmt14": true, - "stmt15": true, - "stmt16": true, - "stmt3": true, - "stmt6": true, - "stmt8": true, - "stmt9": true - } -} +{} diff --git a/parser/testdata/02267_special_operator_parse_alias_check/metadata.json b/parser/testdata/02267_special_operator_parse_alias_check/metadata.json index 757ac1e443..0967ef424b 100644 --- a/parser/testdata/02267_special_operator_parse_alias_check/metadata.json +++ b/parser/testdata/02267_special_operator_parse_alias_check/metadata.json @@ -1,16 +1 @@ -{ - "explain_todo": { - "stmt41": true, - "stmt43": true, - "stmt46": true, - "stmt48": true, - "stmt50": true, - "stmt52": true, - "stmt54": true, - "stmt56": true, - "stmt57": true, - "stmt58": true, - "stmt60": true, - "stmt62": true - } -} +{} diff --git a/parser/testdata/02291_dictionary_scalar_subquery_reload/metadata.json b/parser/testdata/02291_dictionary_scalar_subquery_reload/metadata.json index f4c74e32be..0967ef424b 100644 --- a/parser/testdata/02291_dictionary_scalar_subquery_reload/metadata.json +++ b/parser/testdata/02291_dictionary_scalar_subquery_reload/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt10": true - } -} +{} diff --git a/parser/testdata/02313_cross_join_dup_col_names/metadata.json b/parser/testdata/02313_cross_join_dup_col_names/metadata.json index 682bda1cbc..0967ef424b 100644 --- a/parser/testdata/02313_cross_join_dup_col_names/metadata.json +++ b/parser/testdata/02313_cross_join_dup_col_names/metadata.json @@ -1,6 +1 @@ -{ - "explain_todo": { - "stmt1": true, - "stmt2": true - } -} +{} diff --git a/parser/testdata/02319_lightweight_delete_on_merge_tree/metadata.json b/parser/testdata/02319_lightweight_delete_on_merge_tree/metadata.json index 006ba4e250..8d8c3756f7 100644 --- a/parser/testdata/02319_lightweight_delete_on_merge_tree/metadata.json +++ b/parser/testdata/02319_lightweight_delete_on_merge_tree/metadata.json @@ -1,14 +1,5 @@ { "explain_todo": { - "stmt11": true, - "stmt16": true, - "stmt26": true, - "stmt30": true, - "stmt45": true, - "stmt52": true, - "stmt6": true, - "stmt67": true, - "stmt72": true, - "stmt74": true + "stmt45": true } } diff --git a/parser/testdata/02319_lightweight_delete_on_merge_tree_compact_parts/metadata.json b/parser/testdata/02319_lightweight_delete_on_merge_tree_compact_parts/metadata.json index bd3fffc230..3428820392 100644 --- a/parser/testdata/02319_lightweight_delete_on_merge_tree_compact_parts/metadata.json +++ b/parser/testdata/02319_lightweight_delete_on_merge_tree_compact_parts/metadata.json @@ -1,11 +1,5 @@ { "explain_todo": { - "stmt13": true, - "stmt19": true, - "stmt31": true, - "stmt35": true, - "stmt50": true, - "stmt57": true, - "stmt7": true + "stmt50": true } } diff --git a/parser/testdata/02319_sql_standard_create_drop_index/metadata.json b/parser/testdata/02319_sql_standard_create_drop_index/metadata.json index 8352758dc3..0967ef424b 100644 --- a/parser/testdata/02319_sql_standard_create_drop_index/metadata.json +++ b/parser/testdata/02319_sql_standard_create_drop_index/metadata.json @@ -1,14 +1 @@ -{ - "explain_todo": { - "stmt14": true, - "stmt15": true, - "stmt16": true, - "stmt21": true, - "stmt22": true, - "stmt3": true, - "stmt4": true, - "stmt5": true, - "stmt8": true, - "stmt9": true - } -} +{} diff --git a/parser/testdata/02352_lightweight_delete/metadata.json b/parser/testdata/02352_lightweight_delete/metadata.json index 9b85d6a428..b0277578d1 100644 --- a/parser/testdata/02352_lightweight_delete/metadata.json +++ b/parser/testdata/02352_lightweight_delete/metadata.json @@ -1,11 +1,7 @@ { "explain_todo": { "stmt14": true, - "stmt19": true, "stmt29": true, - "stmt34": true, - "stmt44": true, - "stmt46": true, - "stmt9": true + "stmt46": true } } diff --git a/parser/testdata/02352_lightweight_delete_on_replicated_merge_tree/metadata.json b/parser/testdata/02352_lightweight_delete_on_replicated_merge_tree/metadata.json index 32ea289b32..13dfdf58b8 100644 --- a/parser/testdata/02352_lightweight_delete_on_replicated_merge_tree/metadata.json +++ b/parser/testdata/02352_lightweight_delete_on_replicated_merge_tree/metadata.json @@ -1,11 +1,5 @@ { "explain_todo": { - "stmt10": true, - "stmt12": true, - "stmt22": true, - "stmt23": true, - "stmt28": true, - "stmt34": true, - "stmt7": true + "stmt28": true } } diff --git a/parser/testdata/02366_kql_operator_in_sql/metadata.json b/parser/testdata/02366_kql_operator_in_sql/metadata.json index bcf7d7d10e..3a473dfdef 100644 --- a/parser/testdata/02366_kql_operator_in_sql/metadata.json +++ b/parser/testdata/02366_kql_operator_in_sql/metadata.json @@ -1,15 +1,3 @@ { - "explain_todo": { - "stmt11": true, - "stmt13": true, - "stmt15": true, - "stmt17": true, - "stmt19": true, - "stmt21": true, - "stmt27": true, - "stmt29": true, - "stmt5": true, - "stmt7": true, - "stmt9": true - } + "skip": true } diff --git a/parser/testdata/02385_analyzer_aliases_compound_expression/metadata.json b/parser/testdata/02385_analyzer_aliases_compound_expression/metadata.json index 15223e732d..0967ef424b 100644 --- a/parser/testdata/02385_analyzer_aliases_compound_expression/metadata.json +++ b/parser/testdata/02385_analyzer_aliases_compound_expression/metadata.json @@ -1,6 +1 @@ -{ - "explain_todo": { - "stmt11": true, - "stmt9": true - } -} +{} diff --git a/parser/testdata/02391_hashed_dictionary_shards/metadata.json b/parser/testdata/02391_hashed_dictionary_shards/metadata.json index e19bcdbc1b..1884db141c 100644 --- a/parser/testdata/02391_hashed_dictionary_shards/metadata.json +++ b/parser/testdata/02391_hashed_dictionary_shards/metadata.json @@ -1,14 +1,9 @@ { "explain_todo": { "stmt10": true, - "stmt12": true, "stmt17": true, - "stmt19": true, "stmt24": true, - "stmt25": true, "stmt31": true, - "stmt32": true, - "stmt35": true, - "stmt36": true + "stmt35": true } } diff --git a/parser/testdata/02400_create_table_on_cluster_normalization/metadata.json b/parser/testdata/02400_create_table_on_cluster_normalization/metadata.json index 323c7c4c53..dbdbb76d4f 100644 --- a/parser/testdata/02400_create_table_on_cluster_normalization/metadata.json +++ b/parser/testdata/02400_create_table_on_cluster_normalization/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt2": true, "stmt6": true } } diff --git a/parser/testdata/02404_lightweight_delete_vertical_merge/metadata.json b/parser/testdata/02404_lightweight_delete_vertical_merge/metadata.json index ed72890663..f07311ef63 100644 --- a/parser/testdata/02404_lightweight_delete_vertical_merge/metadata.json +++ b/parser/testdata/02404_lightweight_delete_vertical_merge/metadata.json @@ -1,10 +1,7 @@ { "explain_todo": { "stmt12": true, - "stmt16": true, "stmt24": true, - "stmt32": true, - "stmt36": true, - "stmt8": true + "stmt36": true } } diff --git a/parser/testdata/02416_rocksdb_delete_update/metadata.json b/parser/testdata/02416_rocksdb_delete_update/metadata.json index d2dcf8d7df..a08759fb21 100644 --- a/parser/testdata/02416_rocksdb_delete_update/metadata.json +++ b/parser/testdata/02416_rocksdb_delete_update/metadata.json @@ -1,7 +1,5 @@ { "explain_todo": { - "stmt12": true, - "stmt21": true, - "stmt6": true + "stmt21": true } } diff --git a/parser/testdata/02418_keeper_map_keys_limit/metadata.json b/parser/testdata/02418_keeper_map_keys_limit/metadata.json index 62b81668c3..0967ef424b 100644 --- a/parser/testdata/02418_keeper_map_keys_limit/metadata.json +++ b/parser/testdata/02418_keeper_map_keys_limit/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt13": true - } -} +{} diff --git a/parser/testdata/02449_check_dependencies_and_table_shutdown/metadata.json b/parser/testdata/02449_check_dependencies_and_table_shutdown/metadata.json index 0438c9b85f..0967ef424b 100644 --- a/parser/testdata/02449_check_dependencies_and_table_shutdown/metadata.json +++ b/parser/testdata/02449_check_dependencies_and_table_shutdown/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt15": true - } -} +{} diff --git a/parser/testdata/02457_datediff_via_unix_epoch/metadata.json b/parser/testdata/02457_datediff_via_unix_epoch/metadata.json index 71027fa3f9..0967ef424b 100644 --- a/parser/testdata/02457_datediff_via_unix_epoch/metadata.json +++ b/parser/testdata/02457_datediff_via_unix_epoch/metadata.json @@ -1,16 +1 @@ -{ - "explain_todo": { - "stmt1": true, - "stmt10": true, - "stmt11": true, - "stmt12": true, - "stmt2": true, - "stmt3": true, - "stmt4": true, - "stmt5": true, - "stmt6": true, - "stmt7": true, - "stmt8": true, - "stmt9": true - } -} +{} diff --git a/parser/testdata/02476_analyzer_join_with_unused_columns/metadata.json b/parser/testdata/02476_analyzer_join_with_unused_columns/metadata.json index c717affe25..0967ef424b 100644 --- a/parser/testdata/02476_analyzer_join_with_unused_columns/metadata.json +++ b/parser/testdata/02476_analyzer_join_with_unused_columns/metadata.json @@ -1 +1 @@ -{"explain_todo":{"stmt10":true,"stmt2":true,"stmt4":true,"stmt6":true,"stmt8":true}} +{} diff --git a/parser/testdata/02478_analyzer_table_expression_aliases/metadata.json b/parser/testdata/02478_analyzer_table_expression_aliases/metadata.json index 0636ff7dc8..0967ef424b 100644 --- a/parser/testdata/02478_analyzer_table_expression_aliases/metadata.json +++ b/parser/testdata/02478_analyzer_table_expression_aliases/metadata.json @@ -1,6 +1 @@ -{ - "explain_todo": { - "stmt15": true, - "stmt23": true - } -} +{} diff --git a/parser/testdata/02481_prewhere_filtered_rows_div_by_zero/metadata.json b/parser/testdata/02481_prewhere_filtered_rows_div_by_zero/metadata.json index f4c74e32be..0967ef424b 100644 --- a/parser/testdata/02481_prewhere_filtered_rows_div_by_zero/metadata.json +++ b/parser/testdata/02481_prewhere_filtered_rows_div_by_zero/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt10": true - } -} +{} diff --git a/parser/testdata/02494_query_cache_explain/metadata.json b/parser/testdata/02494_query_cache_explain/metadata.json index a62af59386..0967ef424b 100644 --- a/parser/testdata/02494_query_cache_explain/metadata.json +++ b/parser/testdata/02494_query_cache_explain/metadata.json @@ -1 +1 @@ -{"explain_todo":{"stmt6":true,"stmt7":true}} +{} diff --git a/parser/testdata/02504_regexp_dictionary_table_source/metadata.json b/parser/testdata/02504_regexp_dictionary_table_source/metadata.json index faa09997d3..0967ef424b 100644 --- a/parser/testdata/02504_regexp_dictionary_table_source/metadata.json +++ b/parser/testdata/02504_regexp_dictionary_table_source/metadata.json @@ -1,9 +1 @@ -{ - "explain_todo": { - "stmt22": true, - "stmt25": true, - "stmt30": true, - "stmt35": true, - "stmt38": true - } -} +{} diff --git a/parser/testdata/02513_prewhere_combine_step_filters/metadata.json b/parser/testdata/02513_prewhere_combine_step_filters/metadata.json index dbdbb76d4f..0967ef424b 100644 --- a/parser/testdata/02513_prewhere_combine_step_filters/metadata.json +++ b/parser/testdata/02513_prewhere_combine_step_filters/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt6": true - } -} +{} diff --git a/parser/testdata/02514_analyzer_drop_join_on/metadata.json b/parser/testdata/02514_analyzer_drop_join_on/metadata.json index bd3a8a9f25..0967ef424b 100644 --- a/parser/testdata/02514_analyzer_drop_join_on/metadata.json +++ b/parser/testdata/02514_analyzer_drop_join_on/metadata.json @@ -1,7 +1 @@ -{ - "explain_todo": { - "stmt18": true, - "stmt19": true, - "stmt20": true - } -} +{} diff --git a/parser/testdata/02517_union_columns_order/metadata.json b/parser/testdata/02517_union_columns_order/metadata.json index e9d6e46171..0967ef424b 100644 --- a/parser/testdata/02517_union_columns_order/metadata.json +++ b/parser/testdata/02517_union_columns_order/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt1": true - } -} +{} diff --git a/parser/testdata/02518_delete_on_materialized_view/metadata.json b/parser/testdata/02518_delete_on_materialized_view/metadata.json index ff0eba6904..0967ef424b 100644 --- a/parser/testdata/02518_delete_on_materialized_view/metadata.json +++ b/parser/testdata/02518_delete_on_materialized_view/metadata.json @@ -1,6 +1 @@ -{ - "explain_todo": { - "stmt6": true, - "stmt7": true - } -} +{} diff --git a/parser/testdata/02521_lightweight_delete_and_ttl/metadata.json b/parser/testdata/02521_lightweight_delete_and_ttl/metadata.json index 007cdea647..5c560515d1 100644 --- a/parser/testdata/02521_lightweight_delete_and_ttl/metadata.json +++ b/parser/testdata/02521_lightweight_delete_and_ttl/metadata.json @@ -1,7 +1,6 @@ { "explain_todo": { "stmt18": true, - "stmt5": true, - "stmt9": true + "stmt5": true } } diff --git a/parser/testdata/02564_analyzer_cross_to_inner/metadata.json b/parser/testdata/02564_analyzer_cross_to_inner/metadata.json index 6008ef1985..0967ef424b 100644 --- a/parser/testdata/02564_analyzer_cross_to_inner/metadata.json +++ b/parser/testdata/02564_analyzer_cross_to_inner/metadata.json @@ -1,10 +1 @@ -{ - "explain_todo": { - "stmt18": true, - "stmt19": true, - "stmt24": true, - "stmt25": true, - "stmt26": true, - "stmt31": true - } -} +{} diff --git a/parser/testdata/02568_and_consistency/metadata.json b/parser/testdata/02568_and_consistency/metadata.json index ef58f80315..0967ef424b 100644 --- a/parser/testdata/02568_and_consistency/metadata.json +++ b/parser/testdata/02568_and_consistency/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt2": true - } -} +{} diff --git a/parser/testdata/02577_keepermap_delete_update/metadata.json b/parser/testdata/02577_keepermap_delete_update/metadata.json index d2dcf8d7df..a08759fb21 100644 --- a/parser/testdata/02577_keepermap_delete_update/metadata.json +++ b/parser/testdata/02577_keepermap_delete_update/metadata.json @@ -1,7 +1,5 @@ { "explain_todo": { - "stmt12": true, - "stmt21": true, - "stmt6": true + "stmt21": true } } diff --git a/parser/testdata/02581_share_big_sets_between_multiple_mutations_tasks_long/metadata.json b/parser/testdata/02581_share_big_sets_between_multiple_mutations_tasks_long/metadata.json index 6a40e6e6e3..7b4455cd5f 100644 --- a/parser/testdata/02581_share_big_sets_between_multiple_mutations_tasks_long/metadata.json +++ b/parser/testdata/02581_share_big_sets_between_multiple_mutations_tasks_long/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt16": true, - "stmt2": true + "stmt16": true } } diff --git a/parser/testdata/02581_share_big_sets_between_mutation_tasks_long/metadata.json b/parser/testdata/02581_share_big_sets_between_mutation_tasks_long/metadata.json index ef58f80315..0967ef424b 100644 --- a/parser/testdata/02581_share_big_sets_between_mutation_tasks_long/metadata.json +++ b/parser/testdata/02581_share_big_sets_between_mutation_tasks_long/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt2": true - } -} +{} diff --git a/parser/testdata/02581_share_big_sets_between_mutation_tasks_with_storage_set/metadata.json b/parser/testdata/02581_share_big_sets_between_mutation_tasks_with_storage_set/metadata.json index ef58f80315..0967ef424b 100644 --- a/parser/testdata/02581_share_big_sets_between_mutation_tasks_with_storage_set/metadata.json +++ b/parser/testdata/02581_share_big_sets_between_mutation_tasks_with_storage_set/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt2": true - } -} +{} diff --git a/parser/testdata/02582_analyzer_join_subquery_empty_column_list/metadata.json b/parser/testdata/02582_analyzer_join_subquery_empty_column_list/metadata.json index 5835d389f1..0967ef424b 100644 --- a/parser/testdata/02582_analyzer_join_subquery_empty_column_list/metadata.json +++ b/parser/testdata/02582_analyzer_join_subquery_empty_column_list/metadata.json @@ -1,13 +1 @@ -{ - "explain_todo": { - "stmt10": true, - "stmt2": true, - "stmt3": true, - "stmt4": true, - "stmt5": true, - "stmt6": true, - "stmt7": true, - "stmt8": true, - "stmt9": true - } -} +{} diff --git a/parser/testdata/02677_analyzer_compound_expressions/metadata.json b/parser/testdata/02677_analyzer_compound_expressions/metadata.json index f4c74e32be..0967ef424b 100644 --- a/parser/testdata/02677_analyzer_compound_expressions/metadata.json +++ b/parser/testdata/02677_analyzer_compound_expressions/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt10": true - } -} +{} diff --git a/parser/testdata/02706_array_map_tuples/metadata.json b/parser/testdata/02706_array_map_tuples/metadata.json index 6ed702cc94..0967ef424b 100644 --- a/parser/testdata/02706_array_map_tuples/metadata.json +++ b/parser/testdata/02706_array_map_tuples/metadata.json @@ -1,8 +1 @@ -{ - "explain_todo": { - "stmt1": true, - "stmt2": true, - "stmt3": true, - "stmt4": true - } -} +{} diff --git a/parser/testdata/02707_keeper_map_delete_update_strict/metadata.json b/parser/testdata/02707_keeper_map_delete_update_strict/metadata.json index e4a9d201d5..9be7220609 100644 --- a/parser/testdata/02707_keeper_map_delete_update_strict/metadata.json +++ b/parser/testdata/02707_keeper_map_delete_update_strict/metadata.json @@ -1,7 +1,5 @@ { "explain_todo": { - "stmt13": true, - "stmt22": true, - "stmt7": true + "stmt22": true } } diff --git a/parser/testdata/02730_dictionary_hashed_load_factor_element_count/metadata.json b/parser/testdata/02730_dictionary_hashed_load_factor_element_count/metadata.json index cc8d69ec3f..0967ef424b 100644 --- a/parser/testdata/02730_dictionary_hashed_load_factor_element_count/metadata.json +++ b/parser/testdata/02730_dictionary_hashed_load_factor_element_count/metadata.json @@ -1,6 +1 @@ -{ - "explain_todo": { - "stmt10": true, - "stmt6": true - } -} +{} diff --git a/parser/testdata/02731_auto_convert_dictionary_layout_to_complex_by_complex_keys/metadata.json b/parser/testdata/02731_auto_convert_dictionary_layout_to_complex_by_complex_keys/metadata.json index 3ce0654146..7974f6a182 100644 --- a/parser/testdata/02731_auto_convert_dictionary_layout_to_complex_by_complex_keys/metadata.json +++ b/parser/testdata/02731_auto_convert_dictionary_layout_to_complex_by_complex_keys/metadata.json @@ -1,10 +1,5 @@ { "explain_todo": { - "stmt13": true, - "stmt17": true, - "stmt21": true, - "stmt24": true, - "stmt25": true, - "stmt9": true + "stmt24": true } } diff --git a/parser/testdata/02734_sparse_columns_mutation/metadata.json b/parser/testdata/02734_sparse_columns_mutation/metadata.json index 3a06a4a1ac..0967ef424b 100644 --- a/parser/testdata/02734_sparse_columns_mutation/metadata.json +++ b/parser/testdata/02734_sparse_columns_mutation/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt5": true - } -} +{} diff --git a/parser/testdata/02740_hashed_dictionary_load_factor_smoke/metadata.json b/parser/testdata/02740_hashed_dictionary_load_factor_smoke/metadata.json index 9c781190f2..50574342b8 100644 --- a/parser/testdata/02740_hashed_dictionary_load_factor_smoke/metadata.json +++ b/parser/testdata/02740_hashed_dictionary_load_factor_smoke/metadata.json @@ -1,14 +1,9 @@ { "explain_todo": { "stmt10": true, - "stmt12": true, "stmt17": true, - "stmt19": true, "stmt24": true, - "stmt26": true, "stmt31": true, - "stmt32": true, - "stmt38": true, - "stmt39": true + "stmt38": true } } diff --git a/parser/testdata/02792_drop_projection_lwd/metadata.json b/parser/testdata/02792_drop_projection_lwd/metadata.json index 3c17446e87..dbdbb76d4f 100644 --- a/parser/testdata/02792_drop_projection_lwd/metadata.json +++ b/parser/testdata/02792_drop_projection_lwd/metadata.json @@ -1,7 +1,5 @@ { "explain_todo": { - "stmt5": true, - "stmt6": true, - "stmt8": true + "stmt6": true } } diff --git a/parser/testdata/02815_fix_not_found_constants_col_in_block/metadata.json b/parser/testdata/02815_fix_not_found_constants_col_in_block/metadata.json index ef58f80315..0967ef424b 100644 --- a/parser/testdata/02815_fix_not_found_constants_col_in_block/metadata.json +++ b/parser/testdata/02815_fix_not_found_constants_col_in_block/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt2": true - } -} +{} diff --git a/parser/testdata/02864_statistics_bug_69589/metadata.json b/parser/testdata/02864_statistics_bug_69589/metadata.json index 3a06a4a1ac..0967ef424b 100644 --- a/parser/testdata/02864_statistics_bug_69589/metadata.json +++ b/parser/testdata/02864_statistics_bug_69589/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt5": true - } -} +{} diff --git a/parser/testdata/02902_diable_apply_deleted_mask/metadata.json b/parser/testdata/02902_diable_apply_deleted_mask/metadata.json index 9a504448b8..c45b7602ba 100644 --- a/parser/testdata/02902_diable_apply_deleted_mask/metadata.json +++ b/parser/testdata/02902_diable_apply_deleted_mask/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt12": true, - "stmt4": true + "stmt12": true } } diff --git a/parser/testdata/02911_cte_invalid_query_analysis/metadata.json b/parser/testdata/02911_cte_invalid_query_analysis/metadata.json index 19830977ac..0967ef424b 100644 --- a/parser/testdata/02911_cte_invalid_query_analysis/metadata.json +++ b/parser/testdata/02911_cte_invalid_query_analysis/metadata.json @@ -1,7 +1 @@ -{ - "explain_todo": { - "stmt4": true, - "stmt5": true, - "stmt6": true - } -} +{} diff --git a/parser/testdata/02932_apply_deleted_mask/metadata.json b/parser/testdata/02932_apply_deleted_mask/metadata.json index aa9e1f3f45..49a71d5123 100644 --- a/parser/testdata/02932_apply_deleted_mask/metadata.json +++ b/parser/testdata/02932_apply_deleted_mask/metadata.json @@ -1,8 +1,6 @@ { "explain_todo": { "stmt13": true, - "stmt17": true, - "stmt21": true, - "stmt9": true + "stmt21": true } } diff --git a/parser/testdata/02932_lwd_and_mutations/metadata.json b/parser/testdata/02932_lwd_and_mutations/metadata.json index 57a221f1be..983800a6c0 100644 --- a/parser/testdata/02932_lwd_and_mutations/metadata.json +++ b/parser/testdata/02932_lwd_and_mutations/metadata.json @@ -1,7 +1,5 @@ { "explain_todo": { - "stmt11": true, - "stmt23": true, - "stmt5": true + "stmt23": true } } diff --git a/parser/testdata/03001_consider_lwd_when_merge/metadata.json b/parser/testdata/03001_consider_lwd_when_merge/metadata.json index e535539f2e..0967ef424b 100644 --- a/parser/testdata/03001_consider_lwd_when_merge/metadata.json +++ b/parser/testdata/03001_consider_lwd_when_merge/metadata.json @@ -1,6 +1 @@ -{ - "explain_todo": { - "stmt12": true, - "stmt8": true - } -} +{} diff --git a/parser/testdata/03047_on_fly_update_delete/metadata.json b/parser/testdata/03047_on_fly_update_delete/metadata.json index 1ed30c5543..62b81668c3 100644 --- a/parser/testdata/03047_on_fly_update_delete/metadata.json +++ b/parser/testdata/03047_on_fly_update_delete/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt13": true, - "stmt6": true + "stmt13": true } } diff --git a/parser/testdata/03100_lwu_22_detach_attach_patches/metadata.json b/parser/testdata/03100_lwu_22_detach_attach_patches/metadata.json index 29a0cd7cc2..83e4e4aadb 100644 --- a/parser/testdata/03100_lwu_22_detach_attach_patches/metadata.json +++ b/parser/testdata/03100_lwu_22_detach_attach_patches/metadata.json @@ -1,13 +1,9 @@ { "explain_todo": { - "stmt21": true, "stmt23": true, - "stmt24": true, "stmt25": true, "stmt26": true, - "stmt27": true, "stmt28": true, - "stmt30": true, "stmt33": true, "stmt37": true } diff --git a/parser/testdata/03100_lwu_35_lock_profile_events/metadata.json b/parser/testdata/03100_lwu_35_lock_profile_events/metadata.json index dbdbb76d4f..0967ef424b 100644 --- a/parser/testdata/03100_lwu_35_lock_profile_events/metadata.json +++ b/parser/testdata/03100_lwu_35_lock_profile_events/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt6": true - } -} +{} diff --git a/parser/testdata/03100_lwu_38_replacing/metadata.json b/parser/testdata/03100_lwu_38_replacing/metadata.json index 7ad5569408..0967ef424b 100644 --- a/parser/testdata/03100_lwu_38_replacing/metadata.json +++ b/parser/testdata/03100_lwu_38_replacing/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt9": true - } -} +{} diff --git a/parser/testdata/03100_lwu_deletes_1/metadata.json b/parser/testdata/03100_lwu_deletes_1/metadata.json index ccc75f74d5..0967ef424b 100644 --- a/parser/testdata/03100_lwu_deletes_1/metadata.json +++ b/parser/testdata/03100_lwu_deletes_1/metadata.json @@ -1,6 +1 @@ -{ - "explain_todo": { - "stmt15": true, - "stmt9": true - } -} +{} diff --git a/parser/testdata/03100_lwu_deletes_2/metadata.json b/parser/testdata/03100_lwu_deletes_2/metadata.json index a9bcd51630..0967ef424b 100644 --- a/parser/testdata/03100_lwu_deletes_2/metadata.json +++ b/parser/testdata/03100_lwu_deletes_2/metadata.json @@ -1,8 +1 @@ -{ - "explain_todo": { - "stmt10": true, - "stmt18": true, - "stmt30": true, - "stmt38": true - } -} +{} diff --git a/parser/testdata/03100_lwu_deletes_3/metadata.json b/parser/testdata/03100_lwu_deletes_3/metadata.json index 7392d8b45e..94bd5427f9 100644 --- a/parser/testdata/03100_lwu_deletes_3/metadata.json +++ b/parser/testdata/03100_lwu_deletes_3/metadata.json @@ -1,9 +1,5 @@ { "explain_todo": { - "stmt13": true, - "stmt14": true, - "stmt15": true, - "stmt16": true, "stmt23": true, "stmt27": true } diff --git a/parser/testdata/03100_lwu_deletes_4_index/metadata.json b/parser/testdata/03100_lwu_deletes_4_index/metadata.json index ff0eba6904..0967ef424b 100644 --- a/parser/testdata/03100_lwu_deletes_4_index/metadata.json +++ b/parser/testdata/03100_lwu_deletes_4_index/metadata.json @@ -1,6 +1 @@ -{ - "explain_todo": { - "stmt6": true, - "stmt7": true - } -} +{} diff --git a/parser/testdata/03100_lwu_deletes_5_vertical_merge/metadata.json b/parser/testdata/03100_lwu_deletes_5_vertical_merge/metadata.json index e47c967938..0967ef424b 100644 --- a/parser/testdata/03100_lwu_deletes_5_vertical_merge/metadata.json +++ b/parser/testdata/03100_lwu_deletes_5_vertical_merge/metadata.json @@ -1,6 +1 @@ -{ - "explain_todo": { - "stmt11": true, - "stmt6": true - } -} +{} diff --git a/parser/testdata/03101_analyzer_identifiers_1/metadata.json b/parser/testdata/03101_analyzer_identifiers_1/metadata.json index ab9202e88e..0967ef424b 100644 --- a/parser/testdata/03101_analyzer_identifiers_1/metadata.json +++ b/parser/testdata/03101_analyzer_identifiers_1/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt11": true - } -} +{} diff --git a/parser/testdata/03101_analyzer_identifiers_3/metadata.json b/parser/testdata/03101_analyzer_identifiers_3/metadata.json index d792f58503..0967ef424b 100644 --- a/parser/testdata/03101_analyzer_identifiers_3/metadata.json +++ b/parser/testdata/03101_analyzer_identifiers_3/metadata.json @@ -1,8 +1 @@ -{ - "explain_todo": { - "stmt19": true, - "stmt20": true, - "stmt22": true, - "stmt23": true - } -} +{} diff --git a/parser/testdata/03101_analyzer_invalid_join_on/metadata.json b/parser/testdata/03101_analyzer_invalid_join_on/metadata.json index ef382ce51e..0967ef424b 100644 --- a/parser/testdata/03101_analyzer_invalid_join_on/metadata.json +++ b/parser/testdata/03101_analyzer_invalid_join_on/metadata.json @@ -1,6 +1 @@ -{ - "explain_todo": { - "stmt4": true, - "stmt5": true - } -} +{} diff --git a/parser/testdata/03147_asof_join_ddb_missing/metadata.json b/parser/testdata/03147_asof_join_ddb_missing/metadata.json index 730a633018..0967ef424b 100644 --- a/parser/testdata/03147_asof_join_ddb_missing/metadata.json +++ b/parser/testdata/03147_asof_join_ddb_missing/metadata.json @@ -1,14 +1 @@ -{ - "explain_todo": { - "stmt10": true, - "stmt11": true, - "stmt12": true, - "stmt13": true, - "stmt14": true, - "stmt15": true, - "stmt6": true, - "stmt7": true, - "stmt8": true, - "stmt9": true - } -} +{} diff --git a/parser/testdata/03161_lightweight_delete_projection/metadata.json b/parser/testdata/03161_lightweight_delete_projection/metadata.json index d0b0d74418..0967ef424b 100644 --- a/parser/testdata/03161_lightweight_delete_projection/metadata.json +++ b/parser/testdata/03161_lightweight_delete_projection/metadata.json @@ -1,10 +1 @@ -{ - "explain_todo": { - "stmt11": true, - "stmt18": true, - "stmt28": true, - "stmt31": true, - "stmt38": true, - "stmt8": true - } -} +{} diff --git a/parser/testdata/03171_condition_pushdown/metadata.json b/parser/testdata/03171_condition_pushdown/metadata.json index ef58f80315..0967ef424b 100644 --- a/parser/testdata/03171_condition_pushdown/metadata.json +++ b/parser/testdata/03171_condition_pushdown/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt2": true - } -} +{} diff --git a/parser/testdata/03205_column_type_check/metadata.json b/parser/testdata/03205_column_type_check/metadata.json index 04dec16ad7..0967ef424b 100644 --- a/parser/testdata/03205_column_type_check/metadata.json +++ b/parser/testdata/03205_column_type_check/metadata.json @@ -1,6 +1 @@ -{ - "explain_todo": { - "stmt1": true, - "stmt5": true - } -} +{} diff --git a/parser/testdata/03205_json_syntax/metadata.json b/parser/testdata/03205_json_syntax/metadata.json index 2192444fd9..0967ef424b 100644 --- a/parser/testdata/03205_json_syntax/metadata.json +++ b/parser/testdata/03205_json_syntax/metadata.json @@ -1,16 +1 @@ -{ - "explain_todo": { - "stmt15": true, - "stmt17": true, - "stmt19": true, - "stmt21": true, - "stmt23": true, - "stmt25": true, - "stmt27": true, - "stmt29": true, - "stmt31": true, - "stmt33": true, - "stmt35": true, - "stmt37": true - } -} +{} diff --git a/parser/testdata/03205_overlay/metadata.json b/parser/testdata/03205_overlay/metadata.json index 4090191c62..0967ef424b 100644 --- a/parser/testdata/03205_overlay/metadata.json +++ b/parser/testdata/03205_overlay/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt35": true - } -} +{} diff --git a/parser/testdata/03207_json_read_subcolumns_1_memory/metadata.json b/parser/testdata/03207_json_read_subcolumns_1_memory/metadata.json index f04990226e..d4d1d99f95 100644 --- a/parser/testdata/03207_json_read_subcolumns_1_memory/metadata.json +++ b/parser/testdata/03207_json_read_subcolumns_1_memory/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt14": true, - "stmt6": true + "stmt14": true } } diff --git a/parser/testdata/03207_json_read_subcolumns_2_memory/metadata.json b/parser/testdata/03207_json_read_subcolumns_2_memory/metadata.json index f04990226e..d4d1d99f95 100644 --- a/parser/testdata/03207_json_read_subcolumns_2_memory/metadata.json +++ b/parser/testdata/03207_json_read_subcolumns_2_memory/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt14": true, - "stmt6": true + "stmt14": true } } diff --git a/parser/testdata/03208_array_of_json_read_subcolumns_2_memory/metadata.json b/parser/testdata/03208_array_of_json_read_subcolumns_2_memory/metadata.json index 3a06a4a1ac..0967ef424b 100644 --- a/parser/testdata/03208_array_of_json_read_subcolumns_2_memory/metadata.json +++ b/parser/testdata/03208_array_of_json_read_subcolumns_2_memory/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt5": true - } -} +{} diff --git a/parser/testdata/03227_json_invalid_regexp/metadata.json b/parser/testdata/03227_json_invalid_regexp/metadata.json index bc141058a4..0967ef424b 100644 --- a/parser/testdata/03227_json_invalid_regexp/metadata.json +++ b/parser/testdata/03227_json_invalid_regexp/metadata.json @@ -1,6 +1 @@ -{ - "explain_todo": { - "stmt2": true, - "stmt3": true - } -} +{} diff --git a/parser/testdata/03247_generic_arrayMin_arrayMax_fixes/metadata.json b/parser/testdata/03247_generic_arrayMin_arrayMax_fixes/metadata.json index bf70691c76..0967ef424b 100644 --- a/parser/testdata/03247_generic_arrayMin_arrayMax_fixes/metadata.json +++ b/parser/testdata/03247_generic_arrayMin_arrayMax_fixes/metadata.json @@ -1,7 +1 @@ -{ - "explain_todo": { - "stmt13": true, - "stmt14": true, - "stmt15": true - } -} +{} diff --git a/parser/testdata/03254_project_lwd_respects_row_exists/metadata.json b/parser/testdata/03254_project_lwd_respects_row_exists/metadata.json index 9022255763..0967ef424b 100644 --- a/parser/testdata/03254_project_lwd_respects_row_exists/metadata.json +++ b/parser/testdata/03254_project_lwd_respects_row_exists/metadata.json @@ -1,6 +1 @@ -{ - "explain_todo": { - "stmt4": true, - "stmt9": true - } -} +{} diff --git a/parser/testdata/03254_timeseries_functions/metadata.json b/parser/testdata/03254_timeseries_functions/metadata.json index 8f6d4ba033..0967ef424b 100644 --- a/parser/testdata/03254_timeseries_functions/metadata.json +++ b/parser/testdata/03254_timeseries_functions/metadata.json @@ -1,7 +1 @@ -{ - "explain_todo": { - "stmt5": true, - "stmt6": true, - "stmt7": true - } -} +{} diff --git a/parser/testdata/03254_timeseries_to_grid_aggregate_function/metadata.json b/parser/testdata/03254_timeseries_to_grid_aggregate_function/metadata.json index 523415a672..bc141058a4 100644 --- a/parser/testdata/03254_timeseries_to_grid_aggregate_function/metadata.json +++ b/parser/testdata/03254_timeseries_to_grid_aggregate_function/metadata.json @@ -1,11 +1,6 @@ { "explain_todo": { - "stmt10": true, - "stmt11": true, - "stmt12": true, "stmt2": true, - "stmt3": true, - "stmt8": true, - "stmt9": true + "stmt3": true } } diff --git a/parser/testdata/03254_timeseries_to_grid_aggregate_function_sparse/metadata.json b/parser/testdata/03254_timeseries_to_grid_aggregate_function_sparse/metadata.json index 3e8cead7d4..bc141058a4 100644 --- a/parser/testdata/03254_timeseries_to_grid_aggregate_function_sparse/metadata.json +++ b/parser/testdata/03254_timeseries_to_grid_aggregate_function_sparse/metadata.json @@ -1,12 +1,6 @@ { "explain_todo": { - "stmt10": true, - "stmt11": true, - "stmt12": true, - "stmt13": true, "stmt2": true, - "stmt3": true, - "stmt8": true, - "stmt9": true + "stmt3": true } } diff --git a/parser/testdata/03256_invalid_mutation_query/metadata.json b/parser/testdata/03256_invalid_mutation_query/metadata.json index e18504f0c2..7ad5569408 100644 --- a/parser/testdata/03256_invalid_mutation_query/metadata.json +++ b/parser/testdata/03256_invalid_mutation_query/metadata.json @@ -1,10 +1,5 @@ { "explain_todo": { - "stmt11": true, - "stmt13": true, - "stmt4": true, - "stmt5": true, - "stmt6": true, "stmt9": true } } diff --git a/parser/testdata/03263_forbid_materialize_sort_key/metadata.json b/parser/testdata/03263_forbid_materialize_sort_key/metadata.json index 615e471e8a..f2514e8c89 100644 --- a/parser/testdata/03263_forbid_materialize_sort_key/metadata.json +++ b/parser/testdata/03263_forbid_materialize_sort_key/metadata.json @@ -1,7 +1,5 @@ { "explain_todo": { - "stmt10": true, - "stmt15": true, "stmt17": true, "stmt3": true, "stmt5": true diff --git a/parser/testdata/03272_json_to_json_cast_1/metadata.json b/parser/testdata/03272_json_to_json_cast_1/metadata.json index 3a06a4a1ac..0967ef424b 100644 --- a/parser/testdata/03272_json_to_json_cast_1/metadata.json +++ b/parser/testdata/03272_json_to_json_cast_1/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt5": true - } -} +{} diff --git a/parser/testdata/03282_memory_transaction_crash/metadata.json b/parser/testdata/03282_memory_transaction_crash/metadata.json index b65b07d7a6..0967ef424b 100644 --- a/parser/testdata/03282_memory_transaction_crash/metadata.json +++ b/parser/testdata/03282_memory_transaction_crash/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt4": true - } -} +{} diff --git a/parser/testdata/03291_collapsing_invalid_sign/metadata.json b/parser/testdata/03291_collapsing_invalid_sign/metadata.json index 5395f06a45..0967ef424b 100644 --- a/parser/testdata/03291_collapsing_invalid_sign/metadata.json +++ b/parser/testdata/03291_collapsing_invalid_sign/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt20": true - } -} +{} diff --git a/parser/testdata/03301_subcolumns_in_mv/metadata.json b/parser/testdata/03301_subcolumns_in_mv/metadata.json index 3a06a4a1ac..0967ef424b 100644 --- a/parser/testdata/03301_subcolumns_in_mv/metadata.json +++ b/parser/testdata/03301_subcolumns_in_mv/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt5": true - } -} +{} diff --git a/parser/testdata/03304_fill_virtual_columns/metadata.json b/parser/testdata/03304_fill_virtual_columns/metadata.json index 3a06a4a1ac..0967ef424b 100644 --- a/parser/testdata/03304_fill_virtual_columns/metadata.json +++ b/parser/testdata/03304_fill_virtual_columns/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt5": true - } -} +{} diff --git a/parser/testdata/03352_distinct_sorted_bug/metadata.json b/parser/testdata/03352_distinct_sorted_bug/metadata.json index f4c74e32be..0967ef424b 100644 --- a/parser/testdata/03352_distinct_sorted_bug/metadata.json +++ b/parser/testdata/03352_distinct_sorted_bug/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt10": true - } -} +{} diff --git a/parser/testdata/03369_l2_distance_transposed_variadic/metadata.json b/parser/testdata/03369_l2_distance_transposed_variadic/metadata.json index 2fc9d7d80a..90496cea92 100644 --- a/parser/testdata/03369_l2_distance_transposed_variadic/metadata.json +++ b/parser/testdata/03369_l2_distance_transposed_variadic/metadata.json @@ -1,17 +1,5 @@ { "explain_todo": { - "stmt10": true, - "stmt17": true, - "stmt18": true, - "stmt19": true, - "stmt26": true, - "stmt27": true, - "stmt28": true, - "stmt33": true, - "stmt34": true, - "stmt35": true, - "stmt37": true, - "stmt8": true, - "stmt9": true + "stmt37": true } } diff --git a/parser/testdata/03375_bool_partition/metadata.json b/parser/testdata/03375_bool_partition/metadata.json index 3a06a4a1ac..0967ef424b 100644 --- a/parser/testdata/03375_bool_partition/metadata.json +++ b/parser/testdata/03375_bool_partition/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt5": true - } -} +{} diff --git a/parser/testdata/03375_l2_distance_transposed_partial_reads_pass/metadata.json b/parser/testdata/03375_l2_distance_transposed_partial_reads_pass/metadata.json index ef382ce51e..0967ef424b 100644 --- a/parser/testdata/03375_l2_distance_transposed_partial_reads_pass/metadata.json +++ b/parser/testdata/03375_l2_distance_transposed_partial_reads_pass/metadata.json @@ -1,6 +1 @@ -{ - "explain_todo": { - "stmt4": true, - "stmt5": true - } -} +{} diff --git a/parser/testdata/03404_json_tables/metadata.json b/parser/testdata/03404_json_tables/metadata.json index fa901cf963..ab9202e88e 100644 --- a/parser/testdata/03404_json_tables/metadata.json +++ b/parser/testdata/03404_json_tables/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt11": true, - "stmt4": true + "stmt11": true } } diff --git a/parser/testdata/03404_ubsan_distinct_join_const_column/metadata.json b/parser/testdata/03404_ubsan_distinct_join_const_column/metadata.json index 43b9ce7b01..0967ef424b 100644 --- a/parser/testdata/03404_ubsan_distinct_join_const_column/metadata.json +++ b/parser/testdata/03404_ubsan_distinct_join_const_column/metadata.json @@ -1,6 +1 @@ -{ - "explain_txt_edited": true, - "explain_todo": { - "stmt1": true - } -} +{} diff --git a/parser/testdata/03405_merge_filter_into_join/metadata.json b/parser/testdata/03405_merge_filter_into_join/metadata.json index 092162dd61..0967ef424b 100644 --- a/parser/testdata/03405_merge_filter_into_join/metadata.json +++ b/parser/testdata/03405_merge_filter_into_join/metadata.json @@ -1,9 +1 @@ -{ - "explain_todo": { - "stmt11": true, - "stmt13": true, - "stmt14": true, - "stmt15": true, - "stmt9": true - } -} +{} diff --git a/parser/testdata/03444_explain_asterisk/metadata.json b/parser/testdata/03444_explain_asterisk/metadata.json index 92efb02376..0967ef424b 100644 --- a/parser/testdata/03444_explain_asterisk/metadata.json +++ b/parser/testdata/03444_explain_asterisk/metadata.json @@ -1,6 +1 @@ -{ - "explain_todo": { - "stmt6": true, - "stmt8": true - } -} +{} diff --git a/parser/testdata/03449_window_cannot_find_column/metadata.json b/parser/testdata/03449_window_cannot_find_column/metadata.json index 1295a45747..0967ef424b 100644 --- a/parser/testdata/03449_window_cannot_find_column/metadata.json +++ b/parser/testdata/03449_window_cannot_find_column/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt3": true - } -} +{} diff --git a/parser/testdata/03516_int_exp2_join/metadata.json b/parser/testdata/03516_int_exp2_join/metadata.json index c55f31987e..0967ef424b 100644 --- a/parser/testdata/03516_int_exp2_join/metadata.json +++ b/parser/testdata/03516_int_exp2_join/metadata.json @@ -1,7 +1 @@ -{ - "explain_todo": { - "stmt3": true, - "stmt4": true, - "stmt6": true - } -} +{} diff --git a/parser/testdata/03545_number_of_rows_in_ttltransform/metadata.json b/parser/testdata/03545_number_of_rows_in_ttltransform/metadata.json index c45b7602ba..0967ef424b 100644 --- a/parser/testdata/03545_number_of_rows_in_ttltransform/metadata.json +++ b/parser/testdata/03545_number_of_rows_in_ttltransform/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt12": true - } -} +{} diff --git a/parser/testdata/03550_variant_extend_union/metadata.json b/parser/testdata/03550_variant_extend_union/metadata.json index e9d6e46171..0967ef424b 100644 --- a/parser/testdata/03550_variant_extend_union/metadata.json +++ b/parser/testdata/03550_variant_extend_union/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt1": true - } -} +{} diff --git a/parser/testdata/03571_lwd_and_projections/metadata.json b/parser/testdata/03571_lwd_and_projections/metadata.json index dbdbb76d4f..0967ef424b 100644 --- a/parser/testdata/03571_lwd_and_projections/metadata.json +++ b/parser/testdata/03571_lwd_and_projections/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt6": true - } -} +{} diff --git a/parser/testdata/03571_trying_to_get_name_of_not_a_column_asterisk/metadata.json b/parser/testdata/03571_trying_to_get_name_of_not_a_column_asterisk/metadata.json index b563327205..0967ef424b 100644 --- a/parser/testdata/03571_trying_to_get_name_of_not_a_column_asterisk/metadata.json +++ b/parser/testdata/03571_trying_to_get_name_of_not_a_column_asterisk/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt7": true - } -} +{} diff --git a/parser/testdata/03573_linear_regression_timeseries_functions/metadata.json b/parser/testdata/03573_linear_regression_timeseries_functions/metadata.json index 3a06a4a1ac..0967ef424b 100644 --- a/parser/testdata/03573_linear_regression_timeseries_functions/metadata.json +++ b/parser/testdata/03573_linear_regression_timeseries_functions/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt5": true - } -} +{} diff --git a/parser/testdata/03591_optimize_prewhere_row_policy/metadata.json b/parser/testdata/03591_optimize_prewhere_row_policy/metadata.json index 52f07a6b85..0967ef424b 100644 --- a/parser/testdata/03591_optimize_prewhere_row_policy/metadata.json +++ b/parser/testdata/03591_optimize_prewhere_row_policy/metadata.json @@ -1,8 +1 @@ -{ - "explain_todo": { - "stmt12": true, - "stmt13": true, - "stmt15": true, - "stmt16": true - } -} +{} diff --git a/parser/testdata/03595_analyzer_lateral_join/metadata.json b/parser/testdata/03595_analyzer_lateral_join/metadata.json index 7b4ddafa53..0967ef424b 100644 --- a/parser/testdata/03595_analyzer_lateral_join/metadata.json +++ b/parser/testdata/03595_analyzer_lateral_join/metadata.json @@ -1,6 +1 @@ -{ - "explain_todo": { - "stmt3": true, - "stmt4": true - } -} +{} diff --git a/parser/testdata/03595_changes_timeseries_functions/metadata.json b/parser/testdata/03595_changes_timeseries_functions/metadata.json index 3a06a4a1ac..0967ef424b 100644 --- a/parser/testdata/03595_changes_timeseries_functions/metadata.json +++ b/parser/testdata/03595_changes_timeseries_functions/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt5": true - } -} +{} diff --git a/parser/testdata/03599_lightweight_delete_vertical_merge/metadata.json b/parser/testdata/03599_lightweight_delete_vertical_merge/metadata.json index 11f2421d1d..7b4455cd5f 100644 --- a/parser/testdata/03599_lightweight_delete_vertical_merge/metadata.json +++ b/parser/testdata/03599_lightweight_delete_vertical_merge/metadata.json @@ -1,7 +1,5 @@ { "explain_todo": { - "stmt10": true, - "stmt16": true, - "stmt5": true + "stmt16": true } } diff --git a/parser/testdata/03604_test_merge_tree_min_read_task_size_is_zero/metadata.json b/parser/testdata/03604_test_merge_tree_min_read_task_size_is_zero/metadata.json index dbdbb76d4f..0967ef424b 100644 --- a/parser/testdata/03604_test_merge_tree_min_read_task_size_is_zero/metadata.json +++ b/parser/testdata/03604_test_merge_tree_min_read_task_size_is_zero/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt6": true - } -} +{} diff --git a/parser/testdata/03620_json_advanced_shared_data_seek_bug/metadata.json b/parser/testdata/03620_json_advanced_shared_data_seek_bug/metadata.json index 1295a45747..0967ef424b 100644 --- a/parser/testdata/03620_json_advanced_shared_data_seek_bug/metadata.json +++ b/parser/testdata/03620_json_advanced_shared_data_seek_bug/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt3": true - } -} +{} diff --git a/parser/testdata/03640_multiple_mutations_with_error_with_rewrite_parts/metadata.json b/parser/testdata/03640_multiple_mutations_with_error_with_rewrite_parts/metadata.json index 6bf8d5b80a..b563327205 100644 --- a/parser/testdata/03640_multiple_mutations_with_error_with_rewrite_parts/metadata.json +++ b/parser/testdata/03640_multiple_mutations_with_error_with_rewrite_parts/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt5": true, "stmt7": true } } diff --git a/parser/testdata/03652_explain_input_header/metadata.json b/parser/testdata/03652_explain_input_header/metadata.json index 51ed70d41b..09a03eef39 100644 --- a/parser/testdata/03652_explain_input_header/metadata.json +++ b/parser/testdata/03652_explain_input_header/metadata.json @@ -1,14 +1,6 @@ { "explain_todo": { - "stmt10": true, - "stmt11": true, - "stmt12": true, "stmt13": true, - "stmt14": true, - "stmt15": true, - "stmt16": true, - "stmt17": true, - "stmt18": true, - "stmt9": true + "stmt18": true } } diff --git a/parser/testdata/03704_function_dict_get_keys_cache_type/metadata.json b/parser/testdata/03704_function_dict_get_keys_cache_type/metadata.json index 6b1cea3567..0967ef424b 100644 --- a/parser/testdata/03704_function_dict_get_keys_cache_type/metadata.json +++ b/parser/testdata/03704_function_dict_get_keys_cache_type/metadata.json @@ -1,6 +1 @@ -{ - "explain_todo": { - "stmt10": true, - "stmt26": true - } -} +{} diff --git a/parser/testdata/03721_aggregate_projection_actions_dag/metadata.json b/parser/testdata/03721_aggregate_projection_actions_dag/metadata.json index 3a06a4a1ac..0967ef424b 100644 --- a/parser/testdata/03721_aggregate_projection_actions_dag/metadata.json +++ b/parser/testdata/03721_aggregate_projection_actions_dag/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt5": true - } -} +{} diff --git a/parser/testdata/03727_tolowcardinality_nullable_cast/metadata.json b/parser/testdata/03727_tolowcardinality_nullable_cast/metadata.json index 3a06a4a1ac..0967ef424b 100644 --- a/parser/testdata/03727_tolowcardinality_nullable_cast/metadata.json +++ b/parser/testdata/03727_tolowcardinality_nullable_cast/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt5": true - } -} +{} diff --git a/parser/testdata/03755_circular_dictionary/metadata.json b/parser/testdata/03755_circular_dictionary/metadata.json index 754ca20608..0967ef424b 100644 --- a/parser/testdata/03755_circular_dictionary/metadata.json +++ b/parser/testdata/03755_circular_dictionary/metadata.json @@ -1,14 +1 @@ -{ - "explain_todo": { - "stmt31": true, - "stmt32": true, - "stmt33": true, - "stmt34": true, - "stmt35": true, - "stmt36": true, - "stmt37": true, - "stmt38": true, - "stmt39": true, - "stmt40": true - } -} +{}