summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBill King <bill.king@nokia.com>2009-08-31 05:07:12 (GMT)
committerBill King <bill.king@nokia.com>2009-08-31 05:08:42 (GMT)
commit8d636ab46ccfc3ab37083f947a7c184df47ddcb9 (patch)
tree371a126bd7fffd28c5810e984d05577381f0e56b
parent6f1ff3ec69cc6365d61fccf80e97f9afa317395d (diff)
downloadQt-8d636ab46ccfc3ab37083f947a7c184df47ddcb9.zip
Qt-8d636ab46ccfc3ab37083f947a7c184df47ddcb9.tar.gz
Qt-8d636ab46ccfc3ab37083f947a7c184df47ddcb9.tar.bz2
Adds ability to open sqlite databases readonly.
Changes opening of sqlite to open_v2, and adds a new connection option. Reviewed-by: Justin McPherson
-rw-r--r--src/sql/drivers/sqlite/qsql_sqlite.cpp24
-rw-r--r--src/sql/kernel/qsqldatabase.cpp1
2 files changed, 19 insertions, 6 deletions
diff --git a/src/sql/drivers/sqlite/qsql_sqlite.cpp b/src/sql/drivers/sqlite/qsql_sqlite.cpp
index 81afbf9..1b5c9c5 100644
--- a/src/sql/drivers/sqlite/qsql_sqlite.cpp
+++ b/src/sql/drivers/sqlite/qsql_sqlite.cpp
@@ -502,15 +502,27 @@ static int qGetSqliteTimeout(QString opts)
enum { DefaultTimeout = 5000 };
opts.remove(QLatin1Char(' '));
- if (opts.startsWith(QLatin1String("QSQLITE_BUSY_TIMEOUT="))) {
- bool ok;
- int nt = opts.mid(21).toInt(&ok);
- if (ok)
- return nt;
+ foreach(QString option, opts.split(QLatin1Char(';'))) {
+ if (option.startsWith(QLatin1String("QSQLITE_BUSY_TIMEOUT="))) {
+ bool ok;
+ int nt = option.mid(21).toInt(&ok);
+ if (ok)
+ return nt;
+ }
}
return DefaultTimeout;
}
+static int qGetSqliteOpenMode(QString opts)
+{
+ opts.remove(QLatin1Char(' '));
+ foreach(QString option, opts.split(QLatin1Char(';'))) {
+ if (option == QLatin1String("QSQLITE_OPEN_READONLY")))
+ return SQLITE_OPEN_READONLY;
+ }
+ return SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE;
+}
+
/*
SQLite dbs have no user name, passwords, hosts or ports.
just file names.
@@ -523,7 +535,7 @@ bool QSQLiteDriver::open(const QString & db, const QString &, const QString &, c
if (db.isEmpty())
return false;
- if (sqlite3_open16(db.constData(), &d->access) == SQLITE_OK) {
+ if (sqlite3_open_v2(db.toUtf8().constData(), &d->access, qGetSqliteOpenMode(conOpts), NULL) == SQLITE_OK) {
sqlite3_busy_timeout(d->access, qGetSqliteTimeout(conOpts));
setOpen(true);
setOpenError(false);
diff --git a/src/sql/kernel/qsqldatabase.cpp b/src/sql/kernel/qsqldatabase.cpp
index d155c03..16bd05b 100644
--- a/src/sql/kernel/qsqldatabase.cpp
+++ b/src/sql/kernel/qsqldatabase.cpp
@@ -1263,6 +1263,7 @@ QSqlRecord QSqlDatabase::record(const QString& tablename) const
\i
\list
\i QSQLITE_BUSY_TIMEOUT
+ \i QSQLITE_OPEN_READONLY
\endlist
\i