Skip to content

Commit

Permalink
added query block to return multiple query blocks (#51)
Browse files Browse the repository at this point in the history
  • Loading branch information
wildan2711 committed Jun 13, 2020
1 parent 7f55858 commit cff6ce5
Show file tree
Hide file tree
Showing 6 changed files with 328 additions and 94 deletions.
41 changes: 40 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@
- [Get by Filter](#get-by-filter)
- [Get by Query](#get-by-query)
- [Get by UID](#get-by-uid)
- [Custom Scanning Query Results](#custom-scanning-query-results)
- [Multiple Query Blocks](#multiple-query-blocks)
- [Delete Helper](#delete-helper)
- [Development](#development)

Expand Down Expand Up @@ -485,7 +487,7 @@ if err := tx.Get(&user).UID("0x9cd5").Node(); err != nil {
fmt.Println(user)
```

#### Scanning Query results
#### Custom Scanning Query results

You can alternatively specify a different destination for your query results, by passing it as a parameter to the `Node` or `Nodes`.

Expand All @@ -505,6 +507,43 @@ err := tx.Get(&User{}). // User here is only to specify the node type
fmt.Println(result.Valid)
```

#### Multiple Query Blocks

You can specify [multiple query blocks](https://dgraph.io/docs/query-language/#multiple-query-blocks), by passing multiple `Query` objects into `tx.Query`.

```go
tx := dgman.NewReadOnlyTxn(c)

type pagedResults struct {
Paged []*TestModel `json:"paged"`
PageInfo []struct {
Total int
}
}

result := &pagedResults{}

query := tx.
Query(
dgman.NewQuery().
As("result"). // sets a variable name to the root query
Var(). // sets the query as a var, making it not returned in the results
Type(&TestModel{}). // sets the node type to query by
Filter(`anyofterms(name, $name)`),
dgman.NewQuery().
Name("paged"). // query block name to be returned in the query
UID("result"). // uid from var
First(2).
Offset(2).
All(1),
dgman.NewQuery().
Name("pageInfo").
UID("result").
Query(`{ total: count(uid) }`),
).
Vars("getByName($name: string)", map[string]string{"$name": "wildan"}) // GraphQL query variables
```

### Delete Helper

#### Delete Nodes
Expand Down
4 changes: 2 additions & 2 deletions delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ func (d *Deleter) Node() (uids []string, err error) {
}

model := make(map[string]interface{})
if err := Node(result, &model); err != nil {
if err := d.q.node(result, &model); err != nil {
return nil, errors.Wrap(err, "parse query")
}

Expand All @@ -159,7 +159,7 @@ func (d *Deleter) Nodes() (uids []string, err error) {
}

var model []map[string]interface{}
if err := Nodes(result, &model); err != nil {
if err := d.q.nodes(result, &model); err != nil {
return nil, err
}

Expand Down
9 changes: 5 additions & 4 deletions delete_test.go
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
package dgman

import (
"encoding/json"
"testing"

"github.com/stretchr/testify/assert"
)

func TestTraverseUIDs(t *testing.T) {
queryResult := []byte(`{"data":[{"uid":"0x12","friends":[{"uid":"0x13","friends":[{"uid":"0x18","friends":[{"uid":"0x19"},{"uid":"0x20"}]}]},{"uid":"0x14"}]},{"uid":"0x15","friends":[{"uid":"0x16"},{"uid":"0x17"}]}]}`)
queryResult := []byte(`[{"uid":"0x12","friends":[{"uid":"0x13","friends":[{"uid":"0x18","friends":[{"uid":"0x19"},{"uid":"0x20"}]}]},{"uid":"0x14"}]},{"uid":"0x15","friends":[{"uid":"0x16"},{"uid":"0x17"}]}]`)

var model []map[string]interface{}
if err := Nodes(queryResult, &model); err != nil {
if err := json.Unmarshal(queryResult, &model); err != nil {
t.Error(err)
}

Expand All @@ -23,10 +24,10 @@ func TestTraverseUIDs(t *testing.T) {
}

func TestGenerateUidsJson(t *testing.T) {
queryResult := []byte(`{"data":[{"uid":"0x12","friends":[{"uid":"0x13","friends":[{"uid":"0x18","friends":[{"uid":"0x19"},{"uid":"0x20"}]}]},{"uid":"0x14"}]},{"uid":"0x15","friends":[{"uid":"0x16"},{"uid":"0x17"}]}]}`)
queryResult := []byte(`[{"uid":"0x12","friends":[{"uid":"0x13","friends":[{"uid":"0x18","friends":[{"uid":"0x19"},{"uid":"0x20"}]}]},{"uid":"0x14"}]},{"uid":"0x15","friends":[{"uid":"0x16"},{"uid":"0x17"}]}]`)

var model []map[string]interface{}
if err := Nodes(queryResult, &model); err != nil {
if err := json.Unmarshal(queryResult, &model); err != nil {
t.Error(err)
}

Expand Down

0 comments on commit cff6ce5

Please sign in to comment.