mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-08-12 09:19:44 +00:00
feat: implement view-based vector types (#7600)
* feat: implement view-based vector types Signed-off-by: Ruihang Xia <waynestxia@gmail.com> * simplify Signed-off-by: Ruihang Xia <waynestxia@gmail.com> * support large binary array, simplify match Signed-off-by: Ruihang Xia <waynestxia@gmail.com> --------- Signed-off-by: Ruihang Xia <waynestxia@gmail.com>
This commit is contained in:
@@ -895,36 +895,12 @@ impl RowWriter {
|
||||
let v = array.value(i);
|
||||
self.insert(column, v);
|
||||
}
|
||||
DataType::Utf8 => {
|
||||
let array = array.as_string::<i32>();
|
||||
let v = array.value(i);
|
||||
DataType::Utf8 | DataType::LargeUtf8 | DataType::Utf8View => {
|
||||
let v = datatypes::arrow_array::string_array_value(array, i);
|
||||
self.insert(column, v);
|
||||
}
|
||||
DataType::LargeUtf8 => {
|
||||
let array = array.as_string::<i64>();
|
||||
let v = array.value(i);
|
||||
self.insert(column, v);
|
||||
}
|
||||
DataType::Utf8View => {
|
||||
let array = array.as_string_view();
|
||||
let v = array.value(i);
|
||||
self.insert(column, v);
|
||||
}
|
||||
DataType::Binary => {
|
||||
let array = array.as_binary::<i32>();
|
||||
let v = array.value(i);
|
||||
let column_schema = &schema.column_schemas()[j];
|
||||
self.insert_bytes(column_schema, v)?;
|
||||
}
|
||||
DataType::LargeBinary => {
|
||||
let array = array.as_binary::<i64>();
|
||||
let v = array.value(i);
|
||||
let column_schema = &schema.column_schemas()[j];
|
||||
self.insert_bytes(column_schema, v)?;
|
||||
}
|
||||
DataType::BinaryView => {
|
||||
let array = array.as_binary_view();
|
||||
let v = array.value(i);
|
||||
DataType::Binary | DataType::LargeBinary | DataType::BinaryView => {
|
||||
let v = datatypes::arrow_array::binary_array_value(array, i);
|
||||
let column_schema = &schema.column_schemas()[j];
|
||||
self.insert_bytes(column_schema, v)?;
|
||||
}
|
||||
|
||||
@@ -175,34 +175,12 @@ impl HttpOutputWriter {
|
||||
let v = array.value(i);
|
||||
self.write_value(v)?;
|
||||
}
|
||||
DataType::Utf8 => {
|
||||
let array = array.as_string::<i32>();
|
||||
let v = array.value(i);
|
||||
DataType::Utf8 | DataType::LargeUtf8 | DataType::Utf8View => {
|
||||
let v = datatypes::arrow_array::string_array_value(array, i);
|
||||
self.write_value(v)?;
|
||||
}
|
||||
DataType::LargeUtf8 => {
|
||||
let array = array.as_string::<i64>();
|
||||
let v = array.value(i);
|
||||
self.write_value(v)?;
|
||||
}
|
||||
DataType::Utf8View => {
|
||||
let array = array.as_string_view();
|
||||
let v = array.value(i);
|
||||
self.write_value(v)?;
|
||||
}
|
||||
DataType::Binary => {
|
||||
let array = array.as_binary::<i32>();
|
||||
let v = array.value(i);
|
||||
self.write_bytes(v, &schema.data_type)?;
|
||||
}
|
||||
DataType::LargeBinary => {
|
||||
let array = array.as_binary::<i64>();
|
||||
let v = array.value(i);
|
||||
self.write_bytes(v, &schema.data_type)?;
|
||||
}
|
||||
DataType::BinaryView => {
|
||||
let array = array.as_binary_view();
|
||||
let v = array.value(i);
|
||||
DataType::Binary | DataType::LargeBinary | DataType::BinaryView => {
|
||||
let v = datatypes::arrow_array::binary_array_value(array, i);
|
||||
self.write_bytes(v, &schema.data_type)?;
|
||||
}
|
||||
DataType::Date32 => {
|
||||
|
||||
@@ -280,41 +280,12 @@ impl<'a, W: AsyncWrite + Unpin> MysqlResultWriter<'a, W> {
|
||||
let array = column.as_primitive::<Float64Type>();
|
||||
row_writer.write_col(array.value(i))?;
|
||||
}
|
||||
DataType::Utf8 => {
|
||||
let array = column.as_string::<i32>();
|
||||
row_writer.write_col(array.value(i))?;
|
||||
DataType::Utf8 | DataType::Utf8View | DataType::LargeUtf8 => {
|
||||
let v = datatypes::arrow_array::string_array_value(column, i);
|
||||
row_writer.write_col(v)?;
|
||||
}
|
||||
DataType::Utf8View => {
|
||||
let array = column.as_string_view();
|
||||
row_writer.write_col(array.value(i))?;
|
||||
}
|
||||
DataType::LargeUtf8 => {
|
||||
let array = column.as_string::<i64>();
|
||||
row_writer.write_col(array.value(i))?;
|
||||
}
|
||||
DataType::Binary => {
|
||||
let array = column.as_binary::<i32>();
|
||||
let v = array.value(i);
|
||||
if let ConcreteDataType::Json(_) = &schema.column_schemas()[j].data_type {
|
||||
let s = jsonb_to_string(v).context(ConvertSqlValueSnafu)?;
|
||||
row_writer.write_col(s)?;
|
||||
} else {
|
||||
row_writer.write_col(v)?;
|
||||
}
|
||||
}
|
||||
DataType::BinaryView => {
|
||||
let array = column.as_binary_view();
|
||||
let v = array.value(i);
|
||||
if let ConcreteDataType::Json(_) = &schema.column_schemas()[j].data_type {
|
||||
let s = jsonb_to_string(v).context(ConvertSqlValueSnafu)?;
|
||||
row_writer.write_col(s)?;
|
||||
} else {
|
||||
row_writer.write_col(v)?;
|
||||
}
|
||||
}
|
||||
DataType::LargeBinary => {
|
||||
let array = column.as_binary::<i64>();
|
||||
let v = array.value(i);
|
||||
DataType::Binary | DataType::BinaryView | DataType::LargeBinary => {
|
||||
let v = datatypes::arrow_array::binary_array_value(column, i);
|
||||
if let ConcreteDataType::Json(_) = &schema.column_schemas()[j].data_type {
|
||||
let s = jsonb_to_string(v).context(ConvertSqlValueSnafu)?;
|
||||
row_writer.write_col(s)?;
|
||||
|
||||
@@ -500,44 +500,12 @@ impl RecordBatchRowIterator {
|
||||
let array = column.as_primitive::<Float64Type>();
|
||||
encoder.encode_field(&array.value(i))?;
|
||||
}
|
||||
DataType::Utf8 => {
|
||||
let array = column.as_string::<i32>();
|
||||
let value = array.value(i);
|
||||
DataType::Utf8 | DataType::LargeUtf8 | DataType::Utf8View => {
|
||||
let value = datatypes::arrow_array::string_array_value(column, i);
|
||||
encoder.encode_field(&value)?;
|
||||
}
|
||||
DataType::Utf8View => {
|
||||
let array = column.as_string_view();
|
||||
let value = array.value(i);
|
||||
encoder.encode_field(&value)?;
|
||||
}
|
||||
DataType::LargeUtf8 => {
|
||||
let array = column.as_string::<i64>();
|
||||
let value = array.value(i);
|
||||
encoder.encode_field(&value)?;
|
||||
}
|
||||
DataType::Binary => {
|
||||
let array = column.as_binary::<i32>();
|
||||
let v = array.value(i);
|
||||
encode_bytes(
|
||||
&self.schema.column_schemas()[j],
|
||||
v,
|
||||
encoder,
|
||||
&self.query_ctx,
|
||||
)?;
|
||||
}
|
||||
DataType::BinaryView => {
|
||||
let array = column.as_binary_view();
|
||||
let v = array.value(i);
|
||||
encode_bytes(
|
||||
&self.schema.column_schemas()[j],
|
||||
v,
|
||||
encoder,
|
||||
&self.query_ctx,
|
||||
)?;
|
||||
}
|
||||
DataType::LargeBinary => {
|
||||
let array = column.as_binary::<i64>();
|
||||
let v = array.value(i);
|
||||
DataType::Binary | DataType::LargeBinary | DataType::BinaryView => {
|
||||
let v = datatypes::arrow_array::binary_array_value(column, i);
|
||||
encode_bytes(
|
||||
&self.schema.column_schemas()[j],
|
||||
v,
|
||||
|
||||
Reference in New Issue
Block a user