50 releases (20 breaking)

0.21.0 Jul 1, 2024
0.20.2 Apr 22, 2024
0.19.1 Jan 4, 2024
0.19.0 Nov 14, 2023
0.1.0 Dec 10, 2021

#173 in Database interfaces

Download history 12567/week @ 2024-04-04 12792/week @ 2024-04-11 11840/week @ 2024-04-18 13539/week @ 2024-04-25 9477/week @ 2024-05-02 13977/week @ 2024-05-09 13128/week @ 2024-05-16 13142/week @ 2024-05-23 12190/week @ 2024-05-30 11985/week @ 2024-06-06 11841/week @ 2024-06-13 13394/week @ 2024-06-20 13082/week @ 2024-06-27 15193/week @ 2024-07-04 13553/week @ 2024-07-11 11315/week @ 2024-07-18

55,440 downloads per month
Used in 5 crates

MIT/Apache

120KB
2.5K SLoC

Sqllogictest

Sqllogictest is a testing framework to verify the correctness of an SQL database. See GitHub Homepage for more information.

This crate implements a sqllogictest parser and runner library in Rust.


lib.rs:

Sqllogictest parser and runner.

This crate supports multiple extensions beyond the original sqllogictest format. See the README for more information.

Usage

For how to use the CLI tool backed by this library, see the README.

For using the crate as a lib, and implement your custom driver, see below.

Implement [DB] trait for your database structure:

struct MyDatabase {
    // fields
}

#[derive(thiserror::Error, Debug, PartialEq, Eq, Clone)]
enum MyError {
    // variants
}

impl sqllogictest::DB for MyDatabase {
    type Error = MyError;
    // Or define your own column type
    type ColumnType = sqllogictest::DefaultColumnType;
    fn run(&mut self, sql: &str) -> Result<sqllogictest::DBOutput<Self::ColumnType>, Self::Error> {
        // TODO
        Ok(sqllogictest::DBOutput::StatementComplete(0))
    }
}

// Then create a `Runner` on your database instance, and run the tests:
let mut tester = sqllogictest::Runner::new(|| async {
    let db = MyDatabase {
        // fields
    };
    Ok(db)
});
let _res = tester.run_file("../tests/slt/basic.slt");

// You can also parse the script and execute the records separately:
let records = sqllogictest::parse_file("../tests/slt/basic.slt").unwrap();
for record in records {
    let _res = tester.run(record);
}

Dependencies

~8–19MB
~257K SLoC