6bfc5b3a3c
CI / test (push) Has been cancelled
CI / verify (push) Has been cancelled
Clients CI / build-server (push) Has been cancelled
Clients CI / test-python (push) Has been cancelled
Clients CI / test-javascript (push) Has been cancelled
Clients CI / test-nim (push) Has been cancelled
Clients CI / test-rust (push) Has been cancelled
- Pure Nim wire protocol client (async + sync, no C FFI) - Query Builder: fluent API, SQL generator, execution, transactions - Schema Builder: create/alter/drop tables, column operations - Connection pool with aging and timeout handling - ORM integration via compile-time DB_BARADB switch - Tests: test_open, test_query - Documentation: README.md, PLAN_BARADB.md
63 lines
1.9 KiB
Nim
63 lines
1.9 KiB
Nim
import std/asyncdispatch
|
|
import std/json
|
|
import ../../src/allographer/query_builder
|
|
import ../../src/allographer/schema_builder
|
|
import ../../src/allographer/connection
|
|
|
|
|
|
let rdb = dbOpen(SurrealDB, "ns", "database", "user", "pass", "http://surreal", 8000, shouldDisplayLog=true).waitFor()
|
|
|
|
rdb.raw("""
|
|
REMOVE TABLE `_sequences`;
|
|
REMOVE EVENT `set_user_index` ON TABLE `user`;
|
|
REMOVE TABLE `user`;
|
|
REMOVE TABLE `auth`;
|
|
""").exec().waitFor()
|
|
|
|
rdb.raw("""
|
|
DEFINE TABLE `_sequences`;
|
|
DEFINE FIELD `table_name` ON TABLE `_sequences` TYPE string;
|
|
DEFINE FIELD `max_index` ON TABLE `_sequences` TYPE int;
|
|
DEFINE INDEX `_sequences_table_name_unique` ON TABLE `_sequences` COLUMNS `table_name` UNIQUE;
|
|
""").exec().waitFor()
|
|
|
|
rdb.raw("""
|
|
DEFINE TABLE `user`;
|
|
INSERT INTO `_sequences` {table_name: "user", max_index: 0};
|
|
DEFINE FIELD `index` ON TABLE `user` TYPE int;
|
|
DEFINE FIELD `name` ON TABLE `user` TYPE string;
|
|
""").exec().waitFor()
|
|
|
|
rdb.raw("""
|
|
DEFINE EVENT `set_user_index` ON TABLE `user` WHEN $event = "CREATE" THEN {
|
|
LET $val = (SELECT `max_index` FROM `_sequences` WHERE `table_name` = "user" LIMIT 1)[0].max_index + 1;
|
|
UPDATE `user` MERGE {index: $val} WHERE id = $after.id;
|
|
UPDATE `_sequences` MERGE {max_index: $val} WHERE table_name = "user";
|
|
};
|
|
""").exec().waitFor()
|
|
|
|
echo rdb.raw("""
|
|
INSERT INTO `user` {name: "user1"};
|
|
SELECT * FROM `user`;
|
|
SELECT * FROM `_sequences`;
|
|
""").info().waitFor()
|
|
|
|
echo rdb.raw("""
|
|
UPDATE `user` MERGE {name: "updated"} WHERE `name` = "user1";
|
|
SELECT * FROM `user`;
|
|
SELECT * FROM `_sequences`;
|
|
""").info().waitFor()
|
|
|
|
|
|
echo rdb.raw("""
|
|
INSERT INTO `user` {name: "user2"};
|
|
SELECT * FROM `user`;
|
|
SELECT * FROM `_sequences`;
|
|
""").info().waitFor()
|
|
|
|
echo rdb.raw("""
|
|
UPDATE `user` MERGE {name: "updated2"} WHERE `name` = "user2";
|
|
SELECT * FROM `user`;
|
|
SELECT * FROM `_sequences`;
|
|
""").info().waitFor()
|