41 const std::string &command,
42 std::istream ¶meters,
55 if (status == Status::done)
57 else if (command ==
"help")
59 out << R
"RRR(Data manipulation
61 insert_into <table_name> <record_id>
62 insert_vector <table_name> <record_id> <size>
63 update <table_name> <record_id> <field_name> <value>
64 update_vector <table_name> <record_id> <field_name> <N> <v_1> ... <v_N>
65 delete_from <table_name> <record_id>
71 else if (command ==
"insert_into")
73 const Table_Id table_id = parse_table(parameters, readable);
76 parameters >> record_id;
78 record_id = readable.get_last_record_id(table_id) + 1;
80 writable.insert_into(table_id, record_id);
81 if (parameters.good())
82 for (
const auto &[fid, fname]: readable.get_fields(table_id))
84 update_value(parameters, table_id, record_id, fid);
85 if (parameters.fail())
89 else if (command ==
"insert_vector")
91 const Table_Id table_id = parse_table(parameters, readable);
94 parameters >> record_id >> size;
95 writable.insert_vector(table_id, record_id, size);
97 else if (command ==
"update")
99 const Table_Id table_id = parse_table(parameters, readable);
101 parameters >> record_id;
102 std::string field_name;
103 parameters >> field_name;
104 const Field_Id field_id = readable.find_field(table_id, field_name);
105 update_value(parameters, table_id, record_id, field_id);
107 else if (command ==
"update_vector")
109 const Table_Id table_id = parse_table(parameters, readable);
111 parameters >> record_id;
112 std::string field_name;
113 parameters >> field_name;
114 const Field_Id field_id = readable.find_field(table_id, field_name);
118 if (max_record_id != 0 && size >= max_record_id)
122 switch(readable.get_field_type(table_id, field_id).get_type_id())
128 #define TYPE_MACRO(type, return_type, type_id, R, W)\
129 case Type::Type_Id::type_id:\
131 std::vector<type> v(size);\
132 for (size_t i = 0; i < size; i++)\
133 v[i] = joedb::read_##type_id(parameters);\
134 writable.update_vector_##type_id(table_id, record_id, field_id, size, &v[0]);\
141 else if (command ==
"delete_from")
143 const Table_Id table_id = parse_table(parameters, readable);