Skip to content

Commit 1df7f61

Browse files
authored
fix(duckdb)!: refactor length_sql so it handles any type, not just varchar/blob (#4935)
1 parent 7042603 commit 1df7f61

File tree

2 files changed

+4
-4
lines changed

2 files changed

+4
-4
lines changed

sqlglot/dialects/duckdb.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1032,10 +1032,10 @@ def length_sql(self, expression: exp.Length) -> str:
10321032

10331033
case = (
10341034
exp.case(self.func("TYPEOF", arg))
1035-
.when(
1036-
"'VARCHAR'", exp.Anonymous(this="LENGTH", expressions=[varchar])
1037-
) # anonymous to break length_sql recursion
10381035
.when("'BLOB'", self.func("OCTET_LENGTH", blob))
1036+
.else_(
1037+
exp.Anonymous(this="LENGTH", expressions=[varchar])
1038+
) # anonymous to break length_sql recursion
10391039
)
10401040

10411041
return self.sql(case)

tests/dialects/test_bigquery.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1486,7 +1486,7 @@ def test_bigquery(self):
14861486
"snowflake": "SELECT LENGTH(foo)",
14871487
},
14881488
write={
1489-
"duckdb": "SELECT CASE TYPEOF(foo) WHEN 'VARCHAR' THEN LENGTH(CAST(foo AS TEXT)) WHEN 'BLOB' THEN OCTET_LENGTH(CAST(foo AS BLOB)) END",
1489+
"duckdb": "SELECT CASE TYPEOF(foo) WHEN 'BLOB' THEN OCTET_LENGTH(CAST(foo AS BLOB)) ELSE LENGTH(CAST(foo AS TEXT)) END",
14901490
"snowflake": "SELECT LENGTH(foo)",
14911491
"": "SELECT LENGTH(foo)",
14921492
},

0 commit comments

Comments
 (0)