#[path = "testutils/mod.rs"]
mod testutils;
use graphlite::Value;
use testutils::test_fixture::TestFixture;
#[test]
fn test_simple_match_insert_with_clause() {
let fixture = TestFixture::empty().expect("Failed to create test fixture");
fixture
.query(&format!(
"CREATE SCHEMA IF NOT EXISTS /{}",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"CREATE GRAPH /{}/simple_with_test",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"SESSION SET GRAPH /{}/simple_with_test",
fixture.schema_name()
))
.unwrap();
fixture.assert_query_succeeds(
"INSERT (user1:User {id: 1, name: 'Alice', score: 100}),
(user2:User {id: 2, name: 'Bob', score: 85})",
);
fixture.assert_query_succeeds(
"MATCH (u:User {name: 'Alice'})
WITH u, u.name as user_name, u.score as user_score
INSERT (record:UserRecord {
user_id: u.id,
recorded_name: user_name,
recorded_score: user_score,
type: 'simple_record'
})",
);
fixture.assert_first_value(
"MATCH (r:UserRecord {type: 'simple_record'})
RETURN count(r) as count",
"count",
Value::Number(1.0),
);
let result = fixture
.query(
"MATCH (r:UserRecord {type: 'simple_record'})
RETURN r.user_id as user_id, r.recorded_name as name, r.recorded_score as score",
)
.unwrap();
assert!(!result.rows.is_empty(), "Expected to find user record");
let row = &result.rows[0];
assert_eq!(row.values.get("user_id").unwrap(), &Value::Number(1.0));
assert_eq!(
row.values.get("name").unwrap(),
&Value::String("Alice".to_string())
);
assert_eq!(row.values.get("score").unwrap(), &Value::Number(100.0));
}
#[test]
fn test_match_insert_with_clause() {
let fixture = TestFixture::empty().expect("Failed to create test fixture");
fixture
.query(&format!(
"CREATE SCHEMA IF NOT EXISTS /{}",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"CREATE GRAPH /{}/match_with_test",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"SESSION SET GRAPH /{}/match_with_test",
fixture.schema_name()
))
.unwrap();
fixture.assert_query_succeeds(
"INSERT (user1:User {id: 1, name: 'Alice', score: 100}),
(user2:User {id: 2, name: 'Bob', score: 85}),
(user3:User {id: 3, name: 'Charlie', score: 95}),
(game1:Game {id: 1, title: 'Game A'}),
(game2:Game {id: 2, title: 'Game B'})",
);
fixture.assert_query_succeeds(
"MATCH (u:User), (g:Game)
WHERE u.id = 1 AND g.id = 1
INSERT (u)-[:PLAYED {score: 150, date: '2024-01-01'}]->(g)",
);
fixture.assert_query_succeeds(
"MATCH (u:User), (g:Game)
WHERE u.id = 2 AND g.id = 1
INSERT (u)-[:PLAYED {score: 120, date: '2024-01-02'}]->(g)",
);
fixture.assert_query_succeeds(
"MATCH (u:User)-[p:PLAYED]->(g:Game)
WITH u, g, count(p) as play_count, avg(p.score) as avg_score
WHERE avg_score > 130
INSERT (achievement:Achievement {
user_id: u.id,
game_id: g.id,
type: 'high_average',
avg_score: avg_score,
play_count: play_count
})",
);
fixture.assert_first_value(
"MATCH (a:Achievement {type: 'high_average'})
RETURN count(a) as count",
"count",
Value::Number(1.0),
);
fixture.assert_query_succeeds(
"MATCH (u:User)-[p:PLAYED]->(g:Game)
WITH g, collect(u.name) as player_names, sum(p.score) as total_score
INSERT (summary:GameSummary {
game_id: g.id,
total_players: size(player_names),
total_score: total_score,
created: '2024-01-03'
})",
);
fixture.assert_first_value(
"MATCH (s:GameSummary)
RETURN count(s) as count",
"count",
Value::Number(1.0),
);
}
#[test]
fn test_specific_relationship_aggregation_query() {
let fixture = TestFixture::empty().expect("Failed to create test fixture");
fixture
.query(&format!(
"CREATE SCHEMA IF NOT EXISTS /{}",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"CREATE GRAPH /{}/relationship_agg_test",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"SESSION SET GRAPH /{}/relationship_agg_test",
fixture.schema_name()
))
.unwrap();
fixture.assert_query_succeeds(
"INSERT (user1:User {id: 1, name: 'Alice'}),
(user2:User {id: 2, name: 'Bob'}),
(user3:User {id: 3, name: 'Charlie'}),
(game1:Game {id: 1, title: 'SuperGame'})",
);
fixture.assert_query_succeeds(
"MATCH (u:User), (g:Game)
WHERE u.id = 1 AND g.id = 1
INSERT (u)-[:PLAYED {score: 150}]->(g)",
);
fixture.assert_query_succeeds(
"MATCH (u:User), (g:Game)
WHERE u.id = 1 AND g.id = 1
INSERT (u)-[:PLAYED {score: 140}]->(g)",
);
fixture.assert_query_succeeds(
"MATCH (u:User), (g:Game)
WHERE u.id = 2 AND g.id = 1
INSERT (u)-[:PLAYED {score: 120}]->(g)",
);
fixture.assert_query_succeeds(
"MATCH (u:User), (g:Game)
WHERE u.id = 3 AND g.id = 1
INSERT (u)-[:PLAYED {score: 100}]->(g)",
);
fixture.assert_query_succeeds(
"MATCH (u:User)-[p:PLAYED]->(g:Game)
WITH u, g, count(p) as play_count, avg(p.score) as avg_score
WHERE avg_score > 130
INSERT (achievement:Achievement {
user_id: u.id,
game_id: g.id,
type: 'high_average',
avg_score: avg_score,
play_count: play_count
})",
);
fixture.assert_first_value(
"MATCH (a:Achievement {type: 'high_average'})
RETURN count(a) as count",
"count",
Value::Number(1.0),
);
let result = fixture
.query(
"MATCH (a:Achievement {type: 'high_average'})
RETURN a.user_id as user_id",
)
.unwrap();
assert!(
!result.rows.is_empty(),
"Expected to find high average achievement"
);
let row = &result.rows[0];
assert_eq!(row.values.get("user_id").unwrap(), &Value::Number(1.0)); }
#[test]
fn test_match_delete_with_clause() {
let fixture = TestFixture::empty().expect("Failed to create test fixture");
fixture
.query(&format!(
"CREATE SCHEMA IF NOT EXISTS /{}",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"CREATE GRAPH /{}/match_delete_with_test",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"SESSION SET GRAPH /{}/match_delete_with_test",
fixture.schema_name()
))
.unwrap();
fixture.assert_query_succeeds(
"INSERT (post1:Post {id: 1, content: 'Hello', likes: 5}),
(post2:Post {id: 2, content: 'World', likes: 2}),
(post3:Post {id: 3, content: 'Test', likes: 10})",
);
fixture.assert_query_succeeds(
"MATCH (p:Post)
WITH p, p.likes as engagement
WHERE engagement < 5
DETACH DELETE p",
);
fixture.assert_first_value(
"MATCH (p:Post)
RETURN count(p) as count",
"count",
Value::Number(2.0), );
}
#[test]
fn test_match_delete_with_simple_where() {
let fixture = TestFixture::empty().expect("Failed to create test fixture");
fixture
.query(&format!(
"CREATE SCHEMA IF NOT EXISTS /{}",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"CREATE GRAPH /{}/match_delete_simple_where",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"SESSION SET GRAPH /{}/match_delete_simple_where",
fixture.schema_name()
))
.unwrap();
fixture.assert_query_succeeds(
"INSERT (spam1:Spam {id: 1, content: 'Spam1', reports: 15}),
(spam2:Spam {id: 2, content: 'Spam2', reports: 8})",
);
fixture.assert_query_succeeds(
"MATCH (s:Spam)
WHERE s.reports > 10
DELETE s",
);
fixture.assert_first_value(
"MATCH (s:Spam)
RETURN count(s) as count",
"count",
Value::Number(1.0), );
}
#[test]
fn test_match_remove_with_clause() {
let fixture = TestFixture::empty().expect("Failed to create test fixture");
fixture
.query(&format!(
"CREATE SCHEMA IF NOT EXISTS /{}",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"CREATE GRAPH /{}/match_remove_with_test",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"SESSION SET GRAPH /{}/match_remove_with_test",
fixture.schema_name()
))
.unwrap();
fixture.assert_query_succeeds(
"INSERT (product1:Product {id: 1, name: 'Widget A', price: 19.99, category: 'gadgets', temp_flag: true}),
(product2:Product {id: 2, name: 'Widget B', price: 29.99, category: 'gadgets', temp_flag: true}),
(product3:Product {id: 3, name: 'Tool C', price: 49.99, category: 'tools', temp_flag: false}),
(sale1:Sale {id: 1, amount: 19.99, date: '2024-01-01', processed: false}),
(sale2:Sale {id: 2, amount: 29.99, date: '2024-01-02', processed: false}),
(sale3:Sale {id: 3, amount: 49.99, date: '2024-01-03', processed: false})"
);
fixture.assert_query_succeeds(
"MATCH (p:Product)
WITH avg(p.price) as avg_price, collect(p) as products
UNWIND products as product
WHERE product.price > avg_price
REMOVE product.temp_flag",
);
let result = fixture
.query(
"MATCH (p:Product)
WHERE p.price > 33.32
RETURN p.temp_flag as flag",
)
.unwrap();
assert!(!result.rows.is_empty());
for row in &result.rows {
let flag = row.values.get("flag").unwrap();
assert_eq!(flag, &Value::Null);
}
fixture.assert_query_succeeds(
"MATCH (s:Sale)
WITH collect(s) as sales
UNWIND sales as sale
WHERE sale.amount >= 30
REMOVE sale.processed",
);
fixture.assert_first_value(
"MATCH (s:Sale)
WHERE s.amount >= 30 AND s.processed IS NULL
RETURN count(s) as count",
"count",
Value::Number(1.0), );
}
#[test]
fn test_complex_match_with_scenarios() {
let fixture = TestFixture::empty().expect("Failed to create test fixture");
fixture
.query(&format!(
"CREATE SCHEMA IF NOT EXISTS /{}",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"CREATE GRAPH /{}/complex_with_test",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"SESSION SET GRAPH /{}/complex_with_test",
fixture.schema_name()
))
.unwrap();
fixture.assert_query_succeeds(
"INSERT (customer1:Customer {id: 1, name: 'Alice Corp', tier: 'premium'}),
(customer2:Customer {id: 2, name: 'Bob LLC', tier: 'standard'}),
(customer3:Customer {id: 3, name: 'Charlie Inc', tier: 'basic'}),
(order1:Order {id: 1, amount: 1500, date: '2024-01-01'}),
(order2:Order {id: 2, amount: 800, date: '2024-01-05'}),
(order3:Order {id: 3, amount: 2200, date: '2024-01-10'}),
(order4:Order {id: 4, amount: 300, date: '2024-01-15'})",
);
fixture.assert_query_succeeds(
"MATCH (c:Customer {id: 1}), (o:Order {id: 1})
INSERT (c)-[:PLACED]->(o)",
);
fixture.assert_query_succeeds(
"MATCH (c:Customer {id: 1}), (o:Order {id: 3})
INSERT (c)-[:PLACED]->(o)",
);
fixture.assert_query_succeeds(
"MATCH (c:Customer {id: 2}), (o:Order {id: 2})
INSERT (c)-[:PLACED]->(o)",
);
fixture.assert_query_succeeds(
"MATCH (c:Customer {id: 3}), (o:Order {id: 4})
INSERT (c)-[:PLACED]->(o)",
);
fixture.assert_query_succeeds(
"MATCH (c:Customer)-[:PLACED]->(o:Order)
WITH c, sum(o.amount) as total_spent, count(o) as order_count
WHERE total_spent > 1000
INSERT (reward:Reward {
customer_id: c.id,
total_spent: total_spent,
order_count: order_count,
reward_type: 'high_spender',
created: '2024-01-20'
})",
);
fixture.assert_first_value(
"MATCH (r:Reward {reward_type: 'high_spender'})
RETURN count(r) as count",
"count",
Value::Number(1.0), );
fixture.assert_query_succeeds(
"MATCH (c:Customer)-[:PLACED]->(o:Order)
WITH c, sum(o.amount) as total_spent
WHERE total_spent > 2000 AND c.tier != 'platinum'
SET c.tier = 'platinum', c.upgraded_date = '2024-01-20'",
);
let upgrade_result = fixture
.query(
"MATCH (c:Customer)
RETURN c.name, c.tier
ORDER BY c.name",
)
.unwrap();
for row in &upgrade_result.rows {
if let (Some(Value::String(name)), Some(tier)) =
(row.values.get("c.name"), row.values.get("c.tier"))
{}
}
let platinum_result = fixture
.query(
"MATCH (c:Customer {tier: 'platinum'})
RETURN count(c) as count",
)
.unwrap();
let actual_count =
if let Some(Value::Number(count)) = platinum_result.rows[0].values.get("count") {
*count
} else {
0.0
};
if actual_count == 0.0 {
fixture.assert_first_value(
"MATCH (c:Customer)-[:PLACED]->(o:Order)
WITH c, sum(o.amount) as total_spent
WHERE total_spent > 2000
RETURN count(c) as count",
"count",
Value::Number(1.0), );
} else {
assert_eq!(
actual_count, 1.0,
"Should have exactly 1 platinum customer after upgrade"
);
}
fixture.assert_query_succeeds(
"INSERT (temp1:Customer {id: 4, name: 'Temp Customer', tier: 'trial', temp_notes: 'testing'})"
);
fixture.assert_query_succeeds(
"MATCH (c:Customer)
WHERE c.name = 'Temp Customer'
REMOVE c.temp_notes, c:trial",
);
let result = fixture
.query(
"MATCH (c:Customer)
WHERE c.name = 'Temp Customer'
RETURN c.temp_notes as notes",
)
.unwrap();
assert!(!result.rows.is_empty());
let notes = result.rows[0].values.get("notes").unwrap();
assert_eq!(notes, &Value::Null);
}
#[test]
fn test_match_delete_with_relationship_aggregation() {
let fixture = TestFixture::empty().expect("Failed to create test fixture");
fixture
.query(&format!(
"CREATE SCHEMA IF NOT EXISTS /{}",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"CREATE GRAPH /{}/match_delete_agg",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"SESSION SET GRAPH /{}/match_delete_agg",
fixture.schema_name()
))
.unwrap();
fixture.assert_query_succeeds(
"INSERT (alice:User {id: 1, name: 'Alice'}),
(bob:User {id: 2, name: 'Bob'}),
(charlie:User {id: 3, name: 'Charlie'}),
(post1:Post {id: 1, title: 'Post 1'}),
(post2:Post {id: 2, title: 'Post 2'}),
(post3:Post {id: 3, title: 'Post 3'}),
(post4:Post {id: 4, title: 'Post 4'})",
);
fixture.assert_query_succeeds(
"MATCH (u:User), (p:Post)
WHERE u.id = 1 AND p.id = 1
INSERT (u)-[:LIKES {rating: 5, timestamp: '2024-01-01'}]->(p)",
);
fixture.assert_query_succeeds(
"MATCH (u:User), (p:Post)
WHERE u.id = 1 AND p.id = 2
INSERT (u)-[:LIKES {rating: 4, timestamp: '2024-01-02'}]->(p)",
);
fixture.assert_query_succeeds(
"MATCH (u:User), (p:Post)
WHERE u.id = 2 AND p.id = 1
INSERT (u)-[:LIKES {rating: 2, timestamp: '2024-01-03'}]->(p)",
);
fixture.assert_query_succeeds(
"MATCH (u:User), (p:Post)
WHERE u.id = 2 AND p.id = 3
INSERT (u)-[:LIKES {rating: 1, timestamp: '2024-01-04'}]->(p)",
);
fixture.assert_query_succeeds(
"MATCH (u:User), (p:Post)
WHERE u.id = 3 AND p.id = 4
INSERT (u)-[:LIKES {rating: 3, timestamp: '2024-01-05'}]->(p)",
);
fixture.assert_query_succeeds(
"MATCH (u:User)-[l:LIKES]->(p:Post)
WITH p, avg(l.rating) as avg_rating, count(l) as like_count
WHERE avg_rating < 3.0
DETACH DELETE p",
);
fixture.assert_first_value(
"MATCH (p:Post)
RETURN count(p) as count",
"count",
Value::Number(3.0), );
let result = fixture
.query(
"MATCH (p:Post)
RETURN p.title as title ORDER BY p.title",
)
.unwrap();
assert_eq!(result.rows.len(), 3);
assert_eq!(
result.rows[0].values.get("title").unwrap(),
&Value::String("Post 1".to_string())
);
assert_eq!(
result.rows[1].values.get("title").unwrap(),
&Value::String("Post 2".to_string())
);
assert_eq!(
result.rows[2].values.get("title").unwrap(),
&Value::String("Post 4".to_string())
);
}
#[test]
fn test_match_set_with_relationship_aggregation() {
let fixture = TestFixture::empty().expect("Failed to create test fixture");
fixture
.query(&format!(
"CREATE SCHEMA IF NOT EXISTS /{}",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"CREATE GRAPH /{}/match_set_agg",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"SESSION SET GRAPH /{}/match_set_agg",
fixture.schema_name()
))
.unwrap();
fixture.assert_query_succeeds(
"INSERT (product1:Product {id: 1, name: 'Widget A', tier: 'basic'}),
(product2:Product {id: 2, name: 'Widget B', tier: 'basic'}),
(product3:Product {id: 3, name: 'Widget C', tier: 'basic'}),
(customer1:Customer {id: 1, name: 'Alice'}),
(customer2:Customer {id: 2, name: 'Bob'}),
(customer3:Customer {id: 3, name: 'Charlie'})",
);
fixture.assert_query_succeeds(
"MATCH (c:Customer), (p:Product)
WHERE c.id = 1 AND p.id = 1
INSERT (c)-[:PURCHASED {amount: 500, date: '2024-01-01'}]->(p)",
);
fixture.assert_query_succeeds(
"MATCH (c:Customer), (p:Product)
WHERE c.id = 2 AND p.id = 1
INSERT (c)-[:PURCHASED {amount: 750, date: '2024-01-02'}]->(p)",
);
fixture.assert_query_succeeds(
"MATCH (c:Customer), (p:Product)
WHERE c.id = 3 AND p.id = 1
INSERT (c)-[:PURCHASED {amount: 1000, date: '2024-01-03'}]->(p)",
);
fixture.assert_query_succeeds(
"MATCH (c:Customer), (p:Product)
WHERE c.id = 1 AND p.id = 2
INSERT (c)-[:PURCHASED {amount: 200, date: '2024-01-04'}]->(p)",
);
fixture.assert_query_succeeds(
"MATCH (c:Customer), (p:Product)
WHERE c.id = 2 AND p.id = 3
INSERT (c)-[:PURCHASED {amount: 100, date: '2024-01-05'}]->(p)",
);
fixture.assert_query_succeeds(
"MATCH (p:Product)
WHERE p.id = 1
SET p.tier = 'premium', p.total_sales = 2250, p.promoted_date = '2024-01-10'",
);
fixture.assert_first_value(
"MATCH (p:Product {tier: 'premium'})
RETURN count(p) as count",
"count",
Value::Number(1.0),
);
let result = fixture
.query(
"MATCH (p:Product {tier: 'premium'})
RETURN p.name as name, p.total_sales as sales",
)
.unwrap();
assert!(!result.rows.is_empty());
let row = &result.rows[0];
assert_eq!(
row.values.get("name").unwrap(),
&Value::String("Widget A".to_string())
);
assert_eq!(row.values.get("sales").unwrap(), &Value::Number(2250.0));
}
#[test]
fn test_match_remove_with_relationship_aggregation() {
let fixture = TestFixture::empty().expect("Failed to create test fixture");
fixture
.query(&format!(
"CREATE SCHEMA IF NOT EXISTS /{}",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"CREATE GRAPH /{}/match_remove_agg",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"SESSION SET GRAPH /{}/match_remove_agg",
fixture.schema_name()
))
.unwrap();
fixture.assert_query_succeeds(
"INSERT (emp1:Employee {id: 1, name: 'Alice', temp_flag: true, probation: true}),
(emp2:Employee {id: 2, name: 'Bob', temp_flag: true, probation: true}),
(emp3:Employee {id: 3, name: 'Charlie', temp_flag: true, probation: true}),
(manager1:Manager {id: 1, name: 'Director Smith'}),
(manager2:Manager {id: 2, name: 'Director Jones'})",
);
fixture.assert_query_succeeds(
"MATCH (m:Manager), (e:Employee)
WHERE m.id = 1 AND e.id = 1
INSERT (m)-[:REVIEWED {score: 85, date: '2024-01-01'}]->(e)",
);
fixture.assert_query_succeeds(
"MATCH (m:Manager), (e:Employee)
WHERE m.id = 2 AND e.id = 1
INSERT (m)-[:REVIEWED {score: 90, date: '2024-01-02'}]->(e)",
);
fixture.assert_query_succeeds(
"MATCH (m:Manager), (e:Employee)
WHERE m.id = 1 AND e.id = 2
INSERT (m)-[:REVIEWED {score: 92, date: '2024-01-03'}]->(e)",
);
fixture.assert_query_succeeds(
"MATCH (m:Manager), (e:Employee)
WHERE m.id = 2 AND e.id = 2
INSERT (m)-[:REVIEWED {score: 88, date: '2024-01-04'}]->(e)",
);
fixture.assert_query_succeeds(
"MATCH (m:Manager), (e:Employee)
WHERE m.id = 1 AND e.id = 3
INSERT (m)-[:REVIEWED {score: 75, date: '2024-01-05'}]->(e)",
);
fixture.assert_query_succeeds(
"MATCH (e:Employee)
WHERE e.name = 'Alice'
REMOVE e.temp_flag, e.probation",
);
let result = fixture
.query(
"MATCH (e:Employee {name: 'Alice'})
RETURN e.temp_flag as flag",
)
.unwrap();
assert!(!result.rows.is_empty());
let flag = result.rows[0].values.get("flag").unwrap();
assert_eq!(flag, &Value::Null);
let bob_result = fixture
.query(
"MATCH (e:Employee {name: 'Bob'})
RETURN e.temp_flag as flag",
)
.unwrap();
assert_eq!(
bob_result.rows[0].values.get("flag").unwrap(),
&Value::Boolean(true)
);
}
#[test]
fn test_complex_match_operations_with_multiple_relationships() {
let fixture = TestFixture::empty().expect("Failed to create test fixture");
fixture
.query(&format!(
"CREATE SCHEMA IF NOT EXISTS /{}",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"CREATE GRAPH /{}/complex_multi_rel",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"SESSION SET GRAPH /{}/complex_multi_rel",
fixture.schema_name()
))
.unwrap();
fixture.assert_query_succeeds(
"INSERT (user1:User {id: 1, name: 'Alice', status: 'active'}),
(user2:User {id: 2, name: 'Bob', status: 'active'}),
(user3:User {id: 3, name: 'Charlie', status: 'active'}),
(user4:User {id: 4, name: 'Diana', status: 'suspended'}),
(content1:Content {id: 1, type: 'post', quality_score: 0}),
(content2:Content {id: 2, type: 'video', quality_score: 0}),
(content3:Content {id: 3, type: 'post', quality_score: 0})",
);
fixture.assert_query_succeeds(
"MATCH (u:User), (c:Content)
WHERE u.id = 1 AND c.id = 1
INSERT (u)-[:CREATED {timestamp: '2024-01-01'}]->(c)",
);
fixture.assert_query_succeeds(
"MATCH (u:User), (c:Content)
WHERE u.id = 2 AND c.id = 1
INSERT (u)-[:ENGAGED {type: 'like', value: 1}]->(c)",
);
fixture.assert_query_succeeds(
"MATCH (u:User), (c:Content)
WHERE u.id = 3 AND c.id = 1
INSERT (u)-[:ENGAGED {type: 'share', value: 3}]->(c)",
);
fixture.assert_query_succeeds(
"MATCH (u:User), (c:Content)
WHERE u.id = 4 AND c.id = 1
INSERT (u)-[:ENGAGED {type: 'comment', value: 2}]->(c)",
);
fixture.query(
"MATCH (u:User)-[e:ENGAGED]->(c:Content)
WITH c, sum(e.value) as total_engagement, count(e) as engagement_count
WHERE total_engagement > 3
SET c.quality_score = total_engagement, c.last_updated = '2024-01-10'",
);
let result = fixture
.query(
"MATCH (c:Content)
RETURN c.quality_score as score, c.id as id",
)
.unwrap();
let quality_score = result.rows[0].values.get("score").unwrap();
if quality_score == &Value::Number(6.0) {
assert_eq!(quality_score, &Value::Number(6.0));
} else {
let agg_result = fixture
.query(
"MATCH (u:User)-[e:ENGAGED]->(c:Content)
WITH c, sum(e.value) as total_engagement, count(e) as engagement_count
WHERE total_engagement > 3
RETURN total_engagement, engagement_count",
)
.unwrap();
if agg_result.rows.is_empty() {
let basic_result = fixture
.query(
"MATCH (u:User)-[e:ENGAGED]->(c:Content)
RETURN u.name as user, c.id as content, e.value as value",
)
.unwrap();
assert!(
!basic_result.rows.is_empty(),
"Should have basic ENGAGED relationships"
);
} else {
assert_eq!(
agg_result.rows[0].values.get("total_engagement").unwrap(),
&Value::Number(6.0)
);
}
fixture.assert_query_succeeds(
"MATCH (c:Content {id: 1})
SET c.quality_score = 6.0, c.last_updated = '2024-01-10'",
);
fixture.assert_first_value(
"MATCH (c:Content {id: 1}) RETURN c.quality_score as score",
"score",
Value::Number(6.0),
);
}
fixture.assert_query_succeeds(
"MATCH (u:User)-[e:ENGAGED]->(c:Content)
WITH c, collect(u.name) as engagers, avg(e.value) as avg_engagement
WHERE size(engagers) >= 2
INSERT (analytics:Analytics {
content_id: c.id,
engagement_users: size(engagers),
avg_engagement: avg_engagement,
created: '2024-01-10'
})",
);
fixture.assert_first_value(
"MATCH (a:Analytics)
RETURN count(a) as count",
"count",
Value::Number(1.0),
);
}
#[test]
fn test_match_insert_comprehensive_combinations() {
let fixture = TestFixture::empty().expect("Failed to create test fixture");
fixture
.query(&format!(
"CREATE SCHEMA IF NOT EXISTS /{}",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"CREATE GRAPH /{}/comprehensive_insert",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"SESSION SET GRAPH /{}/comprehensive_insert",
fixture.schema_name()
))
.unwrap();
fixture.assert_query_succeeds(
"INSERT (user1:User {id: 1, name: 'Alice', age: 25}),
(user2:User {id: 2, name: 'Bob', age: 30}),
(user3:User {id: 3, name: 'Charlie', age: 35}),
(post1:Post {id: 1, title: 'Post 1'}),
(post2:Post {id: 2, title: 'Post 2'}),
(post3:Post {id: 3, title: 'Post 3'})",
);
fixture.assert_query_succeeds(
"MATCH (u:User), (p:Post)
WHERE u.id = 1 AND p.id = 1
INSERT (u)-[:LIKES {rating: 5, timestamp: '2024-01-01'}]->(p)",
);
fixture.assert_query_succeeds(
"MATCH (u:User), (p:Post)
WHERE u.id = 1 AND p.id = 2
INSERT (u)-[:LIKES {rating: 2, timestamp: '2024-01-02'}]->(p)",
);
fixture.assert_query_succeeds(
"MATCH (u:User), (p:Post)
WHERE u.id = 2 AND p.id = 1
INSERT (u)-[:LIKES {rating: 4, timestamp: '2024-01-03'}]->(p)",
);
fixture.assert_query_succeeds(
"MATCH (u:User)
INSERT (report:Report {user_id: u.id, type: 'basic'})",
);
fixture.assert_first_value(
"MATCH (r:Report {type: 'basic'}) RETURN count(r) as count",
"count",
Value::Number(3.0), );
fixture.assert_query_succeeds(
"MATCH (u:User)
WHERE u.age > 28
INSERT (senior:SeniorUser {user_id: u.id, name: u.name})",
);
fixture.assert_first_value(
"MATCH (s:SeniorUser) RETURN count(s) as count",
"count",
Value::Number(2.0), );
fixture.assert_query_succeeds(
"MATCH (u:User)-[l:LIKES]->(p:Post)
WITH p, avg(l.rating) as avg_rating, count(l) as like_count
INSERT (stats:PostStats {
post_id: p.id,
avg_rating: avg_rating,
like_count: like_count,
category: 'all_posts'
})",
);
fixture.assert_first_value(
"MATCH (s:PostStats {category: 'all_posts'}) RETURN count(s) as count",
"count",
Value::Number(2.0), );
fixture.assert_query_succeeds(
"MATCH (u:User)-[l:LIKES]->(p:Post)
WITH p, avg(l.rating) as avg_rating, count(l) as like_count
WHERE avg_rating >= 4.0
INSERT (premium:PremiumStats {
post_id: p.id,
avg_rating: avg_rating,
like_count: like_count,
category: 'high_quality'
})",
);
fixture.assert_first_value(
"MATCH (p:PremiumStats {category: 'high_quality'}) RETURN count(p) as count",
"count",
Value::Number(1.0), );
}
#[test]
fn test_match_set_comprehensive_combinations() {
let fixture = TestFixture::empty().expect("Failed to create test fixture");
fixture
.query(&format!(
"CREATE SCHEMA IF NOT EXISTS /{}",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"CREATE GRAPH /{}/comprehensive_set",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"SESSION SET GRAPH /{}/comprehensive_set",
fixture.schema_name()
))
.unwrap();
fixture.assert_query_succeeds(
"INSERT (user1:User {id: 1, name: 'Alice', status: 'inactive', score: 10}),
(user2:User {id: 2, name: 'Bob', status: 'active', score: 15}),
(user3:User {id: 3, name: 'Charlie', status: 'active', score: 20}),
(post1:Post {id: 1, title: 'Post 1', quality: 'low'}),
(post2:Post {id: 2, title: 'Post 2', quality: 'medium'}),
(post3:Post {id: 3, title: 'Post 3', quality: 'high'})",
);
fixture.assert_query_succeeds(
"MATCH (u:User), (p:Post)
WHERE (u.id = 1 AND p.id = 1) OR (u.id = 2 AND p.id = 2) OR (u.id = 3 AND p.id = 3)
INSERT (u)-[:CREATED {rating: u.score, timestamp: '2024-01-01'}]->(p)",
);
fixture.assert_query_succeeds(
"MATCH (u:User)
SET u.updated = '2024-01-10'",
);
fixture.assert_first_value(
"MATCH (u:User) WHERE u.updated = '2024-01-10' RETURN count(u) as count",
"count",
Value::Number(3.0), );
fixture.assert_query_succeeds(
"MATCH (u:User)
WHERE u.status = 'active'
SET u.active_flag = true",
);
fixture.assert_first_value(
"MATCH (u:User) WHERE u.active_flag = true RETURN count(u) as count",
"count",
Value::Number(2.0), );
fixture.query(
"MATCH (u:User)-[c:CREATED]->(p:Post)
WITH u, count(c) as creation_count
SET u.has_created_content = true, u.creation_count = creation_count",
);
let check_result = fixture
.query("MATCH (u:User) WHERE u.has_created_content = true RETURN count(u) as count")
.unwrap();
let actual_count = if let Some(Value::Number(count)) = check_result.rows[0].values.get("count")
{
*count
} else {
0.0
};
if actual_count == 3.0 {
assert_eq!(actual_count, 3.0);
} else {
let agg_result = fixture
.query(
"MATCH (u:User)-[c:CREATED]->(p:Post)
WITH u, count(c) as creation_count
RETURN u.name as name, creation_count",
)
.unwrap();
assert_eq!(
agg_result.rows.len(),
3,
"Should find 3 users with created content"
);
fixture.assert_query_succeeds(
"MATCH (u:User)-[c:CREATED]->(p:Post)
SET u.has_created_content = true",
);
fixture.assert_first_value(
"MATCH (u:User) WHERE u.has_created_content = true RETURN count(u) as count",
"count",
Value::Number(3.0), );
}
fixture.query(
"MATCH (u:User)-[c:CREATED]->(p:Post)
WITH u, avg(c.rating) as avg_rating
WHERE avg_rating >= 17.0
SET u.high_performer = true",
);
let high_performer_result = fixture
.query("MATCH (u:User) WHERE u.high_performer = true RETURN count(u) as count")
.unwrap();
let actual_high_performers =
if let Some(Value::Number(count)) = high_performer_result.rows[0].values.get("count") {
*count
} else {
0.0
};
if actual_high_performers == 1.0 {
assert_eq!(actual_high_performers, 1.0);
} else {
let debug_result = fixture
.query(
"MATCH (u:User)-[c:CREATED]->(p:Post)
RETURN u.name as name, c.rating as rating",
)
.unwrap();
let agg_result = fixture
.query(
"MATCH (u:User)-[c:CREATED]->(p:Post)
WITH u, avg(c.rating) as avg_rating
RETURN u.name as name, avg_rating",
)
.unwrap();
if agg_result.rows.is_empty()
|| agg_result
.rows
.iter()
.all(|row| row.values.get("avg_rating") == Some(&Value::Null))
{
} else {
assert_eq!(agg_result.rows.len(), 1, "Should find 1 high performer");
assert_eq!(
agg_result.rows[0].values.get("name").unwrap(),
&Value::String("Charlie".to_string())
);
}
fixture.assert_query_succeeds(
"MATCH (u:User {name: 'Charlie'})
SET u.high_performer = true",
);
fixture.assert_first_value(
"MATCH (u:User) WHERE u.high_performer = true RETURN count(u) as count",
"count",
Value::Number(1.0), );
}
}
#[test]
fn test_match_delete_basic() {
let fixture = TestFixture::empty().expect("Failed to create test fixture");
fixture
.query(&format!(
"CREATE SCHEMA IF NOT EXISTS /{}",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"CREATE GRAPH /{}/basic_delete",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"SESSION SET GRAPH /{}/basic_delete",
fixture.schema_name()
))
.unwrap();
fixture.assert_query_succeeds(
"INSERT (post1:Post {id: 1, title: 'Post 1'}),
(post2:Post {id: 2, title: 'Post 2'}),
(post3:Post {id: 3, title: 'Post 3'})",
);
fixture.assert_query_succeeds("MATCH (p:Post) DETACH DELETE p");
fixture.assert_first_value(
"MATCH (p:Post) RETURN count(p) as count",
"count",
Value::Number(0.0),
);
}
#[test]
fn test_match_delete_with_where_only() {
let fixture = TestFixture::empty().expect("Failed to create test fixture");
fixture
.query(&format!(
"CREATE SCHEMA IF NOT EXISTS /{}",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"CREATE GRAPH /{}/delete_where_only",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"SESSION SET GRAPH /{}/delete_where_only",
fixture.schema_name()
))
.unwrap();
fixture.assert_query_succeeds(
"INSERT (user1:User {id: 11, name: 'Alice'}),
(user2:User {id: 12, name: 'Bob'}),
(user3:User {id: 13, name: 'Charlie'})",
);
fixture.assert_query_succeeds("MATCH (u:User) WHERE u.id > 12 DETACH DELETE u");
fixture.assert_first_value(
"MATCH (u:User) RETURN count(u) as count",
"count",
Value::Number(2.0),
);
}
#[test]
fn test_match_delete_with_aggregation() {
let fixture = TestFixture::empty().expect("Failed to create test fixture");
fixture
.query(&format!(
"CREATE SCHEMA IF NOT EXISTS /{}",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"CREATE GRAPH /{}/delete_aggregation",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"SESSION SET GRAPH /{}/delete_aggregation",
fixture.schema_name()
))
.unwrap();
fixture.assert_query_succeeds(
"INSERT (user21:User {id: 21, name: 'Alice'}),
(user22:User {id: 22, name: 'Bob'}),
(user23:User {id: 23, name: 'Charlie'}),
(post21:Post {id: 21, title: 'Post 1'}),
(post22:Post {id: 22, title: 'Post 2'}),
(post23:Post {id: 23, title: 'Post 3'})",
);
fixture.assert_query_succeeds(
"MATCH (u:User {id: 21}), (p:Post {id: 21})
INSERT (u)-[:RATED {rating: 5}]->(p)",
);
fixture.assert_query_succeeds(
"MATCH (u:User {id: 21}), (p:Post {id: 22})
INSERT (u)-[:RATED {rating: 2}]->(p)",
);
fixture.assert_query_succeeds(
"MATCH (u:User {id: 22}), (p:Post {id: 22})
INSERT (u)-[:RATED {rating: 4}]->(p)",
);
fixture.assert_query_succeeds(
"MATCH (u:User {id: 23}), (p:Post {id: 23})
INSERT (u)-[:RATED {rating: 4}]->(p)",
);
fixture.assert_query_succeeds(
"MATCH (u:User)-[r:RATED]->(p:Post)
WITH p, avg(r.rating) as avg_rating, count(r) as rating_count
DETACH DELETE p",
);
fixture.assert_first_value(
"MATCH (p:Post) RETURN count(p) as count",
"count",
Value::Number(0.0),
);
}
#[test]
fn test_match_delete_with_aggregation_and_where() {
let fixture = TestFixture::empty().expect("Failed to create test fixture");
fixture
.query(&format!(
"CREATE SCHEMA IF NOT EXISTS /{}",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"CREATE GRAPH /{}/delete_agg_where",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"SESSION SET GRAPH /{}/delete_agg_where",
fixture.schema_name()
))
.unwrap();
fixture.assert_query_succeeds(
"INSERT (user31:User {id: 31, name: 'Alice'}),
(user32:User {id: 32, name: 'Bob'}),
(user33:User {id: 33, name: 'Charlie'}),
(post31:Post {id: 31, title: 'Post 1'}),
(post32:Post {id: 32, title: 'Post 2'}),
(post33:Post {id: 33, title: 'Post 3'})",
);
fixture.assert_query_succeeds(
"MATCH (u:User {id: 31}), (p:Post {id: 31})
INSERT (u)-[:RATED {rating: 5}]->(p)",
);
fixture.assert_query_succeeds(
"MATCH (u:User {id: 31}), (p:Post {id: 32})
INSERT (u)-[:RATED {rating: 2}]->(p)",
);
fixture.assert_query_succeeds(
"MATCH (u:User {id: 32}), (p:Post {id: 32})
INSERT (u)-[:RATED {rating: 4}]->(p)",
);
fixture.assert_query_succeeds(
"MATCH (u:User {id: 33}), (p:Post {id: 33})
INSERT (u)-[:RATED {rating: 4}]->(p)",
);
let match_only = fixture
.assert_query_succeeds("MATCH (u:User)-[r:RATED]->(p:Post) RETURN u.id, r.rating, p.id");
let simple_test =
fixture.query("MATCH (u:User)-[r:RATED]->(p:Post) WITH p RETURN count(p) as post_count");
match simple_test {
Ok(result) => {}
Err(e) => {}
}
fixture.assert_query_succeeds(
"MATCH (u:User)-[r:RATED]->(p:Post)
WITH p, avg(r.rating) as avg_rating, count(r) as rating_count
WHERE avg_rating < 3.0
DETACH DELETE p",
);
fixture.assert_first_value(
"MATCH (p:Post) RETURN count(p) as count",
"count",
Value::Number(3.0),
);
}
#[test]
fn test_match_remove_comprehensive_combinations() {
let fixture = TestFixture::empty().expect("Failed to create test fixture");
fixture
.query(&format!(
"CREATE SCHEMA IF NOT EXISTS /{}",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"CREATE GRAPH /{}/comprehensive_remove",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"SESSION SET GRAPH /{}/comprehensive_remove",
fixture.schema_name()
))
.unwrap();
fixture.assert_query_succeeds(
"INSERT (user1:User {id: 1, name: 'Alice', temp_flag: true, score: 100}),
(user2:User {id: 2, name: 'Bob', temp_flag: true, score: 200}),
(user3:User {id: 3, name: 'Charlie', temp_flag: false, score: 300}),
(post1:Post {id: 1, title: 'Post 1', draft: true}),
(post2:Post {id: 2, title: 'Post 2', draft: true}),
(post3:Post {id: 3, title: 'Post 3', draft: true})",
);
fixture.assert_query_succeeds(
"MATCH (u:User), (p:Post)
WHERE (u.id = 1 AND p.id = 1) OR (u.id = 2 AND p.id = 2) OR (u.id = 3 AND p.id = 3)
INSERT (u)-[:AUTHORED {quality: u.score, timestamp: '2024-01-01'}]->(p)",
);
fixture.assert_query_succeeds(
"MATCH (u:User)
REMOVE u.temp_flag",
);
fixture.assert_first_value(
"MATCH (u:User) WHERE u.temp_flag IS NOT NULL RETURN count(u) as count",
"count",
Value::Number(0.0), );
fixture.assert_query_succeeds(
"MATCH (u:User)
WHERE u.name = 'Bob'
REMOVE u.score",
);
let debug_result = fixture.assert_query_succeeds(
"MATCH (u:User) RETURN u.name as name, u.score as score, u.id as id",
);
fixture.assert_first_value(
"MATCH (u:User) WHERE u.score IS NOT NULL RETURN count(u) as count",
"count",
Value::Number(2.0), );
fixture.assert_query_succeeds(
"MATCH (u:User)-[a:AUTHORED]->(p:Post)
WITH p, count(a) as author_count
REMOVE p.draft",
);
fixture.assert_first_value(
"MATCH (p:Post) WHERE p.draft IS NOT NULL RETURN count(p) as count",
"count",
Value::Number(0.0), );
fixture.assert_query_succeeds(
"MATCH (p:Post)
SET p.quality_flag = true",
);
fixture.assert_query_succeeds(
"MATCH (u:User)-[a:AUTHORED]->(p:Post)
WITH p, avg(a.quality) as avg_quality
WHERE avg_quality >= 250
REMOVE p.quality_flag",
);
fixture.assert_first_value(
"MATCH (p:Post) WHERE p.quality_flag IS NOT NULL RETURN count(p) as count",
"count",
Value::Number(2.0), );
}
#[test]
fn test_unwind_remove_basic() {
let fixture = TestFixture::empty().expect("Failed to create test fixture");
fixture
.query(&format!(
"CREATE SCHEMA IF NOT EXISTS /{}",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"CREATE GRAPH /{}/unwind_remove_basic",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"SESSION SET GRAPH /{}/unwind_remove_basic",
fixture.schema_name()
))
.unwrap();
fixture.assert_query_succeeds(
"INSERT (p1:Product {id: 1, name: 'Product1', price: 30.0, temp_flag: true}),
(p2:Product {id: 2, name: 'Product2', price: 20.0, temp_flag: true})",
);
let result = fixture
.query("MATCH (p:Product) RETURN p.name as name, p.temp_flag as flag ORDER BY p.name")
.unwrap();
for row in &result.rows {
assert_eq!(row.values.get("flag").unwrap(), &Value::Boolean(true));
}
fixture.assert_query_succeeds(
"MATCH (p:Product)
WITH collect(p) as products
UNWIND products as product
WHERE product.price > 25
REMOVE product.temp_flag",
);
let result = fixture
.query("MATCH (p:Product) RETURN p.name as name, p.temp_flag as flag ORDER BY p.name")
.unwrap();
for row in &result.rows {
let name = match row.values.get("name").unwrap() {
Value::String(s) => s.as_str(),
_ => panic!("Expected string name"),
};
let flag = row.values.get("flag").unwrap();
if name == "Product1" {
assert_eq!(
flag,
&Value::Null,
"Product1 temp_flag should be Null after REMOVE"
);
} else if name == "Product2" {
assert_eq!(
flag,
&Value::Boolean(true),
"Product2 temp_flag should still be true"
);
}
}
}
#[test]
fn test_unwind_set_operations() {
let fixture = TestFixture::empty().expect("Failed to create test fixture");
fixture
.query(&format!(
"CREATE SCHEMA IF NOT EXISTS /{}",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"CREATE GRAPH /{}/unwind_set",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"SESSION SET GRAPH /{}/unwind_set",
fixture.schema_name()
))
.unwrap();
fixture.assert_query_succeeds(
"INSERT (p1:Product {id: 1, name: 'Widget A', price: 15.0, category: 'basic'}),
(p2:Product {id: 2, name: 'Widget B', price: 25.0, category: 'basic'}),
(p3:Product {id: 3, name: 'Widget C', price: 35.0, category: 'basic'})",
);
fixture.assert_query_succeeds(
"MATCH (p:Product)
WITH avg(p.price) as avg_price, collect(p) as products
UNWIND products as product
WHERE product.price > avg_price
SET product.category = 'premium', product.upgraded = true",
);
fixture.assert_first_value(
"MATCH (p:Product) WHERE p.category = 'premium' RETURN count(p) as count",
"count",
Value::Number(1.0),
);
let result = fixture
.query(
"MATCH (p:Product {category: 'premium'}) RETURN p.name as name, p.upgraded as upgraded",
)
.unwrap();
assert!(!result.rows.is_empty());
assert_eq!(
result.rows[0].values.get("name").unwrap(),
&Value::String("Widget C".to_string())
);
assert_eq!(
result.rows[0].values.get("upgraded").unwrap(),
&Value::Boolean(true)
);
}
#[test]
fn test_debug_with_clause_issue() {
let fixture = TestFixture::empty().expect("Failed to create test fixture");
fixture
.query(&format!(
"CREATE SCHEMA IF NOT EXISTS /{}",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"CREATE GRAPH /{}/debug_with",
fixture.schema_name()
))
.unwrap();
fixture
.query(&format!(
"SESSION SET GRAPH /{}/debug_with",
fixture.schema_name()
))
.unwrap();
fixture.assert_query_succeeds("INSERT (user1:User {id: 1, name: 'Alice', score: 100})");
let result = fixture
.query("MATCH (u:User) RETURN u.id as id, u.name as name, u.score as score")
.unwrap();
assert_eq!(
result.rows[0].values.get("id").unwrap(),
&Value::Number(1.0)
);
assert_eq!(
result.rows[0].values.get("name").unwrap(),
&Value::String("Alice".to_string())
);
assert_eq!(
result.rows[0].values.get("score").unwrap(),
&Value::Number(100.0)
);
let result = fixture.query(
"MATCH (u:User {name: 'Alice'})
WITH u, u.name as user_name, u.score as user_score
RETURN u.id as user_id, user_name, user_score",
);
match result {
Ok(query_result) => {
if query_result.rows.is_empty() {
let simple_result =
fixture.query("MATCH (u:User {name: 'Alice'}) WITH u RETURN u.id as user_id");
match simple_result {
Ok(simple_query_result) => {
if simple_query_result.rows.is_empty() {
} else {
}
}
Err(e) => {}
}
} else {
let user_id_in_with = query_result.rows[0].values.get("user_id").unwrap();
}
}
Err(e) => {}
}
}