diff options
author | Israel Lins Albuquerque <israel@proabakus.com.br> | 2014-04-15 17:37:18 -0300 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-04-26 20:22:42 +0200 |
commit | 3e6e70bddd84536deaae69421d05785ae6ce28cd (patch) | |
tree | 227484a53c825f5ec17e9a4069d85bc460d4e861 /src | |
parent | a2ad5cf1aadd5a3bec09595be7e8611abab31bb6 (diff) |
[QSqlQuery] misbehavior of seek in special query positions
When QSqlQuery::at() == QSql::BeforeFirstRow and seek(1, true) (seek to
next record) is called the expected result is go to first row.
When QSqlQuery::at() == QSql::AfterLastRow and seek(-1, true) (seek to
previous record) is called the expected result is go to last row.
But in all cases the first and last are skipped.
Change-Id: I584138b3d397ce1c790bf89688ee92289a99611c
Reviewed-by: Mark Brand <mabrand@mabrand.nl>
Diffstat (limited to 'src')
-rw-r--r-- | src/sql/kernel/qsqlquery.cpp | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/src/sql/kernel/qsqlquery.cpp b/src/sql/kernel/qsqlquery.cpp index b08f6bc8ef..6b13eb02ed 100644 --- a/src/sql/kernel/qsqlquery.cpp +++ b/src/sql/kernel/qsqlquery.cpp @@ -511,12 +511,23 @@ const QSqlResult* QSqlQuery::result() const \list - \li If the result is currently positioned before the first record or - on the first record, and \a index is negative, there is no change, - and false is returned. + \li If the result is currently positioned before the first record and: + \list + \li \a index is negative or zero, there is no change, and false is + returned. + \li \a index is positive, an attempt is made to position the result + at absolute position \a index - 1, following the sames rule for non + relative seek, above. + \endlist - \li If the result is currently located after the last record, and \a - index is positive, there is no change, and false is returned. + \li If the result is currently positioned after the last record and: + \list + \li \a index is positive or zero, there is no change, and false is + returned. + \li \a index is negative, an attempt is made to position the result + at \a index + 1 relative position from last record, following the + rule below. + \endlist \li If the result is currently located somewhere in the middle, and the relative offset \a index moves the result below zero, the result @@ -549,7 +560,7 @@ bool QSqlQuery::seek(int index, bool relative) switch (at()) { // relative seek case QSql::BeforeFirstRow: if (index > 0) - actualIdx = index; + actualIdx = index - 1; else { return false; } @@ -557,7 +568,7 @@ bool QSqlQuery::seek(int index, bool relative) case QSql::AfterLastRow: if (index < 0) { d->sqlResult->fetchLast(); - actualIdx = at() + index; + actualIdx = at() + index + 1; } else { return false; } |