summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorAndy Shaw <andy.shaw@qt.io>2021-04-16 16:11:07 +0200
committerAndy Shaw <andy.shaw@qt.io>2021-04-23 10:46:58 +0200
commit66acee69a1563488e5950645c171d6be73dd5f70 (patch)
tree77d0af34da17a5d3873c9a5c9062ddcea7a852cf /tests/auto
parent83eca9a087e569bcdeaaeeddab84c9524952d23e (diff)
SQLite: Handle tables and fields with a dot in the name correctly
Fixes: QTBUG-91885 Pick-to: 6.1 6.0 5.15 Change-Id: Iba76bb50266dd4fb5f50e4ea1549d1d2bb6e3431 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp49
1 files changed, 49 insertions, 0 deletions
diff --git a/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp b/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp
index 6980bc19e2..a940506359 100644
--- a/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp
+++ b/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp
@@ -154,6 +154,9 @@ private slots:
void invalidFilterAndHeaderData_data() { generic_data(); }
void invalidFilterAndHeaderData(); //QTBUG-23879
+
+ void sqlite_selectFromIdentifierWithDot_data() { generic_data("QSQLITE"); }
+ void sqlite_selectFromIdentifierWithDot();
private:
void generic_data(const QString& engine=QString());
void generic_data_with_strategies(const QString& engine=QString());
@@ -161,6 +164,7 @@ private:
tst_QSqlTableModel::tst_QSqlTableModel()
{
+ QVERIFY(dbs.open());
}
tst_QSqlTableModel::~tst_QSqlTableModel()
@@ -2160,5 +2164,50 @@ void tst_QSqlTableModel::modelInAnotherThread()
QVERIFY(t.isFinished());
}
+void tst_QSqlTableModel::sqlite_selectFromIdentifierWithDot()
+{
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ {
+ const auto fieldDot = qTableName("fieldDot", __FILE__, db);
+ tst_Databases::safeDropTable(db, fieldDot);
+ QSqlQuery qry(db);
+ QVERIFY_SQL(qry, exec("create table " + fieldDot + " (id int primary key, "
+ "\"person.firstname\" varchar(20))"));
+ QVERIFY_SQL(qry, exec("insert into " + fieldDot + " values(1, 'Andy')"));
+ QSqlTableModel model(0, db);
+ model.setTable(fieldDot);
+ QVERIFY_SQL(model, select());
+ QCOMPARE(model.data(model.index(0, 0)).toInt(), 1);
+ QCOMPARE(model.data(model.index(0, 1)).toString(), QString("Andy"));
+ }
+ const auto tableDot = QLatin1Char('[') + qTableName("table.dot", __FILE__, db) + QLatin1Char(']');
+ {
+ tst_Databases::safeDropTable(db, tableDot);
+ QSqlQuery qry(db);
+ QVERIFY_SQL(qry, exec("create table " + tableDot + " (id int primary key, "
+ "\"person.firstname\" varchar(20))"));
+ QVERIFY_SQL(qry, exec("insert into " + tableDot + " values(1, 'Andy')"));
+ QSqlTableModel model(0, db);
+ model.setTable(tableDot);
+ QVERIFY_SQL(model, select());
+ QCOMPARE(model.data(model.index(0, 0)).toInt(), 1);
+ QCOMPARE(model.data(model.index(0, 1)).toString(), QString("Andy"));
+ }
+ {
+ QSqlDatabase attachedDb = QSqlDatabase::addDatabase("QSQLITE", "attachedDb");
+ attachedDb.setDatabaseName(db.databaseName().replace("foo.db", "attached.db"));
+ QVERIFY(attachedDb.open());
+ QSqlQuery qry(attachedDb);
+ QVERIFY_SQL(qry, exec(QString("attach '%1' AS 'attached'").arg(db.databaseName())));
+ QSqlTableModel model(0, attachedDb);
+ model.setTable(QString("attached.%1").arg(tableDot));
+ QVERIFY_SQL(model, select());
+ QCOMPARE(model.data(model.index(0, 0)).toInt(), 1);
+ QCOMPARE(model.data(model.index(0, 1)).toString(), QString("Andy"));
+ }
+}
+
QTEST_MAIN(tst_QSqlTableModel)
#include "tst_qsqltablemodel.moc"