@@ -34,15 +34,13 @@ use crate::storage::StorageParams;
3434// internalStageParams
3535// directoryTableParams
3636// [ FILE_FORMAT = ( { FORMAT_NAME = '<file_format_name>' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML } [ formatTypeOptions ] ) } ]
37- // [ COPY_OPTIONS = ( copyOptions ) ]
3837// [ COMMENT = '<string_literal>' ]
3938//
4039// -- External stage
4140// CREATE [ OR REPLACE ] [ TEMPORARY ] STAGE [ IF NOT EXISTS ] <external_stage_name>
4241// externalStageParams
4342// directoryTableParams
4443// [ FILE_FORMAT = ( { FORMAT_NAME = '<file_format_name>' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML } [ formatTypeOptions ] ) } ]
45- // [ COPY_OPTIONS = ( copyOptions ) ]
4644// [ COMMENT = '<string_literal>' ]
4745//
4846//
@@ -52,7 +50,6 @@ use crate::storage::StorageParams;
5250// 's3://<bucket>[/<path>/]'
5351// [ { CREDENTIALS = ( { { AWS_KEY_ID = '<string>' AWS_SECRET_KEY = '<string>' [ AWS_TOKEN = '<string>' ] } | AWS_ROLE = '<string>' } ) ) } ]
5452//
55- // copyOptions ::=
5653// ON_ERROR = { CONTINUE | SKIP_FILE | SKIP_FILE_<num> | SKIP_FILE_<num>% | ABORT_STATEMENT }
5754// SIZE_LIMIT = <num>
5855
@@ -403,7 +400,7 @@ pub struct StageParams {
403400 pub storage : StorageParams ,
404401}
405402
406- #[ derive( serde:: Serialize , serde:: Deserialize , Clone , Debug , Eq , PartialEq ) ]
403+ #[ derive( serde:: Serialize , serde:: Deserialize , Clone , Debug , Eq , PartialEq , Copy ) ]
407404pub enum OnErrorMode {
408405 Continue ,
409406 SkipFileNum ( u64 ) ,
@@ -509,92 +506,6 @@ pub struct CopyOptions {
509506 pub detailed_output : bool ,
510507}
511508
512- impl CopyOptions {
513- pub fn apply ( & mut self , opts : & BTreeMap < String , String > , ignore_unknown : bool ) -> Result < ( ) > {
514- if opts. is_empty ( ) {
515- return Ok ( ( ) ) ;
516- }
517- for ( k, v) in opts. iter ( ) {
518- match k. as_str ( ) {
519- "on_error" => {
520- let on_error = OnErrorMode :: from_str ( v) ?;
521- self . on_error = on_error;
522- }
523- "size_limit" => {
524- let size_limit = usize:: from_str ( v) ?;
525- self . size_limit = size_limit;
526- }
527- "max_files" => {
528- let max_files = usize:: from_str ( v) ?;
529- self . max_files = max_files;
530- }
531- "split_size" => {
532- let split_size = usize:: from_str ( v) ?;
533- self . split_size = split_size;
534- }
535- "purge" => {
536- let purge = bool:: from_str ( v) . map_err ( |_| {
537- ErrorCode :: StrParseError ( format ! ( "Cannot parse purge: {} as bool" , v) )
538- } ) ?;
539- self . purge = purge;
540- }
541- "single" => {
542- let single = bool:: from_str ( v) . map_err ( |_| {
543- ErrorCode :: StrParseError ( format ! ( "Cannot parse single: {} as bool" , v) )
544- } ) ?;
545- self . single = single;
546- }
547- "max_file_size" => {
548- let max_file_size = usize:: from_str ( v) ?;
549- self . max_file_size = max_file_size;
550- }
551- "disable_variant_check" => {
552- let disable_variant_check = bool:: from_str ( v) . map_err ( |_| {
553- ErrorCode :: StrParseError ( format ! (
554- "Cannot parse disable_variant_check: {} as bool" ,
555- v
556- ) )
557- } ) ?;
558- self . disable_variant_check = disable_variant_check;
559- }
560- "return_failed_only" => {
561- let return_failed_only = bool:: from_str ( v) . map_err ( |_| {
562- ErrorCode :: StrParseError ( format ! (
563- "Cannot parse return_failed_only: {} as bool" ,
564- v
565- ) )
566- } ) ?;
567- self . return_failed_only = return_failed_only;
568- }
569- _ => {
570- if !ignore_unknown {
571- return Err ( ErrorCode :: BadArguments ( format ! (
572- "Unknown stage copy option {}" ,
573- k
574- ) ) ) ;
575- }
576- }
577- }
578- }
579- Ok ( ( ) )
580- }
581- }
582-
583- impl Display for CopyOptions {
584- fn fmt ( & self , f : & mut Formatter ) -> fmt:: Result {
585- write ! ( f, "OnErrorMode {}" , self . on_error) ?;
586- write ! ( f, "SizeLimit {}" , self . size_limit) ?;
587- write ! ( f, "MaxFiles {}" , self . max_files) ?;
588- write ! ( f, "SplitSize {}" , self . split_size) ?;
589- write ! ( f, "Purge {}" , self . purge) ?;
590- write ! ( f, "DisableVariantCheck {}" , self . disable_variant_check) ?;
591- write ! ( f, "ReturnFailedOnly {}" , self . return_failed_only) ?;
592- write ! ( f, "MaxFileSize {}" , self . max_file_size) ?;
593- write ! ( f, "Single {}" , self . single) ?;
594- write ! ( f, "DetailedOutput {}" , self . detailed_output)
595- }
596- }
597-
598509#[ derive( serde:: Serialize , serde:: Deserialize , Default , Clone , Debug , Eq , PartialEq ) ]
599510#[ serde( default ) ]
600511pub struct StageInfo {
0 commit comments