Package org.postgresql.core
Class PGStream
java.lang.Object
org.postgresql.core.PGStream
- All Implemented Interfaces:
Closeable
,Flushable
,AutoCloseable
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
ConstructorDescriptionPGStream
(SocketFactory socketFactory, HostSpec hostSpec) Deprecated.PGStream
(SocketFactory socketFactory, HostSpec hostSpec, int timeout) Constructor: Connect to the PostgreSQL back end and return a stream connection. -
Method Summary
Modifier and TypeMethodDescriptionvoid
changeSocket
(Socket socket) Switch this stream to using a new socket.void
Clear value of max row size noticed so far.void
Clear count of byte buffer.void
close()
Closes the connection.void
flush()
Flush any pending output to the backend.Get a Writer instance that encodes directly onto the underlying stream.long
Get MaxResultBuffer from PGStream.int
Get actual max row size noticed so far.int
boolean
Check for pending backend messages without blocking.boolean
isClosed()
boolean
int
peekChar()
Receives a single character from the backend, without advancing the current protocol stream position.void
receive
(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.Receives a null-terminated string from the backend and attempts to decode to acanonical
String
.Receives a null-terminated string from the backend and attempts to decode to acanonical
String
.int
Receives a single character from the backend.void
Consume an expected EOF from the backend.receiveErrorString
(int len) Receives a fixed-size string from the backend, and tries to avoid "UTF-8 decode failed" errors.int
Receives a two byte integer from the backend.int
Receives a four byte integer from the backend.Receives a null-terminated string from the backend.receiveString
(int len) Receives a fixed-size string from the backend.Read a tuple from the back end.void
send
(byte[] buf) Send an array of bytes to the backend.void
send
(byte[] buf, int siz) Send a fixed-size array of bytes to the backend.void
send
(byte[] buf, int off, int siz) Send a fixed-size array of bytes to the backend.void
send
(ByteStreamWriter writer) Send a fixed-size array of bytes to the backend.void
sendChar
(int val) Sends a single character to the back end.void
sendInteger2
(int val) Sends a 2-byte integer (short) to the back end.void
sendInteger4
(int val) Sends a 4-byte integer to the back end.void
sendStream
(InputStream inStream, int remaining) Copy data from an input stream to the connection.void
setEncoding
(Encoding encoding) Change the encoding used by this connection.void
setMaxResultBuffer
(@Nullable String value) Method to set MaxResultBuffer inside PGStream.void
setMaxRowSizeBytes
(int rowSizeBytes) The idea behind this method is to keep in maxRowSize the size of biggest read data row.void
setMinStreamAvailableCheckDelay
(int delay) void
setNetworkTimeout
(int milliseconds) void
setSecContext
(GSSContext secContext) void
skip
(int size)
-
Constructor Details
-
PGStream
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
- Throws:
IOException
-
PGStream
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 Details
-
isGssEncrypted
public boolean isGssEncrypted() -
setSecContext
-
getHostSpec
-
getSocket
-
getSocketFactory
-
hasMessagePending
Check 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
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
-
setEncoding
Change the encoding used by this connection.- Parameters:
encoding
- the new encoding to use- Throws:
IOException
- if something goes wrong
-
getEncodingWriter
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
Sends a single character to the back end.- Parameters:
val
- the character to be sent- Throws:
IOException
- if an I/O error occurs
-
sendInteger4
Sends a 4-byte integer to the back end.- Parameters:
val
- the integer to be sent- Throws:
IOException
- if an I/O error occurs
-
sendInteger2
Sends a 2-byte integer (short) to the back end.- Parameters:
val
- the integer to be sent- Throws:
IOException
- if an I/O error occurs orval
cannot be encoded in 2 bytes
-
send
Send 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
Send a fixed-size array of bytes to the backend. Ifbuf.length < siz
, pad with zeros. Ifbuf.length > 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
Send 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
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
Receives 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
Receives a single character from the backend.- Returns:
- the character received
- Throws:
IOException
- if an I/O Error occurs
-
receiveInteger4
Receives a four byte integer from the backend.- Returns:
- the integer received from the backend
- Throws:
IOException
- if an I/O error occurs
-
receiveInteger2
Receives a two byte integer from the backend.- Returns:
- the integer received from the backend
- Throws:
IOException
- if an I/O error occurs
-
receiveString
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
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
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
-
receiveCanonicalString
Receives a null-terminated string from the backend and attempts to decode to acanonical
String
. 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- See Also:
-
receiveCanonicalStringIfPresent
Receives a null-terminated string from the backend and attempts to decode to acanonical
String
. 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- See Also:
-
receiveTupleV3
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
Reads 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
Reads 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
- Throws:
IOException
-
sendStream
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
Flush any pending output to the backend.- Specified by:
flush
in interfaceFlushable
- Throws:
IOException
- if an I/O error occurs
-
receiveEOF
Consume an expected EOF from the backend.- Throws:
IOException
- if an I/O error occursSQLException
- if we get something other than an EOF
-
close
Closes the connection.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Throws:
IOException
- if an I/O Error occurs
-
setNetworkTimeout
- Throws:
IOException
-
getNetworkTimeout
- Throws:
IOException
-
setMaxResultBuffer
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.
-
getMaxResultBuffer
public long getMaxResultBuffer()Get MaxResultBuffer from PGStream.- Returns:
- size of MaxResultBuffer
-
setMaxRowSizeBytes
public void setMaxRowSizeBytes(int rowSizeBytes) The idea behind this method is to keep in maxRowSize the size of biggest read data row. As there may be many data rows send after each other for a query, then value in maxRowSize would contain value noticed so far, because next data rows and their sizes are not read for that moment. We want it increasing, because the size of the biggest among data rows will be used during computing new adaptive fetch size for the query.- Parameters:
rowSizeBytes
- new value to be set as maxRowSizeBytes
-
getMaxRowSizeBytes
public int getMaxRowSizeBytes()Get actual max row size noticed so far.- Returns:
- value of max row size
-
clearMaxRowSizeBytes
public void clearMaxRowSizeBytes()Clear value of max row size noticed so far. -
clearResultBufferCount
public void clearResultBufferCount()Clear count of byte buffer. -
isClosed
public boolean isClosed()
-
PGStream(SocketFactory, org.postgresql.util.HostSpec, int)