Skip to content

Latest commit

 

History

History
75 lines (57 loc) · 2.32 KB

README.md

File metadata and controls

75 lines (57 loc) · 2.32 KB

radix

Library for parallel partitioning of vectors of data based on hash. Also contains an sql statements executor, e.g.:vv

        //Executes an sql statement, containing one projection:
        //SELECT ((col1+col2)+col3)
        //Load operations dictionary of predefined functions
        let mut dict: OpDictionary = HashMap::new();
        load_op_dict(&mut dict);
        let mut init_dict: InitDictionary = HashMap::new();
        load_init_dict(&mut init_dict);

        //Initialize the source data - col1, col2, col3
        let data_col1 = vec![4_u64, 5];
        let mut data_col2 = vec![4_u32, 5, 6];
        
        //col1: [4,4,4], type u64
        let c1 =
            ColumnWrapper::new_ref(&data_col1, Some(vec![0_usize, 0, 0]), None).with_name("col1");
        //col2: [4,5,null], type u32
        let c2 = ColumnWrapper::new_ref_mut(
            &mut data_col2,
            None,
            Some(Bitmap {
                bits: vec![1, 1, 0],
            }),
        )
        .with_name("col2");
        //col3: [4,5,6], type u32
        let c3 = ColumnWrapper::new(vec![4_u32, 5, 6], None, None).with_name("col3");
        
        
        let ref_columns = vec![c1, c2, c3];


        //Define SQL statement to be executed
        let sqlstmt = "SELECT ((col1+col2)+col3)";
        let p = get_first_projection(sqlstmt);
        //Parse expression
        let expr = parseexpr(&p, &ref_columns);

        //Create temporary calculation columns
        let mut owned_columns = expr.compile(&dict, &init_dict).1;
        //Evaluate expression
        expr.eval(
            &mut owned_columns.iter_mut().collect(),
            &(ref_columns.iter().collect()),
            &vec![],
            &dict,
        );

        drop(data_col2);
        drop(data_col1);

        //The SQL statement processed is "SELECT ((col1+col2)+col3)""
        //The value of of the columns is as folows:
        //col1: [4,4,4], type u64
        //col2: [4,5,null], type u32
        //col3: [4,5,6], type u32
        //expected result after summation: [12, 14, 0], null index: [1,1,0]

        assert!(!owned_columns.is_empty());
        let result = owned_columns.pop().unwrap();
        assert_eq!(result.bitmap().as_ref().unwrap().bits, vec![1, 1, 0]);

        let val = result.unwrap::<Vec<u64>>();
        assert_eq!(val, vec![12, 14, 0]);