constraint progress

This commit is contained in:
2025-12-14 20:50:00 +01:00
parent 348f3a16d0
commit 9418f28348
14 changed files with 158 additions and 49 deletions
+4 -1
View File
@@ -11,9 +11,11 @@ namespace matador::query {
class constraint {
public:
constraint() = default;
constraint(std::string column_name, utils::constraints type, std::string referenced_table, std::string referenced_column);
constraint(std::string column_name, std::string table_name, utils::constraints type);
constraint(std::string column_name, std::string table_name, utils::constraints type, std::string referenced_table, std::string referenced_column);
[[nodiscard]] std::string column_name() const;
[[nodiscard]] std::string table_name() const;
[[nodiscard]] const utils::constraints& type() const;
[[nodiscard]] bool is_primary_key_constraint() const;
[[nodiscard]] bool is_foreign_key_constraint() const;
@@ -23,6 +25,7 @@ public:
private:
std::string column_name_;
std::string table_name_;
utils::constraints type_{};
std::string referenced_table_;
std::string referenced_column_;
@@ -1,9 +1,11 @@
#ifndef MATADOR_QUERY_ALTER_TABLE_INTERMEDIATE_HPP
#define MATADOR_QUERY_ALTER_TABLE_INTERMEDIATE_HPP
#include "executable_query.hpp"
#include "matador/object/restriction.hpp"
#include "matador/query/intermediates/executable_query.hpp"
#include "matador/query/intermediates/query_intermediate.hpp"
#include "matador/query/constraint.hpp"
#include "matador/object/restriction.hpp"
namespace matador::query {
class query_add_primary_key_constraint_intermediate final : public executable_query {
@@ -35,7 +37,9 @@ class query_alter_table_intermediate final : public query_intermediate {
public:
using query_intermediate::query_intermediate;
executable_query add_constraint(const object::restriction& rest);
query_add_key_constraint_intermediate add_constraint(const std::string& name);
executable_query drop_constraint(const object::restriction& rest);
executable_query drop_constraint(const std::string& name);
};
}
+24 -8
View File
@@ -15,6 +15,8 @@
#include <list>
#include <memory>
#include "matador/object/restriction.hpp"
namespace matador::query::internal {
class query_alter_part final : public query_part {
@@ -46,9 +48,19 @@ private:
std::string name_;
};
class query_drop_key_constraint_part final : public query_part {
class query_add_constraint_part_by_constraint final : public query_part {
public:
explicit query_drop_key_constraint_part(std::string name);
explicit query_add_constraint_part_by_constraint(const constraint& co);
void accept(query_part_visitor &visitor) override;
[[nodiscard]] const class constraint& constraint() const;
private:
class constraint constraint_;
};
class query_drop_key_constraint_part_by_name final : public query_part {
public:
explicit query_drop_key_constraint_part_by_name(std::string name);
void accept(query_part_visitor &visitor) override;
[[nodiscard]] const std::string& name() const;
@@ -56,6 +68,16 @@ private:
std::string name_;
};
class query_drop_key_constraint_part_by_constraint final : public query_part {
public:
explicit query_drop_key_constraint_part_by_constraint(const constraint& co);
void accept(query_part_visitor &visitor) override;
[[nodiscard]] const class constraint& constraint() const;
private:
class constraint constraint_;
};
class query_add_foreign_key_constraint_part final : public query_part {
public:
explicit query_add_foreign_key_constraint_part( const std::vector<column>& columns);
@@ -89,12 +111,6 @@ private:
std::vector<column> columns_;
};
class query_drop_foreign_key_constraint_part final : public query_part {
public:
query_drop_foreign_key_constraint_part();
void accept(query_part_visitor &visitor) override;
};
/**
* Represents the SQL SELECT part
*/
+7 -2
View File
@@ -38,8 +38,9 @@ protected:
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_add_constraint_part_by_constraint &part) override;
void visit(internal::query_drop_key_constraint_part_by_name &part) override;
void visit(internal::query_drop_key_constraint_part_by_constraint &part) override;
protected:
void visit(internal::query_select_part &part) override;
@@ -76,6 +77,10 @@ protected:
static std::string build_table_name(sql::dialect_token token, const sql::dialect &d, const table& t);
static std::string determine_value(value_visitor &visitor, const std::variant<utils::placeholder, utils::database_type> &val);
std::string build_add_constraint_string(const class constraint& c);
std::string build_drop_constraint_string(const class constraint& c);
std::string build_constraint_name(const class constraint& c);
protected:
const query_data *data_{};
sql::query_context query_;
+6 -4
View File
@@ -7,9 +7,10 @@ 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_drop_foreign_key_constraint_part;
class query_drop_key_constraint_part_by_name;
class query_drop_key_constraint_part_by_constraint;
class query_add_foreign_key_constraint_part;
class query_add_constraint_part_by_constraint;
class query_add_foreign_key_reference_part;
class query_add_primary_key_constraint_part;
class query_select_part;
@@ -48,10 +49,11 @@ public:
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_constraint_part_by_constraint &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_drop_foreign_key_constraint_part &part) = 0;
virtual void visit(internal::query_drop_key_constraint_part_by_name &part) = 0;
virtual void visit(internal::query_drop_key_constraint_part_by_constraint &part) = 0;
virtual void visit(internal::query_select_part &part) = 0;
virtual void visit(internal::query_from_part &part) = 0;
+2
View File
@@ -171,6 +171,7 @@ public:
[[nodiscard]] const std::string& start_quote() const;
[[nodiscard]] const std::string& string_quote() const;
[[nodiscard]] const std::string& table() const;
[[nodiscard]] const std::string& unique() const;
[[nodiscard]] const std::string& update() const;
[[nodiscard]] const std::string& values() const;
[[nodiscard]] const std::string& where() const;
@@ -237,6 +238,7 @@ private:
{dialect_token::StartQuote, "\""},
{dialect_token::StringQuote, "'"},
{dialect_token::Table, "TABLE"},
{dialect_token::Unique, "UNIQUE"},
{dialect_token::Update, "UPDATE"},
{dialect_token::Values, "VALUES"},
{dialect_token::Where, "WHERE"}
+1
View File
@@ -55,6 +55,7 @@ enum class dialect_token : uint8_t {
StartQuote,
StringQuote,
Table,
Unique,
Update,
Values,
Where