5#if defined(_WIN32) || defined(_WIN64)
15namespace SqlColumnTypeDefinitions
20struct Binary { std::size_t size = 255; };
22struct Char { std::size_t size = 1; };
25struct Decimal { std::size_t precision {}; std::size_t scale {}; };
28struct NChar { std::size_t size = 1; };
29struct NVarchar { std::size_t size = 255; };
32struct Text { std::size_t size {}; };
36struct VarBinary { std::size_t size = 255; };
37struct Varchar { std::size_t size = 255; };
42using SqlColumnTypeDefinition = std::variant<SqlColumnTypeDefinitions::Bigint,
43 SqlColumnTypeDefinitions::Binary,
44 SqlColumnTypeDefinitions::Bool,
45 SqlColumnTypeDefinitions::Char,
46 SqlColumnTypeDefinitions::Date,
47 SqlColumnTypeDefinitions::DateTime,
48 SqlColumnTypeDefinitions::Decimal,
49 SqlColumnTypeDefinitions::Guid,
50 SqlColumnTypeDefinitions::Integer,
51 SqlColumnTypeDefinitions::NChar,
52 SqlColumnTypeDefinitions::NVarchar,
53 SqlColumnTypeDefinitions::Real,
54 SqlColumnTypeDefinitions::Tinyint,
55 SqlColumnTypeDefinitions::Smallint,
56 SqlColumnTypeDefinitions::Text,
57 SqlColumnTypeDefinitions::Time,
58 SqlColumnTypeDefinitions::Timestamp,
59 SqlColumnTypeDefinitions::VarBinary,
60 SqlColumnTypeDefinitions::Varchar>;
65constexpr std::optional<SqlColumnTypeDefinition> MakeColumnTypeFromNative(
int value, std::size_t size, std::size_t precision)
69 using namespace SqlColumnTypeDefinitions;
73 case SQL_BIGINT:
return Bigint {};
74 case SQL_BINARY:
return Binary { size };
75 case SQL_BIT:
return Bool {};
76 case SQL_CHAR:
return Char { size };
77 case SQL_DATE:
return Date {};
78 case SQL_DECIMAL:
return Decimal { .precision = precision, .scale = size };
79 case SQL_DOUBLE:
return Real {};
80 case SQL_FLOAT:
return Real {};
81 case SQL_GUID:
return Guid {};
82 case SQL_INTEGER:
return Integer {};
83 case SQL_LONGVARBINARY:
return VarBinary { size };
84 case SQL_LONGVARCHAR:
return Varchar { size };
85 case SQL_NUMERIC:
return Decimal { .precision = precision, .scale = size };
86 case SQL_REAL:
return Real {};
87 case SQL_SMALLINT:
return Smallint {};
88 case SQL_TIME:
return Time {};
89 case SQL_TIMESTAMP:
return DateTime {};
90 case SQL_TINYINT:
return Tinyint {};
91 case SQL_TYPE_DATE:
return Date {};
92 case SQL_TYPE_TIME:
return Time {};
93 case SQL_TYPE_TIMESTAMP:
return DateTime {};
94 case SQL_VARBINARY:
return Binary { size };
95 case SQL_VARCHAR:
return Varchar { size };
96 case SQL_WCHAR:
return NChar { size };
97 case SQL_WLONGVARCHAR:
return NVarchar { size };
98 case SQL_WVARCHAR:
return NVarchar { size };
99 case SQL_UNKNOWN_TYPE:
return std::nullopt;
100 default:
return std::nullopt;