ddb_core/engine/
system_vars.rs1use crate::functions::Value;
3use std::collections::HashMap;
4
5pub struct SystemVariables {
6 variables: HashMap<String, Value>,
7}
8
9impl SystemVariables {
10 pub fn new() -> Self {
11 let mut variables = HashMap::new();
12
13 variables.insert("VERSION".to_string(), Value::String(env!("CARGO_PKG_VERSION").to_string()));
15 variables.insert("DB_NAME".to_string(), Value::String("DDB".to_string()));
16 variables.insert("DB_TYPE".to_string(), Value::String("Flat File Database".to_string()));
17
18 variables.insert("ROWS_SCANNED".to_string(), Value::Integer(0));
20 variables.insert("ROWS_RETURNED".to_string(), Value::Integer(0));
21 variables.insert("LAST_ERROR".to_string(), Value::Null);
22
23 SystemVariables { variables }
24 }
25
26 pub fn get(&self, name: &str) -> Option<&Value> {
28 self.variables.get(&name.to_uppercase())
29 }
30
31 pub fn set(&mut self, name: &str, value: Value) {
33 self.variables.insert(name.to_uppercase(), value);
34 }
35
36 pub fn list_variables(&self) -> Vec<String> {
38 let mut vars: Vec<_> = self.variables.keys().cloned().collect();
39 vars.sort();
40 vars
41 }
42}
43
44impl Default for SystemVariables {
45 fn default() -> Self {
46 Self::new()
47 }
48}
49
50#[cfg(test)]
51mod tests {
52 use super::*;
53
54 #[test]
55 fn test_system_variables() {
56 let sys_vars = SystemVariables::new();
57
58 assert!(sys_vars.get("VERSION").is_some());
60 assert!(sys_vars.get("DB_NAME").is_some());
61
62 assert_eq!(sys_vars.get("VERSION"), sys_vars.get("version"));
64 }
65
66 #[test]
67 fn test_set_variable() {
68 let mut sys_vars = SystemVariables::new();
69
70 sys_vars.set("ROWS_SCANNED", Value::Integer(42));
71 assert_eq!(sys_vars.get("ROWS_SCANNED"), Some(&Value::Integer(42)));
72 }
73
74 #[test]
75 fn test_list_variables() {
76 let sys_vars = SystemVariables::new();
77 let vars = sys_vars.list_variables();
78
79 assert!(vars.contains(&"VERSION".to_string()));
80 assert!(vars.contains(&"DB_NAME".to_string()));
81 assert!(vars.contains(&"ROWS_SCANNED".to_string()));
82 }
83}