query builder progress

This commit is contained in:
Sascha Kühl
2025-12-02 16:19:13 +01:00
parent c156ab5e74
commit bfbbd4c589
31 changed files with 348 additions and 164 deletions
+26 -9
View File
@@ -26,10 +26,8 @@ private:
class data_type {
public:
template<typename Type>
data_type() : type_(utils::data_type_traits<Type>()) {}
template<typename Type>
explicit data_type(const size_t size) : type_(utils::data_type_traits<Type>()), size_(size) {}
explicit data_type(const utils::basic_type type, const size_t size = 0)
: type_(type), size_(size) {}
[[nodiscard]] const utils::basic_type& type() const { return type_; }
[[nodiscard]] size_t size() const { return size_; }
@@ -39,10 +37,28 @@ private:
size_t size_{0};
};
// using BigInt = data_type<int64_t>();
// using Real = data_type<float>;
// using double_ = data_type<double>;
// using string = data_type<std::string>;
template<typename Type>
class typed_data_type final : public data_type {
public:
typed_data_type()
: data_type(utils::data_type_traits<Type>::type()) {}
};
template<typename Type>
class sized_typed_data_type final : public data_type {
public:
explicit sized_typed_data_type(size_t size)
: data_type(utils::data_type_traits<Type>::type(size), size) {}
};
using BigInt = typed_data_type<int64_t>;
using Integer = typed_data_type<int64_t>;
using Real = typed_data_type<float>;
using Double_ = typed_data_type<double>;
using String = typed_data_type<std::string>;
using Boolean = typed_data_type<bool>;
using Varchar = sized_typed_data_type<std::string>;
class constraint {
public:
@@ -50,7 +66,7 @@ public:
: name_(std::move(name)) {}
[[nodiscard]] const std::string& name() const;
[[nodiscard]] const std::string& column_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;
@@ -64,6 +80,7 @@ private:
utils::constraints type_{};
std::string referenced_table_;
std::string referenced_column_;
data_type dt = Varchar{255};
};
}
namespace matador::query {
@@ -5,16 +5,32 @@
#include "matador/query/intermediates/executable_query.hpp"
#include "matador/object/attribute_generator.hpp"
#include "matador/object/attribute.hpp"
#include "matador/object/constraint.hpp"
namespace matador::query {
class query_create_table_columns_intermediate : public executable_query {
public:
using executable_query::executable_query;
executable_query constraints(std::initializer_list<class object::constraint> constraints);
executable_query constraints(const std::list<class object::constraint> &constraints);
};
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);
};
class query_create_intermediate : public query_intermediate {
public:
query_create_intermediate();
executable_query table(const table &tab, std::initializer_list<object::attribute> columns);
executable_query table(const query::table &tab, const std::vector<object::attribute> &columns);
query_create_table_intermediate table(const table &tab);
executable_query schema(const std::string &schema_name);
};
+28 -3
View File
@@ -10,6 +10,7 @@
#include "matador/query/table.hpp"
#include "matador/object/attribute.hpp"
#include "matador/object/constraint.hpp"
#include "matador/utils/placeholder.hpp"
@@ -364,17 +365,41 @@ private:
class query_create_table_part final : public query_part
{
public:
query_create_table_part(class table tab, std::vector<object::attribute> columns);
explicit query_create_table_part(class table tab);
[[nodiscard]] const class table& table() const;
[[nodiscard]] const std::vector<object::attribute>& columns() const;
private:
void accept(query_part_visitor &visitor) override;
private:
class table table_;
std::vector<object::attribute> columns_;
};
class query_create_table_columns_part final : public query_part {
public:
explicit query_create_table_columns_part(const std::list<object::attribute> &columns);
[[nodiscard]] const std::list<object::attribute>& columns() const;
private:
void accept(query_part_visitor &visitor) override;
private:
std::list<object::attribute> columns_;
};
class query_create_table_constraints_part final : public query_part {
public:
explicit query_create_table_constraints_part(const std::list<class object::constraint> &constraints);
[[nodiscard]] const std::list<class object::constraint>& constraints() const;
private:
void accept(query_part_visitor &visitor) override;
private:
std::list<class object::constraint> constraints_;
};
class query_create_schema_part final : public query_part {
+5
View File
@@ -8,6 +8,7 @@
#include "matador/utils/placeholder.hpp"
#include <functional>
#include <optional>
namespace matador::sql {
@@ -64,6 +65,8 @@ protected:
void visit(internal::query_create_part &part) override;
void visit(internal::query_create_table_part &part) override;
void visit(internal::query_create_table_columns_part& part) override;
void visit(internal::query_create_table_constraints_part& part) override;
void visit(internal::query_create_schema_part& part) override;
void visit(internal::query_drop_part &part) override;
@@ -79,6 +82,8 @@ protected:
size_t table_index{0};
const sql::dialect *dialect_{nullptr};
std::optional<std::reference_wrapper<const sql::connection_impl>> connection_{};
std::function<void(sql::query_context&)> finisher_ = [](sql::query_context&) {};
};
}
@@ -32,6 +32,8 @@ class query_delete_part;
class query_delete_from_part;
class query_create_part;
class query_create_table_part;
class query_create_table_columns_part;
class query_create_table_constraints_part;
class query_create_schema_part;
class query_drop_part;
class query_drop_table_part;
@@ -75,6 +77,8 @@ public:
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_table_columns_part &part) = 0;
virtual void visit(internal::query_create_table_constraints_part &part) = 0;
virtual void visit(internal::query_create_schema_part &part) = 0;
virtual void visit(internal::query_drop_part &part) = 0;