added query helper macro and join query parts
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
#include "matador/sql/dialect.hpp"
|
||||
#include "matador/sql/column_definition.hpp"
|
||||
|
||||
#include "matador/utils/string.hpp"
|
||||
|
||||
|
||||
@@ -6,12 +6,12 @@
|
||||
namespace matador::sql {
|
||||
|
||||
query_compiler::query_compiler(const sql::dialect &d)
|
||||
: dialect_(d)
|
||||
: dialect_(d)
|
||||
{}
|
||||
|
||||
query_context query_compiler::compile(const query_data *data)
|
||||
{
|
||||
for (const auto &part : data->parts) {
|
||||
for (const auto &part: data->parts) {
|
||||
part->accept(*this);
|
||||
}
|
||||
|
||||
@@ -20,6 +20,10 @@ query_context query_compiler::compile(const query_data *data)
|
||||
|
||||
void query_compiler::visit(query_select_part &select_part)
|
||||
{
|
||||
query_.sql = dialect_.token_at(dialect::token_t::SELECT) + " ";
|
||||
|
||||
query_.prototype.clear();
|
||||
|
||||
std::string result;
|
||||
const auto &columns = select_part.columns();
|
||||
if (columns.size() < 2) {
|
||||
@@ -40,9 +44,30 @@ void query_compiler::visit(query_select_part &select_part)
|
||||
query_.prototype.append(column_definition{(*it).name});
|
||||
}
|
||||
}
|
||||
|
||||
query_.sql += result;
|
||||
}
|
||||
|
||||
void query_compiler::visit(query_from_part &from_part)
|
||||
{
|
||||
if (dialect_.default_schema_name().empty()) {
|
||||
query_.sql += " " + dialect_.token_at(dialect::token_t::FROM) +
|
||||
" " + dialect_.prepare_identifier(from_part.table().name) +
|
||||
(from_part.table().alias.empty() ? "" : " AS " + dialect_.prepare_identifier(from_part.table().alias));
|
||||
} else {
|
||||
query_.sql += " " + dialect_.token_at(dialect::token_t::FROM) +
|
||||
" " + dialect_.prepare_identifier(dialect_.default_schema_name()) +
|
||||
"." + dialect_.prepare_identifier(from_part.table().name) +
|
||||
(from_part.table().alias.empty() ? "" : " AS " + dialect_.prepare_identifier(from_part.table().alias));
|
||||
}
|
||||
}
|
||||
|
||||
void query_compiler::visit(query_join_part &join_part)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void query_compiler::visit(query_on_part &on_part)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "matador/sql/query_intermediates.hpp"
|
||||
#include "matador/sql/session.hpp"
|
||||
#include "matador/sql/query_compiler.hpp"
|
||||
#include "matador/sql/condition.hpp"
|
||||
|
||||
namespace matador::sql {
|
||||
basic_query_intermediate::basic_query_intermediate(connection &db)
|
||||
@@ -125,16 +126,10 @@ query_order_by_intermediate query_on_intermediate::order_by(const std::string &n
|
||||
// return {connection_, builder_.order_by(name)};
|
||||
}
|
||||
|
||||
query_on_intermediate query_join_intermediate::on(const basic_condition &cond)
|
||||
query_join_intermediate query_from_intermediate::join_left(const table &t)
|
||||
{
|
||||
data_.parts.push_back(std::make_unique<query_join_part>(t));
|
||||
return {connection_, data_};
|
||||
// return {connection_, builder_.on(column, join_column)};
|
||||
}
|
||||
|
||||
query_join_intermediate query_from_intermediate::join_left(const std::string &join_table_name, const std::string &as)
|
||||
{
|
||||
return {connection_, data_};
|
||||
// return {connection_, builder_.join(join_table_name, join_type_t::INNER, as)};
|
||||
}
|
||||
|
||||
query_where_intermediate query_from_intermediate::where(const basic_condition &cond)
|
||||
@@ -149,8 +144,9 @@ query_select_intermediate::query_select_intermediate(connection &db, const std::
|
||||
data_.parts.push_back(std::make_unique<query_select_part>(columns));
|
||||
}
|
||||
|
||||
query_from_intermediate query_select_intermediate::from(const std::string &table, const std::string &as)
|
||||
query_from_intermediate query_select_intermediate::from(const table& t)
|
||||
{
|
||||
data_.parts.push_back(std::make_unique<query_from_part>(t));
|
||||
return {connection_, data_};
|
||||
// return {connection_, builder_.from(table, as)};
|
||||
}
|
||||
|
||||
+25
-6
@@ -20,20 +20,39 @@ const std::vector<column>& query_select_part::columns() const
|
||||
return columns_;
|
||||
}
|
||||
|
||||
query_from_part::query_from_part(std::string table_name)
|
||||
query_from_part::query_from_part(sql::table t)
|
||||
: query_part(sql::dialect::token_t::FROM)
|
||||
, table_(std::move(table_name)) {}
|
||||
, table_(std::move(t)) {}
|
||||
|
||||
query_from_part::query_from_part(std::string table_name, std::string as)
|
||||
: query_part(sql::dialect::token_t::FROM)
|
||||
, table_(std::move(table_name))
|
||||
, alias_(std::move(as)) {}
|
||||
const sql::table &query_from_part::table() const
|
||||
{
|
||||
return table_;
|
||||
}
|
||||
|
||||
void query_from_part::accept(query_part_visitor &visitor)
|
||||
{
|
||||
visitor.visit(*this);
|
||||
}
|
||||
|
||||
query_join_part::query_join_part(sql::table t)
|
||||
: query_part(sql::dialect::token_t::JOIN)
|
||||
, table_(std::move(t)) {}
|
||||
|
||||
const sql::table &query_join_part::table() const
|
||||
{
|
||||
return table_;
|
||||
}
|
||||
|
||||
void query_join_part::accept(query_part_visitor &visitor)
|
||||
{
|
||||
visitor.visit(*this);
|
||||
}
|
||||
|
||||
void query_on_part::accept(query_part_visitor &visitor)
|
||||
{
|
||||
visitor.visit(*this);
|
||||
}
|
||||
|
||||
void query_where_part::accept(query_part_visitor &visitor)
|
||||
{
|
||||
visitor.visit(*this);
|
||||
|
||||
Reference in New Issue
Block a user