diff options
Diffstat (limited to 'src/libs/sqlite/sqlitecolumn.h')
-rw-r--r-- | src/libs/sqlite/sqlitecolumn.h | 85 |
1 files changed, 57 insertions, 28 deletions
diff --git a/src/libs/sqlite/sqlitecolumn.h b/src/libs/sqlite/sqlitecolumn.h index 35a5e0f25c9..ecca1805590 100644 --- a/src/libs/sqlite/sqlitecolumn.h +++ b/src/libs/sqlite/sqlitecolumn.h @@ -28,19 +28,20 @@ #include "constraints.h" #include <functional> +#include <type_traits> namespace Sqlite { - -class Column +template<typename ColumnType> +class BasicColumn { public: - Column() = default; + BasicColumn() = default; - Column(Utils::SmallStringView tableName, - Utils::SmallStringView name, - ColumnType type = ColumnType::None, - Constraints &&constraints = {}) + BasicColumn(Utils::SmallStringView tableName, + Utils::SmallStringView name, + ColumnType type = {}, + Constraints &&constraints = {}) : constraints(std::move(constraints)) , name(name) , tableName(tableName) @@ -50,31 +51,46 @@ public: void clear() { name.clear(); - type = ColumnType::Numeric; + type = {}; constraints = {}; } Utils::SmallString typeString() const { - switch (type) { - case ColumnType::None: - return {}; - case ColumnType::Numeric: - return "NUMERIC"; - case ColumnType::Integer: - return "INTEGER"; - case ColumnType::Real: - return "REAL"; - case ColumnType::Text: - return "TEXT"; - case ColumnType::Blob: - return "BLOB"; + if constexpr (std::is_same_v<ColumnType, ::Sqlite::ColumnType>) { + switch (type) { + case ColumnType::None: + return {}; + case ColumnType::Numeric: + return "NUMERIC"; + case ColumnType::Integer: + return "INTEGER"; + case ColumnType::Real: + return "REAL"; + case ColumnType::Text: + return "TEXT"; + case ColumnType::Blob: + return "BLOB"; + } + } else { + switch (type) { + case ColumnType::Any: + return "ANY"; + case ColumnType::Int: + return "INT"; + case ColumnType::Integer: + return "INTEGER"; + case ColumnType::Real: + return "REAL"; + case ColumnType::Text: + return "TEXT"; + case ColumnType::Blob: + return "BLOB"; + } } - - Q_UNREACHABLE(); } - friend bool operator==(const Column &first, const Column &second) + friend bool operator==(const BasicColumn &first, const BasicColumn &second) { return first.name == second.name && first.type == second.type && first.constraints == second.constraints && first.tableName == second.tableName; @@ -84,11 +100,24 @@ public: Constraints constraints; Utils::SmallString name; Utils::SmallString tableName; - ColumnType type = ColumnType::Numeric; + ColumnType type = {}; }; // namespace Sqlite -using SqliteColumns = std::vector<Column>; -using SqliteColumnConstReference = std::reference_wrapper<const Column>; -using SqliteColumnConstReferences = std::vector<SqliteColumnConstReference>; +using Column = BasicColumn<ColumnType>; +using StrictColumn = BasicColumn<StrictColumnType>; + +using Columns = std::vector<Column>; +using StrictColumns = std::vector<StrictColumn>; +using ColumnConstReference = std::reference_wrapper<const Column>; +using StrictColumnConstReference = std::reference_wrapper<const StrictColumn>; +using ColumnConstReferences = std::vector<Column>; +using StrictColumnConstReferences = std::vector<StrictColumn>; + +template<typename ColumnType> +using BasicColumns = std::vector<BasicColumn<ColumnType>>; +template<typename ColumnType> +using BasicColumnConstReference = std::reference_wrapper<const BasicColumn<ColumnType>>; +template<typename ColumnType> +using BasicColumnConstReferences = std::vector<BasicColumn<ColumnType>>; } // namespace Sqlite |