summaryrefslogtreecommitdiff
path: root/src/interfaces/jdbc/org/postgresql/PG_Stream.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/jdbc/org/postgresql/PG_Stream.java')
-rw-r--r--src/interfaces/jdbc/org/postgresql/PG_Stream.java375
1 files changed, 0 insertions, 375 deletions
diff --git a/src/interfaces/jdbc/org/postgresql/PG_Stream.java b/src/interfaces/jdbc/org/postgresql/PG_Stream.java
deleted file mode 100644
index 0c92bff944..0000000000
--- a/src/interfaces/jdbc/org/postgresql/PG_Stream.java
+++ /dev/null
@@ -1,375 +0,0 @@
-package org.postgresql;
-
-import java.io.*;
-import java.lang.*;
-import java.net.*;
-import java.util.*;
-import java.sql.*;
-import org.postgresql.*;
-import org.postgresql.core.*;
-import org.postgresql.util.*;
-
-/*
- * $Id: PG_Stream.java,v 1.18 2003/02/27 05:45:44 barry Exp $
- *
- * This class is used by Connection & PGlobj for communicating with the
- * backend.
- *
- * @see java.sql.Connection
- */
-// This class handles all the Streamed I/O for a org.postgresql connection
-public class PG_Stream
-{
- public String host;
- public int port;
- public Socket connection;
- public InputStream pg_input;
- public BufferedOutputStream pg_output;
- private byte[] byte_buf = new byte[8*1024];
-
- /*
- * Constructor: Connect to the PostgreSQL back end and return
- * a stream connection.
- *
- * @param host the hostname to connect to
- * @param port the port number that the postmaster is sitting on
- * @exception IOException if an IOException occurs below it.
- */
- public PG_Stream(String p_host, int p_port) throws IOException
- {
- host = p_host;
- port = p_port;
- connection = new Socket(host, port);
-
- // Submitted by Jason Venner <jason@idiom.com> adds a 10x speed
- // improvement on FreeBSD machines (caused by a bug in their TCP Stack)
- connection.setTcpNoDelay(true);
-
- // Buffer sizes submitted by Sverre H Huseby <sverrehu@online.no>
- pg_input = new BufferedInputStream(connection.getInputStream(), 8192);
- pg_output = new BufferedOutputStream(connection.getOutputStream(), 8192);
- }
-
- /*
- * Sends a single character to the back end
- *
- * @param val the character to be sent
- * @exception IOException if an I/O error occurs
- */
- public void SendChar(int val) throws IOException
- {
- pg_output.write((byte)val);
- }
-
- /*
- * Sends an integer to the back end
- *
- * @param val the integer to be sent
- * @param siz the length of the integer in bytes (size of structure)
- * @exception IOException if an I/O error occurs
- */
- public void SendInteger(int val, int siz) throws IOException
- {
- byte[] buf = new byte[siz];
-
- while (siz-- > 0)
- {
- buf[siz] = (byte)(val & 0xff);
- val >>= 8;
- }
- Send(buf);
- }
-
- /*
- * Send an array of bytes to the backend
- *
- * @param buf The array of bytes to be sent
- * @exception IOException if an I/O error occurs
- */
- public void Send(byte buf[]) throws IOException
- {
- pg_output.write(buf);
- }
-
- /*
- * Send an exact array of bytes to the backend - if the length
- * has not been reached, send nulls until it has.
- *
- * @param buf the array of bytes to be sent
- * @param siz the number of bytes to be sent
- * @exception IOException if an I/O error occurs
- */
- public void Send(byte buf[], int siz) throws IOException
- {
- Send(buf, 0, siz);
- }
-
- /*
- * Send an exact array of bytes to the backend - if the length
- * has not been reached, send nulls until it has.
- *
- * @param buf the array of bytes to be sent
- * @param off offset in the array to start sending from
- * @param siz the number of bytes to be sent
- * @exception IOException if an I/O error occurs
- */
- public void Send(byte buf[], int off, int siz) throws IOException
- {
- int i;
-
- pg_output.write(buf, off, ((buf.length - off) < siz ? (buf.length - off) : siz));
- if ((buf.length - off) < siz)
- {
- for (i = buf.length - off ; i < siz ; ++i)
- {
- pg_output.write(0);
- }
- }
- }
-
- /*
- * Receives a single character from the backend
- *
- * @return the character received
- * @exception SQLException if an I/O Error returns
- */
- public int ReceiveChar() throws SQLException
- {
- int c = 0;
-
- try
- {
- c = pg_input.read();
- if (c < 0)
- throw new PSQLException("postgresql.stream.eof");
- }
- catch (IOException e)
- {
- throw new PSQLException("postgresql.stream.ioerror", e);
- }
- return c;
- }
-
- /*
- * Receives an integer from the backend
- *
- * @param siz length of the integer in bytes
- * @return the integer received from the backend
- * @exception SQLException if an I/O error occurs
- */
- public int ReceiveInteger(int siz) throws SQLException
- {
- int n = 0;
-
- try
- {
- for (int i = 0 ; i < siz ; i++)
- {
- int b = pg_input.read();
-
- if (b < 0)
- throw new PSQLException("postgresql.stream.eof");
- n = n | (b << (8 * i)) ;
- }
- }
- catch (IOException e)
- {
- throw new PSQLException("postgresql.stream.ioerror", e);
- }
- return n;
- }
-
- /*
- * Receives an integer from the backend
- *
- * @param siz length of the integer in bytes
- * @return the integer received from the backend
- * @exception SQLException if an I/O error occurs
- */
- public int ReceiveIntegerR(int siz) throws SQLException
- {
- int n = 0;
-
- try
- {
- for (int i = 0 ; i < siz ; i++)
- {
- int b = pg_input.read();
-
- if (b < 0)
- throw new PSQLException("postgresql.stream.eof");
- n = b | (n << 8);
- }
- }
- catch (IOException e)
- {
- throw new PSQLException("postgresql.stream.ioerror", e);
- }
- return n;
- }
-
- /*
- * Receives a null-terminated string from the backend. If we don't see a
- * null, then we assume something has gone wrong.
- *
- * @param encoding the charset encoding to use.
- * @return string from back end
- * @exception SQLException if an I/O error occurs, or end of file
- */
- public String ReceiveString(Encoding encoding)
- throws SQLException
- {
- int s = 0;
- byte[] rst = byte_buf;
- try
- {
- int buflen = rst.length;
- boolean done = false;
- while (!done)
- {
- while (s < buflen)
- {
- int c = pg_input.read();
- if (c < 0)
- throw new PSQLException("postgresql.stream.eof");
- else if (c == 0)
- {
- rst[s] = 0;
- done = true;
- break;
- }
- else
- {
- rst[s++] = (byte)c;
- }
- if (s >= buflen)
- { // Grow the buffer
- buflen = (int)(buflen * 2); // 100% bigger
- byte[] newrst = new byte[buflen];
- System.arraycopy(rst, 0, newrst, 0, s);
- rst = newrst;
- }
- }
- }
- }
- catch (IOException e)
- {
- throw new PSQLException("postgresql.stream.ioerror", e);
- }
- return encoding.decode(rst, 0, s);
- }
-
- /*
- * Read a tuple from the back end. A tuple is a two dimensional
- * array of bytes
- *
- * @param nf the number of fields expected
- * @param bin true if the tuple is a binary tuple
- * @return null if the current response has no more tuples, otherwise
- * an array of strings
- * @exception SQLException if a data I/O error occurs
- */
- public byte[][] ReceiveTuple(int nf, boolean bin) throws SQLException
- {
- int i, bim = (nf + 7) / 8;
- byte[] bitmask = Receive(bim);
- byte[][] answer = new byte[nf][0];
-
- int whichbit = 0x80;
- int whichbyte = 0;
-
- for (i = 0 ; i < nf ; ++i)
- {
- boolean isNull = ((bitmask[whichbyte] & whichbit) == 0);
- whichbit >>= 1;
- if (whichbit == 0)
- {
- ++whichbyte;
- whichbit = 0x80;
- }
- if (isNull)
- answer[i] = null;
- else
- {
- int len = ReceiveIntegerR(4);
- if (!bin)
- len -= 4;
- if (len < 0)
- len = 0;
- answer[i] = Receive(len);
- }
- }
- return answer;
- }
-
- /*
- * Reads in a given number of bytes from the backend
- *
- * @param siz number of bytes to read
- * @return array of bytes received
- * @exception SQLException if a data I/O error occurs
- */
- private byte[] Receive(int siz) throws SQLException
- {
- byte[] answer = new byte[siz];
- Receive(answer, 0, siz);
- return answer;
- }
-
- /*
- * Reads in a given number of bytes from the backend
- *
- * @param buf buffer to store result
- * @param off offset in buffer
- * @param siz number of bytes to read
- * @exception SQLException if a data I/O error occurs
- */
- public void Receive(byte[] b, int off, int siz) throws SQLException
- {
- int s = 0;
-
- try
- {
- while (s < siz)
- {
- int w = pg_input.read(b, off + s, siz - s);
- if (w < 0)
- throw new PSQLException("postgresql.stream.eof");
- s += w;
- }
- }
- catch (IOException e)
- {
- throw new PSQLException("postgresql.stream.ioerror", e);
- }
- }
-
- /*
- * This flushes any pending output to the backend. It is used primarily
- * by the Fastpath code.
- * @exception SQLException if an I/O error occurs
- */
- public void flush() throws SQLException
- {
- try
- {
- pg_output.flush();
- }
- catch (IOException e)
- {
- throw new PSQLException("postgresql.stream.flush", e);
- }
- }
-
- /*
- * Closes the connection
- *
- * @exception IOException if a IO Error occurs
- */
- public void close() throws IOException
- {
- pg_output.close();
- pg_input.close();
- connection.close();
- }
-}