Joedb 10.0.1
The Journal-Only Embedded Database
Loading...
Searching...
No Matches
joedbc.cpp
Go to the documentation of this file.
2#include "joedb/Multiplexer.h"
8
17
26
30
33
34#include <iostream>
35
36namespace joedb
37{
38 ////////////////////////////////////////////////////////////////////////////
40 ////////////////////////////////////////////////////////////////////////////
41 {
42 private:
43 std::vector<std::string> &names;
44
45 public:
46 explicit Custom_Collector(std::vector<std::string> &names): names(names)
47 {
48 }
49
50 void custom(const std::string &name) override
51 {
52 if (!is_identifier(name))
53 throw Exception("custom: invalid identifier");
54 names.emplace_back(name);
55 }
56 };
57
58 ////////////////////////////////////////////////////////////////////////////
59 static int joedbc(Arguments &arguments)
60 ////////////////////////////////////////////////////////////////////////////
61 {
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");
64
65 if (arguments.missing())
66 {
67 arguments.print_help(std::cerr);
68 return 1;
69 }
70
71 Compiler_Options options;
72 options.exe_path = arguments[0];
73
74 //
75 // Read file.joedbi
76 //
77 {
78 std::ifstream joedbi_file(joedbi_file_name.data());
79 if (!joedbi_file)
80 {
81 std::cerr << "Error: could not open " << joedbi_file_name << '\n';
82 return 1;
83 }
84
85 Writable_Journal journal(options.schema_file);
86 Selective_Writable schema_writable(journal, Selective_Writable::schema);
87 Custom_Collector custom_collector(options.custom_names);
88
89 Multiplexer multiplexer{options.db, schema_writable, custom_collector};
90 Interpreter interpreter(options.db, multiplexer, Record_Id::null);
91 interpreter.set_echo(false);
92 interpreter.set_rethrow(true);
93 interpreter.main_loop(joedbi_file, std::cerr);
94 multiplexer.soft_checkpoint();
95 }
96
97 for (const auto &[tid, tname]: options.db.get_tables())
98 options.table_options[tid];
99
100 //
101 // Read file.joedbc
102 //
103 std::ifstream joedbc_file(joedbc_file_name.data());
104 if (!joedbc_file)
105 {
106 std::cerr << "Error: could not open " << joedbc_file_name << '\n';
107 return 1;
108 }
109
110 try
111 {
112 parse_compiler_options(joedbc_file, options);
113 }
114 catch(...)
115 {
116 std::cerr << "Error parsing .joedbc file: " << joedbc_file_name << '\n';
117 throw;
118 }
119
120 //
121 // Generate code
122 //
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();
129
130 generator::readonly_h(options).generate();
131 generator::readonly_cpp(options).generate();
132
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();
139
140 generator::writable_h(options).generate();
141 generator::writable_cpp(options).generate();
142
143 generator::Client_h(options).generate();
144 generator::File_Client_h(options).generate();
145 generator::Readonly_Client_h(options).generate();
146
147 generator::ids_h(options).generate();
148
149 for (const auto &table: options.db.get_tables())
150 generator::introspection_h(options, table).generate();
151
152 return 0;
153 }
154}
155
156/////////////////////////////////////////////////////////////////////////////
157int main(int argc, char **argv)
158/////////////////////////////////////////////////////////////////////////////
159{
160 return joedb::main_wrapper(joedb::joedbc, argc, argv);
161}
void custom(const std::string &name) override
Definition joedbc.cpp:50
Custom_Collector(std::vector< std::string > &names)
Definition joedbc.cpp:46
Writable with empty insert_vector and delete_vector.
Definition Writable.h:120
static const Record_Id null
Definition index_types.h:44
int main()
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.
Definition Blob.h:7