criteria progress

This commit is contained in:
Sascha Kühl
2026-01-22 11:38:02 +01:00
parent 328d164c05
commit b331ef6923
29 changed files with 223 additions and 32 deletions
+1
View File
@@ -3,6 +3,7 @@
#include "matador/query/criteria/between_criteria.hpp"
#include "matador/query/criteria/binary_criteria.hpp"
#include "matador/query/criteria/check_null_criteria.hpp"
#include "matador/query/criteria/collection_criteria.hpp"
#include "matador/query/criteria/like_criteria.hpp"
#include "matador/query/criteria/logical_criteria.hpp"
@@ -0,0 +1,26 @@
#ifndef MATADOR_IS_NULL_CRITERIA_HPP
#define MATADOR_IS_NULL_CRITERIA_HPP
#include "matador/query/criteria/abstract_column_criteria.hpp"
namespace matador::query {
enum class check_null_operator {
IsNull,
IsNotNull,
};
class check_null_criteria final : public abstract_column_criteria {
public:
check_null_criteria() = delete;
check_null_criteria(const table_column& col, check_null_operator op);
void accept(criteria_visitor& visitor) const override;
[[nodiscard]] check_null_operator operand() const;
private:
check_null_operator operator_{};
};
}
#endif // MATADOR_IS_NULL_CRITERIA_HPP
@@ -104,5 +104,8 @@ criteria_ptr between(const table_column &col, utils::placeholder min, utils::pla
criteria_ptr like(const table_column &col, const std::string &pattern);
criteria_ptr is_null(const table_column &col);
criteria_ptr is_not_null(const table_column &col);
}
#endif //CRITERIA_CRITERIA_OPERATORS_HPP
@@ -5,6 +5,7 @@ namespace matador::query {
class between_criteria;
class binary_criteria;
class binary_column_criteria;
class check_null_criteria;
class like_criteria;
class logical_criteria;
class not_criteria;
@@ -18,6 +19,7 @@ public:
virtual void visit(const between_criteria &node) = 0;
virtual void visit(const binary_criteria &node) = 0;
virtual void visit(const binary_column_criteria &node) = 0;
virtual void visit(const check_null_criteria &node) = 0;
virtual void visit(const collection_criteria &node) = 0;
virtual void visit(const collection_query_criteria &node) = 0;
virtual void visit(const like_criteria &node) = 0;
@@ -23,6 +23,7 @@ public:
void visit(const between_criteria &node) override;
void visit(const binary_criteria &node) override;
void visit(const binary_column_criteria &node) override;
void visit(const check_null_criteria &node) override;
void visit(const collection_criteria &node) override;
void visit(const collection_query_criteria &node) override;
void visit(const like_criteria &node) override;
@@ -16,6 +16,7 @@ public:
using fetchable_query::fetchable_query;
query_join_intermediate join_left(const table &t);
query_join_intermediate join_left(const fetchable_query &q);
query_from_intermediate join_left(join_data &data);
query_from_intermediate join_left(std::vector<join_data> &data_vector);
+16 -2
View File
@@ -143,10 +143,10 @@ private:
std::vector<table> tables_;
};
class query_join_part final : public query_part
class query_join_table_part final : public query_part
{
public:
explicit query_join_part(class table tab);
explicit query_join_table_part(class table tab);
[[nodiscard]] const class table& table() const;
@@ -157,6 +157,20 @@ private:
class table table_;
};
class query_join_query_part final : public query_part
{
public:
explicit query_join_query_part(fetchable_query q);
[[nodiscard]] const fetchable_query& query() const;
private:
void accept(query_part_visitor &visitor) override;
private:
fetchable_query query_;
};
class query_on_part final : public query_part
{
public:
@@ -3,7 +3,6 @@
#include "matador/utils/macro_map.hpp"
#include "matador/query/table_column.hpp"
#include "matador/query/table.hpp"
#define FIELD(FIELD_NAME) const matador::query::table_column& FIELD_NAME;
+4 -2
View File
@@ -10,10 +10,12 @@ class connection;
}
namespace matador::query {
class schema;
table_column alias(const std::string &column, const std::string &as);
table_column alias(table_column &&col, const std::string &as);
table_column count(const std::string &column);
table_column count_all();
table_column sum(const std::string &column);
table_column avg(const std::string &column);
table_column max(const std::string &column);
table_column min(const std::string &column);
class query
{
+1
View File
@@ -37,6 +37,7 @@ public:
void visit( const binary_criteria& node ) override;
void visit( const binary_column_criteria& node ) override;
void visit( const collection_criteria& node ) override;
void visit( const check_null_criteria& node ) override;
void visit( const collection_query_criteria& node ) override;
void visit( const like_criteria& node ) override;
void visit( const logical_criteria& node ) override;
+2 -1
View File
@@ -47,7 +47,8 @@ protected:
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_join_table_part &part) override;
void visit(internal::query_join_query_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;
+4 -2
View File
@@ -15,7 +15,8 @@ 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;
class query_join_table_part;
class query_join_query_part;
class query_on_part;
class query_where_part;
class query_group_by_part;
@@ -57,7 +58,8 @@ public:
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_join_table_part &part) = 0;
virtual void visit(internal::query_join_query_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;
+1 -1
View File
@@ -30,7 +30,7 @@ public:
[[nodiscard]] bool equals(const table_column &x) const;
table_column as(std::string a);
table_column as(const std::string& alias) const;
[[nodiscard]] const std::string& name() const;
[[nodiscard]] std::string canonical_name() const;