Multiple changes.

- Minor README updates.
- Create LICENSE and History files.
- Use 'func' instead of 'proc' where applicable.
- Add some destructor debug.
- Rename primary exceptions to 'X-error'.
- Bind to proper object types in prepared statement parameters.
- Retain the found 'type' in the KuzuValue object.

FossilOrigin-Name: db59c0b901b1715170e0d269fc2bf00477ac48af4d10a747eb5a749adbf6268e
This commit is contained in:
mahlon 2025-03-29 23:17:10 +00:00
parent 421cb87e57
commit db85c36d70
22 changed files with 284 additions and 162 deletions

View file

@ -0,0 +1,55 @@
# vim: set et sta sw=4 ts=4 :
discard """
output: "0|-222222|128|True|Stuff!|3.344903|239.299923|a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11|2025-03-29"
"""
import kuzu
let db = newKuzuDatabase()
let conn = db.connect
var q = conn.query( """CREATE NODE TABLE Doop (
id SERIAL,
num INT,
unum UINT8,
woo BOOL,
thing STRING,
float FLOAT,
double DOUBLE,
uuid UUID,
date DATE,
PRIMARY KEY(id)
)""" )
assert typeOf( q ) is KuzuQueryResult
var stmt = conn.prepare( """CREATE (d:Doop {
woo: $woo,
thing: $thing,
num: $num,
unum: $unum,
float: $float,
double: $double,
uuid: UUID($uuid),
date: DATE($date)
})""" )
assert typeOf( stmt ) is KuzuPreparedStatement
q = stmt.execute((
woo: true,
thing: "Stuff!",
num: -222222,
unum: 128,
float: 3.34490345039450345,
double: 239.299922883992,
uuid: "A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11",
date: "2025-03-29"
))
assert typeOf( q ) is KuzuQueryResult
q = conn.query( "MATCH (d:Doop) RETURN d.*" )
echo $q.getNext

View file

@ -0,0 +1,17 @@
# vim: set et sta sw=4 ts=4 :
import kuzu
let db = newKuzuDatabase()
let conn = db.connect
var q = conn.query( "CREATE NODE TABLE Doop ( id SERIAL, thing STRING, PRIMARY KEY(id) )" )
assert typeOf( q ) is KuzuQueryResult
q = conn.query( "CREATE (d:Doop {thing: 'okay!'})" )
q = conn.query( "MATCH (d:Doop) RETURN d.id AS IDENTIFIER, d.thing AS THING" )
assert q.column_names.len == 2
assert q.column_names[0] == "IDENTIFIER"
assert q.column_names[1] == "THING"

View file

@ -0,0 +1,17 @@
# vim: set et sta sw=4 ts=4 :
import kuzu
let db = newKuzuDatabase()
let conn = db.connect
var q = conn.query( "CREATE NODE TABLE Doop ( id SERIAL, thing STRING, PRIMARY KEY(id) )" )
assert typeOf( q ) is KuzuQueryResult
q = conn.query( "CREATE (d:Doop {thing: 'okay!'})" )
q = conn.query( "MATCH (d:Doop) RETURN d.id AS IDENTIFIER, d.thing AS THING" )
assert q.column_types.len == 2
assert $q.column_types[0] == "KUZU_SERIAL"
assert $q.column_types[1] == "KUZU_STRING"

View file

@ -9,6 +9,6 @@ let conn = db.connect
try:
discard conn.query( "NOPE NOPE NOPE" )
except KuzuQueryException as err:
assert err.msg.contains( re"""Error running query:.*extraneous input 'NOPE'""" )
except KuzuQueryError as err:
assert err.msg.contains( re"""Parser exception: extraneous input 'NOPE'""" )

View file

@ -0,0 +1,31 @@
# vim: set et sta sw=4 ts=4 :
import
std/re
import kuzu
let db = newKuzuDatabase()
let conn = db.connect
var q = conn.query( "CREATE NODE TABLE Doop ( id SERIAL, created DATE, PRIMARY KEY(id) )" )
assert typeOf( q ) is KuzuQueryResult
var p = conn.prepare( "CREATE (d:Doop {created: $created})" )
assert typeOf( p ) is KuzuPreparedStatement
# Typecast binding failure
#
try:
discard p.execute( (created: "1111-1111") )
except KuzuQueryError as err:
assert err.msg.contains( re"""Expression \$created has data type STRING but expected DATE.""" )
# Invalid value for typecast
#
p = conn.prepare( "CREATE (d:Doop {created: DATE($created)})" )
try:
discard p.execute( (created: "1111-1111") )
except KuzuQueryError as err:
assert err.msg.contains( re"""Given: "1111-1111". Expected format: \(YYYY-MM-DD\)""" )

View file

@ -14,7 +14,7 @@ assert typeOf( p ) is KuzuPreparedStatement
try:
discard p.execute( (nope: "undefined var in statement!") )
except KuzuQueryException as err:
except KuzuQueryError as err:
assert err.msg.contains( re"""Parameter nope not found.""" )

View file

@ -14,7 +14,7 @@ assert typeOf( p ) is KuzuPreparedStatement
try:
discard p.execute
except KuzuQueryException as err:
assert err.msg.contains( re""".*Error executing prepared statement:.*CREAET""" )
except KuzuQueryError as err:
assert err.msg.contains( re"""Parser exception: extraneous input 'CREAET'""" )