Package org.postgresql.core
Class PGStream
- java.lang.Object
-
- org.postgresql.core.PGStream
-
- All Implemented Interfaces:
Closeable,Flushable,AutoCloseable
public class PGStream extends Object implements Closeable, Flushable
Wrapper around the raw connection to the server that implements some basic primitives (reading/writing formatted data, doing string encoding, etc).
In general, instances of PGStream are not threadsafe; the caller must ensure that only one thread at a time is accessing a particular PGStream instance.
-
-
Constructor Summary
Constructors Constructor Description PGStream(SocketFactory socketFactory, HostSpec hostSpec)Deprecated.PGStream(SocketFactory socketFactory, HostSpec hostSpec, int timeout)Constructor: Connect to the PostgreSQL back end and return a stream connection.PGStream(PGStream pgStream, int timeout)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidchangeSocket(Socket socket)Switch this stream to using a new socket.voidclearResultBufferCount()Method to clear count of byte buffer.voidclose()Closes the connection.voidflush()Flush any pending output to the backend.EncodinggetEncoding()WritergetEncodingWriter()Get a Writer instance that encodes directly onto the underlying stream.HostSpecgetHostSpec()intgetNetworkTimeout()SocketgetSocket()SocketFactorygetSocketFactory()booleanhasMessagePending()Check for pending backend messages without blocking.booleanisClosed()booleanisGssEncrypted()intpeekChar()Receives a single character from the backend, without advancing the current protocol stream position.voidreceive(byte[] buf, int off, int siz)Reads in a given number of bytes from the backend.byte[]receive(int siz)Reads in a given number of bytes from the backend.intreceiveChar()Receives a single character from the backend.voidreceiveEOF()Consume an expected EOF from the backend.EncodingPredictor.DecodeResultreceiveErrorString(int len)Receives a fixed-size string from the backend, and tries to avoid "UTF-8 decode failed" errors.intreceiveInteger2()Receives a two byte integer from the backend.intreceiveInteger4()Receives a four byte integer from the backend.StringreceiveString()Receives a null-terminated string from the backend.StringreceiveString(int len)Receives a fixed-size string from the backend.TuplereceiveTupleV3()Read a tuple from the back end.voidsend(byte[] buf)Send an array of bytes to the backend.voidsend(byte[] buf, int siz)Send a fixed-size array of bytes to the backend.voidsend(byte[] buf, int off, int siz)Send a fixed-size array of bytes to the backend.voidsend(ByteStreamWriter writer)Send a fixed-size array of bytes to the backend.voidsendChar(int val)Sends a single character to the back end.voidsendInteger2(int val)Sends a 2-byte integer (short) to the back end.voidsendInteger4(int val)Sends a 4-byte integer to the back end.voidsendStream(InputStream inStream, int remaining)Copy data from an input stream to the connection.voidsetEncoding(Encoding encoding)Change the encoding used by this connection.voidsetMaxResultBuffer(String value)Method to set MaxResultBuffer inside PGStream.voidsetMinStreamAvailableCheckDelay(int delay)voidsetNetworkTimeout(int milliseconds)voidsetSecContext(GSSContext secContext)voidskip(int size)
-
-
-
Constructor Detail
-
PGStream
public PGStream(SocketFactory socketFactory, HostSpec hostSpec, int timeout) throws IOException
Constructor: Connect to the PostgreSQL back end and return a stream connection.- Parameters:
socketFactory- socket factory to use when creating socketshostSpec- the host and port to connect totimeout- timeout in milliseconds, or 0 if no timeout set- Throws:
IOException- if an IOException occurs below it.
-
PGStream
public PGStream(PGStream pgStream, int timeout) throws IOException
- Throws:
IOException
-
PGStream
@Deprecated public PGStream(SocketFactory socketFactory, HostSpec hostSpec) throws IOException
Deprecated.Constructor: Connect to the PostgreSQL back end and return a stream connection.- Parameters:
socketFactory- socket factoryhostSpec- the host and port to connect to- Throws:
IOException- if an IOException occurs below it.
-
-
Method Detail
-
isGssEncrypted
public boolean isGssEncrypted()
-
setSecContext
public void setSecContext(GSSContext secContext)
-
getHostSpec
public HostSpec getHostSpec()
-
getSocket
public Socket getSocket()
-
getSocketFactory
public SocketFactory getSocketFactory()
-
hasMessagePending
public boolean hasMessagePending() throws IOExceptionCheck for pending backend messages without blocking. Might return false when there actually are messages waiting, depending on the characteristics of the underlying socket. This is used to detect asynchronous notifies from the backend, when available.- Returns:
- true if there is a pending backend message
- Throws:
IOException- if something wrong happens
-
setMinStreamAvailableCheckDelay
public void setMinStreamAvailableCheckDelay(int delay)
-
changeSocket
public void changeSocket(Socket socket) throws IOException
Switch this stream to using a new socket. Any existing socket is not closed; it's assumed that we are changing to a new socket that delegates to the original socket (e.g. SSL).- Parameters:
socket- the new socket to change to- Throws:
IOException- if something goes wrong
-
getEncoding
public Encoding getEncoding()
-
setEncoding
public void setEncoding(Encoding encoding) throws IOException
Change the encoding used by this connection.- Parameters:
encoding- the new encoding to use- Throws:
IOException- if something goes wrong
-
getEncodingWriter
public Writer getEncodingWriter() throws IOException
Get a Writer instance that encodes directly onto the underlying stream.
The returned Writer should not be closed, as it's a shared object. Writer.flush needs to be called when switching between use of the Writer and use of the PGStream write methods, but it won't actually flush output all the way out -- call
flush()to actually ensure all output has been pushed to the server.- Returns:
- the shared Writer instance
- Throws:
IOException- if something goes wrong.
-
sendChar
public void sendChar(int val) throws IOExceptionSends a single character to the back end.- Parameters:
val- the character to be sent- Throws:
IOException- if an I/O error occurs
-
sendInteger4
public void sendInteger4(int val) throws IOExceptionSends a 4-byte integer to the back end.- Parameters:
val- the integer to be sent- Throws:
IOException- if an I/O error occurs
-
sendInteger2
public void sendInteger2(int val) throws IOExceptionSends a 2-byte integer (short) to the back end.- Parameters:
val- the integer to be sent- Throws:
IOException- if an I/O error occurs orvalcannot be encoded in 2 bytes
-
send
public void send(byte[] buf) throws IOExceptionSend an array of bytes to the backend.- Parameters:
buf- The array of bytes to be sent- Throws:
IOException- if an I/O error occurs
-
send
public void send(byte[] buf, int siz) throws IOExceptionSend a fixed-size array of bytes to the backend. Ifbuf.length < siz, pad with zeros. Ifbuf.lengh > siz, truncate the array.- Parameters:
buf- the array of bytes to be sentsiz- the number of bytes to be sent- Throws:
IOException- if an I/O error occurs
-
send
public void send(byte[] buf, int off, int siz) throws IOExceptionSend a fixed-size array of bytes to the backend. Iflength < siz, pad with zeros. Iflength > siz, truncate the array.- Parameters:
buf- the array of bytes to be sentoff- offset in the array to start sending fromsiz- the number of bytes to be sent- Throws:
IOException- if an I/O error occurs
-
send
public void send(ByteStreamWriter writer) throws IOException
Send a fixed-size array of bytes to the backend. Iflength < siz, pad with zeros. Iflength > siz, truncate the array.- Parameters:
writer- the stream writer to invoke to send the bytes- Throws:
IOException- if an I/O error occurs
-
peekChar
public int peekChar() throws IOExceptionReceives a single character from the backend, without advancing the current protocol stream position.- Returns:
- the character received
- Throws:
IOException- if an I/O Error occurs
-
receiveChar
public int receiveChar() throws IOExceptionReceives a single character from the backend.- Returns:
- the character received
- Throws:
IOException- if an I/O Error occurs
-
receiveInteger4
public int receiveInteger4() throws IOExceptionReceives a four byte integer from the backend.- Returns:
- the integer received from the backend
- Throws:
IOException- if an I/O error occurs
-
receiveInteger2
public int receiveInteger2() throws IOExceptionReceives a two byte integer from the backend.- Returns:
- the integer received from the backend
- Throws:
IOException- if an I/O error occurs
-
receiveString
public String receiveString(int len) throws IOException
Receives a fixed-size string from the backend.- Parameters:
len- the length of the string to receive, in bytes.- Returns:
- the decoded string
- Throws:
IOException- if something wrong happens
-
receiveErrorString
public EncodingPredictor.DecodeResult receiveErrorString(int len) throws IOException
Receives a fixed-size string from the backend, and tries to avoid "UTF-8 decode failed" errors.- Parameters:
len- the length of the string to receive, in bytes.- Returns:
- the decoded string
- Throws:
IOException- if something wrong happens
-
receiveString
public String receiveString() throws IOException
Receives a null-terminated string from the backend. If we don't see a null, then we assume something has gone wrong.- Returns:
- string from back end
- Throws:
IOException- if an I/O error occurs, or end of file
-
receiveTupleV3
public Tuple receiveTupleV3() throws IOException, OutOfMemoryError, SQLException
Read a tuple from the back end. A tuple is a two dimensional array of bytes. This variant reads the V3 protocol's tuple representation.- Returns:
- tuple from the back end
- Throws:
IOException- if a data I/O error occursSQLException- if read more bytes than set maxResultBufferOutOfMemoryError
-
receive
public byte[] receive(int siz) throws IOExceptionReads in a given number of bytes from the backend.- Parameters:
siz- number of bytes to read- Returns:
- array of bytes received
- Throws:
IOException- if a data I/O error occurs
-
receive
public void receive(byte[] buf, int off, int siz) throws IOExceptionReads in a given number of bytes from the backend.- Parameters:
buf- buffer to store resultoff- offset in buffersiz- number of bytes to read- Throws:
IOException- if a data I/O error occurs
-
skip
public void skip(int size) throws IOException- Throws:
IOException
-
sendStream
public void sendStream(InputStream inStream, int remaining) throws IOException
Copy data from an input stream to the connection.- Parameters:
inStream- the stream to read data fromremaining- the number of bytes to copy- Throws:
IOException- if a data I/O error occurs
-
flush
public void flush() throws IOExceptionFlush any pending output to the backend.- Specified by:
flushin interfaceFlushable- Throws:
IOException- if an I/O error occurs
-
receiveEOF
public void receiveEOF() throws SQLException, IOExceptionConsume an expected EOF from the backend.- Throws:
IOException- if an I/O error occursSQLException- if we get something other than an EOF
-
close
public void close() throws IOExceptionCloses the connection.- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Throws:
IOException- if an I/O Error occurs
-
setNetworkTimeout
public void setNetworkTimeout(int milliseconds) throws IOException- Throws:
IOException
-
getNetworkTimeout
public int getNetworkTimeout() throws IOException- Throws:
IOException
-
setMaxResultBuffer
public void setMaxResultBuffer(String value) throws PSQLException
Method to set MaxResultBuffer inside PGStream.- Parameters:
value- value of new max result buffer as string (cause we can expect % or chars to use multiplier)- Throws:
PSQLException- exception returned when occurred parsing problem.
-
clearResultBufferCount
public void clearResultBufferCount()
Method to clear count of byte buffer.
-
isClosed
public boolean isClosed()
-
-