#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) : connection_(db) {} std::shared_ptr basic_query_intermediate::tables() const { return connection_.schema(); } query_result query_select_finish::fetch_all() { query_compiler compiler(connection_.dialect()); return connection_.fetch(compiler.compile(&data_)); } record query_select_finish::fetch_one() { query_compiler compiler(connection_.dialect()); return *connection_.fetch(compiler.compile(&data_)).begin().get(); } std::string query_select_finish::str() const { query_compiler compiler(connection_.dialect()); return compiler.compile(&data_).sql; } std::unique_ptr query_select_finish::fetch() { query_compiler compiler(connection_.dialect()); return connection_.fetch(compiler.compile(&data_).sql); } statement query_select_finish::prepare() { query_compiler compiler(connection_.dialect()); return connection_.prepare(compiler.compile(&data_)); } query_intermediate::query_intermediate(connection &db, query_data &data) : basic_query_intermediate(db), data_(data) {} query_offset_intermediate query_order_direction_intermediate::offset(size_t offset) { return {connection_, data_}; } query_limit_intermediate query_offset_intermediate::limit(size_t limit) { return {connection_, data_}; } query_limit_intermediate query_order_direction_intermediate::limit(size_t limit) { return {connection_, data_}; } query_order_by_intermediate query_group_by_intermediate::order_by(const std::string &name) { return {connection_, data_}; // return {connection_, builder_.order_by(name)}; } query_order_direction_intermediate query_order_by_intermediate::asc() { return {connection_, data_}; // return {connection_, builder_.asc()}; } query_order_direction_intermediate query_order_by_intermediate::desc() { return {connection_, data_}; // return {connection_, builder_.desc()}; } query_group_by_intermediate query_from_intermediate::group_by(const std::string &name) { return {connection_, data_}; // return {connection_, builder_.group_by(name)}; } query_order_by_intermediate query_from_intermediate::order_by(const std::string &name) { return {connection_, data_}; // return {connection_, builder_.order_by(name)}; } query_group_by_intermediate query_where_intermediate::group_by(const std::string &name) { return {connection_, data_}; // return {connection_, builder_.group_by(name)}; } query_order_by_intermediate query_where_intermediate::order_by(const std::string &name) { return {connection_, data_}; // return {connection_, builder_.order_by(name)}; } query_join_intermediate query_on_intermediate::join(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_on_intermediate::where(const basic_condition &cond) { return {connection_, data_}; // return {connection_, builder_.where(cond)}; } query_group_by_intermediate query_on_intermediate::group_by(const std::string &name) { return {connection_, data_}; // return {connection_, builder_.group_by(name)}; } query_order_by_intermediate query_on_intermediate::order_by(const std::string &name) { return {connection_, data_}; // return {connection_, builder_.order_by(name)}; } query_join_intermediate query_from_intermediate::join_left(const table &t) { data_.parts.push_back(std::make_unique(t)); return {connection_, data_}; } query_where_intermediate query_from_intermediate::where(const basic_condition &cond) { return query_where_intermediate{connection_, data_}; // return query_where_intermediate{connection_, builder_.where(cond)}; } query_select_intermediate::query_select_intermediate(connection &db, const std::vector& columns) : query_start_intermediate(db) { data_.parts.push_back(std::make_unique(columns)); } query_from_intermediate query_select_intermediate::from(const table& t) { data_.parts.push_back(std::make_unique(t)); return {connection_, data_}; // return {connection_, builder_.from(table, as)}; } query_insert_intermediate::query_insert_intermediate(connection &s) : query_start_intermediate(s) { data_.parts.push_back(std::make_unique()); } query_into_intermediate query_insert_intermediate::into(const std::string &table, std::initializer_list column_names) { return {connection_, data_}; // return {connection_, builder_.into(table, column_names)}; } size_t query_execute_finish::execute() { query_compiler compiler(connection_.dialect()); return connection_.execute(compiler.compile(&data_).sql); } statement query_execute_finish::prepare() { query_compiler compiler(connection_.dialect()); return connection_.prepare(compiler.compile(&data_)); } query_execute_finish query_into_intermediate::values(std::initializer_list values) { return this->values(std::vector(values)); } query_execute_finish query_into_intermediate::values(const std::vector &values) { return {connection_, data_}; } query_create_intermediate::query_create_intermediate(connection &db) : query_start_intermediate(db) { data_.parts.push_back(std::make_unique()); } query_execute_finish query_create_intermediate::table(const std::string &table_name, std::initializer_list columns) { return table(table_name, std::vector{columns}); } query_execute_finish query_create_intermediate::table(const std::string &table_name, const std::vector &columns) { return {connection_, data_}; // return {connection_, builder_.table(table_name, columns)}; } query_drop_intermediate::query_drop_intermediate(connection &s) : query_start_intermediate(s) { data_.parts.push_back(std::make_unique()); } query_execute_finish query_drop_intermediate::table(const std::string &table) { return {connection_, data_}; // return {connection_, builder_.table(table)}; } query_execute_finish query_execute_where_intermediate::limit(int limit) { return {connection_, data_}; // return {connection_, builder_.limit(limit)}; } query_execute_where_intermediate query_set_intermediate::where(const basic_condition &cond) { return {connection_, data_}; // return {connection_, builder_.where(cond)}; } query_update_intermediate::query_update_intermediate(connection &s, const std::string& table_name) : query_start_intermediate(s) { data_.parts.push_back(std::make_unique(table_name)); } query_set_intermediate query_update_intermediate::set(std::initializer_list columns) { return {connection_, data_}; // return {connection_, builder_.set(columns)}; } query_execute_where_intermediate query_delete_from_intermediate::where(const basic_condition &cond) { return {connection_, data_}; // return {connection_, builder_.where(cond)}; } query_delete_intermediate::query_delete_intermediate(connection &s) : query_start_intermediate(s) { data_.parts.push_back(std::make_unique()); } query_delete_from_intermediate query_delete_intermediate::from(const std::string &table) { return {connection_, data_}; // return {connection_, builder_.from(table)}; } query_start_intermediate::query_start_intermediate(connection &db) : basic_query_intermediate(db) {} }