voltdb-client-rust 0.1.1

A socket client library for Voltdb server
Documentation
voltdb-client-rust-0.1.1 has been yanked.

Voltdb-client-rust

Overview

Voltdb-client-rust is a socket client library for voltdb written in rust

Here list the data type and rust data type mapping

SQL Datatype Compatible Rust Datatypes Option Supported
TINYINT bool
SMALLINT i8/u8
INTEGER i16/u16
BIGINT i32/u32
FLOAT f64
DECIMAL bigdecimal::BigDecimal
GEOGRAPHY -
GEOGRAPHY_POINT -
VARCHAR String
VARBINARY Vec< u8>
TIMESTAMP chrono::DateTime

Example

[dependencies]
voltdb-client-rust = { version = "0.1.1"}

Then, on your main.rs:

use voltdb_client_rust::node::*;
use voltdb_client_rust::encode::VoltError;
use bigdecimal::BigDecimal;
use chrono::{DateTime, Utc};
use voltdb_client_rust::table::VoltTable;

fn main() -> Result<(), VoltError> {
    #[derive(Debug)]
    struct Test {
        t1: Option<bool>,
        t2: Option<i8>,
        t3: Option<i16>,
        t4: Option<i32>,
        t5: Option<f64>,
        t6: Option<BigDecimal>,
        t7: Option<String>,
        t8: Option<Vec<u8>>,
        t9: Option<DateTime<Utc>>,
    }
    impl From<&mut VoltTable> for Test {
        fn from(table: &mut VoltTable) -> Self {
            let t1 = table.get_bool_by_column("T1").unwrap();
            let t2 = table.get_i8_by_column("t2").unwrap();
            let t3 = table.get_i16_by_column("t3").unwrap();
            let t4 = table.get_i32_by_column("t4").unwrap();
            let t5 = table.get_f64_by_column("t5").unwrap();
            let t6 = table.get_decimal_by_column("t6").unwrap();
            let t7 = table.get_string_by_column("t7").unwrap();
            let t8 = table.get_bytes_op_by_column("t8").unwrap();
            let t9 = table.get_time_by_column("t9").unwrap();
            Test {
                t1,
                t2,
                t3,
                t4,
                t5,
                t6,
                t7,
                t8,
                t9,
            }
        }
    }

    let mut node = get_node("localhost:21211")?;

    let has_table_check = block_for_result(&node.query("select t1 from test_types limit 1")?);
    match has_table_check {
        Ok(_) => {}
        Err(err) => {
            println!("{:?}", err);
            println!("will create table");
            let create_table = "CREATE TABLE  test_types
                    (
                    t1 TINYINT,
                    t2 SMALLINT,
                    t3 INTEGER,
                    t4 BIGINT,
                    t5 FLOAT,
                    t6 DECIMAL,
                    t7 VARCHAR,
                    t8 VARBINARY,
                    t9 TIMESTAMP,
                    );";
            block_for_result(&node.query(create_table)?)?;
        }
    }

    let insert = "insert into test_types (T1) values (NULL);";
    block_for_result(&node.query(insert)?)?;
    let mut table = block_for_result(&node.query("select * from test_types")?)?;
    while table.advance_row() {
        let test: Test = table.map_row();
        println!("{:?}", test);
    }
    let insert_value = "insert into test_types (T1,T2,T3,T4,T5,T6,T7,T8,T9) values (1,2,3,4,5,6,'7','089CD7B35220FFB686012A0B08B49ECD8C06109893971F422F4D4F4E49544F52494E475F33393766643034662D656161642D346230372D613638302D62663562633736666132363148D535A8019CD7B352B001DDEE8501B801BAEE8501C001AAE98601CA01054341534831D0010AE00102E80102F20103555344FA010A0A0355534410809BEE028202050A035553448A020B08B49ECD8C06109893971F9202046E756C6CA2020A0A0355534410C0BD9A2FBA0219312C323139313936382C323139333231302C32313933323435C802C91E8A0400920400D80401880505B20500',NOW());";
    block_for_result(&node.query(insert_value)?)?;
    let mut table = block_for_result(&node.query("select * from test_types")?)?;
    while table.advance_row() {
        let test: Test = table.map_row();
        println!("{:?}", test);
    }
    Ok({})
}

More examples can be found here.

License

This project is licensed under the MIT license.