378bool QSqlQuery::exec(
const QString& query)
385 qCWarning(lcSqlQuery,
"QSqlQuery::exec: called before driver has been set up");
388 if (d->ref.loadRelaxed() != 1) {
389 bool fo = isForwardOnly();
390 *
this = QSqlQuery(driver()->createResult());
391 d->sqlResult->setNumericalPrecisionPolicy(d->sqlResult->numericalPrecisionPolicy());
394 d->sqlResult->clear();
395 d->sqlResult->setActive(
false);
396 d->sqlResult->setLastError(QSqlError());
397 d->sqlResult->setAt(QSql::BeforeFirstRow);
398 d->sqlResult->setNumericalPrecisionPolicy(d->sqlResult->numericalPrecisionPolicy());
400 d->sqlResult->setQuery(query.trimmed());
401 if (!driver()->isOpen() || driver()->isOpenError()) {
402 qCWarning(lcSqlQuery,
"QSqlQuery::exec: database not open");
405 if (query.isEmpty()) {
406 qCWarning(lcSqlQuery,
"QSqlQuery::exec: empty query");
410 bool retval = d->sqlResult->reset(query);
412 qCDebug(lcSqlQuery()).nospace() <<
"Executed query (" << t.elapsed() <<
"ms, "
413 << d->sqlResult->size()
414 <<
" results, " << d->sqlResult->numRowsAffected()
415 <<
" affected): " << d->sqlResult->lastQuery();
570bool QSqlQuery::seek(
int index,
bool relative)
572 if (!isSelect() || !isActive())
577 d->sqlResult->setAt(QSql::BeforeFirstRow);
583 case QSql::BeforeFirstRow:
585 actualIdx = index - 1;
590 case QSql::AfterLastRow:
592 d->sqlResult->fetchLast();
593 actualIdx = at() + index + 1;
599 if ((at() + index) < 0) {
600 d->sqlResult->setAt(QSql::BeforeFirstRow);
603 actualIdx = at() + index;
608 if (isForwardOnly() && actualIdx < at()) {
609 qCWarning(lcSqlQuery,
"QSqlQuery::seek: cannot seek backwards in a forward only query");
612 if (actualIdx == (at() + 1) && at() != QSql::BeforeFirstRow) {
613 if (!d->sqlResult->fetchNext()) {
614 d->sqlResult->setAt(QSql::AfterLastRow);
619 if (actualIdx == (at() - 1)) {
620 if (!d->sqlResult->fetchPrevious()) {
621 d->sqlResult->setAt(QSql::BeforeFirstRow);
626 if (!d->sqlResult->fetch(actualIdx)) {
627 d->sqlResult->setAt(QSql::AfterLastRow);
934QSqlRecord QSqlQuery::record()
const
936 QSqlRecord rec = d->sqlResult->record();
939 for (qsizetype i = 0; i < rec.count(); ++i)
940 rec.setValue(i, value(i));
981bool QSqlQuery::prepare(
const QString& query)
983 if (d->ref.loadRelaxed() != 1) {
984 bool fo = isForwardOnly();
985 *
this = QSqlQuery(driver()->createResult());
987 d->sqlResult->setNumericalPrecisionPolicy(d->sqlResult->numericalPrecisionPolicy());
989 d->sqlResult->setActive(
false);
990 d->sqlResult->setLastError(QSqlError());
991 d->sqlResult->setAt(QSql::BeforeFirstRow);
992 d->sqlResult->setNumericalPrecisionPolicy(d->sqlResult->numericalPrecisionPolicy());
995 qCWarning(lcSqlQuery,
"QSqlQuery::prepare: no driver");
998 if (!driver()->isOpen() || driver()->isOpenError()) {
999 qCWarning(lcSqlQuery,
"QSqlQuery::prepare: database not open");
1002 if (query.isEmpty()) {
1003 qCWarning(lcSqlQuery,
"QSqlQuery::prepare: empty query");
1007 qCDebug(lcSqlQuery,
"\n QSqlQuery::prepare: %ls", qUtf16Printable(query));
1009 return d->sqlResult->savePrepare(query);
1021bool QSqlQuery::exec()
1027 d->sqlResult->resetBindCount();
1029 if (d->sqlResult->lastError().isValid())
1030 d->sqlResult->setLastError(QSqlError());
1032 bool retval = d->sqlResult->exec();
1034 qCDebug(lcSqlQuery).nospace() <<
"Executed prepared query (" << t.elapsed() <<
"ms, "
1035 << d->sqlResult->size() <<
" results, " << d->sqlResult->numRowsAffected()
1036 <<
" affected): " << d->sqlResult->lastQuery();