use new number type to be compatible with dynamo
This commit is contained in:
@@ -76,6 +76,13 @@ encode_attribute_value :: proc(buf: ^bytes.Buffer, attr: Attribute_Value) -> boo
|
||||
encode_varint(buf, len(v))
|
||||
bytes.buffer_write_string(buf, string(v))
|
||||
|
||||
case DDB_Number:
|
||||
bytes.buffer_write_byte(buf, u8(Type_Tag.Number))
|
||||
// Store as string in item encoding
|
||||
num_str := format_ddb_number(v)
|
||||
encode_varint(buf, len(num_str))
|
||||
bytes.buffer_write_string(buf, num_str)
|
||||
|
||||
case Number:
|
||||
bytes.buffer_write_byte(buf, u8(Type_Tag.Number))
|
||||
encode_varint(buf, len(v))
|
||||
@@ -94,6 +101,16 @@ encode_attribute_value :: proc(buf: ^bytes.Buffer, attr: Attribute_Value) -> boo
|
||||
bytes.buffer_write_byte(buf, u8(Type_Tag.Null))
|
||||
// NULL has no value bytes
|
||||
|
||||
case DDB_Number_Set:
|
||||
bytes.buffer_write_byte(buf, u8(Type_Tag.Number_Set)) // Use Number_Set tag, not DDB_Number_Set
|
||||
encode_varint(buf, len(v))
|
||||
for num in v {
|
||||
// Format the DDB_Number to a string
|
||||
num_str := format_ddb_number(num)
|
||||
encode_varint(buf, len(num_str))
|
||||
bytes.buffer_write_string(buf, num_str)
|
||||
}
|
||||
|
||||
case String_Set:
|
||||
bytes.buffer_write_byte(buf, u8(Type_Tag.String_Set))
|
||||
encode_varint(buf, len(v))
|
||||
@@ -289,9 +306,15 @@ decode_attribute_value :: proc(decoder: ^Binary_Decoder) -> (Attribute_Value, bo
|
||||
return nil, false
|
||||
}
|
||||
|
||||
str := string(data)
|
||||
owned := transmute(string)slice.clone(transmute([]byte)str)
|
||||
return Number(owned), true
|
||||
num_str := string(data)
|
||||
|
||||
// Parse into DDB_Number
|
||||
ddb_num, num_ok := parse_ddb_number(num_str)
|
||||
if !num_ok {
|
||||
return nil, false
|
||||
}
|
||||
|
||||
return ddb_num, true
|
||||
|
||||
case .Binary:
|
||||
length, len_ok := decoder_read_varint(decoder)
|
||||
@@ -359,32 +382,35 @@ decode_attribute_value :: proc(decoder: ^Binary_Decoder) -> (Attribute_Value, bo
|
||||
return nil, false
|
||||
}
|
||||
|
||||
numbers := make([]string, count)
|
||||
numbers := make([]DDB_Number, count) // Changed to DDB_Number
|
||||
|
||||
for i in 0..<count {
|
||||
length, len_ok := decoder_read_varint(decoder)
|
||||
if !len_ok {
|
||||
for j in 0..<i {
|
||||
delete(numbers[j])
|
||||
}
|
||||
// No cleanup needed for DDB_Number (no heap allocations)
|
||||
delete(numbers)
|
||||
return nil, false
|
||||
}
|
||||
|
||||
data, data_ok := decoder_read_bytes(decoder, length)
|
||||
if !data_ok {
|
||||
for j in 0..<i {
|
||||
delete(numbers[j])
|
||||
}
|
||||
delete(numbers)
|
||||
return nil, false
|
||||
}
|
||||
|
||||
str := string(data)
|
||||
numbers[i] = transmute(string)slice.clone(transmute([]byte)str)
|
||||
num_str := string(data)
|
||||
|
||||
// Parse into DDB_Number
|
||||
ddb_num, num_ok := parse_ddb_number(num_str)
|
||||
if !num_ok {
|
||||
delete(numbers)
|
||||
return nil, false
|
||||
}
|
||||
|
||||
numbers[i] = ddb_num
|
||||
}
|
||||
|
||||
return Number_Set(numbers), true
|
||||
return DDB_Number_Set(numbers), true
|
||||
|
||||
case .Binary_Set:
|
||||
count, count_ok := decoder_read_varint(decoder)
|
||||
|
||||
Reference in New Issue
Block a user