qsqlquery.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/sql/kernel/qsqlquery.cpp
Source codeSwitch to Preprocessed file
LineSourceCount
1/****************************************************************************-
2**-
3** Copyright (C) 2015 The Qt Company Ltd.-
4** Contact: http://www.qt.io/licensing/-
5**-
6** This file is part of the QtSql module of the Qt Toolkit.-
7**-
8** $QT_BEGIN_LICENSE:LGPL21$-
9** Commercial License Usage-
10** Licensees holding valid commercial Qt licenses may use this file in-
11** accordance with the commercial license agreement provided with the-
12** Software or, alternatively, in accordance with the terms contained in-
13** a written agreement between you and The Qt Company. For licensing terms-
14** and conditions see http://www.qt.io/terms-conditions. For further-
15** information use the contact form at http://www.qt.io/contact-us.-
16**-
17** GNU Lesser General Public License Usage-
18** Alternatively, this file may be used under the terms of the GNU Lesser-
19** General Public License version 2.1 or version 3 as published by the Free-
20** Software Foundation and appearing in the file LICENSE.LGPLv21 and-
21** LICENSE.LGPLv3 included in the packaging of this file. Please review the-
22** following information to ensure the GNU Lesser General Public License-
23** requirements will be met: https://www.gnu.org/licenses/lgpl.html and-
24** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.-
25**-
26** As a special exception, The Qt Company gives you certain additional-
27** rights. These rights are described in The Qt Company LGPL Exception-
28** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.-
29**-
30** $QT_END_LICENSE$-
31**-
32****************************************************************************/-
33-
34#include "qsqlquery.h"-
35-
36//#define QT_DEBUG_SQL-
37-
38#include "qdebug.h"-
39#include "qelapsedtimer.h"-
40#include "qatomic.h"-
41#include "qsqlrecord.h"-
42#include "qsqlresult.h"-
43#include "qsqldriver.h"-
44#include "qsqldatabase.h"-
45#include "private/qsqlnulldriver_p.h"-
46#include "qvector.h"-
47#include "qmap.h"-
48-
49QT_BEGIN_NAMESPACE-
50-
51class QSqlQueryPrivate-
52{-
53public:-
54 QSqlQueryPrivate(QSqlResult* result);-
55 ~QSqlQueryPrivate();-
56 QAtomicInt ref;-
57 QSqlResult* sqlResult;-
58-
59 static QSqlQueryPrivate* shared_null();-
60};-
61-
62Q_GLOBAL_STATIC_WITH_ARGS(QSqlQueryPrivate, nullQueryPrivate, (0))
executed 8 times by 8 tests: end of block
Executed by:
  • tst_qitemmodel - unknown status
  • tst_qsqldatabase - unknown status
  • tst_qsqldriver - unknown status
  • tst_qsqlquery - unknown status
  • tst_qsqlquerymodel - unknown status
  • tst_qsqlrelationaltablemodel - unknown status
  • tst_qsqltablemodel - unknown status
  • tst_qsqlthread - unknown status
executed 8 times by 8 tests: guard.store(QtGlobalStatic::Destroyed);
Executed by:
  • tst_qitemmodel - unknown status
  • tst_qsqldatabase - unknown status
  • tst_qsqldriver - unknown status
  • tst_qsqlquery - unknown status
  • tst_qsqlquerymodel - unknown status
  • tst_qsqlrelationaltablemodel - unknown status
  • tst_qsqltablemodel - unknown status
  • tst_qsqlthread - unknown status
executed 1442 times by 8 tests: return &holder.value;
Executed by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
guard.load() =...c::InitializedDescription
TRUEevaluated 8 times by 8 tests
Evaluated by:
  • tst_qitemmodel - unknown status
  • tst_qsqldatabase - unknown status
  • tst_qsqldriver - unknown status
  • tst_qsqlquery - unknown status
  • tst_qsqlquerymodel - unknown status
  • tst_qsqlrelationaltablemodel - unknown status
  • tst_qsqltablemodel - unknown status
  • tst_qsqlthread - unknown status
FALSEnever evaluated
0-1442
63Q_GLOBAL_STATIC(QSqlNullDriver, nullDriver)
executed 9 times by 9 tests: end of block
Executed by:
  • tst_qitemmodel - unknown status
  • tst_qsql - unknown status
  • tst_qsqldatabase - unknown status
  • tst_qsqldriver - unknown status
  • tst_qsqlquery - unknown status
  • tst_qsqlquerymodel - unknown status
  • tst_qsqlrelationaltablemodel - unknown status
  • tst_qsqltablemodel - unknown status
  • tst_qsqlthread - unknown status
executed 9 times by 9 tests: guard.store(QtGlobalStatic::Destroyed);
Executed by:
  • tst_qitemmodel - unknown status
  • tst_qsql - unknown status
  • tst_qsqldatabase - unknown status
  • tst_qsqldriver - unknown status
  • tst_qsqlquery - unknown status
  • tst_qsqlquerymodel - unknown status
  • tst_qsqlrelationaltablemodel - unknown status
  • tst_qsqltablemodel - unknown status
  • tst_qsqlthread - unknown status
executed 9 times by 9 tests: return &holder.value;
Executed by:
  • tst_QItemModel
  • tst_QSql
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
guard.load() =...c::InitializedDescription
TRUEevaluated 9 times by 9 tests
Evaluated by:
  • tst_qitemmodel - unknown status
  • tst_qsql - unknown status
  • tst_qsqldatabase - unknown status
  • tst_qsqldriver - unknown status
  • tst_qsqlquery - unknown status
  • tst_qsqlquerymodel - unknown status
  • tst_qsqlrelationaltablemodel - unknown status
  • tst_qsqltablemodel - unknown status
  • tst_qsqlthread - unknown status
FALSEnever evaluated
0-9
64Q_GLOBAL_STATIC_WITH_ARGS(QSqlNullResult, nullResult, (nullDriver()))
executed 9 times by 9 tests: end of block
Executed by:
  • tst_qitemmodel - unknown status
  • tst_qsql - unknown status
  • tst_qsqldatabase - unknown status
  • tst_qsqldriver - unknown status
  • tst_qsqlquery - unknown status
  • tst_qsqlquerymodel - unknown status
  • tst_qsqlrelationaltablemodel - unknown status
  • tst_qsqltablemodel - unknown status
  • tst_qsqlthread - unknown status
executed 9 times by 9 tests: guard.store(QtGlobalStatic::Destroyed);
Executed by:
  • tst_qitemmodel - unknown status
  • tst_qsql - unknown status
  • tst_qsqldatabase - unknown status
  • tst_qsqldriver - unknown status
  • tst_qsqlquery - unknown status
  • tst_qsqlquerymodel - unknown status
  • tst_qsqlrelationaltablemodel - unknown status
  • tst_qsqltablemodel - unknown status
  • tst_qsqlthread - unknown status
executed 2200 times by 17 tests: return &holder.value;
Executed by:
  • tst_QItemModel
  • tst_QSql
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
  • tst_qitemmodel - unknown status
  • tst_qsqldatabase - unknown status
  • tst_qsqldriver - unknown status
  • tst_qsqlquery - unknown status
  • tst_qsqlquerymodel - unknown status
  • tst_qsqlrelationaltablemodel - unknown status
  • tst_qsqltablemodel - unknown status
  • tst_qsqlthread - unknown status
guard.load() =...c::InitializedDescription
TRUEevaluated 9 times by 9 tests
Evaluated by:
  • tst_qitemmodel - unknown status
  • tst_qsql - unknown status
  • tst_qsqldatabase - unknown status
  • tst_qsqldriver - unknown status
  • tst_qsqlquery - unknown status
  • tst_qsqlquerymodel - unknown status
  • tst_qsqlrelationaltablemodel - unknown status
  • tst_qsqltablemodel - unknown status
  • tst_qsqlthread - unknown status
