From 217bdb1c1ee85deb427fda7388f8742616eef836 Mon Sep 17 00:00:00 2001 From: Warwick New Date: Mon, 25 Nov 2024 12:42:28 +0000 Subject: [PATCH] created half baked database interface --- ZboardDB.zig | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 ZboardDB.zig diff --git a/ZboardDB.zig b/ZboardDB.zig new file mode 100644 index 0000000..242d46f --- /dev/null +++ b/ZboardDB.zig @@ -0,0 +1,75 @@ +const std = @import("std"); +const c = @cImport({ + @cInclude("sqlite3.h"); +}); + +const ZBoardDB = struct { + db: *c.sqlite3, + + pub fn init() !ZBoardDB { + var c_db: ?*c.sqlite3 = undefined; + if (c.SQLITE_OK != c.sqlite3_open(":memory:", &c_db)) { + return error.DBInitError; + } + + const db: ZBoardDB = .{ .db = c_db }; + + try db.execute( + \\ CREATE TABLE IF NOT EXISTS users ( + \\ id INTEGER PRIMARY KEY, + \\ name VARCHAR(255) NOT NULL UNIQUE + \\ ); + \\ CREATE TABLE IF NOT EXISTS topics ( + \\ id INTEGER PRIMARY KEY, + \\ topic VARCHAR(255) NOT NULL UNIQUE, + \\ user_id INTEGER NOT NULL REFERENCES users(id) + \\ ); + \\ id INTEGER PRIMARY KEY, + \\ title VARCHAR(255) NOT NULL UNIQUE, + \\ topic_id INTEGER NOT NULL REFERENCES topics(id), + \\ user_id INTEGER NOT NULL REFERENCES users(id) + \\ ); + \\ CREATE TABLE IF NOT EXISTS posts ( + \\ id INTEGER PRIMARY KEY, + \\ content TEXT NOT NULL, + \\ thread_id INTEGER NOT NULL REFERENCES threads(id), + \\ user_id INTEGER NOT NULL REFERENCES users(id), + \\ epoch INTEGER NOT NULL + \\ ); + ); + + return db; + } + + pub fn deinit(self: ZBoardDB) !void { + _ = c.sqlite3_close(self.db); + } + + fn execute(self: ZBoardDB, query: [:0]const u8) !void { + var errmsg: [*c]u8 = undefined; + if (c.SQLITE_OK != c.sqlite3_exec(self.db, query, null, null, &errmsg)) { + defer c.sqlite3_free(errmsg); + std.debug.print("Exec query failed: {s}\n", .{errmsg}); + return error.execError; + } + return; + } + + fn getCurrentUser() !void {} + + fn createUser() !void {} + fn deleteUser() !void {} + + fn createTopic() !void {} + fn deleteTopic() !void {} + + fn createThread() !void {} + fn deleteThread() !void {} + + fn createPost() !void {} + fn deletePost() !void {} + + fn getTopics() !void {} + fn getThreadsByTopic() !void {} + fn getPostsByThread() !void {} +};