use crate::velesql::Parser;
#[test]
fn test_reject_empty_string() {
let query = "";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_whitespace_only() {
let query = " ";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_random_text() {
let query = "hello world";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_select_without_from() {
let query = "SELECT * WHERE id = 1";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_missing_select_keyword() {
let query = "* FROM docs";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_double_semicolons() {
let query = "SELECT * FROM docs;;";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_create_table() {
let query = "CREATE TABLE docs (dimension = 768)";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_drop_table() {
let query = "DROP TABLE docs";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_comparison_without_value() {
let query = "SELECT * FROM docs WHERE id >";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_double_operator() {
let query = "SELECT * FROM docs WHERE id >= <= 5";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_in_with_empty_list() {
let query = "SELECT * FROM docs WHERE id IN ()";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_between_missing_and() {
let query = "SELECT * FROM docs WHERE id BETWEEN 1 5";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_like_without_pattern() {
let query = "SELECT * FROM docs WHERE name LIKE";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_is_without_null() {
let query = "SELECT * FROM docs WHERE name IS";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_near_without_vector() {
let query = "SELECT * FROM docs WHERE vector NEAR LIMIT 10";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_sparse_near_empty_literal() {
let query = "SELECT * FROM docs WHERE vector SPARSE_NEAR {} LIMIT 5";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_near_fused_empty_array() {
let query = "SELECT * FROM docs WHERE vector NEAR_FUSED [] LIMIT 5";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_create_collection_without_name() {
let query = "CREATE COLLECTION";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_drop_without_collection_keyword() {
let query = "DROP docs";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_create_vector_collection_explicit_kind() {
let query = "CREATE VECTOR COLLECTION docs (dimension = 768)";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_delete_without_where() {
let query = "DELETE FROM docs";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_delete_edge_without_id() {
let query = "DELETE EDGE FROM kg";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_insert_edge_incomplete() {
let query = "INSERT EDGE INTO";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_update_without_set() {
let query = "UPDATE docs WHERE id = 1";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_let_missing_name() {
let query = "LET = 5 SELECT * FROM docs LIMIT 5";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_let_missing_assignment() {
let query = "LET x SELECT * FROM docs LIMIT 5";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_train_without_quantizer() {
let query = "TRAIN my_collection WITH (m=8)";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_train_quantizer_without_on() {
let query = "TRAIN QUANTIZER my_collection WITH (m=8)";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_reject_train_quantizer_without_with() {
let query = "TRAIN QUANTIZER ON my_collection";
assert!(Parser::parse(query).is_err(), "Should have failed: {query}");
}
#[test]
fn test_accept_long_collection_name() {
let long_name = "a".repeat(100);
let query = format!("SELECT * FROM {long_name} LIMIT 10");
assert!(
Parser::parse(&query).is_ok(),
"Should have parsed: {:?}",
Parser::parse(&query).err()
);
}
#[test]
fn test_accept_deeply_nested_conditions() {
let query =
"SELECT * FROM docs WHERE (a = 1 AND (b = 2 OR (c = 3 AND (d = 4 OR e = 5)))) LIMIT 10";
assert!(
Parser::parse(query).is_ok(),
"Should have parsed: {:?}",
Parser::parse(query).err()
);
}
#[test]
fn test_accept_trailing_semicolon() {
let query = "SELECT * FROM docs LIMIT 10;";
assert!(
Parser::parse(query).is_ok(),
"Should have parsed: {:?}",
Parser::parse(query).err()
);
}
#[test]
fn test_accept_all_caps_keywords() {
let query = "SELECT * FROM docs WHERE id = 1 LIMIT 10";
assert!(
Parser::parse(query).is_ok(),
"Should have parsed: {:?}",
Parser::parse(query).err()
);
}
#[test]
fn test_accept_mixed_case_keywords() {
let query = "SeLeCt * FrOm docs LiMiT 10";
assert!(
Parser::parse(query).is_ok(),
"Should have parsed: {:?}",
Parser::parse(query).err()
);
}
#[test]
fn test_accept_unicode_in_string_values() {
let query = "SELECT * FROM docs WHERE name = '\u{65E5}\u{672C}\u{8A9E}'";
assert!(
Parser::parse(query).is_ok(),
"Should have parsed: {:?}",
Parser::parse(query).err()
);
}
#[test]
fn test_accept_very_large_integer() {
let query = "SELECT * FROM docs WHERE id = 999999999999";
assert!(
Parser::parse(query).is_ok(),
"Should have parsed: {:?}",
Parser::parse(query).err()
);
}
#[test]
fn test_accept_negative_float() {
let query = "SELECT * FROM docs WHERE score > -0.5";
assert!(
Parser::parse(query).is_ok(),
"Should have parsed: {:?}",
Parser::parse(query).err()
);
}