summaryrefslogtreecommitdiffstats
path: root/src/sql/drivers/sqlite/qsql_sqlite.cpp
diff options
context:
space:
mode:
authorQt Continuous Integration System <qt-info@nokia.com>2011-12-07 21:22:44 (GMT)
committerQt Continuous Integration System <qt-info@nokia.com>2011-12-07 21:22:44 (GMT)
commitca6db4b5b89f627a970e9f4ea489eae38d771f66 (patch)
tree978d3c5a50d03c98efde6e333c0156cb31d75a43 /src/sql/drivers/sqlite/qsql_sqlite.cpp
parent1857040a8993427c8a4ebed8c615cf79c6b46cde (diff)
parentc220a5dd48d440256a1c9cd73221931f6d99dea5 (diff)
downloadQt-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.cpp18
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));