Skip to content

Commit

Permalink
QSqlDriver: deprecate one-arg notification() signal
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
chehrlic committed Sep 21, 2019
1 parent 0a70723 commit aa6d7dd
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 26 deletions.
5 changes: 5 additions & 0 deletions src/plugins/sqldrivers/ibase/qsql_ibase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
5 changes: 5 additions & 0 deletions src/plugins/sqldrivers/psql/qsql_psql.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
5 changes: 5 additions & 0 deletions src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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));
}
}
Expand Down
3 changes: 3 additions & 0 deletions src/sql/kernel/qsqldriver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
*/

/*!
Expand Down
3 changes: 3 additions & 0 deletions src/sql/kernel/qsqldriver.h
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
50 changes: 24 additions & 26 deletions tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand All @@ -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));
Expand All @@ -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();
QCOMPARE(arguments.at(0).toString(), noEscapeTableName);
arguments = notificationSpyExt.takeFirst();
QTRY_COMPARE(spy.count(), 1);
QList<QVariant> arguments = spy.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()
Expand Down

0 comments on commit aa6d7dd

Please sign in to comment.