aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/sqlite/createtablesqlstatementbuilder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/sqlite/createtablesqlstatementbuilder.cpp')
-rw-r--r--src/libs/sqlite/createtablesqlstatementbuilder.cpp308
1 files changed, 0 insertions, 308 deletions
diff --git a/src/libs/sqlite/createtablesqlstatementbuilder.cpp b/src/libs/sqlite/createtablesqlstatementbuilder.cpp
deleted file mode 100644
index d237d8e8fc..0000000000
--- a/src/libs/sqlite/createtablesqlstatementbuilder.cpp
+++ /dev/null
@@ -1,308 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#include "createtablesqlstatementbuilder.h"
-
-namespace Sqlite {
-
-CreateTableSqlStatementBuilder::CreateTableSqlStatementBuilder()
- : m_sqlStatementBuilder("CREATE $temporaryTABLE $ifNotExits$table($columnDefinitions)$withoutRowId")
-{
-}
-
-void CreateTableSqlStatementBuilder::setTableName(Utils::SmallString &&tableName)
-{
- m_sqlStatementBuilder.clear();
-
- this->m_tableName = std::move(tableName);
-}
-
-void CreateTableSqlStatementBuilder::addColumn(Utils::SmallStringView columnName,
- ColumnType columnType,
- Constraints &&constraints)
-{
- m_sqlStatementBuilder.clear();
-
- m_columns.emplace_back(Utils::SmallStringView{}, columnName, columnType, std::move(constraints));
-}
-
-void CreateTableSqlStatementBuilder::addConstraint(TableConstraint &&constraint)
-{
- m_tableConstraints.push_back(std::move(constraint));
-}
-
-void CreateTableSqlStatementBuilder::setConstraints(TableConstraints constraints)
-{
- m_tableConstraints = std::move(constraints);
-}
-
-void CreateTableSqlStatementBuilder::setColumns(SqliteColumns columns)
-{
- m_sqlStatementBuilder.clear();
-
- m_columns = std::move(columns);
-}
-
-void CreateTableSqlStatementBuilder::setUseWithoutRowId(bool useWithoutRowId)
-{
- m_useWithoutRowId = useWithoutRowId;
-}
-
-void CreateTableSqlStatementBuilder::setUseIfNotExists(bool useIfNotExists)
-{
- m_useIfNotExits = useIfNotExists;
-}
-
-void CreateTableSqlStatementBuilder::setUseTemporaryTable(bool useTemporaryTable)
-{
- m_useTemporaryTable = useTemporaryTable;
-}
-
-void CreateTableSqlStatementBuilder::clear()
-{
- m_sqlStatementBuilder.clear();
- m_columns.clear();
- m_tableName.clear();
- m_useWithoutRowId = false;
-}
-
-void CreateTableSqlStatementBuilder::clearColumns()
-{
- m_sqlStatementBuilder.clear();
- m_columns.clear();
-}
-
-Utils::SmallStringView CreateTableSqlStatementBuilder::sqlStatement() const
-{
- if (!m_sqlStatementBuilder.isBuild())
- bindAll();
-
- return m_sqlStatementBuilder.sqlStatement();
-}
-
-bool CreateTableSqlStatementBuilder::isValid() const
-{
- return m_tableName.hasContent() && !m_columns.empty();
-}
-
-namespace {
-Utils::SmallStringView actionToText(ForeignKeyAction action)
-{
- switch (action) {
- case ForeignKeyAction::NoAction:
- return "NO ACTION";
- case ForeignKeyAction::Restrict:
- return "RESTRICT";
- case ForeignKeyAction::SetNull:
- return "SET NULL";
- case ForeignKeyAction::SetDefault:
- return "SET DEFAULT";
- case ForeignKeyAction::Cascade:
- return "CASCADE";
- }
-
- return "";
-}
-
-class ContraintsVisiter
-{
-public:
- ContraintsVisiter(Utils::SmallString &columnDefinitionString)
- : columnDefinitionString(columnDefinitionString)
- {}
-
- void operator()(const Unique &) { columnDefinitionString.append(" UNIQUE"); }
-
- void operator()(const PrimaryKey &primaryKey)
- {
- columnDefinitionString.append(" PRIMARY KEY");
- if (primaryKey.autoincrement == AutoIncrement::Yes)
- columnDefinitionString.append(" AUTOINCREMENT");
- }
-
- void operator()(const ForeignKey &foreignKey)
- {
- columnDefinitionString.append(" REFERENCES ");
- columnDefinitionString.append(foreignKey.table);
-
- if (foreignKey.column.hasContent()) {
- columnDefinitionString.append("(");
- columnDefinitionString.append(foreignKey.column);
- columnDefinitionString.append(")");
- }
-
- if (foreignKey.updateAction != ForeignKeyAction::NoAction) {
- columnDefinitionString.append(" ON UPDATE ");
- columnDefinitionString.append(actionToText(foreignKey.updateAction));
- }
-
- if (foreignKey.deleteAction != ForeignKeyAction::NoAction) {
- columnDefinitionString.append(" ON DELETE ");
- columnDefinitionString.append(actionToText(foreignKey.deleteAction));
- }
-
- if (foreignKey.enforcement == Enforment::Deferred)
- columnDefinitionString.append(" DEFERRABLE INITIALLY DEFERRED");
- }
-
- void operator()(const NotNull &) { columnDefinitionString.append(" NOT NULL"); }
-
- void operator()(const Check &check)
- {
- columnDefinitionString.append(" CHECK (");
- columnDefinitionString.append(check.expression);
- columnDefinitionString.append(")");
- }
-
- void operator()(const DefaultValue &defaultValue)
- {
- columnDefinitionString.append(" DEFAULT ");
- switch (defaultValue.value.type()) {
- case Sqlite::ValueType::Integer:
- columnDefinitionString.append(
- Utils::SmallString::number(defaultValue.value.toInteger()));
- break;
- case Sqlite::ValueType::Float:
- columnDefinitionString.append(Utils::SmallString::number(defaultValue.value.toFloat()));
- break;
- case Sqlite::ValueType::String:
- columnDefinitionString.append("'");
- columnDefinitionString.append(defaultValue.value.toStringView());
- columnDefinitionString.append("'");
- break;
- default:
- break;
- }
- }
-
- void operator()(const DefaultExpression &defaultexpression)
- {
- columnDefinitionString.append(" DEFAULT (");
- columnDefinitionString.append(defaultexpression.expression);
- columnDefinitionString.append(")");
- }
-
- void operator()(const Collate &collate)
- {
- columnDefinitionString.append(" COLLATE ");
- columnDefinitionString.append(collate.collation);
- }
-
- void operator()(const GeneratedAlways &generatedAlways)
- {
- columnDefinitionString.append(" GENERATED ALWAYS AS (");
- columnDefinitionString.append(generatedAlways.expression);
- columnDefinitionString.append(")");
-
- if (generatedAlways.storage == Sqlite::GeneratedAlwaysStorage::Virtual)
- columnDefinitionString.append(" VIRTUAL");
- else
- columnDefinitionString.append(" STORED");
- }
-
- Utils::SmallString &columnDefinitionString;
-};
-
-class TableContraintsVisiter
-{
-public:
- TableContraintsVisiter(Utils::SmallString &columnDefinitionString)
- : columnDefinitionString(columnDefinitionString)
- {}
-
- void operator()(const TablePrimaryKey &primaryKey)
- {
- columnDefinitionString.append("PRIMARY KEY(");
- columnDefinitionString.append(primaryKey.columns.join(", "));
- columnDefinitionString.append(")");
- }
-
- Utils::SmallString &columnDefinitionString;
-};
-} // namespace
-void CreateTableSqlStatementBuilder::bindColumnDefinitionsAndTableConstraints() const
-{
- Utils::SmallStringVector columnDefinitionStrings;
- columnDefinitionStrings.reserve(m_columns.size());
-
- for (const Column &column : m_columns) {
- auto columnDefinitionString = Utils::SmallString::join(
- {column.name, SqlStatementBuilder::columnTypeToString(column.type)});
-
- ContraintsVisiter visiter{columnDefinitionString};
-
- for (const Constraint &constraint : column.constraints)
- Utils::visit(visiter, constraint);
-
- columnDefinitionStrings.push_back(std::move(columnDefinitionString));
- }
-
- for (const TableConstraint &constraint : m_tableConstraints) {
- Utils::SmallString columnDefinitionString;
-
- TableContraintsVisiter visiter{columnDefinitionString};
- Utils::visit(visiter, constraint);
-
- columnDefinitionStrings.push_back(std::move(columnDefinitionString));
- }
-
- m_sqlStatementBuilder.bind("$columnDefinitions", columnDefinitionStrings);
-}
-
-void CreateTableSqlStatementBuilder::bindAll() const
-{
- m_sqlStatementBuilder.bind("$table", m_tableName.clone());
-
- bindTemporary();
- bindIfNotExists();
- bindColumnDefinitionsAndTableConstraints();
- bindWithoutRowId();
-}
-
-void CreateTableSqlStatementBuilder::bindWithoutRowId() const
-{
- if (m_useWithoutRowId)
- m_sqlStatementBuilder.bind("$withoutRowId", " WITHOUT ROWID");
- else
- m_sqlStatementBuilder.bindEmptyText("$withoutRowId");
-}
-
-void CreateTableSqlStatementBuilder::bindIfNotExists() const
-{
- if (m_useIfNotExits)
- m_sqlStatementBuilder.bind("$ifNotExits", "IF NOT EXISTS ");
- else
- m_sqlStatementBuilder.bindEmptyText("$ifNotExits");
-}
-
-void CreateTableSqlStatementBuilder::bindTemporary() const
-{
- if (m_useTemporaryTable)
- m_sqlStatementBuilder.bind("$temporary", "TEMPORARY ");
- else
- m_sqlStatementBuilder.bindEmptyText("$temporary");
-}
-
-} // namespace Sqlite