@@ -141,89 +141,91 @@ pub async fn streaming_load(
141
141
. await
142
142
. map_err ( InternalServerError ) ?;
143
143
144
- let schema = plan. schema ( ) ;
145
144
match & mut plan {
146
- Plan :: Insert ( insert) => match & mut insert. source {
147
- InsertInputSource :: StreamingWithFileFormat {
148
- format,
149
- on_error_mode,
150
- start,
151
- input_context_option,
152
- } => {
153
- let sql_rest = & insert_sql[ * start..] . trim ( ) ;
154
- if !sql_rest. is_empty ( ) {
155
- return Err ( poem:: Error :: from_string (
156
- "should NOT have data after `FILE_FORMAT` in streaming load." ,
157
- StatusCode :: BAD_REQUEST ,
158
- ) ) ;
159
- } ;
160
- let to_table = context
161
- . get_table ( & insert. catalog , & insert. database , & insert. table )
162
- . await
163
- . map_err ( |err| err. display_with_sql ( insert_sql) )
164
- . map_err ( InternalServerError ) ?;
165
- let ( tx, rx) = tokio:: sync:: mpsc:: channel ( 2 ) ;
145
+ Plan :: Insert ( insert) => {
146
+ let schema = insert. dest_schema ( ) ;
147
+ match & mut insert. source {
148
+ InsertInputSource :: StreamingWithFileFormat {
149
+ format,
150
+ on_error_mode,
151
+ start,
152
+ input_context_option,
153
+ } => {
154
+ let sql_rest = & insert_sql[ * start..] . trim ( ) ;
155
+ if !sql_rest. is_empty ( ) {
156
+ return Err ( poem:: Error :: from_string (
157
+ "should NOT have data after `FILE_FORMAT` in streaming load." ,
158
+ StatusCode :: BAD_REQUEST ,
159
+ ) ) ;
160
+ } ;
161
+ let to_table = context
162
+ . get_table ( & insert. catalog , & insert. database , & insert. table )
163
+ . await
164
+ . map_err ( |err| err. display_with_sql ( insert_sql) )
165
+ . map_err ( InternalServerError ) ?;
166
+ let ( tx, rx) = tokio:: sync:: mpsc:: channel ( 2 ) ;
166
167
167
- let table_schema = infer_table_schema ( & schema)
168
- . map_err ( |err| err. display_with_sql ( insert_sql) )
169
- . map_err ( InternalServerError ) ?;
170
- let input_context = Arc :: new (
171
- InputContext :: try_create_from_insert_file_format (
172
- context. clone ( ) ,
173
- rx,
174
- context. get_settings ( ) ,
175
- format. clone ( ) ,
176
- table_schema,
177
- context. get_scan_progress ( ) ,
178
- false ,
179
- to_table. get_block_thresholds ( ) ,
180
- on_error_mode. clone ( ) ,
181
- )
182
- . await
183
- . map_err ( |err| err. display_with_sql ( insert_sql) )
184
- . map_err ( InternalServerError ) ?,
185
- ) ;
186
- * input_context_option = Some ( input_context. clone ( ) ) ;
187
- info ! ( "streaming load with file_format {:?}" , input_context) ;
168
+ let table_schema = infer_table_schema ( & schema)
169
+ . map_err ( |err| err. display_with_sql ( insert_sql) )
170
+ . map_err ( InternalServerError ) ?;
171
+ let input_context = Arc :: new (
172
+ InputContext :: try_create_from_insert_file_format (
173
+ context. clone ( ) ,
174
+ rx,
175
+ context. get_settings ( ) ,
176
+ format. clone ( ) ,
177
+ table_schema,
178
+ context. get_scan_progress ( ) ,
179
+ false ,
180
+ to_table. get_block_thresholds ( ) ,
181
+ on_error_mode. clone ( ) ,
182
+ )
183
+ . await
184
+ . map_err ( |err| err. display_with_sql ( insert_sql) )
185
+ . map_err ( InternalServerError ) ?,
186
+ ) ;
187
+ * input_context_option = Some ( input_context. clone ( ) ) ;
188
+ info ! ( "streaming load with file_format {:?}" , input_context) ;
188
189
189
- let query_id = context. get_id ( ) ;
190
- let handler = context. spawn ( query_id, execute_query ( context. clone ( ) , plan) ) ;
191
- let files = read_multi_part ( multipart, tx, & input_context) . await ?;
190
+ let query_id = context. get_id ( ) ;
191
+ let handler = context. spawn ( query_id, execute_query ( context. clone ( ) , plan) ) ;
192
+ let files = read_multi_part ( multipart, tx, & input_context) . await ?;
192
193
193
- match handler. await {
194
- Ok ( Ok ( _) ) => Ok ( Json ( LoadResponse {
195
- error : None ,
196
- state : "SUCCESS" . to_string ( ) ,
197
- id : uuid:: Uuid :: new_v4 ( ) . to_string ( ) ,
198
- stats : context. get_scan_progress_value ( ) ,
199
- files,
200
- } ) ) ,
201
- Ok ( Err ( cause) ) => Err ( poem:: Error :: from_string (
202
- format ! (
203
- "execute fail: {}" ,
204
- cause. display_with_sql( insert_sql) . message( )
205
- ) ,
206
- StatusCode :: BAD_REQUEST ,
207
- ) ) ,
208
- Err ( _) => Err ( poem:: Error :: from_string (
209
- "Maybe panic." ,
210
- StatusCode :: INTERNAL_SERVER_ERROR ,
211
- ) ) ,
194
+ match handler. await {
195
+ Ok ( Ok ( _) ) => Ok ( Json ( LoadResponse {
196
+ error : None ,
197
+ state : "SUCCESS" . to_string ( ) ,
198
+ id : uuid:: Uuid :: new_v4 ( ) . to_string ( ) ,
199
+ stats : context. get_scan_progress_value ( ) ,
200
+ files,
201
+ } ) ) ,
202
+ Ok ( Err ( cause) ) => Err ( poem:: Error :: from_string (
203
+ format ! (
204
+ "execute fail: {}" ,
205
+ cause. display_with_sql( insert_sql) . message( )
206
+ ) ,
207
+ StatusCode :: BAD_REQUEST ,
208
+ ) ) ,
209
+ Err ( _) => Err ( poem:: Error :: from_string (
210
+ "Maybe panic." ,
211
+ StatusCode :: INTERNAL_SERVER_ERROR ,
212
+ ) ) ,
213
+ }
212
214
}
213
- }
214
- InsertInputSource :: StreamingWithFormat ( _, _, _) => Err ( poem:: Error :: from_string (
215
- "'INSERT INTO $table FORMAT <type> is now only supported in clickhouse handler,\
215
+ InsertInputSource :: StreamingWithFormat ( _, _, _) => Err ( poem:: Error :: from_string (
216
+ "'INSERT INTO $table FORMAT <type> is now only supported in clickhouse handler,\
216
217
please use 'FILE_FORMAT = (type = <type> ...)' instead.",
217
- StatusCode :: BAD_REQUEST ,
218
- ) ) ,
219
- _non_supported_source => Err ( poem:: Error :: from_string (
220
- format ! (
221
- "streaming upload only support 'INSERT INTO $table FILE_FORMAT = (type = <type> ...)' got {}." ,
222
- plan
223
- ) ,
224
- StatusCode :: BAD_REQUEST ,
225
- ) ) ,
226
- } ,
218
+ StatusCode :: BAD_REQUEST ,
219
+ ) ) ,
220
+ _non_supported_source => Err ( poem:: Error :: from_string (
221
+ format ! (
222
+ "streaming upload only support 'INSERT INTO $table FILE_FORMAT = (type = <type> ...)' got {}." ,
223
+ plan
224
+ ) ,
225
+ StatusCode :: BAD_REQUEST ,
226
+ ) ) ,
227
+ }
228
+ }
227
229
non_insert_plan => Err ( poem:: Error :: from_string (
228
230
format ! (
229
231
"Only supports INSERT statement in streaming load, but got {}" ,
0 commit comments