added more join_left methods to query_from_intermediate to write shorter fluent sql queries
This commit is contained in:
@@ -57,14 +57,10 @@ public:
|
||||
private:
|
||||
join_columns join_columns_;
|
||||
};
|
||||
struct join_data
|
||||
{
|
||||
table join_table;
|
||||
std::unique_ptr<basic_condition> condition;
|
||||
};
|
||||
|
||||
struct entity_query_data {
|
||||
std::string root_table_name;
|
||||
std::string pk_column_;
|
||||
std::vector<column> columns;
|
||||
std::vector<join_data> joins;
|
||||
std::unique_ptr<basic_condition> where_clause;
|
||||
@@ -142,6 +138,7 @@ public:
|
||||
push(id);
|
||||
if (is_root_entity() && pk_.is_integer()) {
|
||||
entity_query_data_.where_clause = make_condition(column{table_info_stack_.top().name, id, ""} == *pk_.as<V>());
|
||||
entity_query_data_.pk_column_ = id;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -150,12 +150,21 @@ public:
|
||||
|
||||
class query_join_intermediate;
|
||||
|
||||
class query_on_intermediate : public query_select
|
||||
struct join_data
|
||||
{
|
||||
table join_table;
|
||||
std::unique_ptr<basic_condition> condition;
|
||||
};
|
||||
|
||||
class query_from_intermediate : public query_select
|
||||
{
|
||||
public:
|
||||
using query_select::query_select;
|
||||
|
||||
query_join_intermediate join_left(const table &t);
|
||||
query_from_intermediate join_left(join_data &data);
|
||||
query_from_intermediate join_left(std::vector<join_data> &data_vector);
|
||||
|
||||
template<class Condition>
|
||||
query_where_intermediate where(const Condition &cond)
|
||||
{
|
||||
@@ -172,6 +181,8 @@ private:
|
||||
query_where_intermediate where_clause(std::unique_ptr<basic_condition> &&cond);
|
||||
};
|
||||
|
||||
using query_on_intermediate = query_from_intermediate;
|
||||
|
||||
class query_join_intermediate : public query_intermediate
|
||||
{
|
||||
public:
|
||||
@@ -191,28 +202,6 @@ private:
|
||||
query_on_intermediate on_clause(std::unique_ptr<basic_condition> &&cond);
|
||||
};
|
||||
|
||||
class query_from_intermediate : public query_select
|
||||
{
|
||||
public:
|
||||
using query_select::query_select;
|
||||
|
||||
query_join_intermediate join_left(const table &t);
|
||||
template<class Condition>
|
||||
query_where_intermediate where(const Condition &cond)
|
||||
{
|
||||
return where_clause(std::make_unique<Condition>(std::move(cond)));
|
||||
}
|
||||
query_where_intermediate where(std::unique_ptr<basic_condition> &&cond)
|
||||
{
|
||||
return where_clause(std::move(cond));
|
||||
}
|
||||
query_group_by_intermediate group_by(const column &col);
|
||||
query_order_by_intermediate order_by(const column &col);
|
||||
|
||||
private:
|
||||
query_where_intermediate where_clause(std::unique_ptr<basic_condition> &&cond);
|
||||
};
|
||||
|
||||
class query_start_intermediate : public basic_query_intermediate
|
||||
{
|
||||
public:
|
||||
|
||||
Reference in New Issue
Block a user