QSqlDriver: deprecate one-arg notification() signal
QSqlDriver::notifcation() signal is available in two versions since Qt4 times. They are both emitted in the corresponding places which is useless. Therefore deprecate the one-arg version. [ChangeLog][QtSql][QSqlDriver] The one-arg version of QSqlDriver::notifcation() is now deprecated. Change-Id: Ie09aa0cc952f4d854c6fb617b37b9047a3194ee3 Reviewed-by: Andy Shaw <andy.shaw@qt.io>
This commit is contained in:
parent
0a70723a96
commit
aa6d7dd7ee
@ -1914,7 +1914,12 @@ void QIBaseDriver::qHandleEventNotification(void *updatedResultBuffer)
|
||||
if (counts[0]) {
|
||||
|
||||
if (eBuffer->subscriptionState == QIBaseEventBuffer::Subscribed) {
|
||||
#if QT_DEPRECATED_SINCE(5, 15)
|
||||
QT_WARNING_PUSH
|
||||
QT_WARNING_DISABLE_DEPRECATED
|
||||
emit notification(i.key());
|
||||
QT_WARNING_POP
|
||||
#endif
|
||||
emit notification(i.key(), QSqlDriver::UnknownSource, QVariant());
|
||||
}
|
||||
else if (eBuffer->subscriptionState == QIBaseEventBuffer::Starting)
|
||||
|
@ -1692,7 +1692,12 @@ void QPSQLDriver::_q_handleNotification(int)
|
||||
if (notify->extra)
|
||||
payload = d->isUtf8 ? QString::fromUtf8(notify->extra) : QString::fromLatin1(notify->extra);
|
||||
#endif
|
||||
#if QT_DEPRECATED_SINCE(5, 15)
|
||||
QT_WARNING_PUSH
|
||||
QT_WARNING_DISABLE_DEPRECATED
|
||||
emit notification(name);
|
||||
QT_WARNING_POP
|
||||
#endif
|
||||
QSqlDriver::NotificationSource source = (notify->be_pid == PQbackendPID(d->connection)) ? QSqlDriver::SelfSource : QSqlDriver::OtherSource;
|
||||
emit notification(name, source, payload);
|
||||
}
|
||||
|
@ -1044,7 +1044,12 @@ void QSQLiteDriver::handleNotification(const QString &tableName, qint64 rowid)
|
||||
{
|
||||
Q_D(const QSQLiteDriver);
|
||||
if (d->notificationid.contains(tableName)) {
|
||||
#if QT_DEPRECATED_SINCE(5, 15)
|
||||
QT_WARNING_PUSH
|
||||
QT_WARNING_DISABLE_DEPRECATED
|
||||
emit notification(tableName);
|
||||
QT_WARNING_POP
|
||||
#endif
|
||||
emit notification(tableName, QSqlDriver::UnknownSource, QVariant(rowid));
|
||||
}
|
||||
}
|
||||
|
@ -110,6 +110,9 @@ QSqlDriver::~QSqlDriver()
|
||||
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
|
||||
*/
|
||||
|
||||
/*!
|
||||
|
@ -135,7 +135,10 @@ 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:
|
||||
|
@ -2135,6 +2135,8 @@ void tst_QSqlDatabase::eventNotificationIBase()
|
||||
{
|
||||
QFETCH(QString, dbName);
|
||||
QSqlDatabase db = QSqlDatabase::database(dbName);
|
||||
if (db.driverName().compare(QLatin1String("QIBASE"), Qt::CaseInsensitive))
|
||||
QSKIP("QIBASE specific test");
|
||||
CHECK_DATABASE(db);
|
||||
|
||||
const QString procedureName(qTableName("posteventProc", __FILE__, db));
|
||||
@ -2147,13 +2149,12 @@ void tst_QSqlDatabase::eventNotificationIBase()
|
||||
q.exec(QString("DROP PROCEDURE %1").arg(procedureName));
|
||||
q.exec(QString("CREATE PROCEDURE %1\nAS BEGIN\nPOST_EVENT '%1';\nEND;").arg(procedureName));
|
||||
q.exec(QString("EXECUTE PROCEDURE %1").arg(procedureName));
|
||||
QSignalSpy spy(driver, SIGNAL(notification(QString)));
|
||||
QSignalSpy spy(driver, QOverload<const QString &, QSqlDriver::NotificationSource, const QVariant &>::of(&QSqlDriver::notification));
|
||||
db.commit(); // No notifications are posted until the transaction is committed.
|
||||
QTest::qWait(300); // Interbase needs some time to post the notification and call the driver callback.
|
||||
// This happends from another thread, and we have to process events in order for the
|
||||
// event handler in the driver to be executed and emit the notification signal.
|
||||
|
||||
QCOMPARE(spy.count(), 1);
|
||||
// Interbase needs some time to post the notification and call the driver callback.
|
||||
// This happends from another thread, and we have to process events in order for the
|
||||
// event handler in the driver to be executed and emit the notification signal.
|
||||
QTRY_COMPARE(spy.count(), 1);
|
||||
QList<QVariant> arguments = spy.takeFirst();
|
||||
QCOMPARE(arguments.at(0).toString(), procedureName);
|
||||
QVERIFY_SQL(*driver, unsubscribeFromNotification(procedureName));
|
||||
@ -2164,52 +2165,49 @@ void tst_QSqlDatabase::eventNotificationPSQL()
|
||||
{
|
||||
QFETCH(QString, dbName);
|
||||
QSqlDatabase db = QSqlDatabase::database(dbName);
|
||||
if (db.driverName().compare(QLatin1String("QPSQL"), Qt::CaseInsensitive))
|
||||
QSKIP("QPSQL specific test");
|
||||
CHECK_DATABASE(db);
|
||||
|
||||
QSqlQuery query(db);
|
||||
const auto procedureName = qTableName("posteventProc", __FILE__, db, false);
|
||||
QString payload = "payload";
|
||||
QSqlDriver &driver=*(db.driver());
|
||||
QVERIFY_SQL(driver, subscribeToNotification(procedureName));
|
||||
QSignalSpy spy(db.driver(), SIGNAL(notification(QString,QSqlDriver::NotificationSource,QVariant)));
|
||||
QSqlDriver *driver = db.driver();
|
||||
QVERIFY_SQL(*driver, subscribeToNotification(procedureName));
|
||||
QSignalSpy spy(driver, QOverload<const QString &, QSqlDriver::NotificationSource, const QVariant &>::of(&QSqlDriver::notification));
|
||||
query.exec(QString("NOTIFY \"%1\", '%2'").arg(procedureName).arg(payload));
|
||||
QCoreApplication::processEvents();
|
||||
QCOMPARE(spy.count(), 1);
|
||||
QTRY_COMPARE(spy.count(), 1);
|
||||
QList<QVariant> arguments = spy.takeFirst();
|
||||
QCOMPARE(arguments.at(0).toString(), procedureName);
|
||||
QCOMPARE(qvariant_cast<QSqlDriver::NotificationSource>(arguments.at(1)), QSqlDriver::SelfSource);
|
||||
QCOMPARE(qvariant_cast<QVariant>(arguments.at(2)).toString(), payload);
|
||||
QVERIFY_SQL(driver, unsubscribeFromNotification(procedureName));
|
||||
QVERIFY_SQL(*driver, unsubscribeFromNotification(procedureName));
|
||||
}
|
||||
|
||||
void tst_QSqlDatabase::eventNotificationSQLite()
|
||||
{
|
||||
QFETCH(QString, dbName);
|
||||
QSqlDatabase db = QSqlDatabase::database(dbName);
|
||||
CHECK_DATABASE(db);
|
||||
if (db.driverName().compare(QLatin1String("QSQLITE"), Qt::CaseInsensitive)) {
|
||||
if (db.driverName().compare(QLatin1String("QSQLITE"), Qt::CaseInsensitive))
|
||||
QSKIP("QSQLITE specific test");
|
||||
}
|
||||
CHECK_DATABASE(db);
|
||||
|
||||
const QString tableName(qTableName("sqlitnotifytest", __FILE__, db));
|
||||
const auto noEscapeTableName(qTableName("sqlitnotifytest", __FILE__, db, false));
|
||||
tst_Databases::safeDropTable(db, tableName);
|
||||
|
||||
QSignalSpy notificationSpy(db.driver(), SIGNAL(notification(QString)));
|
||||
QSignalSpy notificationSpyExt(db.driver(), SIGNAL(notification(QString,QSqlDriver::NotificationSource,QVariant)));
|
||||
QSqlDriver *driver = db.driver();
|
||||
QSignalSpy spy(driver, QOverload<const QString &, QSqlDriver::NotificationSource, const QVariant &>::of(&QSqlDriver::notification));
|
||||
QSqlQuery q(db);
|
||||
QVERIFY_SQL(q, exec("CREATE TABLE " + tableName + " (id INTEGER, realVal REAL)"));
|
||||
db.driver()->subscribeToNotification(noEscapeTableName);
|
||||
driver->subscribeToNotification(noEscapeTableName);
|
||||
QVERIFY_SQL(q, exec("INSERT INTO " + tableName + " (id, realVal) VALUES (1, 2.3)"));
|
||||
QTRY_COMPARE(notificationSpy.count(), 1);
|
||||
QTRY_COMPARE(notificationSpyExt.count(), 1);
|
||||
QList<QVariant> arguments = notificationSpy.takeFirst();
|
||||
QTRY_COMPARE(spy.count(), 1);
|
||||
QList<QVariant> arguments = spy.takeFirst();
|
||||
QCOMPARE(arguments.at(0).toString(), noEscapeTableName);
|
||||
arguments = notificationSpyExt.takeFirst();
|
||||
QCOMPARE(arguments.at(0).toString(), noEscapeTableName);
|
||||
db.driver()->unsubscribeFromNotification(noEscapeTableName);
|
||||
driver->unsubscribeFromNotification(noEscapeTableName);
|
||||
QVERIFY_SQL(q, exec("INSERT INTO " + tableName + " (id, realVal) VALUES (1, 2.3)"));
|
||||
QTRY_COMPARE(notificationSpy.count(), 0);
|
||||
QTRY_COMPARE(notificationSpyExt.count(), 0);
|
||||
QTRY_COMPARE(spy.count(), 0);
|
||||
}
|
||||
|
||||
void tst_QSqlDatabase::sqlite_bindAndFetchUInt()
|
||||
|
Loading…
x
Reference in New Issue
Block a user