Checkpoint.
- Add column names and types to KuzuQuery objects. - Start sketching out type conversions. - Add a "kind" method to KuzuValue, that returns its Kuzu type. (type is a reserved word) - Fix some tests for post v0.8.2 behaviors. FossilOrigin-Name: 64c0694e58507ce91f2e0eced106c9fef2a739665ddaa29f60b4ca9fe65678fe
This commit is contained in:
parent
ac222369f0
commit
421cb87e57
8 changed files with 82 additions and 23 deletions
|
|
@ -4,19 +4,55 @@ proc `=destroy`*( query: KuzuQueryResultObj ) =
|
|||
## Graceful cleanup for out of scope query objects.
|
||||
if query.valid:
|
||||
kuzu_query_result_destroy( addr query.handle )
|
||||
kuzu_query_summary_destroy( addr query.summary )
|
||||
|
||||
|
||||
proc getQueryMetadata( query: KuzuQueryResult ) =
|
||||
## 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 )
|
||||
|
||||
# Summary information.
|
||||
var summary: kuzu_query_summary
|
||||
discard kuzu_query_result_get_query_summary( addr query.handle, addr summary )
|
||||
query.compile_time = kuzu_query_summary_get_compiling_time( addr summary )
|
||||
query.execution_time = kuzu_query_summary_get_execution_time( addr summary )
|
||||
kuzu_query_summary_destroy( addr summary )
|
||||
|
||||
# Column information.
|
||||
query.column_types = @[]
|
||||
query.column_names = @[]
|
||||
for idx in ( 0 .. query.num_columns-1 ):
|
||||
|
||||
# types
|
||||
#
|
||||
var logical_type: kuzu_logical_type
|
||||
discard kuzu_query_result_get_column_data_type(
|
||||
addr query.handle,
|
||||
idx,
|
||||
addr logical_type
|
||||
)
|
||||
query.column_types.add( kuzu_data_type_get_id( addr logical_type ))
|
||||
kuzu_data_type_destroy( addr logical_type )
|
||||
|
||||
# names
|
||||
#
|
||||
var name: cstring
|
||||
discard kuzu_query_result_get_column_name(
|
||||
addr query.handle,
|
||||
idx,
|
||||
addr name
|
||||
)
|
||||
query.column_names.add( $name )
|
||||
kuzu_destroy_string( name )
|
||||
|
||||
|
||||
proc 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:
|
||||
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
|
||||
result.valid = true
|
||||
result.getQueryMetadata()
|
||||
else:
|
||||
var err = kuzu_query_result_get_error_message( addr result.handle )
|
||||
raise newException( KuzuQueryException, &"Error running query: {err}" )
|
||||
|
|
|
|||
|
|
@ -18,13 +18,6 @@ proc `[]`*( tpl: KuzuFlatTuple, idx: int ): KuzuValue =
|
|||
if kuzu_flat_tuple_get_value( addr tpl.handle, idx.uint64, addr result.handle ) == KuzuSuccess:
|
||||
result.valid = true
|
||||
|
||||
#
|
||||
# FIXME: type checks and conversions from supported kuzu
|
||||
# types to supported Nim types.
|
||||
#
|
||||
# Currently the value can only be stringified via `$`.
|
||||
#
|
||||
|
||||
else:
|
||||
raise newException( KuzuIndexException,
|
||||
&"Unable to fetch tuple value at idx {idx}. ({tpl.num_columns} column(s).)" )
|
||||
|
|
|
|||
|
|
@ -15,11 +15,12 @@ type
|
|||
|
||||
KuzuQueryResultObj = object
|
||||
handle: kuzu_query_result
|
||||
summary: kuzu_query_summary
|
||||
num_columns*: uint64 = 0
|
||||
num_tuples*: uint64 = 0
|
||||
compile_time*: cdouble = 0
|
||||
execution_time*: cdouble = 0
|
||||
column_types*: seq[ kuzu_data_type_id ]
|
||||
column_names*: seq[ string ]
|
||||
valid = false
|
||||
KuzuQueryResult* = ref KuzuQueryResultObj
|
||||
|
||||
|
|
|
|||
|
|
@ -11,3 +11,33 @@ proc `$`*( value: KuzuValue ): string =
|
|||
result = $kuzu_value_to_string( addr value.handle )
|
||||
|
||||
|
||||
proc kind*( value: KuzuValue ): kuzu_data_type_id =
|
||||
## Find and return the native Kuzu type of this value.
|
||||
var logical_type: kuzu_logical_type
|
||||
kuzu_value_get_data_type( addr value.handle, addr logical_type )
|
||||
result = kuzu_data_type_get_id( addr logical_type )
|
||||
# var num: uint64
|
||||
# discard kuzu_data_type_get_num_elements_in_array( addr logical_type, addr num )
|
||||
# echo "HMMM ", $num
|
||||
kuzu_data_type_destroy( addr logical_type )
|
||||
|
||||
# enum_kuzu_data_type_id_570425857* {.size: sizeof(cuint).} = enum
|
||||
# KUZU_ANY = 0, KUZU_NODE = 10, KUZU_REL = 11, KUZU_RECURSIVE_REL = 12,
|
||||
# KUZU_SERIAL = 13, KUZU_BOOL = 22, KUZU_INT64 = 23, KUZU_INT32 = 24,
|
||||
# KUZU_INT16 = 25, KUZU_INT8 = 26, KUZU_UINT64 = 27, KUZU_UINT32 = 28,
|
||||
# KUZU_UINT16 = 29, KUZU_UINT8 = 30, KUZU_INT128 = 31, KUZU_DOUBLE = 32,
|
||||
# KUZU_FLOAT = 33, KUZU_DATE = 34, KUZU_TIMESTAMP = 35,
|
||||
# KUZU_TIMESTAMP_SEC = 36, KUZU_TIMESTAMP_MS = 37, KUZU_TIMESTAMP_NS = 38,
|
||||
# KUZU_TIMESTAMP_TZ = 39, KUZU_INTERVAL = 40, KUZU_DECIMAL = 41,
|
||||
# KUZU_INTERNAL_ID = 42, KUZU_STRING = 50, KUZU_BLOB = 51, KUZU_LIST = 52,
|
||||
# KUZU_ARRAY = 53, KUZU_STRUCT = 54, KUZU_MAP = 55, KUZU_UNION = 56,
|
||||
# KUZU_POINTER = 58, KUZU_UUID = 59
|
||||
|
||||
# proc getValue*( value: KuzuValue ):
|
||||
#
|
||||
# FIXME: type checks and conversions from supported kuzu
|
||||
# types to supported Nim types.
|
||||
#
|
||||
# Currently the value can only be stringified via `$`.
|
||||
#
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue