diff options
author | Torben Dannhauer <torben@dannhauer.info> | 2012-01-24 21:27:36 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-01 16:25:15 +0100 |
commit | 5caa75f6654d1475dcd2d118e240b683a617d735 (patch) | |
tree | 5350ab826c5e361395cc0536dcc0b50f21d76e66 /src/sql | |
parent | 84f4b8149974fbc9f7c43c3a83f3ac76d7dfab15 (diff) |
SQL driver implementation to signal notification sources
Implements the new notification signal in all QSql drivers which use notifcation.
In qt5 only ibase and psql have a notification implementation.
PSQL differentiates correctly between 'SelfSource' and 'OtherSource' whereas
ibase only signals 'UnknownSource' as a default implementation.
Change-Id: Ifcaa139b7a980ed852cf817b3f93284609360ca7
Reviewed-by: Torben Dannhauer <torben@dannhauer.info>
Reviewed-by: Yunqiao Yin <charles.yin@nokia.com>
Diffstat (limited to 'src/sql')
-rw-r--r-- | src/sql/drivers/ibase/qsql_ibase.cpp | 4 | ||||
-rw-r--r-- | src/sql/drivers/psql/qsql_psql.cpp | 7 | ||||
-rw-r--r-- | src/sql/kernel/qsqldriver.cpp | 17 | ||||
-rw-r--r-- | src/sql/kernel/qsqldriver.h | 2 |
4 files changed, 24 insertions, 6 deletions
diff --git a/src/sql/drivers/ibase/qsql_ibase.cpp b/src/sql/drivers/ibase/qsql_ibase.cpp index 7a98803efc..1109dfd62a 100644 --- a/src/sql/drivers/ibase/qsql_ibase.cpp +++ b/src/sql/drivers/ibase/qsql_ibase.cpp @@ -1845,8 +1845,10 @@ void QIBaseDriver::qHandleEventNotification(void *updatedResultBuffer) isc_event_counts(counts, eBuffer->bufferLength, eBuffer->eventBuffer, eBuffer->resultBuffer); if (counts[0]) { - if (eBuffer->subscriptionState == QIBaseEventBuffer::Subscribed) + if (eBuffer->subscriptionState == QIBaseEventBuffer::Subscribed) { emit notification(i.key()); + emit notification(i.key(), QSqlDriver::UnknownSource); + } else if (eBuffer->subscriptionState == QIBaseEventBuffer::Starting) eBuffer->subscriptionState = QIBaseEventBuffer::Subscribed; diff --git a/src/sql/drivers/psql/qsql_psql.cpp b/src/sql/drivers/psql/qsql_psql.cpp index 8985184e13..e3533581ba 100644 --- a/src/sql/drivers/psql/qsql_psql.cpp +++ b/src/sql/drivers/psql/qsql_psql.cpp @@ -1370,8 +1370,13 @@ void QPSQLDriver::_q_handleNotification(int) PGnotify *notify = 0; while((notify = PQnotifies(d->connection)) != 0) { QString name(QLatin1String(notify->relname)); - if (d->seid.contains(name)) + if (d->seid.contains(name)) { emit notification(name); + if (notify->be_pid == PQbackendPID(d->connection)) + emit notification(name, QSqlDriver::SelfSource); + else + emit notification(name, QSqlDriver::OtherSource); + } else qWarning("QPSQLDriver: received notification for '%s' which isn't subscribed to.", qPrintable(name)); diff --git a/src/sql/kernel/qsqldriver.cpp b/src/sql/kernel/qsqldriver.cpp index 130eec0239..861cd4ad0f 100644 --- a/src/sql/kernel/qsqldriver.cpp +++ b/src/sql/kernel/qsqldriver.cpp @@ -131,6 +131,17 @@ QSqlDriver::~QSqlDriver() */ /*! + \since 5.0 + + \fn QSqlDriver::notification(const QString &name, NotificationSource source) + + This signal is emitted when the database posts an event notification + that the driver subscribes to. \a name identifies the event notification, \a source indicates the signal source. + + \sa subscribeToNotification() +*/ + +/*! \fn bool QSqlDriver::open(const QString &db, const QString &user, const QString& password, const QString &host, int port, const QString &options) @@ -242,9 +253,9 @@ bool QSqlDriver::isOpenError() const This enum contains a list of SQL notification sources. - \value Unknown The notification source is unknown - \value Self The notification source is the own connection - \value Other The notification source is another connection + \value UnknownSource The notification source is unknown + \value SelfSource The notification source is this connection + \value OtherSource The notification source is another connection */ /*! diff --git a/src/sql/kernel/qsqldriver.h b/src/sql/kernel/qsqldriver.h index cd5048243d..5fd74411db 100644 --- a/src/sql/kernel/qsqldriver.h +++ b/src/sql/kernel/qsqldriver.h @@ -78,7 +78,7 @@ public: enum IdentifierType { FieldName, TableName }; - enum NotificationSource { Unknown, Self, Other }; + enum NotificationSource { UnknownSource, SelfSource, OtherSource }; explicit QSqlDriver(QObject *parent=0); ~QSqlDriver(); |