From a196c755bababeeacaf47117000c2912bfa7bfac Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 30 Dec 2025 06:43:11 +0000 Subject: [PATCH] Fix multiple EXPLAIN output formatting issues This commit fixes several EXPLAIN AST output issues: 1. SampleRatio formatting: Convert decimal ratios like 0.1 to fractions like 1/10 to match ClickHouse EXPLAIN AST output 2. CHECK TABLE FORMAT clause: Add support for parsing and outputting the FORMAT clause in CHECK TABLE statements 3. Materialized view ViewTargets: For CREATE MATERIALIZED VIEW statements, output the AS SELECT clause before the storage definition and wrap storage definition in ViewTargets 4. OPTIMIZE TABLE PARTITION: Add support for outputting the PARTITION clause in OPTIMIZE TABLE statements These fixes resolve 44 test statements across many test files. --- ast/ast.go | 1 + internal/explain/explain.go | 2 +- internal/explain/statements.go | 102 ++++++++++++------ internal/explain/tables.go | 34 +++++- parser/parser.go | 6 ++ .../metadata.json | 6 +- .../metadata.json | 6 +- parser/testdata/00056_view/metadata.json | 2 +- .../testdata/00063_check_query/metadata.json | 6 +- .../00084_summing_merge_tree/metadata.json | 6 +- .../metadata.json | 2 - .../metadata.json | 6 +- parser/testdata/00276_sample/metadata.json | 4 +- .../metadata.json | 6 +- .../metadata.json | 2 - .../metadata.json | 7 +- .../metadata.json | 8 +- .../metadata.json | 3 - .../metadata.json | 3 +- .../00578_merge_table_sampling/metadata.json | 7 +- .../metadata.json | 2 +- .../00616_final_single_part/metadata.json | 6 +- .../metadata.json | 3 +- .../00623_truncate_table/metadata.json | 6 +- .../00625_arrays_in_nested/metadata.json | 6 +- .../00713_collapsing_merge_tree/metadata.json | 2 +- .../metadata.json | 1 - .../metadata.json | 7 +- .../metadata.json | 6 +- .../metadata.json | 6 +- parser/testdata/00933_alter_ttl/metadata.json | 1 - .../00942_mv_rename_table/metadata.json | 1 - .../metadata.json | 3 +- .../metadata.json | 2 - .../00976_ttl_with_old_parts/metadata.json | 3 +- .../metadata.json | 6 +- .../metadata.json | 6 +- .../01161_information_schema/metadata.json | 3 +- parser/testdata/01210_drop_view/metadata.json | 6 +- .../testdata/01268_mv_scalars/metadata.json | 1 - .../metadata.json | 6 +- .../metadata.json | 9 +- .../metadata.json | 10 +- .../metadata.json | 1 - .../metadata.json | 6 +- .../metadata.json | 7 +- .../02455_count_state_asterisk/metadata.json | 6 +- .../metadata.json | 6 +- .../03239_if_constant_folding/metadata.json | 6 +- 49 files changed, 148 insertions(+), 205 deletions(-) diff --git a/ast/ast.go b/ast/ast.go index d0f691e262..97df4b354b 100644 --- a/ast/ast.go +++ b/ast/ast.go @@ -720,6 +720,7 @@ type CheckQuery struct { Position token.Position `json:"-"` Database string `json:"database,omitempty"` Table string `json:"table"` + Format string `json:"format,omitempty"` Settings []*SettingExpr `json:"settings,omitempty"` } diff --git a/internal/explain/explain.go b/internal/explain/explain.go index 0f5b0337db..6275a5e4f4 100644 --- a/internal/explain/explain.go +++ b/internal/explain/explain.go @@ -144,7 +144,7 @@ func Node(sb *strings.Builder, node interface{}, depth int) { case *ast.AlterQuery: explainAlterQuery(sb, n, indent, depth) case *ast.OptimizeQuery: - explainOptimizeQuery(sb, n, indent) + explainOptimizeQuery(sb, n, indent, depth) case *ast.TruncateQuery: explainTruncateQuery(sb, n, indent) case *ast.CheckQuery: diff --git a/internal/explain/statements.go b/internal/explain/statements.go index 4bda5e5ac7..ad26f30d6f 100644 --- a/internal/explain/statements.go +++ b/internal/explain/statements.go @@ -192,7 +192,12 @@ func explainCreateQuery(sb *strings.Builder, n *ast.CreateQuery, indent string, } } } - if n.Engine != nil || len(n.OrderBy) > 0 || len(n.PrimaryKey) > 0 || n.PartitionBy != nil || n.SampleBy != nil || n.TTL != nil || len(n.Settings) > 0 { + // For materialized views, output AsSelect before storage definition + if n.Materialized && n.AsSelect != nil { + Node(sb, n.AsSelect, depth+1) + } + hasStorage := n.Engine != nil || len(n.OrderBy) > 0 || len(n.PrimaryKey) > 0 || n.PartitionBy != nil || n.SampleBy != nil || n.TTL != nil || len(n.Settings) > 0 + if hasStorage { storageChildren := 0 if n.Engine != nil { storageChildren++ @@ -231,80 +236,91 @@ func explainCreateQuery(sb *strings.Builder, n *ast.CreateQuery, indent string, if len(n.Settings) > 0 { storageChildren++ } - fmt.Fprintf(sb, "%s Storage definition (children %d)\n", indent, storageChildren) + // For materialized views, wrap storage definition in ViewTargets + // and use extra indentation for storage children + storageIndent := indent + " " // 1 space for regular storage (format strings add 1 more) + storageChildDepth := depth + 2 + if n.Materialized { + fmt.Fprintf(sb, "%s ViewTargets (children %d)\n", indent, 1) + fmt.Fprintf(sb, "%s Storage definition (children %d)\n", indent, storageChildren) + storageIndent = indent + " " // 2 spaces for materialized (format strings add 1 more = 3 total) + storageChildDepth = depth + 3 + } else { + fmt.Fprintf(sb, "%s Storage definition (children %d)\n", indent, storageChildren) + } if n.Engine != nil { if n.Engine.HasParentheses { - fmt.Fprintf(sb, "%s Function %s (children %d)\n", indent, n.Engine.Name, 1) + fmt.Fprintf(sb, "%s Function %s (children %d)\n", storageIndent, n.Engine.Name, 1) if len(n.Engine.Parameters) > 0 { - fmt.Fprintf(sb, "%s ExpressionList (children %d)\n", indent, len(n.Engine.Parameters)) + fmt.Fprintf(sb, "%s ExpressionList (children %d)\n", storageIndent, len(n.Engine.Parameters)) for _, param := range n.Engine.Parameters { - Node(sb, param, depth+4) + Node(sb, param, storageChildDepth+2) } } else { - fmt.Fprintf(sb, "%s ExpressionList\n", indent) + fmt.Fprintf(sb, "%s ExpressionList\n", storageIndent) } } else { - fmt.Fprintf(sb, "%s Function %s\n", indent, n.Engine.Name) + fmt.Fprintf(sb, "%s Function %s\n", storageIndent, n.Engine.Name) } } if n.PartitionBy != nil { if ident, ok := n.PartitionBy.(*ast.Identifier); ok { - fmt.Fprintf(sb, "%s Identifier %s\n", indent, ident.Name()) + fmt.Fprintf(sb, "%s Identifier %s\n", storageIndent, ident.Name()) } else { - Node(sb, n.PartitionBy, depth+2) + Node(sb, n.PartitionBy, storageChildDepth) } } if len(n.OrderBy) > 0 { if len(n.OrderBy) == 1 { if ident, ok := n.OrderBy[0].(*ast.Identifier); ok { - fmt.Fprintf(sb, "%s Identifier %s\n", indent, ident.Name()) + fmt.Fprintf(sb, "%s Identifier %s\n", storageIndent, ident.Name()) } else if lit, ok := n.OrderBy[0].(*ast.Literal); ok && lit.Type == ast.LiteralTuple { // Handle tuple literal (including empty tuple from ORDER BY ()) exprs, _ := lit.Value.([]ast.Expression) - fmt.Fprintf(sb, "%s Function tuple (children %d)\n", indent, 1) + fmt.Fprintf(sb, "%s Function tuple (children %d)\n", storageIndent, 1) if len(exprs) > 0 { - fmt.Fprintf(sb, "%s ExpressionList (children %d)\n", indent, len(exprs)) + fmt.Fprintf(sb, "%s ExpressionList (children %d)\n", storageIndent, len(exprs)) for _, e := range exprs { - Node(sb, e, depth+4) + Node(sb, e, storageChildDepth+2) } } else { - fmt.Fprintf(sb, "%s ExpressionList\n", indent) + fmt.Fprintf(sb, "%s ExpressionList\n", storageIndent) } } else { - Node(sb, n.OrderBy[0], depth+2) + Node(sb, n.OrderBy[0], storageChildDepth) } } else { - fmt.Fprintf(sb, "%s Function tuple (children %d)\n", indent, 1) - fmt.Fprintf(sb, "%s ExpressionList (children %d)\n", indent, len(n.OrderBy)) + fmt.Fprintf(sb, "%s Function tuple (children %d)\n", storageIndent, 1) + fmt.Fprintf(sb, "%s ExpressionList (children %d)\n", storageIndent, len(n.OrderBy)) for _, o := range n.OrderBy { - Node(sb, o, depth+4) + Node(sb, o, storageChildDepth+2) } } } if len(n.PrimaryKey) > 0 { if len(n.PrimaryKey) == 1 { if ident, ok := n.PrimaryKey[0].(*ast.Identifier); ok { - fmt.Fprintf(sb, "%s Identifier %s\n", indent, ident.Name()) + fmt.Fprintf(sb, "%s Identifier %s\n", storageIndent, ident.Name()) } else if lit, ok := n.PrimaryKey[0].(*ast.Literal); ok && lit.Type == ast.LiteralTuple { // Handle tuple literal (including empty tuple from PRIMARY KEY ()) exprs, _ := lit.Value.([]ast.Expression) - fmt.Fprintf(sb, "%s Function tuple (children %d)\n", indent, 1) + fmt.Fprintf(sb, "%s Function tuple (children %d)\n", storageIndent, 1) if len(exprs) > 0 { - fmt.Fprintf(sb, "%s ExpressionList (children %d)\n", indent, len(exprs)) + fmt.Fprintf(sb, "%s ExpressionList (children %d)\n", storageIndent, len(exprs)) for _, e := range exprs { - Node(sb, e, depth+4) + Node(sb, e, storageChildDepth+2) } } else { - fmt.Fprintf(sb, "%s ExpressionList\n", indent) + fmt.Fprintf(sb, "%s ExpressionList\n", storageIndent) } } else { - Node(sb, n.PrimaryKey[0], depth+2) + Node(sb, n.PrimaryKey[0], storageChildDepth) } } else { - fmt.Fprintf(sb, "%s Function tuple (children %d)\n", indent, 1) - fmt.Fprintf(sb, "%s ExpressionList (children %d)\n", indent, len(n.PrimaryKey)) + fmt.Fprintf(sb, "%s Function tuple (children %d)\n", storageIndent, 1) + fmt.Fprintf(sb, "%s ExpressionList (children %d)\n", storageIndent, len(n.PrimaryKey)) for _, p := range n.PrimaryKey { - Node(sb, p, depth+4) + Node(sb, p, storageChildDepth+2) } } } @@ -323,20 +339,21 @@ func explainCreateQuery(sb *strings.Builder, n *ast.CreateQuery, indent string, } } if showSampleBy { - Node(sb, n.SampleBy, depth+2) + Node(sb, n.SampleBy, storageChildDepth) } } } if n.TTL != nil { - fmt.Fprintf(sb, "%s ExpressionList (children 1)\n", indent) - fmt.Fprintf(sb, "%s TTLElement (children 1)\n", indent) - Node(sb, n.TTL.Expression, depth+4) + fmt.Fprintf(sb, "%s ExpressionList (children 1)\n", storageIndent) + fmt.Fprintf(sb, "%s TTLElement (children 1)\n", storageIndent) + Node(sb, n.TTL.Expression, storageChildDepth+2) } if len(n.Settings) > 0 { - fmt.Fprintf(sb, "%s Set\n", indent) + fmt.Fprintf(sb, "%s Set\n", storageIndent) } } - if n.AsSelect != nil { + // For non-materialized views, output AsSelect after storage + if n.AsSelect != nil && !n.Materialized { // AS SELECT is output directly without Subquery wrapper Node(sb, n.AsSelect, depth+1) } @@ -908,7 +925,7 @@ func countAlterCommandChildren(cmd *ast.AlterCommand) int { return children } -func explainOptimizeQuery(sb *strings.Builder, n *ast.OptimizeQuery, indent string) { +func explainOptimizeQuery(sb *strings.Builder, n *ast.OptimizeQuery, indent string, depth int) { if n == nil { fmt.Fprintf(sb, "%s*ast.OptimizeQuery\n", indent) return @@ -919,7 +936,16 @@ func explainOptimizeQuery(sb *strings.Builder, n *ast.OptimizeQuery, indent stri name += "_final" } - fmt.Fprintf(sb, "%sOptimizeQuery %s (children %d)\n", indent, name, 1) + children := 1 // identifier + if n.Partition != nil { + children++ + } + + fmt.Fprintf(sb, "%sOptimizeQuery %s (children %d)\n", indent, name, children) + if n.Partition != nil { + fmt.Fprintf(sb, "%s Partition (children 1)\n", indent) + Node(sb, n.Partition, depth+2) + } fmt.Fprintf(sb, "%s Identifier %s\n", indent, n.Table) } @@ -950,12 +976,18 @@ func explainCheckQuery(sb *strings.Builder, n *ast.CheckQuery, indent string) { } children := 1 // identifier + if n.Format != "" { + children++ + } if len(n.Settings) > 0 { children++ } fmt.Fprintf(sb, "%sCheckQuery %s (children %d)\n", indent, name, children) fmt.Fprintf(sb, "%s Identifier %s\n", indent, name) + if n.Format != "" { + fmt.Fprintf(sb, "%s Identifier %s\n", indent, n.Format) + } if len(n.Settings) > 0 { fmt.Fprintf(sb, "%s Set\n", indent) } diff --git a/internal/explain/tables.go b/internal/explain/tables.go index 9347672bfe..47f3282c90 100644 --- a/internal/explain/tables.go +++ b/internal/explain/tables.go @@ -91,7 +91,13 @@ func formatSampleRatioOperand(sb *strings.Builder, expr ast.Expression) { case uint64: fmt.Fprintf(sb, "%d", v) case float64: - fmt.Fprintf(sb, "%g", v) + // Convert decimal to fraction for EXPLAIN AST output + // ClickHouse shows 0.1 as "1 / 10", 0.01 as "1 / 100", etc. + if frac := floatToFraction(v); frac != "" { + sb.WriteString(frac) + } else { + fmt.Fprintf(sb, "%g", v) + } default: fmt.Fprintf(sb, "%v", v) } @@ -100,6 +106,32 @@ func formatSampleRatioOperand(sb *strings.Builder, expr ast.Expression) { } } +// floatToFraction converts a float to a fraction string like "1 / 10" +// Returns empty string if the float can't be reasonably converted to a simple fraction +func floatToFraction(f float64) string { + if f <= 0 || f >= 1 { + return "" + } + // Try common denominators + denominators := []int64{2, 3, 4, 5, 8, 10, 16, 20, 25, 32, 50, 64, 100, 128, 1000, 10000, 100000, 1000000} + for _, denom := range denominators { + num := f * float64(denom) + // Check if num is close to an integer + rounded := int64(num + 0.5) + if rounded > 0 && abs(num-float64(rounded)) < 1e-9 { + return fmt.Sprintf("%d / %d", rounded, denom) + } + } + return "" +} + +func abs(x float64) float64 { + if x < 0 { + return -x + } + return x +} + // explainViewExplain handles EXPLAIN queries used as table sources, converting to viewExplain function func explainViewExplain(sb *strings.Builder, n *ast.ExplainQuery, alias string, indent string, depth int) { // When EXPLAIN is used as a table source, it becomes viewExplain function diff --git a/parser/parser.go b/parser/parser.go index 1ec351e994..47aee76460 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -3754,6 +3754,12 @@ func (p *Parser) parseCheck() *ast.CheckQuery { check.Table = tableName } + // Parse optional FORMAT + if p.currentIs(token.FORMAT) { + p.nextToken() // skip FORMAT + check.Format = p.parseIdentifierName() + } + // Parse optional SETTINGS if p.currentIs(token.SETTINGS) { p.nextToken() // skip SETTINGS diff --git a/parser/testdata/00040_aggregating_materialized_view/metadata.json b/parser/testdata/00040_aggregating_materialized_view/metadata.json index 1295a45747..0967ef424b 100644 --- a/parser/testdata/00040_aggregating_materialized_view/metadata.json +++ b/parser/testdata/00040_aggregating_materialized_view/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt3": true - } -} +{} diff --git a/parser/testdata/00041_aggregating_materialized_view/metadata.json b/parser/testdata/00041_aggregating_materialized_view/metadata.json index 3a06a4a1ac..0967ef424b 100644 --- a/parser/testdata/00041_aggregating_materialized_view/metadata.json +++ b/parser/testdata/00041_aggregating_materialized_view/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt5": true - } -} +{} diff --git a/parser/testdata/00056_view/metadata.json b/parser/testdata/00056_view/metadata.json index 3a2014fe8c..0967ef424b 100644 --- a/parser/testdata/00056_view/metadata.json +++ b/parser/testdata/00056_view/metadata.json @@ -1 +1 @@ -{"explain_todo":{"stmt6":true}} +{} diff --git a/parser/testdata/00063_check_query/metadata.json b/parser/testdata/00063_check_query/metadata.json index 7ad5569408..0967ef424b 100644 --- a/parser/testdata/00063_check_query/metadata.json +++ b/parser/testdata/00063_check_query/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt9": true - } -} +{} diff --git a/parser/testdata/00084_summing_merge_tree/metadata.json b/parser/testdata/00084_summing_merge_tree/metadata.json index b09bea8db0..0967ef424b 100644 --- a/parser/testdata/00084_summing_merge_tree/metadata.json +++ b/parser/testdata/00084_summing_merge_tree/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt25": true - } -} +{} diff --git a/parser/testdata/00101_materialized_views_and_insert_without_explicit_database/metadata.json b/parser/testdata/00101_materialized_views_and_insert_without_explicit_database/metadata.json index 8540dc40bc..30cf38cc7b 100644 --- a/parser/testdata/00101_materialized_views_and_insert_without_explicit_database/metadata.json +++ b/parser/testdata/00101_materialized_views_and_insert_without_explicit_database/metadata.json @@ -1,7 +1,5 @@ { "explain_todo": { - "stmt27": true, - "stmt30": true, "stmt35": true, "stmt36": true, "stmt37": true, diff --git a/parser/testdata/00180_attach_materialized_view/metadata.json b/parser/testdata/00180_attach_materialized_view/metadata.json index 3a06a4a1ac..0967ef424b 100644 --- a/parser/testdata/00180_attach_materialized_view/metadata.json +++ b/parser/testdata/00180_attach_materialized_view/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt5": true - } -} +{} diff --git a/parser/testdata/00276_sample/metadata.json b/parser/testdata/00276_sample/metadata.json index 451eb06303..c19358090d 100644 --- a/parser/testdata/00276_sample/metadata.json +++ b/parser/testdata/00276_sample/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt13": true, "stmt14": true, "stmt15": true, "stmt16": true, @@ -15,7 +14,6 @@ "stmt32": true, "stmt33": true, "stmt34": true, - "stmt39": true, - "stmt9": true + "stmt39": true } } diff --git a/parser/testdata/00327_summing_composite_nested/metadata.json b/parser/testdata/00327_summing_composite_nested/metadata.json index 62b81668c3..0967ef424b 100644 --- a/parser/testdata/00327_summing_composite_nested/metadata.json +++ b/parser/testdata/00327_summing_composite_nested/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt13": true - } -} +{} 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 05effe7f3b..5f21799304 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 @@ -10,8 +10,6 @@ "stmt38": true, "stmt43": true, "stmt44": true, - "stmt46": true, - "stmt47": true, "stmt48": true, "stmt8": true } diff --git a/parser/testdata/00502_custom_partitioning_local/metadata.json b/parser/testdata/00502_custom_partitioning_local/metadata.json index 01200cfa7e..7d6a0c70d8 100644 --- a/parser/testdata/00502_custom_partitioning_local/metadata.json +++ b/parser/testdata/00502_custom_partitioning_local/metadata.json @@ -2,11 +2,6 @@ "explain_todo": { "stmt13": true, "stmt17": true, - "stmt26": true, - "stmt42": true, - "stmt43": true, - "stmt48": true, - "stmt59": true, - "stmt8": true + "stmt48": true } } diff --git a/parser/testdata/00502_custom_partitioning_replicated_zookeeper_long/metadata.json b/parser/testdata/00502_custom_partitioning_replicated_zookeeper_long/metadata.json index ddd158edeb..eb5ba96e8d 100644 --- a/parser/testdata/00502_custom_partitioning_replicated_zookeeper_long/metadata.json +++ b/parser/testdata/00502_custom_partitioning_replicated_zookeeper_long/metadata.json @@ -2,21 +2,15 @@ "explain_todo": { "stmt12": true, "stmt13": true, - "stmt14": true, "stmt19": true, "stmt33": true, "stmt34": true, - "stmt35": true, "stmt54": true, "stmt55": true, - "stmt56": true, - "stmt57": true, "stmt62": true, "stmt76": true, "stmt77": true, - "stmt78": true, "stmt94": true, - "stmt95": true, - "stmt96": true + "stmt95": true } } diff --git a/parser/testdata/00509_extended_storage_definition_syntax_zookeeper/metadata.json b/parser/testdata/00509_extended_storage_definition_syntax_zookeeper/metadata.json index 325fac980f..8604712d22 100644 --- a/parser/testdata/00509_extended_storage_definition_syntax_zookeeper/metadata.json +++ b/parser/testdata/00509_extended_storage_definition_syntax_zookeeper/metadata.json @@ -1,10 +1,7 @@ { "explain_todo": { - "stmt14": true, "stmt22": true, - "stmt23": true, "stmt32": true, - "stmt33": true, "stmt4": true } } diff --git a/parser/testdata/00542_materialized_view_and_time_zone_tag/metadata.json b/parser/testdata/00542_materialized_view_and_time_zone_tag/metadata.json index ff0eba6904..dbdbb76d4f 100644 --- a/parser/testdata/00542_materialized_view_and_time_zone_tag/metadata.json +++ b/parser/testdata/00542_materialized_view_and_time_zone_tag/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt6": true, - "stmt7": true + "stmt6": true } } diff --git a/parser/testdata/00578_merge_table_sampling/metadata.json b/parser/testdata/00578_merge_table_sampling/metadata.json index 22c08a6999..92e84e943a 100644 --- a/parser/testdata/00578_merge_table_sampling/metadata.json +++ b/parser/testdata/00578_merge_table_sampling/metadata.json @@ -1 +1,6 @@ -{"explain_todo":{"stmt10":true,"stmt5":true,"stmt8":true,"stmt9":true}} +{ + "explain_todo": { + "stmt8": true, + "stmt9": true + } +} diff --git a/parser/testdata/00578_merge_trees_without_primary_key/metadata.json b/parser/testdata/00578_merge_trees_without_primary_key/metadata.json index f60284eeff..0967ef424b 100644 --- a/parser/testdata/00578_merge_trees_without_primary_key/metadata.json +++ b/parser/testdata/00578_merge_trees_without_primary_key/metadata.json @@ -1 +1 @@ -{"explain_todo":{"stmt19":true,"stmt30":true,"stmt7":true}} +{} diff --git a/parser/testdata/00616_final_single_part/metadata.json b/parser/testdata/00616_final_single_part/metadata.json index c45b7602ba..0967ef424b 100644 --- a/parser/testdata/00616_final_single_part/metadata.json +++ b/parser/testdata/00616_final_single_part/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt12": true - } -} +{} diff --git a/parser/testdata/00621_regression_for_in_operator/metadata.json b/parser/testdata/00621_regression_for_in_operator/metadata.json index 01eeb86c3f..7be52c0e54 100644 --- a/parser/testdata/00621_regression_for_in_operator/metadata.json +++ b/parser/testdata/00621_regression_for_in_operator/metadata.json @@ -1,7 +1,6 @@ { "explain_todo": { "stmt13": true, - "stmt17": true, - "stmt5": true + "stmt17": true } } diff --git a/parser/testdata/00623_truncate_table/metadata.json b/parser/testdata/00623_truncate_table/metadata.json index 7b4455cd5f..0967ef424b 100644 --- a/parser/testdata/00623_truncate_table/metadata.json +++ b/parser/testdata/00623_truncate_table/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt16": true - } -} +{} diff --git a/parser/testdata/00625_arrays_in_nested/metadata.json b/parser/testdata/00625_arrays_in_nested/metadata.json index f4c74e32be..0967ef424b 100644 --- a/parser/testdata/00625_arrays_in_nested/metadata.json +++ b/parser/testdata/00625_arrays_in_nested/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt10": true - } -} +{} diff --git a/parser/testdata/00713_collapsing_merge_tree/metadata.json b/parser/testdata/00713_collapsing_merge_tree/metadata.json index 94acced048..0967ef424b 100644 --- a/parser/testdata/00713_collapsing_merge_tree/metadata.json +++ b/parser/testdata/00713_collapsing_merge_tree/metadata.json @@ -1 +1 @@ -{"explain_todo":{"stmt7":true}} +{} diff --git a/parser/testdata/00721_force_by_identical_result_after_merge_zookeeper_long/metadata.json b/parser/testdata/00721_force_by_identical_result_after_merge_zookeeper_long/metadata.json index ca46fc2521..071a891e71 100644 --- a/parser/testdata/00721_force_by_identical_result_after_merge_zookeeper_long/metadata.json +++ b/parser/testdata/00721_force_by_identical_result_after_merge_zookeeper_long/metadata.json @@ -1,7 +1,6 @@ { "explain_todo": { "stmt10": true, - "stmt12": true, "stmt13": true, "stmt7": true, "stmt9": true diff --git a/parser/testdata/00726_materialized_view_concurrent/metadata.json b/parser/testdata/00726_materialized_view_concurrent/metadata.json index 0f293987f1..0967ef424b 100644 --- a/parser/testdata/00726_materialized_view_concurrent/metadata.json +++ b/parser/testdata/00726_materialized_view_concurrent/metadata.json @@ -1,6 +1 @@ -{ - "explain_todo": { - "stmt5": true, - "stmt6": true - } -} +{} diff --git a/parser/testdata/00732_quorum_insert_simple_test_1_parts_zookeeper_long/metadata.json b/parser/testdata/00732_quorum_insert_simple_test_1_parts_zookeeper_long/metadata.json index c45b7602ba..0967ef424b 100644 --- a/parser/testdata/00732_quorum_insert_simple_test_1_parts_zookeeper_long/metadata.json +++ b/parser/testdata/00732_quorum_insert_simple_test_1_parts_zookeeper_long/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt12": true - } -} +{} diff --git a/parser/testdata/00794_materialized_view_with_column_defaults/metadata.json b/parser/testdata/00794_materialized_view_with_column_defaults/metadata.json index 3a06a4a1ac..0967ef424b 100644 --- a/parser/testdata/00794_materialized_view_with_column_defaults/metadata.json +++ b/parser/testdata/00794_materialized_view_with_column_defaults/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt5": true - } -} +{} diff --git a/parser/testdata/00933_alter_ttl/metadata.json b/parser/testdata/00933_alter_ttl/metadata.json index 697465ac02..a6ab941a27 100644 --- a/parser/testdata/00933_alter_ttl/metadata.json +++ b/parser/testdata/00933_alter_ttl/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt10": true, "stmt12": true, "stmt15": true, "stmt17": true, diff --git a/parser/testdata/00942_mv_rename_table/metadata.json b/parser/testdata/00942_mv_rename_table/metadata.json index d02612666a..342b3ff5b4 100644 --- a/parser/testdata/00942_mv_rename_table/metadata.json +++ b/parser/testdata/00942_mv_rename_table/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt5": true, "stmt8": true } } diff --git a/parser/testdata/00975_recursive_materialized_view/metadata.json b/parser/testdata/00975_recursive_materialized_view/metadata.json index f6d9f2395b..b563327205 100644 --- a/parser/testdata/00975_recursive_materialized_view/metadata.json +++ b/parser/testdata/00975_recursive_materialized_view/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt7": true, - "stmt8": true + "stmt7": true } } diff --git a/parser/testdata/00976_system_stop_ttl_merges/metadata.json b/parser/testdata/00976_system_stop_ttl_merges/metadata.json index f0f4260154..60106a3b25 100644 --- a/parser/testdata/00976_system_stop_ttl_merges/metadata.json +++ b/parser/testdata/00976_system_stop_ttl_merges/metadata.json @@ -1,8 +1,6 @@ { "explain_todo": { - "stmt10": true, "stmt3": true, - "stmt7": true, "stmt9": true } } diff --git a/parser/testdata/00976_ttl_with_old_parts/metadata.json b/parser/testdata/00976_ttl_with_old_parts/metadata.json index afaaa4b0a6..b563327205 100644 --- a/parser/testdata/00976_ttl_with_old_parts/metadata.json +++ b/parser/testdata/00976_ttl_with_old_parts/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt7": true, - "stmt9": true + "stmt7": true } } diff --git a/parser/testdata/01008_materialized_view_henyihanwobushi/metadata.json b/parser/testdata/01008_materialized_view_henyihanwobushi/metadata.json index 342b3ff5b4..0967ef424b 100644 --- a/parser/testdata/01008_materialized_view_henyihanwobushi/metadata.json +++ b/parser/testdata/01008_materialized_view_henyihanwobushi/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt8": true - } -} +{} diff --git a/parser/testdata/01019_Buffer_and_max_memory_usage/metadata.json b/parser/testdata/01019_Buffer_and_max_memory_usage/metadata.json index 62b81668c3..0967ef424b 100644 --- a/parser/testdata/01019_Buffer_and_max_memory_usage/metadata.json +++ b/parser/testdata/01019_Buffer_and_max_memory_usage/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt13": true - } -} +{} diff --git a/parser/testdata/01161_information_schema/metadata.json b/parser/testdata/01161_information_schema/metadata.json index ec09c7e10e..ab9202e88e 100644 --- a/parser/testdata/01161_information_schema/metadata.json +++ b/parser/testdata/01161_information_schema/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt11": true, - "stmt12": true + "stmt11": true } } diff --git a/parser/testdata/01210_drop_view/metadata.json b/parser/testdata/01210_drop_view/metadata.json index 3a06a4a1ac..0967ef424b 100644 --- a/parser/testdata/01210_drop_view/metadata.json +++ b/parser/testdata/01210_drop_view/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt5": true - } -} +{} diff --git a/parser/testdata/01268_mv_scalars/metadata.json b/parser/testdata/01268_mv_scalars/metadata.json index 40c842f856..8c6a18d871 100644 --- a/parser/testdata/01268_mv_scalars/metadata.json +++ b/parser/testdata/01268_mv_scalars/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt10": true, "stmt19": true } } diff --git a/parser/testdata/01360_materialized_view_with_join_on_query_log/metadata.json b/parser/testdata/01360_materialized_view_with_join_on_query_log/metadata.json index 342b3ff5b4..0967ef424b 100644 --- a/parser/testdata/01360_materialized_view_with_join_on_query_log/metadata.json +++ b/parser/testdata/01360_materialized_view_with_join_on_query_log/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt8": true - } -} +{} diff --git a/parser/testdata/01430_modify_sample_by_zookeeper_long/metadata.json b/parser/testdata/01430_modify_sample_by_zookeeper_long/metadata.json index aaa7295255..73b86cc257 100644 --- a/parser/testdata/01430_modify_sample_by_zookeeper_long/metadata.json +++ b/parser/testdata/01430_modify_sample_by_zookeeper_long/metadata.json @@ -1,16 +1,9 @@ { "explain_todo": { - "stmt11": true, "stmt12": true, - "stmt13": true, - "stmt16": true, "stmt17": true, "stmt18": true, - "stmt19": true, - "stmt22": true, "stmt25": true, - "stmt6": true, - "stmt7": true, - "stmt8": true + "stmt7": true } } diff --git a/parser/testdata/01746_forbid_drop_column_referenced_by_mv/metadata.json b/parser/testdata/01746_forbid_drop_column_referenced_by_mv/metadata.json index e71a215864..0967ef424b 100644 --- a/parser/testdata/01746_forbid_drop_column_referenced_by_mv/metadata.json +++ b/parser/testdata/01746_forbid_drop_column_referenced_by_mv/metadata.json @@ -1,9 +1 @@ -{ - "explain_todo": { - "stmt13": true, - "stmt24": true, - "stmt36": true, - "stmt4": true, - "stmt48": true - } -} +{} diff --git a/parser/testdata/01851_clear_column_referenced_by_mv/metadata.json b/parser/testdata/01851_clear_column_referenced_by_mv/metadata.json index 05aa6dfc72..342b3ff5b4 100644 --- a/parser/testdata/01851_clear_column_referenced_by_mv/metadata.json +++ b/parser/testdata/01851_clear_column_referenced_by_mv/metadata.json @@ -1,6 +1,5 @@ { "explain_todo": { - "stmt4": true, "stmt8": true } } diff --git a/parser/testdata/02350_views_max_insert_threads/metadata.json b/parser/testdata/02350_views_max_insert_threads/metadata.json index b65b07d7a6..0967ef424b 100644 --- a/parser/testdata/02350_views_max_insert_threads/metadata.json +++ b/parser/testdata/02350_views_max_insert_threads/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt4": true - } -} +{} diff --git a/parser/testdata/02439_merge_selecting_partitions/metadata.json b/parser/testdata/02439_merge_selecting_partitions/metadata.json index 73520390f9..0967ef424b 100644 --- a/parser/testdata/02439_merge_selecting_partitions/metadata.json +++ b/parser/testdata/02439_merge_selecting_partitions/metadata.json @@ -1,6 +1 @@ -{ - "explain_todo": { - "stmt12": true, - "stmt14": true - } -} +{} diff --git a/parser/testdata/02455_count_state_asterisk/metadata.json b/parser/testdata/02455_count_state_asterisk/metadata.json index b65b07d7a6..0967ef424b 100644 --- a/parser/testdata/02455_count_state_asterisk/metadata.json +++ b/parser/testdata/02455_count_state_asterisk/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt4": true - } -} +{} diff --git a/parser/testdata/02814_currentDatabase_for_table_functions/metadata.json b/parser/testdata/02814_currentDatabase_for_table_functions/metadata.json index b563327205..0967ef424b 100644 --- a/parser/testdata/02814_currentDatabase_for_table_functions/metadata.json +++ b/parser/testdata/02814_currentDatabase_for_table_functions/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt7": true - } -} +{} diff --git a/parser/testdata/03239_if_constant_folding/metadata.json b/parser/testdata/03239_if_constant_folding/metadata.json index ab9202e88e..0967ef424b 100644 --- a/parser/testdata/03239_if_constant_folding/metadata.json +++ b/parser/testdata/03239_if_constant_folding/metadata.json @@ -1,5 +1 @@ -{ - "explain_todo": { - "stmt11": true - } -} +{}