28 releases (14 breaking)

0.15.3 Sep 9, 2023
0.15.2 Jul 25, 2023
0.15.0 Jun 13, 2023
0.13.0 Mar 22, 2023
0.4.2 Mar 31, 2022

#303 in Database interfaces

Download history 115/week @ 2023-07-26 34/week @ 2023-08-02 32/week @ 2023-08-09 54/week @ 2023-08-16 13/week @ 2023-08-23 48/week @ 2023-08-30 92/week @ 2023-09-06 80/week @ 2023-09-13 40/week @ 2023-09-20 19/week @ 2023-09-27 25/week @ 2023-10-04 49/week @ 2023-10-11 39/week @ 2023-10-18 36/week @ 2023-10-25 59/week @ 2023-11-01 23/week @ 2023-11-08

167 downloads per month
Used in 2 crates (via sqlx-type-macro)

Apache-2.0

155KB
3.5K SLoC

sql-type

crates.io crates.io License actions-badge

Type sql statements

This crate provides a facility to process a sql schema definition, and then use this definition to type the argument and return value of sql statements.

Currently primarily focused on MariaDB/Mysql.

Example code:

use sql_type::{schema::parse_schemas, type_statement, TypeOptions,
    SQLDialect, SQLArguments, StatementType};
let schemas = "
    CREATE TABLE `events` (
      `id` bigint(20) NOT NULL,
      `user` int(11) NOT NULL,
      `message` text NOT NULL
    );";

let mut issues = Vec::new();

// Compute terse representation of the schemas
let schemas = parse_schemas(schemas,
    &mut issues,
    &TypeOptions::new().dialect(SQLDialect::MariaDB));
assert!(issues.is_empty());

let sql = "SELECT `id`, `user`, `message` FROM `events` WHERE `id` = ?";
let stmt = type_statement(&schemas, sql, &mut issues,
    &TypeOptions::new().dialect(SQLDialect::MariaDB).arguments(SQLArguments::QuestionMark));
assert!(issues.is_empty());

let stmt = match stmt {
    StatementType::Select{columns, arguments} => {
        assert_eq!(columns.len(), 3);
        assert_eq!(arguments.len(), 1);
    }
    _ => panic!("Expected select statement")
};

Dependencies

~305KB