use stoolap::Database;
fn setup_paren_test_db() -> Database {
let db = Database::open("memory://update_paren").expect("Failed to create database");
db.execute(
"CREATE TABLE paren_test (id INTEGER PRIMARY KEY, value INTEGER)",
(),
)
.expect("Failed to create table");
db.execute("INSERT INTO paren_test (id, value) VALUES (1, 10)", ())
.expect("Failed to insert data");
db
}
#[test]
fn test_update_without_parentheses() {
let db = setup_paren_test_db();
db.execute("UPDATE paren_test SET value = 10 WHERE id = 1", ())
.expect("Failed to reset value");
db.execute(
"UPDATE paren_test SET value = value * 2 + 5 WHERE id = 1",
(),
)
.expect("Failed to update");
let value: i64 = db
.query_one("SELECT value FROM paren_test WHERE id = 1", ())
.expect("Failed to query");
assert_eq!(value, 25, "Expected 25 (10 * 2 + 5)");
}
#[test]
fn test_update_with_outer_parentheses() {
let db = Database::open("memory://update_paren_outer").expect("Failed to create database");
db.execute(
"CREATE TABLE paren_test (id INTEGER PRIMARY KEY, value INTEGER)",
(),
)
.expect("Failed to create table");
db.execute("INSERT INTO paren_test (id, value) VALUES (1, 10)", ())
.expect("Failed to insert data");
db.execute(
"UPDATE paren_test SET value = (value * 2 + 5) WHERE id = 1",
(),
)
.expect("Failed to update");
let value: i64 = db
.query_one("SELECT value FROM paren_test WHERE id = 1", ())
.expect("Failed to query");
assert_eq!(value, 25, "Expected 25 ((10 * 2) + 5)");
}
#[test]
fn test_update_with_multiplication_parentheses() {
let db = Database::open("memory://update_paren_mult").expect("Failed to create database");
db.execute(
"CREATE TABLE paren_test (id INTEGER PRIMARY KEY, value INTEGER)",
(),
)
.expect("Failed to create table");
db.execute("INSERT INTO paren_test (id, value) VALUES (1, 10)", ())
.expect("Failed to insert data");
db.execute(
"UPDATE paren_test SET value = (value * 2) + 5 WHERE id = 1",
(),
)
.expect("Failed to update");
let value: i64 = db
.query_one("SELECT value FROM paren_test WHERE id = 1", ())
.expect("Failed to query");
assert_eq!(value, 25, "Expected 25 ((10 * 2) + 5)");
}
#[test]
fn test_update_with_addition_parentheses() {
let db = Database::open("memory://update_paren_add").expect("Failed to create database");
db.execute(
"CREATE TABLE paren_test (id INTEGER PRIMARY KEY, value INTEGER)",
(),
)
.expect("Failed to create table");
db.execute("INSERT INTO paren_test (id, value) VALUES (1, 10)", ())
.expect("Failed to insert data");
db.execute(
"UPDATE paren_test SET value = value * (2 + 5) WHERE id = 1",
(),
)
.expect("Failed to update");
let value: i64 = db
.query_one("SELECT value FROM paren_test WHERE id = 1", ())
.expect("Failed to query");
assert_eq!(value, 70, "Expected 70 (10 * (2 + 5))");
}
#[test]
fn test_update_with_nested_parentheses() {
let db = Database::open("memory://update_paren_nested").expect("Failed to create database");
db.execute(
"CREATE TABLE paren_test (id INTEGER PRIMARY KEY, value INTEGER)",
(),
)
.expect("Failed to create table");
db.execute("INSERT INTO paren_test (id, value) VALUES (1, 10)", ())
.expect("Failed to insert data");
db.execute(
"UPDATE paren_test SET value = ((value + 5) * 2) WHERE id = 1",
(),
)
.expect("Failed to update");
let value: i64 = db
.query_one("SELECT value FROM paren_test WHERE id = 1", ())
.expect("Failed to query");
assert_eq!(value, 30, "Expected 30 (((10 + 5) * 2))");
}
#[test]
fn test_update_with_division_parentheses() {
let db = Database::open("memory://update_paren_div").expect("Failed to create database");
db.execute(
"CREATE TABLE paren_test (id INTEGER PRIMARY KEY, value INTEGER)",
(),
)
.expect("Failed to create table");
db.execute("INSERT INTO paren_test (id, value) VALUES (1, 100)", ())
.expect("Failed to insert data");
db.execute(
"UPDATE paren_test SET value = value / (2 + 3) WHERE id = 1",
(),
)
.expect("Failed to update");
let value: i64 = db
.query_one("SELECT value FROM paren_test WHERE id = 1", ())
.expect("Failed to query");
assert_eq!(value, 20, "Expected 20 (100 / (2 + 3))");
}
#[test]
fn test_update_with_subtraction_parentheses() {
let db = Database::open("memory://update_paren_sub").expect("Failed to create database");
db.execute(
"CREATE TABLE paren_test (id INTEGER PRIMARY KEY, value INTEGER)",
(),
)
.expect("Failed to create table");
db.execute("INSERT INTO paren_test (id, value) VALUES (1, 50)", ())
.expect("Failed to insert data");
db.execute(
"UPDATE paren_test SET value = (value - 10) * 2 WHERE id = 1",
(),
)
.expect("Failed to update");
let value: i64 = db
.query_one("SELECT value FROM paren_test WHERE id = 1", ())
.expect("Failed to query");
assert_eq!(value, 80, "Expected 80 ((50 - 10) * 2)");
}