in dax/internal/client/request.go [1006:1128]
func encodeScanQueryOptionalParams(
ctx context.Context,
index *string,
selection types.Select,
returnConsumedCapacity types.ReturnConsumedCapacity,
consistentRead *bool,
encodedExpressions map[int][]byte, segment, totalSegment, limit *int32, forward *bool,
startKey map[string]types.AttributeValue, keySchema *lru.Lru, table string, writer *cbor.Writer) error {
var err error
if err = writer.WriteMapStreamHeader(); err != nil {
return err
}
if index != nil {
if err = writer.WriteInt(requestParamIndexName); err != nil {
return err
}
if err = writer.WriteBytes([]byte(*index)); err != nil {
return err
}
}
if selection != types.SelectAllAttributes {
if err = writer.WriteInt(requestParamSelect); err != nil {
return err
}
if err = writer.WriteInt(translateSelect(selection)); err != nil {
return err
}
}
if returnConsumedCapacity != types.ReturnConsumedCapacityNone {
if err = writer.WriteInt(requestParamReturnConsumedCapacity); err != nil {
return err
}
if err = writer.WriteInt(translateReturnConsumedCapacity(returnConsumedCapacity)); err != nil {
return err
}
}
if consistentRead != nil {
if err = writer.WriteInt(requestParamConsistentRead); err != nil {
return err
}
cr := 0
if *consistentRead {
cr = 1
}
if err = writer.WriteInt(cr); err != nil {
return err
}
}
if len(startKey) != 0 {
if err = writer.WriteInt(requestParamExclusiveStartKey); err != nil {
return err
}
if index == nil {
tableKeys, err := getKeySchema(ctx, keySchema, table)
if err != nil {
return nil
}
if err = cbor.EncodeItemKey(startKey, tableKeys, writer); err != nil {
return err
}
} else {
if err = encodeCompoundKey(startKey, writer); err != nil {
return err
}
}
}
if segment != nil {
if err = writer.WriteInt(requestParamSegment); err != nil {
return err
}
if err = writer.WriteInt64(int64(*segment)); err != nil {
return err
}
}
if totalSegment != nil {
if err = writer.WriteInt(requestParamTotalSegments); err != nil {
return err
}
if err = writer.WriteInt64(int64(*totalSegment)); err != nil {
return err
}
}
if limit != nil {
if err = writer.WriteInt(requestParamLimit); err != nil {
return err
}
if err = writer.WriteInt64(int64(*limit)); err != nil {
return err
}
}
if forward != nil {
if err = writer.WriteInt(requestParamScanIndexForward); err != nil {
return err
}
if err = writer.WriteInt(translateScanIndexForward(forward)); err != nil {
return err
}
}
if len(encodedExpressions) > 0 {
for k, v := range encodedExpressions {
var e int
switch k {
case parser.ProjectionExpr:
e = requestParamProjectionExpression
case parser.FilterExpr:
e = requestParamFilterExpression
default:
continue
}
if err = writer.WriteInt(e); err != nil {
return err
}
if err = writer.WriteBytes(v); err != nil {
return err
}
}
}
return writer.WriteStreamBreak()
}