added timestamp code, support columns for group by and order by and tested load has-many eager code
This commit is contained in:
@@ -52,6 +52,7 @@ public:
|
||||
[[nodiscard]] bool is_varchar() const;
|
||||
[[nodiscard]] bool is_date() const;
|
||||
[[nodiscard]] bool is_time() const;
|
||||
[[nodiscard]] bool is_timestamp() const;
|
||||
[[nodiscard]] bool is_blob() const;
|
||||
[[nodiscard]] bool is_null() const;
|
||||
|
||||
|
||||
@@ -8,11 +8,13 @@ namespace matador::object {
|
||||
template < class Type >
|
||||
class collection {
|
||||
public:
|
||||
using value_type = Type;
|
||||
using value_type = Type;
|
||||
|
||||
void push_back(const Type& value) { data_.push_back(value); }
|
||||
|
||||
[[nodiscard]] size_t size() const { return data_.size(); }
|
||||
private:
|
||||
std::vector<Type> data_;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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__)}) \
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -2,16 +2,12 @@
|
||||
#define OOS_ACCESS_HPP
|
||||
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
#include <optional>
|
||||
|
||||
namespace matador {
|
||||
|
||||
enum class cascade_type;
|
||||
|
||||
template < class Type, template < class ... > class ContainerType >
|
||||
class container;
|
||||
|
||||
namespace utils {
|
||||
class field_attributes;
|
||||
class foreign_attributes;
|
||||
|
||||
@@ -194,6 +194,7 @@ public:
|
||||
[[nodiscard]] bool is_varchar() const;
|
||||
[[nodiscard]] bool is_date() const;
|
||||
[[nodiscard]] bool is_time() const;
|
||||
[[nodiscard]] bool is_timestamp() const;
|
||||
[[nodiscard]] bool is_blob() const;
|
||||
[[nodiscard]] bool is_null() const;
|
||||
|
||||
|
||||
@@ -18,15 +18,19 @@ size_t determine_size(const blob_type_t &val);
|
||||
|
||||
}
|
||||
|
||||
class value
|
||||
{
|
||||
class value {
|
||||
public:
|
||||
value() = default;
|
||||
template<typename Type>
|
||||
template<typename Type, std::enable_if_t<!std::is_enum_v<Type>>* = nullptr>
|
||||
explicit value(Type value, size_t size = 0)
|
||||
: value_(value)
|
||||
, size_(size)
|
||||
, type_(data_type_traits<Type>::type(size)) {}
|
||||
template<typename Type, std::enable_if_t<std::is_enum_v<Type>>* = nullptr>
|
||||
explicit value(Type value, size_t size = 0)
|
||||
: value_(static_cast<int>(value))
|
||||
, size_(size)
|
||||
, type_(data_type_traits<Type>::type(size)) {}
|
||||
explicit value(basic_type data_type, size_t size = 0);
|
||||
value(const value &x) = default;
|
||||
value& operator=(const value &x) = default;
|
||||
@@ -74,11 +78,12 @@ public:
|
||||
[[nodiscard]] bool is_varchar() const;
|
||||
[[nodiscard]] bool is_date() const;
|
||||
[[nodiscard]] bool is_time() const;
|
||||
[[nodiscard]] bool is_timestamp() const;
|
||||
[[nodiscard]] bool is_blob() const;
|
||||
[[nodiscard]] bool is_null() const;
|
||||
|
||||
private:
|
||||
utils::database_type value_;
|
||||
database_type value_;
|
||||
size_t size_{};
|
||||
basic_type type_{basic_type::Null};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user