MCPcopy Index your code
hub / github.com/aiscriptdev/aiscript / execute_query

Function execute_query

aiscript-vm/src/stdlib/db/pg.rs:194–291  ·  view source on GitHub ↗
(
    executor: E,
    query: &str,
    bindings: Vec<Value<'_>>,
)

Source from the content-addressed store, hash-verified

192}
193
194fn execute_query<'a, E>(
195 executor: E,
196 query: &str,
197 bindings: Vec<Value<'_>>,
198) -> Result<Vec<sqlx::postgres::PgRow>, VmError>
199where
200 E: sqlx::Executor<'a, Database = sqlx::Postgres>,
201{
202 Handle::current()
203 .block_on(async {
204 let mut query_builder = sqlx::query(query);
205
206 // Bind parameters
207 for value in bindings {
208 match value {
209 Value::Number(n) => {
210 query_builder = query_builder.bind(n);
211 }
212 Value::String(s) => {
213 let s_str = s.to_str().unwrap();
214 // Try to parse special types from string
215 if let Ok(uuid) = sqlx::types::Uuid::parse_str(s_str) {
216 query_builder = query_builder.bind(uuid);
217 } else if let Ok(date) =
218 sqlx::types::chrono::NaiveDate::parse_from_str(s_str, "%Y-%m-%d")
219 {
220 query_builder = query_builder.bind(date);
221 } else if let Ok(datetime) =
222 sqlx::types::chrono::NaiveDateTime::parse_from_str(
223 s_str,
224 "%Y-%m-%dT%H:%M:%S",
225 )
226 {
227 query_builder = query_builder.bind(datetime);
228 } else {
229 query_builder = query_builder.bind(s_str);
230 }
231 }
232 Value::Boolean(b) => {
233 query_builder = query_builder.bind(b);
234 }
235 Value::Nil => {
236 query_builder = query_builder.bind(Option::<String>::None);
237 }
238 Value::List(arr) => {
239 let arr = &arr.borrow().data;
240 if let Some(first) = arr.first() {
241 match first {
242 Value::Number(_) => {
243 let nums: Vec<f64> = arr
244 .iter()
245 .filter_map(|v| match v {
246 Value::Number(n) => Some(*n),
247 _ => None,
248 })
249 .collect();
250 query_builder = query_builder.bind(nums);
251 }

Callers 3

execute_typed_queryFunction · 0.70
pg_queryFunction · 0.70
queryFunction · 0.70

Calls 4

RuntimeErrorClass · 0.85
to_strMethod · 0.80
queryFunction · 0.70
borrowMethod · 0.45

Tested by

no test coverage detected