@@ -30,20 +30,23 @@ use url::Url;
30
30
31
31
pub async fn get_s3_object_store_builder (
32
32
url : & Url ,
33
- cmd : & CreateExternalTable ,
33
+ cmd : & mut CreateExternalTable ,
34
34
) -> Result < AmazonS3Builder > {
35
35
let bucket_name = get_bucket_name ( url) ?;
36
36
let mut builder = AmazonS3Builder :: from_env ( ) . with_bucket_name ( bucket_name) ;
37
37
38
38
if let ( Some ( access_key_id) , Some ( secret_access_key) ) = (
39
- cmd. options . get ( "access_key_id" ) ,
40
- cmd. options . get ( "secret_access_key" ) ,
39
+ // These options are datafusion-cli specific and must be removed before passing through to datafusion.
40
+ // Otherwise, a Configuration error will be raised.
41
+ cmd. options . remove ( "access_key_id" ) ,
42
+ cmd. options . remove ( "secret_access_key" ) ,
41
43
) {
44
+ println ! ( "removing secret access key!" ) ;
42
45
builder = builder
43
46
. with_access_key_id ( access_key_id)
44
47
. with_secret_access_key ( secret_access_key) ;
45
48
46
- if let Some ( session_token) = cmd. options . get ( "session_token" ) {
49
+ if let Some ( session_token) = cmd. options . remove ( "session_token" ) {
47
50
builder = builder. with_token ( session_token) ;
48
51
}
49
52
} else {
@@ -66,7 +69,7 @@ pub async fn get_s3_object_store_builder(
66
69
builder = builder. with_credentials ( credentials) ;
67
70
}
68
71
69
- if let Some ( region) = cmd. options . get ( "region" ) {
72
+ if let Some ( region) = cmd. options . remove ( "region" ) {
70
73
builder = builder. with_region ( region) ;
71
74
}
72
75
@@ -99,7 +102,7 @@ impl CredentialProvider for S3CredentialProvider {
99
102
100
103
pub fn get_oss_object_store_builder (
101
104
url : & Url ,
102
- cmd : & CreateExternalTable ,
105
+ cmd : & mut CreateExternalTable ,
103
106
) -> Result < AmazonS3Builder > {
104
107
let bucket_name = get_bucket_name ( url) ?;
105
108
let mut builder = AmazonS3Builder :: from_env ( )
@@ -109,15 +112,15 @@ pub fn get_oss_object_store_builder(
109
112
. with_region ( "do_not_care" ) ;
110
113
111
114
if let ( Some ( access_key_id) , Some ( secret_access_key) ) = (
112
- cmd. options . get ( "access_key_id" ) ,
113
- cmd. options . get ( "secret_access_key" ) ,
115
+ cmd. options . remove ( "access_key_id" ) ,
116
+ cmd. options . remove ( "secret_access_key" ) ,
114
117
) {
115
118
builder = builder
116
119
. with_access_key_id ( access_key_id)
117
120
. with_secret_access_key ( secret_access_key) ;
118
121
}
119
122
120
- if let Some ( endpoint) = cmd. options . get ( "endpoint" ) {
123
+ if let Some ( endpoint) = cmd. options . remove ( "endpoint" ) {
121
124
builder = builder. with_endpoint ( endpoint) ;
122
125
}
123
126
@@ -126,21 +129,21 @@ pub fn get_oss_object_store_builder(
126
129
127
130
pub fn get_gcs_object_store_builder (
128
131
url : & Url ,
129
- cmd : & CreateExternalTable ,
132
+ cmd : & mut CreateExternalTable ,
130
133
) -> Result < GoogleCloudStorageBuilder > {
131
134
let bucket_name = get_bucket_name ( url) ?;
132
135
let mut builder = GoogleCloudStorageBuilder :: from_env ( ) . with_bucket_name ( bucket_name) ;
133
136
134
- if let Some ( service_account_path) = cmd. options . get ( "service_account_path" ) {
137
+ if let Some ( service_account_path) = cmd. options . remove ( "service_account_path" ) {
135
138
builder = builder. with_service_account_path ( service_account_path) ;
136
139
}
137
140
138
- if let Some ( service_account_key) = cmd. options . get ( "service_account_key" ) {
141
+ if let Some ( service_account_key) = cmd. options . remove ( "service_account_key" ) {
139
142
builder = builder. with_service_account_key ( service_account_key) ;
140
143
}
141
144
142
145
if let Some ( application_credentials_path) =
143
- cmd. options . get ( "application_credentials_path" )
146
+ cmd. options . remove ( "application_credentials_path" )
144
147
{
145
148
builder = builder. with_application_credentials ( application_credentials_path) ;
146
149
}
@@ -180,9 +183,9 @@ mod tests {
180
183
let sql = format ! ( "CREATE EXTERNAL TABLE test STORED AS PARQUET OPTIONS('access_key_id' '{access_key_id}', 'secret_access_key' '{secret_access_key}', 'region' '{region}', 'session_token' {session_token}) LOCATION '{location}'" ) ;
181
184
182
185
let ctx = SessionContext :: new ( ) ;
183
- let plan = ctx. state ( ) . create_logical_plan ( & sql) . await ?;
186
+ let mut plan = ctx. state ( ) . create_logical_plan ( & sql) . await ?;
184
187
185
- if let LogicalPlan :: Ddl ( DdlStatement :: CreateExternalTable ( cmd) ) = & plan {
188
+ if let LogicalPlan :: Ddl ( DdlStatement :: CreateExternalTable ( cmd) ) = & mut plan {
186
189
let builder = get_s3_object_store_builder ( table_url. as_ref ( ) , cmd) . await ?;
187
190
// get the actual configuration information, then assert_eq!
188
191
let config = [
@@ -212,9 +215,9 @@ mod tests {
212
215
let sql = format ! ( "CREATE EXTERNAL TABLE test STORED AS PARQUET OPTIONS('access_key_id' '{access_key_id}', 'secret_access_key' '{secret_access_key}', 'endpoint' '{endpoint}') LOCATION '{location}'" ) ;
213
216
214
217
let ctx = SessionContext :: new ( ) ;
215
- let plan = ctx. state ( ) . create_logical_plan ( & sql) . await ?;
218
+ let mut plan = ctx. state ( ) . create_logical_plan ( & sql) . await ?;
216
219
217
- if let LogicalPlan :: Ddl ( DdlStatement :: CreateExternalTable ( cmd) ) = & plan {
220
+ if let LogicalPlan :: Ddl ( DdlStatement :: CreateExternalTable ( cmd) ) = & mut plan {
218
221
let builder = get_oss_object_store_builder ( table_url. as_ref ( ) , cmd) ?;
219
222
// get the actual configuration information, then assert_eq!
220
223
let config = [
@@ -244,9 +247,9 @@ mod tests {
244
247
let sql = format ! ( "CREATE EXTERNAL TABLE test STORED AS PARQUET OPTIONS('service_account_path' '{service_account_path}', 'service_account_key' '{service_account_key}', 'application_credentials_path' '{application_credentials_path}') LOCATION '{location}'" ) ;
245
248
246
249
let ctx = SessionContext :: new ( ) ;
247
- let plan = ctx. state ( ) . create_logical_plan ( & sql) . await ?;
250
+ let mut plan = ctx. state ( ) . create_logical_plan ( & sql) . await ?;
248
251
249
- if let LogicalPlan :: Ddl ( DdlStatement :: CreateExternalTable ( cmd) ) = & plan {
252
+ if let LogicalPlan :: Ddl ( DdlStatement :: CreateExternalTable ( cmd) ) = & mut plan {
250
253
let builder = get_gcs_object_store_builder ( table_url. as_ref ( ) , cmd) ?;
251
254
// get the actual configuration information, then assert_eq!
252
255
let config = [
0 commit comments