query/source/orm/query/intermediates/query_from_intermediate.cpp

66 lines
2.5 KiB
C++

#include "matador/query/intermediates/query_from_intermediate.hpp"
#include "matador/query/intermediates/query_join_intermediate.hpp"
#include "matador/query/intermediates/query_group_by_intermediate.hpp"
#include "matador/query/intermediates/query_order_by_intermediate.hpp"
#include "matador/query/internal/query_parts.hpp"
#include "matador/query/query_data.hpp"
namespace matador::query {
query_join_intermediate query_from_intermediate::join_left(const table &t) {
context_->parts.push_back(std::make_unique<internal::query_join_table_part>(t));
return {context_};
}
query_join_intermediate query_from_intermediate::join_left(const fetchable_query &q) {
context_->parts.push_back(std::make_unique<internal::query_join_query_part>(q));
return {context_};
}
query_from_intermediate query_from_intermediate::join_left(join_data &data) {
context_->parts.push_back(std::make_unique<internal::query_join_table_part>(*data.join_table));
context_->parts.push_back(std::make_unique<internal::query_on_part>(std::move(data.condition)));
return {context_};
}
query_from_intermediate query_from_intermediate::join_left(std::vector<join_data> &data_vector) {
for (auto &[join_table, condition] : data_vector) {
context_->parts.push_back(std::make_unique<internal::query_join_table_part>(*join_table));
context_->parts.push_back(std::make_unique<internal::query_on_part>(std::move(condition)));
}
return {context_};
}
query_where_intermediate query_from_intermediate::where( std::unique_ptr<abstract_criteria>&& cond ) {
return where_clause(std::move(cond));
}
query_where_intermediate query_from_intermediate::where_clause(std::unique_ptr<abstract_criteria> &&cond) {
if (cond) {
context_->parts.push_back(std::make_unique<internal::query_where_part>(std::move(cond)));
}
return {context_};
}
query_group_by_intermediate query_from_intermediate::group_by(const table_column &column) {
return group_by({column});
}
query_group_by_intermediate query_from_intermediate::group_by(std::initializer_list<table_column> columns) {
context_->parts.push_back(std::make_unique<internal::query_group_by_part>(columns));
return {context_};
}
query_order_by_intermediate query_from_intermediate::order_by(const table_column &col) {
return order_by({col});
}
query_order_by_intermediate query_from_intermediate::order_by(std::initializer_list<table_column> columns) {
context_->parts.push_back(std::make_unique<internal::query_order_by_part>(columns));
return {context_};
}
}