|
|
|
@@ -39,11 +39,11 @@ inline bool is_column_generator_option_set(const column_generator_options source
|
|
|
|
|
|
|
|
|
|
constexpr auto default_column_generator_options = column_generator_options::ForceLazy;
|
|
|
|
|
|
|
|
|
|
class column_generator2 {
|
|
|
|
|
class column_generator {
|
|
|
|
|
public:
|
|
|
|
|
explicit column_generator2(const std::string &table_name = "",
|
|
|
|
|
explicit column_generator(const std::string &table_name = "",
|
|
|
|
|
column_generator_options options = default_column_generator_options);
|
|
|
|
|
explicit column_generator2(const object::repository &repo,
|
|
|
|
|
explicit column_generator(const object::repository &repo,
|
|
|
|
|
const std::string &table_name = "",
|
|
|
|
|
column_generator_options options = default_column_generator_options);
|
|
|
|
|
|
|
|
|
@@ -105,7 +105,10 @@ public:
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<class ContainerType>
|
|
|
|
|
void on_has_many_to_many(const char * /*id*/, ContainerType & /*cont*/, const char *join_column, const char *inverse_join_column, const utils::foreign_attributes &/*attr*/) {
|
|
|
|
|
void on_has_many_to_many(const char * /*id*/, ContainerType & /*cont*/, const char *join_column, const char *inverse_join_column, const utils::foreign_attributes &attr) {
|
|
|
|
|
if (attr.fetch() == utils::fetch_type::LAZY || is_column_generator_option_set(options_, column_generator_options::ForceLazy)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
push(join_column);
|
|
|
|
|
push(inverse_join_column);
|
|
|
|
|
}
|
|
|
|
@@ -184,7 +187,11 @@ public:
|
|
|
|
|
result_.emplace_back(utils::_);
|
|
|
|
|
}
|
|
|
|
|
template<class ContainerType>
|
|
|
|
|
static void on_has_many(const char *, ContainerType &, const char *, const char *, const utils::foreign_attributes &/*attr*/) {}
|
|
|
|
|
static void on_has_many(const char * /*id*/, ContainerType &, const char *, const utils::foreign_attributes &attr) {}
|
|
|
|
|
template<class ContainerType>
|
|
|
|
|
static void on_has_many_to_many(const char *, ContainerType &, const char *, const char *, const utils::foreign_attributes &/*attr*/) {}
|
|
|
|
|
template<class ContainerType>
|
|
|
|
|
static void on_has_many_to_many(const char *, ContainerType &, const utils::foreign_attributes &/*attr*/) {}
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
std::vector<utils::placeholder> result_;
|
|
|
|
@@ -226,7 +233,11 @@ public:
|
|
|
|
|
result_.emplace_back(id, fk_value_extractor_.extract(*x));
|
|
|
|
|
}
|
|
|
|
|
template<class ContainerType>
|
|
|
|
|
static void on_has_many(const char *, ContainerType &, const char *, const char *, const utils::foreign_attributes &/*attr*/) {}
|
|
|
|
|
static void on_has_many(const char * /*id*/, ContainerType &, const char *, const utils::foreign_attributes &attr) {}
|
|
|
|
|
template<class ContainerType>
|
|
|
|
|
static void on_has_many_to_many(const char *, ContainerType &, const char *, const char *, const utils::foreign_attributes &/*attr*/) {}
|
|
|
|
|
template<class ContainerType>
|
|
|
|
|
static void on_has_many_to_many(const char *, ContainerType &, const utils::foreign_attributes &/*attr*/) {}
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
detail::fk_value_extractor fk_value_extractor_{};
|
|
|
|
@@ -256,7 +267,18 @@ template<typename Type>
|
|
|
|
|
std::vector<sql::column> columns(const object::repository &repo,
|
|
|
|
|
const std::string &table_name = "",
|
|
|
|
|
const column_generator_options options = default_column_generator_options) {
|
|
|
|
|
column_generator2 generator(repo, table_name, options);
|
|
|
|
|
column_generator generator(repo, table_name, options);
|
|
|
|
|
return generator.generate<Type>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<typename Type>
|
|
|
|
|
std::vector<sql::column> columns(const object::repository &repo,
|
|
|
|
|
const column_generator_options options) {
|
|
|
|
|
std::string table_name;
|
|
|
|
|
if (const auto result = repo.info<Type>()) {
|
|
|
|
|
table_name = result.value().get().name();
|
|
|
|
|
}
|
|
|
|
|
column_generator generator(repo, table_name, options);
|
|
|
|
|
return generator.generate<Type>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -265,14 +287,14 @@ std::vector<sql::column> columns(const Type &obj,
|
|
|
|
|
const object::repository &repo,
|
|
|
|
|
const std::string &table_name = "",
|
|
|
|
|
const column_generator_options options = default_column_generator_options) {
|
|
|
|
|
column_generator2 generator(repo, table_name, options);
|
|
|
|
|
column_generator generator(repo, table_name, options);
|
|
|
|
|
return generator.generate(obj);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<typename Type>
|
|
|
|
|
std::vector<sql::column> columns(const std::string &table_name = "",
|
|
|
|
|
const column_generator_options options = default_column_generator_options) {
|
|
|
|
|
column_generator2 generator(table_name, options);
|
|
|
|
|
column_generator generator(table_name, options);
|
|
|
|
|
return generator.generate<Type>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -280,7 +302,7 @@ template<typename Type>
|
|
|
|
|
std::vector<sql::column> columns(const Type &obj,
|
|
|
|
|
const std::string &table_name = "",
|
|
|
|
|
const column_generator_options options = default_column_generator_options) {
|
|
|
|
|
column_generator2 generator(table_name, options);
|
|
|
|
|
column_generator generator(table_name, options);
|
|
|
|
|
return generator.generate(obj);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|