@@ -588,87 +588,71 @@ func WithTrace(t trace.Table) traceOption { //nolint:gocritic
588588 return traceOption {t : & t }
589589}
590590
591- type (
592- BulkUpsertRequest Ydb_Table.BulkUpsertRequest
593- )
594-
595591type BulkUpsertData interface {
596- ApplyBulkUpsertRequest (a * allocator.Allocator , req * BulkUpsertRequest ) error
592+ ToYDB (a * allocator.Allocator , tableName string ) ( * Ydb_Table. BulkUpsertRequest , error )
597593}
598594
599595type bulkUpsertRows struct {
600- Rows value.Value
596+ rows value.Value
601597}
602598
603- func (data bulkUpsertRows ) ApplyBulkUpsertRequest (a * allocator.Allocator , req * BulkUpsertRequest ) error {
604- req .Rows = value .ToYDB (data .Rows , a )
605-
606- return nil
599+ func (data bulkUpsertRows ) ToYDB (a * allocator.Allocator , tableName string ) (* Ydb_Table.BulkUpsertRequest , error ) {
600+ return & Ydb_Table.BulkUpsertRequest {
601+ Table : tableName ,
602+ Rows : value .ToYDB (data .rows , a ),
603+ }, nil
607604}
608605
609606func BulkUpsertDataRows (rows value.Value ) bulkUpsertRows {
610607 return bulkUpsertRows {
611- Rows : rows ,
608+ rows : rows ,
612609 }
613610}
614611
615612type bulkUpsertCsv struct {
616- Data []byte
617- Options []csvFormatOption
613+ data []byte
614+ opts []csvFormatOption
618615}
619616
620617type csvFormatOption interface {
621- ApplyCsvFormatOption ( req * BulkUpsertRequest ) (err error )
618+ applyCsvFormatOption ( dataFormat * Ydb_Table. BulkUpsertRequest_CsvSettings ) (err error )
622619}
623620
624- func (data bulkUpsertCsv ) ApplyBulkUpsertRequest (a * allocator.Allocator , req * BulkUpsertRequest ) error {
625- req .Data = data .Data
621+ func (data bulkUpsertCsv ) ToYDB (a * allocator.Allocator , tableName string ) (* Ydb_Table.BulkUpsertRequest , error ) {
622+ var (
623+ request = & Ydb_Table.BulkUpsertRequest {
624+ Table : tableName ,
625+ Data : data .data ,
626+ }
627+ dataFormat = & Ydb_Table.BulkUpsertRequest_CsvSettings {
628+ CsvSettings : & Ydb_Formats.CsvSettings {},
629+ }
630+ )
626631
627- var err error
628- for _ , opt := range data .Options {
632+ for _ , opt := range data .opts {
629633 if opt != nil {
630- err = opt .ApplyCsvFormatOption (req )
631- if err != nil {
632- return err
634+ if err := opt .applyCsvFormatOption (dataFormat ); err != nil {
635+ return nil , err
633636 }
634637 }
635638 }
636639
637- return err
640+ request .DataFormat = dataFormat
641+
642+ return request , nil
638643}
639644
640645func BulkUpsertDataCsv (data []byte , opts ... csvFormatOption ) bulkUpsertCsv {
641646 return bulkUpsertCsv {
642- Data : data ,
643- Options : opts ,
644- }
645- }
646-
647- func ensureCsvDataFormatSettings (req * BulkUpsertRequest ) (format * Ydb_Formats.CsvSettings ) {
648- if settings , ok := req .DataFormat .(* Ydb_Table.BulkUpsertRequest_CsvSettings ); ok {
649- if settings .CsvSettings == nil {
650- settings .CsvSettings = & Ydb_Formats.CsvSettings {}
651- }
652-
653- return settings .CsvSettings
654- }
655-
656- req .DataFormat = & Ydb_Table.BulkUpsertRequest_CsvSettings {
657- CsvSettings : & Ydb_Formats.CsvSettings {},
647+ data : data ,
648+ opts : opts ,
658649 }
659-
660- settings , ok := req .DataFormat .(* Ydb_Table.BulkUpsertRequest_CsvSettings )
661- if ! ok {
662- return nil
663- }
664-
665- return settings .CsvSettings
666650}
667651
668652type csvHeaderOption struct {}
669653
670- func (opt * csvHeaderOption ) ApplyCsvFormatOption ( req * BulkUpsertRequest ) error {
671- ensureCsvDataFormatSettings ( req ) .Header = true
654+ func (opt * csvHeaderOption ) applyCsvFormatOption ( dataFormat * Ydb_Table. BulkUpsertRequest_CsvSettings ) error {
655+ dataFormat . CsvSettings .Header = true
672656
673657 return nil
674658}
@@ -678,114 +662,93 @@ func WithCsvHeader() csvFormatOption {
678662 return & csvHeaderOption {}
679663}
680664
681- type csvNullValueOption struct {
682- Value []byte
683- }
665+ type csvNullValueOption []byte
684666
685- func (opt * csvNullValueOption ) ApplyCsvFormatOption ( req * BulkUpsertRequest ) error {
686- ensureCsvDataFormatSettings ( req ). NullValue = opt . Value
667+ func (nullValue csvNullValueOption ) applyCsvFormatOption ( dataFormat * Ydb_Table. BulkUpsertRequest_CsvSettings ) error {
668+ dataFormat . CsvSettings . NullValue = nullValue
687669
688670 return nil
689671}
690672
691673// String value that would be interpreted as NULL.
692674func WithCsvNullValue (value []byte ) csvFormatOption {
693- return & csvNullValueOption { value }
675+ return csvNullValueOption ( value )
694676}
695677
696- type csvDelimiterOption struct {
697- Value []byte
698- }
678+ type csvDelimiterOption []byte
699679
700- func (opt * csvDelimiterOption ) ApplyCsvFormatOption ( req * BulkUpsertRequest ) error {
701- ensureCsvDataFormatSettings ( req ). Delimiter = opt . Value
680+ func (delimeter csvDelimiterOption ) applyCsvFormatOption ( dataFormat * Ydb_Table. BulkUpsertRequest_CsvSettings ) error {
681+ dataFormat . CsvSettings . Delimiter = delimeter
702682
703683 return nil
704684}
705685
706686// Fields delimiter in CSV file. It's "," if not set.
707687func WithCsvDelimiter (value []byte ) csvFormatOption {
708- return & csvDelimiterOption { value }
688+ return csvDelimiterOption ( value )
709689}
710690
711- type csvSkipRowsOption struct {
712- Count uint32
713- }
691+ type csvSkipRowsOption uint32
714692
715- func (opt * csvSkipRowsOption ) ApplyCsvFormatOption ( req * BulkUpsertRequest ) error {
716- ensureCsvDataFormatSettings ( req ). SkipRows = opt . Count
693+ func (skipRows csvSkipRowsOption ) applyCsvFormatOption ( dataFormat * Ydb_Table. BulkUpsertRequest_CsvSettings ) error {
694+ dataFormat . CsvSettings . SkipRows = uint32 ( skipRows )
717695
718696 return nil
719697}
720698
721699// Number of rows to skip before CSV data. It should be present only in the first upsert of CSV file.
722- func WithCsvSkipRows (count uint32 ) csvFormatOption {
723- return & csvSkipRowsOption { count }
700+ func WithCsvSkipRows (skipRows uint32 ) csvFormatOption {
701+ return csvSkipRowsOption ( skipRows )
724702}
725703
726704type bulkUpsertArrow struct {
727- Data []byte
728- Options []arrowFormatOption
705+ data []byte
706+ opts []arrowFormatOption
729707}
730708
731709type arrowFormatOption interface {
732- ApplyArrowFormatOption (req * BulkUpsertRequest ) (err error )
710+ applyArrowFormatOption (req * Ydb_Table. BulkUpsertRequest_ArrowBatchSettings ) (err error )
733711}
734712
735- func (data bulkUpsertArrow ) ApplyBulkUpsertRequest (a * allocator.Allocator , req * BulkUpsertRequest ) error {
736- req .Data = data .Data
713+ func (data bulkUpsertArrow ) ToYDB (a * allocator.Allocator , tableName string ) (* Ydb_Table.BulkUpsertRequest , error ) {
714+ var (
715+ request = & Ydb_Table.BulkUpsertRequest {
716+ Table : tableName ,
717+ Data : data .data ,
718+ }
719+ dataFormat = & Ydb_Table.BulkUpsertRequest_ArrowBatchSettings {
720+ ArrowBatchSettings : & Ydb_Formats.ArrowBatchSettings {},
721+ }
722+ )
737723
738- var err error
739- for _ , opt := range data .Options {
724+ for _ , opt := range data .opts {
740725 if opt != nil {
741- err = opt .ApplyArrowFormatOption (req )
742- if err != nil {
743- return err
726+ if err := opt .applyArrowFormatOption (dataFormat ); err != nil {
727+ return nil , err
744728 }
745729 }
746730 }
747731
748- return err
732+ request .DataFormat = dataFormat
733+
734+ return request , nil
749735}
750736
751737func BulkUpsertDataArrow (data []byte , opts ... arrowFormatOption ) bulkUpsertArrow {
752738 return bulkUpsertArrow {
753- Data : data ,
754- Options : opts ,
739+ data : data ,
740+ opts : opts ,
755741 }
756742}
757743
758- func ensureArrowDataFormatSettings (req * BulkUpsertRequest ) (format * Ydb_Formats.ArrowBatchSettings ) {
759- if settings , ok := req .DataFormat .(* Ydb_Table.BulkUpsertRequest_ArrowBatchSettings ); ok {
760- if settings .ArrowBatchSettings == nil {
761- settings .ArrowBatchSettings = & Ydb_Formats.ArrowBatchSettings {}
762- }
763-
764- return settings .ArrowBatchSettings
765- }
766-
767- req .DataFormat = & Ydb_Table.BulkUpsertRequest_ArrowBatchSettings {
768- ArrowBatchSettings : & Ydb_Formats.ArrowBatchSettings {},
769- }
770-
771- settings , ok := req .DataFormat .(* Ydb_Table.BulkUpsertRequest_ArrowBatchSettings )
772- if ! ok {
773- return nil
774- }
775-
776- return settings .ArrowBatchSettings
777- }
778-
779- type arrowSchemaOption struct {
780- Schema []byte
781- }
744+ type arrowSchemaOption []byte
782745
783- func (opt * arrowSchemaOption ) ApplyArrowFormatOption ( req * BulkUpsertRequest ) error {
784- ensureArrowDataFormatSettings ( req ). Schema = opt . Schema
746+ func (schema arrowSchemaOption ) applyArrowFormatOption ( dataFormat * Ydb_Table. BulkUpsertRequest_ArrowBatchSettings ) error {
747+ dataFormat . ArrowBatchSettings . Schema = schema
785748
786749 return nil
787750}
788751
789752func WithArrowSchema (schema []byte ) arrowFormatOption {
790- return & arrowSchemaOption { schema }
753+ return arrowSchemaOption ( schema )
791754}
0 commit comments