@@ -23,6 +23,7 @@ mod input;
23
23
mod output;
24
24
25
25
struct Metadata {
26
+ #[ allow( unused) ]
26
27
manifest_dir : PathBuf ,
27
28
offline : bool ,
28
29
database_url : Option < String > ,
@@ -35,42 +36,47 @@ struct Metadata {
35
36
// If we are in a workspace, lookup `workspace_root` since `CARGO_MANIFEST_DIR` won't
36
37
// reflect the workspace dir: https://github.com/rust-lang/cargo/issues/3946
37
38
static METADATA : Lazy < Metadata > = Lazy :: new ( || {
38
- use std:: env;
39
-
40
- let manifest_dir: PathBuf = env:: var ( "CARGO_MANIFEST_DIR" )
39
+ let manifest_dir: PathBuf = env ( "CARGO_MANIFEST_DIR" )
41
40
. expect ( "`CARGO_MANIFEST_DIR` must be set" )
42
41
. into ( ) ;
43
42
44
43
#[ cfg( feature = "offline" ) ]
45
- let target_dir =
46
- env:: var_os ( "CARGO_TARGET_DIR" ) . map_or_else ( || "target" . into ( ) , |dir| dir. into ( ) ) ;
44
+ let target_dir = env ( "CARGO_TARGET_DIR" ) . map_or_else ( |_| "target" . into ( ) , |dir| dir. into ( ) ) ;
47
45
48
46
// If a .env file exists at CARGO_MANIFEST_DIR, load environment variables from this,
49
47
// otherwise fallback to default dotenv behaviour.
50
48
let env_path = manifest_dir. join ( ".env" ) ;
51
- if env_path. exists ( ) {
49
+
50
+ #[ cfg_attr( not( procmacro2_semver_exempt) , allow( unused_variables) ) ]
51
+ let env_path = if env_path. exists ( ) {
52
52
let res = dotenv:: from_path ( & env_path) ;
53
53
if let Err ( e) = res {
54
54
panic ! ( "failed to load environment from {:?}, {}" , env_path, e) ;
55
55
}
56
+
57
+ Some ( env_path)
56
58
} else {
57
- let _ = dotenv:: dotenv ( ) ;
59
+ dotenv:: dotenv ( ) . ok ( )
60
+ } ;
61
+
62
+ // tell the compiler to watch the `.env` for changes, if applicable
63
+ #[ cfg( procmacro2_semver_exempt) ]
64
+ if let Some ( env_path) = env_path. as_ref ( ) . and_then ( |path| path. to_str ( ) ) {
65
+ proc_macro:: tracked_path:: path ( env_path) ;
58
66
}
59
67
60
- // TODO: Switch to `var_os` after feature(osstring_ascii) is stable.
61
- // Stabilization PR: https://github.com/rust-lang/rust/pull/80193
62
- let offline = env:: var ( "SQLX_OFFLINE" )
68
+ let offline = env ( "SQLX_OFFLINE" )
63
69
. map ( |s| s. eq_ignore_ascii_case ( "true" ) || s == "1" )
64
70
. unwrap_or ( false ) ;
65
71
66
- let database_url = env:: var ( "DATABASE_URL" ) . ok ( ) ;
72
+ let database_url = env ( "DATABASE_URL" ) . ok ( ) ;
67
73
68
74
#[ cfg( feature = "offline" ) ]
69
75
let workspace_root = {
70
76
use serde:: Deserialize ;
71
77
use std:: process:: Command ;
72
78
73
- let cargo = env:: var_os ( "CARGO" ) . expect ( "`CARGO` must be set" ) ;
79
+ let cargo = env ( "CARGO" ) . expect ( "`CARGO` must be set" ) ;
74
80
75
81
let output = Command :: new ( & cargo)
76
82
. args ( & [ "metadata" , "--format-version=1" ] )
@@ -151,7 +157,7 @@ fn expand_from_db(input: QueryMacroInput, db_url: &str) -> crate::Result<TokenSt
151
157
"postgres" | "postgresql" => {
152
158
let data = block_on ( async {
153
159
let mut conn = sqlx_core:: postgres:: PgConnection :: connect ( db_url. as_str ( ) ) . await ?;
154
- QueryData :: from_db ( & mut conn, & input. src ) . await
160
+ QueryData :: from_db ( & mut conn, & input. sql ) . await
155
161
} ) ?;
156
162
157
163
expand_with_data ( input, data, false )
@@ -164,7 +170,7 @@ fn expand_from_db(input: QueryMacroInput, db_url: &str) -> crate::Result<TokenSt
164
170
"mssql" | "sqlserver" => {
165
171
let data = block_on ( async {
166
172
let mut conn = sqlx_core:: mssql:: MssqlConnection :: connect ( db_url. as_str ( ) ) . await ?;
167
- QueryData :: from_db ( & mut conn, & input. src ) . await
173
+ QueryData :: from_db ( & mut conn, & input. sql ) . await
168
174
} ) ?;
169
175
170
176
expand_with_data ( input, data, false )
@@ -177,7 +183,7 @@ fn expand_from_db(input: QueryMacroInput, db_url: &str) -> crate::Result<TokenSt
177
183
"mysql" | "mariadb" => {
178
184
let data = block_on ( async {
179
185
let mut conn = sqlx_core:: mysql:: MySqlConnection :: connect ( db_url. as_str ( ) ) . await ?;
180
- QueryData :: from_db ( & mut conn, & input. src ) . await
186
+ QueryData :: from_db ( & mut conn, & input. sql ) . await
181
187
} ) ?;
182
188
183
189
expand_with_data ( input, data, false )
@@ -190,7 +196,7 @@ fn expand_from_db(input: QueryMacroInput, db_url: &str) -> crate::Result<TokenSt
190
196
"sqlite" => {
191
197
let data = block_on ( async {
192
198
let mut conn = sqlx_core:: sqlite:: SqliteConnection :: connect ( db_url. as_str ( ) ) . await ?;
193
- QueryData :: from_db ( & mut conn, & input. src ) . await
199
+ QueryData :: from_db ( & mut conn, & input. sql ) . await
194
200
} ) ?;
195
201
196
202
expand_with_data ( input, data, false )
@@ -207,7 +213,7 @@ fn expand_from_db(input: QueryMacroInput, db_url: &str) -> crate::Result<TokenSt
207
213
pub fn expand_from_file ( input : QueryMacroInput , file : PathBuf ) -> crate :: Result < TokenStream > {
208
214
use data:: offline:: DynQueryData ;
209
215
210
- let query_data = DynQueryData :: from_data_file ( file, & input. src ) ?;
216
+ let query_data = DynQueryData :: from_data_file ( file, & input. sql ) ?;
211
217
assert ! ( !query_data. db_name. is_empty( ) ) ;
212
218
213
219
match & * query_data. db_name {
@@ -288,7 +294,7 @@ where
288
294
. all ( |it| it. type_info ( ) . is_void ( ) )
289
295
{
290
296
let db_path = DB :: db_path ( ) ;
291
- let sql = & input. src ;
297
+ let sql = & input. sql ;
292
298
293
299
quote ! {
294
300
:: sqlx:: query_with:: <#db_path, _>( #sql, #query_args)
@@ -368,3 +374,16 @@ where
368
374
369
375
Ok ( ret_tokens)
370
376
}
377
+
378
+ /// Get the value of an environment variable, telling the compiler about it if applicable.
379
+ fn env ( name : & str ) -> Result < String , std:: env:: VarError > {
380
+ #[ cfg( procmacro2_semver_exempt) ]
381
+ {
382
+ proc_macro:: tracked_env:: var ( name)
383
+ }
384
+
385
+ #[ cfg( not( procmacro2_semver_exempt) ) ]
386
+ {
387
+ std:: env:: var ( name)
388
+ }
389
+ }
0 commit comments