diff options
Diffstat (limited to 'src/sql/kernel')
-rw-r--r-- | src/sql/kernel/qsqlcachedresult.cpp | 8 | ||||
-rw-r--r-- | src/sql/kernel/qsqlcachedresult_p.h | 9 | ||||
-rw-r--r-- | src/sql/kernel/qsqldatabase.cpp | 23 | ||||
-rw-r--r-- | src/sql/kernel/qsqldriver.cpp | 41 | ||||
-rw-r--r-- | src/sql/kernel/qsqldriver.h | 16 | ||||
-rw-r--r-- | src/sql/kernel/qsqldriver_p.h | 17 | ||||
-rw-r--r-- | src/sql/kernel/qsqlfield.cpp | 11 | ||||
-rw-r--r-- | src/sql/kernel/qsqlfield.h | 2 | ||||
-rw-r--r-- | src/sql/kernel/qsqlindex.cpp | 3 | ||||
-rw-r--r-- | src/sql/kernel/qsqlquery.cpp | 3 | ||||
-rw-r--r-- | src/sql/kernel/qsqlresult.cpp | 4 | ||||
-rw-r--r-- | src/sql/kernel/qsqlresult_p.h | 35 |
12 files changed, 60 insertions, 112 deletions
diff --git a/src/sql/kernel/qsqlcachedresult.cpp b/src/sql/kernel/qsqlcachedresult.cpp index c335d7d8fe..1e76154f82 100644 --- a/src/sql/kernel/qsqlcachedresult.cpp +++ b/src/sql/kernel/qsqlcachedresult.cpp @@ -60,14 +60,6 @@ QT_BEGIN_NAMESPACE static const uint initial_cache_size = 128; -QSqlCachedResultPrivate::QSqlCachedResultPrivate(QSqlCachedResult *q, const QSqlDriver *drv) - : QSqlResultPrivate(q, drv), - rowCacheEnd(0), - colCount(0), - atEnd(false) -{ -} - void QSqlCachedResultPrivate::cleanup() { cache.clear(); diff --git a/src/sql/kernel/qsqlcachedresult_p.h b/src/sql/kernel/qsqlcachedresult_p.h index 543a902554..1bca1fd090 100644 --- a/src/sql/kernel/qsqlcachedresult_p.h +++ b/src/sql/kernel/qsqlcachedresult_p.h @@ -101,7 +101,8 @@ class Q_SQL_EXPORT QSqlCachedResultPrivate: public QSqlResultPrivate Q_DECLARE_PUBLIC(QSqlCachedResult) public: - QSqlCachedResultPrivate(QSqlCachedResult *q, const QSqlDriver *drv); + using QSqlResultPrivate::QSqlResultPrivate; + bool canSeek(int i) const; inline int cacheCount() const; void init(int count, bool fo); @@ -110,9 +111,9 @@ public: void revertLast(); QSqlCachedResult::ValueCache cache; - int rowCacheEnd; - int colCount; - bool atEnd; + int rowCacheEnd = 0; + int colCount = 0; + bool atEnd = false; }; QT_END_NAMESPACE diff --git a/src/sql/kernel/qsqldatabase.cpp b/src/sql/kernel/qsqldatabase.cpp index 01726d79ef..094943ca31 100644 --- a/src/sql/kernel/qsqldatabase.cpp +++ b/src/sql/kernel/qsqldatabase.cpp @@ -84,7 +84,7 @@ Q_GLOBAL_STATIC(QConnectionDict, dbDict) class QSqlDatabasePrivate { public: - QSqlDatabasePrivate(QSqlDatabase *d, QSqlDriver *dr = 0): + QSqlDatabasePrivate(QSqlDatabase *d, QSqlDriver *dr = nullptr): ref(1), q(d), driver(dr), @@ -178,7 +178,7 @@ DriverDict &QSqlDatabasePrivate::driverDict() QSqlDatabasePrivate *QSqlDatabasePrivate::shared_null() { static QSqlNullDriver dr; - static QSqlDatabasePrivate n(NULL, &dr); + static QSqlDatabasePrivate n(nullptr, &dr); return &n; } @@ -619,8 +619,6 @@ QStringList QSqlDatabase::connectionNames() \row \li QODBC \li ODBC Driver (includes Microsoft SQL Server) \row \li QPSQL \li PostgreSQL Driver \row \li QSQLITE \li SQLite version 3 or above - \row \li QSQLITE2 \li SQLite version 2 - \row \li QTDS \li Sybase Adaptive Server \endtable Additional third party drivers, including your own custom @@ -702,7 +700,7 @@ void QSqlDatabasePrivate::init(const QString &type) qWarning("QSqlDatabase: %s driver not loaded", type.toLatin1().data()); qWarning("QSqlDatabase: available drivers: %s", QSqlDatabase::drivers().join(QLatin1Char(' ')).toLatin1().data()); - if (QCoreApplication::instance() == 0) + if (QCoreApplication::instance() == nullptr) qWarning("QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins"); driver = shared_null()->driver; } @@ -1185,7 +1183,7 @@ QSqlRecord QSqlDatabase::record(const QString& tablename) const \li service \endlist - \header \li DB2 \li OCI \li TDS + \header \li DB2 \li OCI \row \li @@ -1200,9 +1198,6 @@ QSqlRecord QSqlDatabase::record(const QString& tablename) const \li OCI_ATTR_PREFETCH_MEMORY \endlist - \li - \e none - \header \li SQLite \li Interbase \row @@ -1327,11 +1322,6 @@ bool QSqlDatabase::isDriverAvailable(const QString& name) \li SQLHANDLE environment, SQLHANDLE connection \li \c qsql_db2.cpp \row - \li QTDS - \li QTDSDriver - \li LOGINREC *loginRecord, DBPROCESS *dbProcess, const QString &hostName - \li \c qsql_tds.cpp - \row \li QSQLITE \li QSQLiteDriver \li sqlite *connection @@ -1343,11 +1333,6 @@ bool QSqlDatabase::isDriverAvailable(const QString& name) \li \c qsql_ibase.cpp \endtable - The host name (or service name) is needed when constructing the - QTDSDriver for creating new connections for internal queries. This - is to prevent blocking when several QSqlQuery objects are used - simultaneously. - \warning Adding a database connection with the same connection name as an existing connection, causes the existing connection to be replaced by the new one. diff --git a/src/sql/kernel/qsqldriver.cpp b/src/sql/kernel/qsqldriver.cpp index e0ddc4ca84..8753352617 100644 --- a/src/sql/kernel/qsqldriver.cpp +++ b/src/sql/kernel/qsqldriver.cpp @@ -51,11 +51,10 @@ QT_BEGIN_NAMESPACE static QString prepareIdentifier(const QString &identifier, QSqlDriver::IdentifierType type, const QSqlDriver *driver) { - Q_ASSERT( driver != NULL ); + Q_ASSERT(driver != nullptr); QString ret = identifier; - if (!driver->isIdentifierEscaped(identifier, type)) { + if (!driver->isIdentifierEscaped(identifier, type)) ret = driver->escapeIdentifier(identifier, type); - } return ret; } @@ -102,20 +101,6 @@ QSqlDriver::~QSqlDriver() } /*! - \since 4.4 - - \fn QSqlDriver::notification(const QString &name) - - This signal is emitted when the database posts an event notification - that the driver subscribes to. \a name identifies the event notification. - - \sa subscribeToNotification() - - \obsolete use QSqlDriver::notification(const QString &name, QSqlDriver::NotificationSource source, const QVariant &payload) - instead -*/ - -/*! \since 5.0 \fn QSqlDriver::notification(const QString &name, QSqlDriver::NotificationSource source, const QVariant & payload) @@ -612,30 +597,30 @@ QString QSqlDriver::formatValue(const QSqlField &field, bool trimStrings) const if (field.isNull()) r = nullTxt; else { - switch (field.type()) { - case QVariant::Int: - case QVariant::UInt: - if (field.value().type() == QVariant::Bool) + switch (+field.type()) { + case QMetaType::Int: + case QMetaType::UInt: + if (field.value().userType() == QMetaType::Bool) r = field.value().toBool() ? QLatin1String("1") : QLatin1String("0"); else r = field.value().toString(); break; #if QT_CONFIG(datestring) - case QVariant::Date: + case QMetaType::QDate: if (field.value().toDate().isValid()) r = QLatin1Char('\'') + field.value().toDate().toString(Qt::ISODate) + QLatin1Char('\''); else r = nullTxt; break; - case QVariant::Time: + case QMetaType::QTime: if (field.value().toTime().isValid()) r = QLatin1Char('\'') + field.value().toTime().toString(Qt::ISODate) + QLatin1Char('\''); else r = nullTxt; break; - case QVariant::DateTime: + case QMetaType::QDateTime: if (field.value().toDateTime().isValid()) r = QLatin1Char('\'') + field.value().toDateTime().toString(Qt::ISODate) + QLatin1Char('\''); @@ -643,8 +628,8 @@ QString QSqlDriver::formatValue(const QSqlField &field, bool trimStrings) const r = nullTxt; break; #endif - case QVariant::String: - case QVariant::Char: + case QMetaType::QString: + case QMetaType::QChar: { QString result = field.value().toString(); if (trimStrings) { @@ -658,10 +643,10 @@ QString QSqlDriver::formatValue(const QSqlField &field, bool trimStrings) const r = QLatin1Char('\'') + result + QLatin1Char('\''); break; } - case QVariant::Bool: + case QMetaType::Bool: r = QString::number(field.value().toBool()); break; - case QVariant::ByteArray : { + case QMetaType::QByteArray : { if (hasFeature(BLOB)) { QByteArray ba = field.value().toByteArray(); QString res; diff --git a/src/sql/kernel/qsqldriver.h b/src/sql/kernel/qsqldriver.h index ca9f7dc51e..31de63be15 100644 --- a/src/sql/kernel/qsqldriver.h +++ b/src/sql/kernel/qsqldriver.h @@ -100,7 +100,7 @@ public: virtual QStringList tables(QSql::TableType tableType) const; virtual QSqlIndex primaryIndex(const QString &tableName) const; virtual QSqlRecord record(const QString &tableName) const; - virtual QString formatValue(const QSqlField& field, bool trimStrings = false) const; + virtual QString formatValue(const QSqlField &field, bool trimStrings = false) const; virtual QString escapeIdentifier(const QString &identifier, IdentifierType type) const; virtual QString sqlStatement(StatementType type, const QString &tableName, @@ -113,12 +113,12 @@ public: virtual void close() = 0; virtual QSqlResult *createResult() const = 0; - virtual bool open(const QString& db, - const QString& user = QString(), - const QString& password = QString(), - const QString& host = QString(), + virtual bool open(const QString &db, + const QString &user = QString(), + const QString &password = QString(), + const QString &host = QString(), int port = -1, - const QString& connOpts = QString()) = 0; + const QString &connOpts = QString()) = 0; virtual bool subscribeToNotification(const QString &name); virtual bool unsubscribeFromNotification(const QString &name); virtual QStringList subscribedToNotifications() const; @@ -135,10 +135,6 @@ public Q_SLOTS: virtual bool cancelQuery(); Q_SIGNALS: -#if QT_DEPRECATED_SINCE(5, 15) - QT_DEPRECATED_X("Use the 3-args version of notification() instead.") - void notification(const QString &name); -#endif void notification(const QString &name, QSqlDriver::NotificationSource source, const QVariant &payload); protected: diff --git a/src/sql/kernel/qsqldriver_p.h b/src/sql/kernel/qsqldriver_p.h index c8ec961124..614fbf69a1 100644 --- a/src/sql/kernel/qsqldriver_p.h +++ b/src/sql/kernel/qsqldriver_p.h @@ -63,19 +63,16 @@ class QSqlDriverPrivate : public QObjectPrivate Q_DECLARE_PUBLIC(QSqlDriver) public: - QSqlDriverPrivate() - : QObjectPrivate(), - isOpen(false), - isOpenError(false), - precisionPolicy(QSql::LowPrecisionDouble), - dbmsType(QSqlDriver::UnknownDbms) - { } + QSqlDriverPrivate(QSqlDriver::DbmsType dbmstype = QSqlDriver::UnknownDbms) + : QObjectPrivate() + , dbmsType(dbmstype) + {} - uint isOpen; - uint isOpenError; QSqlError error; - QSql::NumericalPrecisionPolicy precisionPolicy; + QSql::NumericalPrecisionPolicy precisionPolicy = QSql::LowPrecisionDouble; QSqlDriver::DbmsType dbmsType; + bool isOpen = false; + bool isOpenError = false; }; QT_END_NAMESPACE diff --git a/src/sql/kernel/qsqlfield.cpp b/src/sql/kernel/qsqlfield.cpp index 5a6d173b3b..86a22bae10 100644 --- a/src/sql/kernel/qsqlfield.cpp +++ b/src/sql/kernel/qsqlfield.cpp @@ -48,7 +48,7 @@ class QSqlFieldPrivate public: QSqlFieldPrivate(const QString &name, QVariant::Type type, const QString &tableName) : - ref(1), nm(name), table(tableName), def(QVariant()), type(type), + ref(1), nm(name), table(tableName), def(QVariant()), type(QMetaType::Type(type)), req(QSqlField::Unknown), len(-1), prec(-1), tp(-1), ro(false), gen(true), autoval(false) {} @@ -86,7 +86,7 @@ public: QString nm; QString table; QVariant def; - QVariant::Type type; + QMetaType::Type type; QSqlField::RequiredStatus req; int len; int prec; @@ -399,7 +399,7 @@ QString QSqlField::name() const */ QVariant::Type QSqlField::type() const { - return d->type; + return QVariant::Type(d->type); } /*! @@ -411,12 +411,11 @@ QVariant::Type QSqlField::type() const void QSqlField::setType(QVariant::Type type) { detach(); - d->type = type; + d->type = QMetaType::Type(type); if (!val.isValid()) val = QVariant(type); } - /*! Returns \c true if the field's value is read-only; otherwise returns false. @@ -526,7 +525,7 @@ bool QSqlField::isGenerated() const */ bool QSqlField::isValid() const { - return d->type != QVariant::Invalid; + return d->type != QMetaType::UnknownType; } #ifndef QT_NO_DEBUG_STREAM diff --git a/src/sql/kernel/qsqlfield.h b/src/sql/kernel/qsqlfield.h index 8650ba8715..892420d26e 100644 --- a/src/sql/kernel/qsqlfield.h +++ b/src/sql/kernel/qsqlfield.h @@ -55,7 +55,7 @@ public: enum RequiredStatus { Unknown = -1, Optional = 0, Required = 1 }; explicit QSqlField(const QString& fieldName = QString(), - QVariant::Type type = QVariant::Invalid); + QVariant::Type type = {}); QSqlField(const QString &fieldName, QVariant::Type type, const QString &tableName); diff --git a/src/sql/kernel/qsqlindex.cpp b/src/sql/kernel/qsqlindex.cpp index 60b0ef6965..5781f24b5c 100644 --- a/src/sql/kernel/qsqlindex.cpp +++ b/src/sql/kernel/qsqlindex.cpp @@ -44,9 +44,6 @@ QT_BEGIN_NAMESPACE -// ### Qt 6: remove the static assertion, the 'sorts' field was changed from QList to QVector in Qt 5.6 -Q_STATIC_ASSERT((sizeof(QList<bool>) == sizeof(QVector<bool>))); - /*! \class QSqlIndex \brief The QSqlIndex class provides functions to manipulate and diff --git a/src/sql/kernel/qsqlquery.cpp b/src/sql/kernel/qsqlquery.cpp index 8947ed1084..ce6c997919 100644 --- a/src/sql/kernel/qsqlquery.cpp +++ b/src/sql/kernel/qsqlquery.cpp @@ -182,6 +182,9 @@ QSqlQueryPrivate::~QSqlQueryPrivate() You can retrieve the values of all the fields in a single variable (a map) using boundValues(). + \note Not all SQL operations support binding values. Refer to your database + system's documentation to check their availability. + \section1 Approaches to Binding Values Below we present the same example using each of the four diff --git a/src/sql/kernel/qsqlresult.cpp b/src/sql/kernel/qsqlresult.cpp index cc91c6d0ed..a41b3d8424 100644 --- a/src/sql/kernel/qsqlresult.cpp +++ b/src/sql/kernel/qsqlresult.cpp @@ -645,7 +645,7 @@ bool QSqlResult::exec() for (i = d->holders.count() - 1; i >= 0; --i) { holder = d->holders.at(i).holderName; val = d->values.value(d->indexes.value(holder).value(0,-1)); - QSqlField f(QLatin1String(""), val.type()); + QSqlField f(QLatin1String(""), QVariant::Type(val.userType())); f.setValue(val); query = query.replace(d->holders.at(i).holderPos, holder.length(), driver()->formatValue(f)); @@ -659,7 +659,7 @@ bool QSqlResult::exec() if (i == -1) continue; QVariant var = d->values.value(idx); - QSqlField f(QLatin1String(""), var.type()); + QSqlField f(QLatin1String(""), QVariant::Type(var.userType())); if (var.isNull()) f.clear(); else diff --git a/src/sql/kernel/qsqlresult_p.h b/src/sql/kernel/qsqlresult_p.h index f0816a7fb5..3b9697046d 100644 --- a/src/sql/kernel/qsqlresult_p.h +++ b/src/sql/kernel/qsqlresult_p.h @@ -79,16 +79,9 @@ class Q_SQL_EXPORT QSqlResultPrivate public: QSqlResultPrivate(QSqlResult *q, const QSqlDriver *drv) : q_ptr(q), - sqldriver(const_cast<QSqlDriver*>(drv)), - idx(QSql::BeforeFirstRow), - active(false), - isSel(false), - forwardOnly(false), - precisionPolicy(QSql::LowPrecisionDouble), - bindCount(0), - binds(QSqlResult::PositionalBinding) + sqldriver(const_cast<QSqlDriver *>(drv)) { } - virtual ~QSqlResultPrivate() { } + virtual ~QSqlResultPrivate() = default; void clearValues() { @@ -111,7 +104,7 @@ public: void clear() { clearValues(); - clearIndex();; + clearIndex(); } virtual QString fieldSerial(int) const; @@ -119,27 +112,27 @@ public: QString namedToPositionalBinding(const QString &query); QString holderAt(int index) const; - QSqlResult *q_ptr; + QSqlResult *q_ptr = nullptr; QPointer<QSqlDriver> sqldriver; - int idx; QString sql; - bool active; - bool isSel; QSqlError error; - bool forwardOnly; - QSql::NumericalPrecisionPolicy precisionPolicy; - - int bindCount; - QSqlResult::BindingSyntax binds; QString executedQuery; QHash<int, QSql::ParamType> types; QVector<QVariant> values; - typedef QHash<QString, QVector<int> > IndexMap; + using IndexMap = QHash<QString, QVector<int> >; IndexMap indexes; - typedef QVector<QHolder> QHolderVector; + using QHolderVector = QVector<QHolder>; QHolderVector holders; + + QSqlResult::BindingSyntax binds = QSqlResult::PositionalBinding; + QSql::NumericalPrecisionPolicy precisionPolicy = QSql::LowPrecisionDouble; + int idx = QSql::BeforeFirstRow; + int bindCount = 0; + bool active = false; + bool isSel = false; + bool forwardOnly = false; }; QT_END_NAMESPACE |