From 6881d1535857e9ac3576136ee4e0d7746d2224cf Mon Sep 17 00:00:00 2001 From: "Mahlon E. Smith" Date: Fri, 18 Jul 2025 15:20:49 -0700 Subject: [PATCH 1/2] Automatically fetch any additional result sets from a query. Move the iterator to an internal seq. --- src/kuzu/queries.nim | 57 ++++++++++--------- src/kuzu/types.nim | 1 + .../t_can_contain_multiple_result_sets.nim | 34 +++++------ 3 files changed, 43 insertions(+), 49 deletions(-) diff --git a/src/kuzu/queries.nim b/src/kuzu/queries.nim index 03fe293..71058bb 100644 --- a/src/kuzu/queries.nim +++ b/src/kuzu/queries.nim @@ -7,7 +7,12 @@ proc `=destroy`*( query: KuzuQueryResultObj ) = kuzu_query_result_destroy( addr query.handle ) -func getQueryMetadata( query: KuzuQueryResult ) = +# Forward declarations. +func hasNextSet( query: KuzuQueryResult ): bool +func getNextSet( query: KuzuQueryResult ): KuzuQueryResult + + +func getQueryMetadata( query: KuzuQueryResult, getAllQueryResults=false ) = ## Find and retain additional data for the query. query.num_columns = kuzu_query_result_get_num_columns( addr query.handle ) query.num_tuples = kuzu_query_result_get_num_tuples( addr query.handle ) @@ -19,6 +24,12 @@ func getQueryMetadata( query: KuzuQueryResult ) = query.execution_time = kuzu_query_summary_get_execution_time( addr summary ) kuzu_query_summary_destroy( addr summary ) + # Pull any additional query results. + query.sets = @[] + if getAllQueryResults: + while query.hasNextSet: + query.sets.add( query.getNextSet ) + # Column information. query.column_types = @[] query.column_names = @[] @@ -48,13 +59,29 @@ func getQueryMetadata( query: KuzuQueryResult ) = kuzu_destroy_string( name ) +func hasNextSet( query: KuzuQueryResult ): bool = + ## Returns +true+ if there are more result sets to be consumed. + result = kuzu_query_result_has_next_query_result( addr query.handle ) + + +func getNextSet( query: KuzuQueryResult ): KuzuQueryResult = + ## Consume and return the next query set result, or raise a KuzuIterationError + ## if at the end of sets. + result = new KuzuQueryResult + if kuzu_query_result_get_next_query_result( addr query.handle, addr result.handle ) == KuzuSuccess: + result.valid = true + result.getQueryMetadata() + else: + raise newException( KuzuIterationError, &"Query iteration past end of set." ) + + func query*( conn: KuzuConnection, query: string ): KuzuQueryResult = ## Perform a database +query+ and return the result. result = new KuzuQueryResult if kuzu_connection_query( addr conn.handle, query, addr result.handle ) == KuzuSuccess: result.valid = true - result.getQueryMetadata() + result.getQueryMetadata( getAllQueryResults=true ) else: var err = kuzu_query_result_get_error_message( addr result.handle ) raise newException( KuzuQueryError, &"Error running query: {err}" ) @@ -162,32 +189,6 @@ func rewind*( query: KuzuQueryResult ) = kuzu_query_result_reset_iterator( addr query.handle ) -func hasNextSet*( query: KuzuQueryResult ): bool = - ## Returns +true+ if there are more result sets to be consumed. - result = kuzu_query_result_has_next_query_result( addr query.handle ) - - -# Keeping this private, because it's only safe to call from within -# an iterator -- overwriting a query variable with the next result -# goes boom. -func getNextSet( query: KuzuQueryResult ): KuzuQueryResult = - ## Consume and return the next query set result, or raise a KuzuIterationError - ## if at the end of sets. - result = new KuzuQueryResult - if kuzu_query_result_get_next_query_result( addr query.handle, addr result.handle ) == KuzuSuccess: - result.valid = true - result.getQueryMetadata() - else: - raise newException( KuzuIterationError, &"Query iteration past end of set." ) - - -iterator sets*( query: KuzuQueryResult ): KuzuQueryResult = - ## Iterate available query result sets, yielding to the block. - while query.hasNextSet: - yield query.getNextSet - # NOTE: There is no 'rewind' mechanism for result sets. - - iterator items*( query: KuzuQueryResult ): KuzuFlatTuple = ## Iterate available tuples, yielding to the block. while query.hasNext: diff --git a/src/kuzu/types.nim b/src/kuzu/types.nim index f5026eb..dc2dbb9 100644 --- a/src/kuzu/types.nim +++ b/src/kuzu/types.nim @@ -21,6 +21,7 @@ type execution_time*: cdouble = 0 column_types*: seq[ kuzu_data_type_id ] column_names*: seq[ string ] + sets*: seq[ KuzuQueryResult ] valid = false KuzuQueryResult* = ref KuzuQueryResultObj diff --git a/tests/queries/t_can_contain_multiple_result_sets.nim b/tests/queries/t_can_contain_multiple_result_sets.nim index d0be2d5..534f871 100644 --- a/tests/queries/t_can_contain_multiple_result_sets.nim +++ b/tests/queries/t_can_contain_multiple_result_sets.nim @@ -1,7 +1,7 @@ # vim: set et sta sw=4 ts=4 : discard """ -output: "Jenny|Lenny\nLenny\nJenny\n" +output: "a\nb\nc\nd\ne\nf\n" """ import kuzu @@ -9,34 +9,26 @@ import kuzu let db = newKuzuDatabase() let conn = db.connect -var q = conn.query """ -CREATE NODE TABLE User( - id SERIAL PRIMARY KEY, - name STRING -); - -CREATE REL TABLE FOLLOWS( - From User To User -); - -MERGE (a:User {name: "Lenny"})-[f:Follows]->(b:User {name: "Jenny"}); -""" - -q = conn.query( "MATCH (u:User) RETURN *" ) +var q = conn.query( "RETURN 'hi'" ) assert typeOf( q ) is KuzuQueryResult -assert q.hasNextSet == false +assert q.sets.len == 0 q = conn.query """ - MATCH (a:User)<-[f:Follows]-(b:User) RETURN a.name, b.name; - MATCH (u:User) RETURN u.name; + RETURN "a"; + RETURN "b"; + RETURN "c"; + RETURN "d"; + RETURN "e"; + RETURN "f"; """ assert typeOf( q ) is KuzuQueryResult -assert q.hasNextSet == true +assert q.sets.len == 5 echo q.getNext -for query_result in q.sets: - for row in query_result.items: +for set in q.sets: + for row in set.items: echo row + From 72da9341fd3e85d3baa4de55ba4d12837c445e6a Mon Sep 17 00:00:00 2001 From: "Mahlon E. Smith" Date: Fri, 18 Jul 2025 20:23:20 -0700 Subject: [PATCH 2/2] Perform magic checks on a database file for better error messaging. --- .gitignore | 3 ++ USAGE.md | 6 ++- experiments/imdb/imdb-results.pdf | Bin 26215 -> 16563 bytes kuzu.nimble | 4 +- src/kuzu.nim | 2 + src/kuzu/constants.nim | 2 +- src/kuzu/database.nim | 38 ++++++++++++++++-- src/kuzu/types.nim | 4 ++ tests/database/t_can_create_in_memory.nim | 1 + .../database/t_checks_for_valid_kuzu_file.nim | 23 +++++++++++ .../t_creates_with_default_config.nim | 1 + 11 files changed, 75 insertions(+), 9 deletions(-) create mode 100644 tests/database/t_checks_for_valid_kuzu_file.nim diff --git a/.gitignore b/.gitignore index 33b6351..c3fcff2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,13 @@ experiments/imdb/* +!experiments/imdb/*.nim +!experiments/imdb/Makefile nimble.paths config.nims tmp/* kuzu nimcache/* tests/* +!tests/*/t_*.nim testresults/* testresults.html diff --git a/USAGE.md b/USAGE.md index 17f5087..23f7682 100644 --- a/USAGE.md +++ b/USAGE.md @@ -358,8 +358,10 @@ Manually rewind the `KuzuQueryResult` via `rewind()`. ## Multiple Query Results -A query can potentially return any number of separate statements. Iterate over -linked `KuzuQueryResult` objects with the `sets()` iterator. +A query can potentially return any number of separate statements. In the case +of more potential `RETURN`s, the query will only contain the first. Iterate +over linked `KuzuQueryResult` objects with the `sets()` iterator to retreive the +remaining: ```nim import kuzu diff --git a/experiments/imdb/imdb-results.pdf b/experiments/imdb/imdb-results.pdf index 5a092e5fc3ddf9f471bb3f4df48640c2a44bfadd..a429af5ae2bda233288123dbdc6afffafaf10e3c 100644 GIT binary patch delta 14471 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