diff --git a/src/sql/kernel/qsqlindex.cpp b/src/sql/kernel/qsqlindex.cpp index 25b032f336..77af6f0fb8 100644 --- a/src/sql/kernel/qsqlindex.cpp +++ b/src/sql/kernel/qsqlindex.cpp @@ -41,6 +41,25 @@ QSqlIndex::QSqlIndex(const QSqlIndex& other) { } +/*! \fn QSqlIndex::QSqlIndex(QSqlIndex &&other) + Move-constructs a new QSqlIndex from \a other. + + \note The moved-from object \a other is placed in a + partially-formed state, in which the only valid operations are + destruction and assignment of a new value. + + \since 6.6 +*/ +/*! \fn QSqlIndex& QSqlIndex::operator=(QSqlIndex &&other) + Move-assigns \a other to this QSqlIndex instance. + + \note The moved-from object \a other is placed in a + partially-formed state, in which the only valid operations are + destruction and assignment of a new value. + + \since 6.6 +*/ + /*! Sets the index equal to \a other. */ @@ -54,6 +73,7 @@ QSqlIndex& QSqlIndex::operator=(const QSqlIndex& other) return *this; } + /*! Destroys the object and frees any allocated resources. */ diff --git a/src/sql/kernel/qsqlindex.h b/src/sql/kernel/qsqlindex.h index 08ef14b614..67eeb2a9e0 100644 --- a/src/sql/kernel/qsqlindex.h +++ b/src/sql/kernel/qsqlindex.h @@ -17,8 +17,11 @@ class Q_SQL_EXPORT QSqlIndex : public QSqlRecord public: explicit QSqlIndex(const QString &cursorName = QString(), const QString &name = QString()); QSqlIndex(const QSqlIndex &other); + QSqlIndex(QSqlIndex &&other) noexcept = default; ~QSqlIndex(); QSqlIndex &operator=(const QSqlIndex &other); + QSqlIndex &operator=(QSqlIndex &&other) = default; + void setCursorName(const QString &cursorName); inline QString cursorName() const { return cursor; } void setName(const QString& name); @@ -32,6 +35,7 @@ public: private: QString createField(int i, const QString& prefix, bool verbose) const; + // ### Qt7: move to d-ptr QString cursor; QString nm; QList sorts; diff --git a/tests/auto/sql/kernel/CMakeLists.txt b/tests/auto/sql/kernel/CMakeLists.txt index 7af31a24da..0a2b5dfd42 100644 --- a/tests/auto/sql/kernel/CMakeLists.txt +++ b/tests/auto/sql/kernel/CMakeLists.txt @@ -5,6 +5,7 @@ add_subdirectory(qsqlfield) add_subdirectory(qsqldatabase) add_subdirectory(qsqlerror) add_subdirectory(qsqldriver) +add_subdirectory(qsqlindex) add_subdirectory(qsqlquery) add_subdirectory(qsqlrecord) add_subdirectory(qsqlthread) diff --git a/tests/auto/sql/kernel/qsqlindex/CMakeLists.txt b/tests/auto/sql/kernel/qsqlindex/CMakeLists.txt new file mode 100644 index 0000000000..6752e9764d --- /dev/null +++ b/tests/auto/sql/kernel/qsqlindex/CMakeLists.txt @@ -0,0 +1,15 @@ +# Copyright (C) 2023 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qsqlindex Test: +##################################################################### + +qt_internal_add_test(tst_qsqlindex + SOURCES + tst_qsqlindex.cpp + LIBRARIES + Qt::CorePrivate + Qt::Sql + Qt::SqlPrivate +) diff --git a/tests/auto/sql/kernel/qsqlindex/tst_qsqlindex.cpp b/tests/auto/sql/kernel/qsqlindex/tst_qsqlindex.cpp new file mode 100644 index 0000000000..3c3604f5da --- /dev/null +++ b/tests/auto/sql/kernel/qsqlindex/tst_qsqlindex.cpp @@ -0,0 +1,126 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +#include +#include + +#include +#include + +#include + +#include "../qsqldatabase/tst_databases.h" + +using namespace Qt::StringLiterals; + +QString qtest; + +class tst_QSqlIndex : public QObject +{ + Q_OBJECT + +public: + tst_QSqlIndex(); + +private slots: + void construction_data(); + void construction(); + void assignment_data(); + void assignment(); + void basicFunctions(); +}; + +tst_QSqlIndex::tst_QSqlIndex() +{ +} + +void tst_QSqlIndex::construction_data() +{ + QTest::addColumn("sqlIndex"); + QTest::addColumn("cursorName"); + QTest::addColumn("name"); + + const QString cursorName("cusorName"_L1); + const QString name("name"_L1); + QSqlIndex sqlIndex(cursorName, name); + QTest::newRow("ctor1") << QSqlIndex() << QString() << QString(); + QTest::newRow("ctor2") << sqlIndex << cursorName << name; + QTest::newRow("copy ctor") << QSqlIndex(sqlIndex) << cursorName << name; + QTest::newRow("move ctor") << QSqlIndex(std::move(sqlIndex)) << cursorName << name; +} + +void tst_QSqlIndex::construction() +{ + QFETCH(QSqlIndex, sqlIndex); + QFETCH(QString, cursorName); + QFETCH(QString, name); + + QCOMPARE(sqlIndex.cursorName(), cursorName); + QCOMPARE(sqlIndex.name(), name); + QCOMPARE(sqlIndex.isDescending(0), false); + QCOMPARE(sqlIndex.count(), 0); +} + +void tst_QSqlIndex::assignment_data() +{ + QTest::addColumn("sqlIndex"); + QTest::addColumn("cursorName"); + QTest::addColumn("name"); + + const QString cursorName("cusorName"_L1); + const QString name("name"_L1); + QSqlIndex sqlIndex(cursorName, name); + QSqlIndex sqlIndex1 = sqlIndex; + QSqlIndex sqlIndex2 = std::move(sqlIndex); + sqlIndex = std::move(sqlIndex2); + QTest::newRow("copy assignment") << sqlIndex1 << cursorName << name; + QTest::newRow("move assignment") << sqlIndex << cursorName << name; +} + +void tst_QSqlIndex::assignment() +{ + QFETCH(QSqlIndex, sqlIndex); + QFETCH(QString, cursorName); + QFETCH(QString, name); + + QCOMPARE(sqlIndex.cursorName(), cursorName); + QCOMPARE(sqlIndex.name(), name); + QCOMPARE(sqlIndex.isDescending(0), false); + QCOMPARE(sqlIndex.count(), 0); +} + +void tst_QSqlIndex::basicFunctions() +{ + QSqlIndex sqlIndex("cursorName"_L1, "name"_L1); + const QSqlField f1("field1"_L1, QMetaType(QMetaType::UInt), "table1"_L1); + const QSqlField f2("field2"_L1, QMetaType(QMetaType::Double), "table2"_L1); + + QCOMPARE(sqlIndex.cursorName(), "cursorName"_L1); + sqlIndex.setCursorName("updatedCursorName"_L1); + QCOMPARE(sqlIndex.name(), "name"_L1); + sqlIndex.setName("updatedName"_L1); + QCOMPARE(sqlIndex.cursorName(), "updatedCursorName"_L1); + QCOMPARE(sqlIndex.name(), "updatedName"_L1); + + sqlIndex.append(f1); + QCOMPARE(sqlIndex.count(), 1); + QCOMPARE(sqlIndex.isDescending(0), false); + + sqlIndex.append(f2, true); + QCOMPARE(sqlIndex.count(), 2); + QCOMPARE(sqlIndex.isDescending(0), false); + QCOMPARE(sqlIndex.isDescending(1), true); + + sqlIndex.setDescending(0, true); + sqlIndex.setDescending(1, false); + sqlIndex.setDescending(2, true); + QCOMPARE(sqlIndex.count(), 2); + QCOMPARE(sqlIndex.isDescending(0), true); + QCOMPARE(sqlIndex.isDescending(1), false); + + QCOMPARE(sqlIndex.field(0), f1); + QCOMPARE(sqlIndex.field(1), f2); +} + +QTEST_MAIN(tst_QSqlIndex) +#include "tst_qsqlindex.moc"