Hyper API for C++ 0.0.20746
Hyper client library for C++ applications
Loading...
Searching...
No Matches
SqlType.hpp
Go to the documentation of this file.
1
5#ifndef TABLEAU_HYPER_SQLTYPE_HPP
6#define TABLEAU_HYPER_SQLTYPE_HPP
7
8#include <hyperapi/impl/infra.hpp>
9#include <string>
10#include <hyperapi/hyperapi.h>
11
12namespace hyperapi {
13
15static CONSTEXPR_OPTIONAL optional<internal::AnyType> null = {};
16
18enum class TypeTag : int {
19 Unsupported = HYPER_UNSUPPORTED,
20 Bool = HYPER_BOOL,
21 BigInt = HYPER_BIG_INT,
22 SmallInt = HYPER_SMALL_INT,
23 Int = HYPER_INT,
24 Numeric = HYPER_NUMERIC,
25 Float = HYPER_FLOAT,
26 Double = HYPER_DOUBLE,
27 Oid = HYPER_OID,
28 Bytes = HYPER_BYTE_A,
29 Text = HYPER_TEXT,
30 Varchar = HYPER_VARCHAR,
31 Char = HYPER_CHAR,
32 Json = HYPER_JSON,
33 Date = HYPER_DATE,
34 Interval = HYPER_INTERVAL,
35 Time = HYPER_TIME,
36 Timestamp = HYPER_TIMESTAMP,
37 TimestampTZ = HYPER_TIMESTAMP_TZ,
38 Geography = HYPER_GEOGRAPHY
39};
40
44class SqlType final {
45 public:
47 SqlType(TypeTag tag, uint32_t oid, hyper_type_modifier_t modifier = HYPER_UNUSED_MODIFIER) noexcept
48 : tag_(tag), internalOid_(oid), modifier_(modifier) {
49 }
50
54 TypeTag getTag() const noexcept { return tag_; }
55
61 uint32_t getInternalOid() const noexcept { return internalOid_; }
62
68 uint32_t getInternalTypeModifier() const noexcept { return modifier_; }
69
73 uint32_t getPrecision() const noexcept;
74
78 uint32_t getScale() const noexcept;
79
83 uint32_t getMaxLength() const noexcept;
84
90 std::string toString() const;
91
96 static SqlType boolean() noexcept { return {TypeTag::Bool, HYPER_OID_BOOL}; }
101 static SqlType bigInt() noexcept { return {TypeTag::BigInt, HYPER_OID_BIG_INT}; }
106 static SqlType smallInt() noexcept { return {TypeTag::SmallInt, HYPER_OID_SMALL_INT}; }
111 static SqlType integer() noexcept { return {TypeTag::Int, HYPER_OID_INT}; }
118 static SqlType numeric(uint16_t precision, uint16_t scale) noexcept { return {TypeTag::Numeric, HYPER_OID_NUMERIC, hyper_encode_numeric_modifier(precision, scale)}; }
123 static SqlType real() noexcept { return {TypeTag::Float, HYPER_OID_FLOAT}; }
128 static SqlType doublePrecision() noexcept { return {TypeTag::Double, HYPER_OID_DOUBLE}; }
133 static SqlType oid() noexcept { return {TypeTag::Oid, HYPER_OID_OID}; }
138 static SqlType bytes() noexcept { return {TypeTag::Bytes, HYPER_OID_BYTE_A}; }
143 static SqlType text() noexcept { return {TypeTag::Text, HYPER_OID_TEXT}; }
149 static SqlType varchar(uint32_t maxLength) noexcept { return {TypeTag::Varchar, HYPER_OID_VARCHAR, hyper_encode_string_modifier(maxLength)}; }
155 static SqlType character(uint32_t maxLength) noexcept { return {TypeTag::Char, static_cast<uint32_t>((maxLength == 1) ? HYPER_OID_CHAR1 : HYPER_OID_CHAR), hyper_encode_string_modifier(maxLength)}; }
160 static SqlType json() noexcept { return {TypeTag::Json, HYPER_OID_JSON}; }
165 static SqlType date() noexcept { return {TypeTag::Date, HYPER_OID_DATE}; }
170 static SqlType interval() noexcept { return {TypeTag::Interval, HYPER_OID_INTERVAL}; }
175 static SqlType time() noexcept { return {TypeTag::Time, HYPER_OID_TIME}; }
180 static SqlType timestamp() noexcept { return {TypeTag::Timestamp, HYPER_OID_TIMESTAMP}; }
185 static SqlType timestampTZ() noexcept { return {TypeTag::TimestampTZ, HYPER_OID_TIMESTAMP_TZ}; }
190 static SqlType geography() noexcept { return {TypeTag::Geography, HYPER_OID_GEOGRAPHY}; }
191
195 friend bool operator==(const SqlType& a, const SqlType& b) noexcept;
199 friend bool operator>(const SqlType& a, const SqlType& b) noexcept;
203 friend bool operator!=(const SqlType& a, const SqlType& b) noexcept;
207 friend bool operator<(const SqlType& a, const SqlType& b) noexcept;
211 friend bool operator<=(const SqlType& a, const SqlType& b) noexcept;
215 friend bool operator>=(const SqlType& a, const SqlType& b) noexcept;
219 friend std::ostream& operator<<(std::ostream& os, const SqlType& obj);
220
221 private:
223 TypeTag tag_;
225 uint32_t internalOid_;
227 hyper_type_modifier_t modifier_;
228
229 friend class internal::HyperTableDefinition;
230 friend struct std::hash<hyperapi::SqlType>;
231};
232}
233
234namespace std {
235
237template <>
238struct hash<hyperapi::SqlType> {
240 size_t operator()(const hyperapi::SqlType& type) const noexcept { return (static_cast<size_t>(type.tag_) << 32) | type.modifier_; }
241};
242}
243
244#include <hyperapi/impl/SqlType.impl.hpp>
245
246#endif
A date data value.
Definition Date.hpp:18
An interval data value.
Definition Interval.hpp:18
A fixed-point numeric data value with scale fraction digits and precision digits overall.
Definition Numeric.hpp:47
A Hyper SQL type.
Definition SqlType.hpp:44
uint32_t getInternalOid() const noexcept
Returns the internal oid.
Definition SqlType.hpp:61
static SqlType smallInt() noexcept
Returns the SMALL INTEGER SQL type.
Definition SqlType.hpp:106
static SqlType geography() noexcept
Returns the GEOGRAPHY SQL type.
Definition SqlType.hpp:190
static SqlType character(uint32_t maxLength) noexcept
Returns the CHARACTER SQL type.
Definition SqlType.hpp:155
static SqlType real() noexcept
Returns the REAL SQL type.
Definition SqlType.hpp:123
static SqlType numeric(uint16_t precision, uint16_t scale) noexcept
Returns the NUMERIC SQL type.
Definition SqlType.hpp:118
friend bool operator==(const SqlType &a, const SqlType &b) noexcept
Equality operator.
friend std::ostream & operator<<(std::ostream &os, const SqlType &obj)
Stream output operator.
SqlType(TypeTag tag, uint32_t oid, hyper_type_modifier_t modifier=HYPER_UNUSED_MODIFIER) noexcept
Constructor.
Definition SqlType.hpp:47
TypeTag getTag() const noexcept
Returns the type tag.
Definition SqlType.hpp:54
static SqlType timestampTZ() noexcept
Returns the TIMESTAMPTZ SQL type.
Definition SqlType.hpp:185
uint32_t getScale() const noexcept
Returns the scale parameter of the type if the type supports it, HYPER_UNUSED_MODIFIER otherwise.
uint32_t getMaxLength() const noexcept
Returns the maximum length parameter of the type if the type supports it, HYPER_UNUSED_MODIFIER other...
uint32_t getInternalTypeModifier() const noexcept
Returns the internal type modifier.
Definition SqlType.hpp:68
static SqlType json() noexcept
Returns the JSON SQL type.
Definition SqlType.hpp:160
static SqlType bytes() noexcept
Returns the BYTEA SQL type.
Definition SqlType.hpp:138
static SqlType oid() noexcept
Returns the OID SQL type.
Definition SqlType.hpp:133
static SqlType bigInt() noexcept
Returns the BIG INTEGER SQL type.
Definition SqlType.hpp:101
friend bool operator<=(const SqlType &a, const SqlType &b) noexcept
Smaller or equal operator.
static SqlType text() noexcept
Returns the TEXT SQL type.
Definition SqlType.hpp:143
static SqlType interval() noexcept
Returns the INTERVAL SQL type.
Definition SqlType.hpp:170
friend bool operator>=(const SqlType &a, const SqlType &b) noexcept
Greater or equal operator.
static SqlType date() noexcept
Returns the DATE SQL type.
Definition SqlType.hpp:165
static SqlType integer() noexcept
Returns the INTEGER SQL type.
Definition SqlType.hpp:111
static SqlType varchar(uint32_t maxLength) noexcept
Returns the VARCHAR SQL type.
Definition SqlType.hpp:149
static SqlType time() noexcept
Returns the TIME SQL type.
Definition SqlType.hpp:175
friend bool operator>(const SqlType &a, const SqlType &b) noexcept
Greater operator.
uint32_t getPrecision() const noexcept
Returns the maximum precision parameter of the type if the type supports it, HYPER_UNUSED_MODIFIER ot...
static SqlType doublePrecision() noexcept
Returns the DOUBLE PRECISION SQL type.
Definition SqlType.hpp:128
friend bool operator<(const SqlType &a, const SqlType &b) noexcept
Smaller operator.
std::string toString() const
Returns a string representation for debugging.
static SqlType timestamp() noexcept
Returns the TIMESTAMP SQL type.
Definition SqlType.hpp:180
friend bool operator!=(const SqlType &a, const SqlType &b) noexcept
Not equal operator.
A time data value.
Definition Time.hpp:18
A timestamp data value.
Definition Timestamp.hpp:16
The primary namespace of the Hyper API for C++.
Definition ByteSpan.hpp:15
TypeTag
A type tag.
Definition SqlType.hpp:18
size_t operator()(const hyperapi::SqlType &type) const noexcept
Calculates the hash value of the given SQL type.
Definition SqlType.hpp:240