use crate::parser::parse_with_metadata;
#[test]
fn test_sqlparser_select() {
assert_sql!(
stmt("SELECT * FROM my_table WHERE 1 = 1"),
"SELECT * FROM my_table WHERE 1 = 1"
);
}
#[test]
fn test_sqlparser_with_query() {
assert_sql!(
stmt(
r#"WITH derived AS (
SELECT MAX(a) AS max_a,
COUNT(b) AS b_num,
user_id
FROM MY_TABLE
GROUP BY user_id
)
SELECT * FROM my_table
LEFT JOIN derived USING (user_id)"#
),
"\
WITH derived AS (\
SELECT MAX(a) AS max_a, \
COUNT(b) AS b_num, \
user_id \
FROM MY_TABLE \
GROUP BY user_id) \
SELECT * FROM my_table \
LEFT JOIN derived USING (user_id)"
);
}
#[test]
fn test_sqlparser_large_statement() {
let large_statement = {
let expressions = (0..1000)
.map(|n| format!("FN_{n}(COL_{n})"))
.collect::<Vec<_>>()
.join(", ");
let tables = (0..1000)
.map(|n| format!("TABLE_{n}"))
.collect::<Vec<_>>()
.join(" CROSS JOIN ");
let where_condition = (0..1000)
.map(|n| format!("COL_{n} = {n}"))
.collect::<Vec<_>>()
.join(" OR ");
let order_condition = (0..1000)
.map(|n| format!("COL_{n} DESC"))
.collect::<Vec<_>>()
.join(", ");
format!(
"SELECT {expressions} FROM {tables} WHERE {where_condition} ORDER BY {order_condition}"
)
};
if let Err(e) = parse_with_metadata(&large_statement) {
panic!("parse error: {e}");
}
}