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