Releases: ClickHouse/clickhouse-js
0.3.1 (Common, Node.js, Web)
Bug fixes
- Fixed an issue where query parameters containing tabs or newline characters were not encoded properly (#249).
0.3.0 (Common, Node.js)
This release primarily focuses on improving the Keep-Alive mechanism's reliability on the client side.
New features
-
Idle sockets timeout rework; now, the client attaches internal timers to idling sockets and forcefully removes them from the pool if it is considered that a particular socket has been idling for too long. This additional socket housekeeping intends to eliminate "Socket hang-up" errors that could previously still occur on certain configurations. Now, the client does not rely on the KeepAlive agent when it comes to removing the idling sockets; in most cases, the server will not close the socket before the client does.
-
There is a new
keep_alive.idle_socket_ttl
configuration parameter. The default value is2500
(milliseconds), which is considered to be safe, as ClickHouse versions prior to 23.11 hadkeep_alive_timeout
set to 3 seconds by default, andkeep_alive.idle_socket_ttl
is supposed to be slightly less than that to allow the client to remove the sockets that are about to expire before the server does so. -
Logging improvements: more internal logs on failing requests; all client methods except ping will log an error on failure now. A failed ping will log a warning since the underlying error is returned as a part of its result. Client logging still needs to be enabled explicitly by specifying the desired
log.level
config option, as the log level isOFF
by default. Currently, the client logs the following events, depending on the selectedlog.level
value:TRACE
- low-level information about the Keep-Alive sockets lifecycle.DEBUG
- response information (without authorization headers and host info).INFO
- still mostly unused, will print the current log level when the client is initialized.WARN
- non-fatal errors; failedping
request is logged as a warning, as the underlying error is included in the returned result.ERROR
- fatal errors fromquery
/insert
/exec
/command
methods, such as a failed request.
Breaking changes
keep_alive.retry_on_expired_socket
andkeep_alive.socket_ttl
configuration parameters are removed.- The
max_open_connections
configuration parameter is now 10 by default, as we should not rely on the KeepAlive agent's defaults. - Fixed the default
request_timeout
configuration value (now it is correctly set to30_000
, previously300_000
(milliseconds)).
Bug fixes
- Fixed a bug with Ping that could lead to an unhandled "Socket hang-up" propagation.
- The client ensures proper
Connection
header value considering Keep-Alive settings. If Keep-Alive is disabled, its value is now forced to "close".
0.2.10 (Common, Node.js, Web)
New features
- If
InsertParams.values
is an empty array, no request is sent to the server andClickHouseClient.insert
short-circuits itself. In this scenario, the newly addedInsertResult.executed
flag will befalse
, andInsertResult.query_id
will be an empty string.
Bug fixes
- Client no longer produces
Code: 354. inflate failed: buffer error
exception if request compression is enabled andInsertParams.values
is an empty array (see above).
0.2.9 (Common, Node.js, Web)
New features
- It is now possible to set additional HTTP headers for outgoing ClickHouse requests. This might be useful if, for example, you have a reverse proxy with authorization. (@teawithfruit)
const client = createClient({
additional_headers: {
'X-ClickHouse-User': 'clickhouse_user',
'X-ClickHouse-Key': 'clickhouse_password',
},
})
0.2.8 (Common, Node.js, Web)
New features
- (Web only) Allow to modify Keep-Alive setting (previously always disabled). Keep-Alive setting is now enabled by default for the Web version.
import { createClient } from '@clickhouse/client-web'
const client = createClient({ keep_alive: { enabled: true } })
- (Node.js & Web) It is now possible to either specify a list of columns to insert the data into or a list of excluded columns:
// Generated query: INSERT INTO mytable (message) FORMAT JSONEachRow
await client.insert({
table: 'mytable',
format: 'JSONEachRow',
values: [{ message: 'foo' }],
columns: ['message'],
})
// Generated query: INSERT INTO mytable (* EXCEPT (message)) FORMAT JSONEachRow
await client.insert({
table: 'mytable',
format: 'JSONEachRow',
values: [{ id: 42 }],
columns: { except: ['message'] },
})
See also the new examples:
0.2.7 (Common, Node.js, Web)
New features
- (Node.js only)
X-ClickHouse-Summary
response header is now parsed when working withinsert
/exec
/command
methods. See the related test for more details.
NB: it is guaranteed to be correct only for non-streaming scenarios.
The web version does not currently support this due to CORS limitations. (#210)
Bug fixes
- Drain insert response stream in Web version - required to properly work with
async_insert
, especially in the Cloudflare Workers context.
0.2.6 (Common/Node.js)
New features
- Added Parquet format streaming support to the Node.js client. Examples: insert from a file, select into a file.
0.2.5 (Common, Node.js & Web)
Bug fixes
pathname
segment fromhost
client configuration parameter is now handled properly when making requests.
See this comment for more details.