77 lines
2.4 KiB
C++
77 lines
2.4 KiB
C++
#ifndef QUERY_TABLE_DEFINITION_HPP
|
|
#define QUERY_TABLE_DEFINITION_HPP
|
|
|
|
#include "matador/object/attribute_definition.hpp"
|
|
|
|
#include <unordered_map>
|
|
|
|
namespace matador::object {
|
|
|
|
class object_definition final {
|
|
private:
|
|
using column_by_index = std::vector<attribute_definition>;
|
|
using column_index_pair = std::pair<std::reference_wrapper<attribute_definition>, column_by_index::difference_type>;
|
|
using column_by_name_map = std::unordered_map<std::string, column_index_pair>;
|
|
|
|
public:
|
|
using iterator = column_by_index::iterator;
|
|
using const_iterator = column_by_index::const_iterator;
|
|
|
|
object_definition() = default;
|
|
explicit object_definition(std::string name);
|
|
object_definition(std::string name, std::initializer_list<attribute_definition> columns);
|
|
explicit object_definition(std::string name, const std::vector<attribute_definition> &columns);
|
|
object_definition(const object_definition &x);
|
|
object_definition& operator=(const object_definition &x);
|
|
object_definition(object_definition&&) noexcept = default;
|
|
object_definition& operator=(object_definition&&) noexcept = default;
|
|
~object_definition() = default;
|
|
|
|
[[nodiscard]] const std::string& name() const;
|
|
|
|
[[nodiscard]] bool has_primary_key() const;
|
|
[[nodiscard]] std::optional<attribute_definition> primary_key() const;
|
|
|
|
template < typename Type >
|
|
void append(const std::string &name, long size = -1) {
|
|
append(make_column<Type>(name, size));
|
|
}
|
|
void append(attribute_definition&& col);
|
|
|
|
[[nodiscard]] const std::vector<attribute_definition>& columns() const;
|
|
|
|
[[nodiscard]] const attribute_definition& at(const std::string &name) const;
|
|
[[nodiscard]] const attribute_definition& at(size_t index) const;
|
|
|
|
iterator find(const std::string &column_name);
|
|
[[nodiscard]] const_iterator find(const std::string &column_name) const;
|
|
|
|
iterator begin();
|
|
[[nodiscard]] const_iterator begin() const;
|
|
[[nodiscard]] const_iterator cbegin() const;
|
|
|
|
iterator end();
|
|
[[nodiscard]] const_iterator end() const;
|
|
[[nodiscard]] const_iterator cend() const;
|
|
|
|
[[nodiscard]] size_t size() const;
|
|
[[nodiscard]] bool empty() const;
|
|
void clear();
|
|
|
|
private:
|
|
void init();
|
|
void add_to_map(attribute_definition &col, size_t index);
|
|
|
|
private:
|
|
friend class repository_node;
|
|
|
|
std::string name_;
|
|
column_by_index columns_;
|
|
column_by_name_map columns_by_name_;
|
|
|
|
int pk_index_{-1};
|
|
};
|
|
|
|
}
|
|
#endif //QUERY_TABLE_DEFINITION_HPP
|