diff --git a/src/insert.rs b/src/insert.rs index e48ba9e..0ea351b 100644 --- a/src/insert.rs +++ b/src/insert.rs @@ -88,6 +88,10 @@ impl Insert { let mut builder = Request::post(url.as_str()); + for (name, value) in &client.headers { + builder = builder.header(name, value); + } + if let Some(user) = &client.user { builder = builder.header("X-ClickHouse-User", user); } diff --git a/src/lib.rs b/src/lib.rs index 02e4a5b..55692e0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -59,6 +59,7 @@ pub struct Client { password: Option, compression: Compression, options: HashMap, + headers: HashMap, } impl Default for Client { @@ -103,6 +104,7 @@ impl Client { password: None, compression: Compression::default(), options: HashMap::new(), + headers: HashMap::new(), } } @@ -180,6 +182,18 @@ impl Client { self } + /// Used to specify a header that will be passed to all queries. + /// + /// # Example + /// ``` + /// # use clickhouse::Client; + /// Client::default().with_header("Cookie", "A=1"); + /// ``` + pub fn with_header(mut self, name: impl Into, value: impl Into) -> Self { + self.headers.insert(name.into(), value.into()); + self + } + /// Starts a new INSERT statement. /// /// # Panics diff --git a/src/query.rs b/src/query.rs index 20ed96b..28253f9 100644 --- a/src/query.rs +++ b/src/query.rs @@ -160,6 +160,10 @@ impl Query { let mut builder = Request::builder().method(method).uri(url.as_str()); + for (name, value) in &self.client.headers { + builder = builder.header(name, value); + } + if content_length == 0 { builder = builder.header(CONTENT_LENGTH, "0"); } else {