33个版本 (18个破坏性版本)

0.20.0 2024年6月13日
0.17.0 2024年4月5日
0.16.0 2024年3月27日
0.15.3 2023年9月9日
0.4.2 2022年3月31日

#342 in 数据库接口

Download history 19/week @ 2024-04-22 2/week @ 2024-04-29 9/week @ 2024-05-13 2/week @ 2024-05-20 6/week @ 2024-05-27 6/week @ 2024-06-03 152/week @ 2024-06-10 19/week @ 2024-06-17 2/week @ 2024-06-24 15/week @ 2024-07-15 179/week @ 2024-07-29 14/week @ 2024-08-05

每月下载 208
2 个crates中使用 (通过 sqlx-type-macro)

Apache-2.0

170KB
4K SLoC

sql-type

crates.io crates.io License actions-badge

SQL语句类型化

此crate提供了一种处理SQL模式定义的功能,然后使用此定义来为SQL语句的参数和返回值进行类型化。

目前主要关注MariaDB/Mysql。

示例代码

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")
};

依赖项

~330KB