MCPcopy Create free account
hub / github.com/apache/datafusion / process_replacements_with_env

Function process_replacements_with_env

benchmarks/src/sql_benchmark.rs:1359–1401  ·  view source on GitHub ↗
(
    input: &str,
    replacement_map: &HashMap<String, String>,
    get_env: impl Fn(&str) -> Option<String>,
)

Source from the content-addressed store, hash-verified

1357}
1358
1359fn process_replacements_with_env(
1360 input: &str,
1361 replacement_map: &HashMap<String, String>,
1362 get_env: impl Fn(&str) -> Option<String>,
1363) -> Result<String> {
1364 debug!("processing replacements for line '{input}'");
1365
1366 // handle ${VAR:-default|true value|false value} syntax
1367 let replacement = |caps: &regex::Captures| -> Result<String> {
1368 let key = &caps[1];
1369 let default = caps.get(2).map(|m| m.as_str().to_string());
1370 let true_val = &caps[3];
1371 let false_val = &caps[4];
1372
1373 let value = lookup_replacement_value(key, replacement_map, &get_env).or(default);
1374
1375 match value {
1376 Some(v) if v.eq_ignore_ascii_case("true") => Ok(true_val.to_string()),
1377 Some(_) => Ok(false_val.to_string()),
1378 None => Err(exec_datafusion_err!("Missing value for key '{key}'")),
1379 }
1380 };
1381 let input = replace_all(&TRUE_FALSE_REPLACEMENT_RE, input, replacement)?;
1382
1383 // handle ${KEY} and ${KEY:-default}`
1384 let replacement = |caps: &regex::Captures| -> Result<String> {
1385 let key = &caps[1];
1386 let default = caps.get(2);
1387
1388 if let Some(v) = lookup_replacement_value(key, replacement_map, &get_env) {
1389 return Ok(v.to_string());
1390 }
1391
1392 // use default if it was set
1393 if let Some(def) = default {
1394 Ok(def.as_str().to_string())
1395 } else {
1396 Err(exec_datafusion_err!("Missing value for key '{key}'"))
1397 }
1398 };
1399
1400 replace_all(&VARIABLE_REPLACEMENT_RE, &input, replacement)
1401}
1402
1403fn lookup_replacement_value(
1404 key: &str,

Calls 7

lookup_replacement_valueFunction · 0.85
replace_allFunction · 0.85
mapMethod · 0.45
getMethod · 0.45
to_stringMethod · 0.45
as_strMethod · 0.45
orMethod · 0.45

Used in the wild real call sites across dependent graphs

searching dependent graphs…