criteria progress
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user