diff options
author | Andy Shaw <andy.shaw@qt.io> | 2020-08-08 23:14:13 +0200 |
---|---|---|
committer | Andy Shaw <andy.shaw@qt.io> | 2020-09-13 16:39:06 +0200 |
commit | 65afcef2173cabe297778d19dda3198595820cfa (patch) | |
tree | c9d1a59b8c3b6f0ba2524ac4c1bea44425a3e126 /src/sql | |
parent | 46c1e609893b09a61d70dda3589e6b8d25261468 (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.
Pick-to: 5.15
Fixes: QTBUG-83152
Change-Id: Iff891207ad6dea1681a1b3a335acbbbb668b465d
Reviewed-by: Christian Ehrlicher <ch.ehrlicher@gmx.de>
Diffstat (limited to 'src/sql')
-rw-r--r-- | src/sql/kernel/qsqlresult.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/sql/kernel/qsqlresult.cpp b/src/sql/kernel/qsqlresult.cpp index 24ca1ffeda..5b440d704b 100644 --- a/src/sql/kernel/qsqlresult.cpp +++ b/src/sql/kernel/qsqlresult.cpp @@ -112,6 +112,13 @@ QString QSqlResultPrivate::positionalToNamedBinding(const QString &query) const QString QSqlResultPrivate::namedToPositionalBinding(const QString &query) { + // In the Interbase case if it is an EXECUTE BLOCK then it is up to the + // caller to make sure that it is not using named bindings for the wrong + // parts of the query since Interbase uses them literally + if (sqldriver->dbmsType() == QSqlDriver::Interbase && + query.trimmed().startsWith(QLatin1String("EXECUTE BLOCK"), Qt::CaseInsensitive)) + return query; + int n = query.size(); QString result; |