added alter table command to fluent query builder (progress)

This commit is contained in:
Sascha Kühl
2025-11-03 16:21:26 +01:00
parent 557abecf91
commit c3c7ea57a2
22 changed files with 451 additions and 26 deletions
@@ -0,0 +1,16 @@
#ifndef MATADOR_QUERY_ALTER_INTERMEDIATE_HPP
#define MATADOR_QUERY_ALTER_INTERMEDIATE_HPP
#include "matador/query/intermediates/query_alter_table_intermediate.hpp"
#include "matador/query/intermediates/query_intermediate.hpp"
namespace matador::query {
class query_alter_intermediate : public query_intermediate {
public:
query_alter_intermediate();
query_alter_table_intermediate table(const sql::table &table) const;
};
}
#endif //MATADOR_QUERY_ALTER_INTERMEDIATE_HPP
@@ -0,0 +1,52 @@
#ifndef MATADOR_QUERY_ALTER_TABLE_INTERMEDIATE_HPP
#define MATADOR_QUERY_ALTER_TABLE_INTERMEDIATE_HPP
#include "executable_query.hpp"
#include "matador/query/intermediates/query_intermediate.hpp"
namespace matador::query {
class query_add_primary_key_constraint_intermediate final : public query_intermediate {
public:
};
class query_add_foreign_key_constraint_intermediate final : public query_intermediate {
public:
using query_intermediate::query_intermediate;
executable_query references(const sql::table& table, const std::vector<sql::column>& columns = {});
private:
sql::table table_;
std::vector<sql::column> columns_;
};
class query_add_key_constraint_intermediate final : public query_intermediate {
public:
using query_intermediate::query_intermediate;
query_add_primary_key_constraint_intermediate primary_key(const sql::column& column) const;
query_add_primary_key_constraint_intermediate primary_keys(const std::vector<sql::column>& columns) const;
query_add_foreign_key_constraint_intermediate foreign_key(const sql::column& column) const;
query_add_foreign_key_constraint_intermediate foreign_keys(const std::vector<sql::column>& columns) const;
};
class query_drop_key_constraint_intermediate final : public query_intermediate {
public:
using query_intermediate::query_intermediate;
void constraint(const std::string& name);
void primary_key();
void foreign_key(const std::string& name);
void foreign_keys(const std::vector<std::string>& names);
};
class query_alter_table_intermediate final : public query_intermediate {
public:
using query_intermediate::query_intermediate;
query_add_key_constraint_intermediate add_constraint(const std::string& name);
query_drop_key_constraint_intermediate drop_constraint(const std::string& name);
};
}
#endif //MATADOR_QUERY_ALTER_TABLE_INTERMEDIATE_HPP
@@ -17,6 +17,84 @@
namespace matador::query::internal {
class query_alter_part final : public query_part {
public:
query_alter_part();
void accept(query_part_visitor &visitor) override;
};
class query_alter_table_part final : public query_part {
public:
explicit query_alter_table_part(sql::table table);
void accept(query_part_visitor &visitor) override;
[[nodiscard]] const sql::table& table() const;
private:
sql::table table_;
};
class query_add_key_constraint_part final : public query_part {
public:
explicit query_add_key_constraint_part(const std::string& name);
void accept(query_part_visitor &visitor) override;
[[nodiscard]] const std::string& name() const;
private:
std::string name_;
};
class query_drop_key_constraint_part final : public query_part {
public:
explicit query_drop_key_constraint_part(const std::string& name);
void accept(query_part_visitor &visitor) override;
[[nodiscard]] const std::string& name() const;
private:
std::string name_;
};
class query_add_foreign_key_constraint_part final : public query_part {
public:
explicit query_add_foreign_key_constraint_part( const 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_;
};
class query_add_foreign_key_reference_part final : public query_part {
public:
explicit query_add_foreign_key_reference_part(sql::table table, const std::vector<sql::column>& columns);
void accept(query_part_visitor &visitor) override;
[[nodiscard]] const sql::table& table() const;
[[nodiscard]] const std::vector<sql::column>& columns() const;
private:
sql::table table_;
std::vector<sql::column> columns_;
};
class query_add_primary_key_constraint_part final : public query_part {
public:
explicit query_add_primary_key_constraint_part( const 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_;
};
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);
void accept(query_part_visitor &visitor) override;
};
/**
* Represents the SQL SELECT part
*/
+2
View File
@@ -31,6 +31,8 @@ public:
[[nodiscard]] static query_insert_intermediate insert();
[[nodiscard]] static query_update_intermediate update(const sql::table &table);
[[nodiscard]] static query_delete_intermediate remove();
[[nodiscard]] static query_alter_intermediate alter();
};
}
+8
View File
@@ -30,6 +30,14 @@ public:
std::optional<std::reference_wrapper<const sql::connection_impl>> conn);
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_drop_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;
@@ -3,6 +3,7 @@
#include "matador/query/intermediates/executable_query.hpp"
#include "matador/query/intermediates/fetchable_query.hpp"
#include "matador/query/intermediates/query_alter_intermediate.hpp"
#include "matador/query/intermediates/query_create_intermediate.hpp"
#include "matador/query/intermediates/query_delete_from_intermediate.hpp"
#include "matador/query/intermediates/query_delete_intermediate.hpp"
+16 -2
View File
@@ -4,6 +4,13 @@
namespace matador::query {
namespace internal {
class query_alter_part;
class query_alter_table_part;
class query_add_key_constraint_part;
class query_drop_key_constraint_part;
class query_add_foreign_key_constraint_part;
class query_add_foreign_key_reference_part;
class query_add_primary_key_constraint_part;
class query_select_part;
class query_from_part;
class query_join_part;
@@ -28,11 +35,18 @@ class query_drop_part;
class query_drop_table_part;
}
class query_part_visitor
{
class query_part_visitor {
public:
virtual ~query_part_visitor() = default;
virtual void visit(internal::query_alter_part &part) = 0;
virtual void visit(internal::query_alter_table_part &part) = 0;
virtual void visit(internal::query_add_key_constraint_part &part) = 0;
virtual void visit(internal::query_add_foreign_key_constraint_part &part) = 0;
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_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;