14 static int joedbi(
int argc,
char **argv)
17 const bool default_only =
false;
18 const bool include_shared =
false;
20 File_Parser file_parser
29 std::cerr <<
"usage: " << argv[0] <<
" <file> [<blob_file>]\n\n";
30 file_parser.print_help(std::cerr);
36 std::ostream null_stream(
nullptr);
37 Buffered_File &file = *file_parser.parse(null_stream, argc, argv, arg_index);
39 std::optional<File_Parser> blob_file_parser;
40 Buffered_File *blob_file =
nullptr;
44 blob_file_parser.emplace();
45 blob_file = blob_file_parser->parse(null_stream, argc, argv, arg_index);
50 if (file.is_readonly() || (blob_file && blob_file->is_readonly()))
53 Readonly_Journal journal(file);
54 journal.replay_log(db);
55 Readable_Interpreter interpreter(db, blob_file);
56 interpreter.main_loop(std::cin, std::cout);
60 Connection connection;
61 Writable_Database_Client client(file, connection);
63 std::optional<Writable_Journal> blob_journal;
66 blob_journal.emplace(*blob_file);
67 blob_journal->append();
70 client.transaction([blob_file, &blob_journal]
72 const Readable &readable,
76 Writable &blob_writer = blob_journal ? *blob_journal : writable;
77 Interpreter interpreter(readable, writable, blob_file, blob_writer, 0);
78 interpreter.main_loop(std::cin, std::cout);
80 blob_journal->default_checkpoint();
89int main(
int argc,
char **argv)
@ write_existing_or_create_new
either write_existing or create_new depending on whether the file exists. Racy in Posix,...
int main_exception_catcher(int(*main)(int, char **), int argc, char **argv)
Catch exception from main.