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 }