summaryrefslogtreecommitdiffstats
path: root/src/sql
diff options
context:
space:
mode:
authorTorben Dannhauer <torben@dannhauer.info>2012-01-24 21:27:36 +0100
committerQt by Nokia <qt-info@nokia.com>2012-02-01 16:25:15 +0100
commit5caa75f6654d1475dcd2d118e240b683a617d735 (patch)
tree5350ab826c5e361395cc0536dcc0b50f21d76e66 /src/sql
parent84f4b8149974fbc9f7c43c3a83f3ac76d7dfab15 (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.cpp4
-rw-r--r--src/sql/drivers/psql/qsql_psql.cpp7
-rw-r--r--src/sql/kernel/qsqldriver.cpp17
-rw-r--r--src/sql/kernel/qsqldriver.h2
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();