From 05291751cb5a8ea8a7f7273be95aa44a90ed105b Mon Sep 17 00:00:00 2001 From: mahlon <> Date: Mon, 24 Mar 2025 01:18:17 +0000 Subject: [PATCH] Add prepared statement test case. FossilOrigin-Name: 2dff8b1cbbbf37977a9a875f193d902abc8716abe945a821211b3769ea56f7cd --- experiments/prepared-test.c | 79 +++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 experiments/prepared-test.c diff --git a/experiments/prepared-test.c b/experiments/prepared-test.c new file mode 100644 index 0000000..d4c55ac --- /dev/null +++ b/experiments/prepared-test.c @@ -0,0 +1,79 @@ +// vim: set noet sta sw=4 ts=4 : +/* + +Minimal reproduction test case for what seems like +weird prepared statement binding behavior? + +I don't know. Maybe it's just me. + +https://docs.kuzudb.com/get-started/prepared-statements/ +*/ + +#include +#include + +int main() +{ + /* Setup */ + kuzu_system_config config = kuzu_default_system_config(); + kuzu_database db; + kuzu_database_init( "TEST-DB", config, &db ); + + kuzu_connection conn; + kuzu_connection_init( &db, &conn ); + + kuzu_query_result q; + kuzu_prepared_statement stmt; + + char things[3][20] = { "Camel", "Lampshade", "Delicious Cake" }; + + + /* Schema install */ + if ( kuzu_connection_query( + &conn, + "CREATE NODE TABLE Test ( id SERIAL, thing STRING, PRIMARY KEY(id) )", + &q ) != KuzuSuccess ) { + printf( "Couldn't create schema?!\n" ); + return( 1 ); + } + + + /* Prepare statement */ + if ( kuzu_connection_prepare( + &conn, + "CREATE (t:Test {thing: $thing})", + &stmt + ) != KuzuSuccess ) { + printf( "Couldn't prepare statement?\n" ); + return( 1 ); + } + + + /* Lets make some nodes using the prepared statement. */ + for ( int i = 0; i < 3; i++) { + printf( "Binding thing: %s\n", things[i] ); + if ( kuzu_prepared_statement_bind_string( &stmt, "thing", things[i] ) != KuzuSuccess ) { + printf( "Unable to bind thing: %s\n", things[i] ); + } + if ( kuzu_connection_execute( &conn, &stmt, &q ) != KuzuSuccess ) { + printf( "Couldn't execute prepared statement.\n" ); + } + } + + /* Cleanup */ + kuzu_prepared_statement_destroy( &stmt ); + kuzu_query_result_destroy( &q ); + kuzu_connection_destroy( &conn ); + kuzu_database_destroy( &db ); + + /* HMM */ + printf( "Okay. Now 'kuzu TEST-DB' and look around.\n" ); + printf( "\"MATCH (t:Test) RETURN t.thing;\", perhaps.\n\n" ); + printf( "I'd expect to see what I thought I bound.\n" ); + printf( "Instead, I see three Camels.\n" ); + printf( "Too many camels!!\n" ); + + return 0; +} + +