Absolute File Name: | /home/qt/qt5_coco/qt5/qtbase/src/sql/kernel/qsqlrecord.cpp |
Source code | Switch to Preprocessed file |
Line | Source | Count | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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 "qsqlrecord.h" | - | ||||||||||||
35 | - | |||||||||||||
36 | #include "qdebug.h" | - | ||||||||||||
37 | #include "qstringlist.h" | - | ||||||||||||
38 | #include "qatomic.h" | - | ||||||||||||
39 | #include "qsqlfield.h" | - | ||||||||||||
40 | #include "qstring.h" | - | ||||||||||||
41 | #include "qvector.h" | - | ||||||||||||
42 | - | |||||||||||||
43 | QT_BEGIN_NAMESPACE | - | ||||||||||||
44 | - | |||||||||||||
45 | class QSqlRecordPrivate | - | ||||||||||||
46 | { | - | ||||||||||||
47 | public: | - | ||||||||||||
48 | QSqlRecordPrivate(); | - | ||||||||||||
49 | QSqlRecordPrivate(const QSqlRecordPrivate &other); | - | ||||||||||||
50 | - | |||||||||||||
51 | inline bool contains(int index) { return index >= 0 && index < fields.count(); } executed 3290 times by 7 tests: return index >= 0 && index < fields.count(); Executed by:
| 6-3290 | ||||||||||||
52 | QString createField(int index, const QString &prefix) const; | - | ||||||||||||
53 | - | |||||||||||||
54 | QVector<QSqlField> fields; | - | ||||||||||||
55 | QAtomicInt ref; | - | ||||||||||||
56 | }; | - | ||||||||||||
57 | - | |||||||||||||
58 | QSqlRecordPrivate::QSqlRecordPrivate() : ref(1) | - | ||||||||||||
59 | { | - | ||||||||||||
60 | } executed 15181 times by 10 tests: end of block Executed by:
| 15181 | ||||||||||||
61 | - | |||||||||||||
62 | QSqlRecordPrivate::QSqlRecordPrivate(const QSqlRecordPrivate &other): fields(other.fields), ref(1) | - | ||||||||||||
63 | { | - | ||||||||||||
64 | } executed 1024 times by 8 tests: end of block Executed by:
| 1024 | ||||||||||||
65 | - | |||||||||||||
66 | /*! \internal | - | ||||||||||||
67 | Just for compat | - | ||||||||||||
68 | */ | - | ||||||||||||
69 | QString QSqlRecordPrivate::createField(int index, const QString &prefix) const | - | ||||||||||||
70 | { | - | ||||||||||||
71 | QString f; | - | ||||||||||||
72 | if (!prefix.isEmpty())
| 0 | ||||||||||||
73 | f = prefix + QLatin1Char('.'); never executed: f = prefix + QLatin1Char('.'); | 0 | ||||||||||||
74 | f += fields.at(index).name(); | - | ||||||||||||
75 | return f; never executed: return f; | 0 | ||||||||||||
76 | } | - | ||||||||||||
77 | - | |||||||||||||
78 | /*! | - | ||||||||||||
79 | \class QSqlRecord | - | ||||||||||||
80 | \brief The QSqlRecord class encapsulates a database record. | - | ||||||||||||
81 | - | |||||||||||||
82 | \ingroup database | - | ||||||||||||
83 | \ingroup shared | - | ||||||||||||
84 | \inmodule QtSql | - | ||||||||||||
85 | - | |||||||||||||
86 | The QSqlRecord class encapsulates the functionality and | - | ||||||||||||
87 | characteristics of a database record (usually a row in a table or | - | ||||||||||||
88 | view within the database). QSqlRecord supports adding and | - | ||||||||||||
89 | removing fields as well as setting and retrieving field values. | - | ||||||||||||
90 | - | |||||||||||||
91 | The values of a record's fields can be set by name or position | - | ||||||||||||
92 | with setValue(); if you want to set a field to null use | - | ||||||||||||
93 | setNull(). To find the position of a field by name use indexOf(), | - | ||||||||||||
94 | and to find the name of a field at a particular position use | - | ||||||||||||
95 | fieldName(). Use field() to retrieve a QSqlField object for a | - | ||||||||||||
96 | given field. Use contains() to see if the record contains a | - | ||||||||||||
97 | particular field name. | - | ||||||||||||
98 | - | |||||||||||||
99 | When queries are generated to be executed on the database only | - | ||||||||||||
100 | those fields for which isGenerated() is true are included in the | - | ||||||||||||
101 | generated SQL. | - | ||||||||||||
102 | - | |||||||||||||
103 | A record can have fields added with append() or insert(), replaced | - | ||||||||||||
104 | with replace(), and removed with remove(). All the fields can be | - | ||||||||||||
105 | removed with clear(). The number of fields is given by count(); | - | ||||||||||||
106 | all their values can be cleared (to null) using clearValues(). | - | ||||||||||||
107 | - | |||||||||||||
108 | \sa QSqlField, QSqlQuery::record() | - | ||||||||||||
109 | */ | - | ||||||||||||
110 | - | |||||||||||||
111 | - | |||||||||||||
112 | /*! | - | ||||||||||||
113 | Constructs an empty record. | - | ||||||||||||
114 | - | |||||||||||||
115 | \sa isEmpty(), append(), insert() | - | ||||||||||||
116 | */ | - | ||||||||||||
117 | - | |||||||||||||
118 | QSqlRecord::QSqlRecord() | - | ||||||||||||
119 | { | - | ||||||||||||
120 | d = new QSqlRecordPrivate(); | - | ||||||||||||
121 | } executed 15181 times by 10 tests: end of block Executed by:
| 15181 | ||||||||||||
122 | - | |||||||||||||
123 | /*! | - | ||||||||||||
124 | Constructs a copy of \a other. | - | ||||||||||||
125 | - | |||||||||||||
126 | QSqlRecord is \l{implicitly shared}. This means you can make copies | - | ||||||||||||
127 | of a record in \l{constant time}. | - | ||||||||||||
128 | */ | - | ||||||||||||
129 | - | |||||||||||||
130 | QSqlRecord::QSqlRecord(const QSqlRecord& other) | - | ||||||||||||
131 | { | - | ||||||||||||
132 | d = other.d; | - | ||||||||||||
133 | d->ref.ref(); | - | ||||||||||||
134 | } executed 20192 times by 8 tests: end of block Executed by:
| 20192 | ||||||||||||
135 | - | |||||||||||||
136 | /*! | - | ||||||||||||
137 | Sets the record equal to \a other. | - | ||||||||||||
138 | - | |||||||||||||
139 | QSqlRecord is \l{implicitly shared}. This means you can make copies | - | ||||||||||||
140 | of a record in \l{constant time}. | - | ||||||||||||
141 | */ | - | ||||||||||||
142 | - | |||||||||||||
143 | QSqlRecord& QSqlRecord::operator=(const QSqlRecord& other) | - | ||||||||||||
144 | { | - | ||||||||||||
145 | qAtomicAssign(d, other.d); | - | ||||||||||||
146 | return *this; executed 1738 times by 8 tests: return *this; Executed by:
| 1738 | ||||||||||||
147 | } | - | ||||||||||||
148 | - | |||||||||||||
149 | /*! | - | ||||||||||||
150 | Destroys the object and frees any allocated resources. | - | ||||||||||||
151 | */ | - | ||||||||||||
152 | - | |||||||||||||
153 | QSqlRecord::~QSqlRecord() | - | ||||||||||||
154 | { | - | ||||||||||||
155 | if (!d->ref.deref())
| 14534-20839 | ||||||||||||
156 | delete d; executed 14534 times by 10 tests: delete d; Executed by:
| 14534 | ||||||||||||
157 | } executed 35373 times by 10 tests: end of block Executed by:
| 35373 | ||||||||||||
158 | - | |||||||||||||
159 | /*! | - | ||||||||||||
160 | \fn bool QSqlRecord::operator!=(const QSqlRecord &other) const | - | ||||||||||||
161 | - | |||||||||||||
162 | Returns \c true if this object is not identical to \a other; | - | ||||||||||||
163 | otherwise returns \c false. | - | ||||||||||||
164 | - | |||||||||||||
165 | \sa operator==() | - | ||||||||||||
166 | */ | - | ||||||||||||
167 | - | |||||||||||||
168 | /*! | - | ||||||||||||
169 | Returns \c true if this object is identical to \a other (i.e., has | - | ||||||||||||
170 | the same fields in the same order); otherwise returns \c false. | - | ||||||||||||
171 | - | |||||||||||||
172 | \sa operator!=() | - | ||||||||||||
173 | */ | - | ||||||||||||
174 | bool QSqlRecord::operator==(const QSqlRecord &other) const | - | ||||||||||||
175 | { | - | ||||||||||||
176 | return d->fields == other.d->fields; executed 382 times by 4 tests: return d->fields == other.d->fields; Executed by:
| 382 | ||||||||||||
177 | } | - | ||||||||||||
178 | - | |||||||||||||
179 | /*! | - | ||||||||||||
180 | Returns the value of the field located at position \a index in | - | ||||||||||||
181 | the record. If \a index is out of bounds, an invalid QVariant | - | ||||||||||||
182 | is returned. | - | ||||||||||||
183 | - | |||||||||||||
184 | \sa fieldName(), isNull() | - | ||||||||||||
185 | */ | - | ||||||||||||
186 | - | |||||||||||||
187 | QVariant QSqlRecord::value(int index) const | - | ||||||||||||
188 | { | - | ||||||||||||
189 | return d->fields.value(index).value(); executed 1320 times by 5 tests: return d->fields.value(index).value(); Executed by:
| 1320 | ||||||||||||
190 | } | - | ||||||||||||
191 | - | |||||||||||||
192 | /*! | - | ||||||||||||
193 | \overload | - | ||||||||||||
194 | - | |||||||||||||
195 | Returns the value of the field called \a name in the record. If | - | ||||||||||||
196 | field \a name does not exist an invalid variant is returned. | - | ||||||||||||
197 | - | |||||||||||||
198 | \sa indexOf() | - | ||||||||||||
199 | */ | - | ||||||||||||
200 | - | |||||||||||||
201 | QVariant QSqlRecord::value(const QString& name) const | - | ||||||||||||
202 | { | - | ||||||||||||
203 | return value(indexOf(name)); executed 280 times by 3 tests: return value(indexOf(name)); Executed by:
| 280 | ||||||||||||
204 | } | - | ||||||||||||
205 | - | |||||||||||||
206 | /*! | - | ||||||||||||
207 | Returns the name of the field at position \a index. If the field | - | ||||||||||||
208 | does not exist, an empty string is returned. | - | ||||||||||||
209 | - | |||||||||||||
210 | \sa indexOf() | - | ||||||||||||
211 | */ | - | ||||||||||||
212 | - | |||||||||||||
213 | QString QSqlRecord::fieldName(int index) const | - | ||||||||||||
214 | { | - | ||||||||||||
215 | return d->fields.value(index).name(); executed 2572 times by 8 tests: return d->fields.value(index).name(); Executed by:
| 2572 | ||||||||||||
216 | } | - | ||||||||||||
217 | - | |||||||||||||
218 | /*! | - | ||||||||||||
219 | Returns the position of the field called \a name within the | - | ||||||||||||
220 | record, or -1 if it cannot be found. Field names are not | - | ||||||||||||
221 | case-sensitive. If more than one field matches, the first one is | - | ||||||||||||
222 | returned. | - | ||||||||||||
223 | - | |||||||||||||
224 | \sa fieldName() | - | ||||||||||||
225 | */ | - | ||||||||||||
226 | - | |||||||||||||
227 | int QSqlRecord::indexOf(const QString& name) const | - | ||||||||||||
228 | { | - | ||||||||||||
229 | QString nm = name.toUpper(); | - | ||||||||||||
230 | for (int i = 0; i < count(); ++i) {
| 28-1543 | ||||||||||||
231 | if (d->fields.at(i).name().toUpper() == nm) // TODO: case-insensitive comparison
| 729-814 | ||||||||||||
232 | return i; executed 814 times by 5 tests: return i; Executed by:
| 814 | ||||||||||||
233 | } executed 729 times by 5 tests: end of block Executed by:
| 729 | ||||||||||||
234 | return -1; executed 28 times by 4 tests: return -1; Executed by:
| 28 | ||||||||||||
235 | } | - | ||||||||||||
236 | - | |||||||||||||
237 | /*! | - | ||||||||||||
238 | Returns the field at position \a index. If the \a index | - | ||||||||||||
239 | is out of range, function returns | - | ||||||||||||
240 | a \l{default-constructed value}. | - | ||||||||||||
241 | */ | - | ||||||||||||
242 | QSqlField QSqlRecord::field(int index) const | - | ||||||||||||
243 | { | - | ||||||||||||
244 | return d->fields.value(index); executed 1674 times by 8 tests: return d->fields.value(index); Executed by:
| 1674 | ||||||||||||
245 | } | - | ||||||||||||
246 | - | |||||||||||||
247 | /*! \overload | - | ||||||||||||
248 | Returns the field called \a name. | - | ||||||||||||
249 | */ | - | ||||||||||||
250 | QSqlField QSqlRecord::field(const QString &name) const | - | ||||||||||||
251 | { | - | ||||||||||||
252 | return field(indexOf(name)); executed 284 times by 4 tests: return field(indexOf(name)); Executed by:
| 284 | ||||||||||||
253 | } | - | ||||||||||||
254 | - | |||||||||||||
255 | - | |||||||||||||
256 | /*! | - | ||||||||||||
257 | Append a copy of field \a field to the end of the record. | - | ||||||||||||
258 | - | |||||||||||||
259 | \sa insert(), replace(), remove() | - | ||||||||||||
260 | */ | - | ||||||||||||
261 | - | |||||||||||||
262 | void QSqlRecord::append(const QSqlField& field) | - | ||||||||||||
263 | { | - | ||||||||||||
264 | detach(); | - | ||||||||||||
265 | d->fields.append(field); | - | ||||||||||||
266 | } executed 5626 times by 10 tests: end of block Executed by:
| 5626 | ||||||||||||
267 | - | |||||||||||||
268 | /*! | - | ||||||||||||
269 | Inserts the field \a field at position \a pos in the record. | - | ||||||||||||
270 | - | |||||||||||||
271 | \sa append(), replace(), remove() | - | ||||||||||||
272 | */ | - | ||||||||||||
273 | void QSqlRecord::insert(int pos, const QSqlField& field) | - | ||||||||||||
274 | { | - | ||||||||||||
275 | detach(); | - | ||||||||||||
276 | d->fields.insert(pos, field); | - | ||||||||||||
277 | } executed 117 times by 3 tests: end of block Executed by:
| 117 | ||||||||||||
278 | - | |||||||||||||
279 | /*! | - | ||||||||||||
280 | Replaces the field at position \a pos with the given \a field. If | - | ||||||||||||
281 | \a pos is out of range, nothing happens. | - | ||||||||||||
282 | - | |||||||||||||
283 | \sa append(), insert(), remove() | - | ||||||||||||
284 | */ | - | ||||||||||||
285 | - | |||||||||||||
286 | void QSqlRecord::replace(int pos, const QSqlField& field) | - | ||||||||||||
287 | { | - | ||||||||||||
288 | if (!d->contains(pos))
| 0-34 | ||||||||||||
289 | return; never executed: return; | 0 | ||||||||||||
290 | - | |||||||||||||
291 | detach(); | - | ||||||||||||
292 | d->fields[pos] = field; | - | ||||||||||||
293 | } executed 34 times by 1 test: end of block Executed by:
| 34 | ||||||||||||
294 | - | |||||||||||||
295 | /*! | - | ||||||||||||
296 | Removes the field at position \a pos. If \a pos is out of range, | - | ||||||||||||
297 | nothing happens. | - | ||||||||||||
298 | - | |||||||||||||
299 | \sa append(), insert(), replace() | - | ||||||||||||
300 | */ | - | ||||||||||||
301 | - | |||||||||||||
302 | void QSqlRecord::remove(int pos) | - | ||||||||||||
303 | { | - | ||||||||||||
304 | if (!d->contains(pos))
| 1-24 | ||||||||||||
305 | return; executed 1 time by 1 test: return; Executed by:
| 1 | ||||||||||||
306 | - | |||||||||||||
307 | detach(); | - | ||||||||||||
308 | d->fields.remove(pos); | - | ||||||||||||
309 | } executed 24 times by 4 tests: end of block Executed by:
| 24 | ||||||||||||
310 | - | |||||||||||||
311 | /*! | - | ||||||||||||
312 | Removes all the record's fields. | - | ||||||||||||
313 | - | |||||||||||||
314 | \sa clearValues(), isEmpty() | - | ||||||||||||
315 | */ | - | ||||||||||||
316 | - | |||||||||||||
317 | void QSqlRecord::clear() | - | ||||||||||||
318 | { | - | ||||||||||||
319 | detach(); | - | ||||||||||||
320 | d->fields.clear(); | - | ||||||||||||
321 | } executed 124429 times by 10 tests: end of block Executed by:
| 124429 | ||||||||||||
322 | - | |||||||||||||
323 | /*! | - | ||||||||||||
324 | Returns \c true if there are no fields in the record; otherwise | - | ||||||||||||
325 | returns \c false. | - | ||||||||||||
326 | - | |||||||||||||
327 | \sa append(), insert(), clear() | - | ||||||||||||
328 | */ | - | ||||||||||||
329 | - | |||||||||||||
330 | bool QSqlRecord::isEmpty() const | - | ||||||||||||
331 | { | - | ||||||||||||
332 | return d->fields.isEmpty(); executed 89876 times by 10 tests: return d->fields.isEmpty(); Executed by:
| 89876 | ||||||||||||
333 | } | - | ||||||||||||
334 | - | |||||||||||||
335 | - | |||||||||||||
336 | /*! | - | ||||||||||||
337 | Returns \c true if there is a field in the record called \a name; | - | ||||||||||||
338 | otherwise returns \c false. | - | ||||||||||||
339 | */ | - | ||||||||||||
340 | - | |||||||||||||
341 | bool QSqlRecord::contains(const QString& name) const | - | ||||||||||||
342 | { | - | ||||||||||||
343 | return indexOf(name) >= 0; executed 6 times by 1 test: return indexOf(name) >= 0; Executed by:
| 6 | ||||||||||||
344 | } | - | ||||||||||||
345 | - | |||||||||||||
346 | /*! | - | ||||||||||||
347 | Clears the value of all fields in the record and sets each field | - | ||||||||||||
348 | to null. | - | ||||||||||||
349 | - | |||||||||||||
350 | \sa setValue() | - | ||||||||||||
351 | */ | - | ||||||||||||
352 | - | |||||||||||||
353 | void QSqlRecord::clearValues() | - | ||||||||||||
354 | { | - | ||||||||||||
355 | detach(); | - | ||||||||||||
356 | int count = d->fields.count(); | - | ||||||||||||
357 | for (int i = 0; i < count; ++i)
| 24-72 | ||||||||||||
358 | d->fields[i].clear(); executed 72 times by 2 tests: d->fields[i].clear(); Executed by:
| 72 | ||||||||||||
359 | } executed 24 times by 2 tests: end of block Executed by:
| 24 | ||||||||||||
360 | - | |||||||||||||
361 | /*! | - | ||||||||||||
362 | Sets the generated flag for the field called \a name to \a | - | ||||||||||||
363 | generated. If the field does not exist, nothing happens. Only | - | ||||||||||||
364 | fields that have \a generated set to true are included in the SQL | - | ||||||||||||
365 | that is generated by QSqlQueryModel for example. | - | ||||||||||||
366 | - | |||||||||||||
367 | \sa isGenerated() | - | ||||||||||||
368 | */ | - | ||||||||||||
369 | - | |||||||||||||
370 | void QSqlRecord::setGenerated(const QString& name, bool generated) | - | ||||||||||||
371 | { | - | ||||||||||||
372 | setGenerated(indexOf(name), generated); | - | ||||||||||||
373 | } executed 2 times by 1 test: end of block Executed by:
| 2 | ||||||||||||
374 | - | |||||||||||||
375 | /*! | - | ||||||||||||
376 | \overload | - | ||||||||||||
377 | - | |||||||||||||
378 | Sets the generated flag for the field \a index to \a generated. | - | ||||||||||||
379 | - | |||||||||||||
380 | \sa isGenerated() | - | ||||||||||||
381 | */ | - | ||||||||||||
382 | - | |||||||||||||
383 | void QSqlRecord::setGenerated(int index, bool generated) | - | ||||||||||||
384 | { | - | ||||||||||||
385 | if (!d->contains(index))
| 6-1678 | ||||||||||||
386 | return; executed 6 times by 1 test: return; Executed by:
| 6 | ||||||||||||
387 | detach(); | - | ||||||||||||
388 | d->fields[index].setGenerated(generated); | - | ||||||||||||
389 | } executed 1678 times by 3 tests: end of block Executed by:
| 1678 | ||||||||||||
390 | - | |||||||||||||
391 | /*! | - | ||||||||||||
392 | \overload | - | ||||||||||||
393 | - | |||||||||||||
394 | Returns \c true if the field \a index is null or if there is no field at | - | ||||||||||||
395 | position \a index; otherwise returns \c false. | - | ||||||||||||
396 | */ | - | ||||||||||||
397 | bool QSqlRecord::isNull(int index) const | - | ||||||||||||
398 | { | - | ||||||||||||
399 | return d->fields.value(index).isNull(); executed 532 times by 4 tests: return d->fields.value(index).isNull(); Executed by:
| 532 | ||||||||||||
400 | } | - | ||||||||||||
401 | - | |||||||||||||
402 | /*! | - | ||||||||||||
403 | Returns \c true if the field called \a name is null or if there is no | - | ||||||||||||
404 | field called \a name; otherwise returns \c false. | - | ||||||||||||
405 | - | |||||||||||||
406 | \sa setNull() | - | ||||||||||||
407 | */ | - | ||||||||||||
408 | bool QSqlRecord::isNull(const QString& name) const | - | ||||||||||||
409 | { | - | ||||||||||||
410 | return isNull(indexOf(name)); executed 20 times by 1 test: return isNull(indexOf(name)); Executed by:
| 20 | ||||||||||||
411 | } | - | ||||||||||||
412 | - | |||||||||||||
413 | /*! | - | ||||||||||||
414 | Sets the value of field \a index to null. If the field does not exist, | - | ||||||||||||
415 | nothing happens. | - | ||||||||||||
416 | - | |||||||||||||
417 | \sa setValue() | - | ||||||||||||
418 | */ | - | ||||||||||||
419 | void QSqlRecord::setNull(int index) | - | ||||||||||||
420 | { | - | ||||||||||||
421 | if (!d->contains(index))
| 4-48 | ||||||||||||
422 | return; executed 4 times by 1 test: return; Executed by:
| 4 | ||||||||||||
423 | detach(); | - | ||||||||||||
424 | d->fields[index].clear(); | - | ||||||||||||
425 | } executed 48 times by 1 test: end of block Executed by:
| 48 | ||||||||||||
426 | - | |||||||||||||
427 | /*! | - | ||||||||||||
428 | \overload | - | ||||||||||||
429 | - | |||||||||||||
430 | Sets the value of the field called \a name to null. If the field | - | ||||||||||||
431 | does not exist, nothing happens. | - | ||||||||||||
432 | */ | - | ||||||||||||
433 | void QSqlRecord::setNull(const QString& name) | - | ||||||||||||
434 | { | - | ||||||||||||
435 | setNull(indexOf(name)); | - | ||||||||||||
436 | } executed 10 times by 1 test: end of block Executed by:
| 10 | ||||||||||||
437 | - | |||||||||||||
438 | - | |||||||||||||
439 | /*! | - | ||||||||||||
440 | Returns \c true if the record has a field called \a name and this | - | ||||||||||||
441 | field is to be generated (the default); otherwise returns \c false. | - | ||||||||||||
442 | - | |||||||||||||
443 | \sa setGenerated() | - | ||||||||||||
444 | */ | - | ||||||||||||
445 | bool QSqlRecord::isGenerated(const QString& name) const | - | ||||||||||||
446 | { | - | ||||||||||||
447 | return isGenerated(indexOf(name)); executed 16 times by 1 test: return isGenerated(indexOf(name)); Executed by:
| 16 | ||||||||||||
448 | } | - | ||||||||||||
449 | - | |||||||||||||
450 | /*! \overload | - | ||||||||||||
451 | - | |||||||||||||
452 | Returns \c true if the record has a field at position \a index and this | - | ||||||||||||
453 | field is to be generated (the default); otherwise returns \c false. | - | ||||||||||||
454 | - | |||||||||||||
455 | \sa setGenerated() | - | ||||||||||||
456 | */ | - | ||||||||||||
457 | bool QSqlRecord::isGenerated(int index) const | - | ||||||||||||
458 | { | - | ||||||||||||
459 | return d->fields.value(index).isGenerated(); executed 8263 times by 5 tests: return d->fields.value(index).isGenerated(); Executed by:
| 8263 | ||||||||||||
460 | } | - | ||||||||||||
461 | - | |||||||||||||
462 | /*! | - | ||||||||||||
463 | Returns the number of fields in the record. | - | ||||||||||||
464 | - | |||||||||||||
465 | \sa isEmpty() | - | ||||||||||||
466 | */ | - | ||||||||||||
467 | - | |||||||||||||
468 | int QSqlRecord::count() const | - | ||||||||||||
469 | { | - | ||||||||||||
470 | return d->fields.count(); executed 146492 times by 9 tests: return d->fields.count(); Executed by:
| 146492 | ||||||||||||
471 | } | - | ||||||||||||
472 | - | |||||||||||||
473 | /*! | - | ||||||||||||
474 | Sets the value of the field at position \a index to \a val. If the | - | ||||||||||||
475 | field does not exist, nothing happens. | - | ||||||||||||
476 | - | |||||||||||||
477 | \sa setNull() | - | ||||||||||||
478 | */ | - | ||||||||||||
479 | - | |||||||||||||
480 | void QSqlRecord::setValue(int index, const QVariant& val) | - | ||||||||||||
481 | { | - | ||||||||||||
482 | if (!d->contains(index))
| 2-1493 | ||||||||||||
483 | return; executed 2 times by 1 test: return; Executed by:
| 2 | ||||||||||||
484 | detach(); | - | ||||||||||||
485 | d->fields[index].setValue(val); | - | ||||||||||||
486 | } executed 1493 times by 7 tests: end of block Executed by:
| 1493 | ||||||||||||
487 | - | |||||||||||||
488 | - | |||||||||||||
489 | /*! | - | ||||||||||||
490 | \overload | - | ||||||||||||
491 | - | |||||||||||||
492 | Sets the value of the field called \a name to \a val. If the field | - | ||||||||||||
493 | does not exist, nothing happens. | - | ||||||||||||
494 | */ | - | ||||||||||||
495 | - | |||||||||||||
496 | void QSqlRecord::setValue(const QString& name, const QVariant& val) | - | ||||||||||||
497 | { | - | ||||||||||||
498 | setValue(indexOf(name), val); | - | ||||||||||||
499 | } executed 15 times by 2 tests: end of block Executed by:
| 15 | ||||||||||||
500 | - | |||||||||||||
501 | - | |||||||||||||
502 | /*! \internal | - | ||||||||||||
503 | */ | - | ||||||||||||
504 | void QSqlRecord::detach() | - | ||||||||||||
505 | { | - | ||||||||||||
506 | qAtomicDetach(d); | - | ||||||||||||
507 | } executed 133473 times by 10 tests: end of block Executed by:
| 133473 | ||||||||||||
508 | - | |||||||||||||
509 | #ifndef QT_NO_DEBUG_STREAM | - | ||||||||||||
510 | QDebug operator<<(QDebug dbg, const QSqlRecord &r) | - | ||||||||||||
511 | { | - | ||||||||||||
512 | QDebugStateSaver saver(dbg); | - | ||||||||||||
513 | dbg.nospace(); | - | ||||||||||||
514 | const int count = r.count(); | - | ||||||||||||
515 | dbg << "QSqlRecord(" << count << ')'; | - | ||||||||||||
516 | for (int i = 0; i < count; ++i) {
| 0 | ||||||||||||
517 | dbg.nospace(); | - | ||||||||||||
518 | dbg << '\n' << qSetFieldWidth(2) << right << i << left << qSetFieldWidth(0) << ':'; | - | ||||||||||||
519 | dbg.space(); | - | ||||||||||||
520 | dbg << r.field(i) << r.value(i).toString(); | - | ||||||||||||
521 | } never executed: end of block | 0 | ||||||||||||
522 | return dbg; never executed: return dbg; | 0 | ||||||||||||
523 | } | - | ||||||||||||
524 | #endif | - | ||||||||||||
525 | - | |||||||||||||
526 | /*! | - | ||||||||||||
527 | \since 5.1 | - | ||||||||||||
528 | Returns a record containing the fields represented in \a keyFields set to values | - | ||||||||||||
529 | that match by field name. | - | ||||||||||||
530 | */ | - | ||||||||||||
531 | QSqlRecord QSqlRecord::keyValues(const QSqlRecord &keyFields) const | - | ||||||||||||
532 | { | - | ||||||||||||
533 | QSqlRecord retValues(keyFields); | - | ||||||||||||
534 | - | |||||||||||||
535 | for (int i = retValues.count() - 1; i >= 0; --i)
| 133-278 | ||||||||||||
536 | retValues.setValue(i, value(retValues.fieldName(i))); executed 278 times by 2 tests: retValues.setValue(i, value(retValues.fieldName(i))); Executed by:
| 278 | ||||||||||||
537 | - | |||||||||||||
538 | return retValues; executed 133 times by 2 tests: return retValues; Executed by:
| 133 | ||||||||||||
539 | } | - | ||||||||||||
540 | - | |||||||||||||
541 | QT_END_NAMESPACE | - | ||||||||||||
Source code | Switch to Preprocessed file |