FALSEnever evaluated
0-2200
65-
66QSqlQueryPrivate* QSqlQueryPrivate::shared_null()-
67{-
68 QSqlQueryPrivate *null = nullQueryPrivate();-
69 null->ref.ref();-
70 return null;
executed 1442 times by 8 tests: return null;
Executed by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
1442
71}-
72-
73/*!-
74\internal-
75*/-
76QSqlQueryPrivate::QSqlQueryPrivate(QSqlResult* result)-
77 : ref(1), sqlResult(result)-
78{-
79 if (!sqlResult)
!sqlResultDescription
TRUEevaluated 8 times by 8 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
FALSEevaluated 2184 times by 9 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSql
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
8-2184
80 sqlResult = nullResult();
executed 8 times by 8 tests: sqlResult = nullResult();
Executed by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
8
81}
executed 2192 times by 9 tests: end of block
Executed by:
  • tst_QItemModel
  • tst_QSql
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
2192
82-
83QSqlQueryPrivate::~QSqlQueryPrivate()-
84{-
85 QSqlResult *nr = nullResult();-
86 if (!nr || sqlResult == nr)
!nrDescription
TRUEnever evaluated
FALSEevaluated 2192 times by 17 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSql
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
  • tst_qitemmodel - unknown status
  • tst_qsqldatabase - unknown status
  • tst_qsqldriver - unknown status
  • tst_qsqlquery - unknown status
  • tst_qsqlquerymodel - unknown status
  • tst_qsqlrelationaltablemodel - unknown status
  • tst_qsqltablemodel - unknown status
  • tst_qsqlthread - unknown status
sqlResult == nrDescription
TRUEevaluated 8 times by 8 tests
Evaluated by:
  • tst_qitemmodel - unknown status
  • tst_qsqldatabase - unknown status
  • tst_qsqldriver - unknown status
  • tst_qsqlquery - unknown status
  • tst_qsqlquerymodel - unknown status
  • tst_qsqlrelationaltablemodel - unknown status
  • tst_qsqltablemodel - unknown status
  • tst_qsqlthread - unknown status
FALSEevaluated 2184 times by 9 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSql
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
0-2192
87 return;
executed 8 times by 8 tests: return;
Executed by:
  • tst_qitemmodel - unknown status
  • tst_qsqldatabase - unknown status
  • tst_qsqldriver - unknown status
  • tst_qsqlquery - unknown status
  • tst_qsqlquerymodel - unknown status
  • tst_qsqlrelationaltablemodel - unknown status
  • tst_qsqltablemodel - unknown status
  • tst_qsqlthread - unknown status
8
88 delete sqlResult;-
89}
executed 2184 times by 9 tests: end of block
Executed by:
  • tst_QItemModel
  • tst_QSql
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
2184
90-
91/*!-
92 \class QSqlQuery-
93 \brief The QSqlQuery class provides a means of executing and-
94 manipulating SQL statements.-
95-
96 \ingroup database-
97 \ingroup shared-
98-
99 \inmodule QtSql-
100-
101 QSqlQuery encapsulates the functionality involved in creating,-
102 navigating and retrieving data from SQL queries which are-
103 executed on a \l QSqlDatabase. It can be used to execute DML-
104 (data manipulation language) statements, such as \c SELECT, \c-
105 INSERT, \c UPDATE and \c DELETE, as well as DDL (data definition-
106 language) statements, such as \c{CREATE} \c{TABLE}. It can also-
107 be used to execute database-specific commands which are not-
108 standard SQL (e.g. \c{SET DATESTYLE=ISO} for PostgreSQL).-
109-
110 Successfully executed SQL statements set the query's state to-
111 active so that isActive() returns \c true. Otherwise the query's-
112 state is set to inactive. In either case, when executing a new SQL-
113 statement, the query is positioned on an invalid record. An active-
114 query must be navigated to a valid record (so that isValid()-
115 returns \c true) before values can be retrieved.-
116-
117 For some databases, if an active query that is a \c{SELECT}-
118 statement exists when you call \l{QSqlDatabase::}{commit()} or-
119 \l{QSqlDatabase::}{rollback()}, the commit or rollback will-
120 fail. See isActive() for details.-
121-
122 \target QSqlQuery examples-
123-
124 Navigating records is performed with the following functions:-
125-
126 \list-
127 \li next()-
128 \li previous()-
129 \li first()-
130 \li last()-
131 \li seek()-
132 \endlist-
133-
134 These functions allow the programmer to move forward, backward-
135 or arbitrarily through the records returned by the query. If you-
136 only need to move forward through the results (e.g., by using-
137 next()), you can use setForwardOnly(), which will save a-
138 significant amount of memory overhead and improve performance on-
139 some databases. Once an active query is positioned on a valid-
140 record, data can be retrieved using value(). All data is-
141 transferred from the SQL backend using QVariants.-
142-
143 For example:-
144-
145 \snippet sqldatabase/sqldatabase.cpp 7-
146-
147 To access the data returned by a query, use value(int). Each-
148 field in the data returned by a \c SELECT statement is accessed-
149 by passing the field's position in the statement, starting from-
150 0. This makes using \c{SELECT *} queries inadvisable because the-
151 order of the fields returned is indeterminate.-
152-
153 For the sake of efficiency, there are no functions to access a-
154 field by name (unless you use prepared queries with names, as-
155 explained below). To convert a field name into an index, use-
156 record().\l{QSqlRecord::indexOf()}{indexOf()}, for example:-
157-
158 \snippet sqldatabase/sqldatabase.cpp 8-
159-
160 QSqlQuery supports prepared query execution and the binding of-
161 parameter values to placeholders. Some databases don't support-
162 these features, so for those, Qt emulates the required-
163 functionality. For example, the Oracle and ODBC drivers have-
164 proper prepared query support, and Qt makes use of it; but for-
165 databases that don't have this support, Qt implements the feature-
166 itself, e.g. by replacing placeholders with actual values when a-
167 query is executed. Use numRowsAffected() to find out how many rows-
168 were affected by a non-\c SELECT query, and size() to find how-
169 many were retrieved by a \c SELECT.-
170-
171 Oracle databases identify placeholders by using a colon-name-
172 syntax, e.g \c{:name}. ODBC simply uses \c ? characters. Qt-
173 supports both syntaxes, with the restriction that you can't mix-
174 them in the same query.-
175-
176 You can retrieve the values of all the fields in a single variable-
177 (a map) using boundValues().-
178-
179 \section1 Approaches to Binding Values-
180-
181 Below we present the same example using each of the four-
182 different binding approaches, as well as one example of binding-
183 values to a stored procedure.-
184-
185 \b{Named binding using named placeholders:}-
186-
187 \snippet sqldatabase/sqldatabase.cpp 9-
188-
189 \b{Positional binding using named placeholders:}-
190-
191 \snippet sqldatabase/sqldatabase.cpp 10-
192-
193 \b{Binding values using positional placeholders (version 1):}-
194-
195 \snippet sqldatabase/sqldatabase.cpp 11-
196-
197 \b{Binding values using positional placeholders (version 2):}-
198-
199 \snippet sqldatabase/sqldatabase.cpp 12-
200-
201 \b{Binding values to a stored procedure:}-
202-
203 This code calls a stored procedure called \c AsciiToInt(), passing-
204 it a character through its in parameter, and taking its result in-
205 the out parameter.-
206-
207 \snippet sqldatabase/sqldatabase.cpp 13-
208-
209 Note that unbound parameters will retain their values.-
210-
211 Stored procedures that uses the return statement to return values,-
212 or return multiple result sets, are not fully supported. For specific-
213 details see \l{SQL Database Drivers}.-
214-
215 \warning You must load the SQL driver and open the connection before a-
216 QSqlQuery is created. Also, the connection must remain open while the-
217 query exists; otherwise, the behavior of QSqlQuery is undefined.-
218-
219 \sa QSqlDatabase, QSqlQueryModel, QSqlTableModel, QVariant-
220*/-
221-
222/*!-
223 Constructs a QSqlQuery object which uses the QSqlResult \a result-
224 to communicate with a database.-
225*/-
226-
227QSqlQuery::QSqlQuery(QSqlResult *result)-
228{-
229 d = new QSqlQueryPrivate(result);-
230}
executed 2184 times by 9 tests: end of block
Executed by:
  • tst_QItemModel
  • tst_QSql
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
2184
231-
232/*!-
233 Destroys the object and frees any allocated resources.-
234*/-
235-
236QSqlQuery::~QSqlQuery()-
237{-
238 if (!d->ref.deref())
!d->ref.deref()Description
TRUEevaluated 1606 times by 9 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSql
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
FALSEevaluated 2021 times by 8 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
1606-2021
239 delete d;
executed 1606 times by 9 tests: delete d;
Executed by:
  • tst_QItemModel
  • tst_QSql
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
1606
240}
executed 3627 times by 9 tests: end of block
Executed by:
  • tst_QItemModel
  • tst_QSql
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
3627
241-
242/*!-
243 Constructs a copy of \a other.-
244*/-
245-
246QSqlQuery::QSqlQuery(const QSqlQuery& other)-
247{-
248 d = other.d;-
249 d->ref.ref();-
250}
executed 1 time by 1 test: end of block
Executed by:
  • tst_QSqlQuery
