54 lines
1.7 KiB
Zig
54 lines
1.7 KiB
Zig
const std = @import("std");
|
|
const c = @cImport({
|
|
@cInclude("sqlite3.h");
|
|
});
|
|
|
|
const ZBoardDB = struct {
|
|
db: *c.sqlite3,
|
|
|
|
fn init() !ZBoardDB {
|
|
var db: ?*c.sqlite3 = undefined;
|
|
if (c.SQLITE_OK != c.sqlite3_open(":memory:", &db)) {
|
|
std.debug.print("Could not open SQLite3 DB");
|
|
return error.execError;
|
|
}
|
|
|
|
var zboard_db: ZBoardDB = .{ .db = db };
|
|
try zboard_db.execute(
|
|
\\ CREATE TABLE IF NOT EXISTS users (
|
|
\\ id INTEGER PRIMARY KEY,
|
|
\\ username VARCHAR(255) NOT NULL UNIQUE
|
|
\\ );
|
|
\\ CREATE TABLE IF NOT EXISTS topics (
|
|
\\ id INTEGER PRIMARY KEY,
|
|
\\ topic VARCHAR(255) NOT NULL UNIQUE
|
|
\\ );
|
|
\\ CREATE TABLE IF NOT EXISTS threads (
|
|
\\ id INTEGER PRIMARY KEY,
|
|
\\ title VARCHAR(255) NOT NULL UNIQUE,
|
|
\\ topic INTEGER NOT NULL
|
|
\\ );
|
|
\\ CREATE TABLE IF NOT EXISTS posts (
|
|
\\ id INTEGER PRIMARY KEY,
|
|
\\ user_id INTEGER NOT NULL,
|
|
\\ post TEXT NOT NULL,
|
|
\\ thread INTEGER NOT NULL,
|
|
\\ datetime INTEGER NOT NULL
|
|
\\ );
|
|
);
|
|
}
|
|
|
|
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("Failed to execute SQLite3 queury: {s}\n", .{errmsg});
|
|
return error.execError;
|
|
}
|
|
return;
|
|
}
|
|
};
|