summaryrefslogtreecommitdiffstats
path: root/src/sql/kernel
diff options
context:
space:
mode:
authorVyacheslav Grigoryev <armagvvg@gmail.com>2016-02-16 09:19:03 +0300
committerMark Brand <mabrand@mabrand.nl>2016-02-17 23:13:58 +0000
commit34472e946a11bf6e06ba9ed7b72f938ea6eede02 (patch)
tree7031e6bcb1e9bae80125dd8412687889fac32d2d /src/sql/kernel
parented4ef55ec5710f64799adb2b26201356eba788c9 (diff)
QSqlDriver: use table prefix in WHERE clauses
If the WHERE clause is used in a query involving multiple tables, such as generated by QSqlRelationalTableModel, the table prefix may be necessary to disambiguate column references. It is harmless if not needed. Task-number: QTBUG-43320 Change-Id: I39e1ab7359bf748afa8bcd8578220e3abb3ee24a Reviewed-by: Mark Brand <mabrand@mabrand.nl>
Diffstat (limited to 'src/sql/kernel')
-rw-r--r--src/sql/kernel/qsqldriver.cpp38
1 files changed, 15 insertions, 23 deletions
diff --git a/src/sql/kernel/qsqldriver.cpp b/src/sql/kernel/qsqldriver.cpp
index ccfc6e04f0..9ee8d67f56 100644
--- a/src/sql/kernel/qsqldriver.cpp
+++ b/src/sql/kernel/qsqldriver.cpp
@@ -476,31 +476,23 @@ QString QSqlDriver::sqlStatement(StatementType type, const QString &tableName,
s.prepend(QLatin1String("SELECT ")).append(QLatin1String(" FROM ")).append(tableName);
break;
case WhereStatement:
- if (preparedStatement) {
- for (int i = 0; i < rec.count(); ++i) {
- s.append(prepareIdentifier(rec.fieldName(i), FieldName,this));
- if (rec.isNull(i))
- s.append(QLatin1String(" IS NULL"));
- else
- s.append(QLatin1String(" = ?"));
- s.append(QLatin1String(" AND "));
- }
- } else {
- for (i = 0; i < rec.count(); ++i) {
- s.append(prepareIdentifier(rec.fieldName(i), QSqlDriver::FieldName, this));
- QString val = formatValue(rec.field(i));
- if (val == QLatin1String("NULL"))
- s.append(QLatin1String(" IS NULL"));
- else
- s.append(QLatin1String(" = ")).append(val);
- s.append(QLatin1String(" AND "));
- }
- }
- if (!s.isEmpty()) {
- s.prepend(QLatin1String("WHERE "));
- s.chop(5); // remove tailing AND
+ {
+ const QString tableNamePrefix = tableName.isEmpty()
+ ? QString()
+ : prepareIdentifier(tableName, QSqlDriver::TableName, this) + QLatin1Char('.');
+ for (int i = 0; i < rec.count(); ++i) {
+ s.append(QLatin1String(i? " AND " : "WHERE "));
+ s.append(tableNamePrefix);
+ s.append(prepareIdentifier(rec.fieldName(i), QSqlDriver::FieldName, this));
+ if (rec.isNull(i))
+ s.append(QLatin1String(" IS NULL"));
+ else if (preparedStatement)
+ s.append(QLatin1String(" = ?"));
+ else
+ s.append(QLatin1String(" = ")).append(formatValue(rec.field(i)));
}
break;
+ }
case UpdateStatement:
s.append(QLatin1String("UPDATE ")).append(tableName).append(
QLatin1String(" SET "));