added timestamp code, support columns for group by and order by and tested load has-many eager code

This commit is contained in:
2026-01-08 15:14:31 +01:00
parent 0bf945cd13
commit 930b9d1aa4
34 changed files with 853 additions and 846 deletions
@@ -21,7 +21,7 @@ public:
executable_query constraints(std::initializer_list<object::restriction> constraints);
executable_query constraints(const std::list<object::restriction> &restrictions);
executable_query constraints(std::initializer_list<table_constraint> constraints);
executable_query constraints(const std::list<table_constraint> &restrictions);
executable_query constraints(const std::list<table_constraint> &constraints);
};
class query_create_table_intermediate : public query_intermediate {
@@ -32,6 +32,7 @@ public:
query_create_table_columns_intermediate columns(const std::list<object::attribute> &attributes);
query_create_table_columns_intermediate columns(std::initializer_list<table_column> columns);
query_create_table_columns_intermediate columns(const std::list<table_column> &columns);
query_create_table_columns_intermediate columns(const std::vector<table_column> &columns);
};
class query_create_intermediate : public query_intermediate {
@@ -15,6 +15,7 @@ public:
query_execute_limit_intermediate limit(size_t limit);
query_execute_order_by_intermediate order_by(const table_column &col);
query_execute_order_by_intermediate order_by(std::initializer_list<table_column> columns);
};
}
@@ -19,14 +19,11 @@ public:
query_from_intermediate join_left(join_data &data);
query_from_intermediate join_left(std::vector<join_data> &data_vector);
// template<class Condition>
// query_where_intermediate where(const Condition &cond)
// {
// return where_clause(std::make_unique<Condition>(std::move(cond)));
// }
query_where_intermediate where(std::unique_ptr<abstract_criteria> &&cond);
query_group_by_intermediate group_by(const table_column &col);
query_group_by_intermediate group_by(const table_column &column);
query_group_by_intermediate group_by(std::initializer_list<table_column> columns);
query_order_by_intermediate order_by(const table_column &col);
query_order_by_intermediate order_by(std::initializer_list<table_column> columns);
private:
query_where_intermediate where_clause(std::unique_ptr<abstract_criteria> &&cond);
@@ -13,6 +13,7 @@ public:
using fetchable_query::fetchable_query;
query_order_by_intermediate order_by(const table_column &col);
query_order_by_intermediate order_by(std::initializer_list<table_column> columns);
};
}
@@ -13,8 +13,10 @@ class query_where_intermediate : public fetchable_query
public:
using fetchable_query::fetchable_query;
query_group_by_intermediate group_by(const table_column &col);
query_group_by_intermediate group_by(const table_column &column);
query_group_by_intermediate group_by(std::initializer_list<table_column> columns);
query_order_by_intermediate order_by(const table_column &col);
query_order_by_intermediate order_by(std::initializer_list<table_column> columns);
};
}
@@ -205,29 +205,29 @@ protected:
class query_group_by_part final : public query_part
{
public:
explicit query_group_by_part(class table_column col);
explicit query_group_by_part(const std::vector<table_column>& columns);
[[nodiscard]] const table_column& column() const;
[[nodiscard]] const std::vector<table_column>& columns() const;
private:
void accept(query_part_visitor &visitor) override;
private:
table_column column_;
std::vector<table_column> columns_;
};
class query_order_by_part final : public query_part
{
public:
explicit query_order_by_part(class table_column col);
explicit query_order_by_part(const std::vector<table_column>& columns);
[[nodiscard]] const table_column& column() const;
[[nodiscard]] const std::vector<table_column>& columns() const;
private:
void accept(query_part_visitor &visitor) override;
private:
table_column column_;
std::vector<table_column> columns_;
};
class query_order_by_asc_part final : public query_part
+1 -1
View File
@@ -16,7 +16,7 @@ namespace internal { \
class TABLE_NAME##_table : public typed_table<TABLE_NAME##_table> { \
public: \
TABLE_NAME##_table()\
: TABLE_NAME##_table("") \
: TABLE_NAME##_table(#TABLE_NAME) \
{} \
TABLE_NAME##_table(const std::string& alias) \
: typed_table(#TABLE_NAME, alias, {MAP(FIELD_STRING, __VA_ARGS__)}) \
-1
View File
@@ -25,7 +25,6 @@ public:
[[nodiscard]] static query_select_intermediate select(std::initializer_list<table_column> columns);
[[nodiscard]] static query_select_intermediate select(const std::vector<table_column>& columns);
[[nodiscard]] static query_select_intermediate select(const std::vector<std::string> &column_names);
[[nodiscard]] static query_select_intermediate select(std::vector<table_column> columns, std::initializer_list<table_column> additional_columns);
template<class Type>
[[nodiscard]] static query_select_intermediate select(const schema &scm) {
return select(generator::columns<Type>(scm));