1
251-
252/*!-
253 \internal-
254*/-
255static void qInit(QSqlQuery *q, const QString& query, QSqlDatabase db)-
256{-
257 QSqlDatabase database = db;-
258 if (!database.isValid())
!database.isValid()Description
TRUEevaluated 773 times by 5 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
FALSEevaluated 669 times by 8 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
669-773
259 database = QSqlDatabase::database(QLatin1String(QSqlDatabase::defaultConnection), false);
executed 773 times by 5 tests: database = QSqlDatabase::database(QLatin1String(QSqlDatabase::defaultConnection), false);
Executed by:
  • tst_QItemModel
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
773
260 if (database.isValid()) {
database.isValid()Description
TRUEevaluated 1182 times by 8 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
FALSEevaluated 260 times by 4 tests
Evaluated by:
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
260-1182
261 *q = QSqlQuery(database.driver()->createResult());-
262 }
executed 1182 times by 8 tests: end of block
Executed by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
1182
263 if (!query.isEmpty())
!query.isEmpty()Description
TRUEevaluated 540 times by 6 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
FALSEevaluated 902 times by 8 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
540-902
264 q->exec(query);
executed 540 times by 6 tests: q->exec(query);
Executed by:
  • tst_QItemModel
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
540
265}
executed 1442 times by 8 tests: end of block
Executed by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
1442
266-
267/*!-
268 Constructs a QSqlQuery object using the SQL \a query and the-
269 database \a db. If \a db is not specified, or is invalid, the application's-
270 default database is used. If \a query is not an empty string, it-
271 will be executed.-
272-
273 \sa QSqlDatabase-
274*/-
275QSqlQuery::QSqlQuery(const QString& query, QSqlDatabase db)-
276{-
277 d = QSqlQueryPrivate::shared_null();-
278 qInit(this, query, db);-
279}
executed 1109 times by 7 tests: end of block
Executed by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
1109
280-
281/*!-
282 Constructs a QSqlQuery object using the database \a db.-
283 If \a db is invalid, the application's default database will be used.-
284-
285 \sa QSqlDatabase-
286*/-
287-
288QSqlQuery::QSqlQuery(QSqlDatabase db)-
289{-
290 d = QSqlQueryPrivate::shared_null();-
291 qInit(this, QString(), db);-
292}
executed 333 times by 7 tests: end of block
Executed by:
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
333
293-
294-
295/*!-
296 Assigns \a other to this object.-
297*/-
298-
299QSqlQuery& QSqlQuery::operator=(const QSqlQuery& other)-
300{-
301 qAtomicAssign(d, other.d);-
302 return *this;
executed 2024 times by 8 tests: return *this;
Executed by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
2024
303}-
304-
305/*!-
306 Returns \c true if the query is not \l{isActive()}{active},-
307 the query is not positioned on a valid record,-
308 there is no such \a field, or the \a field is null; otherwise \c false.-
309 Note that for some drivers, isNull() will not return accurate-
310 information until after an attempt is made to retrieve data.-
311-
312 \sa isActive(), isValid(), value()-
313*/-
314-
315bool QSqlQuery::isNull(int field) const-
316{-
317 return !d->sqlResult->isActive()
executed 10 times by 1 test: return !d->sqlResult->isActive() || !d->sqlResult->isValid() || d->sqlResult->isNull(field);
Executed by:
  • tst_QSqlQuery
!d->sqlResult->isActive()Description
TRUEnever evaluated
FALSEevaluated 10 times by 1 test
Evaluated by:
  • tst_QSqlQuery
0-10
318 || !d->sqlResult->isValid()
executed 10 times by 1 test: return !d->sqlResult->isActive() || !d->sqlResult->isValid() || d->sqlResult->isNull(field);
Executed by:
  • tst_QSqlQuery
!d->sqlResult->isValid()Description
TRUEnever evaluated
FALSEevaluated 10 times by 1 test
Evaluated by:
  • tst_QSqlQuery
0-10
319 || d->sqlResult->isNull(field);
executed 10 times by 1 test: return !d->sqlResult->isActive() || !d->sqlResult->isValid() || d->sqlResult->isNull(field);
Executed by:
  • tst_QSqlQuery
d->sqlResult->isNull(field)Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • tst_QSqlQuery
FALSEevaluated 6 times by 1 test
Evaluated by:
  • tst_QSqlQuery
4-10
320}-
321-
322/*!-
323 \overload-
324-
325 Returns \c true if there is no field with this \a name; otherwise-
326 returns isNull(int index) for the corresponding field index.-
327-
328 This overload is less efficient than \l{QSqlQuery::}{isNull()}-
329*/-
330-
331bool QSqlQuery::isNull(const QString &name) const-
332{-
333 int index = d->sqlResult->record().indexOf(name);-
334 if (index > -1)
index > -1Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • tst_QSqlQuery
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_QSqlQuery
1-4
335 return isNull(index);
executed 4 times by 1 test: return isNull(index);
Executed by:
  • tst_QSqlQuery
4
336 qWarning("QSqlQuery::isNull: unknown field name '%s'", qPrintable(name));-
337 return true;
executed 1 time by 1 test: return true;
Executed by:
  • tst_QSqlQuery
1
338}-
339-
340/*!-
341-
342 Executes the SQL in \a query. Returns \c true and sets the query state-
343 to \l{isActive()}{active} if the query was successful; otherwise-
344 returns \c false. The \a query string must use syntax appropriate for-
345 the SQL database being queried (for example, standard SQL).-
346-
347 After the query is executed, the query is positioned on an \e-
348 invalid record and must be navigated to a valid record before data-
349 values can be retrieved (for example, using next()).-
350-
351 Note that the last error for this query is reset when exec() is-
352 called.-
353-
354 For SQLite, the query string can contain only one statement at a time.-
355 If more than one statement is given, the function returns \c false.-
356-
357 Example:-
358-
359 \snippet sqldatabase/sqldatabase.cpp 34-
360-
361 \sa isActive(), isValid(), next(), previous(), first(), last(),-
362 seek()-
363*/-
364-
365bool QSqlQuery::exec(const QString& query)-
366{-
367#ifdef QT_DEBUG_SQL-
368 QElapsedTimer t;-
369 t.start();-
370#endif-
371 if (d->ref.load() != 1) {
d->ref.load() != 1Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • tst_QSqlQuery
FALSEevaluated 2554 times by 9 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSql
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
5-2554
372 bool fo = isForwardOnly();-
373 *this = QSqlQuery(driver()->createResult());-
374 d->sqlResult->setNumericalPrecisionPolicy(d->sqlResult->numericalPrecisionPolicy());-
375 setForwardOnly(fo);-
376 } else {
executed 5 times by 1 test: end of block
Executed by:
  • tst_QSqlQuery
5
377 d->sqlResult->clear();-
378 d->sqlResult->setActive(false);-
379 d->sqlResult->setLastError(QSqlError());-
380 d->sqlResult->setAt(QSql::BeforeFirstRow);-
381 d->sqlResult->setNumericalPrecisionPolicy(d->sqlResult->numericalPrecisionPolicy());-
382 }
executed 2554 times by 9 tests: end of block
Executed by:
  • tst_QItemModel
  • tst_QSql
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
2554
383 d->sqlResult->setQuery(query.trimmed());-
384 if (!driver()->isOpen() || driver()->isOpenError()) {
!driver()->isOpen()Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_QSqlQuery
FALSEevaluated 2557 times by 9 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSql
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
driver()->isOpenError()Description
TRUEnever evaluated
FALSEevaluated 2557 times by 9 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSql
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
0-2557
385 qWarning("QSqlQuery::exec: database not open");-
386 return false;
executed 2 times by 1 test: return false;
Executed by:
  • tst_QSqlQuery
2
387 }-
388 if (query.isEmpty()) {
query.isEmpty()Description
TRUEnever evaluated
FALSEevaluated 2557 times by 9 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSql
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
0-2557
389 qWarning("QSqlQuery::exec: empty query");-
390 return false;
never executed: return false;
0
391 }-
392-
393 bool retval = d->sqlResult->reset(query);-
394#ifdef QT_DEBUG_SQL-
395 qDebug().nospace() << "Executed query (" << t.elapsed() << "ms, " << d->sqlResult->size()-
396 << " results, " << d->sqlResult->numRowsAffected()-
397 << " affected): " << d->sqlResult->lastQuery();-
398#endif-
399 return retval;
executed 2557 times by 9 tests: return retval;
Executed by:
  • tst_QItemModel
  • tst_QSql
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
2557
400}-
401-
402/*!-
403 Returns the value of field \a index in the current record.-
404-
405 The fields are numbered from left to right using the text of the-
406 \c SELECT statement, e.g. in-
407-
408 \snippet code/src_sql_kernel_qsqlquery.cpp 0-
409-
410 field 0 is \c forename and field 1 is \c-
411 surname. Using \c{SELECT *} is not recommended because the order-
412 of the fields in the query is undefined.-
413-
414 An invalid QVariant is returned if field \a index does not-
415 exist, if the query is inactive, or if the query is positioned on-
416 an invalid record.-
417-
418 \sa previous(), next(), first(), last(), seek(), isActive(), isValid()-
419*/-
420-
421QVariant QSqlQuery::value(int index) const-
422{-
423 if (isActive() && isValid() && (index > -1))
isActive()Description
TRUEevaluated 9142 times by 8 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
FALSEnever evaluated
isValid()Description
TRUEevaluated 9142 times by 8 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
FALSEnever evaluated
(index > -1)Description
TRUEevaluated 9142 times by 8 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
FALSEnever evaluated
0-9142
424 return d->sqlResult->data(index);
executed 9142 times by 8 tests: return d->sqlResult->data(index);
Executed by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
9142
425 qWarning("QSqlQuery::value: not positioned on a valid record");-
426 return QVariant();
never executed: return QVariant();
0
427}-
428-
429/*!-
430 \overload-
431-
432 Returns the value of the field called \a name in the current record.-
433 If field \a name does not exist an invalid variant is returned.-
434-
435 This overload is less efficient than \l{QSqlQuery::}{value()}-
436*/-
437-
438QVariant QSqlQuery::value(const QString& name) const-
439{-
440 int index = d->sqlResult->record().indexOf(name);-
441 if (index > -1)
index > -1Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • tst_QSqlQuery
FALSEnever evaluated
0-5
442 return value(index);
executed 5 times by 1 test: return value(index);
Executed by:
  • tst_QSqlQuery
5
443 qWarning("QSqlQuery::value: unknown field name '%s'", qPrintable(name));-
444 return QVariant();
never executed: return QVariant();
0
445}-
446-
447/*!-
448 Returns the current internal position of the query. The first-
449 record is at position zero. If the position is invalid, the-
450 function returns QSql::BeforeFirstRow or-
451 QSql::AfterLastRow, which are special negative values.-
452-
453 \sa previous(), next(), first(), last(), seek(), isActive(), isValid()-
454*/-
455-
456int QSqlQuery::at() const-
457{-
458 return d->sqlResult->at();
executed 10982 times by 9 tests: return d->sqlResult->at();
Executed by:
  • tst_QItemModel
  • tst_QSql
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
10982
459}-
460-
461/*!-
462 Returns the text of the current query being used, or an empty-
463 string if there is no current query text.-
464-
465 \sa executedQuery()-
466*/-
467-
468QString QSqlQuery::lastQuery() const-
469{-
470 return d->sqlResult->lastQuery();
executed 124 times by 3 tests: return d->sqlResult->lastQuery();
Executed by:
  • tst_QSqlQuery
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
124
471}-
472-
473/*!-
474 Returns the database driver associated with the query.-
475*/-
476-
477const QSqlDriver *QSqlQuery::driver() const-
478{-
479 return d->sqlResult->driver();
executed 6722 times by 9 tests: return d->sqlResult->driver();
Executed by:
  • tst_QItemModel
  • tst_QSql
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
6722
480}-
481-
482/*!-
483 Returns the result associated with the query.-
484*/-
485-
486const QSqlResult* QSqlQuery::result() const-
487{-
488 return d->sqlResult;
executed 155 times by 3 tests: return d->sqlResult;
Executed by:
  • tst_QSqlQuery
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
155
489}-
490-
491/*!-
492 Retrieves the record at position \a index, if available, and-
493 positions the query on the retrieved record. The first record is at-
494 position 0. Note that the query must be in an \l{isActive()}-
495 {active} state and isSelect() must return true before calling this-
496 function.-
497-
498 If \a relative is false (the default), the following rules apply:-
499-
500 \list-
501-
502 \li If \a index is negative, the result is positioned before the-
503 first record and false is returned.-
504-
505 \li Otherwise, an attempt is made to move to the record at position-
506 \a index. If the record at position \a index could not be retrieved,-
507 the result is positioned after the last record and false is-
508 returned. If the record is successfully retrieved, true is returned.-
509-
510 \endlist-
511-
512 If \a relative is true, the following rules apply:-
513-
514 \list-
515-
516 \li If the result is currently positioned before the first record and:-
517 \list-
518 \li \a index is negative or zero, there is no change, and false is-
519 returned.-
520 \li \a index is positive, an attempt is made to position the result-
521 at absolute position \a index - 1, following the sames rule for non-
522 relative seek, above.-
523 \endlist-
524-
525 \li If the result is currently positioned after the last record and:-
526 \list-
527 \li \a index is positive or zero, there is no change, and false is-
528 returned.-
529 \li \a index is negative, an attempt is made to position the result-
530 at \a index + 1 relative position from last record, following the-
531 rule below.-
532 \endlist-
533-
534 \li If the result is currently located somewhere in the middle, and-
535 the relative offset \a index moves the result below zero, the result-
536 is positioned before the first record and false is returned.-
537-
538 \li Otherwise, an attempt is made to move to the record \a index-
539 records ahead of the current record (or \a index records behind the-
540 current record if \a index is negative). If the record at offset \a-
541 index could not be retrieved, the result is positioned after the-
542 last record if \a index >= 0, (or before the first record if \a-
543 index is negative), and false is returned. If the record is-
544 successfully retrieved, true is returned.-
545-
546 \endlist-
547-
548 \sa next(), previous(), first(), last(), at(), isActive(), isValid()-
549*/-
550bool QSqlQuery::seek(int index, bool relative)-
551{-
552 if (!isSelect() || !isActive())
!isSelect()Description
TRUEnever evaluated
FALSEevaluated 3877 times by 5 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
!isActive()Description
TRUEnever evaluated
FALSEevaluated 3877 times by 5 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
0-3877
553 return false;
never executed: return false;
0
554 int actualIdx;-
555 if (!relative) { // arbitrary seek
!relativeDescription
TRUEevaluated 3874 times by 5 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
FALSEevaluated 3 times by 1 test
Evaluated by:
  • tst_QSqlQuery
3-3874
556 if (index < 0) {
index < 0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_QSqlQuery
FALSEevaluated 3872 times by 5 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
2-3872
557 d->sqlResult->setAt(QSql::BeforeFirstRow);-
558 return false;
executed 2 times by 1 test: return false;
Executed by:
  • tst_QSqlQuery
2
559 }-
560 actualIdx = index;-
561 } else {
executed 3872 times by 5 tests: end of block
Executed by:
  • tst_QItemModel
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
3872
562 switch (at()) { // relative seek-
563 case QSql::BeforeFirstRow:
executed 1 time by 1 test: case QSql::BeforeFirstRow:
Executed by:
  • tst_QSqlQuery
1
564 if (index > 0)
index > 0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • tst_QSqlQuery
FALSEnever evaluated
0-1
565 actualIdx = index - 1;
executed 1 time by 1 test: actualIdx = index - 1;
Executed by:
  • tst_QSqlQuery
1
566 else {-
567 return false;
never executed: return false;
0
568 }-
569 break;
executed 1 time by 1 test: break;
Executed by:
  • tst_QSqlQuery
1
570 case QSql::AfterLastRow:
executed 1 time by 1 test: case QSql::AfterLastRow:
Executed by:
  • tst_QSqlQuery
1
571 if (index < 0) {
index < 0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • tst_QSqlQuery
FALSEnever evaluated
0-1
572 d->sqlResult->fetchLast();-
573 actualIdx = at() + index + 1;-
574 } else {
executed 1 time by 1 test: end of block
Executed by:
  • tst_QSqlQuery
1
575 return false;
never executed: return false;
0
576 }-
577 break;
executed 1 time by 1 test: break;
Executed by:
  • tst_QSqlQuery
1
578 default:
executed 1 time by 1 test: default:
Executed by:
  • tst_QSqlQuery
1
579 if ((at() + index) < 0) {
(at() + index) < 0Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_QSqlQuery
0-1
580 d->sqlResult->setAt(QSql::BeforeFirstRow);-
581 return false;
never executed: return false;
0
582 }-
583 actualIdx = at() + index;-
584 break;
executed 1 time by 1 test: break;
Executed by:
  • tst_QSqlQuery
1
585 }-
586 }-
587 // let drivers optimize-
588 if (isForwardOnly() && actualIdx < at()) {
isForwardOnly()Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_QSqlQuery
FALSEevaluated 3873 times by 5 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
actualIdx < at()Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • tst_QSqlQuery
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_QSqlQuery
1-3873
589 qWarning("QSqlQuery::seek: cannot seek backwards in a forward only query");-
590 return false;
executed 1 time by 1 test: return false;
Executed by:
  • tst_QSqlQuery
1
591 }-
592 if (actualIdx == (at() + 1) && at() != QSql::BeforeFirstRow) {
actualIdx == (at() + 1)Description
TRUEevaluated 1224 times by 4 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlQuery
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
FALSEevaluated 2650 times by 5 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
at() != QSql::BeforeFirstRowDescription
TRUEevaluated 1221 times by 4 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlQuery
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
FALSEevaluated 3 times by 1 test
Evaluated by:
  • tst_QSqlQuery
3-2650
593 if (!d->sqlResult->fetchNext()) {
!d->sqlResult->fetchNext()Description
TRUEnever evaluated
FALSEevaluated 1221 times by 4 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlQuery
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
0-1221
594 d->sqlResult->setAt(QSql::AfterLastRow);-
595 return false;
never executed: return false;
0
596 }-
597 return true;
executed 1221 times by 4 tests: return true;
Executed by:
  • tst_QItemModel
  • tst_QSqlQuery
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
1221
598 }-
599 if (actualIdx == (at() - 1)) {
actualIdx == (at() - 1)Description
TRUEevaluated 39 times by 3 tests
Evaluated by:
  • tst_QSqlQuery
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
FALSEevaluated 2614 times by 5 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
39-2614
600 if (!d->sqlResult->fetchPrevious()) {
!d->sqlResult->fetchPrevious()Description
TRUEnever evaluated
FALSEevaluated 39 times by 3 tests
Evaluated by:
  • tst_QSqlQuery
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
0-39
601 d->sqlResult->setAt(QSql::BeforeFirstRow);-
602 return false;
never executed: return false;
0
603 }-
604 return true;
executed 39 times by 3 tests: return true;
Executed by:
  • tst_QSqlQuery
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
39
605 }-
606 if (!d->sqlResult->fetch(actualIdx)) {
!d->sqlResult-...tch(actualIdx)Description
TRUEevaluated 270 times by 5 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
FALSEevaluated 2344 times by 5 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
270-2344
607 d->sqlResult->setAt(QSql::AfterLastRow);-
608 return false;
executed 270 times by 5 tests: return false;
Executed by:
  • tst_QItemModel
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
270
609 }-
610 return true;
executed 2344 times by 5 tests: return true;
Executed by:
  • tst_QItemModel
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
2344
611}-
612-
613/*!-
614-
615 Retrieves the next record in the result, if available, and positions-
616 the query on the retrieved record. Note that the result must be in-
617 the \l{isActive()}{active} state and isSelect() must return true-
618 before calling this function or it will do nothing and return false.-
619-
620 The following rules apply:-
621-
622 \list-
623-
624 \li If the result is currently located before the first record,-
625 e.g. immediately after a query is executed, an attempt is made to-
626 retrieve the first record.-
627-
628 \li If the result is currently located after the last record, there-
629 is no change and false is returned.-
630-
631 \li If the result is located somewhere in the middle, an attempt is-
632 made to retrieve the next record.-
633-
634 \endlist-
635-
636 If the record could not be retrieved, the result is positioned after-
637 the last record and false is returned. If the record is successfully-
638 retrieved, true is returned.-
639-
640 \sa previous(), first(), last(), seek(), at(), isActive(), isValid()-
641*/-
642bool QSqlQuery::next()-
643{-
644 if (!isSelect() || !isActive())
!isSelect()Description
TRUEevaluated 4 times by 2 tests
Evaluated by:
  • tst_QSqlQuery
  • tst_QSqlTableModel
FALSEevaluated 3173 times by 9 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSql
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
!isActive()Description
TRUEnever evaluated
FALSEevaluated 3173 times by 9 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSql
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
0-3173
645 return false;
executed 4 times by 2 tests: return false;
Executed by:
  • tst_QSqlQuery
  • tst_QSqlTableModel
4
646 bool b = false;-
647 switch (at()) {-
648 case QSql::BeforeFirstRow:
executed 688 times by 8 tests: case QSql::BeforeFirstRow:
Executed by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
688
649 b = d->sqlResult->fetchFirst();-
650 return b;
executed 688 times by 8 tests: return b;
Executed by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
688
651 case QSql::AfterLastRow:
executed 25 times by 8 tests: case QSql::AfterLastRow:
Executed by:
  • tst_QSql
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
25
652 return false;
executed 25 times by 8 tests: return false;
Executed by:
  • tst_QSql
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
25
653 default:
executed 2460 times by 8 tests: default:
Executed by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
2460
654 if (!d->sqlResult->fetchNext()) {
!d->sqlResult->fetchNext()Description
TRUEevaluated 821 times by 8 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
FALSEevaluated 1639 times by 8 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
821-1639
655 d->sqlResult->setAt(QSql::AfterLastRow);-
656 return false;
executed 821 times by 8 tests: return false;
Executed by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
821
657 }-
658 return true;
executed 1639 times by 8 tests: return true;
Executed by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
1639
659 }-
660}-
661-
662/*!-
663-
664 Retrieves the previous record in the result, if available, and-
665 positions the query on the retrieved record. Note that the result-
666 must be in the \l{isActive()}{active} state and isSelect() must-
667 return true before calling this function or it will do nothing and-
668 return false.-
669-
670 The following rules apply:-
671-
672 \list-
673-
674 \li If the result is currently located before the first record, there-
675 is no change and false is returned.-
676-
677 \li If the result is currently located after the last record, an-
678 attempt is made to retrieve the last record.-
679-
680 \li If the result is somewhere in the middle, an attempt is made to-
681 retrieve the previous record.-
682-
683 \endlist-
684-
685 If the record could not be retrieved, the result is positioned-
686 before the first record and false is returned. If the record is-
687 successfully retrieved, true is returned.-
688-
689 \sa next(), first(), last(), seek(), at(), isActive(), isValid()-
690*/-
691bool QSqlQuery::previous()-
692{-
693 if (!isSelect() || !isActive())
!isSelect()Description
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • tst_QSqlQuery
!isActive()Description
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • tst_QSqlQuery
0-3
694 return false;
never executed: return false;
0
695 if (isForwardOnly()) {
isForwardOnly()Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • tst_QSqlQuery
FALSEevaluated 2 times by 1 test
Evaluated by:
  • tst_QSqlQuery
1-2
696 qWarning("QSqlQuery::seek: cannot seek backwards in a forward only query");-
697 return false;
executed 1 time by 1 test: return false;
Executed by:
  • tst_QSqlQuery
1
698 }-
699-
700 bool b = false;-
701 switch (at()) {-
702 case QSql::BeforeFirstRow:
never executed: case QSql::BeforeFirstRow:
0
703 return false;
never executed: return false;
0
704 case QSql::AfterLastRow:
executed 1 time by 1 test: case QSql::AfterLastRow:
Executed by:
  • tst_QSqlQuery
1
705 b = d->sqlResult->fetchLast();-
706 return b;
executed 1 time by 1 test: return b;
Executed by:
  • tst_QSqlQuery
1
707 default:
executed 1 time by 1 test: default:
Executed by:
  • tst_QSqlQuery
1
708 if (!d->sqlResult->fetchPrevious()) {
!d->sqlResult->fetchPrevious()Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_QSqlQuery
0-1
709 d->sqlResult->setAt(QSql::BeforeFirstRow);-
710 return false;
never executed: return false;
0
711 }-
712 return true;
executed 1 time by 1 test: return true;
Executed by:
  • tst_QSqlQuery
1
713 }-
714}-
715-
716/*!-
717 Retrieves the first record in the result, if available, and-
718 positions the query on the retrieved record. Note that the result-
719 must be in the \l{isActive()}{active} state and isSelect() must-
720 return true before calling this function or it will do nothing and-
721 return false. Returns \c true if successful. If unsuccessful the query-
722 position is set to an invalid position and false is returned.-
723-
724 \sa next(), previous(), last(), seek(), at(), isActive(), isValid()-
725 */-
726bool QSqlQuery::first()-
727{-
728 if (!isSelect() || !isActive())
!isSelect()Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • tst_QSqlQuery
FALSEevaluated 18 times by 2 tests
Evaluated by:
  • tst_QSqlQuery
  • tst_QSqlThread
!isActive()Description
TRUEnever evaluated
FALSEevaluated 18 times by 2 tests
Evaluated by:
  • tst_QSqlQuery
  • tst_QSqlThread
0-18
729 return false;
executed 1 time by 1 test: return false;
Executed by:
  • tst_QSqlQuery
1
730 if (isForwardOnly() && at() > QSql::BeforeFirstRow) {
isForwardOnly()Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • tst_QSqlQuery
FALSEevaluated 15 times by 2 tests
Evaluated by:
  • tst_QSqlQuery
  • tst_QSqlThread
at() > QSql::BeforeFirstRowDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_QSqlQuery
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_QSqlQuery
1-15
731 qWarning("QSqlQuery::seek: cannot seek backwards in a forward only query");-
732 return false;
executed 2 times by 1 test: return false;
Executed by:
  • tst_QSqlQuery
2
733 }-
734 bool b = false;-
735 b = d->sqlResult->fetchFirst();-
736 return b;
executed 16 times by 2 tests: return b;
Executed by:
  • tst_QSqlQuery
  • tst_QSqlThread
16
737}-
738-
739/*!-
740-
741 Retrieves the last record in the result, if available, and positions-
742 the query on the retrieved record. Note that the result must be in-
743 the \l{isActive()}{active} state and isSelect() must return true-
744 before calling this function or it will do nothing and return false.-
745 Returns \c true if successful. If unsuccessful the query position is-
746 set to an invalid position and false is returned.-
747-
748 \sa next(), previous(), first(), seek(), at(), isActive(), isValid()-
749*/-
750-
751bool QSqlQuery::last()-
752{-
753 if (!isSelect() || !isActive())
!isSelect()Description
TRUEnever evaluated
FALSEevaluated 8 times by 1 test
Evaluated by:
  • tst_QSqlQuery
!isActive()Description
TRUEnever evaluated
FALSEevaluated 8 times by 1 test
Evaluated by:
  • tst_QSqlQuery
0-8
754 return false;
never executed: return false;
0
755 bool b = false;-
756 b = d->sqlResult->fetchLast();-
757 return b;
executed 8 times by 1 test: return b;
Executed by:
  • tst_QSqlQuery
8
758}-
759-
760/*!-
761 Returns the size of the result (number of rows returned), or -1 if-
762 the size cannot be determined or if the database does not support-
763 reporting information about query sizes. Note that for non-\c SELECT-
764 statements (isSelect() returns \c false), size() will return -1. If the-
765 query is not active (isActive() returns \c false), -1 is returned.-
766-
767 To determine the number of rows affected by a non-\c SELECT-
768 statement, use numRowsAffected().-
769-
770 \sa isActive(), numRowsAffected(), QSqlDriver::hasFeature()-
771*/-
772int QSqlQuery::size() const-
773{-
774 if (isActive() && d->sqlResult->driver()->hasFeature(QSqlDriver::QuerySize))
isActive()Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • tst_QSqlQuery
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_QSqlQuery
d->sqlResult->...er::QuerySize)Description
TRUEnever evaluated
FALSEevaluated 5 times by 1 test
Evaluated by:
  • tst_QSqlQuery
