Class PacketWriter
- java.lang.Object
-
- org.mariadb.jdbc.client.socket.impl.PacketWriter
-
-
Field Summary
Fields Modifier and Type Field Description private static byte
BACKSLASH
protected byte[]
buf
internal bufferprivate boolean
bufContainDataAfterMark
private long
cmdLength
protected MutableByte
compressSequence
compressed packet sequenceprivate static byte
DBL_QUOTE
private static int
LARGE_BUFFER_SIZE
private static Logger
logger
private int
mark
private static int
MAX_PACKET_LENGTH
private java.lang.Integer
maxAllowedPacket
private int
maxPacketLength
private int
maxQuerySizeToLog
private static int
MEDIUM_BUFFER_SIZE
private java.io.OutputStream
out
private boolean
permitTrace
protected int
pos
buffer positionprivate static byte
QUOTE
protected MutableByte
sequence
packet sequenceprivate java.lang.String
serverThreadLog
static int
SMALL_BUFFER_SIZE
initial buffer sizeprivate static byte
ZERO_BYTE
-
Constructor Summary
Constructors Constructor Description PacketWriter(java.io.OutputStream out, int maxQuerySizeToLog, java.lang.Integer maxAllowedPacket, MutableByte sequence, MutableByte compressSequence)
Common feature to write data into socket, creating MariaDB Packet.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description byte[]
buf()
Current bufferboolean
bufIsDataAfterMark()
Buffer has data after marked positionprivate void
checkMaxAllowedLength(int length)
Count query size.void
close()
Close socket streamvoid
flush()
Send packet to socket.void
flushBufferStopAtMark()
Flush to last mark.void
flushPipeline()
Send packet to buffered outputstream without flushinglong
getCmdLength()
get current command lengthbyte
getSequence()
Get current sequence objectprivate void
growBuffer(int len)
buf growing use 4 size only to avoid creating/copying that are expensive operations.boolean
hasFlushed()
Current command has flushed packet to socketvoid
initPacket()
reset sequences and position for sending a new packetboolean
isMarked()
has some position been markedvoid
mark()
mark positionvoid
permitTrace(boolean permitTrace)
Indicate if logging trace are permittedint
pos()
get current positionvoid
pos(int pos)
position setterbyte[]
resetMark()
Reset mark flag and send bytes after mark flag.void
setServerThreadId(java.lang.Long serverThreadId, HostAddress hostAddress)
Set server thread id.boolean
throwMaxAllowedLength(int length)
must a max allowed length exception be thrownvoid
writeAscii(java.lang.String str)
Write ascii string to buffervoid
writeByte(int value)
Write byte into buf, flush buf to socket if needed.void
writeBytes(byte[] arr)
Write byte array to buffervoid
writeBytes(byte[] arr, int off, int len)
Write byte array to buf.void
writeBytesAtPos(byte[] arr, int pos)
Write byte array to buffer at a specific positionvoid
writeBytesEscaped(byte[] bytes, int len, boolean noBackslashEscapes)
Write escape bytes to socket.void
writeDouble(double value)
Write Double binary value to buffervoid
writeEmptyPacket()
Send empty packet.void
writeFloat(float value)
Write float binary value to buffervoid
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)
Write utf8 string to buffervoid
writeStringEscaped(java.lang.String str, boolean noBackslashEscapes)
Write string to socket.
-
-
-
Field Detail
-
SMALL_BUFFER_SIZE
public static final int SMALL_BUFFER_SIZE
initial 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 MutableByte sequence
packet sequence
-
compressSequence
protected final MutableByte compressSequence
compressed packet sequence
-
maxQuerySizeToLog
private final int maxQuerySizeToLog
-
out
private final java.io.OutputStream out
-
maxPacketLength
private final int maxPacketLength
- See Also:
- Constant Field Values
-
maxAllowedPacket
private final java.lang.Integer maxAllowedPacket
-
buf
protected byte[] buf
internal buffer
-
pos
protected int pos
buffer position
-
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, java.lang.Integer maxAllowedPacket, MutableByte sequence, MutableByte compressSequence)
Common feature to write data into socket, creating MariaDB Packet.- Parameters:
out
- output streammaxQuerySizeToLog
- maximum query size to logmaxAllowedPacket
- max allowed packet value if knownsequence
- packet sequencecompressSequence
- compressed packet sequence
-
-
Method Detail
-
pos
public int pos()
get current position
-
pos
public void pos(int pos) throws java.io.IOException
position setter
-
getCmdLength
public long getCmdLength()
get current command length- Specified by:
getCmdLength
in interfaceWriter
- Returns:
- current command length
-
writeByte
public void writeByte(int value) throws java.io.IOException
Write byte into buf, flush buf to socket if needed.
-
writeShort
public void writeShort(short value) throws java.io.IOException
Write short value into buf. flush buf if too small.- Specified by:
writeShort
in interfaceWriter
- 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.
-
writeLong
public void writeLong(long value) throws java.io.IOException
Write long value into buf. flush buf if too small.
-
writeDouble
public void writeDouble(double value) throws java.io.IOException
Description copied from interface:Writer
Write Double binary value to buffer- Specified by:
writeDouble
in interfaceWriter
- Parameters:
value
- double value- Throws:
java.io.IOException
- if socket error occur
-
writeFloat
public void writeFloat(float value) throws java.io.IOException
Description copied from interface:Writer
Write float binary value to buffer- Specified by:
writeFloat
in interfaceWriter
- Parameters:
value
- float value- Throws:
java.io.IOException
- if socket error occur
-
writeBytes
public void writeBytes(byte[] arr) throws java.io.IOException
Description copied from interface:Writer
Write byte array to buffer- Specified by:
writeBytes
in interfaceWriter
- Parameters:
arr
- bytes- Throws:
java.io.IOException
- if socket error occur
-
writeBytesAtPos
public void writeBytesAtPos(byte[] arr, int pos)
Description copied from interface:Writer
Write byte array to buffer at a specific position- Specified by:
writeBytesAtPos
in interfaceWriter
- Parameters:
arr
- bytespos
- position
-
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.- Specified by:
writeBytes
in interfaceWriter
- 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.- Specified by:
writeLength
in interfaceWriter
- Parameters:
length
- field length- Throws:
java.io.IOException
- if socket error occur.
-
writeAscii
public void writeAscii(java.lang.String str) throws java.io.IOException
Description copied from interface:Writer
Write ascii string to buffer- Specified by:
writeAscii
in interfaceWriter
- Parameters:
str
- string- Throws:
java.io.IOException
- if socket error occurs
-
writeString
public void writeString(java.lang.String str) throws java.io.IOException
Description copied from interface:Writer
Write utf8 string to buffer- Specified by:
writeString
in interfaceWriter
- Parameters:
str
- string- Throws:
java.io.IOException
- if socket error occurs
-
buf
public byte[] buf()
Current buffer
-
writeStringEscaped
public void writeStringEscaped(java.lang.String str, boolean noBackslashEscapes) throws java.io.IOException
Write string to socket.- Specified by:
writeStringEscaped
in interfaceWriter
- 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.- Specified by:
writeBytesEscaped
in interfaceWriter
- 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.- Specified by:
writeEmptyPacket
in interfaceWriter
- Throws:
java.io.IOException
- if socket error occur.
-
flush
public void flush() throws java.io.IOException
Send packet to socket.
-
flushPipeline
public void flushPipeline() throws java.io.IOException
Description copied from interface:Writer
Send packet to buffered outputstream without flushing- Specified by:
flushPipeline
in interfaceWriter
- Throws:
java.io.IOException
- if socket error occur.
-
checkMaxAllowedLength
private 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.
-
throwMaxAllowedLength
public boolean throwMaxAllowedLength(int length)
Description copied from interface:Writer
must a max allowed length exception be thrown- Specified by:
throwMaxAllowedLength
in interfaceWriter
- Parameters:
length
- command length- Returns:
- true if too big
-
permitTrace
public void permitTrace(boolean permitTrace)
Description copied from interface:Writer
Indicate if logging trace are permitted- Specified by:
permitTrace
in interfaceWriter
- Parameters:
permitTrace
- permits trace to be logged
-
setServerThreadId
public void setServerThreadId(java.lang.Long serverThreadId, HostAddress hostAddress)
Set server thread id.- Specified by:
setServerThreadId
in interfaceWriter
- Parameters:
serverThreadId
- current server thread id.hostAddress
- host information
-
mark
public void mark()
Description copied from interface:Writer
mark position
-
isMarked
public boolean isMarked()
Description copied from interface:Writer
has some position been marked
-
hasFlushed
public boolean hasFlushed()
Description copied from interface:Writer
Current command has flushed packet to socket- Specified by:
hasFlushed
in interfaceWriter
- Returns:
- indicate if some packet have been flushed
-
flushBufferStopAtMark
public void flushBufferStopAtMark() throws java.io.IOException
Flush to last mark.- Specified by:
flushBufferStopAtMark
in interfaceWriter
- Throws:
java.io.IOException
- if flush fail.
-
bufIsDataAfterMark
public boolean bufIsDataAfterMark()
Description copied from interface:Writer
Buffer has data after marked position- Specified by:
bufIsDataAfterMark
in interfaceWriter
- Returns:
- indicate if there is data after marked position
-
resetMark
public byte[] resetMark()
Reset mark flag and send bytes after mark flag.
-
initPacket
public void initPacket()
Description copied from interface:Writer
reset sequences and position for sending a new packet- Specified by:
initPacket
in interfaceWriter
-
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
Description copied from interface:Writer
Close socket stream
-
getSequence
public byte getSequence()
Description copied from interface:Writer
Get current sequence object- Specified by:
getSequence
in interfaceWriter
- Returns:
- current sequence
-
-