diff --git a/ast/ast.go b/ast/ast.go index 74ee974020..78858721fc 100644 --- a/ast/ast.go +++ b/ast/ast.go @@ -268,8 +268,10 @@ type CreateQuery struct { CreateDatabase bool `json:"create_database,omitempty"` CreateFunction bool `json:"create_function,omitempty"` CreateUser bool `json:"create_user,omitempty"` - CreateDictionary bool `json:"create_dictionary,omitempty"` - FunctionName string `json:"function_name,omitempty"` + CreateDictionary bool `json:"create_dictionary,omitempty"` + DictionaryAttrs []*DictionaryAttributeDeclaration `json:"dictionary_attrs,omitempty"` + DictionaryDef *DictionaryDefinition `json:"dictionary_def,omitempty"` + FunctionName string `json:"function_name,omitempty"` FunctionBody Expression `json:"function_body,omitempty"` UserName string `json:"user_name,omitempty"` } @@ -295,6 +297,85 @@ type ColumnDeclaration struct { func (c *ColumnDeclaration) Pos() token.Position { return c.Position } func (c *ColumnDeclaration) End() token.Position { return c.Position } +// DictionaryAttributeDeclaration represents a dictionary attribute definition. +type DictionaryAttributeDeclaration struct { + Position token.Position `json:"-"` + Name string `json:"name"` + Type *DataType `json:"type"` + Default Expression `json:"default,omitempty"` + Expression Expression `json:"expression,omitempty"` // EXPRESSION clause + Hierarchical bool `json:"hierarchical,omitempty"` // HIERARCHICAL flag + Injective bool `json:"injective,omitempty"` // INJECTIVE flag + IsObjectID bool `json:"is_object_id,omitempty"` // IS_OBJECT_ID flag +} + +func (d *DictionaryAttributeDeclaration) Pos() token.Position { return d.Position } +func (d *DictionaryAttributeDeclaration) End() token.Position { return d.Position } + +// DictionaryDefinition represents the definition part of a dictionary (PRIMARY KEY, SOURCE, LIFETIME, LAYOUT). +type DictionaryDefinition struct { + Position token.Position `json:"-"` + PrimaryKey []Expression `json:"primary_key,omitempty"` + Source *DictionarySource `json:"source,omitempty"` + Lifetime *DictionaryLifetime `json:"lifetime,omitempty"` + Layout *DictionaryLayout `json:"layout,omitempty"` + Range *DictionaryRange `json:"range,omitempty"` + Settings []*SettingExpr `json:"settings,omitempty"` +} + +func (d *DictionaryDefinition) Pos() token.Position { return d.Position } +func (d *DictionaryDefinition) End() token.Position { return d.Position } + +// DictionarySource represents the SOURCE clause of a dictionary. +type DictionarySource struct { + Position token.Position `json:"-"` + Type string `json:"type"` // e.g., "CLICKHOUSE", "MYSQL", "FILE" + Args []*KeyValuePair `json:"args,omitempty"` +} + +func (d *DictionarySource) Pos() token.Position { return d.Position } +func (d *DictionarySource) End() token.Position { return d.Position } + +// KeyValuePair represents a key-value pair in dictionary source or other contexts. +type KeyValuePair struct { + Position token.Position `json:"-"` + Key string `json:"key"` + Value Expression `json:"value"` +} + +func (k *KeyValuePair) Pos() token.Position { return k.Position } +func (k *KeyValuePair) End() token.Position { return k.Position } + +// DictionaryLifetime represents the LIFETIME clause of a dictionary. +type DictionaryLifetime struct { + Position token.Position `json:"-"` + Min Expression `json:"min,omitempty"` + Max Expression `json:"max,omitempty"` +} + +func (d *DictionaryLifetime) Pos() token.Position { return d.Position } +func (d *DictionaryLifetime) End() token.Position { return d.Position } + +// DictionaryLayout represents the LAYOUT clause of a dictionary. +type DictionaryLayout struct { + Position token.Position `json:"-"` + Type string `json:"type"` // e.g., "FLAT", "HASHED", "COMPLEX_KEY_HASHED" + Args []*KeyValuePair `json:"args,omitempty"` +} + +func (d *DictionaryLayout) Pos() token.Position { return d.Position } +func (d *DictionaryLayout) End() token.Position { return d.Position } + +// DictionaryRange represents the RANGE clause of a dictionary. +type DictionaryRange struct { + Position token.Position `json:"-"` + Min Expression `json:"min,omitempty"` + Max Expression `json:"max,omitempty"` +} + +func (d *DictionaryRange) Pos() token.Position { return d.Position } +func (d *DictionaryRange) End() token.Position { return d.Position } + // DataType represents a data type. type DataType struct { Position token.Position `json:"-"` diff --git a/internal/explain/dictionary.go b/internal/explain/dictionary.go new file mode 100644 index 0000000000..5af397c2a6 --- /dev/null +++ b/internal/explain/dictionary.go @@ -0,0 +1,175 @@ +package explain + +import ( + "fmt" + "strings" + + "github.com/sqlc-dev/doubleclick/ast" +) + +// explainDictionaryAttributeDeclaration outputs a dictionary attribute declaration. +func explainDictionaryAttributeDeclaration(sb *strings.Builder, n *ast.DictionaryAttributeDeclaration, indent string, depth int) { + children := 0 + if n.Type != nil { + children++ + } + if n.Default != nil { + children++ + } + if n.Expression != nil { + children++ + } + if children > 0 { + fmt.Fprintf(sb, "%sDictionaryAttributeDeclaration %s (children %d)\n", indent, n.Name, children) + } else { + fmt.Fprintf(sb, "%sDictionaryAttributeDeclaration %s\n", indent, n.Name) + } + if n.Type != nil { + Node(sb, n.Type, depth+1) + } + if n.Default != nil { + Node(sb, n.Default, depth+1) + } + if n.Expression != nil { + Node(sb, n.Expression, depth+1) + } +} + +// explainDictionaryDefinition outputs a dictionary definition section. +func explainDictionaryDefinition(sb *strings.Builder, n *ast.DictionaryDefinition, indent string, depth int) { + children := 0 + if len(n.PrimaryKey) > 0 { + children++ + } + if n.Source != nil { + children++ + } + if n.Lifetime != nil { + children++ + } + if n.Layout != nil { + children++ + } + if n.Range != nil { + children++ + } + if len(n.Settings) > 0 { + children++ + } + if children > 0 { + fmt.Fprintf(sb, "%sDictionary definition (children %d)\n", indent, children) + } else { + fmt.Fprintf(sb, "%sDictionary definition\n", indent) + } + + // PRIMARY KEY + if len(n.PrimaryKey) > 0 { + fmt.Fprintf(sb, "%s ExpressionList (children %d)\n", indent, len(n.PrimaryKey)) + for _, pk := range n.PrimaryKey { + Node(sb, pk, depth+2) + } + } + + // SOURCE + if n.Source != nil { + explainDictionarySource(sb, n.Source, indent+" ", depth+1) + } + + // LIFETIME + if n.Lifetime != nil { + explainDictionaryLifetime(sb, n.Lifetime, indent+" ", depth+1) + } + + // RANGE (if present, comes before LAYOUT) + if n.Range != nil { + explainDictionaryRange(sb, n.Range, indent+" ", depth+1) + } + + // LAYOUT + if n.Layout != nil { + explainDictionaryLayout(sb, n.Layout, indent+" ", depth+1) + } + + // SETTINGS + if len(n.Settings) > 0 { + fmt.Fprintf(sb, "%s Set\n", indent) + } +} + +// explainDictionarySource outputs a dictionary SOURCE clause. +func explainDictionarySource(sb *strings.Builder, n *ast.DictionarySource, indent string, depth int) { + // FunctionWithKeyValueArguments has extra space before name + children := 0 + if len(n.Args) > 0 { + children = 1 + } + if children > 0 { + fmt.Fprintf(sb, "%sFunctionWithKeyValueArguments %s (children %d)\n", indent, strings.ToLower(n.Type), children) + fmt.Fprintf(sb, "%s ExpressionList (children %d)\n", indent, len(n.Args)) + for _, arg := range n.Args { + explainKeyValuePair(sb, arg, indent+" ", depth+2) + } + } else { + fmt.Fprintf(sb, "%sFunctionWithKeyValueArguments %s\n", indent, strings.ToLower(n.Type)) + } +} + +// explainKeyValuePair outputs a key-value pair (lowercase "pair"). +func explainKeyValuePair(sb *strings.Builder, n *ast.KeyValuePair, indent string, depth int) { + children := 0 + if n.Value != nil { + children = 1 + } + if children > 0 { + fmt.Fprintf(sb, "%spair (children %d)\n", indent, children) + Node(sb, n.Value, depth+1) + } else { + fmt.Fprintf(sb, "%spair\n", indent) + } +} + +// explainDictionaryLifetime outputs a dictionary LIFETIME clause. +func explainDictionaryLifetime(sb *strings.Builder, n *ast.DictionaryLifetime, indent string, depth int) { + // LIFETIME is output as "Dictionary lifetime" without children count typically + fmt.Fprintf(sb, "%sDictionary lifetime\n", indent) +} + +// explainDictionaryLayout outputs a dictionary LAYOUT clause. +func explainDictionaryLayout(sb *strings.Builder, n *ast.DictionaryLayout, indent string, depth int) { + children := 0 + if len(n.Args) > 0 { + children = 1 + } + if children > 0 { + fmt.Fprintf(sb, "%sDictionary layout (children %d)\n", indent, children) + fmt.Fprintf(sb, "%s ExpressionList (children %d)\n", indent, len(n.Args)) + for _, arg := range n.Args { + explainKeyValuePair(sb, arg, indent+" ", depth+2) + } + } else { + fmt.Fprintf(sb, "%sDictionary layout (children 1)\n", indent) + fmt.Fprintf(sb, "%s ExpressionList\n", indent) + } +} + +// explainDictionaryRange outputs a dictionary RANGE clause. +func explainDictionaryRange(sb *strings.Builder, n *ast.DictionaryRange, indent string, depth int) { + children := 0 + if n.Min != nil { + children++ + } + if n.Max != nil { + children++ + } + if children > 0 { + fmt.Fprintf(sb, "%sDictionary range (children %d)\n", indent, children) + if n.Min != nil { + Node(sb, n.Min, depth+1) + } + if n.Max != nil { + Node(sb, n.Max, depth+1) + } + } else { + fmt.Fprintf(sb, "%sDictionary range\n", indent) + } +} diff --git a/internal/explain/explain.go b/internal/explain/explain.go index c73943c68b..421f296bf6 100644 --- a/internal/explain/explain.go +++ b/internal/explain/explain.go @@ -152,6 +152,22 @@ func Node(sb *strings.Builder, node interface{}, depth int) { case *ast.Parameter: explainParameter(sb, n, indent) + // Dictionary types + case *ast.DictionaryAttributeDeclaration: + explainDictionaryAttributeDeclaration(sb, n, indent, depth) + case *ast.DictionaryDefinition: + explainDictionaryDefinition(sb, n, indent, depth) + case *ast.DictionarySource: + explainDictionarySource(sb, n, indent, depth) + case *ast.KeyValuePair: + explainKeyValuePair(sb, n, indent, depth) + case *ast.DictionaryLifetime: + explainDictionaryLifetime(sb, n, indent, depth) + case *ast.DictionaryLayout: + explainDictionaryLayout(sb, n, indent, depth) + case *ast.DictionaryRange: + explainDictionaryRange(sb, n, indent, depth) + default: // For unhandled types, just print the type name fmt.Fprintf(sb, "%s%T\n", indent, node) diff --git a/internal/explain/statements.go b/internal/explain/statements.go index d0a8652cda..073787fc80 100644 --- a/internal/explain/statements.go +++ b/internal/explain/statements.go @@ -89,8 +89,27 @@ func explainCreateQuery(sb *strings.Builder, n *ast.CreateQuery, indent string, return } if n.CreateDictionary { - fmt.Fprintf(sb, "%sCreateDictionaryQuery %s (children 1)\n", indent, n.Table) + // Dictionary: count children = identifier + attributes (if any) + definition (if any) + children := 1 // identifier + if len(n.DictionaryAttrs) > 0 { + children++ + } + if n.DictionaryDef != nil { + children++ + } + fmt.Fprintf(sb, "%sCreateQuery %s (children %d)\n", indent, n.Table, children) fmt.Fprintf(sb, "%s Identifier %s\n", indent, n.Table) + // Dictionary attributes + if len(n.DictionaryAttrs) > 0 { + fmt.Fprintf(sb, "%s ExpressionList (children %d)\n", indent, len(n.DictionaryAttrs)) + for _, attr := range n.DictionaryAttrs { + explainDictionaryAttributeDeclaration(sb, attr, indent+" ", depth+2) + } + } + // Dictionary definition + if n.DictionaryDef != nil { + explainDictionaryDefinition(sb, n.DictionaryDef, indent+" ", depth+1) + } return } diff --git a/parser/parser.go b/parser/parser.go index 663092a6ad..30192b7e49 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -1298,7 +1298,7 @@ func (p *Parser) parseCreate() *ast.CreateQuery { case "DICTIONARY": create.CreateDictionary = true p.nextToken() - p.parseCreateGeneric(create) + p.parseCreateDictionary(create) case "NAMED": // CREATE NAMED COLLECTION name AS key=value, ... p.nextToken() // skip NAMED @@ -1748,6 +1748,385 @@ func (p *Parser) parseCreateGeneric(create *ast.CreateQuery) { } } +func (p *Parser) parseCreateDictionary(create *ast.CreateQuery) { + // Handle IF NOT EXISTS + if p.currentIs(token.IF) { + p.nextToken() + if p.currentIs(token.NOT) { + p.nextToken() + if p.currentIs(token.EXISTS) { + create.IfNotExists = true + p.nextToken() + } + } + } + + // Parse dictionary name (possibly database.name) + name := p.parseIdentifierName() + if p.currentIs(token.DOT) { + create.Database = name + p.nextToken() + name = p.parseIdentifierName() + } + create.Table = name + + // Handle ON CLUSTER + if p.currentIs(token.ON) { + p.nextToken() + if p.currentIs(token.IDENT) && strings.ToUpper(p.current.Value) == "CLUSTER" { + p.nextToken() + create.OnCluster = p.parseIdentifierName() + } + } + + // Parse column definitions (attributes) if present + if p.currentIs(token.LPAREN) { + p.nextToken() // skip ( + create.DictionaryAttrs = p.parseDictionaryAttributes() + if p.currentIs(token.RPAREN) { + p.nextToken() // skip ) + } + } + + // Initialize dictionary definition + dictDef := &ast.DictionaryDefinition{ + Position: p.current.Pos, + } + + // Parse PRIMARY KEY, SOURCE, LIFETIME, LAYOUT, RANGE, SETTINGS + for !p.currentIs(token.EOF) && !p.currentIs(token.SEMICOLON) { + // Handle PRIMARY as a keyword token + if p.currentIs(token.PRIMARY) { + p.nextToken() // skip PRIMARY + if p.currentIs(token.KEY) { + p.nextToken() // skip KEY + dictDef.PrimaryKey = p.parseDictionaryPrimaryKey() + } + continue + } + if p.currentIs(token.IDENT) { + upper := strings.ToUpper(p.current.Value) + switch upper { + case "PRIMARY": + p.nextToken() // skip PRIMARY + if p.currentIs(token.KEY) { + p.nextToken() // skip KEY + dictDef.PrimaryKey = p.parseDictionaryPrimaryKey() + } + case "SOURCE": + p.nextToken() // skip SOURCE + dictDef.Source = p.parseDictionarySource() + case "LIFETIME": + p.nextToken() // skip LIFETIME + dictDef.Lifetime = p.parseDictionaryLifetime() + case "LAYOUT": + p.nextToken() // skip LAYOUT + dictDef.Layout = p.parseDictionaryLayout() + case "RANGE": + p.nextToken() // skip RANGE + dictDef.Range = p.parseDictionaryRange() + case "SETTINGS": + p.nextToken() // skip SETTINGS + // Skip settings for now + for !p.currentIs(token.EOF) && !p.currentIs(token.SEMICOLON) && !p.isDictionaryClauseKeyword() { + p.nextToken() + } + case "COMMENT": + p.nextToken() // skip COMMENT + if p.currentIs(token.STRING) { + create.Comment = p.current.Value + p.nextToken() + } + default: + p.nextToken() + } + } else { + p.nextToken() + } + } + + // Only set dictionary definition if it has any content + if len(dictDef.PrimaryKey) > 0 || dictDef.Source != nil || dictDef.Lifetime != nil || dictDef.Layout != nil || dictDef.Range != nil { + create.DictionaryDef = dictDef + } +} + +func (p *Parser) isDictionaryClauseKeyword() bool { + if !p.currentIs(token.IDENT) { + return false + } + upper := strings.ToUpper(p.current.Value) + switch upper { + case "PRIMARY", "SOURCE", "LIFETIME", "LAYOUT", "RANGE", "SETTINGS", "COMMENT": + return true + } + return false +} + +func (p *Parser) parseDictionaryAttributes() []*ast.DictionaryAttributeDeclaration { + var attrs []*ast.DictionaryAttributeDeclaration + + for !p.currentIs(token.EOF) && !p.currentIs(token.RPAREN) { + attr := p.parseDictionaryAttribute() + if attr != nil { + attrs = append(attrs, attr) + } + + // Handle comma between attributes + if p.currentIs(token.COMMA) { + p.nextToken() + } else { + break + } + } + + return attrs +} + +func (p *Parser) parseDictionaryAttribute() *ast.DictionaryAttributeDeclaration { + attr := &ast.DictionaryAttributeDeclaration{ + Position: p.current.Pos, + } + + // Parse attribute name + attr.Name = p.parseIdentifierName() + if attr.Name == "" { + return nil + } + + // Parse type + if !p.currentIs(token.COMMA) && !p.currentIs(token.RPAREN) { + attr.Type = p.parseDataType() + } + + // Parse optional clauses: DEFAULT, EXPRESSION, HIERARCHICAL, INJECTIVE, IS_OBJECT_ID + for !p.currentIs(token.EOF) && !p.currentIs(token.COMMA) && !p.currentIs(token.RPAREN) { + if p.currentIs(token.DEFAULT) { + p.nextToken() + attr.Default = p.parseExpression(LOWEST) + } else if p.currentIs(token.IDENT) { + upper := strings.ToUpper(p.current.Value) + switch upper { + case "EXPRESSION": + p.nextToken() + attr.Expression = p.parseExpression(LOWEST) + case "HIERARCHICAL": + attr.Hierarchical = true + p.nextToken() + case "INJECTIVE": + attr.Injective = true + p.nextToken() + case "IS_OBJECT_ID": + attr.IsObjectID = true + p.nextToken() + default: + p.nextToken() + } + } else { + p.nextToken() + } + } + + return attr +} + +func (p *Parser) parseDictionaryPrimaryKey() []ast.Expression { + var keys []ast.Expression + + // Can be single identifier or tuple (id1, id2) + if p.currentIs(token.LPAREN) { + p.nextToken() // skip ( + for !p.currentIs(token.EOF) && !p.currentIs(token.RPAREN) { + expr := p.parseExpression(LOWEST) + if expr != nil { + keys = append(keys, expr) + } + if p.currentIs(token.COMMA) { + p.nextToken() + } else { + break + } + } + if p.currentIs(token.RPAREN) { + p.nextToken() // skip ) + } + } else { + // Single identifier + expr := p.parseExpression(LOWEST) + if expr != nil { + keys = append(keys, expr) + } + } + + return keys +} + +func (p *Parser) parseDictionarySource() *ast.DictionarySource { + source := &ast.DictionarySource{ + Position: p.current.Pos, + } + + if !p.currentIs(token.LPAREN) { + return source + } + p.nextToken() // skip ( + + // Parse source type (e.g., CLICKHOUSE, MYSQL, FILE) + if p.currentIs(token.IDENT) { + source.Type = strings.ToUpper(p.current.Value) + p.nextToken() + } + + // Parse key-value arguments in parentheses + if p.currentIs(token.LPAREN) { + p.nextToken() // skip ( + source.Args = p.parseKeyValuePairs() + if p.currentIs(token.RPAREN) { + p.nextToken() // skip ) + } + } + + if p.currentIs(token.RPAREN) { + p.nextToken() // skip ) + } + + return source +} + +func (p *Parser) parseKeyValuePairs() []*ast.KeyValuePair { + var pairs []*ast.KeyValuePair + + for !p.currentIs(token.EOF) && !p.currentIs(token.RPAREN) { + pair := &ast.KeyValuePair{ + Position: p.current.Pos, + } + + // Parse key (the key is not included in EXPLAIN output, just the value) + if p.currentIs(token.IDENT) || p.current.Token.IsKeyword() { + pair.Key = p.current.Value + p.nextToken() + } + + // Parse value (can be various types - string, number, function call, identifier) + if !p.currentIs(token.RPAREN) && !p.currentIs(token.EOF) && !p.currentIs(token.IDENT) && !p.current.Token.IsKeyword() { + pair.Value = p.parseExpression(LOWEST) + } else if p.currentIs(token.IDENT) || p.current.Token.IsKeyword() { + // If next token is an identifier/keyword, treat it as start of next pair + // unless it's a function call (has LPAREN after) + if p.peekIs(token.LPAREN) { + pair.Value = p.parseExpression(LOWEST) + } + // Otherwise no value for this pair (key only) + } + + pairs = append(pairs, pair) + } + + return pairs +} + +func (p *Parser) parseDictionaryLifetime() *ast.DictionaryLifetime { + lifetime := &ast.DictionaryLifetime{ + Position: p.current.Pos, + } + + if !p.currentIs(token.LPAREN) { + return lifetime + } + p.nextToken() // skip ( + + // Parse MIN and MAX or just a single value + for !p.currentIs(token.EOF) && !p.currentIs(token.RPAREN) { + if p.currentIs(token.IDENT) { + upper := strings.ToUpper(p.current.Value) + if upper == "MIN" { + p.nextToken() + lifetime.Min = p.parseExpression(LOWEST) + } else if upper == "MAX" { + p.nextToken() + lifetime.Max = p.parseExpression(LOWEST) + } else { + p.nextToken() + } + } else { + p.nextToken() + } + } + + if p.currentIs(token.RPAREN) { + p.nextToken() // skip ) + } + + return lifetime +} + +func (p *Parser) parseDictionaryLayout() *ast.DictionaryLayout { + layout := &ast.DictionaryLayout{ + Position: p.current.Pos, + } + + if !p.currentIs(token.LPAREN) { + return layout + } + p.nextToken() // skip ( + + // Parse layout type (e.g., FLAT, HASHED, COMPLEX_KEY_HASHED) + if p.currentIs(token.IDENT) { + layout.Type = strings.ToUpper(p.current.Value) + p.nextToken() + } + + // Parse optional arguments in parentheses + if p.currentIs(token.LPAREN) { + p.nextToken() // skip ( + layout.Args = p.parseKeyValuePairs() + if p.currentIs(token.RPAREN) { + p.nextToken() // skip ) + } + } + + if p.currentIs(token.RPAREN) { + p.nextToken() // skip ) + } + + return layout +} + +func (p *Parser) parseDictionaryRange() *ast.DictionaryRange { + dictRange := &ast.DictionaryRange{ + Position: p.current.Pos, + } + + if !p.currentIs(token.LPAREN) { + return dictRange + } + p.nextToken() // skip ( + + // Parse MIN and MAX + for !p.currentIs(token.EOF) && !p.currentIs(token.RPAREN) { + if p.currentIs(token.IDENT) { + upper := strings.ToUpper(p.current.Value) + if upper == "MIN" { + p.nextToken() + dictRange.Min = p.parseExpression(LOWEST) + } else if upper == "MAX" { + p.nextToken() + dictRange.Max = p.parseExpression(LOWEST) + } else { + p.nextToken() + } + } else { + p.nextToken() + } + } + + if p.currentIs(token.RPAREN) { + p.nextToken() // skip ) + } + + return dictRange +} + func (p *Parser) parseIndexDefinition() *ast.IndexDefinition { idx := &ast.IndexDefinition{ Position: p.current.Pos, diff --git a/parser/testdata/00158_cache_dictionary_has/metadata.json b/parser/testdata/00158_cache_dictionary_has/metadata.json index ef58f80315..0967ef424b 100644 --- a/parser/testdata/00158_cache_dictionary_has/metadata.json +++ b/parser/testdata/00158_cache_dictionary_has/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt2": 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 0de7c95587..b563327205 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,6 +1,5 @@ { "explain_todo": { - "stmt2": true, "stmt7": true } } diff --git a/parser/testdata/01056_create_table_as/metadata.json b/parser/testdata/01056_create_table_as/metadata.json index 9be7220609..0967ef424b 100644 --- a/parser/testdata/01056_create_table_as/metadata.json +++ b/parser/testdata/01056_create_table_as/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt22": true - } -} +{} diff --git a/parser/testdata/01083_expressions_in_engine_arguments/metadata.json b/parser/testdata/01083_expressions_in_engine_arguments/metadata.json index a4aef87bea..85cc99e9fa 100644 --- a/parser/testdata/01083_expressions_in_engine_arguments/metadata.json +++ b/parser/testdata/01083_expressions_in_engine_arguments/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt24": true, "stmt34": true } } diff --git a/parser/testdata/01115_join_with_dictionary/metadata.json b/parser/testdata/01115_join_with_dictionary/metadata.json index 661bded8e9..7ad5569408 100644 --- a/parser/testdata/01115_join_with_dictionary/metadata.json +++ b/parser/testdata/01115_join_with_dictionary/metadata.json @@ -1,7 +1,5 @@ { "explain_todo": { - "stmt7": true, - "stmt8": true, "stmt9": true } } diff --git a/parser/testdata/01155_rename_move_materialized_view/metadata.json b/parser/testdata/01155_rename_move_materialized_view/metadata.json index 3b9b9e88df..9e0cc4e8c8 100644 --- a/parser/testdata/01155_rename_move_materialized_view/metadata.json +++ b/parser/testdata/01155_rename_move_materialized_view/metadata.json @@ -3,7 +3,6 @@ "stmt11": true, "stmt13": true, "stmt16": true, - "stmt17": true, "stmt20": true, "stmt34": true, "stmt41": true, diff --git a/parser/testdata/01225_drop_dictionary_as_table/metadata.json b/parser/testdata/01225_drop_dictionary_as_table/metadata.json index bc141058a4..1295a45747 100644 --- a/parser/testdata/01225_drop_dictionary_as_table/metadata.json +++ b/parser/testdata/01225_drop_dictionary_as_table/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt2": true, "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 9a8cc69c0b..b65b07d7a6 100644 --- a/parser/testdata/01254_dict_create_without_db/metadata.json +++ b/parser/testdata/01254_dict_create_without_db/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt2": true, "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 323c7c4c53..dbdbb76d4f 100644 --- a/parser/testdata/01254_dict_load_after_detach_attach/metadata.json +++ b/parser/testdata/01254_dict_load_after_detach_attach/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt2": true, "stmt6": true } } diff --git a/parser/testdata/01391_join_on_dict_crash/metadata.json b/parser/testdata/01391_join_on_dict_crash/metadata.json index 3a06a4a1ac..0967ef424b 100644 --- a/parser/testdata/01391_join_on_dict_crash/metadata.json +++ b/parser/testdata/01391_join_on_dict_crash/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt5": true - } -} +{} diff --git a/parser/testdata/01721_dictionary_decimal_p_s/metadata.json b/parser/testdata/01721_dictionary_decimal_p_s/metadata.json index 3a06a4a1ac..0967ef424b 100644 --- a/parser/testdata/01721_dictionary_decimal_p_s/metadata.json +++ b/parser/testdata/01721_dictionary_decimal_p_s/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt5": true - } -} +{} diff --git a/parser/testdata/01760_ddl_dictionary_use_current_database_name/metadata.json b/parser/testdata/01760_ddl_dictionary_use_current_database_name/metadata.json index dbdbb76d4f..0967ef424b 100644 --- a/parser/testdata/01760_ddl_dictionary_use_current_database_name/metadata.json +++ b/parser/testdata/01760_ddl_dictionary_use_current_database_name/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt6": true - } -} +{} diff --git a/parser/testdata/01764_table_function_dictionary/metadata.json b/parser/testdata/01764_table_function_dictionary/metadata.json index dbdbb76d4f..0967ef424b 100644 --- a/parser/testdata/01764_table_function_dictionary/metadata.json +++ b/parser/testdata/01764_table_function_dictionary/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt6": true - } -} +{} diff --git a/parser/testdata/01780_clickhouse_dictionary_source_loop/metadata.json b/parser/testdata/01780_clickhouse_dictionary_source_loop/metadata.json index 3335e8f858..e04ac09b75 100644 --- a/parser/testdata/01780_clickhouse_dictionary_source_loop/metadata.json +++ b/parser/testdata/01780_clickhouse_dictionary_source_loop/metadata.json @@ -3,7 +3,6 @@ "stmt10": true, "stmt11": true, "stmt12": true, - "stmt4": true, "stmt7": true } } diff --git a/parser/testdata/01780_dict_get_or_null/metadata.json b/parser/testdata/01780_dict_get_or_null/metadata.json index 3a31932b3d..28fe8b10d5 100644 --- a/parser/testdata/01780_dict_get_or_null/metadata.json +++ b/parser/testdata/01780_dict_get_or_null/metadata.json @@ -1,7 +1,6 @@ { "explain_todo": { "stmt18": true, - "stmt29": true, - "stmt7": true + "stmt29": true } } diff --git a/parser/testdata/01804_dictionary_decimal256_type/metadata.json b/parser/testdata/01804_dictionary_decimal256_type/metadata.json index ff4bb91343..0967ef424b 100644 --- a/parser/testdata/01804_dictionary_decimal256_type/metadata.json +++ b/parser/testdata/01804_dictionary_decimal256_type/metadata.json @@ -1,10 +1 @@ -{ - "explain_todo": { - "stmt10": true, - "stmt15": true, - "stmt20": true, - "stmt29": true, - "stmt38": true, - "stmt5": true - } -} +{} diff --git a/parser/testdata/01821_dictionary_primary_key_wrong_order/metadata.json b/parser/testdata/01821_dictionary_primary_key_wrong_order/metadata.json index 3a06a4a1ac..0967ef424b 100644 --- a/parser/testdata/01821_dictionary_primary_key_wrong_order/metadata.json +++ b/parser/testdata/01821_dictionary_primary_key_wrong_order/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt5": true - } -} +{} diff --git a/parser/testdata/01838_system_dictionaries_virtual_key_column/metadata.json b/parser/testdata/01838_system_dictionaries_virtual_key_column/metadata.json index 323c7c4c53..dbdbb76d4f 100644 --- a/parser/testdata/01838_system_dictionaries_virtual_key_column/metadata.json +++ b/parser/testdata/01838_system_dictionaries_virtual_key_column/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt2": true, "stmt6": true } } diff --git a/parser/testdata/01852_dictionary_query_count_long/metadata.json b/parser/testdata/01852_dictionary_query_count_long/metadata.json index fa541ad982..c779e34356 100644 --- a/parser/testdata/01852_dictionary_query_count_long/metadata.json +++ b/parser/testdata/01852_dictionary_query_count_long/metadata.json @@ -1,15 +1,8 @@ { "explain_todo": { - "stmt118": true, - "stmt15": true, - "stmt25": true, - "stmt33": true, - "stmt41": true, "stmt54": true, - "stmt6": true, "stmt62": true, "stmt70": true, - "stmt83": true, - "stmt96": true + "stmt83": true } } diff --git a/parser/testdata/01902_dictionary_array_type/metadata.json b/parser/testdata/01902_dictionary_array_type/metadata.json index b02bfc7155..28a683eda9 100644 --- a/parser/testdata/01902_dictionary_array_type/metadata.json +++ b/parser/testdata/01902_dictionary_array_type/metadata.json @@ -1,11 +1,5 @@ { "explain_todo": { - "stmt12": true, - "stmt19": true, - "stmt26": true, - "stmt36": true, - "stmt48": true, - "stmt5": true, "stmt58": true } } diff --git a/parser/testdata/01904_dictionary_default_nullable_type/metadata.json b/parser/testdata/01904_dictionary_default_nullable_type/metadata.json index ce79fbc50a..ca4ce64f93 100644 --- a/parser/testdata/01904_dictionary_default_nullable_type/metadata.json +++ b/parser/testdata/01904_dictionary_default_nullable_type/metadata.json @@ -1,11 +1,5 @@ { "explain_todo": { - "stmt18": true, - "stmt28": true, - "stmt38": true, - "stmt48": true, - "stmt60": true, - "stmt78": true, - "stmt8": true + "stmt78": true } } diff --git a/parser/testdata/01910_view_dictionary/metadata.json b/parser/testdata/01910_view_dictionary/metadata.json index ab9202e88e..0967ef424b 100644 --- a/parser/testdata/01910_view_dictionary/metadata.json +++ b/parser/testdata/01910_view_dictionary/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt11": true - } -} +{} diff --git a/parser/testdata/01941_dict_get_has_complex_single_key/metadata.json b/parser/testdata/01941_dict_get_has_complex_single_key/metadata.json index 3a06a4a1ac..0967ef424b 100644 --- a/parser/testdata/01941_dict_get_has_complex_single_key/metadata.json +++ b/parser/testdata/01941_dict_get_has_complex_single_key/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt5": true - } -} +{} diff --git a/parser/testdata/02011_dictionary_empty_attribute_list/metadata.json b/parser/testdata/02011_dictionary_empty_attribute_list/metadata.json index 3a06a4a1ac..0967ef424b 100644 --- a/parser/testdata/02011_dictionary_empty_attribute_list/metadata.json +++ b/parser/testdata/02011_dictionary_empty_attribute_list/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt5": true - } -} +{} diff --git a/parser/testdata/02014_dict_get_nullable_key/metadata.json b/parser/testdata/02014_dict_get_nullable_key/metadata.json index ab70e34390..0967ef424b 100644 --- a/parser/testdata/02014_dict_get_nullable_key/metadata.json +++ b/parser/testdata/02014_dict_get_nullable_key/metadata.json @@ -1,6 +1 @@ -{ - "explain_todo": { - "stmt16": true, - "stmt5": true - } -} +{} diff --git a/parser/testdata/02015_column_default_dict_get_identifier/metadata.json b/parser/testdata/02015_column_default_dict_get_identifier/metadata.json index 1295a45747..0967ef424b 100644 --- a/parser/testdata/02015_column_default_dict_get_identifier/metadata.json +++ b/parser/testdata/02015_column_default_dict_get_identifier/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt3": true - } -} +{} diff --git a/parser/testdata/02025_dictionary_array_nested_map/metadata.json b/parser/testdata/02025_dictionary_array_nested_map/metadata.json index 1295a45747..0967ef424b 100644 --- a/parser/testdata/02025_dictionary_array_nested_map/metadata.json +++ b/parser/testdata/02025_dictionary_array_nested_map/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt3": true - } -} +{} diff --git a/parser/testdata/02097_default_dict_get_add_database/metadata.json b/parser/testdata/02097_default_dict_get_add_database/metadata.json index 3a06a4a1ac..0967ef424b 100644 --- a/parser/testdata/02097_default_dict_get_add_database/metadata.json +++ b/parser/testdata/02097_default_dict_get_add_database/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt5": true - } -} +{} diff --git a/parser/testdata/02097_polygon_dictionary_store_key/metadata.json b/parser/testdata/02097_polygon_dictionary_store_key/metadata.json index d02612666a..0967ef424b 100644 --- a/parser/testdata/02097_polygon_dictionary_store_key/metadata.json +++ b/parser/testdata/02097_polygon_dictionary_store_key/metadata.json @@ -1,6 +1 @@ -{ - "explain_todo": { - "stmt5": true, - "stmt8": true - } -} +{} diff --git a/parser/testdata/02125_dict_get_type_nullable_fix/metadata.json b/parser/testdata/02125_dict_get_type_nullable_fix/metadata.json index 3a06a4a1ac..0967ef424b 100644 --- a/parser/testdata/02125_dict_get_type_nullable_fix/metadata.json +++ b/parser/testdata/02125_dict_get_type_nullable_fix/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt5": true - } -} +{} diff --git a/parser/testdata/02152_dictionary_date32_type/metadata.json b/parser/testdata/02152_dictionary_date32_type/metadata.json index 3a06a4a1ac..0967ef424b 100644 --- a/parser/testdata/02152_dictionary_date32_type/metadata.json +++ b/parser/testdata/02152_dictionary_date32_type/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt5": true - } -} +{} diff --git a/parser/testdata/02155_dictionary_comment/metadata.json b/parser/testdata/02155_dictionary_comment/metadata.json index e090894ba7..22424db27e 100644 --- a/parser/testdata/02155_dictionary_comment/metadata.json +++ b/parser/testdata/02155_dictionary_comment/metadata.json @@ -2,7 +2,6 @@ "explain_todo": { "stmt13": true, "stmt19": true, - "stmt5": true, "stmt7": true } } diff --git a/parser/testdata/02176_dict_get_has_implicit_key_cast/metadata.json b/parser/testdata/02176_dict_get_has_implicit_key_cast/metadata.json index 5c560515d1..aa28559472 100644 --- a/parser/testdata/02176_dict_get_has_implicit_key_cast/metadata.json +++ b/parser/testdata/02176_dict_get_has_implicit_key_cast/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt18": true, - "stmt5": true + "stmt18": true } } diff --git a/parser/testdata/02181_dictionary_attach_detach/metadata.json b/parser/testdata/02181_dictionary_attach_detach/metadata.json index c2eaf34135..ca46fc2521 100644 --- a/parser/testdata/02181_dictionary_attach_detach/metadata.json +++ b/parser/testdata/02181_dictionary_attach_detach/metadata.json @@ -3,7 +3,6 @@ "stmt10": true, "stmt12": true, "stmt13": true, - "stmt5": true, "stmt7": true, "stmt9": true } diff --git a/parser/testdata/02183_dictionary_date_types/metadata.json b/parser/testdata/02183_dictionary_date_types/metadata.json index 37f9eb8d57..8298ab280a 100644 --- a/parser/testdata/02183_dictionary_date_types/metadata.json +++ b/parser/testdata/02183_dictionary_date_types/metadata.json @@ -1,12 +1,5 @@ { "explain_todo": { - "stmt11": true, - "stmt16": true, - "stmt21": true, - "stmt27": true, - "stmt37": true, - "stmt46": true, - "stmt55": true, - "stmt6": true + "stmt55": true } } diff --git a/parser/testdata/02183_dictionary_no_attributes/metadata.json b/parser/testdata/02183_dictionary_no_attributes/metadata.json index bed02be28d..be6c39b1cf 100644 --- a/parser/testdata/02183_dictionary_no_attributes/metadata.json +++ b/parser/testdata/02183_dictionary_no_attributes/metadata.json @@ -1,12 +1,5 @@ { "explain_todo": { - "stmt15": true, - "stmt23": true, - "stmt31": true, - "stmt39": true, - "stmt51": true, - "stmt6": true, - "stmt62": true, "stmt73": true } } diff --git a/parser/testdata/02188_parser_dictionary_primary_key/metadata.json b/parser/testdata/02188_parser_dictionary_primary_key/metadata.json index 4125fc8808..d4d1d99f95 100644 --- a/parser/testdata/02188_parser_dictionary_primary_key/metadata.json +++ b/parser/testdata/02188_parser_dictionary_primary_key/metadata.json @@ -1,8 +1,5 @@ { "explain_todo": { - "stmt14": true, - "stmt18": true, - "stmt5": true, - "stmt9": true + "stmt14": true } } diff --git a/parser/testdata/02231_hierarchical_dictionaries_constant/metadata.json b/parser/testdata/02231_hierarchical_dictionaries_constant/metadata.json index 3a06a4a1ac..0967ef424b 100644 --- a/parser/testdata/02231_hierarchical_dictionaries_constant/metadata.json +++ b/parser/testdata/02231_hierarchical_dictionaries_constant/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt5": true - } -} +{} diff --git a/parser/testdata/02291_dictionary_scalar_subquery_reload/metadata.json b/parser/testdata/02291_dictionary_scalar_subquery_reload/metadata.json index 91d9a8bb04..3a352d68aa 100644 --- a/parser/testdata/02291_dictionary_scalar_subquery_reload/metadata.json +++ b/parser/testdata/02291_dictionary_scalar_subquery_reload/metadata.json @@ -1,7 +1,6 @@ { "explain_todo": { "stmt10": true, - "stmt4": true, - "stmt7": true + "stmt4": true } } diff --git a/parser/testdata/02294_dictionaries_hierarchical_index/metadata.json b/parser/testdata/02294_dictionaries_hierarchical_index/metadata.json index e882feda33..0967ef424b 100644 --- a/parser/testdata/02294_dictionaries_hierarchical_index/metadata.json +++ b/parser/testdata/02294_dictionaries_hierarchical_index/metadata.json @@ -1,8 +1 @@ -{ - "explain_todo": { - "stmt12": true, - "stmt17": true, - "stmt5": true, - "stmt7": true - } -} +{} diff --git a/parser/testdata/02319_dict_get_check_arguments_size/metadata.json b/parser/testdata/02319_dict_get_check_arguments_size/metadata.json index f23dfb8678..62b81668c3 100644 --- a/parser/testdata/02319_dict_get_check_arguments_size/metadata.json +++ b/parser/testdata/02319_dict_get_check_arguments_size/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt13": true, - "stmt5": true + "stmt13": true } } diff --git a/parser/testdata/02364_dictionary_datetime_64_attribute_crash/metadata.json b/parser/testdata/02364_dictionary_datetime_64_attribute_crash/metadata.json index 1295a45747..0967ef424b 100644 --- a/parser/testdata/02364_dictionary_datetime_64_attribute_crash/metadata.json +++ b/parser/testdata/02364_dictionary_datetime_64_attribute_crash/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt3": true - } -} +{} diff --git a/parser/testdata/02366_direct_dictionary_dict_has/metadata.json b/parser/testdata/02366_direct_dictionary_dict_has/metadata.json index ca584b3e28..0967ef424b 100644 --- a/parser/testdata/02366_direct_dictionary_dict_has/metadata.json +++ b/parser/testdata/02366_direct_dictionary_dict_has/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt17": true - } -} +{} diff --git a/parser/testdata/02384_analyzer_dict_get_join_get/metadata.json b/parser/testdata/02384_analyzer_dict_get_join_get/metadata.json index dbdbb76d4f..0967ef424b 100644 --- a/parser/testdata/02384_analyzer_dict_get_join_get/metadata.json +++ b/parser/testdata/02384_analyzer_dict_get_join_get/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt6": 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 b0723ac131..0438c9b85f 100644 --- a/parser/testdata/02449_check_dependencies_and_table_shutdown/metadata.json +++ b/parser/testdata/02449_check_dependencies_and_table_shutdown/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt15": true, - "stmt6": true + "stmt15": true } } diff --git a/parser/testdata/02504_regexp_dictionary_table_source/metadata.json b/parser/testdata/02504_regexp_dictionary_table_source/metadata.json index 4817800d06..faa09997d3 100644 --- a/parser/testdata/02504_regexp_dictionary_table_source/metadata.json +++ b/parser/testdata/02504_regexp_dictionary_table_source/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt10": true, "stmt22": true, "stmt25": true, "stmt30": true, diff --git a/parser/testdata/02716_create_direct_dict_with_lifetime_throws/metadata.json b/parser/testdata/02716_create_direct_dict_with_lifetime_throws/metadata.json index ef58f80315..0967ef424b 100644 --- a/parser/testdata/02716_create_direct_dict_with_lifetime_throws/metadata.json +++ b/parser/testdata/02716_create_direct_dict_with_lifetime_throws/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt2": 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 04a04670f5..cc8d69ec3f 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,8 +1,6 @@ { "explain_todo": { "stmt10": true, - "stmt5": true, - "stmt6": true, - "stmt9": 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 1a11395f83..3ce0654146 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,14 +1,10 @@ { "explain_todo": { - "stmt12": true, "stmt13": true, - "stmt16": true, "stmt17": true, - "stmt20": true, "stmt21": true, "stmt24": true, "stmt25": true, - "stmt8": true, "stmt9": true } } diff --git a/parser/testdata/02815_join_algorithm_setting/metadata.json b/parser/testdata/02815_join_algorithm_setting/metadata.json index 79c9862e6d..9853a9faa8 100644 --- a/parser/testdata/02815_join_algorithm_setting/metadata.json +++ b/parser/testdata/02815_join_algorithm_setting/metadata.json @@ -4,7 +4,6 @@ "stmt14": true, "stmt17": true, "stmt18": true, - "stmt24": true, "stmt26": true, "stmt28": true, "stmt30": true, diff --git a/parser/testdata/02842_truncate_database/metadata.json b/parser/testdata/02842_truncate_database/metadata.json index 4186875ed3..ea9a0ddfed 100644 --- a/parser/testdata/02842_truncate_database/metadata.json +++ b/parser/testdata/02842_truncate_database/metadata.json @@ -5,7 +5,6 @@ "stmt18": true, "stmt19": true, "stmt20": true, - "stmt21": true, "stmt32": true, "stmt33": true, "stmt43": true diff --git a/parser/testdata/02843_context_has_expired/metadata.json b/parser/testdata/02843_context_has_expired/metadata.json index 3a06a4a1ac..0967ef424b 100644 --- a/parser/testdata/02843_context_has_expired/metadata.json +++ b/parser/testdata/02843_context_has_expired/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt5": true - } -} +{} diff --git a/parser/testdata/02918_wrong_dictionary_source/metadata.json b/parser/testdata/02918_wrong_dictionary_source/metadata.json index b65b07d7a6..0967ef424b 100644 --- a/parser/testdata/02918_wrong_dictionary_source/metadata.json +++ b/parser/testdata/02918_wrong_dictionary_source/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt4": true - } -} +{} diff --git a/parser/testdata/02950_dictionary_short_circuit/metadata.json b/parser/testdata/02950_dictionary_short_circuit/metadata.json index 82ce5e6671..7bf4b04abe 100644 --- a/parser/testdata/02950_dictionary_short_circuit/metadata.json +++ b/parser/testdata/02950_dictionary_short_circuit/metadata.json @@ -1,13 +1,5 @@ { "explain_todo": { - "stmt12": true, - "stmt20": true, - "stmt33": true, - "stmt39": true, - "stmt46": true, - "stmt5": true, - "stmt57": true, - "stmt66": true, - "stmt84": true + "stmt33": true } } diff --git a/parser/testdata/02973_dictionary_table_exception_fix/metadata.json b/parser/testdata/02973_dictionary_table_exception_fix/metadata.json index 6da6ddac9a..0967ef424b 100644 --- a/parser/testdata/02973_dictionary_table_exception_fix/metadata.json +++ b/parser/testdata/02973_dictionary_table_exception_fix/metadata.json @@ -1,7 +1 @@ -{ - "explain_todo": { - "stmt2": true, - "stmt4": true, - "stmt5": true - } -} +{} diff --git a/parser/testdata/03148_query_log_used_dictionaries/metadata.json b/parser/testdata/03148_query_log_used_dictionaries/metadata.json index cc4426336e..2a06213fa6 100644 --- a/parser/testdata/03148_query_log_used_dictionaries/metadata.json +++ b/parser/testdata/03148_query_log_used_dictionaries/metadata.json @@ -2,7 +2,6 @@ "explain_todo": { "stmt11": true, "stmt14": true, - "stmt2": true, "stmt5": true, "stmt8": true } diff --git a/parser/testdata/03171_direct_dict_short_circuit_bug/metadata.json b/parser/testdata/03171_direct_dict_short_circuit_bug/metadata.json index 342b3ff5b4..0967ef424b 100644 --- a/parser/testdata/03171_direct_dict_short_circuit_bug/metadata.json +++ b/parser/testdata/03171_direct_dict_short_circuit_bug/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt8": true - } -} +{} diff --git a/parser/testdata/03171_hashed_dictionary_short_circuit_bug_fix/metadata.json b/parser/testdata/03171_hashed_dictionary_short_circuit_bug_fix/metadata.json index 6bf8d5b80a..0967ef424b 100644 --- a/parser/testdata/03171_hashed_dictionary_short_circuit_bug_fix/metadata.json +++ b/parser/testdata/03171_hashed_dictionary_short_circuit_bug_fix/metadata.json @@ -1,6 +1 @@ -{ - "explain_todo": { - "stmt5": true, - "stmt7": true - } -} +{} diff --git a/parser/testdata/03230_show_create_query_identifier_quoting_style/metadata.json b/parser/testdata/03230_show_create_query_identifier_quoting_style/metadata.json index 479f2d404b..57c839677b 100644 --- a/parser/testdata/03230_show_create_query_identifier_quoting_style/metadata.json +++ b/parser/testdata/03230_show_create_query_identifier_quoting_style/metadata.json @@ -2,7 +2,6 @@ "explain_todo": { "stmt10": true, "stmt12": true, - "stmt16": true, "stmt19": true, "stmt21": true, "stmt22": true, diff --git a/parser/testdata/03243_create_or_replace_view_dependency_check/metadata.json b/parser/testdata/03243_create_or_replace_view_dependency_check/metadata.json index 3c17446e87..d02612666a 100644 --- a/parser/testdata/03243_create_or_replace_view_dependency_check/metadata.json +++ b/parser/testdata/03243_create_or_replace_view_dependency_check/metadata.json @@ -1,7 +1,6 @@ { "explain_todo": { "stmt5": true, - "stmt6": true, "stmt8": true } } diff --git a/parser/testdata/03263_forbid_materialize_sort_key/metadata.json b/parser/testdata/03263_forbid_materialize_sort_key/metadata.json index 4544a1da5c..615e471e8a 100644 --- a/parser/testdata/03263_forbid_materialize_sort_key/metadata.json +++ b/parser/testdata/03263_forbid_materialize_sort_key/metadata.json @@ -4,7 +4,6 @@ "stmt15": true, "stmt17": true, "stmt3": true, - "stmt5": true, - "stmt8": true + "stmt5": true } } diff --git a/parser/testdata/03542_TTL_dict/metadata.json b/parser/testdata/03542_TTL_dict/metadata.json index dbdbb76d4f..0967ef424b 100644 --- a/parser/testdata/03542_TTL_dict/metadata.json +++ b/parser/testdata/03542_TTL_dict/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt6": true - } -} +{} diff --git a/parser/testdata/03592_dictionary_columns_trailing_comma/metadata.json b/parser/testdata/03592_dictionary_columns_trailing_comma/metadata.json index e9d6e46171..0967ef424b 100644 --- a/parser/testdata/03592_dictionary_columns_trailing_comma/metadata.json +++ b/parser/testdata/03592_dictionary_columns_trailing_comma/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt1": true - } -} +{} diff --git a/parser/testdata/03671_dict_in_subquery_in_index_analysis_context_expired/metadata.json b/parser/testdata/03671_dict_in_subquery_in_index_analysis_context_expired/metadata.json index 342b3ff5b4..0967ef424b 100644 --- a/parser/testdata/03671_dict_in_subquery_in_index_analysis_context_expired/metadata.json +++ b/parser/testdata/03671_dict_in_subquery_in_index_analysis_context_expired/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt8": true - } -} +{} diff --git a/parser/testdata/03701_optimize_inverse_dictionary_lookup_basic/metadata.json b/parser/testdata/03701_optimize_inverse_dictionary_lookup_basic/metadata.json index 6da5f6faef..e7c55a8034 100644 --- a/parser/testdata/03701_optimize_inverse_dictionary_lookup_basic/metadata.json +++ b/parser/testdata/03701_optimize_inverse_dictionary_lookup_basic/metadata.json @@ -1,7 +1,6 @@ { "explain_todo": { "stmt118": true, - "stmt120": true, - "stmt9": true + "stmt120": true } } diff --git a/parser/testdata/03702_function_dict_get_keys_basic/metadata.json b/parser/testdata/03702_function_dict_get_keys_basic/metadata.json index bebd300af1..3caae9f728 100644 --- a/parser/testdata/03702_function_dict_get_keys_basic/metadata.json +++ b/parser/testdata/03702_function_dict_get_keys_basic/metadata.json @@ -1,12 +1,6 @@ { "explain_todo": { - "stmt120": true, - "stmt20": true, "stmt28": true, - "stmt36": true, - "stmt44": true, - "stmt52": true, - "stmt6": true, - "stmt95": true + "stmt44": true } } diff --git a/parser/testdata/03702_optimize_inverse_dictionary_lookup_composite_and_layouts/metadata.json b/parser/testdata/03702_optimize_inverse_dictionary_lookup_composite_and_layouts/metadata.json index d4c336bac8..bd3a8a9f25 100644 --- a/parser/testdata/03702_optimize_inverse_dictionary_lookup_composite_and_layouts/metadata.json +++ b/parser/testdata/03702_optimize_inverse_dictionary_lookup_composite_and_layouts/metadata.json @@ -1 +1,7 @@ -{"explain_todo":{"stmt18":true,"stmt19":true,"stmt20":true,"stmt21":true,"stmt22":true,"stmt23":true,"stmt24":true}} +{ + "explain_todo": { + "stmt18": true, + "stmt19": true, + "stmt20": true + } +} diff --git a/parser/testdata/03703_function_dict_get_keys_large/metadata.json b/parser/testdata/03703_function_dict_get_keys_large/metadata.json index 3a06a4a1ac..0967ef424b 100644 --- a/parser/testdata/03703_function_dict_get_keys_large/metadata.json +++ b/parser/testdata/03703_function_dict_get_keys_large/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt5": true - } -} +{} diff --git a/parser/testdata/03703_optimize_inverse_dictionary_lookup_dictget_family/metadata.json b/parser/testdata/03703_optimize_inverse_dictionary_lookup_dictget_family/metadata.json index 299d9b76de..0967ef424b 100644 --- a/parser/testdata/03703_optimize_inverse_dictionary_lookup_dictget_family/metadata.json +++ b/parser/testdata/03703_optimize_inverse_dictionary_lookup_dictget_family/metadata.json @@ -1 +1 @@ -{"explain_todo":{"stmt9":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 502cf8a66c..023227a1d1 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,9 +1,7 @@ { "explain_todo": { "stmt10": true, - "stmt21": true, "stmt25": true, - "stmt26": true, - "stmt6": true + "stmt26": true } } diff --git a/parser/testdata/03705_function_dict_get_keys_multiple_dict_and_no_caching/metadata.json b/parser/testdata/03705_function_dict_get_keys_multiple_dict_and_no_caching/metadata.json index d4c086941a..ab9202e88e 100644 --- a/parser/testdata/03705_function_dict_get_keys_multiple_dict_and_no_caching/metadata.json +++ b/parser/testdata/03705_function_dict_get_keys_multiple_dict_and_no_caching/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt10": true, "stmt11": true } } diff --git a/parser/testdata/03713_optimize_inverse_dictionary_lookup_setting_rewrite_in_to_join/metadata.json b/parser/testdata/03713_optimize_inverse_dictionary_lookup_setting_rewrite_in_to_join/metadata.json index 92ffdfe8b5..0967ef424b 100644 --- a/parser/testdata/03713_optimize_inverse_dictionary_lookup_setting_rewrite_in_to_join/metadata.json +++ b/parser/testdata/03713_optimize_inverse_dictionary_lookup_setting_rewrite_in_to_join/metadata.json @@ -1 +1 @@ -{"explain_todo":{"stmt10":true}} +{} diff --git a/parser/testdata/03740_alter_modify_query_dict_name_in_cse/metadata.json b/parser/testdata/03740_alter_modify_query_dict_name_in_cse/metadata.json index 661bded8e9..92e84e943a 100644 --- a/parser/testdata/03740_alter_modify_query_dict_name_in_cse/metadata.json +++ b/parser/testdata/03740_alter_modify_query_dict_name_in_cse/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt7": true, "stmt8": true, "stmt9": true } diff --git a/parser/testdata/03755_circular_dictionary/metadata.json b/parser/testdata/03755_circular_dictionary/metadata.json index 42ba07e8f5..754ca20608 100644 --- a/parser/testdata/03755_circular_dictionary/metadata.json +++ b/parser/testdata/03755_circular_dictionary/metadata.json @@ -1,15 +1,5 @@ { "explain_todo": { - "stmt11": true, - "stmt12": true, - "stmt13": true, - "stmt14": true, - "stmt15": true, - "stmt16": true, - "stmt17": true, - "stmt18": true, - "stmt19": true, - "stmt20": true, "stmt31": true, "stmt32": true, "stmt33": true,