Sören
Sören
MModular
Created by Sören on 7/9/2024 in #community-showcase
DuckDB Bindings
Slides from the presentation at today's community meeting: https://blog.brunk.io/slides/2024-08-12-mojo-community-meeting-duckdb/
3 replies
MModular
Created by Sören on 7/9/2024 in #community-showcase
DuckDB Bindings
I've improved the API with a bit of type foo to return native Mojo types, even for nested types like lists (column types in DuckDB can be arbitrarily deeply nested). Before this change results were always in returned in wrapper types like [ListVal[Int32Val]] and we had to peel them out one by one. Now we call i.e. chunk.get(list(string), row=0, col=0) and it will return a List[Optional[String] directly. This should make the API a bit more ergonomic to use:
var con = DuckDB.connect(":memory:")
var chunk = con.execute("SELECT ['a',NULL,'c']").fetch_chunk()
var column_result: List[Optional[String]] = chunk.get(list(string), row=0, col=0).value()
for elem in column_result:
print(elem[].or_else("NULL"), end=" ") # a NULL c

print()
var int_chunk = con.execute("SELECT unnest(range(10))").fetch_chunk()
var int_result: Int64 = int_chunk.get(int64, row=9, col=0).value()
print(int_result) # 9

for elem in int_chunk.get(int64, col=0):
print(elem[].value(), end="") # 0123456789
var con = DuckDB.connect(":memory:")
var chunk = con.execute("SELECT ['a',NULL,'c']").fetch_chunk()
var column_result: List[Optional[String]] = chunk.get(list(string), row=0, col=0).value()
for elem in column_result:
print(elem[].or_else("NULL"), end=" ") # a NULL c

print()
var int_chunk = con.execute("SELECT unnest(range(10))").fetch_chunk()
var int_result: Int64 = int_chunk.get(int64, row=9, col=0).value()
print(int_result) # 9

for elem in int_chunk.get(int64, col=0):
print(elem[].value(), end="") # 0123456789
3 replies