0-5
775 return d->sqlResult->size();
never executed: return d->sqlResult->size();
0
776 return -1;
executed 6 times by 1 test: return -1;
Executed by:
  • tst_QSqlQuery
6
777}-
778-
779/*!-
780 Returns the number of rows affected by the result's SQL statement,-
781 or -1 if it cannot be determined. Note that for \c SELECT-
782 statements, the value is undefined; use size() instead. If the query-
783 is not \l{isActive()}{active}, -1 is returned.-
784-
785 \sa size(), QSqlDriver::hasFeature()-
786*/-
787-
788int QSqlQuery::numRowsAffected() const-
789{-
790 if (isActive())
isActive()Description
TRUEevaluated 19 times by 1 test
Evaluated by:
  • tst_QSqlQuery
FALSEevaluated 2 times by 1 test
Evaluated by:
  • tst_QSqlQuery
2-19
791 return d->sqlResult->numRowsAffected();
executed 19 times by 1 test: return d->sqlResult->numRowsAffected();
Executed by:
  • tst_QSqlQuery
19
792 return -1;
executed 2 times by 1 test: return -1;
Executed by:
  • tst_QSqlQuery
2
793}-
794-
795/*!-
796 Returns error information about the last error (if any) that-
797 occurred with this query.-
798-
799 \sa QSqlError, QSqlDatabase::lastError()-
800*/-
801-
802QSqlError QSqlQuery::lastError() const-
803{-
804 return d->sqlResult->lastError();
executed 11097 times by 7 tests: return d->sqlResult->lastError();
Executed by:
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
11097
805}-
806-
807/*!-
808 Returns \c true if the query is currently positioned on a valid-
809 record; otherwise returns \c false.-
810*/-
811-
812bool QSqlQuery::isValid() const-
813{-
814 return d->sqlResult->isValid();
executed 9649 times by 8 tests: return d->sqlResult->isValid();
Executed by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
9649
815}-
816-
817/*!-
818-
819 Returns \c true if the query is \e{active}. An active QSqlQuery is one-
820 that has been \l{QSqlQuery::exec()} {exec()'d} successfully but not-
821 yet finished with. When you are finished with an active query, you-
822 can make the query inactive by calling finish() or clear(), or-
823 you can delete the QSqlQuery instance.-
824-
825 \note Of particular interest is an active query that is a \c{SELECT}-
826 statement. For some databases that support transactions, an active-
827 query that is a \c{SELECT} statement can cause a \l{QSqlDatabase::}-
828 {commit()} or a \l{QSqlDatabase::} {rollback()} to fail, so before-
829 committing or rolling back, you should make your active \c{SELECT}-
830 statement query inactive using one of the ways listed above.-
831-
832 \sa isSelect()-
833 */-
834bool QSqlQuery::isActive() const-
835{-
836 return d->sqlResult->isActive();
executed 16979 times by 9 tests: return d->sqlResult->isActive();
Executed by:
  • tst_QItemModel
  • tst_QSql
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
16979
837}-
838-
839/*!-
840 Returns \c true if the current query is a \c SELECT statement;-
841 otherwise returns \c false.-
842*/-
843-
844bool QSqlQuery::isSelect() const-
845{-
846 return d->sqlResult->isSelect();
executed 7086 times by 9 tests: return d->sqlResult->isSelect();
Executed by:
  • tst_QItemModel
  • tst_QSql
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
7086
847}-
848-
849/*!-
850 Returns \c true if you can only scroll forward through a result set;-
851 otherwise returns \c false.-
852-
853 \sa setForwardOnly(), next()-
854*/-
855bool QSqlQuery::isForwardOnly() const-
856{-
857 return d->sqlResult->isForwardOnly();
executed 4291 times by 6 tests: return d->sqlResult->isForwardOnly();
Executed by:
  • tst_QItemModel
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
4291
858}-
859-
860/*!-
861 Sets forward only mode to \a forward. If \a forward is true, only-
862 next() and seek() with positive values, are allowed for navigating-
863 the results.-
864-
865 Forward only mode can be (depending on the driver) more memory-
866 efficient since results do not need to be cached. It will also-
867 improve performance on some databases. For this to be true, you must-
868 call \c setForwardOnly() before the query is prepared or executed.-
869 Note that the constructor that takes a query and a database may-
870 execute the query.-
871-
872 Forward only mode is off by default.-
873-
874 Setting forward only to false is a suggestion to the database engine,-
875 which has the final say on whether a result set is forward only or-
876 scrollable. isForwardOnly() will always return the correct status of-
877 the result set.-
878-
879 \note Calling setForwardOnly after execution of the query will result-
880 in unexpected results at best, and crashes at worst.-
881-
882 \sa isForwardOnly(), next(), seek(), QSqlResult::setForwardOnly()-
883*/-
884void QSqlQuery::setForwardOnly(bool forward)-
885{-
886 d->sqlResult->setForwardOnly(forward);-
887}
executed 647 times by 9 tests: end of block
Executed by:
  • tst_QItemModel
  • tst_QSql
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
647
888-
889/*!-
890 Returns a QSqlRecord containing the field information for the-
891 current query. If the query points to a valid row (isValid() returns-
892 true), the record is populated with the row's values. An empty-
893 record is returned when there is no active query (isActive() returns-
894 false).-
895-
896 To retrieve values from a query, value() should be used since-
897 its index-based lookup is faster.-
898-
899 In the following example, a \c{SELECT * FROM} query is executed.-
900 Since the order of the columns is not defined, QSqlRecord::indexOf()-
901 is used to obtain the index of a column.-
902-
903 \snippet code/src_sql_kernel_qsqlquery.cpp 1-
904-
905 \sa value()-
906*/-
907QSqlRecord QSqlQuery::record() const-
908{-
909 QSqlRecord rec = d->sqlResult->record();-
910-
911 if (isValid()) {
isValid()Description
TRUEevaluated 100 times by 5 tests
Evaluated by:
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
FALSEevaluated 403 times by 6 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
100-403
912 for (int i = 0; i < rec.count(); ++i)
i < rec.count()Description
TRUEevaluated 241 times by 5 tests
Evaluated by:
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
FALSEevaluated 100 times by 5 tests
Evaluated by:
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
100-241
913 rec.setValue(i, value(i));
executed 241 times by 5 tests: rec.setValue(i, value(i));
Executed by:
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
241
914 }
executed 100 times by 5 tests: end of block
Executed by:
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
100
915 return rec;
executed 503 times by 7 tests: return rec;
Executed by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlDriver
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
503
916}-
917-
918/*!-
919 Clears the result set and releases any resources held by the-
920 query. Sets the query state to inactive. You should rarely if ever-
921 need to call this function.-
922*/-
923void QSqlQuery::clear()-
924{-
925 *this = QSqlQuery(driver()->createResult());-
926}
executed 398 times by 7 tests: end of block
Executed by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
398
927-
928/*!-
929 Prepares the SQL query \a query for execution. Returns \c true if the-
930 query is prepared successfully; otherwise returns \c false.-
931-
932 The query may contain placeholders for binding values. Both Oracle-
933 style colon-name (e.g., \c{:surname}), and ODBC style (\c{?})-
934 placeholders are supported; but they cannot be mixed in the same-
935 query. See the \l{QSqlQuery examples}{Detailed Description} for-
936 examples.-
937-
938 Portability note: Some databases choose to delay preparing a query-
939 until it is executed the first time. In this case, preparing a-
940 syntactically wrong query succeeds, but every consecutive exec()-
941 will fail.-
942-
943 For SQLite, the query string can contain only one statement at a time.-
944 If more than one statement is given, the function returns \c false.-
945-
946 Example:-
947-
948 \snippet sqldatabase/sqldatabase.cpp 9-
949-
950 \sa exec(), bindValue(), addBindValue()-
951*/-
952bool QSqlQuery::prepare(const QString& query)-
953{-
954 if (d->ref.load() != 1) {
d->ref.load() != 1Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_QSqlQuery
FALSEevaluated 232 times by 7 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
2-232
955 bool fo = isForwardOnly();-
956 *this = QSqlQuery(driver()->createResult());-
957 setForwardOnly(fo);-
958 d->sqlResult->setNumericalPrecisionPolicy(d->sqlResult->numericalPrecisionPolicy());-
959 } else {
executed 2 times by 1 test: end of block
Executed by:
  • tst_QSqlQuery
2
960 d->sqlResult->setActive(false);-
961 d->sqlResult->setLastError(QSqlError());-
962 d->sqlResult->setAt(QSql::BeforeFirstRow);-
963 d->sqlResult->setNumericalPrecisionPolicy(d->sqlResult->numericalPrecisionPolicy());-
964 }
executed 232 times by 7 tests: end of block
Executed by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
232
965 if (!driver()) {
!driver()Description
TRUEnever evaluated
FALSEevaluated 234 times by 7 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
0-234
966 qWarning("QSqlQuery::prepare: no driver");-
967 return false;
never executed: return false;
0
968 }-
969 if (!driver()->isOpen() || driver()->isOpenError()) {
!driver()->isOpen()Description
TRUEnever evaluated
FALSEevaluated 234 times by 7 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
driver()->isOpenError()Description
TRUEnever evaluated
FALSEevaluated 234 times by 7 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
0-234
970 qWarning("QSqlQuery::prepare: database not open");-
971 return false;
never executed: return false;
0
972 }-
973 if (query.isEmpty()) {
query.isEmpty()Description
TRUEnever evaluated
FALSEevaluated 234 times by 7 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
0-234
974 qWarning("QSqlQuery::prepare: empty query");-
975 return false;
never executed: return false;
0
976 }-
977#ifdef QT_DEBUG_SQL-
978 qDebug("\n QSqlQuery::prepare: %s", query.toLocal8Bit().constData());-
979#endif-
980 return d->sqlResult->savePrepare(query);
executed 234 times by 7 tests: return d->sqlResult->savePrepare(query);
Executed by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
234
981}-
982-
983/*!-
984 Executes a previously prepared SQL query. Returns \c true if the query-
985 executed successfully; otherwise returns \c false.-
986-
987 Note that the last error for this query is reset when exec() is-
988 called.-
989-
990 \sa prepare(), bindValue(), addBindValue(), boundValue(), boundValues()-
991*/-
992bool QSqlQuery::exec()-
993{-
994#ifdef QT_DEBUG_SQL-
995 QElapsedTimer t;-
996 t.start();-
997#endif-
998 d->sqlResult->resetBindCount();-
999-
1000 if (d->sqlResult->lastError().isValid())
d->sqlResult->...or().isValid()Description
TRUEevaluated 92072 times by 2 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlQuery
FALSEevaluated 24658 times by 7 tests
Evaluated by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
24658-92072
1001 d->sqlResult->setLastError(QSqlError());
executed 92072 times by 2 tests: d->sqlResult->setLastError(QSqlError());
Executed by:
  • tst_QItemModel
  • tst_QSqlQuery
92072
1002-
1003 bool retval = d->sqlResult->exec();-
1004#ifdef QT_DEBUG_SQL-
1005 qDebug().nospace() << "Executed prepared query (" << t.elapsed() << "ms, "-
1006 << d->sqlResult->size() << " results, " << d->sqlResult->numRowsAffected()-
1007 << " affected): " << d->sqlResult->lastQuery();-
1008#endif-
1009 return retval;
executed 116730 times by 7 tests: return retval;
Executed by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
  • tst_QSqlThread
116730
1010}-
1011-
1012/*! \enum QSqlQuery::BatchExecutionMode-
1013-
1014 \value ValuesAsRows - Updates multiple rows. Treats every entry in a QVariantList as a value for updating the next row.-
1015 \value ValuesAsColumns - Updates a single row. Treats every entry in a QVariantList as a single value of an array type.-
1016*/-
1017-
1018/*!-
1019 \since 4.2-
1020-
1021 Executes a previously prepared SQL query in a batch. All the bound-
1022 parameters have to be lists of variants. If the database doesn't-
1023 support batch executions, the driver will simulate it using-
1024 conventional exec() calls.-
1025-
1026 Returns \c true if the query is executed successfully; otherwise-
1027 returns \c false.-
1028-
1029 Example:-
1030-
1031 \snippet code/src_sql_kernel_qsqlquery.cpp 2-
1032-
1033 The example above inserts four new rows into \c myTable:-
1034-
1035 \snippet code/src_sql_kernel_qsqlquery.cpp 3-
1036-
1037 To bind NULL values, a null QVariant of the relevant type has to be-
1038 added to the bound QVariantList; for example, \c-
1039 {QVariant(QVariant::String)} should be used if you are using-
1040 strings.-
1041-
1042 \note Every bound QVariantList must contain the same amount of-
1043 variants.-
1044-
1045 \note The type of the QVariants in a list must not change. For-
1046 example, you cannot mix integer and string variants within a-
1047 QVariantList.-
1048-
1049 The \a mode parameter indicates how the bound QVariantList will be-
1050 interpreted. If \a mode is \c ValuesAsRows, every variant within-
1051 the QVariantList will be interpreted as a value for a new row. \c-
1052 ValuesAsColumns is a special case for the Oracle driver. In this-
1053 mode, every entry within a QVariantList will be interpreted as-
1054 array-value for an IN or OUT value within a stored procedure. Note-
1055 that this will only work if the IN or OUT value is a table-type-
1056 consisting of only one column of a basic type, for example \c{TYPE-
1057 myType IS TABLE OF VARCHAR(64) INDEX BY BINARY_INTEGER;}-
1058-
1059 \sa prepare(), bindValue(), addBindValue()-
1060*/-
1061bool QSqlQuery::execBatch(BatchExecutionMode mode)-
1062{-
1063 d->sqlResult->resetBindCount();-
1064 return d->sqlResult->execBatch(mode == ValuesAsColumns);
executed 2 times by 1 test: return d->sqlResult->execBatch(mode == ValuesAsColumns);
Executed by:
  • tst_QSqlQuery
2
1065}-
1066-
1067/*!-
1068 Set the placeholder \a placeholder to be bound to value \a val in-
1069 the prepared statement. Note that the placeholder mark (e.g \c{:})-
1070 must be included when specifying the placeholder name. If \a-
1071 paramType is QSql::Out or QSql::InOut, the placeholder will be-
1072 overwritten with data from the database after the exec() call.-
1073 In this case, sufficient space must be pre-allocated to store-
1074 the result into.-
1075-
1076 To bind a NULL value, use a null QVariant; for example, use-
1077 \c {QVariant(QVariant::String)} if you are binding a string.-
1078-
1079 \sa addBindValue(), prepare(), exec(), boundValue(), boundValues()-
1080*/-
1081void QSqlQuery::bindValue(const QString& placeholder, const QVariant& val,-
1082 QSql::ParamType paramType-
1083)-
1084{-
1085 d->sqlResult->bindValue(placeholder, val, paramType);-
1086}
executed 48 times by 2 tests: end of block
Executed by:
  • tst_QSqlQuery
  • tst_QSqlThread
