Skip to content

Commit 9e11654

Browse files
Feat(clickhouse): add geometry types (#4278)
* add clickhouse geometry types * Fix test --------- Co-authored-by: Jo <[email protected]>
1 parent 9771965 commit 9e11654

File tree

5 files changed

+49
-0
lines changed

5 files changed

+49
-0
lines changed

sqlglot/dialects/clickhouse.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,12 @@ class Tokenizer(tokens.Tokenizer):
187187
"UINT8": TokenType.UTINYINT,
188188
"IPV4": TokenType.IPV4,
189189
"IPV6": TokenType.IPV6,
190+
"POINT": TokenType.POINT,
191+
"RING": TokenType.RING,
192+
"LINESTRING": TokenType.LINESTRING,
193+
"MULTILINESTRING": TokenType.MULTILINESTRING,
194+
"POLYGON": TokenType.POLYGON,
195+
"MULTIPOLYGON": TokenType.MULTIPOLYGON,
190196
"AGGREGATEFUNCTION": TokenType.AGGREGATEFUNCTION,
191197
"SIMPLEAGGREGATEFUNCTION": TokenType.SIMPLEAGGREGATEFUNCTION,
192198
"SYSTEM": TokenType.COMMAND,
@@ -865,6 +871,12 @@ class Generator(generator.Generator):
865871
exp.DataType.Type.UTINYINT: "UInt8",
866872
exp.DataType.Type.IPV4: "IPv4",
867873
exp.DataType.Type.IPV6: "IPv6",
874+
exp.DataType.Type.POINT: "Point",
875+
exp.DataType.Type.RING: "Ring",
876+
exp.DataType.Type.LINESTRING: "LineString",
877+
exp.DataType.Type.MULTILINESTRING: "MultiLineString",
878+
exp.DataType.Type.POLYGON: "Polygon",
879+
exp.DataType.Type.MULTIPOLYGON: "MultiPolygon",
868880
exp.DataType.Type.AGGREGATEFUNCTION: "AggregateFunction",
869881
exp.DataType.Type.SIMPLEAGGREGATEFUNCTION: "SimpleAggregateFunction",
870882
}
@@ -961,6 +973,12 @@ class Generator(generator.Generator):
961973
exp.DataType.Type.ARRAY,
962974
exp.DataType.Type.MAP,
963975
exp.DataType.Type.STRUCT,
976+
exp.DataType.Type.POINT,
977+
exp.DataType.Type.RING,
978+
exp.DataType.Type.LINESTRING,
979+
exp.DataType.Type.MULTILINESTRING,
980+
exp.DataType.Type.POLYGON,
981+
exp.DataType.Type.MULTIPOLYGON,
964982
}
965983

966984
def strtodate_sql(self, expression: exp.StrToDate) -> str:

sqlglot/expressions.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4320,6 +4320,12 @@ class Type(AutoName):
43204320
FLOAT = auto()
43214321
GEOGRAPHY = auto()
43224322
GEOMETRY = auto()
4323+
POINT = auto()
4324+
RING = auto()
4325+
LINESTRING = auto()
4326+
MULTILINESTRING = auto()
4327+
POLYGON = auto()
4328+
MULTIPOLYGON = auto()
43234329
HLLSKETCH = auto()
43244330
HSTORE = auto()
43254331
IMAGE = auto()

sqlglot/parser.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,12 @@ class Parser(metaclass=_Parser):
356356
TokenType.UUID,
357357
TokenType.GEOGRAPHY,
358358
TokenType.GEOMETRY,
359+
TokenType.POINT,
360+
TokenType.RING,
361+
TokenType.LINESTRING,
362+
TokenType.MULTILINESTRING,
363+
TokenType.POLYGON,
364+
TokenType.MULTIPOLYGON,
359365
TokenType.HLLSKETCH,
360366
TokenType.HSTORE,
361367
TokenType.PSEUDO_TYPE,

sqlglot/tokens.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,12 @@ class TokenType(AutoName):
175175
GEOGRAPHY = auto()
176176
NULLABLE = auto()
177177
GEOMETRY = auto()
178+
POINT = auto()
179+
RING = auto()
180+
LINESTRING = auto()
181+
MULTILINESTRING = auto()
182+
POLYGON = auto()
183+
MULTIPOLYGON = auto()
178184
HLLSKETCH = auto()
179185
HSTORE = auto()
180186
SUPER = auto()

tests/dialects/test_clickhouse.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -645,6 +645,19 @@ def test_signed_and_unsigned_types(self):
645645
write={"clickhouse": f"CAST(pow(2, 32) AS {data_type})"},
646646
)
647647

648+
def test_geom_types(self):
649+
data_types = [
650+
"Point",
651+
"Ring",
652+
"LineString",
653+
"MultiLineString",
654+
"Polygon",
655+
"MultiPolygon"
656+
]
657+
for data_type in data_types:
658+
with self.subTest(f"Casting to ClickHouse {data_type}"):
659+
self.validate_identity(f"SELECT CAST(val AS {data_type})")
660+
648661
def test_ddl(self):
649662
db_table_expr = exp.Table(this=None, db=exp.to_identifier("foo"), catalog=None)
650663
create_with_cluster = exp.Create(

0 commit comments

Comments
 (0)