summaryrefslogtreecommitdiffstats
path: root/src/sql/models/qsqltablemodel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/sql/models/qsqltablemodel.cpp')
-rw-r--r--src/sql/models/qsqltablemodel.cpp101
1 files changed, 43 insertions, 58 deletions
diff --git a/src/sql/models/qsqltablemodel.cpp b/src/sql/models/qsqltablemodel.cpp
index d8d691fa0c..20d2be36e1 100644
--- a/src/sql/models/qsqltablemodel.cpp
+++ b/src/sql/models/qsqltablemodel.cpp
@@ -55,6 +55,8 @@
QT_BEGIN_NAMESPACE
+typedef QSqlTableModelSql Sql;
+
/*! \internal
Populates our record with values.
*/
@@ -84,12 +86,9 @@ int QSqlTableModelPrivate::insertCount(int maxRow) const
int cnt = 0;
CacheMap::ConstIterator i = cache.constBegin();
const CacheMap::ConstIterator e = cache.constEnd();
- for (;
- i != e && (maxRow < 0 || i.key() <= maxRow);
- ++i) {
+ for ( ; i != e && (maxRow < 0 || i.key() <= maxRow); ++i)
if (i.value().insert())
++cnt;
- }
return cnt;
}
@@ -175,14 +174,12 @@ bool QSqlTableModelPrivate::exec(const QString &stmt, bool prepStatement,
}
}
int i;
- for (i = 0; i < rec.count(); ++i) {
+ for (i = 0; i < rec.count(); ++i)
if (rec.isGenerated(i))
editQuery.addBindValue(rec.value(i));
- }
- for (i = 0; i < whereValues.count(); ++i) {
+ for (i = 0; i < whereValues.count(); ++i)
if (whereValues.isGenerated(i) && !whereValues.isNull(i))
editQuery.addBindValue(whereValues.value(i));
- }
if (!editQuery.exec()) {
error = editQuery.lastError();
@@ -363,7 +360,7 @@ QString QSqlTableModel::tableName() const
bool QSqlTableModel::select()
{
Q_D(QSqlTableModel);
- QString query = selectStatement();
+ const QString query = selectStatement();
if (query.isEmpty())
return false;
@@ -416,8 +413,9 @@ bool QSqlTableModel::selectRow(int row)
d->tableName,
d->primaryValues(row),
false);
- if (d->filter.startsWith(QLatin1String("WHERE "), Qt::CaseInsensitive))
- d->filter.remove(0, 6);
+ static const QString wh = Sql::where() + Sql::sp();
+ if (d->filter.startsWith(wh, Qt::CaseInsensitive))
+ d->filter.remove(0, wh.length());
const QString stmt = selectStatement();
d->sortColumn = table_sort_col;
d->filter = table_filter;
@@ -593,20 +591,19 @@ bool QSqlTableModel::updateRowInTable(int row, const QSqlRecord &values)
emit beforeUpdate(row, rec);
const QSqlRecord whereValues = d->primaryValues(row);
- bool prepStatement = d->db.driver()->hasFeature(QSqlDriver::PreparedQueries);
- QString stmt = d->db.driver()->sqlStatement(QSqlDriver::UpdateStatement, d->tableName,
- rec, prepStatement);
- QString where = d->db.driver()->sqlStatement(QSqlDriver::WhereStatement, d->tableName,
- whereValues, prepStatement);
+ const bool prepStatement = d->db.driver()->hasFeature(QSqlDriver::PreparedQueries);
+ const QString stmt = d->db.driver()->sqlStatement(QSqlDriver::UpdateStatement, d->tableName,
+ rec, prepStatement);
+ const QString where = d->db.driver()->sqlStatement(QSqlDriver::WhereStatement, d->tableName,
+ whereValues, prepStatement);
if (stmt.isEmpty() || where.isEmpty() || row < 0 || row >= rowCount()) {
d->error = QSqlError(QLatin1String("No Fields to update"), QString(),
QSqlError::StatementError);
return false;
}
- stmt.append(QLatin1Char(' ')).append(where);
- return d->exec(stmt, prepStatement, rec, whereValues);
+ return d->exec(Sql::concat(stmt, where), prepStatement, rec, whereValues);
}
@@ -629,9 +626,9 @@ bool QSqlTableModel::insertRowIntoTable(const QSqlRecord &values)
QSqlRecord rec = values;
emit beforeInsert(rec);
- bool prepStatement = d->db.driver()->hasFeature(QSqlDriver::PreparedQueries);
- QString stmt = d->db.driver()->sqlStatement(QSqlDriver::InsertStatement, d->tableName,
- rec, prepStatement);
+ const bool prepStatement = d->db.driver()->hasFeature(QSqlDriver::PreparedQueries);
+ const QString stmt = d->db.driver()->sqlStatement(QSqlDriver::InsertStatement, d->tableName,
+ rec, prepStatement);
if (stmt.isEmpty()) {
d->error = QSqlError(QLatin1String("No Fields to update"), QString(),
@@ -660,24 +657,23 @@ bool QSqlTableModel::deleteRowFromTable(int row)
emit beforeDelete(row);
const QSqlRecord whereValues = d->primaryValues(row);
- bool prepStatement = d->db.driver()->hasFeature(QSqlDriver::PreparedQueries);
- QString stmt = d->db.driver()->sqlStatement(QSqlDriver::DeleteStatement,
- d->tableName,
- QSqlRecord(),
- prepStatement);
- QString where = d->db.driver()->sqlStatement(QSqlDriver::WhereStatement,
- d->tableName,
- whereValues,
- prepStatement);
+ const bool prepStatement = d->db.driver()->hasFeature(QSqlDriver::PreparedQueries);
+ const QString stmt = d->db.driver()->sqlStatement(QSqlDriver::DeleteStatement,
+ d->tableName,
+ QSqlRecord(),
+ prepStatement);
+ const QString where = d->db.driver()->sqlStatement(QSqlDriver::WhereStatement,
+ d->tableName,
+ whereValues,
+ prepStatement);
if (stmt.isEmpty() || where.isEmpty()) {
d->error = QSqlError(QLatin1String("Unable to delete row"), QString(),
QSqlError::StatementError);
return false;
}
- stmt.append(QLatin1Char(' ')).append(where);
- return d->exec(stmt, prepStatement, QSqlRecord() /* no new values */, whereValues);
+ return d->exec(Sql::concat(stmt, where), prepStatement, QSqlRecord() /* no new values */, whereValues);
}
/*!
@@ -838,9 +834,8 @@ void QSqlTableModel::revertAll()
Q_D(QSqlTableModel);
const QList<int> rows(d->cache.keys());
- for (int i = rows.size() - 1; i >= 0; --i) {
+ for (int i = rows.size() - 1; i >= 0; --i)
revertRow(rows.value(i));
- }
}
/*!
@@ -929,19 +924,16 @@ void QSqlTableModel::setSort(int column, Qt::SortOrder order)
QString QSqlTableModel::orderByClause() const
{
Q_D(const QSqlTableModel);
- QString s;
QSqlField f = d->rec.field(d->sortColumn);
if (!f.isValid())
- return s;
-
- QString table = d->tableName;
+ return QString();
+
//we can safely escape the field because it would have been obtained from the database
//and have the correct case
QString field = d->db.driver()->escapeIdentifier(f.name(), QSqlDriver::FieldName);
- s.append(QLatin1String("ORDER BY ")).append(table).append(QLatin1Char('.')).append(field);
- s += d->sortOrder == Qt::AscendingOrder ? QLatin1String(" ASC") : QLatin1String(" DESC");
-
- return s;
+ field.prepend(QLatin1Char('.')).prepend(d->tableName);
+ field = d->sortOrder == Qt::AscendingOrder ? Sql::asc(field) : Sql::desc(field);
+ return Sql::orderBy(field);
}
/*!
@@ -964,34 +956,27 @@ int QSqlTableModel::fieldIndex(const QString &fieldName) const
QString QSqlTableModel::selectStatement() const
{
Q_D(const QSqlTableModel);
- QString query;
if (d->tableName.isEmpty()) {
d->error = QSqlError(QLatin1String("No table name given"), QString(),
QSqlError::StatementError);
- return query;
+ return QString();
}
if (d->rec.isEmpty()) {
d->error = QSqlError(QLatin1String("Unable to find table ") + d->tableName, QString(),
QSqlError::StatementError);
- return query;
+ return QString();
}
- query = d->db.driver()->sqlStatement(QSqlDriver::SelectStatement,
- d->tableName,
- d->rec,
- false);
- if (query.isEmpty()) {
+ const QString stmt = d->db.driver()->sqlStatement(QSqlDriver::SelectStatement,
+ d->tableName,
+ d->rec,
+ false);
+ if (stmt.isEmpty()) {
d->error = QSqlError(QLatin1String("Unable to select fields from table ") + d->tableName,
QString(), QSqlError::StatementError);
- return query;
+ return stmt;
}
- if (!d->filter.isEmpty())
- query.append(QLatin1String(" WHERE ")).append(d->filter);
- QString orderBy(orderByClause());
- if (!orderBy.isEmpty())
- query.append(QLatin1Char(' ')).append(orderBy);
-
- return query;
+ return Sql::concat(Sql::concat(stmt, Sql::where(d->filter)), orderByClause());
}
/*!