48
1087-
1088/*!-
1089 Set the placeholder in position \a pos to be bound to value \a val-
1090 in the prepared statement. Field numbering starts at 0. If \a-
1091 paramType is QSql::Out or QSql::InOut, the placeholder will be-
1092 overwritten with data from the database after the exec() call.-
1093*/-
1094void QSqlQuery::bindValue(int pos, const QVariant& val, QSql::ParamType paramType)-
1095{-
1096 d->sqlResult->bindValue(pos, val, paramType);-
1097}
executed 89 times by 4 tests: end of block
Executed by:
  • tst_QSqlDatabase
  • tst_QSqlQuery
  • tst_QSqlQueryModel
  • tst_QSqlThread
89
1098-
1099/*!-
1100 Adds the value \a val to the list of values when using positional-
1101 value binding. The order of the addBindValue() calls determines-
1102 which placeholder a value will be bound to in the prepared query.-
1103 If \a paramType is QSql::Out or QSql::InOut, the placeholder will be-
1104 overwritten with data from the database after the exec() call.-
1105-
1106 To bind a NULL value, use a null QVariant; for example, use \c-
1107 {QVariant(QVariant::String)} if you are binding a string.-
1108-
1109 \sa bindValue(), prepare(), exec(), boundValue(), boundValues()-
1110*/-
1111void QSqlQuery::addBindValue(const QVariant& val, QSql::ParamType paramType)-
1112{-
1113 d->sqlResult->addBindValue(val, paramType);-
1114}
executed 233369 times by 5 tests: end of block
Executed by:
  • tst_QItemModel
  • tst_QSqlDatabase
  • tst_QSqlQuery
  • tst_QSqlRelationalTableModel
  • tst_QSqlTableModel
