Embed xterm.js 5.5.0, addon-fit 0.10.0, and addon-web-links 0.11.0
(minified JS and CSS) into the server binary, served at /js/*.
This removes the dependency on CDN and makes the web terminal
page fully self-contained, like the dashboard.
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Erase the "Connecting..." line before PTY output starts, so the
terminal content renders from a clean line. Also erase it on
auth failure before showing the error prompt.
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
The C++ `#embed` directive includes file contents at compile time,
but the build system does not automatically track these as
dependencies. When an embedded file (e.g., `play.html`) changes,
the .cpp file that embeds it is not recompiled.
Fix this by adding `OBJECT_DEPENDS` properties to all source files
that use `#embed`, covering: HTML pages, JavaScript files, XML
configs, and NLP data files.
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
- Remove the overlay login form; the terminal fills the entire page
- Auto-connect with default credentials (or credentials from URL params)
- On auth failure, prompt for username/password directly in the terminal
- If user was provided in the URL, only prompt for password
- After session ends, prompt for credentials again to reconnect
- Hide the scrollbar while keeping the terminal scrollable
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Add a WebSocket-based terminal protocol (webterminal) that runs
a pseudoterminal with embedded clickhouse-client functionality,
accessible via a browser at /webterminal.
The implementation reuses the same `PtyClientDescriptorSet` and
`ClientEmbeddedRunner` infrastructure as the SSH protocol, but
connects via WebSocket instead of SSH. Authentication works the
same way as in the HTTP protocol (URL params, Basic auth,
X-ClickHouse headers).
The HTML page uses xterm.js for terminal emulation and connects
to the server via WebSocket, bridging data bidirectionally
between the browser and the PTY.
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Make clickhouse-client's progress bar less jittery when working from a hotel with clusters with a very large number of replicas: Increase interactive_delay by sqrt(fanout) for distributed queries
Skip the stress test under MSan: it finds uninitialized-memory reads
in functions that are hard to debug without a local MSan build. The
test still runs under ASan/UBSan and TSan where it provides value.
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Add `ORDER BY length(a)` to the multi-row query to make row order
deterministic. Update reference to match the sorted output.
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
It is quite common to run ClickHouse in Docker with enabled console logging.
If the logger.log and logger.errorlog settings are removed from the configuration,
the entrypoint script currently produces two messages on startup:
Poco::Exception. Code: 1000, e.code() = 0, Not found: logger.log (version 26.2.5.45 (official build))
Poco::Exception. Code: 1000, e.code() = 0, Not found: logger.errorlog (version 26.2.5.45 (official build))
This commit fixes this behavior by adding the `--try` flag to the relevant `extract-from-config` invocations.
Related: https://github.com/ClickHouse/ClickHouse/issues/69551
In the `shard_filter_generator` branch, use `shards.size() * per_replica_pools.size()`
instead of just `shards.size()`, because this path creates one `RemoteQueryExecutor`
per replica across shards.
In `createPipeForSingeReplica`, subtract 1 from `pools_to_use.size()` when
`exclude_pool_index` is set, since the excluded local replica doesn't get a pipe.
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
The `hasEqualOffsets` check was column-wide: if any row had mismatched
array lengths between the first and a secondary array, the entire
secondary column was replaced with `[NULL]` for all rows. This made
one row's result depend on other rows in the block.
Fix: use `arrayResize` to pad/truncate secondary arrays per-row to match
the first array's lengths. This makes each row independent while keeping
all arrays in the zip+sort pipeline.
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
- Remove URL/domain functions from the stress test blocklist (they
don't depend on the environment); keep the "-Custom" variants
excluded (they need custom TLD list config).
- Fix typo "ths String" → "this String" in stress test.
- Fix missing closing `)` in diagnostic text.
- Restore `reverse` injectivity for arrays (`arrayReverse` is an
involution, hence injective).
- Add `isDeterministic` comment in `IFunction.h`: also means the
result must not depend on constness of arguments.
- Add comment explaining why `arrayPartialSort` is non-deterministic
(`nth_element` leaves elements beyond position k in unspecified order).
- Add comment explaining the >= 2 element range check in
`ColumnNullable::updatePermutationImpl`.
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Add SQL test covering edge cases found by the functions stress test:
- `negate` overflow at Int64/Int8 minimum
- `intExp2`/`intExp10` non-injectivity for floats
- `toStartOfMillisecond`/`toStartOfMicrosecond` with extreme DateTime64 values
- Modulo sign consistency for const vs non-const power-of-two divisors
- CASE expression with Int128 types (fallback to `multiIf`)
- `if` condition normalization with non-boolean UInt8
- `trimRight` with excessive trim characters (TOO_LARGE_STRING_SIZE)
- `parseDateTime` with insufficient input (CANNOT_PARSE_DATETIME)
- `fromModifiedJulianDayOrNull` returning NULL for out-of-range inputs
- Interval conversion for non-const columns
- `conv` with invalid base (BAD_ARGUMENTS)
- `tupleElement` with out-of-bound index (ARGUMENT_OUT_OF_BOUND)
- NaN deduplication in `arrayDistinct` via `ColumnUnique` normalization
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Reduce default duration from 60s to 10s for sanitizer builds
(ASan, MSan, TSan) to avoid CI timeouts. Under sanitizers everything
runs ~10-20x slower, so 60s of real work becomes 10-20 minutes of
wall clock, and the CI unit test job has a 45-minute hard limit.
The MSan unit test was timing out after 6 hours.
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Add `no-parallel` tag because the test relies on a pending async insert
remaining in the queue. Concurrent tests that run
`SYSTEM FLUSH ASYNC INSERT QUEUE` drain all shards globally, removing
the entry before the subsequent SELECT queries can observe it.
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>