From 932001350b8e18074a4fc291fe98e910b6d96b5a Mon Sep 17 00:00:00 2001 From: Kris Jurka Date: Tue, 3 Feb 2004 05:43:24 +0000 Subject: [PATCH] V3 NotificationResonse messages were trying to be received as V2 messages. Also the PID was being read in the wrong byte order. Finally add a test case for listen/notify. Per report from Hans Nather. --- .../org/postgresql/core/QueryExecutor.java | 8 ++-- .../org/postgresql/fastpath/Fastpath.java | 9 ++-- .../postgresql/test/jdbc2/Jdbc2TestSuite.java | 1 + .../org/postgresql/test/jdbc2/NotifyTest.java | 43 +++++++++++++++++++ 4 files changed, 55 insertions(+), 6 deletions(-) create mode 100644 src/interfaces/jdbc/org/postgresql/test/jdbc2/NotifyTest.java diff --git a/src/interfaces/jdbc/org/postgresql/core/QueryExecutor.java b/src/interfaces/jdbc/org/postgresql/core/QueryExecutor.java index b7ea0ef2b6d..624a9fc1d62 100644 --- a/src/interfaces/jdbc/org/postgresql/core/QueryExecutor.java +++ b/src/interfaces/jdbc/org/postgresql/core/QueryExecutor.java @@ -6,7 +6,7 @@ * Copyright (c) 2003, PostgreSQL Global Development Group * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/core/Attic/QueryExecutor.java,v 1.27 2003/09/17 08:21:36 barry Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/core/Attic/QueryExecutor.java,v 1.27.2.1 2004/02/03 05:43:22 jurka Exp $ * *------------------------------------------------------------------------- */ @@ -129,8 +129,10 @@ public class QueryExecutor switch (c) { case 'A': // Asynchronous Notify - int pid = pgStream.ReceiveInteger(4); + int msglen = pgStream.ReceiveIntegerR(4); + int pid = pgStream.ReceiveIntegerR(4); String msg = pgStream.ReceiveString(connection.getEncoding()); + String param = pgStream.ReceiveString(connection.getEncoding()); connection.addNotification(new org.postgresql.core.Notification(msg, pid)); break; case 'B': // Binary Data Transfer @@ -237,7 +239,7 @@ public class QueryExecutor switch (c) { case 'A': // Asynchronous Notify - int pid = pgStream.ReceiveInteger(4); + int pid = pgStream.ReceiveIntegerR(4); String msg = pgStream.ReceiveString(connection.getEncoding()); connection.addNotification(new org.postgresql.core.Notification(msg, pid)); break; diff --git a/src/interfaces/jdbc/org/postgresql/fastpath/Fastpath.java b/src/interfaces/jdbc/org/postgresql/fastpath/Fastpath.java index 5f46ad12068..dd0dd7f9f0b 100644 --- a/src/interfaces/jdbc/org/postgresql/fastpath/Fastpath.java +++ b/src/interfaces/jdbc/org/postgresql/fastpath/Fastpath.java @@ -6,7 +6,7 @@ * Copyright (c) 2003, PostgreSQL Global Development Group * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/fastpath/Attic/Fastpath.java,v 1.16.2.2 2003/12/18 03:29:12 davec Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/fastpath/Attic/Fastpath.java,v 1.16.2.3 2004/02/03 05:43:22 jurka Exp $ * *------------------------------------------------------------------------- */ @@ -118,8 +118,10 @@ public class Fastpath switch (c) { case 'A': // Asynchronous Notify - int pid = stream.ReceiveInteger(4); + int msglen = stream.ReceiveIntegerR(4); + int pid = stream.ReceiveIntegerR(4); String msg = stream.ReceiveString(conn.getEncoding()); + String param = stream.ReceiveString(conn.getEncoding()); conn.addNotification(new org.postgresql.core.Notification(msg, pid)); break; //------------------------------ @@ -233,8 +235,9 @@ public class Fastpath { case 'A': // Asynchronous Notify //TODO: do something with this - int pid = stream.ReceiveInteger(4); + int pid = stream.ReceiveIntegerR(4); String msg = stream.ReceiveString(conn.getEncoding()); + conn.addNotification(new org.postgresql.core.Notification(msg, pid)); break; //------------------------------ diff --git a/src/interfaces/jdbc/org/postgresql/test/jdbc2/Jdbc2TestSuite.java b/src/interfaces/jdbc/org/postgresql/test/jdbc2/Jdbc2TestSuite.java index e1b480a1f1c..3eab8e66338 100644 --- a/src/interfaces/jdbc/org/postgresql/test/jdbc2/Jdbc2TestSuite.java +++ b/src/interfaces/jdbc/org/postgresql/test/jdbc2/Jdbc2TestSuite.java @@ -55,6 +55,7 @@ public class Jdbc2TestSuite extends TestSuite // features some applications require. suite.addTestSuite(JBuilderTest.class); suite.addTestSuite(MiscTest.class); + suite.addTestSuite(NotifyTest.class); // Fastpath/LargeObject suite.addTestSuite(BlobTest.class); diff --git a/src/interfaces/jdbc/org/postgresql/test/jdbc2/NotifyTest.java b/src/interfaces/jdbc/org/postgresql/test/jdbc2/NotifyTest.java new file mode 100644 index 00000000000..08718851150 --- /dev/null +++ b/src/interfaces/jdbc/org/postgresql/test/jdbc2/NotifyTest.java @@ -0,0 +1,43 @@ +package org.postgresql.test.jdbc2; + +import org.postgresql.test.TestUtil; +import junit.framework.TestCase; +import java.sql.*; + +import org.postgresql.PGConnection; +import org.postgresql.PGNotification; + +public class NotifyTest extends TestCase +{ + + private Connection conn; + + public NotifyTest(String name) + { + super(name); + } + + protected void setUp() throws SQLException + { + conn = TestUtil.openDB(); + } + + protected void tearDown() throws SQLException + { + TestUtil.closeDB(conn); + } + + public void testNotify() throws SQLException + { + Statement stmt = conn.createStatement(); + stmt.executeUpdate("LISTEN mynotification"); + stmt.executeUpdate("NOTIFY mynotification"); + + PGNotification notifications[] = ((org.postgresql.PGConnection)conn).getNotifications(); + assertNotNull(notifications); + assertEquals(notifications.length, 1); + assertEquals(notifications[0].getName(), "mynotification"); + + stmt.close(); + } +}