43 std::vector<std::string> &names;
50 void custom(
const std::string &name)
final
53 throw Exception(
"custom: invalid identifier");
54 names.emplace_back(name);
59 static int joedbc_main(
int argc,
char **argv)
68 std::cerr <<
"Usage: " << argv[0] <<
" <file.joedbi> <file.joedbc>\n";
72 const char *
const exe_path = argv[0];
73 const char *
const joedbi_file_name = argv[1];
74 const char *
const joedbc_file_name = argv[2];
76 Compiler_Options options;
77 options.exe_path = std::string(exe_path);
83 std::ifstream joedbi_file(joedbi_file_name);
86 std::cerr <<
"Error: could not open " << joedbi_file_name <<
'\n';
90 Writable_Journal journal(options.schema_file);
92 Custom_Collector custom_collector(options.custom_names);
94 Multiplexer multiplexer{options.db, schema_writable, custom_collector};
95 Interpreter interpreter(options.db, multiplexer,
nullptr, multiplexer, 0);
96 interpreter.set_echo(
false);
97 interpreter.set_rethrow(
true);
98 interpreter.main_loop(joedbi_file, std::cerr);
99 multiplexer.default_checkpoint();
102 for (
const auto &[tid, tname]: options.db.get_tables())
103 options.table_options[tid];
108 std::ifstream joedbc_file(joedbc_file_name);
111 std::cerr <<
"Error: could not open " << joedbc_file_name <<
'\n';
122 std::cerr <<
"Error parsing .joedbc file: " << argv[2] <<
'\n';
129 generator::Database_h(options).generate();
130 generator::Database_cpp(options).generate();
131 generator::Readonly_Database_h(options).generate();
132 generator::Types_h(options).generate();
133 generator::Readable_h(options).generate();
135 generator::readonly_h(options).generate();
136 generator::readonly_cpp(options).generate();
138 generator::Writable_Database_h(options).generate();
139 generator::Writable_Database_cpp(options).generate();
140 generator::File_Database_h(options).generate();
141 generator::Readonly_Interpreted_File_Database_h(options).generate();
142 generator::Interpreted_File_Database_h(options).generate();
143 generator::Multiplexer_h(options).generate();
145 generator::writable_h(options).generate();
146 generator::writable_cpp(options).generate();
148 generator::Client_h(options).generate();
149 generator::File_Client_h(options).generate();
150 generator::Readonly_Client_h(options).generate();
152 generator::ids_h(options).generate();
154 for (
const auto &table: options.db.get_tables())
155 generator::introspection_h(options, table).generate();
Custom_Collector(std::vector< std::string > &names)
void custom(const std::string &name) final
void parse_compiler_options(std::istream &in, Compiler_Options &compiler_options)
int main_exception_catcher(int(*main)(int, char **), int argc, char **argv)
Catch exception from main.
bool is_identifier(const std::string &s)
constexpr const char * get_version()