forked from qt-creator/qt-creator
We use a name space now, so the prefix is not of much use. Change-Id: I2b077576f94dab778add6ab2e54870f7ca18da78 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
154 lines
4.6 KiB
C++
154 lines
4.6 KiB
C++
/****************************************************************************
|
|
**
|
|
** 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::SmallString &&columnName,
|
|
ColumnType columnType,
|
|
Contraint constraint)
|
|
{
|
|
m_sqlStatementBuilder.clear();
|
|
|
|
m_columns.emplace_back(std::move(columnName), columnType, constraint);
|
|
}
|
|
|
|
void CreateTableSqlStatementBuilder::setColumns(const 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();
|
|
}
|
|
|
|
void CreateTableSqlStatementBuilder::bindColumnDefinitions() const
|
|
{
|
|
Utils::SmallStringVector columnDefinitionStrings;
|
|
|
|
for (const Column &columns : m_columns) {
|
|
Utils::SmallString columnDefinitionString = {columns.name(), " ", columns.typeString()};
|
|
|
|
switch (columns.constraint()) {
|
|
case Contraint::PrimaryKey: columnDefinitionString.append(" PRIMARY KEY"); break;
|
|
case Contraint::Unique: columnDefinitionString.append(" UNIQUE"); break;
|
|
case Contraint::NoConstraint: break;
|
|
}
|
|
|
|
columnDefinitionStrings.push_back(columnDefinitionString);
|
|
}
|
|
|
|
m_sqlStatementBuilder.bind("$columnDefinitions", columnDefinitionStrings);
|
|
}
|
|
|
|
void CreateTableSqlStatementBuilder::bindAll() const
|
|
{
|
|
m_sqlStatementBuilder.bind("$table", m_tableName.clone());
|
|
|
|
bindTemporary();
|
|
bindIfNotExists();
|
|
bindColumnDefinitions();
|
|
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
|