summaryrefslogtreecommitdiffstats
path: root/src/sql
diff options
context:
space:
mode:
authorMark Brand <mabrand@mabrand.nl>2015-11-25 22:26:57 +0100
committerMark Brand <mabrand@mabrand.nl>2015-12-09 07:32:32 +0000
commit371c2e478604af3e992d26f10ed755a86e166380 (patch)
tree5a2baed852def13764002f2cc6961bef151d98e8 /src/sql
parenta5cd0818794049ac5568d46c6301b188eb3d6623 (diff)
qsql_sqlite and qsql_sqlite2: don't hold driver data in result
Change-Id: Ia4f6adc6daaea97ac06246e9d01c6561de1227ea Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Diffstat (limited to 'src/sql')
-rw-r--r--src/sql/drivers/sqlite/qsql_sqlite.cpp21
-rw-r--r--src/sql/drivers/sqlite2/qsql_sqlite2.cpp19
2 files changed, 15 insertions, 25 deletions
diff --git a/src/sql/drivers/sqlite/qsql_sqlite.cpp b/src/sql/drivers/sqlite/qsql_sqlite.cpp
index 5f6ccf3990..c7086e1777 100644
--- a/src/sql/drivers/sqlite/qsql_sqlite.cpp
+++ b/src/sql/drivers/sqlite/qsql_sqlite.cpp
@@ -150,8 +150,6 @@ public:
void initColumns(bool emptyResultset);
void finalize();
- sqlite3 *access;
-
sqlite3_stmt *stmt;
bool skippedStatus; // the status of the fetchNext() that's skipped
@@ -326,7 +324,7 @@ bool QSQLiteResultPrivate::fetchNext(QSqlCachedResult::ValueCache &values, int i
// SQLITE_ERROR is a generic error code and we must call sqlite3_reset()
// to get the specific error message.
res = sqlite3_reset(stmt);
- q->setLastError(qMakeError(access, QCoreApplication::translate("QSQLiteResult",
+ q->setLastError(qMakeError(drv_d_func()->access, QCoreApplication::translate("QSQLiteResult",
"Unable to fetch row"), QSqlError::ConnectionError, res));
q->setAt(QSql::AfterLastRow);
return false;
@@ -334,7 +332,7 @@ bool QSQLiteResultPrivate::fetchNext(QSqlCachedResult::ValueCache &values, int i
case SQLITE_BUSY:
default:
// something wrong, don't get col info, but still return false
- q->setLastError(qMakeError(access, QCoreApplication::translate("QSQLiteResult",
+ q->setLastError(qMakeError(drv_d_func()->access, QCoreApplication::translate("QSQLiteResult",
"Unable to fetch row"), QSqlError::ConnectionError, res));
sqlite3_reset(stmt);
q->setAt(QSql::AfterLastRow);
@@ -347,7 +345,6 @@ QSQLiteResult::QSQLiteResult(const QSQLiteDriver* db)
: QSqlCachedResult(*new QSQLiteResultPrivate(this, db))
{
Q_D(QSQLiteResult);
- d->access = d->drv_d_func()->access;
const_cast<QSQLiteDriverPrivate*>(d->drv_d_func())->results.append(this);
}
@@ -383,7 +380,7 @@ bool QSQLiteResult::prepare(const QString &query)
const void *pzTail = NULL;
#if (SQLITE_VERSION_NUMBER >= 3003011)
- int res = sqlite3_prepare16_v2(d->access, query.constData(), (query.size() + 1) * sizeof(QChar),
+ int res = sqlite3_prepare16_v2(d->drv_d_func()->access, query.constData(), (query.size() + 1) * sizeof(QChar),
&d->stmt, &pzTail);
#else
int res = sqlite3_prepare16(d->access, query.constData(), (query.size() + 1) * sizeof(QChar),
@@ -391,12 +388,12 @@ bool QSQLiteResult::prepare(const QString &query)
#endif
if (res != SQLITE_OK) {
- setLastError(qMakeError(d->access, QCoreApplication::translate("QSQLiteResult",
+ setLastError(qMakeError(d->drv_d_func()->access, QCoreApplication::translate("QSQLiteResult",
"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",
+ setLastError(qMakeError(d->drv_d_func()->access, QCoreApplication::translate("QSQLiteResult",
"Unable to execute multiple statements at a time"), QSqlError::StatementError, SQLITE_MISUSE));
d->finalize();
return false;
@@ -417,7 +414,7 @@ bool QSQLiteResult::exec()
int res = sqlite3_reset(d->stmt);
if (res != SQLITE_OK) {
- setLastError(qMakeError(d->access, QCoreApplication::translate("QSQLiteResult",
+ setLastError(qMakeError(d->drv_d_func()->access, QCoreApplication::translate("QSQLiteResult",
"Unable to reset statement"), QSqlError::StatementError, res));
d->finalize();
return false;
@@ -477,7 +474,7 @@ bool QSQLiteResult::exec()
}
}
if (res != SQLITE_OK) {
- setLastError(qMakeError(d->access, QCoreApplication::translate("QSQLiteResult",
+ setLastError(qMakeError(d->drv_d_func()->access, QCoreApplication::translate("QSQLiteResult",
"Unable to bind parameters"), QSqlError::StatementError, res));
d->finalize();
return false;
@@ -513,14 +510,14 @@ int QSQLiteResult::size()
int QSQLiteResult::numRowsAffected()
{
Q_D(const QSQLiteResult);
- return sqlite3_changes(d->access);
+ return sqlite3_changes(d->drv_d_func()->access);
}
QVariant QSQLiteResult::lastInsertId() const
{
Q_D(const QSQLiteResult);
if (isActive()) {
- qint64 id = sqlite3_last_insert_rowid(d->access);
+ qint64 id = sqlite3_last_insert_rowid(d->drv_d_func()->access);
if (id)
return id;
}
diff --git a/src/sql/drivers/sqlite2/qsql_sqlite2.cpp b/src/sql/drivers/sqlite2/qsql_sqlite2.cpp
index a170cb90be..cd449e28e8 100644
--- a/src/sql/drivers/sqlite2/qsql_sqlite2.cpp
+++ b/src/sql/drivers/sqlite2/qsql_sqlite2.cpp
@@ -127,8 +127,6 @@ public:
void init(const char **cnames, int numCols);
void finalize();
- sqlite *access;
-
// and we have too keep our own struct for the data (sqlite works via
// callback.
const char *currentTail;
@@ -136,7 +134,6 @@ public:
bool skippedStatus; // the status of the fetchNext() that's skipped
bool skipRow; // skip the next fetchNext()?
- bool utf8;
QSqlRecord rInf;
QVector<QVariant> firstRow;
};
@@ -148,8 +145,7 @@ QSQLite2ResultPrivate::QSQLite2ResultPrivate(QSQLite2Result *q, const QSQLite2Dr
currentTail(0),
currentMachine(0),
skippedStatus(false),
- skipRow(false),
- utf8(false)
+ skipRow(false)
{
}
@@ -261,7 +257,7 @@ bool QSQLite2ResultPrivate::fetchNext(QSqlCachedResult::ValueCache &values, int
if (idx < 0 && !initialFetch)
return true;
for (i = 0; i < colNum; ++i)
- values[i + idx] = utf8 ? QString::fromUtf8(fvals[i]) : QString::fromLatin1(fvals[i]);
+ values[i + idx] = drv_d_func()->utf8 ? QString::fromUtf8(fvals[i]) : QString::fromLatin1(fvals[i]);
return true;
case SQLITE_DONE:
if (rInf.isEmpty())
@@ -283,9 +279,6 @@ bool QSQLite2ResultPrivate::fetchNext(QSqlCachedResult::ValueCache &values, int
QSQLite2Result::QSQLite2Result(const QSQLite2Driver* db)
: QSqlCachedResult(*new QSQLite2ResultPrivate(this, db))
{
- Q_D(QSQLite2Result);
- d->access = d->drv_d_func()->access;
- d->utf8 = d->drv_d_func()->utf8;
}
QSQLite2Result::~QSQLite2Result()
@@ -316,8 +309,8 @@ bool QSQLite2Result::reset (const QString& query)
// Um, ok. callback based so.... pass private static function for this.
setSelect(false);
char *err = 0;
- int res = sqlite_compile(d->access,
- d->utf8 ? query.toUtf8().constData()
+ int res = sqlite_compile(d->drv_d_func()->access,
+ d->drv_d_func()->utf8 ? query.toUtf8().constData()
: query.toLatin1().constData(),
&(d->currentTail),
&(d->currentMachine),
@@ -359,8 +352,8 @@ int QSQLite2Result::size()
int QSQLite2Result::numRowsAffected()
{
- Q_D(const QSQLite2Result);
- return sqlite_changes(d->access);
+ Q_D(QSQLite2Result);
+ return sqlite_changes(d->drv_d_func()->access);
}
QSqlRecord QSQLite2Result::record() const