func translateAttributeUpdates()

in dax/internal/client/legacy.go [329:385]


func translateAttributeUpdates(avus map[string]types.AttributeValueUpdate, subs map[string]string, vars map[string]types.AttributeValue) (*string, map[string]string, map[string]types.AttributeValue, error) {
	var sets, adds, dels, rems []string

	for a, avu := range avus {
		act := types.AttributeActionPut
		if avu.Action != "" {
			act = avu.Action
		}
		if avu.Value == nil && act != types.AttributeActionDelete {
			return nil, subs, vars, &smithy.GenericAPIError{
				Code:    ErrCodeValidationException,
				Message: "only DELETE action is allowed when no attribute value is specified",
				Fault:   smithy.FaultClient,
			}
		}

		var an, av string
		subs, an = appendAttributeName(subs, a)
		if avu.Value != nil {
			vars, av = appendAttributeValue(vars, avu.Value)
		}

		switch act {
		case types.AttributeActionPut:
			sets = append(sets, fmt.Sprintf("%s=%s", an, av))
		case types.AttributeActionAdd:
			adds = append(adds, fmt.Sprintf("%s %s", an, av))
		case types.AttributeActionDelete:
			if len(av) == 0 {
				rems = append(rems, an)
			} else {
				dels = append(dels, fmt.Sprintf("%s %s", an, av))
			}
		default:
			return nil, subs, vars, &smithy.GenericAPIError{
				Code:    ErrCodeValidationException,
				Message: fmt.Sprintf("unknown AttributeValueUpdate Action: %s", act),
				Fault:   smithy.FaultClient,
			}
		}
	}

	var all []string
	if len(sets) > 0 {
		all = append(all, fmt.Sprintf("set %s", strings.Join(sets, ",")))
	}
	if len(adds) > 0 {
		all = append(all, fmt.Sprintf("add %s", strings.Join(adds, ",")))
	}
	if len(dels) > 0 {
		all = append(all, fmt.Sprintf("delete %s", strings.Join(dels, ",")))
	}
	if len(rems) > 0 {
		all = append(all, fmt.Sprintf("remove %s", strings.Join(rems, ",")))
	}
	return aws.String(strings.Join(all, " ")), subs, vars, nil
}