11 void SQL_Writable::write_type(Type type)
14 switch(type.get_type_id())
20 case Type::Type_Id::string:
24 case Type::Type_Id::int32:
28 case Type::Type_Id::int64:
32 case Type::Type_Id::reference:
34 out << key_type <<
" REFERENCES ";
39 case Type::Type_Id::boolean:
43 case Type::Type_Id::float32:
47 case Type::Type_Id::float64:
51 case Type::Type_Id::int8:
55 case Type::Type_Id::int16:
59 case Type::Type_Id::blob:
69 out <<
"BEGIN TRANSACTION; -- checkpoint = " << position <<
'\n';
76 out <<
"COMMIT; --checkpoint = " << position <<
'\n';
84 out <<
"CREATE TABLE \"" << name <<
"\"(" << id_field_name <<
85 ' ' << key_type <<
" PRIMARY KEY);\n";
92 out <<
"DROP TABLE \"" << schema.
get_table_name(table_id) <<
"\";\n";
100 const std::string &name
103 out <<
"ALTER TABLE \"" << schema.get_table_name(table_id);
104 out <<
"\" RENAME TO \"" << name <<
"\";\n";
112 const std::string &name,
116 out <<
"ALTER TABLE \"" << schema.get_table_name(table_id);
117 out <<
"\" ADD \"" << name <<
"\" ";
127 out <<
"\" DROP COLUMN \"" << schema.
get_field_name(table_id, field_id) <<
"\";\n";
136 const std::string &name
139 out <<
"ALTER TABLE \"" << schema.get_table_name(table_id) <<
"\" RENAME COLUMN \"";
140 out << schema.get_field_name(table_id, field_id) <<
"\" TO \"" << name <<
"\";\n";
147 out <<
"-- custom: " << name <<
'\n';
154 out <<
"-- " <<
comment <<
'\n';
168 out <<
"-- valid data\n";
176 out <<
"\"(" << id_field_name <<
") VALUES(" << record_id <<
");\n";
183 out <<
"DELETE FROM \"" << schema.
get_table_name(table_id) <<
'"';
184 write_where(record_id);
192 out <<
"\" SET \"" << schema.
get_field_name(table_id, field_id) <<
"\" = ";
196 void SQL_Writable::write_where(Record_Id record_id)
199 out <<
" WHERE " << id_field_name <<
" = " << record_id <<
";\n";
202 #define TYPE_MACRO(type, return_type, type_id, R, W)\
203 void SQL_Writable::update_##type_id\
206 Record_Id record_id,\
211 write_update(table_id, field_id);\
212 write_##type_id(out, value);\
213 write_where(record_id);\
215 #define TYPE_MACRO_NO_STRING
216 #define TYPE_MACRO_NO_BLOB
217 #define TYPE_MACRO_NO_REFERENCE
218 #define TYPE_MACRO_NO_BOOL
222 void SQL_Writable::update_boolean
230 write_update(table_id, field_id);
232 write_where(record_id);
236 void SQL_Writable::update_string
242 const std::string &value)
244 write_update(table_id, field_id);
246 write_where(record_id);
250 void SQL_Writable::update_blob
261 write_update(table_id, field_id);
268 write_where(record_id);
272 void SQL_Writable::update_reference
281 write_update(table_id, field_id);
288 write_where(record_id);
const std::string & get_field_name(Table_Id table_id, Field_Id field_id) const
const std::string & get_table_name(Table_Id table_id) const
void rename_field(Table_Id table_id, Field_Id field_id, const std::string &name) override
void add_field(Table_Id table_id, const std::string &name, Type type) override
void delete_from(Table_Id table_id, Record_Id record_id) override
void timestamp(int64_t timestamp) override
void custom(const std::string &name) override
void rename_table(Table_Id table_id, const std::string &name) override
void drop_field(Table_Id table_id, Field_Id field_id) override
void comment(const std::string &comment) override
void end_writing(int64_t position) override
void drop_table(Table_Id table_id) override
void insert_into(Table_Id table_id, Record_Id record_id) override
void create_table(const std::string &name) override
void valid_data() override
void start_writing(int64_t position) override
std::string get_time_string(int64_t timestamp)
void write_sql_string(std::ostream &out, const std::string &s)