Я использую flatbuffers для сериализации строк из таблиц SQL.У меня есть Statement.fbs, который определяет оператор как Вставить, Обновить, Удалить и т. Д. У оператора есть член «Строка», который является объединением всех типов таблиц SQL.Однако у меня более 255 таблиц, и я получаю эту ошибку при компиляции с помощью flatc:
$ ~/flatbuffers/flatc --cpp -o gen Statement.fbs
error: /home/jkl/fbtest/allobjects.fbs:773: 18: error: enum value does not fit [0; 255]
Я просмотрел код flatbuffers и вижу, что перечисление автоматически создается для типов объединения и что базовый типэтого перечисления uint8_t.
Я не вижу никаких вариантов для изменения этого поведения.
Я могу создать перечисление, которое обрабатывает все мои таблицы, указав базовый тип для uint16 вмой файл схемы flatbuffer.
Схема оператора:
include "allobjects.fbs";
namespace Database;
enum StatementKind : byte { Unknown = 0, Insert, Update, Delete, Truncate }
table Statement {
kind:StatementKind;
truncate:[TableKind];
row:Row;
}
root_type Statement;
Объединение строк аллобуктов немного велико для включения в него.
union Row {
TypeA,
TypeB,
TypeC,
Etc,
...
}
Полагаю, этоПри проектном решении для плоских буферов типы объединения должны использовать только один байт.Я могу принять это, но мне бы очень хотелось обойти это решение.