diff options
author | Qt Continuous Integration System <qt-info@nokia.com> | 2011-12-07 21:22:44 (GMT) |
---|---|---|
committer | Qt Continuous Integration System <qt-info@nokia.com> | 2011-12-07 21:22:44 (GMT) |
commit | ca6db4b5b89f627a970e9f4ea489eae38d771f66 (patch) | |
tree | 978d3c5a50d03c98efde6e333c0156cb31d75a43 /src/sql/drivers/sqlite/qsql_sqlite.cpp | |
parent | 1857040a8993427c8a4ebed8c615cf79c6b46cde (diff) | |
parent | c220a5dd48d440256a1c9cd73221931f6d99dea5 (diff) | |
download | Qt-ca6db4b5b89f627a970e9f4ea489eae38d771f66.zip Qt-ca6db4b5b89f627a970e9f4ea489eae38d771f66.tar.gz Qt-ca6db4b5b89f627a970e9f4ea489eae38d771f66.tar.bz2 |
Merge branch 'master' of git://scm.dev.nokia.troll.no/qt/qt-fire-team
* 'master' of git://scm.dev.nokia.troll.no/qt/qt-fire-team: (37 commits)
Fix declarative examples and demos issue on Windows
Symbian: allow apps to disable GL multisampling
QSqlRelationalTableModel doesn't follow relations on the first column
symbian - don't export qsymbianbearer.qtplugin twice
Correct client rect calculation for MCL
qmlplugindump: Fix missing flush for objects that don't fit a line.
qmlplugindump: Avoid reporting types as attaching to themselves.
Fix QtDemo declarative examples
Correct image paths for dynamicscene
Fix stretched font positions in Lion
Symbian: Fix CBA display on application with multiple windows
Fix def files
Fix stack overwrite in QDBusDemarshaller
Qt Linguist: Fix crashes
fixed error generating wrong introspection string in header output file
doc - document symbian behaviour of QFile::link
Symbian - prefer sessions started by this process to choose proxy
Backport SMP safe initialisation of QNetworkConfigurationManager
Remove more "unused variable" warnings
QTreeView: fix crash when starting a drag with hidden columns.
...
Diffstat (limited to 'src/sql/drivers/sqlite/qsql_sqlite.cpp')
-rw-r--r-- | src/sql/drivers/sqlite/qsql_sqlite.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/sql/drivers/sqlite/qsql_sqlite.cpp b/src/sql/drivers/sqlite/qsql_sqlite.cpp index 9fba6d6..38e4a63 100644 --- a/src/sql/drivers/sqlite/qsql_sqlite.cpp +++ b/src/sql/drivers/sqlite/qsql_sqlite.cpp @@ -104,6 +104,7 @@ class QSQLiteDriverPrivate public: inline QSQLiteDriverPrivate() : access(0) {} sqlite3 *access; + QList <QSQLiteResult *> results; }; @@ -286,10 +287,12 @@ QSQLiteResult::QSQLiteResult(const QSQLiteDriver* db) { d = new QSQLiteResultPrivate(this); d->access = db->d->access; + db->d->results.append(this); } QSQLiteResult::~QSQLiteResult() { + qobject_cast<const QSQLiteDriver *>(driver())->d->results.removeOne(this); d->cleanup(); delete d; } @@ -322,12 +325,14 @@ bool QSQLiteResult::prepare(const QString &query) setSelect(false); + const void *pzTail = NULL; + #if (SQLITE_VERSION_NUMBER >= 3003011) int res = sqlite3_prepare16_v2(d->access, query.constData(), (query.size() + 1) * sizeof(QChar), - &d->stmt, 0); + &d->stmt, &pzTail); #else int res = sqlite3_prepare16(d->access, query.constData(), (query.size() + 1) * sizeof(QChar), - &d->stmt, 0); + &d->stmt, &pzTail); #endif if (res != SQLITE_OK) { @@ -335,6 +340,11 @@ bool QSQLiteResult::prepare(const QString &query) "Unable to execute statement"), QSqlError::StatementError, res)); d->finalize(); return false; + } else if (pzTail && !QString(reinterpret_cast<const QChar *>(pzTail)).trimmed().isEmpty()) { + setLastError(qMakeError(d->access, QCoreApplication::translate("QSQLiteResult", + "Unable to execute multiple statements at a time"), QSqlError::StatementError, SQLITE_MISUSE)); + d->finalize(); + return false; } return true; } @@ -546,6 +556,10 @@ bool QSQLiteDriver::open(const QString & db, const QString &, const QString &, c void QSQLiteDriver::close() { if (isOpen()) { + foreach (QSQLiteResult *result, d->results) { + result->d->finalize(); + } + if (sqlite3_close(d->access) != SQLITE_OK) setLastError(qMakeError(d->access, tr("Error closing database"), QSqlError::ConnectionError)); |