added more join_left methods to query_from_intermediate to write shorter fluent sql queries

This commit is contained in:
Sascha Kühl
2024-04-16 17:11:08 +02:00
parent 38da76bfb3
commit ac8b2ed4e4
4 changed files with 40 additions and 71 deletions
+19 -25
View File
@@ -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
View File
@@ -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();
}
}