8 // This is file was autogenerated, do not modify it manually
15 def escape_string(sql):
16 return sql.translate(str.maketrans({
'"':
r'\"',
'\n':
'\\n'}))
19 def apend_migration(migration_path, header_file):
20 migration_file = open(migration_path,
'r')
21 header_file.write(
"\"")
22 migration_content = migration_file.read()
23 header_file.write(escape_string(migration_content))
26 if __name__ ==
'__main__':
27 if len(sys.argv) != 4:
28 print(
"\nIncorrect arguments")
29 print(
"Usage:\n {} {} {} {}\n".format(sys.argv[0],
"folder_with_schemas",
30 "generated_file_path",
"name_prefix"))
33 sql_folder = sys.argv[1]
34 schemas_header = sys.argv[2]
36 migration_folder = os.path.join(sql_folder,
'migration')
37 rollback_folder = os.path.join(sql_folder,
'rollback')
38 migration_list = sorted(os.listdir(migration_folder))
39 rollback_migrations_list = sorted(os.listdir(rollback_folder))
41 with io.BytesIO()
as outf:
42 out_text = io.TextIOWrapper(outf, write_through=
True)
43 out_text.write(heading_text)
44 out_text.write(
"extern const std::vector<std::string> {}_schema_migrations = {{".format(prefix))
45 for migration
in migration_list[:-1]:
46 apend_migration(os.path.join(migration_folder, migration), out_text)
47 out_text.write(
"\",\n")
48 apend_migration(os.path.join(migration_folder, migration_list[-1]), out_text)
49 out_text.write(
"\"\n};\n")
51 out_text.write(
"extern const std::vector<std::string> {}_schema_rollback_migrations = {{".format(prefix))
52 if len(rollback_migrations_list) > 0:
53 ver = int(rollback_migrations_list[0].split(
".")[1])
55 out_text.write(
"\"\",\n")
56 for migration
in rollback_migrations_list[:-1]:
57 apend_migration(os.path.join(rollback_folder, migration), out_text)
58 out_text.write(
"\",\n")
59 version = int(rollback_migrations_list[-1].split(
".")[1])
60 apend_migration(os.path.join(rollback_folder, rollback_migrations_list[-1]), out_text)
62 out_text.write(
"\n};\n")
64 current_schema = open(os.path.join(sql_folder,
"schema.sql"),
'r').read()
65 current_schema_escaped = escape_string(current_schema)
66 out_text.write(
'extern const std::string %s_current_schema = "%s";' % (prefix, current_schema_escaped));
67 out_text.write(
'extern const int %s_current_schema_version = %u;' % (prefix ,(len(migration_list)-1)));
70 new_content = outf.getvalue()
72 with open(schemas_header,
'r')
as hf:
73 current_content = hf.read().encode()
76 if new_content != current_content:
77 with open(schemas_header,
'wb')
as hf: