1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
use Arc;
use SurrealClient;
// pub mod selectsource;
// pub mod tablesource;
// Create a wrapper for shared SurrealDB state
// #[cfg(test)]
// mod tests {
// use super::*;
// use crate::{
// operation::{Expressive, RefOperation},
// select::SurrealSelect,
// thing::Thing,
// };
// use surreal_client::Engine;
// use vantage_expressions::{
// expr,
// protocol::{expressive::IntoExpressive, selectable::Selectable},
// };
// #[tokio::test]
// async fn test_select_with_thing_reference() {
// let shared_db = setup_test_db().await;
// let mut select = SurrealSelect::new();
// select.add_source("product", None);
// select.add_where_condition(expr!("bakery = {}", (Thing::new("bakery", "hill_valley"))));
// select.add_where_condition(expr!("is_deleted = {}", false));
// select.add_order_by(expr!("name"), true);
// let result = shared_db.execute(&select.expr()).await;
// println!("✅ Select with Thing reference: {:?}", result);
// }
// #[tokio::test]
// async fn test_select_with_specific_fields() {
// let shared_db = setup_test_db().await;
// let mut select = SurrealSelect::new();
// select.add_field("name");
// select.add_field("price");
// select.add_source("product", None);
// select.add_where_condition(expr!("price > {}", 100));
// let result = shared_db.execute(&select.expr()).await;
// println!("✅ Select with specific fields: {:?}", result);
// }
// #[tokio::test]
// async fn test_select_with_relationship_traversal() {
// let shared_db = setup_test_db().await;
// let mut select = SurrealSelect::new();
// select.add_source(
// Thing::new("bakery", "hill_valley").rref("owns", "product"),
// None,
// );
// select.add_where_condition(expr!("is_deleted = {}", false));
// select.add_order_by(expr!("name"), true);
// let result = shared_db.execute(&select.expr()).await;
// println!("✅ Select with relationship traversal: {:?}", result);
// }
// #[tokio::test]
// async fn test_select_with_left_relationship() {
// let shared_db = setup_test_db().await;
// let mut select = SurrealSelect::new();
// select.add_source(
// Thing::new("bakery", "hill_valley").lref("belongs_to", "client"),
// None,
// );
// select.add_order_by(expr!("name"), true);
// let result = shared_db.execute(&select.expr()).await;
// println!("✅ Select with left relationship: {:?}", result);
// }
// #[tokio::test]
// async fn test_complex_nested_query() {
// let shared_db = setup_test_db().await;
// // Build a more complex query similar to the ones in select.rs tests
// let subquery = SurrealSelect::new()
// .with_source("order")
// .with_condition(expr!("status = {}", "completed"))
// .expr();
// let mut main_select = SurrealSelect::new();
// main_select.add_field("name");
// main_select.add_field("email");
// main_select.add_source("client", None);
// main_select.add_where_condition(expr!("id IN ({})", (subquery)));
// let result = shared_db.execute(&main_select.expr()).await;
// println!("✅ Complex nested query: {:?}", result);
// }
// #[test]
// fn test_prepare_query_conversion() {
// // Create mock client for testing
// let db = SurrealDB::new(SurrealClient::new(Box::new(MockEngine), None, None));
// let expr = expr!(
// "SELECT * FROM product WHERE price > {} AND name = {}",
// 100,
// "bread"
// );
// let (query, params) = db.prepare_query(&expr);
// assert_eq!(
// query,
// "SELECT * FROM product WHERE price > $_arg1 AND name = $_arg2"
// );
// assert_eq!(params.len(), 2);
// assert_eq!(params.get("_arg1"), Some(&Value::Number(100.into())));
// assert_eq!(
// params.get("_arg2"),
// Some(&Value::String("bread".to_string()))
// );
// }
// #[test]
// fn test_prepare_query_with_nested_expression() {
// // Create mock client for testing
// let db = SurrealDB::new(SurrealClient::new(Box::new(MockEngine), None, None));
// let nested = expr!("SELECT id FROM client WHERE active = {}", true);
// let main_expr = expr!("SELECT * FROM product WHERE owner IN ({})", (nested));
// let (query, params) = db.prepare_query(&main_expr);
// assert!(query.contains("$_arg"));
// assert!(!params.is_empty());
// println!("Query: {}", query);
// println!("Params: {:?}", params);
// }
// #[tokio::test]
// async fn test_expression_integration() {
// let shared_db = setup_test_db().await;
// // Test direct expression execution
// let query = expr!("SELECT name, price FROM product WHERE price > {}", 200);
// let result = shared_db.execute(&query).await;
// println!("✅ Direct expression execution: {:?}", result);
// // Test with multiple parameters
// let multi_param_query = expr!(
// "SELECT * FROM product WHERE price BETWEEN {} AND {} AND category = {}",
// 50,
// 200,
// "pastry"
// );
// let result2 = shared_db.execute(&multi_param_query).await;
// println!("✅ Multi-parameter query: {:?}", result2);
// }
// }