Skip to content

Commit 0accee9

Browse files
committed
tweak: use static map for loaded env vars instead of calling set_env
1 parent 89858d7 commit 0accee9

File tree

1 file changed

+13
-7
lines changed
  • sqlx-macros-core/src/query

1 file changed

+13
-7
lines changed

sqlx-macros-core/src/query/mod.rs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
#[cfg(procmacro2_semver_exempt)]
22
use std::collections::HashSet;
33
use std::collections::{hash_map, HashMap};
4-
#[cfg(procmacro2_semver_exempt)]
54
use std::hash::{BuildHasherDefault, DefaultHasher};
65
use std::path::{Path, PathBuf};
76
use std::sync::{Arc, LazyLock, Mutex};
@@ -422,19 +421,26 @@ where
422421
static TRACKED_ENV_VARS: Mutex<HashSet<String, BuildHasherDefault<DefaultHasher>>> =
423422
Mutex::new(HashSet::with_hasher(BuildHasherDefault::new()));
424423

424+
static LOADED_ENV_VARS: Mutex<HashMap<String, String, BuildHasherDefault<DefaultHasher>>> =
425+
Mutex::new(HashMap::with_hasher(BuildHasherDefault::new()));
426+
425427
/// Get the value of an environment variable, telling the compiler about it if applicable.
426428
fn env(name: &str) -> Result<String, std::env::VarError> {
427429
#[cfg(procmacro2_semver_exempt)]
428-
if TRACKED_ENV_VARS.lock().unwrap().insert(name.to_string()) {
430+
let tracked_value = if TRACKED_ENV_VARS.lock().unwrap().insert(name.to_string()) {
429431
// Avoid tracking the same env var multiple times, which would undesirably modify
430432
// build system state and thus behavior in case we change var values.
431433
proc_macro::tracked_env::var(name)
432434
} else {
433-
std::env::var(name)
434-
}
435-
435+
None
436+
};
436437
#[cfg(not(procmacro2_semver_exempt))]
437-
std::env::var(name)
438+
let tracked_value = None;
439+
440+
tracked_value
441+
.or_else(|| std::env::var(name).ok())
442+
.or_else(|| LOADED_ENV_VARS.lock().unwrap().get(name).cloned())
443+
.ok_or(std::env::VarError::NotPresent)
438444
}
439445

440446
/// Load configuration environment variables from a `.env` file, without overriding existing
@@ -487,7 +493,7 @@ fn load_env(manifest_dir: &Path, config: &Config) {
487493
};
488494

489495
if loadable_vars.contains(&&*key) && std::env::var(&key).is_err() {
490-
std::env::set_var(key, value);
496+
LOADED_ENV_VARS.lock().unwrap().insert(key, value);
491497
}
492498
}
493499
}

0 commit comments

Comments
 (0)