233369
1115-
1116/*!-
1117 Returns the value for the \a placeholder.-
1118-
1119 \sa boundValues(), bindValue(), addBindValue()-
1120*/-
1121QVariant QSqlQuery::boundValue(const QString& placeholder) const-
1122{-
1123 return d->sqlResult->boundValue(placeholder);
never executed: return d->sqlResult->boundValue(placeholder);
0
1124}-
1125-
1126/*!-
1127 Returns the value for the placeholder at position \a pos.-
1128*/-
1129QVariant QSqlQuery::boundValue(int pos) const-
1130{-
1131 return d->sqlResult->boundValue(pos);
executed 1 time by 1 test: return d->sqlResult->boundValue(pos);
Executed by:
  • tst_QSqlQuery
1
1132}-
1133-
1134/*!-
1135 Returns a map of the bound values.-
1136-
1137 With named binding, the bound values can be examined in the-
1138 following ways:-
1139-
1140 \snippet sqldatabase/sqldatabase.cpp 14-
1141-
1142 With positional binding, the code becomes:-
1143-
1144 \snippet sqldatabase/sqldatabase.cpp 15-
1145-
1146 \sa boundValue(), bindValue(), addBindValue()-
1147*/-
1148QMap<QString,QVariant> QSqlQuery::boundValues() const-
1149{-
1150 QMap<QString,QVariant> map;-
1151-
1152 const QVector<QVariant> values(d->sqlResult->boundValues());-
1153 for (int i = 0; i < values.count(); ++i)
i < values.count()Description
TRUEevaluated 122 times by 1 test
Evaluated by:
  • tst_QSqlQuery
FALSEevaluated 53 times by 1 test
Evaluated by:
  • tst_QSqlQuery
53-122
1154 map[d->sqlResult->boundValueName(i)] = values.at(i);
executed 122 times by 1 test: map[d->sqlResult->boundValueName(i)] = values.at(i);
Executed by:
  • tst_QSqlQuery
122
1155 return map;
executed 53 times by 1 test: return map;
Executed by:
  • tst_QSqlQuery
53
1156}-
1157-
1158/*!-
1159 Returns the last query that was successfully executed.-
1160-
1161 In most cases this function returns the same string as lastQuery().-
1162 If a prepared query with placeholders is executed on a DBMS that-
1163 does not support it, the preparation of this query is emulated. The-
1164 placeholders in the original query are replaced with their bound-
1165 values to form a new query. This function returns the modified-
1166 query. It is mostly useful for debugging purposes.-
1167-
1168 \sa lastQuery()-
1169*/-
1170QString QSqlQuery::executedQuery() const-
1171{-
1172 return d->sqlResult->executedQuery();
executed 1 time by 1 test: return d->sqlResult->executedQuery();
Executed by:
  • tst_QSqlQuery
1
1173}-
1174-
1175/*!-
1176 Returns the object ID of the most recent inserted row if the-
1177 database supports it. An invalid QVariant will be returned if the-
1178 query did not insert any value or if the database does not report-
1179 the id back. If more than one row was touched by the insert, the-
1180 behavior is undefined.-
1181-
1182 For MySQL databases the row's auto-increment field will be returned.-
1183-
1184 \note For this function to work in PSQL, the table table must-
1185 contain OIDs, which may not have been created by default. Check the-
1186 \c default_with_oids configuration variable to be sure.-
1187-
1188 \sa QSqlDriver::hasFeature()-
1189*/-
1190QVariant QSqlQuery::lastInsertId() const-
1191{-
1192 return d->sqlResult->lastInsertId();
executed 7 times by 2 tests: return d->sqlResult->lastInsertId();
Executed by:
  • tst_QSqlQuery
  • tst_QSqlTableModel
7
1193}-
1194-
1195/*!-
1196-
1197 Instruct the database driver to return numerical values with a-
1198 precision specified by \a precisionPolicy.-
1199-
1200 The Oracle driver, for example, can retrieve numerical values as-
1201 strings to prevent the loss of precision. If high precision doesn't-
1202 matter, use this method to increase execution speed by bypassing-
1203 string conversions.-
1204-
1205 Note: Drivers that don't support fetching numerical values with low-
1206 precision will ignore the precision policy. You can use-
1207 QSqlDriver::hasFeature() to find out whether a driver supports this-
1208 feature.-
1209-
1210 Note: Setting the precision policy doesn't affect the currently-
1211 active query. Call \l{exec()}{exec(QString)} or prepare() in order-
1212 to activate the policy.-
1213-
1214 \sa QSql::NumericalPrecisionPolicy, numericalPrecisionPolicy()-
1215*/-
1216void QSqlQuery::setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy)-
1217{-
1218 d->sqlResult->setNumericalPrecisionPolicy(precisionPolicy);-
1219}
executed 6 times by 1 test: end of block
Executed by:
  • tst_QSqlDatabase
