query/include/matador/utils/primary_key_attribute.hpp

65 lines
2.1 KiB
C++

#ifndef PRIMARY_KEY_ATTRIBUTE_HPP
#define PRIMARY_KEY_ATTRIBUTE_HPP
#include "matador/utils/primary_key_generator_type.hpp"
#include <cstddef>
namespace matador::utils {
class primary_key_attribute final {
public:
/**
* Creates a primary_key_attribute instance
* with size 0 (zero).
*/
primary_key_attribute() = default;
/**
* Creates a primary_key_attribute instance with a
* given size.
*
* @param size Size of the attribute
*/
primary_key_attribute(size_t size); // NOLINT(*-explicit-constructor)
primary_key_attribute(generator_type generator); // NOLINT(*-explicit-constructor)
primary_key_attribute(size_t size, generator_type generator);
~primary_key_attribute() = default;
primary_key_attribute(const primary_key_attribute &) = default;
primary_key_attribute(primary_key_attribute &&) = default;
primary_key_attribute &operator=(const primary_key_attribute &) = default;
primary_key_attribute &operator=(primary_key_attribute &&) = default;
primary_key_attribute& operator=(size_t size);
primary_key_attribute& operator=(generator_type generator);
/**
* Returns the size of the field
*
* @return Size of the field
*/
[[nodiscard]] size_t size() const;
/**
* Returns the generator type of the field
*
* @return Generator type of the field
*/
[[nodiscard]] generator_type generator() const;
private:
size_t size_ = 0;
generator_type generator_ = generator_type::Manual;
};
const primary_key_attribute DefaultPkAttributes {};
const primary_key_attribute Manual {generator_type::Manual};
const primary_key_attribute Identity {generator_type::Identity};
const primary_key_attribute Sequence {generator_type::Sequence};
const primary_key_attribute Table {generator_type::Table};
const primary_key_attribute ManualVarChar63 {63};
const primary_key_attribute ManualVarChar127 {127};
const primary_key_attribute ManualVarChar255 {255};
const primary_key_attribute ManualVarChar511 {511};
const primary_key_attribute ManualVarChar1023 {1023};
const primary_key_attribute ManualVarChar2047 {2047};
const primary_key_attribute ManualVarChar4095 {4095};
}
#endif //PRIMARY_KEY_ATTRIBUTE_HPP