forked from qt-creator/qt-creator
Sqlite: Add variadic bind and write functions
You can now write
SqliteWriteStatement statement("UPDATE test SET name=?, number=?
WHERE rowid=?", database);
statement.write("see", 7.23, 1);
and
SqliteWriteStatement statement("UPDATE test SET name=@name, number=@number
WHERE rowid=@id", database);
statement.writeNamed("@name", "see", "@number", 7.23, "@id", 1);
This is more type safe than using variants and performant too.
Change-Id: Ie1ed2a6d326b956be5c4ec056214f3f5b1531f45
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -43,14 +43,8 @@
|
||||
namespace Sqlite {
|
||||
|
||||
SqliteStatement::SqliteStatement(Utils::SmallStringView sqlStatement, SqliteDatabase &database)
|
||||
: SqliteStatement(sqlStatement, database.backend())
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
SqliteStatement::SqliteStatement(Utils::SmallStringView sqlStatement, SqliteDatabaseBackend &databaseBackend)
|
||||
: m_compiledStatement(nullptr, deleteCompiledStatement),
|
||||
m_databaseBackend(databaseBackend),
|
||||
m_database(database),
|
||||
m_bindingParameterCount(0),
|
||||
m_columnCount(0),
|
||||
m_isReadyToFetchValues(false)
|
||||
@@ -146,6 +140,11 @@ void SqliteStatement::step() const
|
||||
next();
|
||||
}
|
||||
|
||||
void SqliteStatement::execute() const
|
||||
{
|
||||
next();
|
||||
}
|
||||
|
||||
int SqliteStatement::columnCount() const
|
||||
{
|
||||
return m_columnCount;
|
||||
@@ -203,7 +202,7 @@ template SQLITE_EXPORT void SqliteStatement::bind(Utils::SmallStringView name, q
|
||||
template SQLITE_EXPORT void SqliteStatement::bind(Utils::SmallStringView name, double value);
|
||||
template SQLITE_EXPORT void SqliteStatement::bind(Utils::SmallStringView name, Utils::SmallStringView text);
|
||||
|
||||
int SqliteStatement::bindingIndexForName(Utils::SmallStringView name)
|
||||
int SqliteStatement::bindingIndexForName(Utils::SmallStringView name) const
|
||||
{
|
||||
return sqlite3_bind_parameter_index(m_compiledStatement.get(), name.data());
|
||||
}
|
||||
@@ -241,12 +240,12 @@ void SqliteStatement::prepare(Utils::SmallStringView sqlStatement)
|
||||
|
||||
sqlite3 *SqliteStatement::sqliteDatabaseHandle() const
|
||||
{
|
||||
return m_databaseBackend.sqliteDatabaseHandle();
|
||||
return m_database.backend().sqliteDatabaseHandle();
|
||||
}
|
||||
|
||||
TextEncoding SqliteStatement::databaseTextEncoding()
|
||||
{
|
||||
return m_databaseBackend.textEncoding();
|
||||
return m_database.backend().textEncoding();
|
||||
}
|
||||
|
||||
bool SqliteStatement::checkForStepError(int resultCode) const
|
||||
@@ -359,6 +358,11 @@ QString SqliteStatement::columnName(int column) const
|
||||
return QString::fromUtf8(sqlite3_column_name(m_compiledStatement.get(), column));
|
||||
}
|
||||
|
||||
SqliteDatabase &SqliteStatement::database() const
|
||||
{
|
||||
return m_database;
|
||||
}
|
||||
|
||||
static Utils::SmallString textForColumn(sqlite3_stmt *sqlStatment, int column)
|
||||
{
|
||||
const char *text = reinterpret_cast<const char*>(sqlite3_column_text(sqlStatment, column));
|
||||
|
||||
Reference in New Issue
Block a user