Class PacketWriter
- java.lang.Object
-
- org.mariadb.jdbc.client.socket.impl.PacketWriter
-
-
Field Summary
Fields Modifier and Type Field Description private static byteBACKSLASHprotected byte[]bufinternal bufferprivate booleanbufContainDataAfterMarkprivate longcmdLengthprotected MutableBytecompressSequencecompressed packet sequenceprivate static byteDBL_QUOTEprivate static intLARGE_BUFFER_SIZEprivate static Loggerloggerprivate intmarkprivate static intMAX_PACKET_LENGTHprivate java.lang.IntegermaxAllowedPacketprivate intmaxPacketLengthprivate intmaxQuerySizeToLogprivate static intMEDIUM_BUFFER_SIZEprivate java.io.OutputStreamoutprivate booleanpermitTraceprotected intposbuffer positionprivate static byteQUOTEprotected MutableBytesequencepacket sequenceprivate java.lang.StringserverThreadLogstatic intSMALL_BUFFER_SIZEinitial buffer sizeprivate static byteZERO_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 bufferbooleanbufIsDataAfterMark()Buffer has data after marked positionprivate voidcheckMaxAllowedLength(int length)Count query size.voidclose()Close socket streamvoidflush()Send packet to socket.voidflushBufferStopAtMark()Flush to last mark.voidflushPipeline()Send packet to buffered outputstream without flushinglonggetCmdLength()get current command lengthbytegetSequence()Get current sequence objectprivate voidgrowBuffer(int len)buf growing use 4 size only to avoid creating/copying that are expensive operations.booleanhasFlushed()Current command has flushed packet to socketvoidinitPacket()reset sequences and position for sending a new packetbooleanisMarked()has some position been markedvoidmark()mark positionvoidpermitTrace(boolean permitTrace)Indicate if logging trace are permittedintpos()get current positionvoidpos(int pos)position setterbyte[]resetMark()Reset mark flag and send bytes after mark flag.voidsetServerThreadId(java.lang.Long serverThreadId, HostAddress hostAddress)Set server thread id.booleanthrowMaxAllowedLength(int length)must a max allowed length exception be thrownvoidwriteAscii(java.lang.String str)Write ascii string to buffervoidwriteByte(int value)Write byte into buf, flush buf to socket if needed.voidwriteBytes(byte[] arr)Write byte array to buffervoidwriteBytes(byte[] arr, int off, int len)Write byte array to buf.voidwriteBytesAtPos(byte[] arr, int pos)Write byte array to buffer at a specific positionvoidwriteBytesEscaped(byte[] bytes, int len, boolean noBackslashEscapes)Write escape bytes to socket.voidwriteDouble(double value)Write Double binary value to buffervoidwriteEmptyPacket()Send empty packet.voidwriteFloat(float value)Write float binary value to buffervoidwriteInt(int value)Write int value into buf.voidwriteLength(long length)Write field length into buf, flush socket if needed.voidwriteLong(long value)Write long value into buf.voidwriteShort(short value)Write short value into buf.protected voidwriteSocket(boolean commandEnd)Flush the internal buf.voidwriteString(java.lang.String str)Write utf8 string to buffervoidwriteStringEscaped(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.IOExceptionposition setter
-
getCmdLength
public long getCmdLength()
get current command length- Specified by:
getCmdLengthin interfaceWriter- Returns:
- current command length
-
writeByte
public void writeByte(int value) throws java.io.IOExceptionWrite byte into buf, flush buf to socket if needed.
-
writeShort
public void writeShort(short value) throws java.io.IOExceptionWrite short value into buf. flush buf if too small.- Specified by:
writeShortin interfaceWriter- Parameters:
value- short value- Throws:
java.io.IOException- if socket error occur
-
writeInt
public void writeInt(int value) throws java.io.IOExceptionWrite int value into buf. flush buf if too small.
-
writeLong
public void writeLong(long value) throws java.io.IOExceptionWrite long value into buf. flush buf if too small.
-
writeDouble
public void writeDouble(double value) throws java.io.IOExceptionDescription copied from interface:WriterWrite Double binary value to buffer- Specified by:
writeDoublein interfaceWriter- Parameters:
value- double value- Throws:
java.io.IOException- if socket error occur
-
writeFloat
public void writeFloat(float value) throws java.io.IOExceptionDescription copied from interface:WriterWrite float binary value to buffer- Specified by:
writeFloatin interfaceWriter- Parameters:
value- float value- Throws:
java.io.IOException- if socket error occur
-
writeBytes
public void writeBytes(byte[] arr) throws java.io.IOExceptionDescription copied from interface:WriterWrite byte array to buffer- Specified by:
writeBytesin interfaceWriter- Parameters:
arr- bytes- Throws:
java.io.IOException- if socket error occur
-
writeBytesAtPos
public void writeBytesAtPos(byte[] arr, int pos)Description copied from interface:WriterWrite byte array to buffer at a specific position- Specified by:
writeBytesAtPosin interfaceWriter- Parameters:
arr- bytespos- position
-
writeBytes
public void writeBytes(byte[] arr, int off, int len) throws java.io.IOExceptionWrite byte array to buf. If buf is full, flush socket.- Specified by:
writeBytesin 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.IOExceptionWrite field length into buf, flush socket if needed.- Specified by:
writeLengthin interfaceWriter- Parameters:
length- field length- Throws:
java.io.IOException- if socket error occur.
-
writeAscii
public void writeAscii(java.lang.String str) throws java.io.IOExceptionDescription copied from interface:WriterWrite ascii string to buffer- Specified by:
writeAsciiin interfaceWriter- Parameters:
str- string- Throws:
java.io.IOException- if socket error occurs
-
writeString
public void writeString(java.lang.String str) throws java.io.IOExceptionDescription copied from interface:WriterWrite utf8 string to buffer- Specified by:
writeStringin 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.IOExceptionWrite string to socket.- Specified by:
writeStringEscapedin 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.IOExceptionWrite escape bytes to socket.- Specified by:
writeBytesEscapedin 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.IOExceptionbuf 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.IOExceptionSend empty packet.- Specified by:
writeEmptyPacketin interfaceWriter- Throws:
java.io.IOException- if socket error occur.
-
flush
public void flush() throws java.io.IOExceptionSend packet to socket.
-
flushPipeline
public void flushPipeline() throws java.io.IOExceptionDescription copied from interface:WriterSend packet to buffered outputstream without flushing- Specified by:
flushPipelinein interfaceWriter- Throws:
java.io.IOException- if socket error occur.
-
checkMaxAllowedLength
private void checkMaxAllowedLength(int length) throws MaxAllowedPacketExceptionCount 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:Writermust a max allowed length exception be thrown- Specified by:
throwMaxAllowedLengthin interfaceWriter- Parameters:
length- command length- Returns:
- true if too big
-
permitTrace
public void permitTrace(boolean permitTrace)
Description copied from interface:WriterIndicate if logging trace are permitted- Specified by:
permitTracein interfaceWriter- Parameters:
permitTrace- permits trace to be logged
-
setServerThreadId
public void setServerThreadId(java.lang.Long serverThreadId, HostAddress hostAddress)Set server thread id.- Specified by:
setServerThreadIdin interfaceWriter- Parameters:
serverThreadId- current server thread id.hostAddress- host information
-
mark
public void mark()
Description copied from interface:Writermark position
-
isMarked
public boolean isMarked()
Description copied from interface:Writerhas some position been marked
-
hasFlushed
public boolean hasFlushed()
Description copied from interface:WriterCurrent command has flushed packet to socket- Specified by:
hasFlushedin interfaceWriter- Returns:
- indicate if some packet have been flushed
-
flushBufferStopAtMark
public void flushBufferStopAtMark() throws java.io.IOExceptionFlush to last mark.- Specified by:
flushBufferStopAtMarkin interfaceWriter- Throws:
java.io.IOException- if flush fail.
-
bufIsDataAfterMark
public boolean bufIsDataAfterMark()
Description copied from interface:WriterBuffer has data after marked position- Specified by:
bufIsDataAfterMarkin 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:Writerreset sequences and position for sending a new packet- Specified by:
initPacketin interfaceWriter
-
writeSocket
protected void writeSocket(boolean commandEnd) throws java.io.IOExceptionFlush the internal buf.- Parameters:
commandEnd- command end- Throws:
java.io.IOException- id connection error occur.
-
close
public void close() throws java.io.IOExceptionDescription copied from interface:WriterClose socket stream
-
getSequence
public byte getSequence()
Description copied from interface:WriterGet current sequence object- Specified by:
getSequencein interfaceWriter- Returns:
- current sequence
-
-