//! Execute arbitrary SQL statements and automatically parse results.
//!
//! This module provides `execute_raw_sql` functions for each supported database driver.
//! Each function accepts a SQL string that may contain one or more statements separated
//! by `;`, executes them, and returns a [`Vec<SqlResult>`] — one entry per statement.
//!
//! - Statements that produce rows (SELECT, SHOW, EXPLAIN, etc.) are automatically
//! converted to JSON via the existing `to_json` infrastructure, returning a
//! [`SqlResult::Query`] with `data` and `columns`.
//! - Statements that do not produce rows (INSERT, UPDATE, DELETE, CREATE, DROP, etc.)
//! return a [`SqlResult::Execute`] with the number of affected rows.
//!
//! # Database-specific Notes
//!
//! - **MySQL**: Multi-statement execution requires the `CLIENT_MULTI_STATEMENTS` flag.
//! When using `sqlx`, add `?multi_statements=on` to your connection URL or set
//! `MySqlConnectOptions::multi_statements(true)` before creating the pool.
//! - **PostgreSQL**: Multi-statement support works natively via `raw_sql`.
//! - **SQLite**: The sqlx SQLite driver has limited multi-statement support via `raw_sql`.
//! Only a subset of scenarios is reliable; prefer sending one statement at a time.