added alter table command to fluent query builder
This commit is contained in:
@@ -77,7 +77,7 @@ public:
|
||||
[[nodiscard]] utils::result<sql::statement, utils::error> prepare(sql::executor &exec) const;
|
||||
|
||||
[[nodiscard]] std::string str(const sql::executor &exec) const;
|
||||
[[nodiscard]] sql::query_context compile(const sql::dialect &d, query_mode mode) const;
|
||||
[[nodiscard]] sql::query_context compile(const sql::dialect &d) const;
|
||||
|
||||
private:
|
||||
[[nodiscard]] utils::result<std::unique_ptr<sql::query_result_impl>, utils::error> fetch(const sql::executor &exec) const;
|
||||
|
||||
@@ -9,8 +9,7 @@
|
||||
|
||||
namespace matador::query {
|
||||
|
||||
class query_create_intermediate : public query_intermediate
|
||||
{
|
||||
class query_create_intermediate : public query_intermediate {
|
||||
public:
|
||||
query_create_intermediate();
|
||||
|
||||
@@ -20,6 +19,7 @@ public:
|
||||
executable_query table(const sql::table &table, const object::repository &schema) {
|
||||
return this->table(table, object::attribute_definition_generator::generate<Type>(schema));
|
||||
}
|
||||
executable_query schema(const std::string &schema_name);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -5,12 +5,12 @@
|
||||
|
||||
namespace matador::query {
|
||||
|
||||
class query_drop_intermediate : query_intermediate
|
||||
{
|
||||
class query_drop_intermediate : query_intermediate {
|
||||
public:
|
||||
query_drop_intermediate();
|
||||
|
||||
executable_query table(const sql::table &table);
|
||||
executable_query schema(const std::string &schema_name);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "matador/sql/column.hpp"
|
||||
|
||||
#include "matador/utils/placeholder.hpp"
|
||||
#include "matador/utils/types.hpp"
|
||||
|
||||
namespace matador::query::internal {
|
||||
@@ -12,13 +13,14 @@ 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);
|
||||
key_value_pair(const char *name, utils::placeholder p);
|
||||
|
||||
[[nodiscard]] const std::string& name() const;
|
||||
[[nodiscard]] const utils::database_type& value() const;
|
||||
[[nodiscard]] const std::variant<utils::placeholder, utils::database_type>& value() const;
|
||||
|
||||
private:
|
||||
std::string name_;
|
||||
utils::database_type value_;
|
||||
std::variant<utils::placeholder, utils::database_type> value_;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -91,7 +91,7 @@ private:
|
||||
|
||||
class query_drop_foreign_key_constraint_part final : public query_part {
|
||||
public:
|
||||
explicit query_drop_foreign_key_constraint_part( const std::vector<sql::column>& columns);
|
||||
query_drop_foreign_key_constraint_part();
|
||||
void accept(query_part_visitor &visitor) override;
|
||||
};
|
||||
|
||||
@@ -377,6 +377,19 @@ private:
|
||||
std::vector<object::attribute_definition> columns_;
|
||||
};
|
||||
|
||||
class query_create_schema_part final : public query_part {
|
||||
public:
|
||||
explicit query_create_schema_part(std::string schema);
|
||||
|
||||
[[nodiscard]] const std::string& schema() const;
|
||||
|
||||
private:
|
||||
void accept(query_part_visitor &visitor) override;
|
||||
|
||||
private:
|
||||
std::string schema_;
|
||||
};
|
||||
|
||||
class query_drop_part final : public query_part
|
||||
{
|
||||
public:
|
||||
@@ -400,5 +413,18 @@ private:
|
||||
sql::table table_;
|
||||
};
|
||||
|
||||
class query_drop_schema_part final : public query_part {
|
||||
public:
|
||||
explicit query_drop_schema_part(std::string schema_);
|
||||
|
||||
[[nodiscard]] const std::string& schema() const;
|
||||
|
||||
private:
|
||||
void accept(query_part_visitor &visitor) override;
|
||||
|
||||
private:
|
||||
std::string schema_;
|
||||
};
|
||||
|
||||
}
|
||||
#endif //QUERY_QUERY_PARTS_HPP
|
||||
|
||||
@@ -20,6 +20,7 @@ class query
|
||||
public:
|
||||
[[nodiscard]] static query_create_intermediate create();
|
||||
[[nodiscard]] static query_drop_intermediate drop();
|
||||
[[nodiscard]] static query_select_intermediate select();
|
||||
[[nodiscard]] static query_select_intermediate select(std::initializer_list<sql::column> columns);
|
||||
[[nodiscard]] static query_select_intermediate select(const std::vector<sql::column>& columns);
|
||||
[[nodiscard]] static query_select_intermediate select(const std::vector<std::string> &column_names);
|
||||
|
||||
@@ -22,8 +22,7 @@ struct basic_type_to_string_visitor;
|
||||
struct query_data;
|
||||
struct value_visitor;
|
||||
|
||||
class query_compiler final : public query_part_visitor
|
||||
{
|
||||
class query_compiler final : public query_part_visitor {
|
||||
public:
|
||||
sql::query_context compile(const query_data &data,
|
||||
const sql::dialect &d,
|
||||
@@ -33,42 +32,45 @@ protected:
|
||||
void visit(internal::query_alter_part& part) override;
|
||||
void visit(internal::query_alter_table_part& part) override;
|
||||
void visit(internal::query_add_key_constraint_part& part) override;
|
||||
void visit( internal::query_add_foreign_key_constraint_part& part ) override;
|
||||
void visit( internal::query_add_primary_key_constraint_part& part ) override;
|
||||
void visit( internal::query_add_foreign_key_reference_part& part ) override;
|
||||
void visit(internal::query_add_foreign_key_constraint_part& part) override;
|
||||
void visit(internal::query_add_primary_key_constraint_part& part) override;
|
||||
void visit(internal::query_add_foreign_key_reference_part& part) override;
|
||||
void visit(internal::query_drop_key_constraint_part& part) override;
|
||||
void visit(internal::query_drop_foreign_key_constraint_part& part) override;
|
||||
|
||||
void visit(internal::query_select_part &select_part) override;
|
||||
void visit(internal::query_from_part &from_part) override;
|
||||
void visit(internal::query_join_part &join_part) override;
|
||||
void visit(internal::query_on_part &on_part) override;
|
||||
void visit(internal::query_where_part &where_part) override;
|
||||
void visit(internal::query_group_by_part &group_by_part) override;
|
||||
void visit(internal::query_order_by_part &order_by_part) override;
|
||||
void visit(internal::query_order_by_asc_part &order_by_asc_part) override;
|
||||
void visit(internal::query_order_by_desc_part &order_by_desc_part) override;
|
||||
void visit(internal::query_offset_part &offset_part) override;
|
||||
void visit(internal::query_limit_part &limit_part) override;
|
||||
void visit(internal::query_insert_part &insert_part) override;
|
||||
void visit(internal::query_into_part &into_part) override;
|
||||
void visit(internal::query_values_part &values_part) override;
|
||||
protected:
|
||||
void visit(internal::query_select_part &part) override;
|
||||
void visit(internal::query_from_part &part) override;
|
||||
void visit(internal::query_join_part &part) override;
|
||||
void visit(internal::query_on_part &part) override;
|
||||
void visit(internal::query_where_part &part) override;
|
||||
void visit(internal::query_group_by_part &part) override;
|
||||
void visit(internal::query_order_by_part &part) override;
|
||||
void visit(internal::query_order_by_asc_part &part) override;
|
||||
void visit(internal::query_order_by_desc_part &part) override;
|
||||
void visit(internal::query_offset_part &part) override;
|
||||
void visit(internal::query_limit_part &part) override;
|
||||
void visit(internal::query_insert_part &part) override;
|
||||
void visit(internal::query_into_part &part) override;
|
||||
void visit(internal::query_values_part &part) override;
|
||||
|
||||
void visit(internal::query_update_part &update_part) override;
|
||||
void visit(internal::query_set_part &set_part) override;
|
||||
void visit(internal::query_update_part &part) override;
|
||||
void visit(internal::query_set_part &part) override;
|
||||
|
||||
void visit(internal::query_delete_part &delete_part) override;
|
||||
void visit(internal::query_delete_from_part &delete_from_part) override;
|
||||
void visit(internal::query_delete_part &part) override;
|
||||
void visit(internal::query_delete_from_part &part) override;
|
||||
|
||||
void visit(internal::query_create_part &create_part) override;
|
||||
void visit(internal::query_create_table_part &create_table_part) override;
|
||||
void visit(internal::query_create_part &part) override;
|
||||
void visit(internal::query_create_table_part &part) override;
|
||||
void visit(internal::query_create_schema_part& part) override;
|
||||
|
||||
void visit(internal::query_drop_part &drop_part) override;
|
||||
void visit(internal::query_drop_table_part &drop_table_part) override;
|
||||
void visit(internal::query_drop_part &part) override;
|
||||
void visit(internal::query_drop_table_part &part) override;
|
||||
void visit(internal::query_drop_schema_part& part) override;
|
||||
|
||||
static std::string build_table_name(sql::dialect_token token, const sql::dialect &d, const sql::table& t);
|
||||
|
||||
std::string determine_value(value_visitor &visitor, const std::variant<utils::placeholder, utils::database_type> &val);
|
||||
std::string determine_set_value(internal::basic_type_to_string_visitor &visitor, const utils::database_type &val);
|
||||
static std::string determine_value(value_visitor &visitor, const std::variant<utils::placeholder, utils::database_type> &val);
|
||||
|
||||
protected:
|
||||
const query_data *data_{};
|
||||
|
||||
@@ -12,16 +12,10 @@
|
||||
|
||||
namespace matador::query {
|
||||
|
||||
enum struct query_mode {
|
||||
Direct = 0,
|
||||
Prepared = 1
|
||||
};
|
||||
|
||||
struct query_data {
|
||||
std::vector<std::unique_ptr<query_part>> parts{};
|
||||
std::vector<object::attribute_definition> columns{};
|
||||
std::unordered_map<std::string, sql::table> tables{};
|
||||
query_mode mode = query_mode::Direct;
|
||||
std::vector<std::unique_ptr<query_part>> parts{};
|
||||
std::vector<object::attribute_definition> columns{};
|
||||
std::unordered_map<std::string, sql::table> tables{};
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ class query_alter_part;
|
||||
class query_alter_table_part;
|
||||
class query_add_key_constraint_part;
|
||||
class query_drop_key_constraint_part;
|
||||
class query_drop_foreign_key_constraint_part;
|
||||
class query_add_foreign_key_constraint_part;
|
||||
class query_add_foreign_key_reference_part;
|
||||
class query_add_primary_key_constraint_part;
|
||||
@@ -31,8 +32,10 @@ class query_delete_part;
|
||||
class query_delete_from_part;
|
||||
class query_create_part;
|
||||
class query_create_table_part;
|
||||
class query_create_schema_part;
|
||||
class query_drop_part;
|
||||
class query_drop_table_part;
|
||||
class query_drop_schema_part;
|
||||
}
|
||||
|
||||
class query_part_visitor {
|
||||
@@ -46,34 +49,37 @@ public:
|
||||
virtual void visit(internal::query_add_primary_key_constraint_part &part) = 0;
|
||||
virtual void visit(internal::query_add_foreign_key_reference_part &part) = 0;
|
||||
virtual void visit(internal::query_drop_key_constraint_part &part) = 0;
|
||||
virtual void visit(internal::query_drop_foreign_key_constraint_part &part) = 0;
|
||||
|
||||
virtual void visit(internal::query_select_part &select_part) = 0;
|
||||
virtual void visit(internal::query_from_part &from_part) = 0;
|
||||
virtual void visit(internal::query_join_part &join_part) = 0;
|
||||
virtual void visit(internal::query_on_part &on_part) = 0;
|
||||
virtual void visit(internal::query_where_part &where_part) = 0;
|
||||
virtual void visit(internal::query_group_by_part &group_by_part) = 0;
|
||||
virtual void visit(internal::query_order_by_part &order_by_part) = 0;
|
||||
virtual void visit(internal::query_order_by_asc_part &order_by_asc_part) = 0;
|
||||
virtual void visit(internal::query_order_by_desc_part &order_by_desc_part) = 0;
|
||||
virtual void visit(internal::query_offset_part &offset_part) = 0;
|
||||
virtual void visit(internal::query_limit_part &limit_part) = 0;
|
||||
virtual void visit(internal::query_select_part &part) = 0;
|
||||
virtual void visit(internal::query_from_part &part) = 0;
|
||||
virtual void visit(internal::query_join_part &part) = 0;
|
||||
virtual void visit(internal::query_on_part &part) = 0;
|
||||
virtual void visit(internal::query_where_part &part) = 0;
|
||||
virtual void visit(internal::query_group_by_part &part) = 0;
|
||||
virtual void visit(internal::query_order_by_part &part) = 0;
|
||||
virtual void visit(internal::query_order_by_asc_part &part) = 0;
|
||||
virtual void visit(internal::query_order_by_desc_part &part) = 0;
|
||||
virtual void visit(internal::query_offset_part &part) = 0;
|
||||
virtual void visit(internal::query_limit_part &part) = 0;
|
||||
|
||||
virtual void visit(internal::query_insert_part &insert_part) = 0;
|
||||
virtual void visit(internal::query_into_part &into_part) = 0;
|
||||
virtual void visit(internal::query_values_part &values_part) = 0;
|
||||
virtual void visit(internal::query_insert_part &part) = 0;
|
||||
virtual void visit(internal::query_into_part &part) = 0;
|
||||
virtual void visit(internal::query_values_part &part) = 0;
|
||||
|
||||
virtual void visit(internal::query_update_part &update_part) = 0;
|
||||
virtual void visit(internal::query_set_part &set_part) = 0;
|
||||
virtual void visit(internal::query_update_part &part) = 0;
|
||||
virtual void visit(internal::query_set_part &part) = 0;
|
||||
|
||||
virtual void visit(internal::query_delete_part &delete_part) = 0;
|
||||
virtual void visit(internal::query_delete_from_part &delete_from_part) = 0;
|
||||
virtual void visit(internal::query_delete_part &part) = 0;
|
||||
virtual void visit(internal::query_delete_from_part &part) = 0;
|
||||
|
||||
virtual void visit(internal::query_create_part &create_part) = 0;
|
||||
virtual void visit(internal::query_create_table_part &create_table_part) = 0;
|
||||
virtual void visit(internal::query_create_part &part) = 0;
|
||||
virtual void visit(internal::query_create_table_part &part) = 0;
|
||||
virtual void visit(internal::query_create_schema_part &part) = 0;
|
||||
|
||||
virtual void visit(internal::query_drop_part &drop_part) = 0;
|
||||
virtual void visit(internal::query_drop_table_part &drop_table_part) = 0;
|
||||
virtual void visit(internal::query_drop_part &part) = 0;
|
||||
virtual void visit(internal::query_drop_table_part &part) = 0;
|
||||
virtual void visit(internal::query_drop_schema_part &part) = 0;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user