Package com.clickhouse.client
Class ClickHouseRequest<SelfT extends ClickHouseRequest<SelfT>>
java.lang.Object
com.clickhouse.client.ClickHouseRequest<SelfT>
- All Implemented Interfaces:
Serializable
- Direct Known Subclasses:
ClickHouseRequest.Mutation
public class ClickHouseRequest<SelfT extends ClickHouseRequest<SelfT>>
extends Object
implements Serializable
Request object holding references to
ClickHouseClient
,
ClickHouseNode
, format, sql, options and settings etc. for execution.- See Also:
-
Nested Class Summary
-
Field Summary
Modifier and TypeFieldDescriptionprotected ClickHouseConfigChangeListener<ClickHouseRequest<?>>
protected ClickHouseConfig
protected final List<ClickHouseExternalTable>
protected ClickHouseDeferredValue<ClickHouseInputStream>
protected final AtomicReference<ClickHouseRequestManager>
protected final ClickHouseFreezableMap<ClickHouseOption,
Serializable> protected ClickHouseDeferredValue<ClickHouseOutputStream>
protected ClickHouseParameterizedQuery
protected String
protected final Function<ClickHouseNodeSelector,
ClickHouseNode> protected BiConsumer<ClickHouseNode,
ClickHouseNode> protected final AtomicReference<ClickHouseNode>
protected final ClickHouseFreezableMap<String,
Serializable> protected String
protected final AtomicReference<ClickHouseTransaction>
protected ClickHouseWriter
-
Constructor Summary
ModifierConstructorDescriptionprotected
ClickHouseRequest
(ClickHouseClient client, Function<ClickHouseNodeSelector, ClickHouseNode> server, AtomicReference<ClickHouseNode> ref, Map<ClickHouseOption, Serializable> options, boolean sealed) -
Method Summary
Modifier and TypeMethodDescriptionAdds an external table.protected <T> T
changeProperty
(String property, T oldValue, T newValue) protected ClickHouseNode
changeServer
(ClickHouseNode currentServer, ClickHouseNode newServer) protected void
Clears session configuration including session id, session check(whether to validate the id), and session timeout.Clears server settings.compressServerResponse
(boolean enable) Enable or disable compression of server response.compressServerResponse
(boolean enable, ClickHouseCompression compressAlgorithm) Enable or disable compression of server response.compressServerResponse
(boolean enable, ClickHouseCompression compressAlgorithm, int compressLevel) Enable or disable compression of server response.compressServerResponse
(ClickHouseCompression compressAlgorithm) Enable or disable compression of server response.copy()
Creates a copy of this request including listeners.decompressClientRequest
(boolean enable) Enable or disable compression of client request.decompressClientRequest
(boolean enable, ClickHouseCompression compressAlgorithm) Enable or disable compression of client request.decompressClientRequest
(boolean enable, ClickHouseCompression compressAlgorithm, int compressLevel) Enable or disable compression of client request.decompressClientRequest
(ClickHouseCompression compressAlgorithm) Enable or disable compression of client request.execute()
Executes the request.Synchronous version ofexecute()
.Executes the request within an implicit transaction.executeWithinTransaction
(boolean useImplicitTransaction) Deprecated.will be removed in the future, once the minimum supported version of ClickHouse is 22.7 or aboveexternal
(ClickHouseExternalTable table, ClickHouseExternalTable... more) Sets one or more external tables.external
(Collection<ClickHouseExternalTable> tables) Sets external tables.format
(ClickHouseFormat format) Sets format to be used for communication between server and client.Freezes options to discard future changes.Freezes settings to discard future changes.protected ClickHouseClient
Gets client associated with the request.Gets request configuration.Gets immutable list of external tables.Gets data format used for communication between server and client.Gets input stream.Gets manager for the request, which defaults toClickHouseRequestManager.getInstance()
.Gets output stream.Gets prepared query, which is a loosely parsed query with the origianl query and list of parameters.protected String
getQuery()
Gets query, either set byquery()
ortable()
.Gets query id.final ClickHouseNode
Gets the server currently connected to.Gets session id.<T extends Serializable>
TgetSetting
(String setting, Class<T> valueType) Gets typed setting value.<T extends Serializable>
TgetSetting
(String setting, T defaultValue) Gets typed setting value.Gets immutable settings.Gets list of SQL statements.getStatements
(boolean withSettings) Gets list of SQL statements.Gets custom writer for writing raw request.boolean
Checks if the request contains any input stream or custom writer.boolean
hasOption
(ClickHouseOption option) Checks if a option has been defined or not.boolean
Checks if a option has been defined or not.boolean
Checks if the response should be redirected to an output stream, which was defined by one ofoutput(*)
methods.boolean
hasSetting
(String setting) Checks if a setting has been defined or not.boolean
isSealed()
Checks if the request is sealed(immutable).boolean
Checks if the request is bounded with a transaction.manager
(ClickHouseRequestManager manager) Sets request manager which is responsible for generating query ID and session ID, as well as transaction creation.option
(ClickHouseOption option, Serializable value) Sets an option.options
(Map<ClickHouseOption, Serializable> options) Sets all options.options
(Properties options) Sets all options.Sets output stream, to which response will be redirected.output
(ClickHouseOutputStream output) Sets output stream, to which response will be redirected.output
(ClickHousePassThruStream stream) Sets pass-thru stream, to which response will be redirected.output
(OutputStream output) Sets output stream, to which response will be redirected.Sets output file, to which response will be redirected.output
(String file, ClickHouseCompression compression) Sets compressed output file, to which response will be redirected.output
(String file, ClickHouseCompression compression, int compressionLevel) Sets compressed output file, to which response will be redirected.params
(ClickHouseValue[] values) Sets parameters wrapped byClickHouseValue
.params
(ClickHouseValue value, ClickHouseValue... more) Sets parameters wrapped byClickHouseValue
.Set raw parameters, which will later be stringified usingClickHouseValues.convertToSqlExpression(Object)
.Set raw parameters, which will later be stringified usingClickHouseValues.convertToSqlExpression(Object)
.Sets stringified parameters which are used to substitude named parameters in SQL query without further transformation and validation.Sets stringified parameters which are used to substitude named parameters in SQL query without further transformation and validation.params
(Collection<String> values) Sets stringified parameters.Sets named parameters.Sets parameterized query.query
(ClickHouseParameterizedQuery query, String queryId) Sets parameterized query and optinally query id.Sets query.Sets query and optinally query id.removeExternal
(ClickHouseExternalTable external) Removes an external table.removeExternal
(String name) Removes an external table by name.removeOption
(ClickHouseOption option) Removes an option.removeSetting
(String setting) Removes a setting.reset()
Resets the request to start all over.protected void
seal()
Creates a sealed request, which is an immutable copy of the current request.Sets current session using custom id.Sets session.Sets current session.Sets current session.set
(String setting, Serializable value) Sets a setting.Sets a setting.final SelfT
setChangeListener
(ClickHouseConfigChangeListener<ClickHouseRequest<?>> listener) Sets thread-safe change listener.final SelfT
setServerListener
(BiConsumer<ClickHouseNode, ClickHouseNode> listener) Sets thread-safe server change listener.settings
(Map<String, Serializable> settings) Sets all server settings.Sets target table.Sets target table and optionally query id.Creates and starts a transaction.transaction
(int timeout) Creates and starts a transaction immediately.transaction
(ClickHouseTransaction transaction) Sets transaction.Unfreezes options to accept future changes.Unfreezes settings to accept future changes.Changes current database.write()
Creates a new request for mutation.
-
Field Details
-
managerRef
-
server
-
serverRef
-
txRef
-
externalTables
-
options
-
settings
-
namedParameters
-
writer
-
input
-
output
-
queryId
-
sql
-
preparedQuery
-
changeListener
-
serverListener
-
config
-
statements
-
-
Constructor Details
-
ClickHouseRequest
protected ClickHouseRequest(ClickHouseClient client, Function<ClickHouseNodeSelector, ClickHouseNode> server, AtomicReference<ClickHouseNode> ref, Map<ClickHouseOption, Serializable> options, boolean sealed)
-
-
Method Details
-
changeProperty
-
changeServer
-
checkSealed
protected void checkSealed() -
getClient
Gets client associated with the request.- Returns:
- non-null client
-
getQuery
Gets query, either set byquery()
ortable()
.- Returns:
- sql query
-
resetCache
protected void resetCache() -
copy
Creates a copy of this request including listeners. Please pay attention that the same node reference (returned fromgetServer()
) will be copied to the new request as well, meaning failover will change node for both requests.- Returns:
- copy of this request
-
getManager
Gets manager for the request, which defaults toClickHouseRequestManager.getInstance()
.- Returns:
- non-null request manager
-
isSealed
public boolean isSealed()Checks if the request is sealed(immutable).- Returns:
- true if the request is sealed; false otherwise
-
isTransactional
public boolean isTransactional()Checks if the request is bounded with a transaction.- Returns:
- true if the request is bounded with a transaction; false otherwise
-
hasInputStream
public boolean hasInputStream()Checks if the request contains any input stream or custom writer.- Returns:
- true if there's input stream or customer writer; false otherwise
-
hasOutputStream
public boolean hasOutputStream()Checks if the response should be redirected to an output stream, which was defined by one ofoutput(*)
methods.- Returns:
- true if response should be redirected to an output stream; false otherwise
-
getServer
Gets the server currently connected to. The initial value was determined by theFunction
passed to constructor, and it may be changed over time when failover is enabled.- Returns:
- non-null node
-
getConfig
Gets request configuration.- Returns:
- request configuration
-
getTransaction
-
getChangeListener
-
getServerListener
-
getInputStream
Gets input stream.- Returns:
- input stream
-
getWriter
Gets custom writer for writing raw request.- Returns:
- custom writer
-
getOutputStream
Gets output stream.- Returns:
- output stream
-
getExternalTables
Gets immutable list of external tables.- Returns:
- immutable list of external tables
-
getFormat
Gets data format used for communication between server and client.- Returns:
- data format used for communication between server and client
-
getQueryId
Gets query id.- Returns:
- query id
-
getPreparedQuery
Gets prepared query, which is a loosely parsed query with the origianl query and list of parameters.- Returns:
- prepared query
-
freezeSettings
Freezes settings to discard future changes.- Returns:
- the request itself
-
unfreezeSettings
Unfreezes settings to accept future changes.- Returns:
- the request itself
-
getSetting
Gets typed setting value.- Type Parameters:
T
- type of the setting value- Parameters:
setting
- non-null setting keyvalueType
- non-null value type- Returns:
- non-null value
-
getSetting
Gets typed setting value.- Type Parameters:
T
- type of the setting value- Parameters:
setting
- non-null setting keydefaultValue
- non-null default value- Returns:
- non-null value
-
hasSetting
Checks if a setting has been defined or not.- Parameters:
setting
- setting- Returns:
- true if the setting has been defined; false otherwise
-
getSettings
Gets immutable settings.- Returns:
- immutable settings
-
getSessionId
Gets session id.- Returns:
- session id
-
getStatements
Gets list of SQL statements. Same asgetStatements(true)
.- Returns:
- list of SQL statements
-
getStatements
Gets list of SQL statements.- Parameters:
withSettings
- true to treat settings as SQL statement; false otherwise- Returns:
- list of SQL statements
-
compressServerResponse
Enable or disable compression of server response. Pay attention thatClickHouseClientOption.COMPRESS_ALGORITHM
andClickHouseClientOption.COMPRESS_LEVEL
will be used.- Parameters:
enable
- true to enable compression of server response; false otherwise- Returns:
- the request itself
-
compressServerResponse
Enable or disable compression of server response. Pay attention thatClickHouseClientOption.COMPRESS_ALGORITHM
andClickHouseClientOption.COMPRESS_LEVEL
will be used.- Parameters:
compressAlgorithm
- compression algorihtm, null orClickHouseCompression.NONE
means no compression- Returns:
- the request itself
-
compressServerResponse
Enable or disable compression of server response. Pay attention thatClickHouseClientOption.COMPRESS_LEVEL
will be used.- Parameters:
enable
- true to enable compression of server response; false otherwisecompressAlgorithm
- compression algorithm, null is treated asClickHouseCompression.NONE
orClickHouseClientOption.COMPRESS_ALGORITHM
depending on whether enabled- Returns:
- the request itself
-
compressServerResponse
public SelfT compressServerResponse(boolean enable, ClickHouseCompression compressAlgorithm, int compressLevel) Enable or disable compression of server response.- Parameters:
enable
- true to enable compression of server response; false otherwisecompressAlgorithm
- compression algorithm, null is treated asClickHouseCompression.NONE
orClickHouseClientOption.COMPRESS_ALGORITHM
depending on whether enabledcompressLevel
- compression level- Returns:
- the request itself
-
decompressClientRequest
Enable or disable compression of client request. Pay attention thatClickHouseClientOption.DECOMPRESS_ALGORITHM
andClickHouseClientOption.DECOMPRESS_LEVEL
will be used.- Parameters:
enable
- true to enable compression of client request; false otherwise- Returns:
- the request itself
-
decompressClientRequest
Enable or disable compression of client request. Pay attention thatClickHouseClientOption.DECOMPRESS_LEVEL
will be used.- Parameters:
compressAlgorithm
- compression algorithm, null is treated asClickHouseCompression.NONE
orClickHouseClientOption.DECOMPRESS_ALGORITHM
depending on whether enabled- Returns:
- the request itself
-
decompressClientRequest
Enable or disable compression of client request. Pay attention thatClickHouseClientOption.DECOMPRESS_LEVEL
will be used.- Parameters:
enable
- true to enable compression of client request; false otherwisecompressAlgorithm
- compression algorithm, null is treated asClickHouseCompression.NONE
orClickHouseClientOption.DECOMPRESS_ALGORITHM
depending on whether enabled- Returns:
- the request itself
-
decompressClientRequest
public SelfT decompressClientRequest(boolean enable, ClickHouseCompression compressAlgorithm, int compressLevel) Enable or disable compression of client request.- Parameters:
enable
- true to enable compression of client request; false otherwisecompressAlgorithm
- compression algorithm, null is treated asClickHouseCompression.NONE
compressLevel
- compression level- Returns:
- the request itself
-
addExternal
Adds an external table.- Parameters:
table
- non-null external table- Returns:
- the request itself
-
external
Sets one or more external tables.- Parameters:
table
- non-null external tablemore
- more external tables- Returns:
- the request itself
-
external
Sets external tables.- Parameters:
tables
- non-null external tables- Returns:
- the request itself
-
format
Sets format to be used for communication between server and client.- Parameters:
format
- preferred format,null
means reset to default- Returns:
- the request itself
-
manager
Sets request manager which is responsible for generating query ID and session ID, as well as transaction creation.- Parameters:
manager
- request manager- Returns:
- the request itself
-
freezeOptions
Freezes options to discard future changes.- Returns:
- the request itself
-
unfreezeOptions
Unfreezes options to accept future changes.- Returns:
- the request itself
-
option
Sets an option.option
is for configuring client's behaviour, whilesetting
is for server.- Parameters:
option
- optionvalue
- value- Returns:
- the request itself
-
options
Sets all options.option
is for configuring client's behaviour, whilesetting
is for server.- Parameters:
options
- options- Returns:
- the request itself
-
options
Sets all options.option
is for configuring client's behaviour, whilesetting
is for server.- Parameters:
options
- options- Returns:
- the request itself
-
hasOption
Checks if a option has been defined or not.- Parameters:
option
- option- Returns:
- true if the option has been defined; false otherwise
-
hasOption
Checks if a option has been defined or not.- Parameters:
key
- key of the option- Returns:
- true if the option has been defined; false otherwise
-
output
Sets pass-thru stream, to which response will be redirected.- Parameters:
stream
- non-null pass-thru stream- Returns:
- the request itself
-
output
Sets output file, to which response will be redirected.- Parameters:
file
- non-empty path to the file- Returns:
- the request itself
-
output
Sets compressed output file, to which response will be redirected.- Parameters:
file
- non-empty path to the filecompression
- compression algorithm,null
orClickHouseCompression.NONE
means no compression- Returns:
- the request itself
-
output
Sets compressed output file, to which response will be redirected.- Parameters:
file
- non-empty path to the filecompression
- compression algorithm,null
orClickHouseCompression.NONE
means no compressioncompressionLevel
- compression level- Returns:
- the request itself
-
output
Sets output stream, to which response will be redirected.- Parameters:
output
- non-null output stream- Returns:
- the request itself
-
output
Sets output stream, to which response will be redirected.- Parameters:
output
- non-null output stream- Returns:
- the request itself
-
output
Sets output stream, to which response will be redirected.- Parameters:
output
- non-null output stream- Returns:
- the request itself
-
params
Sets stringified parameters. Be aware of SQL injection risk as mentioned inparams(String, String...)
.- Parameters:
values
- stringified parameters- Returns:
- the request itself
-
params
Sets parameters wrapped byClickHouseValue
. Safer but a bit slower thanparams(String, String...)
. Consider to reuse ClickHouseValue object and its update methods for less overhead in batch processing.- Parameters:
value
- parametermore
- more parameters- Returns:
- the request itself
-
params
Sets parameters wrapped byClickHouseValue
. Safer but a bit slower thanparams(String, String...)
. Consider to reuse ClickHouseValue object and its update methods for less overhead in batch processing.- Parameters:
values
- parameters- Returns:
- the request itself
-
params
Sets stringified parameters which are used to substitude named parameters in SQL query without further transformation and validation. Keep in mind that stringified parameter is a SQL expression, meaning it could be a sub-query(SQL injection) in addition to value like number and string.- Parameters:
value
- stringified parametermore
- more stringified parameters- Returns:
- the request itself
-
params
Sets stringified parameters which are used to substitude named parameters in SQL query without further transformation and validation. Keep in mind that stringified parameter is a SQL expression, meaning it could be a sub-query(SQL injection) in addition to value like number and string.- Parameters:
values
- stringified parameters- Returns:
- the request itself
-
params
Set raw parameters, which will later be stringified usingClickHouseValues.convertToSqlExpression(Object)
. Although it is convenient to use, it's NOT recommended in most cases except for a few parameters and/or testing.- Parameters:
value
- raw parametermore
- more raw parameters- Returns:
- the request itself
-
params
Set raw parameters, which will later be stringified usingClickHouseValues.convertToSqlExpression(Object)
. Although it is convenient to use, it's NOT recommended in most cases except for a few parameters and/or testing.- Parameters:
values
- raw parameters- Returns:
- the request itself
-
params
Sets named parameters. Be aware of SQL injection risk as mentioned inparams(String, String...)
.- Parameters:
namedParams
- named parameters- Returns:
- the request itself
-
query
Sets parameterized query. Same asquery(query, null)
.- Parameters:
query
- non-null parameterized query- Returns:
- the request itself
-
query
Sets query. Same asquery(sql, null)
.- Parameters:
sql
- non-empty query- Returns:
- the request itself
-
query
Sets parameterized query and optinally query id.- Parameters:
query
- non-null parameterized queryqueryId
- query id, null means no query id- Returns:
- the request itself
-
query
Sets query and optinally query id.- Parameters:
query
- non-empty queryqueryId
- query id, null means no query id- Returns:
- the request itself
-
settings
Sets all server settings. Whensettings
is null or empty, it's same asclearSettings()
.- Parameters:
settings
- settings- Returns:
- the request itself
-
clearSettings
Clears server settings.- Returns:
- the request itself
-
clearSession
Clears session configuration including session id, session check(whether to validate the id), and session timeout. Transaction will be removed as well.- Returns:
- the request itself
-
session
Sets current session using custom id. Same assession(sessionId, null, null)
.- Parameters:
sessionId
- session id, null means no session- Returns:
- the request itself
-
session
Sets session. Same assession(sessionId, check, null)
.- Parameters:
sessionId
- session id, null means no sessioncheck
- whether the server should check if the session id exists or not- Returns:
- the request itself
-
session
Sets current session. Same assession(sessionId, null, timeout)
.- Parameters:
sessionId
- session id, null means no sessiontimeout
- timeout in seconds- Returns:
- the request itself
-
session
Sets current session.- Parameters:
sessionId
- session id, null means no sessioncheck
- whether the server should check if the session id exists or nottimeout
- timeout in seconds- Returns:
- the request itself
-
set
Sets a setting. See https://clickhouse.tech/docs/en/operations/settings/settings/ for more information.- Parameters:
setting
- non-empty setting to setvalue
- value of the setting- Returns:
- the request itself
-
set
Sets a setting. See https://clickhouse.tech/docs/en/operations/settings/settings/ for more information.- Parameters:
setting
- non-empty setting to setvalue
- value of the setting- Returns:
- the request itself
-
setChangeListener
Sets thread-safe change listener. Please keep in mind that the same listener might be shared by multiple requests.- Parameters:
listener
- thread-safe change listener which may or may not be null- Returns:
- the request itself
-
setServerListener
Sets thread-safe server change listener. Please keep in mind that the same listener might be shared by multiple requests.- Parameters:
listener
- thread-safe server listener which may or may not be null- Returns:
- the request itself
-
table
Sets target table. Same astable(table, null)
.- Parameters:
table
- non-empty table name- Returns:
- the request itself
-
table
Sets target table and optionally query id. This will generate a query likeSELECT * FROM [table]
and override the one set byquery(String, String)
.- Parameters:
table
- non-empty table namequeryId
- query id, null means no query id- Returns:
- the request itself
-
transaction
Creates and starts a transaction. Same astransaction(0)
.- Returns:
- the request itself
- Throws:
ClickHouseException
- when failed to start or reuse transaction
-
transaction
Creates and starts a transaction immediately. Please pay attention that unlike other methods in this class, it will connect to ClickHouse server, allocate session and start transaction right away.- Parameters:
timeout
- transaction timeout in seconds, zero or negative means same as session timeout- Returns:
- the request itself
- Throws:
ClickHouseException
- when failed to start or reuse transaction
-
transaction
Sets transaction. Any existing transaction, regardless its state, will be replaced by the given one.- Parameters:
transaction
- transaction- Returns:
- the request itself
- Throws:
ClickHouseException
- when failed to set transaction
-
use
Changes current database.- Parameters:
database
- database name,null
means reset to default- Returns:
- the request itself
-
removeExternal
Removes an external table.- Parameters:
external
- non-null external table- Returns:
- the request itself
-
removeExternal
Removes an external table by name.- Parameters:
name
- non-empty external table name- Returns:
- the request itself
-
removeOption
Removes an option.- Parameters:
option
- option to be removed- Returns:
- the request itself
-
removeSetting
Removes a setting.- Parameters:
setting
- name of the setting- Returns:
- the request itself
-
reset
Resets the request to start all over.- Returns:
- the request itself
-
seal
Creates a sealed request, which is an immutable copy of the current request. Listeners won't be copied to the sealed instance, because it's immutable.- Returns:
- sealed request, an immutable copy of the current request
-
write
Creates a new request for mutation.- Returns:
- request for mutation
-
execute
Executes the request. Same asclient.execute(request.seal())
.- Returns:
- non-null future to get response
- Throws:
CompletionException
- when error occurred during execution
-
executeAndWait
Synchronous version ofexecute()
.- Returns:
- non-null response
- Throws:
ClickHouseException
- when error occurred during execution
-
executeWithinTransaction
Executes the request within an implicit transaction. New transaction will be always created and started right before the query, and it will be committed or rolled back afterwards automatically.- Returns:
- non-null response
- Throws:
ClickHouseException
- when error occurred during execution
-
executeWithinTransaction
@Deprecated public ClickHouseResponse executeWithinTransaction(boolean useImplicitTransaction) throws ClickHouseException Deprecated.will be removed in the future, once the minimum supported version of ClickHouse is 22.7 or aboveExecutes the request within an implicit transaction. WhenuseImplicitTransaction
is set totrue
, it enforces the client to useimplicit_transaction
setting which is only available in ClickHouse 22.7+. Otherwise, new transaction will be always created and started right before the query, and it will be committed or rolled back afterwards automatically.- Parameters:
useImplicitTransaction
-true
to use native implicit transaction requiring ClickHouse 22.7+ with minimum overhead(no session on server side and no additional objects on client side); false to use auto-commit transaction- Returns:
- non-null response
- Throws:
ClickHouseException
- when error occurred during execution
-