1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//! The bring-your-own-client seam. `clickhouse-kit` never depends on a concrete
//! ClickHouse driver — the I/O layer (migration runner, drift gate) is written
//! against the small [`ChExecutor`] trait, and the caller implements it over
//! whatever client they already have (the `clickhouse` crate, an HTTP shim, a
//! test double). This keeps the crate driver-agnostic and dependency-light.
use Future;
/// Errors surfaced by the I/O layer — either the backing client failed, or we
/// hit a local filesystem error while reading migration files.
/// A single live column as introspected from `system.columns` — name + the
/// ClickHouse type string. The canonical definition lives in [`crate::evolve`];
/// it's re-exported here so the I/O layer and the drift/evolve modules all share
/// exactly one `LiveColumn` type.
pub use crateLiveColumn;
/// The minimal async execution surface the I/O layer needs from a ClickHouse
/// client. Implement it over your driver of choice.
///
/// Methods return `impl Future + Send` rather than using `async fn` directly so
/// the futures are guaranteed `Send` (spawn-friendly) regardless of toolchain
/// object-safety quirks; an impl may still write `async fn`. (The explicit
/// `+ Send` is the whole point, so `manual_async_fn` is intentionally allowed.)