MCPcopy Create free account
hub / github.com/douglance/devsql / query

Method query

crates/devsql/src/engine.rs:81–111  ·  view source on GitHub ↗

Execute a SQL query and return results as JSON values

(&self, sql: &str)

Source from the content-addressed store, hash-verified

79
80 /// Execute a SQL query and return results as JSON values
81 pub fn query(&self, sql: &str) -> Result<Vec<Value>> {
82 let mut stmt = self.conn.prepare(sql)?;
83 let column_names: Vec<String> = stmt
84 .column_names()
85 .into_iter()
86 .map(|s| s.to_string())
87 .collect();
88
89 let rows = stmt.query_map([], |row| {
90 let mut obj = serde_json::Map::new();
91 for (i, name) in column_names.iter().enumerate() {
92 // Try different types in order
93 let value: Value = if let Ok(v) = row.get::<_, i64>(i) {
94 Value::Number(v.into())
95 } else if let Ok(v) = row.get::<_, f64>(i) {
96 serde_json::Number::from_f64(v)
97 .map(Value::Number)
98 .unwrap_or(Value::Null)
99 } else if let Ok(v) = row.get::<_, String>(i) {
100 Value::String(v)
101 } else {
102 Value::Null
103 };
104 obj.insert(name.clone(), value);
105 }
106 Ok(Value::Object(obj))
107 })?;
108
109 let results: Vec<Value> = rows.filter_map(|r| r.ok()).collect();
110 Ok(results)
111 }
112
113 // --- Table loaders ---
114

Callers 6

runMethod · 0.80
runMethod · 0.80
runMethod · 0.80
runMethod · 0.80
runMethod · 0.80

Calls

no outgoing calls