Rename the project to nim-ladybug, after kuzu's sudden October abandoning. Picked up by a new party under the new name, lets see where this goes!

No new functionality, just rename and docs updates.
This commit is contained in:
Mahlon E. Smith 2025-11-04 09:06:11 -08:00
parent ee0e8a72c0
commit 76718fa49f
Signed by: mahlon
SSH key fingerprint: SHA256:dP84sRGKZRpOOiPD/+GuOq+SHSxEw9qi5BWLQobaHm0
61 changed files with 3030 additions and 2998 deletions

View file

@ -1,10 +1,10 @@
# vim: set et sta sw=4 ts=4 :
import kuzu
import lbug
let db = newKuzuDatabase()
let db = newLbugDatabase()
assert db.path == "(in-memory)"
assert typeOf( db.connect ) is KuzuConnection
assert typeOf( db.connect ) is LbugConnection

View file

@ -1,9 +1,9 @@
# vim: set et sta sw=4 ts=4 :
import kuzu
import lbug
let db = newKuzuDatabase()
let db = newLbugDatabase()
let conn = db.connect
# FIXME: This test should really perform some

View file

@ -1,8 +1,8 @@
# vim: set et sta sw=4 ts=4 :
import kuzu
import lbug
let db = newKuzuDatabase()
let db = newLbugDatabase()
let conn = db.connect
# There is currently no getter for this, so

View file

@ -1,6 +1,6 @@
# vim: set et sta sw=4 ts=4 :
import kuzu
import lbug
assert typeOf( KUZU_DEFAULT_CONFIG ) is kuzu_system_config
assert typeOf( LBUG_DEFAULT_CONFIG ) is lbug_system_config

View file

@ -1,7 +1,7 @@
# vim: set et sta sw=4 ts=4 :
import re
import kuzu
import lbug
assert KUZU_VERSION.contains( re"^\d+\.\d+\.\d+$" )
assert LBUG_VERSION.contains( re"^\d+\.\d+\.\d+$" )

View file

@ -1,8 +1,8 @@
# vim: set et sta sw=4 ts=4 :
import re
import kuzu
import lbug
let version = $kuzuGetVersion()
let version = $lbugGetVersion()
assert version.contains( re"^\d+\.\d+\.\d+(?:\.\d+)?$" )

View file

@ -1,6 +1,6 @@
# vim: set et sta sw=4 ts=4 :
import kuzu
import lbug
assert kuzuGetStorageVersion() >= 36
assert lbugGetStorageVersion() >= 36

View file

@ -1,8 +1,8 @@
# vim: set et sta sw=4 ts=4 :
import kuzu
import lbug
var db = newKuzuDatabase()
var db = newLbugDatabase()
assert db.path == "(in-memory)"
assert db.kind == memory

View file

@ -4,12 +4,12 @@ import
std/files,
std/paths
import kuzu
import lbug
const DATABASE_PATH = Path( "tmp/testdb" )
DATABASE_PATH.removeFile()
var db = newKuzuDatabase( $DATABASE_PATH, kuzuConfig( auto_checkpoint=false ) )
var db = newLbugDatabase( $DATABASE_PATH, lbugConfig( auto_checkpoint=false ) )
assert db.path == "tmp/testdb"
assert db.config.auto_checkpoint == false

View file

@ -5,7 +5,7 @@ import
std/paths,
std/re
import kuzu
import lbug
const NOT_A_DATABASE_PATH = Path( "tmp/not-a-db" )
@ -15,9 +15,9 @@ fh.write( "Hi." )
fh.close
try:
discard newKuzuDatabase( $NOT_A_DATABASE_PATH )
except KuzuException as err:
assert err.msg.contains( re"""Unable to open database: "tmp/not-a-db" Doesn't appear to be a Kuzu file""" )
discard newLbugDatabase( $NOT_A_DATABASE_PATH )
except LbugException as err:
assert err.msg.contains( re"""Unable to open database: "tmp/not-a-db" Doesn't appear to be a LadybugDB file""" )
NOT_A_DATABASE_PATH.removeFile()

View file

