Skip to content

Commit

Permalink
Fix: normalize before qualifying tables
Browse files Browse the repository at this point in the history
  • Loading branch information
tobymao committed Sep 14, 2023
1 parent 0378325 commit 5ec8e1f
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 16 deletions.
2 changes: 1 addition & 1 deletion sqlglot/optimizer/qualify.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@ def qualify(
The qualified expression.
"""
schema = ensure_schema(schema, dialect=dialect)
expression = qualify_tables(expression, db=db, catalog=catalog, schema=schema)
expression = normalize_identifiers(expression, dialect=dialect)
expression = qualify_tables(expression, db=db, catalog=catalog, schema=schema)

if isolate_tables:
expression = isolate_table_selects(expression, schema=schema)
Expand Down
6 changes: 3 additions & 3 deletions tests/dataframe/unit/test_session_case_sensitivity.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ def setUp(self) -> None:
'"Test"',
{"name": "VARCHAR"},
"name",
'''SELECT "TEST"."NAME" AS "NAME" FROM "Test" AS "TEST"''',
'''SELECT "Test"."NAME" AS "NAME" FROM "Test" AS "Test"''',
),
(
"Column has CS while table does not",
Expand All @@ -41,15 +41,15 @@ def setUp(self) -> None:
'"Test"',
{'"Name"': "VARCHAR"},
'"Name"',
'''SELECT "TEST"."Name" AS "Name" FROM "Test" AS "TEST"''',
'''SELECT "Test"."Name" AS "Name" FROM "Test" AS "Test"''',
),
(
"Lowercase CS table and column",
'"test"',
'"test"',
{'"name"': "VARCHAR"},
'"name"',
'''SELECT "TEST"."name" AS "name" FROM "test" AS "TEST"''',
'''SELECT "test"."name" AS "name" FROM "test" AS "test"''',
),
(
"CS table and column and query table but no CS in query column",
Expand Down
20 changes: 10 additions & 10 deletions tests/fixtures/optimizer/optimizer.sql
Original file line number Diff line number Diff line change
Expand Up @@ -577,10 +577,10 @@ FROM `u_cte` AS `u_cte` PIVOT(SUM(`u_cte`.`f`) AS `sum` FOR `u_cte`.`h` IN ('x',
# dialect: snowflake
SELECT * FROM u PIVOT (SUM(f) FOR h IN ('x', 'y'));
SELECT
"_Q_0"."G" AS "G",
"_Q_0"."'x'" AS "'x'",
"_Q_0"."'y'" AS "'y'"
FROM "U" AS "U" PIVOT(SUM("U"."F") FOR "U"."H" IN ('x', 'y')) AS "_Q_0"
"_q_0"."G" AS "G",
"_q_0"."'x'" AS "'x'",
"_q_0"."'y'" AS "'y'"
FROM "U" AS "U" PIVOT(SUM("U"."F") FOR "U"."H" IN ('x', 'y')) AS "_q_0"
;

# title: selecting all columns from a pivoted source and generating spark
Expand Down Expand Up @@ -668,13 +668,13 @@ WHERE
GROUP BY `dAy`, `top_term`, rank
ORDER BY `DaY` DESC;
SELECT
`top_terms`.`refresh_date` AS `day`,
`top_terms`.`term` AS `top_term`,
`top_terms`.`rank` AS `rank`
FROM `bigquery-public-data`.`GooGle_tReNDs`.`TOp_TeRmS` AS `top_terms`
`TOp_TeRmS`.`refresh_date` AS `day`,
`TOp_TeRmS`.`term` AS `top_term`,
`TOp_TeRmS`.`rank` AS `rank`
FROM `bigquery-public-data`.`GooGle_tReNDs`.`TOp_TeRmS` AS `TOp_TeRmS`
WHERE
`top_terms`.`rank` = 1
AND CAST(`top_terms`.`refresh_date` AS DATE) >= DATE_SUB(CURRENT_DATE, INTERVAL 2 WEEK)
`TOp_TeRmS`.`rank` = 1
AND CAST(`TOp_TeRmS`.`refresh_date` AS DATE) >= DATE_SUB(CURRENT_DATE, INTERVAL 2 WEEK)
GROUP BY
`day`,
`top_term`,
Expand Down
4 changes: 2 additions & 2 deletions tests/test_optimizer.py
Original file line number Diff line number Diff line change
Expand Up @@ -223,12 +223,12 @@ def test_qualify_columns(self, logger):
self.assertEqual(
optimizer.qualify.qualify(
parse_one(
"WITH X AS (SELECT Y.A FROM DB.Y CROSS JOIN a.b.INFORMATION_SCHEMA.COLUMNS) SELECT `A` FROM X",
"WITH X AS (SELECT Y.A FROM DB.y CROSS JOIN a.b.INFORMATION_SCHEMA.COLUMNS) SELECT `A` FROM X",
read="bigquery",
),
dialect="bigquery",
).sql(),
'WITH "x" AS (SELECT "y"."a" AS "a" FROM "DB"."Y" AS "y" CROSS JOIN "a"."b"."INFORMATION_SCHEMA"."COLUMNS" AS "columns") SELECT "x"."a" AS "a" FROM "x"',
'WITH "x" AS (SELECT "y"."a" AS "a" FROM "DB"."y" AS "y" CROSS JOIN "a"."b"."INFORMATION_SCHEMA"."COLUMNS" AS "COLUMNS") SELECT "x"."a" AS "a" FROM "x"',
)

self.assertEqual(
Expand Down

0 comments on commit 5ec8e1f

Please sign in to comment.