Skip to content

Commit

Permalink
Fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
stefan-mysten committed Jan 31, 2025
1 parent 85272cb commit 9d530b0
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 52 deletions.
2 changes: 1 addition & 1 deletion crates/sui-graphql-rpc/schema.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -2879,7 +2879,7 @@ objects are ones whose
- Type matches the `type` filter,
- AND, whose owner matches the `owner` filter,
- AND, whose ID is in `objectIds` OR whose ID and version is in `objectKeys`.
- AND, whose ID is in `objectIds`.
"""
input ObjectFilter {
"""
Expand Down
7 changes: 7 additions & 0 deletions crates/sui-graphql-rpc/src/types/gas.rs
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,14 @@ impl GasInput {
// still be viewable.
let page = Page::from_params(ctx.data_unchecked(), first, after, last, before)?;

let object_ids = self
.payment_obj_keys
.iter()
.map(|k| (k.object_id))
.collect::<Vec<_>>();

let filter = ObjectFilter {
object_ids: Some(object_ids),
..Default::default()
};

Expand Down
67 changes: 16 additions & 51 deletions crates/sui-graphql-rpc/src/types/object.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1605,58 +1605,17 @@ pub(crate) async fn deserialize_move_struct(
fn objects_query(filter: &ObjectFilter, range: AvailableRange, page: &Page<Cursor>) -> RawQuery
where
{
if let Some(_) = &filter.object_ids {
// If both object IDs and object keys are specified, then we need to query in
// both historical and consistent views, and then union the results.
let ids_only_filter = ObjectFilter { ..filter.clone() };
let (id_query, id_bindings) = build_objects_query(
View::Consistent,
range,
page,
move |query| ids_only_filter.apply(query),
move |newer| newer,
)
.finish();

let keys_only_filter = ObjectFilter {
object_ids: None,
..filter.clone()
};
let (key_query, key_bindings) = build_objects_query(
View::Historical,
range,
page,
move |query| keys_only_filter.apply(query),
move |newer| newer,
)
.finish();

RawQuery::new(
format!(
"SELECT * FROM (({id_query}) UNION ALL ({key_query})) AS candidates",
id_query = id_query,
key_query = key_query,
),
id_bindings.into_iter().chain(key_bindings).collect(),
)
.order_by("object_id")
.limit(page.limit() as i64)
} else {
// Only one of object IDs or object keys is specified, or neither are specified.
let view = if !filter.has_filters() {
build_objects_query(
if !filter.has_filters() {
View::Historical
} else {
View::Consistent
};

build_objects_query(
view,
range,
page,
move |query| filter.apply(query),
move |newer| newer,
)
}
},
range,
page,
move |query| filter.apply(query),
move |newer| newer,
)
}

#[cfg(test)]
Expand Down Expand Up @@ -1735,7 +1694,13 @@ mod tests {
);

// No overlap
assert_eq!(f0.clone().intersect(f3.clone()), None);
assert_eq!(f2.clone().intersect(f3.clone()), None);
assert_eq!(
f0.clone().intersect(f3.clone()),
Some(ObjectFilter::default())
);
assert_eq!(
f2.clone().intersect(f3.clone()),
Some(ObjectFilter::default())
);
}
}

0 comments on commit 9d530b0

Please sign in to comment.