Skip to content

Commit 17be43a

Browse files
cpcloudgforsyth
authored andcommitted
fix(duckdb): ensure that structs can be used with sqlglot 20.1.0
1 parent fb037a6 commit 17be43a

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

ibis/backends/duckdb/compiler.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,16 @@ def _aggregate(self, funcname: str, *args, where):
9292
return sge.Filter(this=expr, expression=sge.Where(this=where))
9393
return expr
9494

95+
def visit_StructColumn(self, op, *, names, values):
96+
return sge.Struct.from_arg_list(
97+
[
98+
sge.PropertyEQ(
99+
this=sg.to_identifier(name, quoted=self.quoted), expression=value
100+
)
101+
for name, value in zip(names, values)
102+
]
103+
)
104+
95105
def visit_ArrayDistinct(self, op, *, arg):
96106
return self.if_(
97107
arg.is_(NULL),
@@ -314,6 +324,18 @@ def visit_NonNullLiteral(self, op, *, value, dtype):
314324
args.append(tz)
315325

316326
return self.f[funcname](*args)
327+
elif dtype.is_struct():
328+
return sge.Struct.from_arg_list(
329+
[
330+
sge.PropertyEQ(
331+
this=sg.to_identifier(k, quoted=self.quoted),
332+
expression=self.visit_Literal(
333+
ops.Literal(v, field_dtype), value=v, dtype=field_dtype
334+
),
335+
)
336+
for field_dtype, (k, v) in zip(dtype.types, value.items())
337+
]
338+
)
317339
else:
318340
return None
319341

0 commit comments

Comments
 (0)