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: ``rust use sql_type::{schema::parse_schemas, type_statement, TypeOptions, SQLDialect, SQLArguments, StatementType}; let schemas = " CREATE TABLEevents( idbigint(20) NOT NULL, userint(11) NOT NULL, message` text NOT NULL );";

let mut issues = Vec::new();

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

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

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