aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/sqlite/sqlitecolumn.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/sqlite/sqlitecolumn.h')
-rw-r--r--src/libs/sqlite/sqlitecolumn.h85
1 files changed, 57 insertions, 28 deletions
diff --git a/src/libs/sqlite/sqlitecolumn.h b/src/libs/sqlite/sqlitecolumn.h
index 35a5e0f25c..ecca180559 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