clickhouse-rs 1.0.0-alpha.1

Asynchronous Yandex ClickHouse client library.
Documentation
use std::{cmp, ops};

use crate::{
    binary::Encoder,
    types::{
        column::column_data::{ArcColumnData, BoxColumnData},
        SqlType, Value, ValueRef,
    },
};

use super::ColumnData;

pub struct ChunkColumnData {
    data: ArcColumnData,
    range: ops::Range<usize>,
}

impl ChunkColumnData {
    pub(crate) fn new(data: ArcColumnData, range: ops::Range<usize>) -> Self {
        Self { data, range }
    }
}

impl ColumnData for ChunkColumnData {
    fn sql_type(&self) -> SqlType {
        self.data.sql_type()
    }

    fn save(&self, encoder: &mut Encoder, start: usize, end: usize) {
        self.data.save(
            encoder,
            self.range.start + start,
            cmp::min(self.range.end, self.range.start + end),
        )
    }

    fn len(&self) -> usize {
        self.range.len()
    }

    fn push(&mut self, _value: Value) {
        unimplemented!()
    }

    fn at(&self, index: usize) -> ValueRef {
        if index >= self.range.len() {
            panic!("out of range");
        }

        self.data.at(index + self.range.start)
    }

    fn clone_instance(&self) -> BoxColumnData {
        unimplemented!()
    }
}