6
1220-
1221/*!-
1222 Returns the current precision policy.-
1223-
1224 \sa QSql::NumericalPrecisionPolicy, setNumericalPrecisionPolicy()-
1225*/-
1226QSql::NumericalPrecisionPolicy QSqlQuery::numericalPrecisionPolicy() const-
1227{-
1228 return d->sqlResult->numericalPrecisionPolicy();
never executed: return d->sqlResult->numericalPrecisionPolicy();
0
1229}-
1230-
1231/*!-
1232 \since 4.3.2-
1233-
1234 Instruct the database driver that no more data will be fetched from-
1235 this query until it is re-executed. There is normally no need to-
1236 call this function, but it may be helpful in order to free resources-
1237 such as locks or cursors if you intend to re-use the query at a-
1238 later time.-
1239-
1240 Sets the query to inactive. Bound values retain their values.-
1241-
1242 \sa prepare(), exec(), isActive()-
1243*/-
1244void QSqlQuery::finish()-
1245{-
1246 if (isActive()) {
isActive()Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • tst_QSqlQuery
FALSEnever evaluated
0-3
1247 d->sqlResult->setLastError(QSqlError());-
1248 d->sqlResult->setAt(QSql::BeforeFirstRow);-
1249 d->sqlResult->detachFromResultSet();-
1250 d->sqlResult->setActive(false);-
1251 }
executed 3 times by 1 test: end of block
Executed by:
  • tst_QSqlQuery
3
1252}
executed 3 times by 1 test: end of block
Executed by:
  • tst_QSqlQuery
