initial matador ng commit
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
#ifndef QUERY_ANY_TYPE_TO_STRING_VISITOR_HPP
|
||||
#define QUERY_ANY_TYPE_TO_STRING_VISITOR_HPP
|
||||
|
||||
#include "matador/utils/types.hpp"
|
||||
|
||||
#include "matador/query/attribute_string_writer.hpp"
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace matador {
|
||||
class date;
|
||||
class time;
|
||||
}
|
||||
|
||||
namespace matador::sql {
|
||||
class dialect;
|
||||
struct query_context;
|
||||
}
|
||||
|
||||
namespace matador::query::internal {
|
||||
|
||||
struct basic_type_to_string_visitor
|
||||
{
|
||||
explicit basic_type_to_string_visitor(attribute_string_writer &writer, sql::query_context &query);
|
||||
|
||||
void operator()(const int8_t &x) { result = writer->to_string(x); }
|
||||
void operator()(const int16_t &x) { result = writer->to_string(x); }
|
||||
void operator()(const int32_t &x) { result = writer->to_string(x); }
|
||||
void operator()(const int64_t &x) { result = writer->to_string(x); }
|
||||
void operator()(const uint8_t &x) { result = writer->to_string(x); }
|
||||
void operator()(const uint16_t &x) { result = writer->to_string(x); }
|
||||
void operator()(const uint32_t &x) { result = writer->to_string(x); }
|
||||
void operator()(const uint64_t &x) { result = writer->to_string(x); }
|
||||
void operator()(const bool &x) { result = writer->to_string(x); }
|
||||
void operator()(const float &x) { result = writer->to_string(x); }
|
||||
void operator()(const double &x) { result = writer->to_string(x); }
|
||||
void operator()(const char *x) { result = writer->to_string(x); }
|
||||
void operator()(const std::string &x) { result = writer->to_string(x); }
|
||||
void operator()(const matador::date &x) { result = writer->to_string(x); }
|
||||
void operator()(const matador::time &x) { result = writer->to_string(x); }
|
||||
void operator()(const utils::blob &x) { result = writer->to_string(x); }
|
||||
|
||||
attribute_string_writer *writer{};
|
||||
sql::query_context &query;
|
||||
std::string result;
|
||||
};
|
||||
|
||||
}
|
||||
#endif //QUERY_ANY_TYPE_TO_STRING_VISITOR_HPP
|
||||
@@ -0,0 +1,25 @@
|
||||
#ifndef QUERY_KEY_VALUE_PAIR_HPP
|
||||
#define QUERY_KEY_VALUE_PAIR_HPP
|
||||
|
||||
#include "matador/sql/column.hpp"
|
||||
|
||||
#include "matador/utils/types.hpp"
|
||||
|
||||
namespace matador::query::internal {
|
||||
|
||||
class key_value_pair {
|
||||
public:
|
||||
key_value_pair(const sql::column &col, utils::database_type value);
|
||||
key_value_pair(std::string name, utils::database_type value);
|
||||
key_value_pair(const char *name, utils::database_type value);
|
||||
|
||||
[[nodiscard]] const std::string& name() const;
|
||||
[[nodiscard]] const utils::database_type& value() const;
|
||||
|
||||
private:
|
||||
std::string name_;
|
||||
utils::database_type value_;
|
||||
};
|
||||
|
||||
}
|
||||
#endif //QUERY_KEY_VALUE_PAIR_HPP
|
||||
@@ -0,0 +1,326 @@
|
||||
#ifndef QUERY_QUERY_PARTS_HPP
|
||||
#define QUERY_QUERY_PARTS_HPP
|
||||
|
||||
#include "matador/query/query_part_visitor.hpp"
|
||||
#include "matador/query/basic_condition.hpp"
|
||||
|
||||
#include "matador/query/internal/key_value_pair.hpp"
|
||||
#include "matador/query/query_part.hpp"
|
||||
|
||||
#include "matador/sql/column.hpp"
|
||||
#include "matador/sql/column_definition.hpp"
|
||||
#include "matador/sql/table.hpp"
|
||||
|
||||
#include "matador/utils/placeholder.hpp"
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace matador::query::internal {
|
||||
|
||||
/**
|
||||
* Represents the SQL SELECT part
|
||||
*/
|
||||
class query_select_part final : public query_part
|
||||
{
|
||||
public:
|
||||
explicit query_select_part(std::vector<sql::column> columns);
|
||||
void accept(query_part_visitor &visitor) override;
|
||||
|
||||
[[nodiscard]] const std::vector<sql::column>& columns() const;
|
||||
|
||||
private:
|
||||
std::vector<sql::column> columns_;
|
||||
};
|
||||
|
||||
/**
|
||||
* Represents the SQL FROM part
|
||||
*/
|
||||
class query_from_part final : public query_part
|
||||
{
|
||||
public:
|
||||
explicit query_from_part(sql::table t);
|
||||
|
||||
[[nodiscard]] const sql::table& table() const;
|
||||
|
||||
private:
|
||||
void accept(query_part_visitor &visitor) override;
|
||||
|
||||
private:
|
||||
sql::table table_;
|
||||
};
|
||||
|
||||
class query_join_part final : public query_part
|
||||
{
|
||||
public:
|
||||
explicit query_join_part(sql::table t);
|
||||
|
||||
[[nodiscard]] const sql::table& table() const;
|
||||
|
||||
private:
|
||||
void accept(query_part_visitor &visitor) override;
|
||||
|
||||
private:
|
||||
sql::table table_;
|
||||
};
|
||||
|
||||
class query_on_part final : public query_part
|
||||
{
|
||||
public:
|
||||
template < class Condition >
|
||||
explicit query_on_part(const Condition &cond)
|
||||
: query_part(sql::dialect_token::ON)
|
||||
, condition_(new Condition(cond)) {}
|
||||
explicit query_on_part(std::unique_ptr<basic_condition> &&cond);
|
||||
|
||||
[[nodiscard]] const basic_condition& condition() const;
|
||||
|
||||
private:
|
||||
void accept(query_part_visitor &visitor) override;
|
||||
|
||||
private:
|
||||
std::unique_ptr<basic_condition> condition_;
|
||||
};
|
||||
|
||||
class query_where_part final : public query_part
|
||||
{
|
||||
public:
|
||||
template < class Condition >
|
||||
explicit query_where_part(const Condition &cond)
|
||||
: query_part(sql::dialect_token::WHERE)
|
||||
, condition_(new Condition(cond)) {}
|
||||
explicit query_where_part(std::unique_ptr<basic_condition> &&cond);
|
||||
|
||||
[[nodiscard]] const basic_condition& condition() const;
|
||||
|
||||
private:
|
||||
void accept(query_part_visitor &visitor) override;
|
||||
|
||||
private:
|
||||
std::unique_ptr<basic_condition> condition_;
|
||||
};
|
||||
|
||||
class query_table_name_part : public query_part
|
||||
{
|
||||
protected:
|
||||
explicit query_table_name_part(sql::dialect_token token, std::string table_name);
|
||||
|
||||
protected:
|
||||
std::string table_name_;
|
||||
};
|
||||
|
||||
class query_group_by_part final : public query_part
|
||||
{
|
||||
public:
|
||||
explicit query_group_by_part(sql::column col);
|
||||
|
||||
[[nodiscard]] const sql::column& column() const;
|
||||
|
||||
private:
|
||||
void accept(query_part_visitor &visitor) override;
|
||||
|
||||
private:
|
||||
sql::column column_;
|
||||
};
|
||||
|
||||
class query_order_by_part final : public query_part
|
||||
{
|
||||
public:
|
||||
explicit query_order_by_part(sql::column col);
|
||||
|
||||
[[nodiscard]] const sql::column& column() const;
|
||||
|
||||
private:
|
||||
void accept(query_part_visitor &visitor) override;
|
||||
|
||||
private:
|
||||
sql::column column_;
|
||||
};
|
||||
|
||||
class query_order_by_asc_part final : public query_part
|
||||
{
|
||||
public:
|
||||
query_order_by_asc_part();
|
||||
|
||||
private:
|
||||
void accept(query_part_visitor &visitor) override;
|
||||
};
|
||||
|
||||
class query_order_by_desc_part final : public query_part
|
||||
{
|
||||
public:
|
||||
query_order_by_desc_part();
|
||||
|
||||
private:
|
||||
void accept(query_part_visitor &visitor) override;
|
||||
};
|
||||
|
||||
class query_offset_part final : public query_part
|
||||
{
|
||||
public:
|
||||
explicit query_offset_part(size_t offset);
|
||||
|
||||
[[nodiscard]] size_t offset() const;
|
||||
|
||||
private:
|
||||
void accept(query_part_visitor &visitor) override;
|
||||
|
||||
private:
|
||||
size_t offset_;
|
||||
};
|
||||
|
||||
class query_limit_part final : public query_part
|
||||
{
|
||||
public:
|
||||
explicit query_limit_part(size_t limit);
|
||||
|
||||
[[nodiscard]] size_t limit() const;
|
||||
|
||||
private:
|
||||
void accept(query_part_visitor &visitor) override;
|
||||
|
||||
private:
|
||||
size_t limit_;
|
||||
};
|
||||
|
||||
class query_insert_part final : public query_part
|
||||
{
|
||||
public:
|
||||
query_insert_part();
|
||||
|
||||
private:
|
||||
void accept(query_part_visitor &visitor) override;
|
||||
};
|
||||
|
||||
class query_into_part final : public query_part
|
||||
{
|
||||
public:
|
||||
query_into_part(sql::table t, std::vector<sql::column> columns);
|
||||
|
||||
[[nodiscard]] const sql::table& table() const;
|
||||
[[nodiscard]] const std::vector<sql::column>& columns() const;
|
||||
|
||||
private:
|
||||
void accept(query_part_visitor &visitor) override;
|
||||
|
||||
private:
|
||||
sql::table table_;
|
||||
std::vector<sql::column> columns_;
|
||||
};
|
||||
/**
|
||||
* Represents the SQL VALUES part
|
||||
*/
|
||||
class query_values_part final : public query_part
|
||||
{
|
||||
public:
|
||||
explicit query_values_part(std::vector<std::variant<utils::placeholder, utils::database_type>> &&values);
|
||||
|
||||
[[nodiscard]] const std::vector<std::variant<utils::placeholder, utils::database_type>>& values() const;
|
||||
|
||||
private:
|
||||
void accept(query_part_visitor &visitor) override;
|
||||
|
||||
private:
|
||||
std::vector<std::variant<utils::placeholder, utils::database_type>> values_;
|
||||
};
|
||||
|
||||
class query_update_part final : public query_part
|
||||
{
|
||||
public:
|
||||
explicit query_update_part(sql::table table);
|
||||
|
||||
[[nodiscard]] const sql::table& table() const;
|
||||
|
||||
private:
|
||||
void accept(query_part_visitor &visitor) override;
|
||||
|
||||
private:
|
||||
sql::table table_;
|
||||
};
|
||||
|
||||
class query_set_part final : public query_part
|
||||
{
|
||||
public:
|
||||
explicit query_set_part(const std::vector<internal::key_value_pair>& key_value_pairs);
|
||||
|
||||
[[nodiscard]] const std::vector<internal::key_value_pair>& key_values() const;
|
||||
|
||||
private:
|
||||
void accept(query_part_visitor &visitor) override;
|
||||
|
||||
private:
|
||||
std::vector<internal::key_value_pair> key_value_pairs_;
|
||||
};
|
||||
|
||||
class query_delete_part final : public query_part
|
||||
{
|
||||
public:
|
||||
query_delete_part();
|
||||
|
||||
private:
|
||||
void accept(query_part_visitor &visitor) override;
|
||||
};
|
||||
|
||||
class query_delete_from_part final : public query_part
|
||||
{
|
||||
public:
|
||||
explicit query_delete_from_part(sql::table table);
|
||||
|
||||
[[nodiscard]] const sql::table& table() const;
|
||||
|
||||
private:
|
||||
void accept(query_part_visitor &visitor) override;
|
||||
|
||||
private:
|
||||
sql::table table_;
|
||||
};
|
||||
|
||||
class query_create_part final : public query_part
|
||||
{
|
||||
public:
|
||||
query_create_part();
|
||||
|
||||
private:
|
||||
void accept(query_part_visitor &visitor) override;
|
||||
};
|
||||
|
||||
class query_create_table_part final : public query_part
|
||||
{
|
||||
public:
|
||||
query_create_table_part(sql::table table, std::vector<sql::column_definition> columns);
|
||||
|
||||
[[nodiscard]] const sql::table& table() const;
|
||||
[[nodiscard]] const std::vector<sql::column_definition>& columns() const;
|
||||
|
||||
private:
|
||||
void accept(query_part_visitor &visitor) override;
|
||||
|
||||
private:
|
||||
sql::table table_;
|
||||
std::vector<sql::column_definition> columns_;
|
||||
};
|
||||
|
||||
class query_drop_part final : public query_part
|
||||
{
|
||||
public:
|
||||
query_drop_part();
|
||||
|
||||
private:
|
||||
void accept(query_part_visitor &visitor) override;
|
||||
};
|
||||
|
||||
class query_drop_table_part final : public query_part
|
||||
{
|
||||
public:
|
||||
explicit query_drop_table_part(sql::table table);
|
||||
|
||||
[[nodiscard]] const sql::table& table() const;
|
||||
|
||||
private:
|
||||
void accept(query_part_visitor &visitor) override;
|
||||
|
||||
private:
|
||||
sql::table table_;
|
||||
};
|
||||
|
||||
}
|
||||
#endif //QUERY_QUERY_PARTS_HPP
|
||||
Reference in New Issue
Block a user