Skip to content

Commit

Permalink
Jrm/optimise query (#3677)
Browse files Browse the repository at this point in the history
* Optimised large queries

* fix mistake
  • Loading branch information
JR-Morgan authored Jan 17, 2025
1 parent a830975 commit 2176e5e
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 58 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@ public async Task<string> SendCommitObj(
name = branchName,
description = "This branch holds the comprehensive reports generated by Speckle"
};
var branch = await client.BranchGet(streamId, branchName);
var branch = await client.BranchGet(streamId, branchName, 0);
if (branch == null)
{
await client.BranchCreate(branchInput);
Expand Down
2 changes: 1 addition & 1 deletion ConnectorDynamo/ConnectorDynamo/ReceiveNode/Receive.cs
Original file line number Diff line number Diff line change
Expand Up @@ -498,7 +498,7 @@ private void CheckIfBehind()

try
{
var branches = Client.StreamGetBranches(Stream.StreamId).Result;
var branches = Client.StreamGetBranches(Stream.StreamId, commitsLimit: 1).Result;
var branchName = string.IsNullOrEmpty(Stream.BranchName) ? "main" : Stream.BranchName;
var mainBranch = branches.FirstOrDefault(b => b.name == branchName);
if (mainBranch == null || !mainBranch.commits.items.Any())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,38 +53,61 @@ public async Task<List<Branch>> StreamGetBranches(
CancellationToken cancellationToken = default
)
{
//language=graphql
const string QUERY = """
query Stream ($streamId: String!, $branchesLimit: Int!, $commitsLimit: Int!, $includeCommits: Boolean!) {
stream(id: $streamId) {
branches(limit: $branchesLimit) {
items {
id
name
description
commits (limit: $commitsLimit) @include(if: $includeCommits) {
totalCount
cursor
items {
id
referencedObject
sourceApplication
message
authorName
authorId
parents
createdAt
}
}
}
}
}
}
""";
var request = new GraphQLRequest
{
Query =
$@"query Stream ($streamId: String!) {{
stream(id: $streamId) {{
branches(limit: {branchesLimit}) {{
items {{
id
name
description
commits (limit: {commitsLimit}) {{
totalCount
cursor
items {{
id
referencedObject
sourceApplication
message
authorName
authorId
branchName
parents
createdAt
}}
}}
}}
}}
}}
}}",
Variables = new { streamId }
Query = QUERY,
Variables = new
{
streamId,
branchesLimit,
commitsLimit,
includeCommits = commitsLimit > 0,
}
};
var res = await ExecuteGraphQLRequest<StreamData>(request, cancellationToken).ConfigureAwait(false);

//faster than making the server query for it for every single commit...
foreach (var branch in res.stream.branches?.items)
{
if (branch.commits?.items is null)
{
continue;
}

foreach (var commit in branch.commits.items)
{
commit.branchName = branch.name;
}
}

return res.stream.branches.items;
}

Expand Down Expand Up @@ -126,38 +149,55 @@ public async Task<Branch> BranchGet(
CancellationToken cancellationToken = default
)
{
//language=graphql
const string QUERY = """
query Stream($streamId: String!, $branchName: String!, $commitsLimit: Int!, $includeCommits: Boolean!) {
stream(id: $streamId) {
branch(name: $branchName){
id,
name,
description,
commits (limit: $commitsLimit) @include(if: $includeCommits) {
totalCount,
cursor,
items {
id,
referencedObject,
sourceApplication,
totalChildrenCount,
message,
authorName,
authorId,
parents,
createdAt
}
}
}
}
}
""";

var request = new GraphQLRequest
{
Query =
$@"query Stream($streamId: String!, $branchName: String!) {{
stream(id: $streamId) {{
branch(name: $branchName){{
id,
name,
description,
commits (limit: {commitsLimit}) {{
totalCount,
cursor,
items {{
id,
referencedObject,
sourceApplication,
totalChildrenCount,
message,
authorName,
authorId,
branchName,
parents,
createdAt
}}
}}
}}
}}
}}",
Variables = new { streamId, branchName }
Query = QUERY,
Variables = new
{
streamId,
branchName,
commitsLimit,
includeCommits = commitsLimit > 0,
}
};

var res = await ExecuteGraphQLRequest<StreamData>(request, cancellationToken).ConfigureAwait(false);
var branch = res.stream.branch;

//faster than making the server query for it for every single commit...
foreach (var commit in branch.commits.items)
{
commit.branchName = branch.name;
}

return res.stream.branch;
}

Expand Down
2 changes: 1 addition & 1 deletion Core/Core/Credentials/StreamWrapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -417,7 +417,7 @@ public async Task ValidateWithAccount(Account acc)
// Check if the branch exists
if (Type == StreamWrapperType.Branch)
{
var branch = await client.BranchGet(StreamId, BranchName!, 1).ConfigureAwait(false);
var branch = await client.BranchGet(StreamId, BranchName!, 0).ConfigureAwait(false);
if (branch == null)
{
throw new SpeckleException(
Expand Down

0 comments on commit 2176e5e

Please sign in to comment.