// Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #pragma once #include "constraints.h" #include #include namespace Sqlite { template class BasicColumn { public: BasicColumn() = default; BasicColumn(Utils::SmallStringView tableName, Utils::SmallStringView name, ColumnType type = {}, Constraints &&constraints = {}) : constraints(std::move(constraints)) , name(name) , tableName(tableName) , type(type) {} void clear() { name.clear(); type = {}; constraints = {}; } Utils::SmallString typeString() const { if constexpr (std::is_same_v) { 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"; } } } 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; } public: Constraints constraints; Utils::SmallString name; Utils::SmallString tableName; ColumnType type = {}; }; // namespace Sqlite using Column = BasicColumn; using StrictColumn = BasicColumn; using Columns = std::vector; using StrictColumns = std::vector; using ColumnConstReference = std::reference_wrapper; using StrictColumnConstReference = std::reference_wrapper; using ColumnConstReferences = std::vector; using StrictColumnConstReferences = std::vector; template using BasicColumns = std::vector>; template using BasicColumnConstReference = std::reference_wrapper>; template using BasicColumnConstReferences = std::vector>; } // namespace Sqlite