Skip to content

Commit

Permalink
Add support for col-level tt queries
Browse files Browse the repository at this point in the history
  • Loading branch information
AndrewSisley committed Nov 20, 2024
1 parent 41db415 commit d8d6839
Show file tree
Hide file tree
Showing 3 changed files with 172 additions and 5 deletions.
7 changes: 7 additions & 0 deletions internal/db/fetcher/versioned.go
Original file line number Diff line number Diff line change
Expand Up @@ -318,6 +318,13 @@ func (vf *VersionedFetcher) merge(c cid.Cid) error {

var mcrdt merklecrdt.MerkleCRDT
switch {
case block.Delta.IsCollection():
mcrdt = merklecrdt.NewMerkleCollection(
vf.store,
keys.NewCollectionSchemaVersionKey(vf.col.Description().SchemaVersionID, vf.col.Description().ID),
keys.NewHeadstoreColKey(vf.col.Description().RootID),
)

case block.Delta.IsComposite():
mcrdt = merklecrdt.NewMerkleCompositeDAG(
vf.store,
Expand Down
9 changes: 4 additions & 5 deletions internal/request/graphql/schema/descriptions.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,11 +73,10 @@ An optional set of docIDs for this field. Only documents with a docID
be ignored.
`
cidArgDescription string = `
An optional value that specifies the commit ID of a document to return.
This CID does not need to be the most recent for a document, if it
corresponds to an older version of a document the document will be returned
at the state it was in at the time of that commit. If a matching commit is
not found then an empty set will be returned.
An optional value that specifies the commit ID of a document or a branchable collection.
This CID does not need to be the most recent. If it corresponds to an older version
the document(s) will be returned at the state they were in at the time of that commit.
If a matching commit is not found then an empty set will be returned.
`
singleFieldFilterArgDescription string = `
An optional filter for this join, if the related record does
Expand Down
161 changes: 161 additions & 0 deletions tests/integration/query/simple/with_cid_branchable_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
// Copyright 2024 Democratized Data Foundation
//
// Use of this software is governed by the Business Source License
// included in the file licenses/BSL.txt.
//
// As of the Change Date specified in that file, in accordance with
// the Business Source License, use of this software will be governed
// by the Apache License, Version 2.0, included in the file
// licenses/APL.txt.

package simple

import (
"testing"

testUtils "github.com/sourcenetwork/defradb/tests/integration"
)

func TestQuerySimpleWithCidOfBranchableCollection_FirstCid(t *testing.T) {
test := testUtils.TestCase{
Actions: []any{
testUtils.SchemaUpdate{
Schema: `
type Users @branchable {
name: String
}
`,
},
testUtils.CreateDoc{
Doc: `{
"name": "Fred"
}`,
},
testUtils.UpdateDoc{
Doc: `{
"name": "Freddddd"
}`,
},
testUtils.CreateDoc{
Doc: `{
"name": "John"
}`,
},
testUtils.Request{
Request: `query {
Users (
cid: "bafyreiewwsnu2ld5qlntamdm77ayb7xtmxz3p5difvaaakaome7zbtpo4u"
) {
name
}
}`,
Results: map[string]any{
"Users": []map[string]any{
{
"name": "Fred",
},
},
},
},
},
}

testUtils.ExecuteTestCase(t, test)
}

func TestQuerySimpleWithCidOfBranchableCollection_MiddleCid(t *testing.T) {
test := testUtils.TestCase{
Actions: []any{
testUtils.SchemaUpdate{
Schema: `
type Users @branchable {
name: String
}
`,
},
testUtils.CreateDoc{
Doc: `{
"name": "Fred"
}`,
},
testUtils.UpdateDoc{
Doc: `{
"name": "Freddddd"
}`,
},
testUtils.CreateDoc{
Doc: `{
"name": "John"
}`,
},
testUtils.Request{
Request: `query {
Users (
cid: "bafyreifpamlyhcbriztgbhds5ctgi5rm6w5wcar2py7246lo6j5v7iusxm"
) {
name
}
}`,
Results: map[string]any{
"Users": []map[string]any{
{
"name": "Freddddd",
},
},
},
},
},
}

testUtils.ExecuteTestCase(t, test)
}

func TestQuerySimpleWithCidOfBranchableCollection_LastCid(t *testing.T) {
test := testUtils.TestCase{
Actions: []any{
testUtils.SchemaUpdate{
Schema: `
type Users @branchable {
name: String
}
`,
},
testUtils.CreateDoc{
Doc: `{
"name": "Fred"
}`,
},
testUtils.UpdateDoc{
Doc: `{
"name": "Freddddd"
}`,
},
testUtils.CreateDoc{
Doc: `{
"name": "John"
}`,
},
testUtils.Request{
Request: `query {
Users (
cid: "bafyreigmt6ytph32jjxts2bij7fkne5ntionldsnklp35vcamvvl2x3a5i"
) {
name
}
}`,
Results: map[string]any{
"Users": []map[string]any{
{
"name": "Freddddd",
},
{
"name": "John",
},
},
},
},
},
}

testUtils.ExecuteTestCase(t, test)
}

0 comments on commit d8d6839

Please sign in to comment.