Package org.mariadb.jdbc.client.socket
Class PacketWriter
- java.lang.Object
-
- org.mariadb.jdbc.client.socket.PacketWriter
-
public class PacketWriter extends java.lang.Object
-
-
Field Summary
Fields Modifier and Type Field Description private static byte
BACKSLASH
protected byte[]
buf
private boolean
bufContainDataAfterMark
private long
cmdLength
protected MutableInt
compressSequence
private static byte
DBL_QUOTE
private static int
LARGE_BUFFER_SIZE
private static Logger
logger
private int
mark
private static int
MAX_PACKET_LENGTH
private int
maxAllowedPacket
private int
maxPacketLength
private int
maxQuerySizeToLog
private static int
MEDIUM_BUFFER_SIZE
private java.io.OutputStream
out
private boolean
permitTrace
protected int
pos
private static byte
QUOTE
protected MutableInt
sequence
private java.lang.String
serverThreadLog
static int
SMALL_BUFFER_SIZE
private static byte
ZERO_BYTE
-
Constructor Summary
Constructors Constructor Description PacketWriter(java.io.OutputStream out, int maxQuerySizeToLog, MutableInt sequence, MutableInt compressSequence)
Common feature to write data into socket, creating MariaDB Packet.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
bufIsDataAfterMark()
void
checkMaxAllowedLength(int length)
Count query size.void
close()
void
flush()
Send packet to socket.void
flushBufferStopAtMark()
Flush to last mark.private void
growBuffer(int len)
buf growing use 4 size only to avoid creating/copying that are expensive operations.boolean
hasFlushed()
void
initPacket()
boolean
isMarked()
void
mark()
void
permitTrace(boolean permitTrace)
int
pos()
void
pos(int pos)
byte[]
resetMark()
Reset mark flag and send bytes after mark flag.void
setMaxAllowedPacket(int maxAllowedPacket)
void
setServerThreadId(java.lang.Long serverThreadId, HostAddress hostAddress)
Set server thread id.void
writeAscii(java.lang.String str)
void
writeByte(int value)
Write byte into buf, flush buf to socket if needed.void
writeBytes(byte[] arr)
void
writeBytes(byte[] arr, int off, int len)
Write byte array to buf.void
writeBytesAtPos(byte[] arr, int pos)
void
writeBytesEscaped(byte[] bytes, int len, boolean noBackslashEscapes)
Write escape bytes to socket.void
writeDouble(double value)
void
writeEmptyPacket()
Send empty packet.void
writeFloat(float value)
void
writeInt(int value)
Write int value into buf.void
writeLength(long length)
Write field length into buf, flush socket if needed.void
writeLong(long value)
Write long value into buf.void
writeShort(short value)
Write short value into buf.protected void
writeSocket(boolean commandEnd)
Flush the internal buf.void
writeString(java.lang.String str)
void
writeStringEscaped(java.lang.String str, boolean noBackslashEscapes)
Write string to socket.
-
-
-
Field Detail
-
SMALL_BUFFER_SIZE
public static final int SMALL_BUFFER_SIZE
- See Also:
- Constant Field Values
-
logger
private static final Logger logger
-
QUOTE
private static final byte QUOTE
- See Also:
- Constant Field Values
-
DBL_QUOTE
private static final byte DBL_QUOTE
- See Also:
- Constant Field Values
-
ZERO_BYTE
private static final byte ZERO_BYTE
- See Also:
- Constant Field Values
-
BACKSLASH
private static final byte BACKSLASH
- See Also:
- Constant Field Values
-
MEDIUM_BUFFER_SIZE
private static final int MEDIUM_BUFFER_SIZE
- See Also:
- Constant Field Values
-
LARGE_BUFFER_SIZE
private static final int LARGE_BUFFER_SIZE
- See Also:
- Constant Field Values
-
MAX_PACKET_LENGTH
private static final int MAX_PACKET_LENGTH
- See Also:
- Constant Field Values
-
sequence
protected final MutableInt sequence
-
compressSequence
protected final MutableInt compressSequence
-
maxQuerySizeToLog
private final int maxQuerySizeToLog
-
out
private final java.io.OutputStream out
-
buf
protected byte[] buf
-
pos
protected int pos
-
maxPacketLength
private int maxPacketLength
-
maxAllowedPacket
private int maxAllowedPacket
-
cmdLength
private long cmdLength
-
permitTrace
private boolean permitTrace
-
serverThreadLog
private java.lang.String serverThreadLog
-
mark
private int mark
-
bufContainDataAfterMark
private boolean bufContainDataAfterMark
-
-
Constructor Detail
-
PacketWriter
public PacketWriter(java.io.OutputStream out, int maxQuerySizeToLog, MutableInt sequence, MutableInt compressSequence)
Common feature to write data into socket, creating MariaDB Packet.- Parameters:
out
- output streammaxQuerySizeToLog
- maximum query size to logsequence
- packet sequencecompressSequence
- compressed packet sequence
-
-
Method Detail
-
pos
public int pos()
-
pos
public void pos(int pos) throws java.io.IOException
- Throws:
java.io.IOException
-
writeByte
public void writeByte(int value) throws java.io.IOException
Write byte into buf, flush buf to socket if needed.- Parameters:
value
- byte to send- Throws:
java.io.IOException
- if socket error occur.
-
writeShort
public void writeShort(short value) throws java.io.IOException
Write short value into buf. flush buf if too small.- Parameters:
value
- short value- Throws:
java.io.IOException
- if socket error occur
-
writeInt
public void writeInt(int value) throws java.io.IOException
Write int value into buf. flush buf if too small.- Parameters:
value
- int value- Throws:
java.io.IOException
- if socket error occur
-
writeLong
public void writeLong(long value) throws java.io.IOException
Write long value into buf. flush buf if too small.- Parameters:
value
- long value- Throws:
java.io.IOException
- if socket error occur
-
writeDouble
public void writeDouble(double value) throws java.io.IOException
- Throws:
java.io.IOException
-
writeFloat
public void writeFloat(float value) throws java.io.IOException
- Throws:
java.io.IOException
-
writeBytes
public void writeBytes(byte[] arr) throws java.io.IOException
- Throws:
java.io.IOException
-
writeBytesAtPos
public void writeBytesAtPos(byte[] arr, int pos)
-
writeBytes
public void writeBytes(byte[] arr, int off, int len) throws java.io.IOException
Write byte array to buf. If buf is full, flush socket.- Parameters:
arr
- byte arrayoff
- offsetlen
- byte length to write- Throws:
java.io.IOException
- if socket error occur
-
writeLength
public void writeLength(long length) throws java.io.IOException
Write field length into buf, flush socket if needed.- Parameters:
length
- field length- Throws:
java.io.IOException
- if socket error occur.
-
writeAscii
public void writeAscii(java.lang.String str) throws java.io.IOException
- Throws:
java.io.IOException
-
writeString
public void writeString(java.lang.String str) throws java.io.IOException
- Throws:
java.io.IOException
-
writeStringEscaped
public void writeStringEscaped(java.lang.String str, boolean noBackslashEscapes) throws java.io.IOException
Write string to socket.- Parameters:
str
- stringnoBackslashEscapes
- escape method- Throws:
java.io.IOException
- if socket error occur
-
writeBytesEscaped
public void writeBytesEscaped(byte[] bytes, int len, boolean noBackslashEscapes) throws java.io.IOException
Write escape bytes to socket.- Parameters:
bytes
- byteslen
- len to writenoBackslashEscapes
- escape method- Throws:
java.io.IOException
- if socket error occur
-
growBuffer
private void growBuffer(int len) throws java.io.IOException
buf growing use 4 size only to avoid creating/copying that are expensive operations. possible size- SMALL_buf_SIZE = 8k (default)
- MEDIUM_buf_SIZE = 128k
- LARGE_buf_SIZE = 1M
- getMaxPacketLength = 16M (+ 4 if using no compression)
- Parameters:
len
- length to add- Throws:
java.io.IOException
-
writeEmptyPacket
public void writeEmptyPacket() throws java.io.IOException
Send empty packet.- Throws:
java.io.IOException
- if socket error occur.
-
flush
public void flush() throws java.io.IOException
Send packet to socket.- Throws:
java.io.IOException
- if socket error occur.
-
checkMaxAllowedLength
public void checkMaxAllowedLength(int length) throws MaxAllowedPacketException
Count query size. If query size is greater than max_allowed_packet and nothing has been already send, throw an exception to avoid having the connection closed.- Parameters:
length
- additional length to query size- Throws:
MaxAllowedPacketException
- if query has not to be sent.
-
setMaxAllowedPacket
public void setMaxAllowedPacket(int maxAllowedPacket)
-
permitTrace
public void permitTrace(boolean permitTrace)
-
setServerThreadId
public void setServerThreadId(java.lang.Long serverThreadId, HostAddress hostAddress)
Set server thread id.- Parameters:
serverThreadId
- current server thread id.hostAddress
- host information
-
mark
public void mark()
-
isMarked
public boolean isMarked()
-
hasFlushed
public boolean hasFlushed()
-
flushBufferStopAtMark
public void flushBufferStopAtMark() throws java.io.IOException
Flush to last mark.- Throws:
java.io.IOException
- if flush fail.
-
bufIsDataAfterMark
public boolean bufIsDataAfterMark()
-
resetMark
public byte[] resetMark()
Reset mark flag and send bytes after mark flag.- Returns:
- bytes after mark flag
-
initPacket
public void initPacket()
-
writeSocket
protected void writeSocket(boolean commandEnd) throws java.io.IOException
Flush the internal buf.- Parameters:
commandEnd
- command end- Throws:
java.io.IOException
- id connection error occur.
-
close
public void close() throws java.io.IOException
- Throws:
java.io.IOException
-
-