Package org.mariadb.jdbc.client.impl
Class StandardClient
- java.lang.Object
-
- org.mariadb.jdbc.client.impl.StandardClient
-
- All Implemented Interfaces:
java.lang.AutoCloseable
,Client
- Direct Known Subclasses:
ReplayClient
public class StandardClient extends java.lang.Object implements Client, java.lang.AutoCloseable
Connection client
-
-
Field Summary
Fields Modifier and Type Field Description private AuthenticationPlugin
authPlugin
private byte[]
certFingerprint
private boolean
closed
private MutableByte
compressionSequence
private Configuration
conf
protected Context
context
connection contextprivate boolean
disablePipeline
protected ExceptionFactory
exceptionFactory
connection exception factoryprivate HostAddress
hostAddress
private ClosableLock
lock
private static Logger
logger
private Reader
reader
private static java.util.regex.Pattern
REDIRECT_PATTERN
private java.util.function.Consumer<java.lang.String>
redirectConsumer
private MutableByte
sequence
private java.net.Socket
socket
private int
socketTimeout
private ClientMessage
streamMsg
private Statement
streamStmt
protected Writer
writer
packet writer
-
Constructor Summary
Constructors Constructor Description StandardClient(Configuration conf, HostAddress hostAddress, ClosableLock lock, boolean skipPostCommands)
Constructor
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
abort(java.util.concurrent.Executor executor)
Abort current connectionprivate void
assignStream(java.io.OutputStream out, java.io.InputStream in, Configuration conf, java.lang.Long threadId)
void
authenticationHandler(Credential credential, HostAddress hostAddress)
protected void
checkNotClosed()
Throw an exception if client is closedvoid
close()
Close clientvoid
closePrepare(Prepare prepare)
Close prepare commandprivate void
closeSocket()
java.lang.String
createSessionVariableQuery(Context context)
Create session variable if configuration requires additional commands.protected void
destroySocket()
Closing socket in case of Connection error after socket creation.java.util.List<Completion>
execute(ClientMessage message, boolean canRedo)
Send client message and read resultjava.util.List<Completion>
execute(ClientMessage message, Statement stmt, boolean canRedo)
Send client message and read resultjava.util.List<Completion>
execute(ClientMessage message, Statement stmt, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion, boolean canRedo)
Send client message and read resultjava.util.List<Completion>
executePipeline(ClientMessage[] messages, Statement stmt, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion, boolean canRedo)
Send client messages pipelining and read resultContext
getContext()
Get connection contextExceptionFactory
getExceptionFactory()
Get connection exception factoryHostAddress
getHostAddress()
Get connection hostjava.lang.String
getSocketIp()
Get current socket IP or null (for Pipe / unix socket)int
getSocketTimeout()
get socket timeoutprivate void
handleTimezone()
load server timezone and ensure this corresponds to client timezoneboolean
isClosed()
Is client closedboolean
isPrimary()
is current client writer or read-onlyprivate void
postConnectionQueries()
Completion
readPacket(ClientMessage message)
Read a MySQL packet from socketCompletion
readPacket(Statement stmt, ClientMessage message, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion)
Read server response packet.void
readResponse(ClientMessage message)
Read server responsejava.util.List<Completion>
readResponse(Statement stmt, ClientMessage message, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion)
Read server responses for a client messageprivate void
readResults(Statement stmt, ClientMessage message, java.util.List<Completion> completions, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion)
void
readStreamingResults(java.util.List<Completion> completions, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion)
Read resultsvoid
redirect(java.lang.String redirectUrl)
void
reset()
Reset connectionint
sendQuery(ClientMessage message)
Send client message to servervoid
setReadOnly(boolean readOnly)
Switch to a writer/read-only connection, no effet on mono-connectionvoid
setSocketTimeout(int milliseconds)
Set socket timeoutjavax.net.ssl.SSLSocket
sslWrapper(HostAddress hostAddress, java.net.Socket socket, long clientCapabilities, byte exchangeCharset, Context context, Writer writer)
Create SSL wrapperprivate static boolean
validateFingerPrint(AuthenticationPlugin authPlugin, byte[] validationHash, byte[] fingerPrint, Credential credential, byte[] seed)
-
-
-
Field Detail
-
logger
private static final Logger logger
-
exceptionFactory
protected final ExceptionFactory exceptionFactory
connection exception factory
-
REDIRECT_PATTERN
private static final java.util.regex.Pattern REDIRECT_PATTERN
-
socket
private java.net.Socket socket
-
sequence
private final MutableByte sequence
-
compressionSequence
private final MutableByte compressionSequence
-
lock
private final ClosableLock lock
-
conf
private Configuration conf
-
authPlugin
private AuthenticationPlugin authPlugin
-
hostAddress
private HostAddress hostAddress
-
disablePipeline
private final boolean disablePipeline
-
context
protected Context context
connection context
-
writer
protected Writer writer
packet writer
-
closed
private boolean closed
-
reader
private Reader reader
-
certFingerprint
private byte[] certFingerprint
-
streamStmt
private Statement streamStmt
-
streamMsg
private ClientMessage streamMsg
-
socketTimeout
private int socketTimeout
-
redirectConsumer
private final java.util.function.Consumer<java.lang.String> redirectConsumer
-
-
Constructor Detail
-
StandardClient
public StandardClient(Configuration conf, HostAddress hostAddress, ClosableLock lock, boolean skipPostCommands) throws java.sql.SQLException
Constructor- Parameters:
conf
- configurationhostAddress
- hostlock
- thread lockerskipPostCommands
- must connection post command be skipped- Throws:
java.sql.SQLException
- if connection fails
-
-
Method Detail
-
authenticationHandler
public void authenticationHandler(Credential credential, HostAddress hostAddress) throws java.io.IOException, java.sql.SQLException
- Parameters:
credential
- credentialhostAddress
- host address- Throws:
java.io.IOException
- if any socket error occursjava.sql.SQLException
- if any other kind of issue occurs
-
validateFingerPrint
private static boolean validateFingerPrint(AuthenticationPlugin authPlugin, byte[] validationHash, byte[] fingerPrint, Credential credential, byte[] seed)
-
redirect
public void redirect(java.lang.String redirectUrl)
-
sslWrapper
public javax.net.ssl.SSLSocket sslWrapper(HostAddress hostAddress, java.net.Socket socket, long clientCapabilities, byte exchangeCharset, Context context, Writer writer) throws java.io.IOException, java.sql.SQLException
Create SSL wrapper- Parameters:
hostAddress
- hostsocket
- socketclientCapabilities
- client capabilitiesexchangeCharset
- connection charsetcontext
- connection contextwriter
- socket writer- Returns:
- SSLsocket
- Throws:
java.io.IOException
- if any socket error occursjava.sql.SQLException
- for any other kind of error
-
assignStream
private void assignStream(java.io.OutputStream out, java.io.InputStream in, Configuration conf, java.lang.Long threadId)
-
destroySocket
protected void destroySocket()
Closing socket in case of Connection error after socket creation.
-
handleTimezone
private void handleTimezone() throws java.sql.SQLException
load server timezone and ensure this corresponds to client timezone- Throws:
java.sql.SQLException
- if any socket error.
-
postConnectionQueries
private void postConnectionQueries() throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
createSessionVariableQuery
public java.lang.String createSessionVariableQuery(Context context)
Create session variable if configuration requires additional commands.- Parameters:
context
- context- Returns:
- sql setting session command
-
setReadOnly
public void setReadOnly(boolean readOnly) throws java.sql.SQLException
Description copied from interface:Client
Switch to a writer/read-only connection, no effet on mono-connection- Specified by:
setReadOnly
in interfaceClient
- Parameters:
readOnly
- must use read-only connection- Throws:
java.sql.SQLException
- if any error occurs
-
sendQuery
public int sendQuery(ClientMessage message) throws java.sql.SQLException
Send client message to server- Parameters:
message
- client message- Returns:
- number of command send
- Throws:
java.sql.SQLException
- if socket error occurs
-
execute
public java.util.List<Completion> execute(ClientMessage message, boolean canRedo) throws java.sql.SQLException
Description copied from interface:Client
Send client message and read result
-
execute
public java.util.List<Completion> execute(ClientMessage message, Statement stmt, boolean canRedo) throws java.sql.SQLException
Description copied from interface:Client
Send client message and read result
-
executePipeline
public java.util.List<Completion> executePipeline(ClientMessage[] messages, Statement stmt, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion, boolean canRedo) throws java.sql.SQLException
Description copied from interface:Client
Send client messages pipelining and read result- Specified by:
executePipeline
in interfaceClient
- Parameters:
messages
- client messagestmt
- statementfetchSize
- fetch sizemaxRows
- maximum number of rows. 0 = allresultSetConcurrency
- concurrencyresultSetType
- result-set typecloseOnCompletion
- close statement on completioncanRedo
- can client message be redone in case of failover- Returns:
- results
- Throws:
java.sql.SQLException
- if any error occurs
-
execute
public java.util.List<Completion> execute(ClientMessage message, Statement stmt, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion, boolean canRedo) throws java.sql.SQLException
Description copied from interface:Client
Send client message and read result- Specified by:
execute
in interfaceClient
- Parameters:
message
- client messagestmt
- statementfetchSize
- fetch sizemaxRows
- maximum number of rows. 0 = allresultSetConcurrency
- concurrencyresultSetType
- result-set typecloseOnCompletion
- close statement on completioncanRedo
- can client message be redone in case of failover- Returns:
- results
- Throws:
java.sql.SQLException
- if any error occurs
-
readResponse
public java.util.List<Completion> readResponse(Statement stmt, ClientMessage message, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion) throws java.sql.SQLException
Read server responses for a client message- Parameters:
stmt
- statement that issue the messagemessage
- client message sentfetchSize
- fetch sizemaxRows
- maximum number of rowsresultSetConcurrency
- concurrencyresultSetType
- result-set typecloseOnCompletion
- close statement on resultset completion- Returns:
- list of result
- Throws:
java.sql.SQLException
- if any error occurs
-
readResponse
public void readResponse(ClientMessage message) throws java.sql.SQLException
Read server response- Parameters:
message
- client message that was sent- Throws:
java.sql.SQLException
- if any error occurs
-
closePrepare
public void closePrepare(Prepare prepare) throws java.sql.SQLException
Description copied from interface:Client
Close prepare command- Specified by:
closePrepare
in interfaceClient
- Parameters:
prepare
- prepare command- Throws:
java.sql.SQLException
- if any error occurs
-
readStreamingResults
public void readStreamingResults(java.util.List<Completion> completions, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion) throws java.sql.SQLException
Description copied from interface:Client
Read results- Specified by:
readStreamingResults
in interfaceClient
- Parameters:
completions
- List that will have the new resultsfetchSize
- fetch sizemaxRows
- maximum number of rows. 0 = allresultSetConcurrency
- concurrencyresultSetType
- result-set typecloseOnCompletion
- close statement on completion- Throws:
java.sql.SQLException
- if any error occurs
-
readResults
private void readResults(Statement stmt, ClientMessage message, java.util.List<Completion> completions, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
readPacket
public Completion readPacket(ClientMessage message) throws java.sql.SQLException
Read a MySQL packet from socket- Parameters:
message
- client message issuing the result- Returns:
- a mysql result
- Throws:
java.sql.SQLException
- if any error occurs
-
readPacket
public Completion readPacket(Statement stmt, ClientMessage message, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion) throws java.sql.SQLException
Read server response packet.- Parameters:
stmt
- current statement (null if internal)message
- current messagefetchSize
- default fetch sizemaxRows
- maximum row numberresultSetConcurrency
- concurrencyresultSetType
- typecloseOnCompletion
- must resultset close statement on completion- Returns:
- Completion
- Throws:
java.sql.SQLException
- if any exception- See Also:
- server response packets
-
checkNotClosed
protected void checkNotClosed() throws java.sql.SQLException
Throw an exception if client is closed- Throws:
java.sql.SQLException
- if closed
-
closeSocket
private void closeSocket()
-
isClosed
public boolean isClosed()
Description copied from interface:Client
Is client closed
-
getContext
public Context getContext()
Description copied from interface:Client
Get connection context- Specified by:
getContext
in interfaceClient
- Returns:
- connection context
-
abort
public void abort(java.util.concurrent.Executor executor) throws java.sql.SQLException
Description copied from interface:Client
Abort current connection
-
getSocketTimeout
public int getSocketTimeout()
Description copied from interface:Client
get socket timeout- Specified by:
getSocketTimeout
in interfaceClient
- Returns:
- socket timeout
-
setSocketTimeout
public void setSocketTimeout(int milliseconds) throws java.sql.SQLException
Description copied from interface:Client
Set socket timeout- Specified by:
setSocketTimeout
in interfaceClient
- Parameters:
milliseconds
- timeout- Throws:
java.sql.SQLException
- if any error occurs
-
close
public void close()
Description copied from interface:Client
Close client
-
getSocketIp
public java.lang.String getSocketIp()
Description copied from interface:Client
Get current socket IP or null (for Pipe / unix socket)- Specified by:
getSocketIp
in interfaceClient
- Returns:
- Socket current IP
-
isPrimary
public boolean isPrimary()
Description copied from interface:Client
is current client writer or read-only
-
getExceptionFactory
public ExceptionFactory getExceptionFactory()
Description copied from interface:Client
Get connection exception factory- Specified by:
getExceptionFactory
in interfaceClient
- Returns:
- connection exception factory
-
getHostAddress
public HostAddress getHostAddress()
Description copied from interface:Client
Get connection host- Specified by:
getHostAddress
in interfaceClient
- Returns:
- connection host
-
-