diff --git a/sqlglot/dialects/bigquery.py b/sqlglot/dialects/bigquery.py index d8769ceb1c..a93c98ee16 100644 --- a/sqlglot/dialects/bigquery.py +++ b/sqlglot/dialects/bigquery.py @@ -203,8 +203,10 @@ def normalize_identifier(cls, expression: E) -> E: while isinstance(parent, exp.Dot): parent = parent.parent - if not (isinstance(parent, exp.Table) and parent.db) and not expression.meta.get( - "is_table" + if ( + not isinstance(parent, exp.UserDefinedFunction) + and not (isinstance(parent, exp.Table) and parent.db) + and not expression.meta.get("is_table") ): expression.set("this", expression.this.lower()) diff --git a/tests/test_optimizer.py b/tests/test_optimizer.py index 40eef9fe14..56b36eea03 100644 --- a/tests/test_optimizer.py +++ b/tests/test_optimizer.py @@ -229,6 +229,17 @@ def test_qualify_columns(self): '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( + optimizer.qualify.qualify( + parse_one( + "CREATE FUNCTION udfs.`myTest`(`x` FLOAT64) AS (1)", + read="bigquery", + ), + dialect="bigquery", + ).sql(dialect="bigquery"), + "CREATE FUNCTION `udfs`.`myTest`(`x` FLOAT64) AS (1)", + ) + self.check_file("qualify_columns", qualify_columns, execute=True, schema=self.schema) def test_qualify_columns__with_invisible(self):