Renamed id and id_array to link and link_array

This commit is contained in:
Adrien Bouvais 2024-10-20 17:36:05 +02:00
parent c7d7a01fa8
commit 6b1d3d7495
3 changed files with 51 additions and 36 deletions

View File

@ -70,13 +70,13 @@ pub const FileEngine = struct {
float: f64,
str: []const u8,
bool_: bool,
id: UUID,
link: UUID,
datetime: DateTime,
int_array: std.ArrayList(i64),
str_array: std.ArrayList([]const u8),
float_array: std.ArrayList(f64),
bool_array: std.ArrayList(bool),
id_array: std.ArrayList(UUID),
link_array: std.ArrayList(UUID),
datetime_array: std.ArrayList(DateTime),
};
@ -404,7 +404,7 @@ pub const FileEngine = struct {
}
out_writer.writeAll(data_toker.getTokenSlice(token)) catch return FileEngineError.WriteError;
},
.int_array, .float_array, .bool_array, .id_array => {
.int_array, .float_array, .bool_array => {
out_writer.writeAll(data_toker.getTokenSlice(token)) catch return FileEngineError.WriteError;
token = data_toker.next();
while (token.tag != .r_bracket) : (token = data_toker.next()) {
@ -413,6 +413,10 @@ pub const FileEngine = struct {
}
out_writer.writeAll(data_toker.getTokenSlice(token)) catch return FileEngineError.WriteError;
},
.link => out_writer.writeAll("false") catch return FileEngineError.WriteError, // TODO: Get and send data
.link_array => out_writer.writeAll("false") catch return FileEngineError.WriteError, // TODO: Get and send data
else => out_writer.writeAll(data_toker.getTokenSlice(token)) catch return FileEngineError.WriteError, //write the value as if
}
out_writer.writeAll(", ") catch return FileEngineError.WriteError;
@ -517,7 +521,7 @@ pub const FileEngine = struct {
.str => compare_value = ComparisonValue{ .str = condition.value },
.float => compare_value = ComparisonValue{ .float = s2t.parseFloat(condition.value) },
.bool => compare_value = ComparisonValue{ .bool_ = s2t.parseBool(condition.value) },
.id => compare_value = ComparisonValue{ .id = UUID.parse(condition.value) catch return FileEngineError.InvalidUUID },
.link => compare_value = ComparisonValue{ .link = UUID.parse(condition.value) catch return FileEngineError.InvalidUUID },
.date => compare_value = ComparisonValue{ .datetime = s2t.parseDate(condition.value) },
.time => compare_value = ComparisonValue{ .datetime = s2t.parseTime(condition.value) },
.datetime => compare_value = ComparisonValue{ .datetime = s2t.parseDatetime(condition.value) },
@ -525,7 +529,7 @@ pub const FileEngine = struct {
.str_array => compare_value = ComparisonValue{ .str_array = s2t.parseArrayStr(self.allocator, condition.value) },
.float_array => compare_value = ComparisonValue{ .float_array = s2t.parseArrayFloat(self.allocator, condition.value) },
.bool_array => compare_value = ComparisonValue{ .bool_array = s2t.parseArrayBool(self.allocator, condition.value) },
.id_array => compare_value = ComparisonValue{ .id_array = s2t.parseArrayUUID(self.allocator, condition.value) },
.link_array => compare_value = ComparisonValue{ .link_array = s2t.parseArrayUUID(self.allocator, condition.value) },
.date_array => compare_value = ComparisonValue{ .datetime_array = s2t.parseArrayDate(self.allocator, condition.value) },
.time_array => compare_value = ComparisonValue{ .datetime_array = s2t.parseArrayTime(self.allocator, condition.value) },
.datetime_array => compare_value = ComparisonValue{ .datetime_array = s2t.parseArrayDatetime(self.allocator, condition.value) },
@ -534,12 +538,12 @@ pub const FileEngine = struct {
switch (condition.data_type) {
.int_array => compare_value.int_array.deinit(),
.str_array => {
for (compare_value.str_array.items) |value| self.allocator.free(value);
for (compare_value.str_array.items) |value| self.allocator.free(value); // TODO: Remove that, I should need to free them one by one as condition.value keep it in memory
compare_value.str_array.deinit();
},
.float_array => compare_value.float_array.deinit(),
.bool_array => compare_value.bool_array.deinit(),
.id_array => compare_value.id_array.deinit(),
.link_array => compare_value.link_array.deinit(),
.datetime_array => compare_value.datetime_array.deinit(),
else => {},
}
@ -600,7 +604,7 @@ pub const FileEngine = struct {
.float => compare_value.float == s2t.parseFloat(row_value),
.str => std.mem.eql(u8, compare_value.str, row_value),
.bool => compare_value.bool_ == s2t.parseBool(row_value),
.id => compare_value.id.compare(uuid),
.link => compare_value.link.compare(uuid),
.date => compare_value.datetime.compareDate(s2t.parseDate(row_value)),
.time => compare_value.datetime.compareTime(s2t.parseTime(row_value)),
.datetime => compare_value.datetime.compareDatetime(s2t.parseDatetime(row_value)),
@ -612,6 +616,7 @@ pub const FileEngine = struct {
.float => compare_value.float != s2t.parseFloat(row_value),
.str => !std.mem.eql(u8, compare_value.str, row_value),
.bool => compare_value.bool_ != s2t.parseBool(row_value),
.link => !compare_value.link.compare(uuid),
.date => !compare_value.datetime.compareDate(s2t.parseDate(row_value)),
.time => !compare_value.datetime.compareTime(s2t.parseTime(row_value)),
.datetime => !compare_value.datetime.compareDatetime(s2t.parseDatetime(row_value)),
@ -660,8 +665,8 @@ pub const FileEngine = struct {
// TODO: Do it for other array and implement in the query language
switch (condition.operation) {
.in => switch (condition.data_type) {
.id_array => {
for (compare_value.id_array.items) |elem| {
.link_array => {
for (compare_value.link_array.items) |elem| {
if (elem.compare(uuid)) uuid_array.append(uuid) catch return FileEngineError.MemoryError;
}
},
@ -851,7 +856,7 @@ pub const FileEngine = struct {
reader.streamUntilDelimiter(writer, '\'', null) catch return FileEngineError.StreamError;
reader.streamUntilDelimiter(writer, '\'', null) catch return FileEngineError.StreamError;
},
.int_array, .float_array, .bool_array, .id_array, .date_array, .time_array, .datetime_array => {
.int_array, .float_array, .bool_array, .link_array, .date_array, .time_array, .datetime_array => {
reader.streamUntilDelimiter(writer, ']', null) catch return FileEngineError.StreamError;
},
.str_array => {
@ -878,7 +883,7 @@ pub const FileEngine = struct {
.str => {
new_writer.writeByte('\'') catch return FileEngineError.WriteError;
},
.int_array, .float_array, .bool_array, .id_array, .date_array, .str_array, .time_array, .datetime_array => {
.int_array, .float_array, .bool_array, .link_array, .date_array, .str_array, .time_array, .datetime_array => {
new_writer.writeByte(']') catch return FileEngineError.WriteError;
},
else => {},
@ -887,7 +892,7 @@ pub const FileEngine = struct {
if (i == number_of_member_in_struct - 1) continue;
switch (member_type) {
.str, .int_array, .float_array, .bool_array, .id_array, .date_array, .str_array, .time_array, .datetime_array => {
.str, .int_array, .float_array, .bool_array, .link_array, .date_array, .str_array, .time_array, .datetime_array => {
reader.streamUntilDelimiter(writer, CSV_DELIMITER, null) catch return FileEngineError.StreamError;
},
else => {},

View File

@ -5,7 +5,7 @@ pub const DataType = enum {
float,
str,
bool,
id,
link,
date,
time,
datetime,
@ -13,7 +13,7 @@ pub const DataType = enum {
float_array,
str_array,
bool_array,
id_array,
link_array,
date_array,
time_array,
datetime_array,

View File

@ -574,7 +574,7 @@ pub const Parser = struct {
),
},
.str, .id => switch (token.tag) {
.str => switch (token.tag) {
.string_literal => condition.value = self.toker.getTokenSlice(token),
else => return printError(
"Error: Expected string",
@ -585,6 +585,17 @@ pub const Parser = struct {
),
},
.link => switch (token.tag) {
.uuid_literal => condition.value = self.toker.getTokenSlice(token),
else => return printError(
"Error: Expected string",
ZiQlParserError.SynthaxError,
self.toker.buffer,
token.loc.start,
token.loc.end,
),
},
.bool => switch (token.tag) {
.bool_literal_true, .bool_literal_false => condition.value = self.toker.getTokenSlice(token),
else => return printError(
@ -641,7 +652,7 @@ pub const Parser = struct {
condition.value = self.toker.buffer[start_index..token.loc.end];
},
.id_array => {
.link_array => {
const start_index = token.loc.start;
token = try self.checkTokensInArray(.uuid_literal);
condition.value = self.toker.buffer[start_index..token.loc.end];
@ -699,7 +710,7 @@ pub const Parser = struct {
// TODO: Mqke q function outside the Parser
switch (condition.operation) {
.equal => switch (condition.data_type) {
.int, .float, .str, .bool, .id, .date, .time, .datetime => {},
.int, .float, .str, .bool, .link, .date, .time, .datetime => {},
else => return printError(
"Error: Only int, float, str, bool, date, time, datetime can be compare with =.",
ZiQlParserError.ConditionError,
@ -710,7 +721,7 @@ pub const Parser = struct {
},
.different => switch (condition.data_type) {
.int, .float, .str, .bool, .id, .date, .time, .datetime => {},
.int, .float, .str, .bool, .link, .date, .time, .datetime => {},
else => return printError(
"Error: Only int, float, str, bool, date, time, datetime can be compare with !=.",
ZiQlParserError.ConditionError,
@ -972,7 +983,7 @@ pub const Parser = struct {
self.state = .expect_comma_OR_end;
},
.keyword_null => {
member_map.put(member_name, self.toker.getTokenSlice(token)) catch @panic("Could not add member name and value to map in getMapOfMember");
member_map.put(member_name, self.toker.getTokenSlice(token)) catch return ZipponError.MemoryError;
self.state = .expect_comma_OR_end;
},
else => return printError(
@ -985,7 +996,7 @@ pub const Parser = struct {
},
.date => switch (token.tag) {
.date_literal, .keyword_null => {
member_map.put(member_name, self.toker.getTokenSlice(token)) catch @panic("Could not add member name and value to map in getMapOfMember");
member_map.put(member_name, self.toker.getTokenSlice(token)) catch return ZipponError.MemoryError;
self.state = .expect_comma_OR_end;
},
else => return printError(
@ -998,7 +1009,7 @@ pub const Parser = struct {
},
.time => switch (token.tag) {
.time_literal, .keyword_null => {
member_map.put(member_name, self.toker.getTokenSlice(token)) catch @panic("Could not add member name and value to map in getMapOfMember");
member_map.put(member_name, self.toker.getTokenSlice(token)) catch return ZipponError.MemoryError;
self.state = .expect_comma_OR_end;
},
else => return printError(
@ -1011,7 +1022,7 @@ pub const Parser = struct {
},
.datetime => switch (token.tag) {
.datetime_literal, .keyword_null => {
member_map.put(member_name, self.toker.getTokenSlice(token)) catch @panic("Could not add member name and value to map in getMapOfMember");
member_map.put(member_name, self.toker.getTokenSlice(token)) catch return ZipponError.MemoryError;
self.state = .expect_comma_OR_end;
},
else => return printError(
@ -1024,7 +1035,7 @@ pub const Parser = struct {
},
.str => switch (token.tag) {
.string_literal, .keyword_null => {
member_map.put(member_name, self.toker.getTokenSlice(token)) catch @panic("Could not add member name and value to map in getMapOfMember");
member_map.put(member_name, self.toker.getTokenSlice(token)) catch return ZipponError.MemoryError;
self.state = .expect_comma_OR_end;
},
else => return printError(
@ -1035,9 +1046,9 @@ pub const Parser = struct {
token.loc.end,
),
},
.id => switch (token.tag) {
.link => switch (token.tag) {
.uuid_literal, .keyword_null => {
member_map.put(member_name, self.toker.getTokenSlice(token)) catch @panic("Could not add member name and value to map in getMapOfMember");
member_map.put(member_name, self.toker.getTokenSlice(token)) catch return ZipponError.MemoryError;
self.state = .expect_comma_OR_end;
},
else => return printError(
@ -1048,12 +1059,11 @@ pub const Parser = struct {
token.loc.end,
),
},
// TODO: Maybe upgrade that to use multiple state
.int_array => switch (token.tag) {
.l_bracket => {
const start_index = token.loc.start;
token = try self.checkTokensInArray(.int_literal);
member_map.put(member_name, self.toker.buffer[start_index..token.loc.end]) catch @panic("Couln't add string of array in data map");
member_map.put(member_name, self.toker.buffer[start_index..token.loc.end]) catch return ZipponError.MemoryError;
self.state = .expect_comma_OR_end;
},
else => return printError(
@ -1068,7 +1078,7 @@ pub const Parser = struct {
.l_bracket => {
const start_index = token.loc.start;
token = try self.checkTokensInArray(.float_literal);
member_map.put(member_name, self.toker.buffer[start_index..token.loc.end]) catch @panic("Couln't add string of array in data map");
member_map.put(member_name, self.toker.buffer[start_index..token.loc.end]) catch return ZipponError.MemoryError;
self.state = .expect_comma_OR_end;
},
else => return printError(
@ -1099,7 +1109,7 @@ pub const Parser = struct {
}
}
// Maybe change that as it just recreate a string that is already in the buffer
member_map.put(member_name, self.toker.buffer[start_index..token.loc.end]) catch @panic("Couln't add string of array in data map");
member_map.put(member_name, self.toker.buffer[start_index..token.loc.end]) catch return ZipponError.MemoryError;
self.state = .expect_comma_OR_end;
},
else => return printError(
@ -1114,7 +1124,7 @@ pub const Parser = struct {
.l_bracket => {
const start_index = token.loc.start;
token = try self.checkTokensInArray(.string_literal);
member_map.put(member_name, self.toker.buffer[start_index..token.loc.end]) catch @panic("Couln't add string of array in data map");
member_map.put(member_name, self.toker.buffer[start_index..token.loc.end]) catch return ZipponError.MemoryError;
self.state = .expect_comma_OR_end;
},
else => return printError(
@ -1125,11 +1135,11 @@ pub const Parser = struct {
token.loc.end,
),
},
.id_array => switch (token.tag) {
.link_array => switch (token.tag) {
.l_bracket => {
const start_index = token.loc.start;
token = try self.checkTokensInArray(.uuid_literal);
member_map.put(member_name, self.toker.buffer[start_index..token.loc.end]) catch @panic("Couln't add string of array in data map");
member_map.put(member_name, self.toker.buffer[start_index..token.loc.end]) catch return ZipponError.MemoryError;
self.state = .expect_comma_OR_end;
},
else => return printError(
@ -1144,7 +1154,7 @@ pub const Parser = struct {
.l_bracket => {
const start_index = token.loc.start;
token = try self.checkTokensInArray(.date_literal);
member_map.put(member_name, self.toker.buffer[start_index..token.loc.end]) catch @panic("Couln't add string of array in data map");
member_map.put(member_name, self.toker.buffer[start_index..token.loc.end]) catch return ZipponError.MemoryError;
self.state = .expect_comma_OR_end;
},
else => return printError(
@ -1159,7 +1169,7 @@ pub const Parser = struct {
.l_bracket => {
const start_index = token.loc.start;
token = try self.checkTokensInArray(.time_literal);
member_map.put(member_name, self.toker.buffer[start_index..token.loc.end]) catch @panic("Couln't add string of array in data map");
member_map.put(member_name, self.toker.buffer[start_index..token.loc.end]) catch return ZipponError.MemoryError;
self.state = .expect_comma_OR_end;
},
else => return printError(
@ -1174,7 +1184,7 @@ pub const Parser = struct {
.l_bracket => {
const start_index = token.loc.start;
token = try self.checkTokensInArray(.datetime_literal);
member_map.put(member_name, self.toker.buffer[start_index..token.loc.end]) catch @panic("Couln't add string of array in data map");
member_map.put(member_name, self.toker.buffer[start_index..token.loc.end]) catch return ZipponError.MemoryError;
self.state = .expect_comma_OR_end;
},
else => return printError(