github.com/selefra/selefra-provider-sdk@v0.0.23/provider/transformer/column_value_extractor/column_value_extractor_primary_keys_id.go (about)

     1  package column_value_extractor
     2  
     3  import (
     4  	"context"
     5  	"errors"
     6  	"github.com/selefra/selefra-provider-sdk/provider/schema"
     7  	"github.com/selefra/selefra-utils/pkg/md5_util"
     8  	"strings"
     9  )
    10  
    11  type ColumnValueExtractorPrimaryKeysID struct {
    12  }
    13  
    14  var _ schema.ColumnValueExtractor = &ColumnValueExtractorPrimaryKeysID{}
    15  
    16  func (x *ColumnValueExtractorPrimaryKeysID) Name() string {
    17  	return "primary-keys-id-column-value-extractor"
    18  }
    19  
    20  func (x *ColumnValueExtractorPrimaryKeysID) Extract(ctx context.Context, clientMeta *schema.ClientMeta, client any,  task *schema.DataSourcePullTask, row *schema.Row, column *schema.Column, result any) (any, *schema.Diagnostics) {
    21  
    22  	table := task.Table
    23  	diagnostics := schema.NewDiagnostics()
    24  
    25  	if len(table.GetPrimaryKeys()) == 0 {
    26  		return nil, diagnostics.AddErrorMsg(BuildExtractErrMsg(x, table, column, "table not have primary keys"))
    27  	}
    28  
    29  	columnValues := make([]string, 0)
    30  	for _, columnName := range table.GetPrimaryKeys() {
    31  		value, err := row.GetString(columnName)
    32  		if err != nil {
    33  			diagnostics.AddErrorMsg(BuildExtractErr(x, table, column, err))
    34  		}
    35  		columnValues = append(columnValues, value)
    36  	}
    37  
    38  	value, err := md5_util.Md5String(strings.Join(columnValues, " | "))
    39  	if err != nil {
    40  		return nil, diagnostics.AddErrorMsg(BuildExtractErr(x, table, column, err))
    41  	}
    42  
    43  	return value, diagnostics
    44  }
    45  
    46  func (x *ColumnValueExtractorPrimaryKeysID) DependencyColumnNames(ctx context.Context, clientMeta *schema.ClientMeta, parentTable *schema.Table, table *schema.Table, column *schema.Column) []string {
    47  	return table.GetPrimaryKeys()
    48  }
    49  
    50  func (x *ColumnValueExtractorPrimaryKeysID) Validate(ctx context.Context, clientMeta *schema.ClientMeta, parentTable *schema.Table, table *schema.Table, column *schema.Column) *schema.Diagnostics {
    51  
    52  	diagnostics := schema.NewDiagnostics()
    53  
    54  	if len(table.GetPrimaryKeys()) == 0 {
    55  		diagnostics.AddErrorMsg(BuildValidateErr(x, table, column, errors.New("table not have primary keys")))
    56  	}
    57  
    58  	return diagnostics
    59  }
    60  
    61  func PrimaryKeysID() *ColumnValueExtractorPrimaryKeysID {
    62  	return &ColumnValueExtractorPrimaryKeysID{}
    63  }