Add basic tuple and value fetching from queries.
Add safeties for =destroy hooks. FossilOrigin-Name: 2fae5297a0d0598cc3580777688b4f4307de008d4f379d2fb224c8a74cb9b708
This commit is contained in:
parent
1ed442a68a
commit
7850a79372
14 changed files with 237 additions and 17 deletions
|
|
@ -2,22 +2,47 @@
|
|||
|
||||
proc `=destroy`*( query: KuzuQueryResultObj ) =
|
||||
## Graceful cleanup for out of scope query objects.
|
||||
kuzu_query_result_destroy( addr query.handle )
|
||||
kuzu_query_summary_destroy( addr query.summary )
|
||||
if query.valid:
|
||||
kuzu_query_result_destroy( addr query.handle )
|
||||
kuzu_query_summary_destroy( addr query.summary )
|
||||
|
||||
|
||||
proc query*( conn: KuzuConnection, query: string ): KuzuQueryResult =
|
||||
## Perform a database +query+ and return the result.
|
||||
result = new KuzuQueryResult
|
||||
var rv = kuzu_connection_query( addr conn.handle, query, addr result.handle )
|
||||
if rv == KuzuSuccess:
|
||||
if kuzu_connection_query( addr conn.handle, query, addr result.handle ) == KuzuSuccess:
|
||||
discard kuzu_query_result_get_query_summary( addr result.handle, addr result.summary )
|
||||
result.num_columns = kuzu_query_result_get_num_columns( addr result.handle )
|
||||
result.num_tuples = kuzu_query_result_get_num_tuples( addr result.handle )
|
||||
result.compile_time = kuzu_query_summary_get_compiling_time( addr result.summary )
|
||||
result.execution_time = kuzu_query_summary_get_execution_time( addr result.summary )
|
||||
result.valid = true
|
||||
else:
|
||||
var err = kuzu_query_result_get_error_message( addr result.handle )
|
||||
raise newException( KuzuQueryException, &"Error running query: {err}" )
|
||||
|
||||
|
||||
proc `$`*( query: KuzuQueryResult ): string =
|
||||
## Return the entire result set as a string.
|
||||
result = $kuzu_query_result_to_string( addr query.handle )
|
||||
|
||||
|
||||
proc hasNext*( query: KuzuQueryResult ): bool =
|
||||
## Returns +true+ if there are more tuples to be consumed.
|
||||
result = kuzu_query_result_has_next( addr query.handle )
|
||||
|
||||
|
||||
proc getNext*( query: KuzuQueryResult ): KuzuFlatTuple =
|
||||
result = new KuzuFlatTuple
|
||||
if kuzu_query_result_get_next( addr query.handle, addr result.handle ) == KuzuSuccess:
|
||||
result.valid = true
|
||||
result.num_columns = query.num_columns
|
||||
else:
|
||||
raise newException( KuzuQueryException, &"Unable to fetch next tuple." )
|
||||
|
||||
|
||||
iterator items*( query: KuzuQueryResult ): KuzuFlatTuple =
|
||||
## Iterate available tuples, yielding to the block.
|
||||
while query.hasNext:
|
||||
yield query.getNext
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue