1497 Commits
Author SHA1 Message Date
zeekay 9a90943b8f merge: ClickHouse 26.7.1.1315-stable into datastore — preserve debrand
13,838 upstream commits, forward from the 26.6.1.1 fork point. 129 conflicts:
37 resolved mechanically (take upstream's file, re-apply the brand sweep) and
92 by hand where our fork and upstream had both changed the same code.

The rule throughout: upstream owns the engine, we own the naming and a small set
of deliberate deviations. Never resolve by discarding an upstream change — a
dropped rename or a missed new parameter becomes a compile error a thousand
files away.

Deviations verified intact after the merge:
  ENABLE_XRAY still defaults OFF        (CMakeLists.txt:105)
  X-Datastore-User read by the server   (authenticateUserByHTTP.cpp)
  X-ClickHouse-* in src/                0
  hanzo/research                        present
  system.*_log retention bound          present
  ArrowFlight rip                       held against upstream re-adding it

Two things worth naming, because neither shows up as a conflict:

  src/CMakeLists.txt gained an UNGUARDED
  `add_object_library(datastore_storages_arrowflight Storages/ArrowFlight)` from
  upstream, for a directory our gRPC rip deleted. It sat outside every conflict
  hunk, so a resolver reading only the markers would sail straight past it into
  a CMake configure error. Removed; the Server/ArrowFlight sibling at line 474
  stays because it is inside `if (TARGET ch_contrib::arrow_flight)`.

  The brand sweep had rewritten github.com/ClickHouse/ClickHouse issue links to
  github.com/Datastore/Datastore — a dead host. Those point at upstream's own
  tracker and are restored, alongside the contributors list, sql.clickhouse.com
  and the ClickHouse Inc copyright: attribution is theirs, not ours to rename.

base/glibc-compatibility/memcpy/memcpy.h is deleted, not kept: upstream dropped
it for LLVM-libc's, and our only change to it was a comment rebrand.
2026-07-26 14:47:43 -07:00
Alexey Milovidov 24ce7cb2d8 Merge remote-tracking branch 'origin/master' into fix-client-login-no-host 2026-07-21 02:29:07 +00:00
Azat KhuzhinandGitHub 0528eb970f Merge pull request #110419 from azat/dia-parts-as-scalars
Send big list parts for distributed index analysis as scalars
2026-07-17 10:04:58 +00:00
Azat Khuzhin 4d13a862b2 Avoid leaking scalars flag in client code 2026-07-16 15:05:06 +02:00
Azat Khuzhin 435a39f357 Add ability to send scalars via native clickhouse-client 2026-07-15 21:00:35 +02:00
Pedro Ferreira b29d25fee8 Fixes 2026-07-15 10:14:30 +00:00
Christoph WurmandClaude Fable 5 e5f80bbc8d Fix abort in clickhouse-client --login when no host is passed explicitly
`Client::login` read `hosts_and_ports.front()`, but `hosts_and_ports` is only
filled from explicit `--host` arguments; the default host is added later, in
`Client::connect`. Running `clickhouse client --login` without `--host` (e.g.
with the host coming from `--connection`, the config file, or the
`CLICKHOUSE_HOST` environment variable) failed a libc++ hardening assertion:
`front() called on an empty vector`.

Resolve the host from the configuration when `hosts_and_ports` is empty, the
same way `connect` does.

Also fix the client docs, which listed the option as `login` instead of
`--login`.

Closes: https://github.com/ClickHouse/ClickHouse/issues/103603

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-13 15:17:44 +01:00
Nikita FomichevandGitHub 551e7b6e2a Merge pull request #109725 from ClickHouse/fix-ast-fuzzer-silent-early-exit
Fix AST fuzzer silently burning the corpus and exiting early with success
2026-07-09 20:00:08 +00:00
Nikita Fomichev 8c98ba6ea5 Fix AST fuzzer silently burning the corpus and exiting early with success
The client-side AST fuzzer loop swallowed every exception thrown during a
fuzzing step: the `catch (...)` handler recorded the error, the loop bottom
reset it, and fuzzing continued. When the failure mode is persistent - most
importantly a dead server, where the reconnection attempt inside
`processParsedSingleQuery` throws instantly - the client sprints through the
remaining corpus at hundreds of steps per second without contacting the
server and exits with code 0, which the job reports as "Fuzzer exited with
success".

Evidence from `AST fuzzer (amd_debug, targeted)` on PR #109061
(https://s3.amazonaws.com/clickhouse-test-reports/json.html?PR=109061&sha=1419f6b7e95c81c812f945c06333998b92d56ad3&name_0=PR&name_1=AST+fuzzer+%28amd_debug%2C+targeted%29):
`fuzzer.log` records 68972 fuzzing steps, of which 52837 produced no outcome
(silent exception), while `server.log` shows the server received only 209
queries within a 47-second window before dying. On PR #106250
(https://s3.amazonaws.com/clickhouse-test-reports/json.html?PR=106250&sha=latest&name_0=PR&name_1=AST+fuzzer+%28amd_debug%2C+targeted%29)
a 5-file corpus with ~20 SELECT statements (about 20000 fuzzing steps, over
an hour of work at the measured debug-build rate of 2-6 steps/s) "completed"
in 74 seconds and the job passed. Overall, 13-33% of targeted AST fuzzer
runs per month finish in under 8 minutes of their 30-minute budget.

Client fixes (`programs/client/FuzzLoop.cpp`):
- Print thrown exceptions in the fuzzing-step catch handlers instead of
  swallowing them silently, so `fuzzer.log` shows what actually happened.
- After a thrown exception, check the connection via `tryToReconnect` (the
  same check `processASTFuzzerStep` does for errors received without
  throwing) and stop fuzzing when the server is gone instead of uselessly
  sprinting through the rest of the corpus.
- Register query parameters generated by `QueryFuzzer` (from
  `getLastQueryParameters`) for client-side substitution, mirroring the
  server-side fuzzer in `executeASTFuzzerQueries`; previously any fuzzed
  query containing a substituted `{name:type}` parameter failed with
  "Substitution ... is not set" before reaching the server.

Job fix (`ci/jobs/scripts/fuzzer/run-fuzzer.sh`):
- When the AST fuzzer walks the whole corpus and exits 0 with a meaningful
  part of the FUZZ_TIME_LIMIT budget remaining, restart it (each pass uses a
  fresh random seed) instead of ending the job after a couple of minutes.
  This matters for the targeted variant, whose corpus is a handful of test
  files. The restart is gated on a server liveness probe so a dead server
  still terminates the job for classification.
2026-07-08 00:25:50 +02:00
Pedro Ferreira 63189e6d26 Merge remote-tracking branch 'origin/master' into more-fuzz3
# Conflicts:
#	src/Common/QueryFuzzer.cpp
2026-07-07 19:17:58 +00:00
Yarik BriukhovetskyiandGitHub 6df1e7a66f Merge pull request #109051 from groeneai/fix-async-insert-use-client-time-zone-108038
Respect use_client_time_zone for string datetime literals parsed on the server
2026-07-06 13:08:03 +00:00
Pedro Ferreira affa3036c9 Compilation fix and remove redundant oneof fields 2026-07-03 07:21:59 +00:00
Pedro Ferreira aba9c7ce93 Address review comments 2026-07-02 18:43:54 +00:00
Pedro Ferreira 29559f9e64 Hypothetical indexes in BuzzHouse 2026-07-02 09:40:52 +00:00
Groene AIandClaude Opus 4.8 6177cf9682 Capture the client local time zone with a session_timezone-agnostic API
The per-query session_timezone seed reads client_local_timezone, captured
once in Client::connect(). It was captured via DateLUT::instance(), which
folds in session_timezone: starting the client with an explicit
--session_timezone (on a host whose real zone differs) cached that override
value instead of the machine-local zone. A later SET session_timezone =
DEFAULT then reseeded future queries from the cached override, so server-side
literal parsing (async INSERT, SELECT) never returned to true
use_client_time_zone semantics.

Use DateLUT::serverTimezoneInstance().getTimeZone() instead, which reads the
process default directly and ignores session_timezone. On the client with
use_client_time_zone=1 setDefaultTimezone() is never called, so the process
default stays the machine-local zone captured at DateLUT construction.

Extends 04401_async_insert_use_client_time_zone to cover the
--session_timezone=UTC start followed by SET session_timezone = DEFAULT.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-01 18:38:39 +00:00
Groene AIandClaude Opus 4.8 2115ef6348 Seed session_timezone per query so use_client_time_zone tracks setting changes
The previous change seeded session_timezone once in Client::connect(), so it
only reflected the use_client_time_zone value at connect time. On an already
open connection, SET use_client_time_zone / per-query SETTINGS change the
setting without reconnecting, leaving two holes:

  - turning use_client_time_zone on mid-session did not seed session_timezone,
    so server-side literal parsing kept using the server time zone;
  - turning it off left the auto-seeded session_timezone in place, so
    server-side parsing never switched back.

Capture the client local time zone once on the first connect (before the
branch that may switch the process default to the server time zone), and seed
session_timezone from it in processParsedSingleQuery for every query whose
effective use_client_time_zone is set and that does not set session_timezone
explicitly. The seed is applied inside the transient per-query settings scope,
so it is recomputed for each query and reverted afterwards, tracking
use_client_time_zone changes in both directions without leaking state.

Extend the regression test to cover the command line flag, a mid-session SET,
a per-query SETTINGS, and turning use_client_time_zone back off.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-01 17:17:57 +00:00
Groene AIandClaude Opus 4.8 bab7e93b28 Propagate client time zone as session_timezone when use_client_time_zone is set
With --use_client_time_zone=1 the client parses DateTime string literals in its
local time zone, but literals interpreted server-side (asynchronous INSERT, SELECT
literals) use the session_timezone setting, which the client left empty. The server
then fell back to its own default time zone, so an async INSERT of a string literal
stored a different instant than the equivalent synchronous INSERT.

Set session_timezone to the client local time zone in Client::connect() when
use_client_time_zone is enabled and the user has not set session_timezone explicitly,
so server-side interpretation matches the client-side (synchronous) path. An explicit
--session_timezone still takes priority.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-01 12:15:31 +00:00
zooqueen 0f1e1b5143 merge: ClickHouse 26.6.1.1 into datastore — preserve debrand + ZAP + gRPC/gcloud removal
Merge upstream/changelog-26.6 (9593 commits) into our debranded fork.
- 190 conflicts resolved: 24 delete-side kept-removed (grpc/arrowflight/gcloud), submodules+version→26.6,
  contrib/CMakeLists keeps zap + new libpng, drops capnproto (zap provides kj), Server.cpp/CMakeLists
  re-apply the ZAP wiring + gRPC/arrowflight/gcloud removal.
- Full-tree debrand re-swept over the new 26.6 code (uniform Datastore naming; Azure fork Clickhouse*
  symbols preserved). 0 clickhouse in product src/programs/CMakeLists.
- Version now 26.6.1.1. gRPC/google-cloud/chdig stay removed; ZAP remains the transport.
2026-06-23 12:23:48 -07:00
zooqueen 12ee47043b datastore: eliminate ALL clickhouse references from the product (no clickhouse, period)
Comprehensive removal across the compiled-product surface (src/programs/base/cmake/configs,
excl contrib third-party + unit tests): URLs clickhouse.com/.tech/.cloud -> hanzo.ai and
github.com/ClickHouse/ClickHouse -> github.com/hanzoai/datastore; fs/zk paths /var/lib/clickhouse
-> /var/lib/datastore, /clickhouse/tables -> /datastore/tables; SQL dict-source keyword
"clickhouse" -> "datastore" (SOURCE(DATASTORE(...)), forwards-only); .clickhouse.hash ELF section
-> .datastore.hash (main.cpp + CMake); hasClickhouse/Clickhouse symbols -> Datastore; all remaining
lowercase clickhouse -> datastore. 175 files. contrib/ (upstream deps) untouched. Build-verify since
this changes the SQL keyword, default paths and the binary-hash section.
2026-06-22 16:33:18 -07:00
zooqueen f9f34ad947 datastore: rename program source/completion files clickhouse-* -> datastore-*
The lowercase sweep renamed source-file references inside programs/*/CMakeLists.txt
(clickhouse-su.cpp -> datastore-su.cpp etc.) but not the physical files -> 'Cannot find source
file datastore-su.cpp'. Renamed all 19 program entry-point sources, the client config xml, and
bash-completion scripts to match. Completes the program-file rebrand.
2026-06-21 23:57:41 -07:00
zooqueen 0357c7e3ff datastore rebrand: lowercase clickhouse -> datastore in commands/prose/help
Completes the user-facing branding: lowercase `clickhouse` command/symlink names
(clickhouse-server/-client/-local/...), `clickhouse <subcommand>` usage strings, and bare-word
prose in messages/comments -> datastore (~238 occurrences across 227 files).

Intentionally KEPT (not branding):
- SQL dict-source keyword "clickhouse" (SOURCE(CLICKHOUSE(...)) compat) - 4 sites
- external URLs (clickhouse.com / github.com/ClickHouse)
- filesystem / ZooKeeper path conventions (/var/lib/clickhouse fallback default, /clickhouse/tables/
  ReplicatedMergeTree ZK path) - deployment convention, overridden by our datastore-* config

String/comment-literal changes only; no identifiers touched (verified no bare lowercase clickhouse
C++ symbol exists). Build was already green; verifying this is still green.
2026-06-21 23:46:30 -07:00
zooqueen 06f45b6529 datastore rebrand: compound symbols + CMake targets/macros (clickhouse -> datastore)
The deep internal rebrand (user: "rename all compound symbols", "datastore_ good", "DB:: fine"):
- CamelCase symbols ClickHouse* -> Datastore* (358 distinct): mainEntryDatastoreServer,
  DatastoreDictionarySource, DatastoreRevision, DatastoreVersion, etc. URL/repo lines skipped.
- snake targets + macros clickhouse_* -> datastore_* (850 occ): datastore_common_io,
  datastore_add_executable, datastore_program_install, datastore_functions, etc. — uniform
  across src + cmake + all CMakeLists, and the contrib wrappers that link/use them
  (croaring, nuraft, corrosion, chdig, delta-kernel-rs, mongo-cxx).
- CLICKHOUSE_* macros -> DATASTORE_* (DATASTORE_OFFICIAL_BUILD, ENABLE_DATASTORE_*, etc.).
- project(ClickHouse) -> project(Datastore) so ${Datastore_SOURCE_DIR}/${Datastore_BINARY_DIR}
  (45 refs) resolve.

Replace (not drop) -> collision-free. DB:: namespace kept (per direction). lowercase SQL
`clickhouse` dictionary-source keyword + clickhouse.com / github.com/ClickHouse URLs kept.
NEEDS BUILD VERIFICATION on spark/CI — uniform + inspected-consistent but uncompiled here.
2026-06-21 20:38:05 -07:00
zooqueen 332335ddb4 datastore rebrand: standalone "ClickHouse" word -> "Datastore" (prose, strings, comments)
The correct, safe broad rebrand: renames "ClickHouse" only as a whole word (boundary on
BOTH sides), so it rewrites display strings/messages/comments but leaves every compound
C++ symbol intact — `ClickHouseDictionarySource`, `getInfoIfClickHouseDictionarySource`,
`mainEntryClickHouseServer`, `ClickHouseRevision`, `ClickHouse_SOURCE_DIR` are untouched
(an earlier one-sided heuristic mangled suffix symbols like `manageClickHouse`; reverted).
1677 occurrences across 482 files. Compile-safe (string/comment content; symbols preserved).

Still NOT renamed (would be a build-coupled symbol rename, needs build-host iteration): the
199 compound identifiers containing ClickHouse, the `DB::` namespace, the `clickhouse_*`
CMake targets/macros, the lowercase `clickhouse` SQL dictionary-source keyword. Needs build
verification.
2026-06-21 20:10:25 -07:00
Pedro Ferreira ed01c78383 Defensive lines 2026-06-16 10:59:54 +00:00
Pedro Ferreira 22ae0aa5ff Better fixes and format 2026-06-16 10:40:23 +00:00
Pedro Ferreira d7ad608ba2 Update probs 2026-06-15 16:27:04 +00:00
Pedro Ferreira cf0bc59511 More coverage for alias engine 2026-06-15 16:13:56 +00:00
Pedro Ferreira ae65b76b80 Merge remote-tracking branch 'origin/master' into more-fuzz2 2026-06-10 07:57:44 +00:00
Pedro Ferreira 414e5871fe Don't send too large queries to the server 2026-06-09 07:58:56 +00:00
Pedro Ferreira 6214c81ba2 Implement new array join oracle and fixes 2026-06-08 12:26:45 +00:00
Pedro Ferreira 04eaca108c Update probabilities 2026-06-08 09:56:24 +00:00
Pedro Ferreira befb83b883 Check if enabled 2026-06-05 15:55:20 +00:00
Pedro Ferreira efc902432a format and new dump table oracle options, let's test 2026-06-05 15:35:49 +00:00
Alexey Milovidov c1a68d631e Merge remote-tracking branch 'origin/master' into granular-echo-control 2026-06-01 10:09:05 +00:00
Alexey MilovidovandGitHub 2b385b9bf1 Merge pull request #100976 from ClickHouse/fix-compiler-warnings
More warnings
2026-05-31 16:52:22 -07:00
Alexey MilovidovandClaude Opus 4.8 a06423f0c1 Granular control over echoed queries in CLI
Implement https://github.com/ClickHouse/ClickHouse/issues/95479.

Previously, the client echoed queries differently depending on the mode
with no way to control it granularly: in interactive mode it always
printed a formatted and highlighted version of the query and the
`query_id`, while in batch mode `--echo` printed the raw query text only.

This change makes the behavior configurable while keeping the defaults
identical to before:

- `--echo` now takes an optional boolean value and controls echoing of
  queries in both interactive and batch mode. It defaults to on in
  interactive mode and off in batch mode.
- `--echo-formatted` is a new boolean option controlling whether the
  echoed query is formatted. It defaults to on in interactive mode and
  off in batch mode, so highlighting non-formatted queries is now
  possible as well.
- `--echo-query-id` is a new boolean option controlling whether the
  `query_id` is printed before execution. It defaults to on in
  interactive mode and off in batch mode. When enabled in batch mode, a
  fresh `query_id` is generated per query so that the printed value
  matches the one used for execution.
- `--hilite` (`--highlight`) now controls highlighting of both the
  command prompt and the echoed queries. Highlighting is only applied
  when writing to a terminal.

The echoing logic for all modes is unified in the new `echoQuery`
method, and the per-client defaults are resolved in
`setupEchoAndHighlightSettings`.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-05-31 08:09:21 +00:00
Alexey Milovidov ab6cd89b58 Merge remote-tracking branch 'origin/master' into fix-compiler-warnings
# Conflicts:
#	src/AggregateFunctions/fuzzers/aggregate_function_state_deserialization_fuzzer.cpp
#	src/Client/BuzzHouse/AST/SQLProtoStr.cpp
#	src/Functions/UserDefined/UserDefinedWebAssembly.cpp
#	src/IO/examples/parse_int_perf.cpp
#	src/Processors/QueryPlan/Optimizations/removeUnusedColumns.cpp
#	src/TableFunctions/TableFunctionMergeTreeAnalyzeIndexes.cpp
2026-05-29 02:17:22 +00:00
János Benjamin AntalandGitHub d763f9c59a Merge branch 'master' into convert-asserts-to-chasserts 2026-05-28 10:25:28 +02:00
Alexey Milovidov 724a4d6428 Merge remote-tracking branch 'origin/master' into fix-compiler-warnings
# Conflicts:
#	src/Functions/seriesPeriodDetectFFT.cpp
#	src/Functions/stl.hpp
#	src/Functions/tests/gtest_string_similarity.cpp
2026-05-23 07:21:41 +00:00
Pedro Ferreira 0c82af0724 Merge remote-tracking branch 'origin/master' into fuzz-functions 2026-05-22 10:47:56 +00:00
Pedro Ferreira 44f26e864b Address review comments 2026-05-21 15:41:24 +00:00
János Benjamin Antal 5b7f911f0c Merge remote-tracking branch 'origin/master' into convert-asserts-to-chasserts 2026-05-21 12:05:22 +00:00
János Benjamin Antal dbaaf36920 Even more finds 2026-05-20 10:04:07 +00:00
Pedro Ferreira e5d32b13c4 Fix for dictionaries dump oracle 2026-05-19 18:24:06 +00:00
Raúl Marín de8abf9f83 Reject positional file argument combined with --query
A positional file argument is converted to --queries-file inside
ClientApplicationBaseParser via options.emplace, which populates the
boost options map (and the queries_files member) but never the Poco
config. The conflict check in processConfig used config.has("queries-file"),
so the positional case slipped through and the -q query was silently
dropped instead of erroring.

Check queries_files directly so both forms are rejected consistently.

Closes #104735
2026-05-19 16:09:57 +00:00
Alexey Milovidov 7a2f9f408a Merge remote-tracking branch 'origin/master' into fix-compiler-warnings 2026-05-19 15:05:56 +00:00
d7d1302857 Make client rainbow parentheses optional (#103851)
* Make client rainbow parentheses optional

* Make client rainbow parentheses optional

* Make client rainbow parentheses optional

* Make client rainbow parentheses optional

* Fix style and clang-tidy CI failures

- In `programs/format/Format.cpp`, replace `options.count(...)` with
  `options.contains(...)` to satisfy the `readability-container-contains`
  clang-tidy check that fires in the `arm_tidy` build.

- In `src/Client/ClientBaseHelpers.cpp`, drop redundant braces around
  single-statement `if (!rainbow_parentheses) ...` blocks. One of them
  had the opening brace on the same line, which the C++ style check
  rejects (Allman braces are required).

CI report: https://github.com/ClickHouse/ClickHouse/pull/103851

---------

Co-authored-by: Alexey Milovidov <[email protected]>
2026-05-18 22:13:00 +02:00
Pedro Ferreira 6ae08767ea Generate Paimon tables in Spark 2026-05-14 14:08:05 +00:00
Pedro Ferreira 4bcf814581 Format, compilation fix and review comments 2026-05-14 12:22:56 +00:00
Pedro Ferreira c29f57ce30 Use dump table oracle for views and dictionaries 2026-05-13 16:29:34 +00:00