fix: validate prepared batch values and clarify write contracts

Signed-off-by: WenyXu <wenymedia@gmail.com>
This commit is contained in:
WenyXu
2026-09-16 10:25:34 +00:00
parent 236dfba44d
commit cd76d6842a
5 changed files with 182 additions and 21 deletions
+25
View File
@@ -1033,6 +1033,17 @@ pub fn proto_value_type(value: &v1::Value) -> Option<ColumnDataType> {
Some(value_type)
}
/// Checks protobuf value types using the write-path compatibility rules.
/// Binary values also represent JSON and vector columns.
pub fn proto_value_type_match(column_type: ColumnDataType, value_type: ColumnDataType) -> bool {
match (column_type, value_type) {
(ct, vt) if ct == vt => true,
(ColumnDataType::Vector, ColumnDataType::Binary) => true,
(ColumnDataType::Json, ColumnDataType::Binary) => true,
_ => false,
}
}
pub fn vectors_to_rows<'a>(
columns: impl Iterator<Item = &'a VectorRef>,
row_count: usize,
@@ -2085,4 +2096,18 @@ mod tests {
let value = decode_json_value(&proto);
assert_eq!(json.as_ref(), value);
}
#[test]
fn test_proto_value_type_match() {
for (column, value, expected) in [
(ColumnDataType::Int32, ColumnDataType::Int32, true),
(ColumnDataType::Json, ColumnDataType::Binary, true),
(ColumnDataType::Vector, ColumnDataType::Binary, true),
(ColumnDataType::Float64, ColumnDataType::List, false),
(ColumnDataType::Float64, ColumnDataType::Struct, false),
(ColumnDataType::Binary, ColumnDataType::Json, false),
] {
assert_eq!(expected, proto_value_type_match(column, value));
}
}
}