Joedb 9.1.4
The Journal-Only Embedded Database
Loading...
Searching...
No Matches
File_Connection_Builder.h
Go to the documentation of this file.
1#ifndef joedb_File_Connection_Builder_declared
2#define joedb_File_Connection_Builder_declared
3
7
8#include <iostream>
9
10namespace joedb
11{
12 /// @ingroup ui
14 {
15 private:
16 File_Parser file_parser;
17 std::optional<Readonly_Journal> readonly_journal;
18 std::optional<Writable_Journal> writable_journal;
19 std::unique_ptr<Connection> connection;
20
21 public:
22 const char *get_name() const final {return "file";}
23 int get_min_parameters() const final {return 1;}
24 int get_max_parameters() const final {return 100;}
25
26 const char *get_parameters_description() const final
27 {
28 return "<file>";
29 }
30
31 Connection &build(int argc, char **argv, Buffered_File *file) final
32 {
33 int arg_index = 0;
34 std::ostream null_stream(nullptr);
35 file_parser.parse(null_stream, argc, argv, arg_index);
36
37 if (file_parser.get_file()->is_readonly())
38 {
39 readonly_journal.emplace(*file_parser.get_file());
40 connection.reset(new Pullonly_Journal_Connection(*readonly_journal));
41 }
42 else
43 {
44 writable_journal.emplace(*file_parser.get_file());
45 connection.reset(new Journal_Connection(*writable_journal));
46 }
47
48 return *connection;
49 }
50 };
51}
52
53#endif
bool is_readonly() const noexcept
const char * get_name() const final
const char * get_parameters_description() const final
Connection & build(int argc, char **argv, Buffered_File *file) final
Create an instance of a Buffered_File by parsing command-line arguments.
Definition File_Parser.h:20
Buffered_File * get_file() const
Definition File_Parser.h:56
Buffered_File * parse(std::ostream &out, int argc, char **argv, int &arg_index)
Definition Blob.h:7