Skip to content

Commit 48ce3eb

Browse files
authored
Columnar APIs: do not autogenerate indicator for Scalar (#8771)
See #8769 (review) for rationale: ![image](https://github.com/user-attachments/assets/1b017fb2-328c-46cd-8ead-4054c0ab5d0b) * Related: #8768 * Follow-up to #8753
1 parent 4e43c05 commit 48ce3eb

File tree

3 files changed

+17
-9
lines changed

3 files changed

+17
-9
lines changed

crates/build/re_types_builder/src/codegen/rust/api.rs

+13-2
Original file line numberDiff line numberDiff line change
@@ -1959,11 +1959,22 @@ fn quote_builder_from_obj(reporter: &Reporter, objects: &Objects, obj: &Object)
19591959
");
19601960
let columns_doc = quote_doc_lines(&columns_doc.lines().map(|l| l.to_owned()).collect_vec());
19611961

1962+
let has_indicator = obj.fqname.as_str() != "rerun.archetypes.Scalar";
1963+
1964+
let num_fields = required.iter().chain(optional.iter()).count();
19621965
let fields = required.iter().chain(optional.iter()).map(|field| {
19631966
let field_name = format_ident!("{}", field.name);
1964-
quote!(self.#field_name.map(|#field_name| #field_name.partitioned(_lengths.clone())).transpose()?)
1967+
let clone = if num_fields == 1 && !has_indicator { quote!(.into_iter()) } else { quote!(.clone()) };
1968+
quote!(self.#field_name.map(|#field_name| #field_name.partitioned(_lengths #clone)).transpose()?)
19651969
});
19661970

1971+
let indicator_column = if !has_indicator {
1972+
// NOTE(#8768): Scalar indicators are extremely wasteful, and not actually used for anything.
1973+
quote!(None)
1974+
} else {
1975+
quote!(::re_types_core::indicator_column::<Self>(_lengths.into_iter().count())?)
1976+
};
1977+
19671978
quote! {
19681979
#columns_doc
19691980
#[inline]
@@ -1975,7 +1986,7 @@ fn quote_builder_from_obj(reporter: &Reporter, objects: &Objects, obj: &Object)
19751986
I: IntoIterator<Item = usize> + Clone,
19761987
{
19771988
let columns = [ #(#fields),* ];
1978-
let indicator_column = ::re_types_core::indicator_column::<Self>(_lengths.into_iter().count())?;
1989+
let indicator_column = #indicator_column;
19791990
Ok(columns.into_iter().chain([indicator_column]).flatten())
19801991
}
19811992
}

crates/store/re_types/src/archetypes/scalar.rs

+3-5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/snippets/all/archetypes/scalar_send_columns.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
1515
[times],
1616
rerun::Scalar::update_fields()
1717
.with_many_scalar(scalars)
18-
.columns(std::iter::repeat(1).take(STEPS as _))?
19-
.filter(|column| !column.descriptor.component_name.contains("Indicator")),
18+
.columns(std::iter::repeat(1).take(STEPS as _))?,
2019
)?;
2120

2221
Ok(())

0 commit comments

Comments
 (0)