44 std::string
table_name()
const override {
return "users"; }
48 field_constraint::primary_key | field_constraint::auto_increment)
50 field_constraint::not_null | field_constraint::unique)
52 field_constraint::not_null | field_constraint::unique)
54 ENTITY_FIELD(
bool, is_active, field_constraint::not_null)
59 bool
save()
override {
return false; }
60 bool load()
override {
return false; }
61 bool update()
override {
return false; }
62 bool remove()
override {
return false; }
119 std::cout <<
"=== orm_entity_demo example ===" << std::endl;
124 std::cout <<
"\n--- User entity metadata ---" << std::endl;
129 std::cout <<
"Table: " << meta.
table_name() << std::endl;
130 std::cout <<
"Fields:" << std::endl;
132 for (
const auto& field : meta.fields())
134 std::cout <<
" " << field.name()
135 <<
" (" << field.type_name() <<
")";
137 if (field.is_primary_key())
139 std::cout <<
" [PK]";
141 if (field.is_auto_increment())
143 std::cout <<
" [AUTO]";
145 if (field.is_not_null())
147 std::cout <<
" [NOT NULL]";
149 if (field.is_unique())
151 std::cout <<
" [UNIQUE]";
153 if (field.has_index())
155 std::cout <<
" [INDEX]";
157 std::cout << std::endl;
161 const auto* pk = meta.get_primary_key();
164 std::cout <<
"Primary key: " << pk->name() << std::endl;
171 std::cout <<
"\n--- Generated SQL ---" << std::endl;
174 std::cout <<
"User table SQL:" << std::endl;
178 std::cout <<
"\nPost table SQL:" << std::endl;
185 std::cout <<
"\n--- Generated index SQL ---" << std::endl;
189 if (!index_sql.empty())
191 std::cout <<
"Post indexes:" << std::endl;
192 std::cout << index_sql << std::endl;
196 std::cout <<
"No additional indexes defined" << std::endl;
203 std::cout <<
"\n--- Field accessors ---" << std::endl;
208 user.id = int64_t{1};
209 user.username = std::string(
"john_doe");
210 user.email = std::string(
"john@example.com");
211 user.age = int32_t{30};
212 user.is_active =
true;
215 std::cout <<
"User: "
216 <<
"id=" << user.id.get()
217 <<
" username=" << user.username.get()
218 <<
" email=" << user.email.get()
219 <<
" age=" << user.age.get()
220 <<
" active=" << std::boolalpha << user.is_active.get()
227 std::cout <<
"\n--- Type trait checks ---" << std::endl;
229 std::cout <<
"is_entity<user_entity>: "
230 << std::boolalpha << is_entity_v<user_entity> << std::endl;
231 std::cout <<
"is_entity<post_entity>: "
232 << std::boolalpha << is_entity_v<post_entity> << std::endl;
233 std::cout <<
"is_entity<int>: "
234 << std::boolalpha << is_entity_v<int> << std::endl;
236 std::cout <<
"is_field_type<int32_t>: "
237 << std::boolalpha << is_field_type_v<int32_t> << std::endl;
238 std::cout <<
"is_field_type<std::string>: "
239 << std::boolalpha << is_field_type_v<std::string> << std::endl;
240 std::cout <<
"is_field_type<std::vector<int>>: "
241 << std::boolalpha << is_field_type_v<std::vector<int>> << std::endl;
244 std::cout <<
"\n=== orm_entity_demo example completed ===" << std::endl;
field_constraint::not_null field_constraint::index bool save() override
static entity_metadata metadata_
std::string table_name() const override
ENTITY_FIELD(int64_t, id, field_constraint::primary_key|field_constraint::auto_increment) ENTITY_FIELD(int64_t