Skip to content

Commit

Permalink
馃悰 fix: find filters by field alias
Browse files Browse the repository at this point in the history
  • Loading branch information
0xE8551CCB committed Oct 8, 2019
1 parent 0692b6f commit 3773059
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 7 deletions.
2 changes: 1 addition & 1 deletion examples/todo/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ func main() {

printFullFields(&task)
printWithOnlyFields(&task, "Title", "SimpleUser")
printWithOnlyFields(&task, "ID", "User[ID,Notifications[ID],AnotherNotifications[Title]]", "SimpleUser")
printWithOnlyFields(&task, "ID", "User[id,Notifications[ID],AnotherNotifications[Title]]", "simple_user[id]")
printMany()
printWithExcludeFields(&task, "Description", "ID", "User[Name,Notifications[ID,Content],AnotherNotifications], SimpleUser")
fmt.Printf("elapsed: %.1f ms\n", time.Since(start).Seconds()*1000)
Expand Down
4 changes: 2 additions & 2 deletions field.go
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ func (f *schemaField) tagHasOption(opt string) bool {

func (f *schemaField) nestedOnlyNames(customFilters []*filterNode) (names []string) {
filterNames := extractFilterNodeNames(
customFilters, &extractOption{queryByParentName: f.Name()})
customFilters, &extractOption{queryByParentName: f.Name(), queryByParentNameAlias: f.alias})
if len(filterNames) > 0 {
return filterNames
} else {
Expand All @@ -197,7 +197,7 @@ func (f *schemaField) nestedOnlyNamesParsedFromTag() (names []string) {
func (f *schemaField) nestedExcludeNames(customFilters []*filterNode) []string {
fieldNames := extractFilterNodeNames(
customFilters,
&extractOption{ignoreNodeWithChildren: true, queryByParentName: f.Name()},
&extractOption{ignoreNodeWithChildren: true, queryByParentName: f.Name(), queryByParentNameAlias: f.alias},
)
if len(fieldNames) > 0 {
return fieldNames
Expand Down
8 changes: 7 additions & 1 deletion filter.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ func (node *filterNode) String() string {
type extractOption struct {
ignoreNodeWithChildren bool
queryByParentName string
queryByParentNameAlias string
}

func extractFilterNodeNames(nodes []*filterNode, opt *extractOption) []string {
Expand All @@ -44,7 +45,12 @@ func extractFilterNodeNames(nodes []*filterNode, opt *extractOption) []string {

names := make([]string, 0, len(nodes))
for _, n := range nodes {
if opt.queryByParentName != "" && n.Parent.Name != opt.queryByParentName {
var parentName string
if n.Parent != nil {
parentName = n.Parent.Name
}

if opt.queryByParentName != "" && parentName != opt.queryByParentName && parentName != opt.queryByParentNameAlias {
continue
}

Expand Down
14 changes: 11 additions & 3 deletions filter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,19 +21,27 @@ func TestExtractFilterNodeNames(t *testing.T) {
nodeE.Children = append(nodeE.Children, nodeF)

nodeG := &filterNode{Name: "G"}

nodeZ := &filterNode{Name: "z"}
nodeH := &filterNode{Name: "h", Parent: nodeZ}
nodeZ.Children = append(nodeZ.Children, nodeH)

nodesMap := map[int][]*filterNode{
0: {nodeA, nodeB, nodeE, nodeG},
1: {nodeC, nodeD, nodeF},
0: {nodeA, nodeB, nodeE, nodeG, nodeZ},
1: {nodeC, nodeD, nodeF, nodeH},
}

names := extractFilterNodeNames(nodesMap[0], &extractOption{ignoreNodeWithChildren: true})
asserter.Equal([]string{"A", "G"}, names)

names = extractFilterNodeNames(nodesMap[0], &extractOption{ignoreNodeWithChildren: false})
asserter.Equal([]string{"A", "B", "E", "G"}, names)
asserter.Equal([]string{"A", "B", "E", "G", "z"}, names)

names = extractFilterNodeNames(nodesMap[1], &extractOption{ignoreNodeWithChildren: false, queryByParentName: "B"})
asserter.Equal([]string{"C", "D"}, names)

names = extractFilterNodeNames(nodesMap[1], &extractOption{ignoreNodeWithChildren: false, queryByParentName: "Z", queryByParentNameAlias: "z"})
asserter.Equal([]string{"h"}, names)
}

func TestParseFilters(t *testing.T) {
Expand Down

0 comments on commit 3773059

Please sign in to comment.