10#include <gtest/gtest.h>
27 EXPECT_EQ(field.
name(),
"id");
43 field_metadata field(
"id",
"int64_t", field_constraint::primary_key);
50 field_constraint::primary_key | field_constraint::auto_increment);
58 field_constraint::not_null | field_constraint::unique);
66 field_constraint::index,
"idx_users_name");
68 EXPECT_EQ(field.
index_name(),
"idx_users_name");
73 field_constraint::foreign_key,
"",
"users",
"id");
80 field_metadata field(
"created_at",
"std::chrono::system_clock::time_point",
81 field_constraint::default_now);
113 field_metadata field(
"created_at",
"std::chrono::system_clock::time_point");
123 field_metadata field(
"id",
"int64_t", field_constraint::primary_key);
125 EXPECT_NE(sql.find(
"PRIMARY KEY"), std::string::npos);
130 field_constraint::primary_key | field_constraint::auto_increment);
132 EXPECT_NE(sql.find(
"PRIMARY KEY"), std::string::npos);
133 EXPECT_NE(sql.find(
"AUTO_INCREMENT"), std::string::npos);
137 field_metadata field(
"name",
"std::string", field_constraint::not_null);
139 EXPECT_NE(sql.find(
"NOT NULL"), std::string::npos);
143 field_metadata field(
"email",
"std::string", field_constraint::unique);
145 EXPECT_NE(sql.find(
"UNIQUE"), std::string::npos);
151 field_constraint::primary_key | field_constraint::not_null);
153 EXPECT_NE(sql.find(
"PRIMARY KEY"), std::string::npos);
154 EXPECT_EQ(sql.find(
"NOT NULL"), std::string::npos);
160 field_constraint::primary_key | field_constraint::unique);
162 EXPECT_NE(sql.find(
"PRIMARY KEY"), std::string::npos);
163 EXPECT_EQ(sql.find(
"UNIQUE"), std::string::npos);
167 field_metadata field(
"created_at",
"std::chrono::system_clock::time_point",
168 field_constraint::default_now);
170 EXPECT_NE(sql.find(
"DEFAULT CURRENT_TIMESTAMP"), std::string::npos);
177 field_constraint::primary_key | field_constraint::not_null,
178 field_constraint::primary_key));
180 field_constraint::primary_key | field_constraint::not_null,
181 field_constraint::not_null));
183 field_constraint::primary_key | field_constraint::not_null,
184 field_constraint::unique));
194 meta_ = std::make_unique<entity_metadata>(
"users");
197 field_constraint::primary_key | field_constraint::auto_increment));
199 field_constraint::not_null));
201 field_constraint::not_null | field_constraint::unique | field_constraint::index,
204 field_constraint::foreign_key,
"",
"departments",
"id"));
206 field_constraint::default_now));
209 std::unique_ptr<entity_metadata>
meta_;
213 EXPECT_EQ(meta_->table_name(),
"users");
217 EXPECT_EQ(meta_->fields().size(), 5u);
221 EXPECT_EQ(meta_->fields()[0].name(),
"id");
222 EXPECT_EQ(meta_->fields()[1].name(),
"name");
223 EXPECT_EQ(meta_->fields()[2].name(),
"email");
224 EXPECT_EQ(meta_->fields()[3].name(),
"department_id");
225 EXPECT_EQ(meta_->fields()[4].name(),
"created_at");
229 const auto* pk = meta_->get_primary_key();
230 ASSERT_NE(pk,
nullptr);
231 EXPECT_EQ(pk->name(),
"id");
232 EXPECT_TRUE(pk->is_primary_key());
242 auto indexes = meta_->get_indexes();
244 EXPECT_EQ(indexes[0]->name(),
"email");
248 auto fks = meta_->get_foreign_keys();
250 EXPECT_EQ(fks[0]->name(),
"department_id");
251 EXPECT_EQ(fks[0]->foreign_table(),
"departments");
252 EXPECT_EQ(fks[0]->foreign_field(),
"id");
256 std::string sql = meta_->create_table_sql();
257 EXPECT_NE(sql.find(
"CREATE TABLE IF NOT EXISTS users"), std::string::npos);
261 std::string sql = meta_->create_table_sql();
262 EXPECT_NE(sql.find(
"id BIGINT PRIMARY KEY AUTO_INCREMENT"), std::string::npos);
263 EXPECT_NE(sql.find(
"name VARCHAR(255) NOT NULL"), std::string::npos);
264 EXPECT_NE(sql.find(
"email VARCHAR(255) NOT NULL UNIQUE"), std::string::npos);
265 EXPECT_NE(sql.find(
"department_id BIGINT"), std::string::npos);
266 EXPECT_NE(sql.find(
"created_at TIMESTAMP"), std::string::npos);
270 std::string sql = meta_->create_table_sql();
271 EXPECT_NE(sql.find(
"FOREIGN KEY (department_id) REFERENCES departments(id)"),
276 std::string sql = meta_->create_indexes_sql();
277 EXPECT_NE(sql.find(
"CREATE INDEX IF NOT EXISTS idx_users_email ON users(email)"),
286 EXPECT_NE(sql.find(
"CREATE INDEX IF NOT EXISTS idx_products_category ON products(category)"),
295 EXPECT_TRUE(sql.empty());
301 EXPECT_NE(sql.find(
"CREATE TABLE IF NOT EXISTS empty_table"), std::string::npos);
307 EXPECT_EQ(
static_cast<int>(
primary_key()),
static_cast<int>(field_constraint::primary_key));
308 EXPECT_EQ(
static_cast<int>(
not_null()),
static_cast<int>(field_constraint::not_null));
309 EXPECT_EQ(
static_cast<int>(
unique()),
static_cast<int>(field_constraint::unique));
310 EXPECT_EQ(
static_cast<int>(
auto_increment()),
static_cast<int>(field_constraint::auto_increment));
311 EXPECT_EQ(
static_cast<int>(
default_now()),
static_cast<int>(field_constraint::default_now));
field_constraint auto_increment()
field_constraint unique()
field_constraint not_null()
field_constraint primary_key()
bool has_constraint(field_constraint constraints, field_constraint check)
field_constraint default_now()
#define ASSERT_EQ(expected, actual, message)