diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e64e658 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +zig-cache/ +./build.zig.zon \ No newline at end of file diff --git a/src/main.zig b/src/main.zig index 004b5cc..c7bc64d 100644 --- a/src/main.zig +++ b/src/main.zig @@ -13,8 +13,10 @@ const COLUMN_EMAIL_SIZE = 255; const Row = struct { id: i16, username: [COLUMN_USERNAME_SIZE]u8, email: [COLUMN_EMAIL_SIZE]u8 }; +var Table: [8]Row = undefined; + const StatementType = enum { INSERT, SELECT }; -const Statement = struct { type: StatementType, row_to_insert: Row }; +const Statement = struct { type: StatementType, data_to_insert: [*]anyopaque, data_inserted: usize = 0 }; pub fn new_input_buffer() !*InputBuffer { const input_buffers = try allocator.alloc(InputBuffer, 1); @@ -27,6 +29,14 @@ pub fn new_input_buffer() !*InputBuffer { } pub fn main() !void { + // DEBUG: Temporary data before insert is implemented + Table[0] = Row{ .id = 1, .username = undefined, .email = undefined }; + + std.mem.copyForwards(u8, &Table[0].username, "example"); + std.mem.copyForwards(u8, &Table[0].email, "example@gml.com"); + + // END DEBUG + const input_buffer: *InputBuffer = try new_input_buffer(); // defer std.heap.page_allocator.free(input_buffer); @@ -60,6 +70,10 @@ pub fn main() !void { std.debug.print("Unrecognized keyword at start of {s}\n", .{command}); continue; }, + PrepareResultError.SYNTAX_ERROR => { + std.debug.print("Unrecognized syntax near {s}\n", .{command}); + continue; + }, } }; @@ -103,7 +117,12 @@ pub fn prepare_statement(input_buffer: InputBuffer, statement: *Statement) Prepa if (std.mem.eql(u8, input_buffer.buffer[0..6], "insert")) { statement.type = StatementType.INSERT; - + var data = std.mem.split(u8, input_buffer.buffer[7 .. input_buffer.buffer_length - 1], " "); + + while (data.next()) |field| { + statement.data_to_insert[statement.data_inserted] = &field; + statement.data_inserted += 1; + } return; } @@ -117,11 +136,19 @@ pub fn prepare_statement(input_buffer: InputBuffer, statement: *Statement) Prepa pub fn execute_statement(statement: *Statement) void { switch (statement.type) { - StatementType.INSERT => { - std.debug.print("Your insert command would go here\n", .{}); - }, + StatementType.INSERT => {}, StatementType.SELECT => { - std.debug.print("Your select command would go here\n", .{}); + select_all(); }, } } + +pub fn select_all() void { + std.debug.print("id | username | email\n", .{}); + for (Table) |rowItem| { + if (rowItem.id == 0) return; + std.debug.print("{} {s} {s}\n", .{ rowItem.id, rowItem.username[0..], rowItem.email[0..] }); + } +} + +pub fn insert() !void {}