I bet you can make this even faster by making it mutate lhs rather than make a new one
pub(crate) fn scalar_add(lhs: &mut ScalarValue, rhs: &ScalarValue) -> Result<()> {
Originally posted by @alamb in #20768 (comment)
The other idea is to inline the implementation of precision_add to ScalarValue::add for numeric types, in order to avoid allocations when adding