constraint, column and table query progress

This commit is contained in:
Sascha Kühl
2025-12-12 15:49:30 +01:00
parent 758ea96ea4
commit 9ba58eb05b
20 changed files with 209 additions and 98 deletions
+3 -3
View File
@@ -1,5 +1,5 @@
#ifndef MATADOR_CONSTRAINT_HPP
#define MATADOR_CONSTRAINT_HPP
#ifndef MATADOR_RESTRICTION_HPP
#define MATADOR_RESTRICTION_HPP
#include "matador/utils/constraints.hpp"
@@ -61,4 +61,4 @@ private:
// constraint_builder constraint(std::string name);
}
#endif //MATADOR_CONSTRAINT_HPP
#endif //MATADOR_RESTRICTION_HPP
+10 -39
View File
@@ -2,6 +2,7 @@
#define MATADOR_BUILDER_HPP
#include "matador/query/column.hpp"
#include "matador/query/constraint.hpp"
#include "matador/query/table.hpp"
#include "matador/utils/basic_types.hpp"
@@ -12,18 +13,6 @@
namespace matador::object {
class entity {
public:
explicit entity(std::string name)
: name_(std::move(name)) {}
[[nodiscard]] const std::string& name() const;
private:
std::string name_;
std::string alias_;
};
class data_type {
public:
explicit data_type(const utils::basic_type type, const size_t size = 0)
@@ -55,6 +44,10 @@ using TinyInt = typed_data_type<int8_t>;
using SmallInt = typed_data_type<int16_t>;
using Integer = typed_data_type<int32_t>;
using BigInt = typed_data_type<int64_t>;
using TinyIntUnsigned = typed_data_type<uint8_t>;
using SmallIntUnsigned = typed_data_type<uint16_t>;
using IntegerUnsigned = typed_data_type<uint32_t>;
using BigIntUnsigned = typed_data_type<uint64_t>;
using Real = typed_data_type<float>;
using Double = typed_data_type<double>;
@@ -64,28 +57,6 @@ using Boolean = typed_data_type<bool>;
using Varchar = sized_typed_data_type<std::string>;
using Blob = sized_typed_data_type<std::vector<std::byte>>;
class constraint {
public:
explicit constraint(std::string name)
: name_(std::move(name)) {}
[[nodiscard]] const std::string& name() const;
[[nodiscard]] std::string column_name() const;
[[nodiscard]] const utils::constraints& type() const;
[[nodiscard]] bool is_primary_key_constraint() const;
[[nodiscard]] bool is_foreign_key_constraint() const;
[[nodiscard]] bool is_unique_constraint() const;
[[nodiscard]] const std::string& referenced_table() const;
[[nodiscard]] const std::string& referenced_column() const;
private:
std::string name_;
std::string column_name_;
utils::constraints type_{};
std::string referenced_table_;
std::string referenced_column_;
data_type dt = Varchar{255};
};
}
namespace matador::query {
@@ -94,7 +65,7 @@ public:
explicit column_builder(std::string column_name, utils::basic_type type, size_t size = 0);
// ReSharper disable once CppNonExplicitConversionOperator
operator query::column() const; // NOLINT(*-explicit-constructor)
operator column() const; // NOLINT(*-explicit-constructor)
column_builder& not_null();
@@ -111,7 +82,7 @@ public:
table_builder& as(std::string table_alias);
// ReSharper disable once CppNonExplicitConversionOperator
operator query::table() const; // NOLINT(*-explicit-constructor)
operator table() const; // NOLINT(*-explicit-constructor)
private:
std::string table_name;
@@ -126,7 +97,7 @@ public:
constraint_builder& references(std::string table, std::string column);
// ReSharper disable once CppNonExplicitConversionOperator
operator object::constraint() const; // NOLINT(*-explicit-constructor)
operator class constraint() const; // NOLINT(*-explicit-constructor)
private:
std::string constraint_name;
@@ -137,8 +108,8 @@ private:
};
constraint_builder constraint(std::string name);
table_builder table(std::string name);
column_builder column(std::string name, utils::basic_type type, size_t size = 0);
// table_builder table(std::string name);
// column_builder column(std::string name, utils::basic_type type, size_t size = 0);
}
#endif //MATADOR_BUILDER_HPP
+8
View File
@@ -3,6 +3,9 @@
#include "matador/sql/sql_functions.hpp"
#include "matador/utils/basic_types.hpp"
#include "matador/utils/field_attributes.hpp"
#include <memory>
#include <string>
@@ -25,8 +28,11 @@ public:
[[nodiscard]] const std::string& name() const;
[[nodiscard]] const std::string& alias() const;
[[nodiscard]] utils::basic_type type() const;
[[nodiscard]] utils::field_attributes attributes() const;
[[nodiscard]] bool is_function() const;
[[nodiscard]] bool is_nullable() const;
[[nodiscard]] sql::sql_function_t function() const;
[[nodiscard]] bool has_alias() const;
@@ -40,6 +46,8 @@ private:
std::shared_ptr<query::table> table_;
std::string name_;
std::string alias_;
utils::basic_type type_{utils::basic_type::Unknown};
utils::field_attributes attributes_{};
sql::sql_function_t function_{sql::sql_function_t::None};
};
+31
View File
@@ -0,0 +1,31 @@
#ifndef MATADOR_CONSTRAINT_HPP
#define MATADOR_CONSTRAINT_HPP
#include <string>
namespace matador::utils {
enum class constraints : unsigned char;
}
namespace matador::query {
class constraint {
public:
constraint() = default;
constraint(std::string column_name, utils::constraints type, std::string referenced_table, std::string referenced_column);
[[nodiscard]] std::string column_name() const;
[[nodiscard]] const utils::constraints& type() const;
[[nodiscard]] bool is_primary_key_constraint() const;
[[nodiscard]] bool is_foreign_key_constraint() const;
[[nodiscard]] bool is_unique_constraint() const;
[[nodiscard]] const std::string& referenced_table() const;
[[nodiscard]] const std::string& referenced_column() const;
private:
std::string column_name_;
utils::constraints type_{};
std::string referenced_table_;
std::string referenced_column_;
};
}
#endif //MATADOR_CONSTRAINT_HPP
@@ -4,8 +4,6 @@
#include "matador/query/criteria/binary_criteria.hpp"
#include "matador/query/criteria/collection_criteria.hpp"
#include "matador/query/column.hpp"
#include "matador/utils/placeholder.hpp"
#include "matador/utils/value.hpp"
@@ -13,6 +11,7 @@ namespace matador::sql {
struct query_context;
}
namespace matador::query {
class column;
template<class Type>
criteria_ptr operator==(const column &col, Type val) {
@@ -5,6 +5,8 @@
#include "matador/query/intermediates/executable_query.hpp"
#include "matador/query/constraint.hpp"
#include "matador/object/attribute.hpp"
#include "matador/object/restriction.hpp"
@@ -16,16 +18,18 @@ class query_create_table_columns_intermediate : public executable_query {
public:
using executable_query::executable_query;
executable_query constraints(std::initializer_list<class object::restriction> constraints);
executable_query constraints(const std::list<class object::restriction> &constraints);
executable_query constraints(std::initializer_list<object::restriction> constraints);
executable_query constraints(const std::list<object::restriction> &restrictions);
executable_query constraints(std::initializer_list<constraint> constraints);
executable_query constraints(const std::list<constraint> &restrictions);
};
class query_create_table_intermediate : public query_intermediate {
public:
using query_intermediate::query_intermediate;
query_create_table_columns_intermediate columns(std::initializer_list<object::attribute> columns);
query_create_table_columns_intermediate columns(const std::list<object::attribute> &columns);
query_create_table_columns_intermediate columns(std::initializer_list<object::attribute> attributes);
query_create_table_columns_intermediate columns(const std::list<object::attribute> &attributes);
query_create_table_columns_intermediate columns(std::initializer_list<column> columns);
query_create_table_columns_intermediate columns(const std::list<column> &columns);
};
@@ -7,11 +7,9 @@
#include "matador/query/internal/column_value_pair.hpp"
#include "matador/query/query_part.hpp"
#include "matador/query/column.hpp"
#include "matador/query/constraint.hpp"
#include "matador/query/table.hpp"
#include "matador/object/attribute.hpp"
#include "matador/object/restriction.hpp"
#include "matador/utils/placeholder.hpp"
#include <list>
@@ -379,28 +377,28 @@ private:
class query_create_table_columns_part final : public query_part {
public:
explicit query_create_table_columns_part(const std::list<object::attribute> &columns);
explicit query_create_table_columns_part(const std::list<column> &columns);
[[nodiscard]] const std::list<object::attribute>& columns() const;
[[nodiscard]] const std::list<column>& columns() const;
private:
void accept(query_part_visitor &visitor) override;
private:
std::list<object::attribute> columns_;
std::list<column> columns_;
};
class query_create_table_constraints_part final : public query_part {
public:
explicit query_create_table_constraints_part(const std::list<class object::restriction> &constraints);
explicit query_create_table_constraints_part(const std::list<constraint> &constraints);
[[nodiscard]] const std::list<class object::restriction>& constraints() const;
[[nodiscard]] const std::list<constraint>& constraints() const;
private:
void accept(query_part_visitor &visitor) override;
private:
std::list<class object::restriction> constraints_;
std::list<constraint> constraints_;
};
class query_create_schema_part final : public query_part {
+4 -6
View File
@@ -1,15 +1,13 @@
#ifndef QUERY_TABLE_HPP
#define QUERY_TABLE_HPP
#include "column.hpp"
#include "matador/query/column.hpp"
#include <string>
#include <vector>
namespace matador::query {
class column;
// ReSharper disable CppNonExplicitConvertingConstructor
class table {
public:
@@ -17,7 +15,7 @@ public:
table(const char *name); // NOLINT(*-explicit-constructor)
table(std::string name); // NOLINT(*-explicit-constructor)
table(std::string name, std::string as);
table(std::string name, std::string as, const std::vector<class column> &columns);
table(std::string name, std::string as, const std::vector<column> &columns);
table as(const std::string &a);
@@ -29,7 +27,7 @@ public:
[[nodiscard]] const std::string& name() const;
[[nodiscard]] const std::string& alias() const;
[[nodiscard]] const std::vector<class column>& columns() const;
[[nodiscard]] const std::vector<column>& columns() const;
// ReSharper disable once CppNonExplicitConversionOperator
operator const std::vector<query::column>&() const; // NOLINT(*-explicit-constructor)
@@ -40,7 +38,7 @@ private:
std::string alias_;
std::string schema_name_;
std::vector<query::column> columns_;
std::vector<column> columns_;
};
table operator ""_tab(const char *name, size_t len);
+2 -1
View File
@@ -9,7 +9,8 @@ enum class constraints : unsigned char {
Unique = 1 << 1,
PrimaryKey = 1 << 2,
ForeignKey = 1 << 3,
Default = 1 << 4
Default = 1 << 4,
NotNull = 1 << 5
};
inline constraints operator|(constraints a, constraints b) { return static_cast<constraints>(static_cast<unsigned int>(a) | static_cast<unsigned int>(b)); }