Skip to content

Commit 41603c5

Browse files
committed
fix(snowflake): do not track the varchar length if it is maximum
1 parent 5b768fd commit 41603c5

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

ibis/backends/snowflake/tests/test_datatypes.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,10 @@ def con():
6363
("DOUBLE PRECISION", dt.float64),
6464
("REAL", dt.float64),
6565
("VARCHAR", dt.string),
66-
("VARCHAR(50)", dt.string),
67-
("CHAR", dt.string),
68-
("CHAR(5)", dt.string),
69-
("CHARACTER", dt.string),
66+
("VARCHAR(50)", dt.String(length=50)),
67+
("CHAR", dt.String(length=1)),
68+
("CHAR(5)", dt.String(length=5)),
69+
("CHARACTER", dt.String(length=1)),
7070
("STRING", dt.string),
7171
("TEXT", dt.string),
7272
("BINARY", dt.binary),

ibis/backends/sql/datatypes.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -781,6 +781,17 @@ class SnowflakeType(SqlglotType):
781781

782782
default_temporal_scale = 9
783783

784+
@classmethod
785+
def _from_sqlglot_VARCHAR(
786+
cls, length: sge.DataTypeParam | None = None, nullable: bool | None = None
787+
) -> dt.String:
788+
if length is not None and (bound := length.this.this).isdigit():
789+
bound = int(bound)
790+
else:
791+
bound = None
792+
# treat max length as no length specified
793+
return dt.String(length=bound if bound != 1 << 24 else None, nullable=nullable)
794+
784795
@classmethod
785796
def _from_sqlglot_FLOAT(cls, nullable: bool | None = None) -> dt.Float64:
786797
return dt.Float64(nullable=nullable)

0 commit comments

Comments
 (0)