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.
This commit is contained in:
Kris Jurka 2004-02-03 05:43:24 +00:00
parent d71188860e
commit 932001350b
4 changed files with 55 additions and 6 deletions

View File

@ -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;

View File

@ -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;
//------------------------------

View File

@ -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);

View File

@ -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();
}
}