locustdb 0.3.4

Embeddable high-performance analytics database.
Documentation
use crate::engine::*;
use crate::mem_store::*;

#[derive(Debug)]
pub struct EncodeIntConstant {
    pub constant: BufferRef<Scalar<i64>>,
    pub output: BufferRef<Scalar<i64>>,
    pub codec: Codec,
}

impl<'a> VecOperator<'a> for EncodeIntConstant {
    fn execute(&mut self, _: bool, _: &mut Scratchpad<'a>) -> Result<(), QueryError> { Ok(()) }

    fn init(&mut self, _: usize, _: usize, scratchpad: &mut Scratchpad<'a>) {
        let constant = scratchpad.get_scalar(&self.constant);
        let result = self.codec.encode_int(constant);
        scratchpad.set_any(self.output.any(), Data::scalar_i64(result));
    }

    fn inputs(&self) -> Vec<BufferRef<Any>> { vec![self.constant.any()] }
    fn outputs(&self) -> Vec<BufferRef<Any>> { vec![self.output.any()] }
    fn can_stream_input(&self, _: usize) -> bool { true }
    fn can_stream_output(&self, _: usize) -> bool { true }
    fn allocates(&self) -> bool { false }

    fn display_op(&self, _: bool) -> String {
        format!("encode({}; {:?})", self.constant, self.codec)
    }
}