43 std::vector<std::string> &names;
50 void custom(
const std::string &name)
override
53 throw Exception(
"custom: invalid identifier");
54 names.emplace_back(name);
59 static int joedbc(Arguments &arguments)
62 const std::string_view joedbi_file_name = arguments.get_next(
"file.joedbi");
63 const std::string_view joedbc_file_name = arguments.get_next(
"file.joedbc");
65 if (arguments.missing())
67 arguments.print_help(std::cerr);
71 Compiler_Options options;
72 options.exe_path = arguments[0];
78 std::ifstream joedbi_file(joedbi_file_name.data());
81 std::cerr <<
"Error: could not open " << joedbi_file_name <<
'\n';
85 Writable_Journal journal(options.schema_file);
87 Custom_Collector custom_collector(options.custom_names);
89 Multiplexer multiplexer{options.db, schema_writable, custom_collector};
91 interpreter.set_echo(
false);
92 interpreter.set_rethrow(
true);
93 interpreter.main_loop(joedbi_file, std::cerr);
94 multiplexer.soft_checkpoint();
97 for (
const auto &[tid, tname]: options.db.get_tables())
98 options.table_options[tid];
103 std::ifstream joedbc_file(joedbc_file_name.data());
106 std::cerr <<
"Error: could not open " << joedbc_file_name <<
'\n';
116 std::cerr <<
"Error parsing .joedbc file: " << joedbc_file_name <<
'\n';
123 generator::Database_h(options).generate();
124 generator::Database_Writable_h(options).generate();
125 generator::Database_Writable_cpp(options).generate();
126 generator::Readonly_Database_h(options).generate();
127 generator::Types_h(options).generate();
128 generator::Readable_h(options).generate();
130 generator::readonly_h(options).generate();
131 generator::readonly_cpp(options).generate();
133 generator::Writable_Database_h(options).generate();
134 generator::Writable_Database_cpp(options).generate();
135 generator::File_Database_h(options).generate();
136 generator::Readonly_Interpreted_File_Database_h(options).generate();
137 generator::Interpreted_File_Database_h(options).generate();
138 generator::Multiplexer_h(options).generate();
140 generator::writable_h(options).generate();
141 generator::writable_cpp(options).generate();
143 generator::Client_h(options).generate();
144 generator::File_Client_h(options).generate();
145 generator::Readonly_Client_h(options).generate();
147 generator::ids_h(options).generate();
149 for (
const auto &table: options.db.get_tables())
150 generator::introspection_h(options, table).generate();
void custom(const std::string &name) override
Custom_Collector(std::vector< std::string > &names)
Writable with empty insert_vector and delete_vector.
static const Record_Id null
void parse_compiler_options(std::istream &in, Compiler_Options &compiler_options)
bool is_identifier(const std::string &s)
int main_wrapper(int(*main)(Arguments &), int argc, char **argv)
Process command-line arguments and catch exceptions from main.