use stoolap::parser::parse_sql;
#[test]
fn test_parse_first_with_order_by() {
let sql = "SELECT FIRST(open ORDER BY time_col) FROM candles";
let result = parse_sql(sql);
assert!(
result.is_ok(),
"Expected parsing to succeed: {:?}",
result.err()
);
}
#[test]
fn test_parse_first_with_order_by_asc() {
let sql = "SELECT FIRST(open ORDER BY time_col ASC) FROM candles";
let result = parse_sql(sql);
assert!(
result.is_ok(),
"Expected parsing to succeed: {:?}",
result.err()
);
}
#[test]
fn test_parse_last_with_order_by_desc() {
let sql = "SELECT LAST(close ORDER BY time_col DESC) FROM candles";
let result = parse_sql(sql);
assert!(
result.is_ok(),
"Expected parsing to succeed: {:?}",
result.err()
);
}
#[test]
fn test_parse_combined_aggregates_with_order_by() {
let sql = "SELECT FIRST(open ORDER BY time_col), MAX(high), MIN(low), LAST(close ORDER BY time_col), SUM(volume) FROM candles GROUP BY date_col";
let result = parse_sql(sql);
assert!(
result.is_ok(),
"Expected parsing to succeed: {:?}",
result.err()
);
}
#[test]
fn test_parse_count_with_order_by_standard() {
let sql = "SELECT COUNT(*) FROM candles ORDER BY time_col";
let result = parse_sql(sql);
assert!(
result.is_ok(),
"Expected parsing to succeed: {:?}",
result.err()
);
}
#[test]
fn test_parse_time_trunc_with_ordered_aggregates() {
let sql = "SELECT TIME_TRUNC('15m', event_time) AS bucket, FIRST(price ORDER BY event_time) AS open, MAX(price) AS high, MIN(price) AS low, LAST(price ORDER BY event_time) AS close, SUM(volume) AS volume FROM trades GROUP BY bucket";
let result = parse_sql(sql);
assert!(
result.is_ok(),
"Expected parsing to succeed: {:?}",
result.err()
);
}
#[test]
fn test_parse_order_by_multiple_columns() {
let sql = "SELECT * FROM test ORDER BY col1, col2 DESC, col3 ASC";
let result = parse_sql(sql);
assert!(
result.is_ok(),
"Expected parsing to succeed: {:?}",
result.err()
);
}
#[test]
fn test_parse_order_by_expression() {
let sql = "SELECT * FROM test ORDER BY col1 + col2";
let result = parse_sql(sql);
assert!(
result.is_ok(),
"Expected parsing to succeed: {:?}",
result.err()
);
}
#[test]
fn test_parse_order_by_alias() {
let sql = "SELECT price * quantity AS total FROM orders ORDER BY total";
let result = parse_sql(sql);
assert!(
result.is_ok(),
"Expected parsing to succeed: {:?}",
result.err()
);
}
#[test]
fn test_parse_order_by_nulls_first() {
let sql = "SELECT * FROM test ORDER BY col1 NULLS FIRST";
let result = parse_sql(sql);
assert!(
result.is_ok(),
"Expected parsing to succeed: {:?}",
result.err()
);
}
#[test]
fn test_parse_order_by_nulls_last() {
let sql = "SELECT * FROM test ORDER BY col1 DESC NULLS LAST";
let result = parse_sql(sql);
assert!(
result.is_ok(),
"Expected parsing to succeed: {:?}",
result.err()
);
}