added more join_left methods to query_from_intermediate to write shorter fluent sql queries
This commit is contained in:
@@ -85,7 +85,9 @@ query_order_direction_intermediate query_order_by_intermediate::desc()
|
||||
|
||||
query_where_intermediate query_from_intermediate::where_clause(std::unique_ptr<basic_condition> &&cond)
|
||||
{
|
||||
data_->parts.push_back(std::make_unique<query_where_part>(std::move(cond)));
|
||||
if (cond) {
|
||||
data_->parts.push_back(std::make_unique<query_where_part>(std::move(cond)));
|
||||
}
|
||||
return {connection_, schema_, data_};
|
||||
}
|
||||
|
||||
@@ -113,30 +115,6 @@ query_order_by_intermediate query_where_intermediate::order_by(const column &col
|
||||
return {connection_, schema_, data_};
|
||||
}
|
||||
|
||||
query_join_intermediate query_on_intermediate::join_left(const table &t)
|
||||
{
|
||||
data_->parts.push_back(std::make_unique<query_join_part>(t));
|
||||
return {connection_, schema_, data_};
|
||||
}
|
||||
|
||||
query_where_intermediate query_on_intermediate::where_clause(std::unique_ptr<basic_condition> &&cond)
|
||||
{
|
||||
data_->parts.push_back(std::make_unique<query_where_part>(std::move(cond)));
|
||||
return {connection_, schema_, data_};
|
||||
}
|
||||
|
||||
query_group_by_intermediate query_on_intermediate::group_by(const column &col)
|
||||
{
|
||||
data_->parts.push_back(std::make_unique<query_group_by_part>(col));
|
||||
return {connection_, schema_, data_};
|
||||
}
|
||||
|
||||
query_order_by_intermediate query_on_intermediate::order_by(const column &col)
|
||||
{
|
||||
data_->parts.push_back(std::make_unique<query_order_by_part>(col));
|
||||
return {connection_, schema_, data_};
|
||||
}
|
||||
|
||||
query_on_intermediate query_join_intermediate::on_clause(std::unique_ptr<basic_condition> &&cond)
|
||||
{
|
||||
data_->parts.push_back(std::make_unique<query_on_part>(std::move(cond)));
|
||||
@@ -149,6 +127,22 @@ query_join_intermediate query_from_intermediate::join_left(const table &t)
|
||||
return {connection_, schema_, data_};
|
||||
}
|
||||
|
||||
query_from_intermediate query_from_intermediate::join_left(join_data &data)
|
||||
{
|
||||
data_->parts.push_back(std::make_unique<query_join_part>(data.join_table));
|
||||
data_->parts.push_back(std::make_unique<query_on_part>(std::move(data.condition)));
|
||||
return {connection_, schema_, data_};
|
||||
}
|
||||
|
||||
query_from_intermediate query_from_intermediate::join_left(std::vector<join_data> &data_vector)
|
||||
{
|
||||
for (auto &data : data_vector) {
|
||||
data_->parts.push_back(std::make_unique<query_join_part>(data.join_table));
|
||||
data_->parts.push_back(std::make_unique<query_on_part>(std::move(data.condition)));
|
||||
}
|
||||
return {connection_, schema_, data_};
|
||||
}
|
||||
|
||||
query_select_intermediate::query_select_intermediate(connection &db, const sql::schema &schema, const std::vector<column>& columns)
|
||||
: query_start_intermediate(db, schema)
|
||||
{
|
||||
|
||||
+7
-18
@@ -105,24 +105,13 @@ std::unique_ptr<query_result_impl> session::fetch(const std::string &sql) const
|
||||
|
||||
query_select session::build_select_query(connection_ptr<connection> &conn, entity_query_data &&data) const
|
||||
{
|
||||
auto q = conn->query(*schema_)
|
||||
return conn->query(*schema_)
|
||||
.select(data.columns)
|
||||
.from(data.root_table_name);
|
||||
|
||||
auto it = data.joins.begin();
|
||||
if (it != data.joins.end()) {
|
||||
auto qj = q.join_left(it->join_table).on(std::move(it->condition));
|
||||
while (++it != data.joins.end()) {
|
||||
qj.join_left(it->join_table).on(std::move(it->condition));
|
||||
}
|
||||
if (data.where_clause) {
|
||||
return qj.where(std::move(data.where_clause));
|
||||
}
|
||||
return qj;
|
||||
} else if (data.where_clause) {
|
||||
return q.where(std::move(data.where_clause));
|
||||
} else {
|
||||
return q;
|
||||
}
|
||||
.from(data.root_table_name)
|
||||
.join_left(data.joins)
|
||||
.where(std::move(data.where_clause))
|
||||
.order_by({data.root_table_name, data.pk_column_})
|
||||
.asc();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user