Class AbstractPacketOutputStream
java.lang.Object
java.io.OutputStream
java.io.FilterOutputStream
org.mariadb.jdbc.internal.io.output.AbstractPacketOutputStream
- All Implemented Interfaces:
Closeable,Flushable,AutoCloseable,PacketOutputStream
- Direct Known Subclasses:
CompressPacketOutputStream,StandardPacketOutputStream
public abstract class AbstractPacketOutputStream
extends FilterOutputStream
implements PacketOutputStream
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final byteprotected byte[]private booleanprotected longprivate static final byteprivate static final intprivate intprotected intprotected final intprivate static final intprotected booleanprotected intprivate static final byteprotected intprotected Stringprivate static final intprotected LruTraceCacheprivate static final byteFields inherited from class java.io.FilterOutputStream
out -
Constructor Summary
ConstructorsConstructorDescriptionAbstractPacketOutputStream(OutputStream out, int maxQuerySizeToLog) Common feature to write data into socket, creating MariaDB Packet. -
Method Summary
Modifier and TypeMethodDescriptionbooleanvoidcheckMaxAllowedLength(int length) Count query size.booleancheckRemainingSize(int len) booleanvoidflush()Send packet to socket.protected abstract voidflushBuffer(boolean commandEnd) voidFlush to last mark.intabstract intprivate voidgrowBuffer(int len) Buffer growing use 4 size only to avoid creating/copying that are expensive operations.booleanisMarked()voidmark()voidpermitTrace(boolean permitTrace) byte[]Reset mark flag and send bytes after mark flag.abstract voidsetMaxAllowedPacket(int maxAllowedPacket) voidsetServerThreadId(long serverThreadId, Boolean isMaster) Set server thread id.voidsetTraceCache(LruTraceCache traceCache) abstract voidstartPacket(int seqNo) voidwrite(byte[] arr) voidwrite(byte[] arr, int off, int len) Write byte array to buffer.voidwrite(int value) Write byte into buffer, flush buffer to socket if needed.voidwrite(InputStream is, boolean escape, boolean noBackslashEscapes) Write stream into socket.voidwrite(InputStream is, long length, boolean escape, boolean noBackslashEscapes) Write stream into socket.voidWrite reader into socket.voidWrite reader into socket.voidvoidWrite string to socket.voidwriteBytes(byte value, int len) Write byte value, len times into buffer.voidwriteBytesEscaped(byte[] bytes, int len, boolean noBackslashEscapes) Write escape bytes to socket.abstract voidvoidwriteEmptyPacket(int seqNo) Send empty packet.voidwriteFieldLength(long length) Write field length into buffer, flush socket if needed.voidwriteInt(int value) Write int value into buffer.voidwriteLong(long value) Write long value into buffer.voidwriteShort(short value) Write short value into buffer.Methods inherited from class java.io.FilterOutputStream
closeMethods inherited from class java.io.OutputStream
nullOutputStreamMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.mariadb.jdbc.internal.io.output.PacketOutputStream
close, initialPacketPos
-
Field Details
-
QUOTE
private static final byte QUOTE- See Also:
-
DBL_QUOTE
private static final byte DBL_QUOTE- See Also:
-
ZERO_BYTE
private static final byte ZERO_BYTE- See Also:
-
BACKSLASH
private static final byte BACKSLASH- See Also:
-
SMALL_BUFFER_SIZE
private static final int SMALL_BUFFER_SIZE- See Also:
-
MEDIUM_BUFFER_SIZE
private static final int MEDIUM_BUFFER_SIZE- See Also:
-
LARGE_BUFFER_SIZE
private static final int LARGE_BUFFER_SIZE- See Also:
-
maxQuerySizeToLog
protected final int maxQuerySizeToLog -
buf
protected byte[] buf -
pos
protected int pos -
maxAllowedPacket
protected int maxAllowedPacket -
cmdLength
protected long cmdLength -
permitTrace
protected boolean permitTrace -
seqNo
protected int seqNo -
serverThreadLog
-
traceCache
-
mark
private int mark -
bufferContainDataAfterMark
private boolean bufferContainDataAfterMark
-
-
Constructor Details
-
AbstractPacketOutputStream
Common feature to write data into socket, creating MariaDB Packet.- Parameters:
out- socket outputStreammaxQuerySizeToLog- maximum query size to log
-
-
Method Details
-
getMaxPacketLength
public abstract int getMaxPacketLength() -
startPacket
public abstract void startPacket(int seqNo) - Specified by:
startPacketin interfacePacketOutputStream
-
flushBuffer
- Throws:
IOException
-
growBuffer
Buffer growing use 4 size only to avoid creating/copying that are expensive operations. possible size- SMALL_BUFFER_SIZE = 8k (default)
- MEDIUM_BUFFER_SIZE = 128k
- LARGE_BUFFER_SIZE = 1M
- getMaxPacketLength = 16M (+ 4 is using no compression)
- Parameters:
len- length to add- Throws:
IOException
-
writeEmptyPacket
Send empty packet.- Specified by:
writeEmptyPacketin interfacePacketOutputStream- Parameters:
seqNo- packet sequence- Throws:
IOException- if socket error occur.
-
writeEmptyPacket
- Specified by:
writeEmptyPacketin interfacePacketOutputStream- Throws:
IOException
-
flush
Send packet to socket.- Specified by:
flushin interfaceFlushable- Specified by:
flushin interfacePacketOutputStream- Overrides:
flushin classFilterOutputStream- Throws:
IOException- if socket error occur.
-
checkRemainingSize
public boolean checkRemainingSize(int len) - Specified by:
checkRemainingSizein interfacePacketOutputStream
-
checkMaxAllowedLength
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.- Specified by:
checkMaxAllowedLengthin interfacePacketOutputStream- Parameters:
length- additional length to query size- Throws:
MaxAllowedPacketException- if query has not to be send.
-
exceedMaxLength
public boolean exceedMaxLength()- Specified by:
exceedMaxLengthin interfacePacketOutputStream
-
getOutputStream
- Specified by:
getOutputStreamin interfacePacketOutputStream
-
writeShort
Write short value into buffer. flush buffer if too small.- Specified by:
writeShortin interfacePacketOutputStream- Parameters:
value- short value- Throws:
IOException- if socket error occur
-
writeInt
Write int value into buffer. flush buffer if too small.- Specified by:
writeIntin interfacePacketOutputStream- Parameters:
value- int value- Throws:
IOException- if socket error occur
-
writeLong
Write long value into buffer. flush buffer if too small.- Specified by:
writeLongin interfacePacketOutputStream- Parameters:
value- long value- Throws:
IOException- if socket error occur
-
writeBytes
Write byte value, len times into buffer. flush buffer if too small.- Specified by:
writeBytesin interfacePacketOutputStream- Parameters:
value- byte valuelen- number of time to write value.- Throws:
IOException- if socket error occur.
-
writeFieldLength
Write field length into buffer, flush socket if needed.- Specified by:
writeFieldLengthin interfacePacketOutputStream- Parameters:
length- field length- Throws:
IOException- if socket error occur.
-
write
Write byte into buffer, flush buffer to socket if needed.- Specified by:
writein interfacePacketOutputStream- Overrides:
writein classFilterOutputStream- Parameters:
value- byte to send- Throws:
IOException- if socket error occur.
-
write
- Specified by:
writein interfacePacketOutputStream- Overrides:
writein classFilterOutputStream- Throws:
IOException
-
write
Write byte array to buffer. If buffer is full, flush socket.- Specified by:
writein interfacePacketOutputStream- Overrides:
writein classFilterOutputStream- Parameters:
arr- byte arrayoff- offsetlen- byte length to write- Throws:
IOException- if socket error occur
-
write
- Specified by:
writein interfacePacketOutputStream- Throws:
IOException
-
write
Write string to socket.- Specified by:
writein interfacePacketOutputStream- Parameters:
str- stringescape- must be escapenoBackslashEscapes- escape method- Throws:
IOException- if socket error occur
-
write
Write stream into socket.- Specified by:
writein interfacePacketOutputStream- Parameters:
is- inputStreamescape- must be escapenoBackslashEscapes- escape method- Throws:
IOException- if socket error occur
-
write
public void write(InputStream is, long length, boolean escape, boolean noBackslashEscapes) throws IOException Write stream into socket.- Specified by:
writein interfacePacketOutputStream- Parameters:
is- inputStreamlength- write lengthescape- must be escapenoBackslashEscapes- escape method- Throws:
IOException- if socket error occur
-
write
Write reader into socket.- Specified by:
writein interfacePacketOutputStream- Parameters:
reader- readerescape- must be escapenoBackslashEscapes- escape method- Throws:
IOException- if socket error occur
-
write
public void write(Reader reader, long length, boolean escape, boolean noBackslashEscapes) throws IOException Write reader into socket.- Specified by:
writein interfacePacketOutputStream- Parameters:
reader- readerlength- write lengthescape- must be escapenoBackslashEscapes- escape method- Throws:
IOException- if socket error occur
-
writeBytesEscaped
Write escape bytes to socket.- Specified by:
writeBytesEscapedin interfacePacketOutputStream- Parameters:
bytes- byteslen- len to writenoBackslashEscapes- escape method- Throws:
IOException- if socket error occur
-
getMaxAllowedPacket
public int getMaxAllowedPacket()- Specified by:
getMaxAllowedPacketin interfacePacketOutputStream
-
setMaxAllowedPacket
public abstract void setMaxAllowedPacket(int maxAllowedPacket) - Specified by:
setMaxAllowedPacketin interfacePacketOutputStream
-
permitTrace
public void permitTrace(boolean permitTrace) - Specified by:
permitTracein interfacePacketOutputStream
-
setServerThreadId
Set server thread id.- Specified by:
setServerThreadIdin interfacePacketOutputStream- Parameters:
serverThreadId- current server thread id.isMaster- is server master
-
setTraceCache
- Specified by:
setTraceCachein interfacePacketOutputStream
-
mark
public void mark()- Specified by:
markin interfacePacketOutputStream
-
isMarked
public boolean isMarked()- Specified by:
isMarkedin interfacePacketOutputStream
-
flushBufferStopAtMark
Flush to last mark.- Specified by:
flushBufferStopAtMarkin interfacePacketOutputStream- Throws:
IOException- if flush fail.
-
bufferIsDataAfterMark
public boolean bufferIsDataAfterMark()- Specified by:
bufferIsDataAfterMarkin interfacePacketOutputStream
-
resetMark
public byte[] resetMark()Reset mark flag and send bytes after mark flag.- Specified by:
resetMarkin interfacePacketOutputStream- Returns:
- bytes after mark flag
-