diff --git a/Cargo.lock b/Cargo.lock index a134d3002..88b466e54 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4525,8 +4525,8 @@ dependencies = [ [[package]] name = "sqlclean" -version = "0.8.3" -source = "git+https://github.com/sqlstack-io/sqlclean.git?rev=be41ae207344e127db81aa42d6a951682c3f35fa#be41ae207344e127db81aa42d6a951682c3f35fa" +version = "0.9.0" +source = "git+https://github.com/sqlstack-io/sqlclean.git?rev=6e18af661ce3a6bcc385a38954c86696d722f400#6e18af661ce3a6bcc385a38954c86696d722f400" dependencies = [ "rayon", "rustc-hash", @@ -4543,8 +4543,8 @@ dependencies = [ [[package]] name = "sqlquack-derive" -version = "0.5.1" -source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=e1a583eb6d4180ff4121ef82b3f08b2982edca66#e1a583eb6d4180ff4121ef82b3f08b2982edca66" +version = "0.6.0" +source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a#8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a" dependencies = [ "proc-macro2", "quote", @@ -4553,8 +4553,8 @@ dependencies = [ [[package]] name = "sqlquack-diagnostics" -version = "0.5.1" -source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=e1a583eb6d4180ff4121ef82b3f08b2982edca66#e1a583eb6d4180ff4121ef82b3f08b2982edca66" +version = "0.6.0" +source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a#8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a" dependencies = [ "serde", "serde_json", @@ -4563,8 +4563,8 @@ dependencies = [ [[package]] name = "sqlquack-fingerprint" -version = "0.5.1" -source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=e1a583eb6d4180ff4121ef82b3f08b2982edca66#e1a583eb6d4180ff4121ef82b3f08b2982edca66" +version = "0.6.0" +source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a#8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a" dependencies = [ "sha2 0.10.9", "sqlquack-parse", @@ -4573,8 +4573,8 @@ dependencies = [ [[package]] name = "sqlquack-format" -version = "0.5.1" -source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=e1a583eb6d4180ff4121ef82b3f08b2982edca66#e1a583eb6d4180ff4121ef82b3f08b2982edca66" +version = "0.6.0" +source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a#8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a" dependencies = [ "serde_json", "sqlquack-parse", @@ -4583,8 +4583,8 @@ dependencies = [ [[package]] name = "sqlquack-lint" -version = "0.5.1" -source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=e1a583eb6d4180ff4121ef82b3f08b2982edca66#e1a583eb6d4180ff4121ef82b3f08b2982edca66" +version = "0.6.0" +source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a#8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a" dependencies = [ "rayon", "rustc-hash", @@ -4596,8 +4596,8 @@ dependencies = [ [[package]] name = "sqlquack-parse" -version = "0.5.1" -source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=e1a583eb6d4180ff4121ef82b3f08b2982edca66#e1a583eb6d4180ff4121ef82b3f08b2982edca66" +version = "0.6.0" +source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a#8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a" dependencies = [ "sqlquack-syntax", "sqlquack-syntax-bigquery", @@ -4609,8 +4609,8 @@ dependencies = [ [[package]] name = "sqlquack-semantics" -version = "0.5.1" -source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=e1a583eb6d4180ff4121ef82b3f08b2982edca66#e1a583eb6d4180ff4121ef82b3f08b2982edca66" +version = "0.6.0" +source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a#8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a" dependencies = [ "regex", "rustc-hash", @@ -4625,8 +4625,8 @@ dependencies = [ [[package]] name = "sqlquack-syntax" -version = "0.5.1" -source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=e1a583eb6d4180ff4121ef82b3f08b2982edca66#e1a583eb6d4180ff4121ef82b3f08b2982edca66" +version = "0.6.0" +source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a#8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a" dependencies = [ "serde", "serde_json", @@ -4638,8 +4638,8 @@ dependencies = [ [[package]] name = "sqlquack-syntax-bigquery" -version = "0.5.1" -source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=e1a583eb6d4180ff4121ef82b3f08b2982edca66#e1a583eb6d4180ff4121ef82b3f08b2982edca66" +version = "0.6.0" +source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a#8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a" dependencies = [ "sqlquack-syntax", "stacker", @@ -4647,8 +4647,8 @@ dependencies = [ [[package]] name = "sqlquack-syntax-clickhouse" -version = "0.5.1" -source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=e1a583eb6d4180ff4121ef82b3f08b2982edca66#e1a583eb6d4180ff4121ef82b3f08b2982edca66" +version = "0.6.0" +source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a#8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a" dependencies = [ "sqlquack-syntax", "stacker", @@ -4656,8 +4656,8 @@ dependencies = [ [[package]] name = "sqlquack-syntax-databricks" -version = "0.5.1" -source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=e1a583eb6d4180ff4121ef82b3f08b2982edca66#e1a583eb6d4180ff4121ef82b3f08b2982edca66" +version = "0.6.0" +source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a#8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a" dependencies = [ "sqlquack-syntax", "stacker", @@ -4665,8 +4665,8 @@ dependencies = [ [[package]] name = "sqlquack-syntax-duckdb" -version = "0.5.1" -source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=e1a583eb6d4180ff4121ef82b3f08b2982edca66#e1a583eb6d4180ff4121ef82b3f08b2982edca66" +version = "0.6.0" +source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a#8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a" dependencies = [ "sqlquack-syntax", "stacker", @@ -4674,8 +4674,8 @@ dependencies = [ [[package]] name = "sqlquack-syntax-postgres" -version = "0.5.1" -source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=e1a583eb6d4180ff4121ef82b3f08b2982edca66#e1a583eb6d4180ff4121ef82b3f08b2982edca66" +version = "0.6.0" +source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a#8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a" dependencies = [ "sqlquack-syntax", "stacker", @@ -4683,8 +4683,8 @@ dependencies = [ [[package]] name = "sqlquack-syntax-snowflake" -version = "0.5.1" -source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=e1a583eb6d4180ff4121ef82b3f08b2982edca66#e1a583eb6d4180ff4121ef82b3f08b2982edca66" +version = "0.6.0" +source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a#8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a" dependencies = [ "serde", "serde_json", @@ -4696,8 +4696,8 @@ dependencies = [ [[package]] name = "sqlquack-syntax-sqlite" -version = "0.5.1" -source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=e1a583eb6d4180ff4121ef82b3f08b2982edca66#e1a583eb6d4180ff4121ef82b3f08b2982edca66" +version = "0.6.0" +source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a#8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a" dependencies = [ "sqlquack-syntax", "stacker", @@ -4705,8 +4705,8 @@ dependencies = [ [[package]] name = "sqlquack-syntax-sqlserver" -version = "0.5.1" -source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=e1a583eb6d4180ff4121ef82b3f08b2982edca66#e1a583eb6d4180ff4121ef82b3f08b2982edca66" +version = "0.6.0" +source = "git+https://github.com/sqlstack-io/sqlquack.git?rev=8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a#8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a" dependencies = [ "sqlquack-syntax", "stacker", diff --git a/Cargo.toml b/Cargo.toml index af397e0d7..5ad31f726 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -176,22 +176,22 @@ sqlbuild-scopes = { path = "crates/sqlbuild-scopes" } sqlbuild-sqltext = { path = "crates/sqlbuild-sqltext" } sqlbuild-state = { path = "crates/sqlbuild-state" } # SQL lint Rules, quality Rules and the formatter. -sqlclean = { git = "https://github.com/sqlstack-io/sqlclean.git", rev = "be41ae207344e127db81aa42d6a951682c3f35fa" } +sqlclean = { git = "https://github.com/sqlstack-io/sqlclean.git", rev = "6e18af661ce3a6bcc385a38954c86696d722f400" } # SQL change fingerprints over SQLQuack's tokenizers. -sqlquack-fingerprint = { git = "https://github.com/sqlstack-io/sqlquack.git", rev = "e1a583eb6d4180ff4121ef82b3f08b2982edca66", features = ["bigquery", "databricks", "duckdb", "postgres", "snowflake", "sqlite", "sqlserver"] } +sqlquack-fingerprint = { git = "https://github.com/sqlstack-io/sqlquack.git", rev = "8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a", features = ["bigquery", "databricks", "duckdb", "postgres", "snowflake", "sqlite", "sqlserver"] } # Scopes, name resolution, types and lineage for the native analysis route. -sqlquack-semantics = { git = "https://github.com/sqlstack-io/sqlquack.git", rev = "e1a583eb6d4180ff4121ef82b3f08b2982edca66", features = ["bigquery", "clickhouse", "databricks", "duckdb", "postgres", "snowflake", "sqlite", "sqlserver"] } +sqlquack-semantics = { git = "https://github.com/sqlstack-io/sqlquack.git", rev = "8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a", features = ["bigquery", "clickhouse", "databricks", "duckdb", "postgres", "snowflake", "sqlite", "sqlserver"] } # SQLQuack's Snowflake-family parser and tokenizer, reached as SQLQuack exposes them. -sqlquack-parse = { git = "https://github.com/sqlstack-io/sqlquack.git", rev = "e1a583eb6d4180ff4121ef82b3f08b2982edca66" } +sqlquack-parse = { git = "https://github.com/sqlstack-io/sqlquack.git", rev = "8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a" } # SQLQuack's syntax tree and lossless tokens. -sqlquack-syntax = { git = "https://github.com/sqlstack-io/sqlquack.git", rev = "e1a583eb6d4180ff4121ef82b3f08b2982edca66" } -sqlquack-syntax-bigquery = { git = "https://github.com/sqlstack-io/sqlquack.git", rev = "e1a583eb6d4180ff4121ef82b3f08b2982edca66" } -sqlquack-syntax-clickhouse = { git = "https://github.com/sqlstack-io/sqlquack.git", rev = "e1a583eb6d4180ff4121ef82b3f08b2982edca66" } -sqlquack-syntax-databricks = { git = "https://github.com/sqlstack-io/sqlquack.git", rev = "e1a583eb6d4180ff4121ef82b3f08b2982edca66" } -sqlquack-syntax-duckdb = { git = "https://github.com/sqlstack-io/sqlquack.git", rev = "e1a583eb6d4180ff4121ef82b3f08b2982edca66" } -sqlquack-syntax-postgres = { git = "https://github.com/sqlstack-io/sqlquack.git", rev = "e1a583eb6d4180ff4121ef82b3f08b2982edca66" } -sqlquack-syntax-sqlite = { git = "https://github.com/sqlstack-io/sqlquack.git", rev = "e1a583eb6d4180ff4121ef82b3f08b2982edca66" } -sqlquack-syntax-sqlserver = { git = "https://github.com/sqlstack-io/sqlquack.git", rev = "e1a583eb6d4180ff4121ef82b3f08b2982edca66" } +sqlquack-syntax = { git = "https://github.com/sqlstack-io/sqlquack.git", rev = "8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a" } +sqlquack-syntax-bigquery = { git = "https://github.com/sqlstack-io/sqlquack.git", rev = "8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a" } +sqlquack-syntax-clickhouse = { git = "https://github.com/sqlstack-io/sqlquack.git", rev = "8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a" } +sqlquack-syntax-databricks = { git = "https://github.com/sqlstack-io/sqlquack.git", rev = "8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a" } +sqlquack-syntax-duckdb = { git = "https://github.com/sqlstack-io/sqlquack.git", rev = "8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a" } +sqlquack-syntax-postgres = { git = "https://github.com/sqlstack-io/sqlquack.git", rev = "8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a" } +sqlquack-syntax-sqlite = { git = "https://github.com/sqlstack-io/sqlquack.git", rev = "8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a" } +sqlquack-syntax-sqlserver = { git = "https://github.com/sqlstack-io/sqlquack.git", rev = "8d28aa4c4b6c3d8c5345ddef3d620fa24e26741a" } stacker = "0.1" syn = { version = "2", features = ["full", "visit", "extra-traits"] } subtle = "2" diff --git a/crates/sqlbuild-analysis/src/sql_tree/tests/test_sql_tree.rs b/crates/sqlbuild-analysis/src/sql_tree/tests/test_sql_tree.rs index d03ba4442..14eaf3a82 100644 --- a/crates/sqlbuild-analysis/src/sql_tree/tests/test_sql_tree.rs +++ b/crates/sqlbuild-analysis/src/sql_tree/tests/test_sql_tree.rs @@ -26,14 +26,14 @@ fn given_sql_when_building_a_rule_tree_then_clauses_own_their_queries_at_their_s ], }, TreeShapeTestCase { - description: "the shared DuckDB parser leaves a bare star and a subquery's select at their parent's position", + description: "the shared DuckDB parser records a bare star at its own position and a subquery's select at its parent's", dialect: "duckdb", sql: CTE_AND_JOIN_SQL, expected_nodes: vec![ ("select", 1, 1, None), - ("star", 1, 1, Some("select")), ("cte", 1, 6, Some("select")), ("select", 1, 12, Some("cte")), + ("star", 2, 8, Some("select")), ("join", 3, 10, Some("select")), ("select", 3, 15, Some("subquery")), ("subquery", 3, 15, Some("join")), @@ -58,7 +58,7 @@ fn given_sql_when_building_a_rule_tree_then_clauses_own_their_queries_at_their_s ("select", 1, 1, None), ("cte", 1, 6, Some("select")), ("select", 1, 12, Some("cte")), - ("star", 1, 12, Some("select")), + ("star", 1, 19, Some("select")), ("star", 2, 8, Some("select")), ("join", 3, 8, Some("select")), ("join", 3, 49, Some("select")), @@ -86,8 +86,8 @@ fn given_sql_when_building_a_rule_tree_then_clauses_own_their_queries_at_their_s expected_nodes: vec![ ("select", 1, 1, None), ("select", 2, 6, Some("subquery")), - ("star", 2, 6, Some("select")), ("subquery", 2, 6, Some("select")), + ("star", 2, 14, Some("select")), ("join", 2, 43, Some("select")), ("select", 2, 48, Some("subquery")), ("subquery", 2, 48, Some("join")), diff --git a/crates/sqlbuild-rules/src/engine/tests/test_empty_input_tests.rs b/crates/sqlbuild-rules/src/engine/tests/test_empty_input_tests.rs index 92657d96c..d2ae02afe 100644 --- a/crates/sqlbuild-rules/src/engine/tests/test_empty_input_tests.rs +++ b/crates/sqlbuild-rules/src/engine/tests/test_empty_input_tests.rs @@ -231,7 +231,7 @@ fn given_sql_test_shapes_when_evaluating_empty_input_rule_then_flags_only_filler ), allowed_tests: json!([]), expected_messages: &[ - "SQBRTEST203 tests/unit/test_orders__empty_inputs_produce_no_rows.sql: Rule SQBRTEST203 could not be evaluated for test block 1: could not parse SQL-test fixture: Parse error at line 1, column 42: Unexpected token: Limit", + "SQBRTEST203 tests/unit/test_orders__empty_inputs_produce_no_rows.sql: Rule SQBRTEST203 could not be evaluated for test block 1: could not parse SQL-test fixture: Parse error at line 1, column 42: Expected an expression after LIMIT", ], }, test_types::EmptyInputTestRuleTestCase { diff --git a/crates/sqlbuild-rules/src/lint_text/tests/test_lint_text.rs b/crates/sqlbuild-rules/src/lint_text/tests/test_lint_text.rs index 60ea784f5..4416a617e 100644 --- a/crates/sqlbuild-rules/src/lint_text/tests/test_lint_text.rs +++ b/crates/sqlbuild-rules/src/lint_text/tests/test_lint_text.rs @@ -804,7 +804,7 @@ fn given_snowflake_table_function_calls_when_formatting_then_each_call_is_kept_w contents: "MODEL ();\nselect t.a from t join lateral __table_fn(\"f\")(t.x) as l on true\n", expected_formatted: vec![( 0, - "MODEL ();\nSELECT t.a\nFROM t\nJOIN LATERAL __table_fn(\"f\")(t.x) AS l\n ON TRUE\n" + "MODEL ();\nSELECT t.a\nFROM t\nJOIN LATERAL __table_fn(\"f\")(t.x) AS l ON TRUE\n" .to_string(), )], expected_fault_lines: vec![], diff --git a/tests/e2e/src/sqlbuild/cli/commands/main/rules/test_rule_positions.py b/tests/e2e/src/sqlbuild/cli/commands/main/rules/test_rule_positions.py index 788b5698e..3dd38677c 100644 --- a/tests/e2e/src/sqlbuild/cli/commands/main/rules/test_rule_positions.py +++ b/tests/e2e/src/sqlbuild/cli/commands/main/rules/test_rule_positions.py @@ -136,7 +136,7 @@ def test_given_model_query_layout_when_running_rules_then_findings_use_file_posi expected_messages=( "CTE/3:o AS", "Join/3:JOIN", - "Star/3:HASH", + "Star/3:*) A", "Star/3:o.*,", "Subquery/3:(SEL", ), @@ -156,7 +156,7 @@ def test_given_model_query_layout_when_running_rules_then_findings_use_file_posi ) for name in ("customers", "raw_orders") }, - expected_messages=("CTE/2:c AS", "Join/2:JOIN", "Star/2:SELE", "Star/2:o.*,"), + expected_messages=("CTE/2:c AS", "Join/2:JOIN", "Star/2:* FR", "Star/2:o.*,"), ), ], ids=lambda case: case.description, diff --git a/tests/integration/src/sqlbuild/cli/commands/main/test_format.py b/tests/integration/src/sqlbuild/cli/commands/main/test_format.py index db54d8c22..09fcbec0f 100644 --- a/tests/integration/src/sqlbuild/cli/commands/main/test_format.py +++ b/tests/integration/src/sqlbuild/cli/commands/main/test_format.py @@ -1320,7 +1320,7 @@ def test_given_select_all_and_implicit_aliases_when_formatting_then_only_layout_ " o.order_id,\n" " CAST(\n" " COALESCE(o.amount, o.fallback_amount, 0)\n" - " + o.tax AS decimal(18, 2)\n" + " + o.tax AS decimal(18, 2)\n" " ) AS total\n" " FROM orders o\n" " WHERE o.amount > 0\n" @@ -1336,8 +1336,7 @@ def test_given_select_all_and_implicit_aliases_when_formatting_then_only_layout_ " p.order_id,\n" " p.total\n" "FROM paid p\n" - "JOIN labels l\n" - " ON p.order_id = l.order_id\n" + "JOIN labels l ON p.order_id = l.order_id\n" ), ), ],