Skip to content

Commit 388607c

Browse files
authored
perf(cubesql): Avoid cloning row payload in convert_transport_response (cube-js#10772)
Destructure V1LoadResult to move `data` and `last_refresh_time` out of the owned value instead of cloning. Eliminates a full copy of the row Vec on every Cube load result, reducing peak memory and allocator churn.
1 parent df30aad commit 388607c

1 file changed

Lines changed: 10 additions & 4 deletions

File tree

  • rust/cubesql/cubesql/src/compile/engine/df

rust/cubesql/cubesql/src/compile/engine/df/scan.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use crate::{
1111
};
1212
use async_trait::async_trait;
1313
use chrono::{Datelike, NaiveDate};
14-
use cubeclient::models::{V1LoadRequestQuery, V1LoadResponse};
14+
use cubeclient::models::{V1LoadRequestQuery, V1LoadResponse, V1LoadResult};
1515
pub use datafusion::{
1616
arrow::{
1717
array::{
@@ -1194,9 +1194,15 @@ pub fn convert_transport_response(
11941194
response
11951195
.results
11961196
.into_iter()
1197-
.map(|r| {
1198-
let mut response = JsonValueObject::new(r.data.clone());
1199-
let updated_schema = if let Some(last_refresh_time) = r.last_refresh_time.clone() {
1197+
.map(|result| {
1198+
let V1LoadResult {
1199+
data,
1200+
last_refresh_time,
1201+
..
1202+
} = result;
1203+
1204+
let mut response = JsonValueObject::new(data);
1205+
let updated_schema = if let Some(last_refresh_time) = last_refresh_time {
12001206
let mut metadata = schema.metadata().clone();
12011207
metadata.insert("lastRefreshTime".to_string(), last_refresh_time);
12021208
Arc::new(Schema::new_with_metadata(

0 commit comments

Comments
 (0)