Commit 7776319a authored by Dave Cramer's avatar Dave Cramer

Implementation for cancelQuery by Grant Finnemore <grantf@guruhut.co.za>

parent 29e3ef0f
...@@ -11,7 +11,7 @@ import org.postgresql.util.*; ...@@ -11,7 +11,7 @@ import org.postgresql.util.*;
import org.postgresql.core.*; import org.postgresql.core.*;
/* /*
* $Id: Connection.java,v 1.40 2001/12/11 04:44:23 barry Exp $ * $Id: Connection.java,v 1.41 2002/02/26 02:15:54 davec Exp $
* *
* This abstract class is used by org.postgresql.Driver to open either the JDBC1 or * This abstract class is used by org.postgresql.Driver to open either the JDBC1 or
* JDBC2 versions of the Connection class. * JDBC2 versions of the Connection class.
...@@ -91,6 +91,40 @@ public abstract class Connection ...@@ -91,6 +91,40 @@ public abstract class Connection
public Connection() public Connection()
{} {}
public void cancelQuery() throws SQLException
{
PG_Stream cancelStream = null;
try {
cancelStream = new PG_Stream(PG_HOST, PG_PORT);
} catch (ConnectException cex) {
// Added by Peter Mount <peter@retep.org.uk>
// ConnectException is thrown when the connection cannot be made.
// we trap this an return a more meaningful message for the end user
throw new PSQLException ("postgresql.con.refused");
} catch (IOException e) {
throw new PSQLException ("postgresql.con.failed",e);
}
// Now we need to construct and send a cancel packet
try {
cancelStream.SendInteger(16, 4);
cancelStream.SendInteger(80877102, 4);
cancelStream.SendInteger(pid, 4);
cancelStream.SendInteger(ckey, 4);
cancelStream.flush();
}
catch(IOException e) {
throw new PSQLException("postgresql.con.failed",e);
}
finally {
try {
if(cancelStream != null)
cancelStream.close();
}
catch(IOException e) {} // Ignore
}
}
/* /*
* This method actually opens the connection. It is called by Driver. * This method actually opens the connection. It is called by Driver.
* *
...@@ -266,8 +300,8 @@ public abstract class Connection ...@@ -266,8 +300,8 @@ public abstract class Connection
switch (beresp) switch (beresp)
{ {
case 'K': case 'K':
pid = pg_stream.ReceiveInteger(4); pid = pg_stream.ReceiveIntegerR(4);
ckey = pg_stream.ReceiveInteger(4); ckey = pg_stream.ReceiveIntegerR(4);
break; break;
case 'E': case 'E':
case 'N': case 'N':
...@@ -281,6 +315,16 @@ public abstract class Connection ...@@ -281,6 +315,16 @@ public abstract class Connection
switch (beresp) switch (beresp)
{ {
case 'Z': case 'Z':
try
{
pg_stream.SendChar('Q');
pg_stream.SendChar(' ');
pg_stream.SendChar(0);
pg_stream.flush();
} catch (IOException e) {
throw new PSQLException("postgresql.con.ioerror",e);
}
break; break;
case 'E': case 'E':
case 'N': case 'N':
...@@ -448,6 +492,7 @@ public abstract class Connection ...@@ -448,6 +492,7 @@ public abstract class Connection
* @return the user name * @return the user name
* @exception SQLException just in case... * @exception SQLException just in case...
*/ */
int lastMessage = 0;
public String getUserName() throws SQLException public String getUserName() throws SQLException
{ {
return PG_USER; return PG_USER;
......
...@@ -179,7 +179,7 @@ public abstract class Statement ...@@ -179,7 +179,7 @@ public abstract class Statement
*/ */
public void cancel() throws SQLException public void cancel() throws SQLException
{ {
// FIXME: Cancel feature has been available since 6.4. Implement it here! throw new PSQLException("postgresql.unimplemented");
} }
/* /*
......
...@@ -211,6 +211,11 @@ public class Statement extends org.postgresql.Statement implements java.sql.Stat ...@@ -211,6 +211,11 @@ public class Statement extends org.postgresql.Statement implements java.sql.Stat
return result; return result;
} }
public void Cancel() throws SQLException
{
connection.cancelQuery();
}
public java.sql.Connection getConnection() throws SQLException public java.sql.Connection getConnection() throws SQLException
{ {
return (java.sql.Connection)connection; return (java.sql.Connection)connection;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment