entc/gen: filter duplicate ids when loading o2m/m2o edges

This commit is contained in:
Ariel Mashraki
2021-03-15 22:07:15 +02:00
committed by Ariel Mashraki
parent 0f7739d83b
commit 6ab0d01ea4
39 changed files with 286 additions and 163 deletions

View File

@@ -381,11 +381,14 @@ func (sq *StreetQuery) sqlAll(ctx context.Context) ([]*Street, error) {
ids := make([]int, 0, len(nodes))
nodeids := make(map[int][]*Street)
for i := range nodes {
fk := nodes[i].city_streets
if fk != nil {
ids = append(ids, *fk)
nodeids[*fk] = append(nodeids[*fk], nodes[i])
if nodes[i].city_streets == nil {
continue
}
fk := *nodes[i].city_streets
if _, ok := nodeids[fk]; !ok {
ids = append(ids, fk)
}
nodeids[fk] = append(nodeids[fk], nodes[i])
}
query.Where(city.IDIn(ids...))
neighbors, err := query.All(ctx)

View File

@@ -381,11 +381,14 @@ func (pq *PetQuery) sqlAll(ctx context.Context) ([]*Pet, error) {
ids := make([]int, 0, len(nodes))
nodeids := make(map[int][]*Pet)
for i := range nodes {
fk := nodes[i].user_pets
if fk != nil {
ids = append(ids, *fk)
nodeids[*fk] = append(nodeids[*fk], nodes[i])
if nodes[i].user_pets == nil {
continue
}
fk := *nodes[i].user_pets
if _, ok := nodeids[fk]; !ok {
ids = append(ids, fk)
}
nodeids[fk] = append(nodeids[fk], nodes[i])
}
query.Where(user.IDIn(ids...))
neighbors, err := query.All(ctx)

View File

@@ -417,11 +417,14 @@ func (nq *NodeQuery) sqlAll(ctx context.Context) ([]*Node, error) {
ids := make([]int, 0, len(nodes))
nodeids := make(map[int][]*Node)
for i := range nodes {
fk := nodes[i].node_children
if fk != nil {
ids = append(ids, *fk)
nodeids[*fk] = append(nodeids[*fk], nodes[i])
if nodes[i].node_children == nil {
continue
}
fk := *nodes[i].node_children
if _, ok := nodeids[fk]; !ok {
ids = append(ids, fk)
}
nodeids[fk] = append(nodeids[fk], nodes[i])
}
query.Where(node.IDIn(ids...))
neighbors, err := query.All(ctx)

View File

@@ -381,11 +381,14 @@ func (cq *CardQuery) sqlAll(ctx context.Context) ([]*Card, error) {
ids := make([]int, 0, len(nodes))
nodeids := make(map[int][]*Card)
for i := range nodes {
fk := nodes[i].user_card
if fk != nil {
ids = append(ids, *fk)
nodeids[*fk] = append(nodeids[*fk], nodes[i])
if nodes[i].user_card == nil {
continue
}
fk := *nodes[i].user_card
if _, ok := nodeids[fk]; !ok {
ids = append(ids, fk)
}
nodeids[fk] = append(nodeids[fk], nodes[i])
}
query.Where(user.IDIn(ids...))
neighbors, err := query.All(ctx)

View File

@@ -380,11 +380,14 @@ func (uq *UserQuery) sqlAll(ctx context.Context) ([]*User, error) {
ids := make([]int, 0, len(nodes))
nodeids := make(map[int][]*User)
for i := range nodes {
fk := nodes[i].user_spouse
if fk != nil {
ids = append(ids, *fk)
nodeids[*fk] = append(nodeids[*fk], nodes[i])
if nodes[i].user_spouse == nil {
continue
}
fk := *nodes[i].user_spouse
if _, ok := nodeids[fk]; !ok {
ids = append(ids, fk)
}
nodeids[fk] = append(nodeids[fk], nodes[i])
}
query.Where(user.IDIn(ids...))
neighbors, err := query.All(ctx)

View File

@@ -417,11 +417,14 @@ func (nq *NodeQuery) sqlAll(ctx context.Context) ([]*Node, error) {
ids := make([]int, 0, len(nodes))
nodeids := make(map[int][]*Node)
for i := range nodes {
fk := nodes[i].node_next
if fk != nil {
ids = append(ids, *fk)
nodeids[*fk] = append(nodeids[*fk], nodes[i])
if nodes[i].node_next == nil {
continue
}
fk := *nodes[i].node_next
if _, ok := nodeids[fk]; !ok {
ids = append(ids, fk)
}
nodeids[fk] = append(nodeids[fk], nodes[i])
}
query.Where(node.IDIn(ids...))
neighbors, err := query.All(ctx)

View File

@@ -425,11 +425,14 @@ func (gq *GroupQuery) sqlAll(ctx context.Context) ([]*Group, error) {
ids := make([]int, 0, len(nodes))
nodeids := make(map[int][]*Group)
for i := range nodes {
fk := nodes[i].group_tenant
if fk != nil {
ids = append(ids, *fk)
nodeids[*fk] = append(nodeids[*fk], nodes[i])
if nodes[i].group_tenant == nil {
continue
}
fk := *nodes[i].group_tenant
if _, ok := nodeids[fk]; !ok {
ids = append(ids, fk)
}
nodeids[fk] = append(nodeids[fk], nodes[i])
}
query.Where(tenant.IDIn(ids...))
neighbors, err := query.All(ctx)

View File

@@ -425,11 +425,14 @@ func (uq *UserQuery) sqlAll(ctx context.Context) ([]*User, error) {
ids := make([]int, 0, len(nodes))
nodeids := make(map[int][]*User)
for i := range nodes {
fk := nodes[i].user_tenant
if fk != nil {
ids = append(ids, *fk)
nodeids[*fk] = append(nodeids[*fk], nodes[i])
if nodes[i].user_tenant == nil {
continue
}
fk := *nodes[i].user_tenant
if _, ok := nodeids[fk]; !ok {
ids = append(ids, fk)
}
nodeids[fk] = append(nodeids[fk], nodes[i])
}
query.Where(tenant.IDIn(ids...))
neighbors, err := query.All(ctx)

View File

@@ -381,11 +381,14 @@ func (cq *CarQuery) sqlAll(ctx context.Context) ([]*Car, error) {
ids := make([]int, 0, len(nodes))
nodeids := make(map[int][]*Car)
for i := range nodes {
fk := nodes[i].user_cars
if fk != nil {
ids = append(ids, *fk)
nodeids[*fk] = append(nodeids[*fk], nodes[i])
if nodes[i].user_cars == nil {
continue
}
fk := *nodes[i].user_cars
if _, ok := nodeids[fk]; !ok {
ids = append(ids, fk)
}
nodeids[fk] = append(nodeids[fk], nodes[i])
}
query.Where(user.IDIn(ids...))
neighbors, err := query.All(ctx)

View File

@@ -482,11 +482,14 @@ func (gq *GroupQuery) sqlAll(ctx context.Context) ([]*Group, error) {
ids := make([]int, 0, len(nodes))
nodeids := make(map[int][]*Group)
for i := range nodes {
fk := nodes[i].group_admin
if fk != nil {
ids = append(ids, *fk)
nodeids[*fk] = append(nodeids[*fk], nodes[i])
if nodes[i].group_admin == nil {
continue
}
fk := *nodes[i].group_admin
if _, ok := nodeids[fk]; !ok {
ids = append(ids, fk)
}
nodeids[fk] = append(nodeids[fk], nodes[i])
}
query.Where(user.IDIn(ids...))
neighbors, err := query.All(ctx)

View File

@@ -482,11 +482,14 @@ func (pq *PetQuery) sqlAll(ctx context.Context) ([]*Pet, error) {
ids := make([]int, 0, len(nodes))
nodeids := make(map[int][]*Pet)
for i := range nodes {
fk := nodes[i].user_pets
if fk != nil {
ids = append(ids, *fk)
nodeids[*fk] = append(nodeids[*fk], nodes[i])
if nodes[i].user_pets == nil {
continue
}
fk := *nodes[i].user_pets
if _, ok := nodeids[fk]; !ok {
ids = append(ids, fk)
}
nodeids[fk] = append(nodeids[fk], nodes[i])
}
query.Where(user.IDIn(ids...))
neighbors, err := query.All(ctx)