#pragma once #include #include enum class test_enum { test0, test1, test2, test3, first = test0, last = test3, }; DEFINE_ENUM_TO_STRING_MAP( test_enum, { test_enum::test0, "test0" }, { test_enum::test1, "test1" }, { test_enum::test2, "test2" }, { test_enum::test3, "test3" } ); DEFINE_STRING_TO_ENUM_MAP( test_enum, invariant_string_less, { "test0", test_enum::test0 }, { "test1", test_enum::test1 }, { "test2", test_enum::test2 }, { "test3", test_enum::test3 } ); struct test1 { ::cpphibernate::uuid id; std::string str_data; ::cpphibernate::string<64> str64_data; utl::nullable u32_nullable; std::unique_ptr u32_ptr_u; std::shared_ptr u32_ptr_s; }; struct test2 { ::cpphibernate::uuid id; uint8_t u8_data; int8_t i8_data; uint16_t u16_data; int16_t i16_data; }; struct test3 { ::cpphibernate::uuid id; uint32_t u32_data; int32_t i32_data; uint64_t u64_data; int64_t i64_data; }; struct base { ::cpphibernate::uuid id; std::string name; virtual ~base() = default; }; struct derived1 : public base { ::cpphibernate::uuid derived1_id; test1 test1_data; test_enum enum_data; }; struct derived2 : public base { ::cpphibernate::uuid derived2_id; utl::nullable test2_nullable; std::unique_ptr test2_ptr_u; std::shared_ptr test2_ptr_s; }; struct derived3 : public derived2 { ::cpphibernate::uuid derived3_id; std::list test3_list; std::vector test3_vector; }; struct dummy_id { int data; inline dummy_id(int p_data = 0) : data(p_data) { } }; struct dummy_owner { ::cpphibernate::uuid id; std::vector dummies; }; constexpr decltype(auto) test_schema = cpphibernate_make_schema( test, cpphibernate_make_table_name( tbl_test1, test1, 1, cpphibernate_make_id (&test1::id), cpphibernate_make_field (test1, str_data), cpphibernate_make_field (test1, str64_data), cpphibernate_make_field (test1, u32_nullable), cpphibernate_make_field (test1, u32_ptr_u), cpphibernate_make_field (test1, u32_ptr_s) ), cpphibernate_make_table_name( tbl_test2, test2, 2, cpphibernate_make_id (&test2::id), cpphibernate_make_field (test2, u8_data), cpphibernate_make_field (test2, i8_data), cpphibernate_make_field (test2, u16_data), cpphibernate_make_field (test2, i16_data) ), cpphibernate_make_table_name( tbl_test3, test3, 3, cpphibernate_make_id (&test3::id), cpphibernate_make_field (test3, u32_data), cpphibernate_make_field (test3, i32_data), cpphibernate_make_field (test3, u64_data), cpphibernate_make_field (test3, i64_data) ), cpphibernate_make_table_name( tbl_base, base, 10, cpphibernate_make_id (&base::id), cpphibernate_make_field (base, name) ), cpphibernate_make_table_name( tbl_derived1, derived1, 11, cpphibernate_make_id (&derived1::derived1_id), cpphibernate_make_field (derived1, test1_data), cpphibernate_make_field (derived1, enum_data) ), cpphibernate_make_table_name( tbl_derived2, derived2, 12, cpphibernate_make_id (&derived2::derived2_id), cpphibernate_make_field (derived2, test2_nullable), cpphibernate_make_field (derived2, test2_ptr_u), cpphibernate_make_field (derived2, test2_ptr_s) ), cpphibernate_make_table_name( tbl_derived3, derived3, 13, cpphibernate_make_id (&derived3::derived3_id), cpphibernate_make_field (derived3, test3_list), cpphibernate_make_field (derived3, test3_vector) ), cpphibernate_make_table_name( tbl_dummy_id, dummy_id, 14, cpphibernate_make_temp_id (dummy_id, ::cpphibernate::uuid), cpphibernate_make_field (dummy_id, data) ), cpphibernate_make_table_name( tbl_dummy_owner, dummy_owner, 15, cpphibernate_make_id (&dummy_owner::id), cpphibernate_make_field (dummy_owner, dummies) ) );