Sqlite: Add primary key table constraint to table builder

Change-Id: I60c158eb76db2217a2d045053bb8e47eef75ff7a
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Marco Bubke
2020-06-02 22:16:06 +02:00
committed by Tim Jenssen
parent a61eff0079
commit cf441e8198
8 changed files with 139 additions and 7 deletions

View File

@@ -48,7 +48,17 @@ void CreateTableSqlStatementBuilder::addColumn(Utils::SmallStringView columnName
m_columns.emplace_back(Utils::SmallStringView{}, columnName, columnType, std::move(constraints));
}
void CreateTableSqlStatementBuilder::setColumns(const SqliteColumns &columns)
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();
@@ -212,8 +222,25 @@ public:
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::bindColumnDefinitions() const
void CreateTableSqlStatementBuilder::bindColumnDefinitionsAndTableConstraints() const
{
Utils::SmallStringVector columnDefinitionStrings;
columnDefinitionStrings.reserve(m_columns.size());
@@ -226,7 +253,16 @@ void CreateTableSqlStatementBuilder::bindColumnDefinitions() const
for (const Constraint &constraint : column.constraints)
Utils::visit(visiter, constraint);
columnDefinitionStrings.push_back(columnDefinitionString);
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);
@@ -238,7 +274,7 @@ void CreateTableSqlStatementBuilder::bindAll() const
bindTemporary();
bindIfNotExists();
bindColumnDefinitions();
bindColumnDefinitionsAndTableConstraints();
bindWithoutRowId();
}