3
1253-
1254/*!-
1255 \since 4.4-
1256-
1257 Discards the current result set and navigates to the next if available.-
1258-
1259 Some databases are capable of returning multiple result sets for-
1260 stored procedures or SQL batches (a query strings that contains-
1261 multiple statements). If multiple result sets are available after-
1262 executing a query this function can be used to navigate to the next-
1263 result set(s).-
1264-
1265 If a new result set is available this function will return true.-
1266 The query will be repositioned on an \e invalid record in the new-
1267 result set and must be navigated to a valid record before data-
1268 values can be retrieved. If a new result set isn't available the-
1269 function returns \c false and the query is set to inactive. In any-
1270 case the old result set will be discarded.-
1271-
1272 When one of the statements is a non-select statement a count of-
1273 affected rows may be available instead of a result set.-
1274-
1275 Note that some databases, i.e. Microsoft SQL Server, requires-
1276 non-scrollable cursors when working with multiple result sets. Some-
1277 databases may execute all statements at once while others may delay-
1278 the execution until the result set is actually accessed, and some-
1279 databases may have restrictions on which statements are allowed to-
1280 be used in a SQL batch.-
1281-
1282 \sa QSqlDriver::hasFeature(), setForwardOnly(), next(), isSelect(),-
1283 numRowsAffected(), isActive(), lastError()-
1284*/-
1285bool QSqlQuery::nextResult()-
1286{-
1287 if (isActive())
isActive()Description
TRUEnever evaluated
FALSEnever evaluated
0
1288 return d->sqlResult->nextResult();
never executed: return d->sqlResult->nextResult();
0
1289 return false;
never executed: return false;
0
1290}-
1291-
1292QT_END_NAMESPACE-
Source codeSwitch to Preprocessed file

Generated by Squish Coco Non-Commercial 4.3.0-BETA-master-30-08-2018-4cb69e9