@ -4,16 +4,16 @@ import
std/files,
std/paths
import kuzu
import lbug
const DATABASE_PATH = Path( "tmp/testdb" )
DATABASE_PATH.removeFile()
var db = newKuzuDatabase( $DATABASE_PATH )
var db = newLbugDatabase( $DATABASE_PATH )
assert db.path == $DATABASE_PATH
assert db.kind == disk
assert db.config == kuzuConfig()
assert db.config == lbugConfig()
assert db.config.read_only == false
DATABASE_PATH.removeFile()

View file

@ -1,8 +1,8 @@
# vim: set et sta sw=4 ts=4 :
import kuzu
import lbug
let db = newKuzuDatabase()
let db = newLbugDatabase()
let conn = db.connect
var q = conn.query """

View file

@ -4,19 +4,19 @@ discard """
output: "d.thing\nCamel\nLampshade\nDelicious Cake\n"
"""
import kuzu
import lbug
let db = newKuzuDatabase()
let db = newLbugDatabase()
let conn = db.connect
var q = conn.query( "CREATE NODE TABLE Doop ( id SERIAL, thing STRING, PRIMARY KEY(id) )" )
var p = conn.prepare( "CREATE (d:Doop {thing: $thing})" )
assert typeOf( p ) is KuzuPreparedStatement
assert typeOf( p ) is LbugPreparedStatement
for thing in @[ "Camel", "Lampshade", "Delicious Cake" ]:
q = p.execute( (thing: thing) )
assert typeOf( q ) is KuzuQueryResult
assert typeOf( q ) is LbugQueryResult
# Fixed post v0.8.2:
# https://github.com/kuzudb/kuzu/issues/5102

View file

@ -4,9 +4,9 @@ discard """
output: "0|-222222|128|True|Stuff!|3.344903|239.299923|a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11|2025-03-29"
"""
import kuzu
import lbug
let db = newKuzuDatabase()
let db = newLbugDatabase()
let conn = db.connect
var q = conn.query( """CREATE NODE TABLE Doop (
@ -21,7 +21,7 @@ var q = conn.query( """CREATE NODE TABLE Doop (
date DATE,
PRIMARY KEY(id)
)""" )
assert typeOf( q ) is KuzuQueryResult
assert typeOf( q ) is LbugQueryResult
var stmt = conn.prepare( """CREATE (d:Doop {
@ -34,7 +34,7 @@ var stmt = conn.prepare( """CREATE (d:Doop {
uuid: UUID($uuid),
date: DATE($date)
})""" )
assert typeOf( stmt ) is KuzuPreparedStatement
assert typeOf( stmt ) is LbugPreparedStatement
q = stmt.execute((
@ -47,7 +47,7 @@ q = stmt.execute((
uuid: "A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11",
date: "2025-03-29"
))
assert typeOf( q ) is KuzuQueryResult
assert typeOf( q ) is LbugQueryResult
q = conn.query( "MATCH (d:Doop) RETURN d.*" )

View file

@ -4,14 +4,14 @@ discard """
output: "a\nb\nc\nd\ne\nf\n"
"""
import kuzu
import lbug
let db = newKuzuDatabase()
let db = newLbugDatabase()
let conn = db.connect
var q = conn.query( "RETURN 'hi'" )
assert typeOf( q ) is KuzuQueryResult
assert typeOf( q ) is LbugQueryResult
assert q.sets.len == 0
q = conn.query """
@ -23,7 +23,7 @@ q = conn.query """
RETURN "f";
"""
assert typeOf( q ) is KuzuQueryResult
assert typeOf( q ) is LbugQueryResult
assert q.sets.len == 5
echo q.getNext

View file

@ -1,16 +1,16 @@
# vim: set et sta sw=4 ts=4 :
import kuzu
import lbug
let db = newKuzuDatabase()
let db = newLbugDatabase()
let conn = db.connect
var q = conn.query( "CREATE NODE TABLE Doop ( id SERIAL, thing STRING, PRIMARY KEY(id) )" )
assert typeOf( q ) is KuzuQueryResult
assert typeOf( q ) is LbugQueryResult
for thing in @[ "Camel", "Lampshade", "Delicious Cake" ]:
q = conn.query( "CREATE (d:Doop {thing: '" & thing & "'})" )
assert typeOf( q ) is KuzuQueryResult
assert typeOf( q ) is LbugQueryResult
q = conn.query( "MATCH (d:Doop) RETURN d.thing" )
assert q.num_columns == 1

View file

@ -4,9 +4,9 @@ discard """
output: "Camel\nLampshade\nDelicious Cake\n"
"""
import kuzu
import lbug
let db = newKuzuDatabase()
let db = newLbugDatabase()
let conn = db.connect
var q = conn.query( "CREATE NODE TABLE Doop ( id SERIAL, thing STRING, PRIMARY KEY(id) )" )

View file

@ -4,9 +4,9 @@ discard """
output: "Camel\nLampshade\nCamel\nLampshade\n"
"""
import kuzu
import lbug
let db = newKuzuDatabase()
let db = newLbugDatabase()
let conn = db.connect
var q = conn.query( "CREATE NODE TABLE Doop ( id SERIAL, thing STRING, PRIMARY KEY(id) )" )

View file

@ -4,9 +4,9 @@ discard """
output: "d.thing\nokay!\n\n"
"""
import kuzu
import lbug
let db = newKuzuDatabase()
let db = newLbugDatabase()
let conn = db.connect
var q = conn.query( "CREATE NODE TABLE Doop ( id SERIAL, thing STRING, PRIMARY KEY(id) )" )

View file

@ -1,12 +1,12 @@
# vim: set et sta sw=4 ts=4 :
import kuzu
import lbug
let db = newKuzuDatabase()
let db = newLbugDatabase()
let conn = db.connect
var q = conn.query( "CREATE NODE TABLE Doop ( id SERIAL, thing STRING, PRIMARY KEY(id) )" )
assert typeOf( q ) is KuzuQueryResult
assert typeOf( q ) is LbugQueryResult
q = conn.query( "MATCH (d:Doop) RETURN d.thing" )
assert q.num_tuples == 0

View file

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

View file

@ -1,17 +1,17 @@
# vim: set et sta sw=4 ts=4 :
import kuzu
import lbug
let db = newKuzuDatabase()
let db = newLbugDatabase()
let conn = db.connect
var q = conn.query( "CREATE NODE TABLE Doop ( id SERIAL, thing STRING, PRIMARY KEY(id) )" )
assert typeOf( q ) is KuzuQueryResult
assert typeOf( q ) is LbugQueryResult
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"
assert $q.column_types[0] == "LBUG_SERIAL"
assert $q.column_types[1] == "LBUG_STRING"

View file

@ -2,13 +2,13 @@
import
std/re
import kuzu
import lbug
let db = newKuzuDatabase()
let db = newLbugDatabase()
let conn = db.connect
try:
discard conn.query( "NOPE NOPE NOPE" )
except KuzuQueryError as err:
except LbugQueryError as err:
assert err.msg.contains( re"""Parser exception: extraneous input 'NOPE'""" )

View file

@ -2,30 +2,30 @@
import
std/re
import kuzu
import lbug
let db = newKuzuDatabase()
let db = newLbugDatabase()
let conn = db.connect
var q = conn.query( "CREATE NODE TABLE Doop ( id SERIAL, created DATE, PRIMARY KEY(id) )" )
assert typeOf( q ) is KuzuQueryResult
assert typeOf( q ) is LbugQueryResult
var p = conn.prepare( "CREATE (d:Doop {created: $created})" )
assert typeOf( p ) is KuzuPreparedStatement
assert typeOf( p ) is LbugPreparedStatement
# 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.""" )
except LbugQueryError as err:
assert err.msg.contains( re"""Conversion exception: Error occurred during parsing 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:
except LbugQueryError as err:
assert err.msg.contains( re"""Given: "1111-1111". Expected format: \(YYYY-MM-DD\)""" )

View file

@ -2,19 +2,19 @@
import
std/re
import kuzu
import ladybug
let db = newKuzuDatabase()
let db = newLbugDatabase()
let conn = db.connect
var q = conn.query( "CREATE NODE TABLE Doop ( id SERIAL, thing STRING, PRIMARY KEY(id) )" )
var p = conn.prepare( "CREATE (d:Doop {thing: $thing})" )
assert typeOf( p ) is KuzuPreparedStatement
assert typeOf( p ) is LbugPreparedStatement
try:
discard p.execute( (nope: "undefined var in statement!") )
except KuzuQueryError as err:
discard p.execute( (nope: "undefined var in statement!", thing: "yep") )
except LbugQueryError as err:
assert err.msg.contains( re"""Parameter nope not found.""" )

View file

@ -2,19 +2,19 @@
import
std/re
import kuzu
import lbug
let db = newKuzuDatabase()
let db = newLbugDatabase()
let conn = db.connect
var q = conn.query( "CREATE NODE TABLE Doop ( id SERIAL, thing STRING, PRIMARY KEY(id) )" )
var p = conn.prepare( "CREAET (d:Doop {thing: $thing})" )
assert typeOf( p ) is KuzuPreparedStatement
assert typeOf( p ) is LbugPreparedStatement
try:
discard p.execute
except KuzuQueryError as err:
except LbugQueryError as err:
assert err.msg.contains( re"""Parser exception: extraneous input 'CREAET'""" )

View file

@ -4,9 +4,9 @@ discard """
output: "okay!"
"""
import kuzu
import lbug
let db = newKuzuDatabase()
let db = newLbugDatabase()
let conn = db.connect
var q = conn.query( "CREATE NODE TABLE Doop ( id SERIAL, thing STRING, PRIMARY KEY(id) )" )

View file

@ -2,9 +2,9 @@
import
std/re
import kuzu
import lbug
let db = newKuzuDatabase()
let db = newLbugDatabase()
let conn = db.connect
var q = conn.query( "CREATE NODE TABLE Doop ( id SERIAL, thing STRING, PRIMARY KEY(id) )" )
@ -12,6 +12,6 @@ q = conn.query( "MATCH (d:Doop) RETURN d.thing" )
try:
discard q.getNext
except KuzuIterationError as err:
except LbugIterationError as err:
assert err.msg.contains( re"""Query iteration past end.""" )

View file

@ -2,9 +2,9 @@
import
std/re
import kuzu
import lbug
let db = newKuzuDatabase()
let db = newLbugDatabase()
let conn = db.connect
var q = conn.query( "CREATE NODE TABLE Doop ( id SERIAL, thing STRING, PRIMARY KEY(id) )" )
@ -15,6 +15,6 @@ let tup = q.getNext
try:
echo tup[22]
except KuzuIndexError as err:
except LbugIndexError as err:
assert err.msg.contains( re"""Unable to fetch tuple value at idx 22.""" )

View file

@ -4,9 +4,9 @@ discard """
output: "okay!"
"""
import kuzu
import lbug
let db = newKuzuDatabase()
let db = newLbugDatabase()
let conn = db.connect
var q = conn.query( "CREATE NODE TABLE Doop ( id SERIAL, thing STRING, PRIMARY KEY(id) )" )

View file

@ -1,8 +1,8 @@
# vim: set et sta sw=4 ts=4 :
import kuzu
import lbug
let db = newKuzuDatabase()
let db = newLbugDatabase()
let conn = db.connect
var q = conn.query( """CREATE NODE TABLE Doop (

View file

@ -1,8 +1,8 @@
# vim: set et sta sw=4 ts=4 :
import kuzu
import lbug
var db = newKuzuDatabase()
var db = newLbugDatabase()
var conn = db.connect
var q = conn.query( "CREATE NODE TABLE Doot ( id SERIAL, data BLOB, PRIMARY KEY(id) )" )
@ -16,12 +16,12 @@ q = conn.query( "MATCH (d:Doot) RETURN d.data" )
var expected: seq[byte] = @[188, 189, 186, 170]
var val = q.getNext[0]
assert val.kind == KUZU_BLOB
assert val.kind == LBUG_BLOB
assert val.toBlob == expected
expected = @[72, 101, 108, 108, 111, 33]
val = q.getNext[0]
assert val.kind == KUZU_BLOB
assert val.kind == LBUG_BLOB
assert val.toBlob == expected
var str: string

View file

@ -1,39 +1,39 @@
# vim: set et sta sw=4 ts=4 :
import kuzu
import lbug
let db = newKuzuDatabase()
let db = newLbugDatabase()
let conn = db.connect
var q = conn.query( "RETURN [1,2,3,4,5] AS list" )
var list = q.getNext[0]
assert list.kind == KUZU_LIST
assert list.kind == LBUG_LIST
var items = list.toSeq
assert items.len == 5
assert typeOf( items ) is seq[KuzuValue]
assert typeOf( items ) is seq[LbugValue]
for i in items:
assert( i.kind == KUZU_INT64 )
assert( i.kind == LBUG_INT64 )
q = conn.query( """RETURN ["woo", "hoo"] AS list""" )
list = q.getNext[0]
assert list.kind == KUZU_LIST
assert list.kind == LBUG_LIST
items = list.toSeq
assert items.len == 2
assert typeOf( items ) is seq[KuzuValue]
assert typeOf( items ) is seq[LbugValue]
for i in items:
assert( i.kind == KUZU_STRING )
assert( i.kind == LBUG_STRING )
q = conn.query( """RETURN [] AS list""" )
list = q.getNext[0]
assert list.kind == KUZU_LIST
assert list.kind == LBUG_LIST
items = list.toList
assert items.len == 0
assert typeOf( items ) is seq[KuzuValue]
assert typeOf( items ) is seq[LbugValue]

View file

@ -1,14 +1,14 @@
# vim: set et sta sw=4 ts=4 :
import kuzu
import lbug
let db = newKuzuDatabase()
let db = newLbugDatabase()
let conn = db.connect
var q = conn.query( """RETURN 12""" )
try:
discard q.getNext[0].toStruct
except KuzuTypeError:
except LbugTypeError:
discard

View file

@ -1,8 +1,8 @@
# vim: set et sta sw=4 ts=4 :
import kuzu
import lbug
let db = newKuzuDatabase()
let db = newLbugDatabase()
let conn = db.connect
var q = conn.query( "CREATE NODE TABLE Doop ( id SERIAL, thing STRING, PRIMARY KEY(id) )" )
@ -15,7 +15,7 @@ var id = row[0]
var thing = row[1]
var node = row[2]
assert id.kind == KUZU_INT64
assert thing.kind == KUZU_STRING
assert node.kind == KUZU_NODE
assert id.kind == LBUG_INT64
assert thing.kind == LBUG_STRING
assert node.kind == LBUG_NODE

View file

@ -2,9 +2,9 @@
import
std/re
import kuzu
import lbug
let db = newKuzuDatabase()
let db = newLbugDatabase()
let conn = db.connect
var q = conn.query( "CREATE NODE TABLE Doop ( id SERIAL, thing STRING, PRIMARY KEY(id) )" )
@ -14,12 +14,12 @@ q = conn.query( "MATCH (d:Doop) RETURN d" )
var tup = q.getNext
var val = tup[0]
assert val.kind == KUZU_NODE
assert val.kind == LBUG_NODE
try:
discard val.toInt32
except KuzuTypeError as err:
assert err.msg.contains( re"""Mismatched types: KUZU_NODE != {KUZU_INT32}""" )
except LbugTypeError as err:
assert err.msg.contains( re"""Mismatched types: LBUG_NODE != {LBUG_INT32}""" )
q = conn.query( "RETURN 1" )
@ -27,7 +27,7 @@ val = q.getNext[0]
try:
discard val.toStruct
except KuzuTypeError as err:
assert err.msg.contains( re"""Mismatched types: KUZU_INT.* != {KUZU_NODE, KUZU_REL,.*}""" )
except LbugTypeError as err:
assert err.msg.contains( re"""Mismatched types: LBUG_INT.* != {LBUG_NODE, LBUG_REL,.*}""" )

View file

@ -2,9 +2,9 @@
import
std/re
import kuzu
import lbug
let db = newKuzuDatabase()
let db = newLbugDatabase()
let conn = db.connect
var q = conn.query( """RETURN {test1: 1, test2: "bewts"} AS struct""" )
@ -15,7 +15,7 @@ assert struct.keys == @["test1", "test2"]
try:
discard struct["nope"]
except KuzuIndexError as err:
except LbugIndexError as err:
assert err.msg.contains( re"""No such struct key "nope"""" )