diff options
author | Andy Shaw <andy.shaw@qt.io> | 2020-08-08 23:14:13 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2020-09-13 16:37:27 +0000 |
commit | e030aab963af12404c9c1d2ef0f53d3905dd590a (patch) | |
tree | f3f2a797650711945599cb18fdcc67ba40be7f53 /tests | |
parent | 06e2919531b3c1207c107061780f09cf341b564c (diff) |
Interbase: Handle EXECUTE BLOCK statements correctly
Since an EXECUTE BLOCK statement can have a mix of ? and :var syntax
then a special case for this needs to be added so that it does not try
to convert the :var parts into positional placeholders as they need to
kept as-is when preparing such a statement.
Fixes: QTBUG-83152
Change-Id: Iff891207ad6dea1681a1b3a335acbbbb668b465d
Reviewed-by: Christian Ehrlicher <ch.ehrlicher@gmx.de>
(cherry picked from commit 65afcef2173cabe297778d19dda3198595820cfa)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp index 6fa0446b79..e29d015031 100644 --- a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp +++ b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp @@ -184,6 +184,8 @@ private slots: void sqliteVirtualTable(); void mysql_timeType_data() { generic_data("QMYSQL"); } void mysql_timeType(); + void ibase_executeBlock_data() { generic_data("QIBASE"); } + void ibase_executeBlock(); void task_217003_data() { generic_data(); } void task_217003(); @@ -4772,5 +4774,25 @@ void tst_QSqlQuery::ibaseArray() QCOMPARE(qry.value(2).toList(), charArray.toList()); } +void tst_QSqlQuery::ibase_executeBlock() +{ + QFETCH(QString, dbName); + QSqlDatabase db = QSqlDatabase::database(dbName); + CHECK_DATABASE(db); + QSqlQuery qry(db); + QVERIFY_SQL(qry, prepare("execute block (x double precision = ?, y double precision = ?) " + "returns (total double precision) " + "as " + "begin " + "total = :x + :y; " + "suspend; " + "end")); + qry.bindValue(0, 2); + qry.bindValue(1, 2); + QVERIFY_SQL(qry, exec()); + QVERIFY(qry.next()); + QCOMPARE(qry.value(0).toInt(), 4); +} + QTEST_MAIN( tst_QSqlQuery ) #include "tst_qsqlquery.moc" |