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';
83 out <<
"CREATE TABLE \"" << name <<
"\"(" << id_field_name <<
84 ' ' << key_type <<
" PRIMARY KEY);\n";
91 out <<
"DROP TABLE \"" << schema.
get_table_name(table_id) <<
"\";\n";
99 const std::string &name
102 out <<
"ALTER TABLE \"" << schema.get_table_name(table_id);
103 out <<
"\" RENAME TO \"" << name <<
"\";\n";
111 const std::string &name,
115 out <<
"ALTER TABLE \"" << schema.get_table_name(table_id);
116 out <<
"\" ADD \"" << name <<
"\" ";
128 out <<
"\" DROP COLUMN \"" << schema.
get_field_name(table_id, field_id) <<
"\";\n";
137 const std::string &name
140 out <<
"ALTER TABLE \"" << schema.get_table_name(table_id) <<
"\" RENAME COLUMN \"";
141 out << schema.get_field_name(table_id, field_id) <<
"\" TO \"" << name <<
"\";\n";
148 out <<
"-- custom: " << name <<
'\n';
155 out <<
"-- " <<
comment <<
'\n';
169 out <<
"-- valid data\n";
177 out <<
"\"(" << id_field_name <<
") VALUES(" << record_id <<
");\n";
184 out <<
"DELETE FROM \"" << schema.
get_table_name(table_id) <<
'"';
185 write_where(record_id);
193 out <<
"\" SET \"" << schema.
get_field_name(table_id, field_id) <<
"\" = ";
197 void SQL_Writable::write_where(
Record_Id record_id)
200 out <<
" WHERE " << id_field_name <<
" = " << record_id <<
";\n";
203 #define TYPE_MACRO(type, return_type, type_id, R, W)\
204 void SQL_Writable::update_##type_id\
207 Record_Id record_id,\
212 write_update(table_id, field_id);\
213 write_##type_id(out, value);\
214 write_where(record_id);\
216 #define TYPE_MACRO_NO_STRING
217 #define TYPE_MACRO_NO_BLOB
218 #define TYPE_MACRO_NO_REFERENCE
219 #define TYPE_MACRO_NO_BOOL
223 void SQL_Writable::update_boolean
231 write_update(table_id, field_id);
233 write_where(record_id);
237 void SQL_Writable::update_string
243 const std::string &value)
245 write_update(table_id, field_id);
247 write_where(record_id);
251 void SQL_Writable::update_blob
262 write_update(table_id, field_id);
269 write_where(record_id);
273 void SQL_Writable::update_reference
282 write_update(table_id, field_id);
289 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 drop_table(Table_Id table_id) final
void insert_into(Table_Id table_id, Record_Id record_id) final
void custom(const std::string &name) final
void rename_field(Table_Id table_id, Field_Id field_id, const std::string &name) final
void timestamp(int64_t timestamp) final
void delete_from(Table_Id table_id, Record_Id record_id) final
void drop_field(Table_Id table_id, Field_Id field_id) final
void add_field(Table_Id table_id, const std::string &name, Type type) final
void soft_checkpoint_at(int64_t position)
void comment(const std::string &comment) final
void rename_table(Table_Id table_id, const std::string &name) final
void start_writing(int64_t position)
void create_table(const std::string &name) final
std::string get_time_string(int64_t timestamp)
void write_sql_string(std::ostream &out, const std::string &s)