feat: add prepared batch write primitives (#9186)

* refactor: expose shared operator test fixtures

Signed-off-by: WenyXu <wenymedia@gmail.com>

* feat: convert prepared table rows to Arrow batches

Signed-off-by: WenyXu <wenymedia@gmail.com>

* feat: write prepared table batches through bulk insert

Signed-off-by: WenyXu <wenymedia@gmail.com>

* feat: define prepared batch submission interface

Signed-off-by: WenyXu <wenymedia@gmail.com>

* fix: validate prepared batch values and clarify write contracts

Signed-off-by: WenyXu <wenymedia@gmail.com>

* fix: reuse JSON2 array schema alignment for prepared writes

Signed-off-by: WenyXu <wenymedia@gmail.com>

* ci: refresh compatibility window for v1.2.1

Signed-off-by: WenyXu <wenymedia@gmail.com>

---------

Signed-off-by: WenyXu <wenymedia@gmail.com>
This commit is contained in:
Weny Xu
2026-09-16 14:34:22 +00:00
committed by GitHub
parent 3942d60042
commit 809283e6b4
17 changed files with 789 additions and 50 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));
}
}
}