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 TABLE
events(
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") }; ```