mirror of
https://github.com/ent/ent.git
synced 2026-05-24 09:31:56 +03:00
dialect/sql: add neighbors function (#140)
Summary: Pull Request resolved: https://github.com/facebookincubator/ent/pull/140 This part of the effort of moving logic from Go templates to shared packages. Next diffs will migrate the neighbors-set and predicates as well. Dedicated tests for `sql/dialect/graph.go` will be added in a follow-up diff. Reviewed By: alexsn Differential Revision: D18304531 fbshipit-source-id: 93e9cf2636b5b4525eb27305bd2708122cfd6e40
This commit is contained in:
committed by
Facebook Github Bot
parent
a5d6a9e8b8
commit
930a17b767
@@ -170,9 +170,17 @@ func (c *CityClient) GetX(ctx context.Context, id int) *City {
|
||||
func (c *CityClient) QueryStreets(ci *City) *StreetQuery {
|
||||
query := &StreetQuery{config: c.config}
|
||||
id := ci.ID
|
||||
builder := sql.Dialect(ci.driver.Dialect())
|
||||
query.sql = builder.Select().From(builder.Table(street.Table)).
|
||||
Where(sql.EQ(city.StreetsColumn, id))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = city.Table
|
||||
step.From.Column = city.FieldID
|
||||
step.To.Table = street.Table
|
||||
step.To.Column = street.FieldID
|
||||
step.Edge.Rel = sql.O2M
|
||||
step.Edge.Inverse = false
|
||||
step.Edge.Table = city.StreetsTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, city.StreetsColumn)
|
||||
query.sql = sql.Neighbors(ci.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
@@ -245,12 +253,17 @@ func (c *StreetClient) GetX(ctx context.Context, id int) *Street {
|
||||
func (c *StreetClient) QueryCity(s *Street) *CityQuery {
|
||||
query := &CityQuery{config: c.config}
|
||||
id := s.ID
|
||||
builder := sql.Dialect(s.driver.Dialect())
|
||||
t1 := builder.Table(city.Table)
|
||||
t2 := builder.Select(street.CityColumn).
|
||||
From(builder.Table(street.CityTable)).
|
||||
Where(sql.EQ(street.FieldID, id))
|
||||
query.sql = builder.Select().From(t1).Join(t2).On(t1.C(city.FieldID), t2.C(street.CityColumn))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = street.Table
|
||||
step.From.Column = street.FieldID
|
||||
step.To.Table = city.Table
|
||||
step.To.Column = city.FieldID
|
||||
step.Edge.Rel = sql.M2O
|
||||
step.Edge.Inverse = true
|
||||
step.Edge.Table = street.CityTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, street.CityColumn)
|
||||
query.sql = sql.Neighbors(s.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
|
||||
@@ -170,19 +170,17 @@ func (c *GroupClient) GetX(ctx context.Context, id int) *Group {
|
||||
func (c *GroupClient) QueryUsers(gr *Group) *UserQuery {
|
||||
query := &UserQuery{config: c.config}
|
||||
id := gr.ID
|
||||
builder := sql.Dialect(gr.driver.Dialect())
|
||||
t1 := builder.Table(user.Table)
|
||||
t2 := builder.Table(group.Table)
|
||||
t3 := builder.Table(group.UsersTable)
|
||||
t4 := builder.Select(t3.C(group.UsersPrimaryKey[1])).
|
||||
From(t3).
|
||||
Join(t2).
|
||||
On(t3.C(group.UsersPrimaryKey[0]), t2.C(group.FieldID)).
|
||||
Where(sql.EQ(t2.C(group.FieldID), id))
|
||||
query.sql = builder.Select().
|
||||
From(t1).
|
||||
Join(t4).
|
||||
On(t1.C(user.FieldID), t4.C(group.UsersPrimaryKey[1]))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = group.Table
|
||||
step.From.Column = group.FieldID
|
||||
step.To.Table = user.Table
|
||||
step.To.Column = user.FieldID
|
||||
step.Edge.Rel = sql.M2M
|
||||
step.Edge.Inverse = false
|
||||
step.Edge.Table = group.UsersTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, group.UsersPrimaryKey...)
|
||||
query.sql = sql.Neighbors(gr.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
@@ -255,19 +253,17 @@ func (c *UserClient) GetX(ctx context.Context, id int) *User {
|
||||
func (c *UserClient) QueryGroups(u *User) *GroupQuery {
|
||||
query := &GroupQuery{config: c.config}
|
||||
id := u.ID
|
||||
builder := sql.Dialect(u.driver.Dialect())
|
||||
t1 := builder.Table(group.Table)
|
||||
t2 := builder.Table(user.Table)
|
||||
t3 := builder.Table(user.GroupsTable)
|
||||
t4 := builder.Select(t3.C(user.GroupsPrimaryKey[0])).
|
||||
From(t3).
|
||||
Join(t2).
|
||||
On(t3.C(user.GroupsPrimaryKey[1]), t2.C(user.FieldID)).
|
||||
Where(sql.EQ(t2.C(user.FieldID), id))
|
||||
query.sql = builder.Select().
|
||||
From(t1).
|
||||
Join(t4).
|
||||
On(t1.C(group.FieldID), t4.C(user.GroupsPrimaryKey[0]))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = user.Table
|
||||
step.From.Column = user.FieldID
|
||||
step.To.Table = group.Table
|
||||
step.To.Column = group.FieldID
|
||||
step.Edge.Rel = sql.M2M
|
||||
step.Edge.Inverse = true
|
||||
step.Edge.Table = user.GroupsTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, user.GroupsPrimaryKey...)
|
||||
query.sql = sql.Neighbors(u.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
|
||||
@@ -164,19 +164,17 @@ func (c *UserClient) GetX(ctx context.Context, id int) *User {
|
||||
func (c *UserClient) QueryFriends(u *User) *UserQuery {
|
||||
query := &UserQuery{config: c.config}
|
||||
id := u.ID
|
||||
builder := sql.Dialect(u.driver.Dialect())
|
||||
t1 := builder.Table(user.Table)
|
||||
t2 := builder.Table(user.Table)
|
||||
t3 := builder.Table(user.FriendsTable)
|
||||
t4 := builder.Select(t3.C(user.FriendsPrimaryKey[1])).
|
||||
From(t3).
|
||||
Join(t2).
|
||||
On(t3.C(user.FriendsPrimaryKey[0]), t2.C(user.FieldID)).
|
||||
Where(sql.EQ(t2.C(user.FieldID), id))
|
||||
query.sql = builder.Select().
|
||||
From(t1).
|
||||
Join(t4).
|
||||
On(t1.C(user.FieldID), t4.C(user.FriendsPrimaryKey[1]))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = user.Table
|
||||
step.From.Column = user.FieldID
|
||||
step.To.Table = user.Table
|
||||
step.To.Column = user.FieldID
|
||||
step.Edge.Rel = sql.M2M
|
||||
step.Edge.Inverse = false
|
||||
step.Edge.Table = user.FriendsTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, user.FriendsPrimaryKey...)
|
||||
query.sql = sql.Neighbors(u.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
|
||||
@@ -164,19 +164,17 @@ func (c *UserClient) GetX(ctx context.Context, id int) *User {
|
||||
func (c *UserClient) QueryFollowers(u *User) *UserQuery {
|
||||
query := &UserQuery{config: c.config}
|
||||
id := u.ID
|
||||
builder := sql.Dialect(u.driver.Dialect())
|
||||
t1 := builder.Table(user.Table)
|
||||
t2 := builder.Table(user.Table)
|
||||
t3 := builder.Table(user.FollowersTable)
|
||||
t4 := builder.Select(t3.C(user.FollowersPrimaryKey[0])).
|
||||
From(t3).
|
||||
Join(t2).
|
||||
On(t3.C(user.FollowersPrimaryKey[1]), t2.C(user.FieldID)).
|
||||
Where(sql.EQ(t2.C(user.FieldID), id))
|
||||
query.sql = builder.Select().
|
||||
From(t1).
|
||||
Join(t4).
|
||||
On(t1.C(user.FieldID), t4.C(user.FollowersPrimaryKey[0]))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = user.Table
|
||||
step.From.Column = user.FieldID
|
||||
step.To.Table = user.Table
|
||||
step.To.Column = user.FieldID
|
||||
step.Edge.Rel = sql.M2M
|
||||
step.Edge.Inverse = true
|
||||
step.Edge.Table = user.FollowersTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, user.FollowersPrimaryKey...)
|
||||
query.sql = sql.Neighbors(u.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
@@ -185,19 +183,17 @@ func (c *UserClient) QueryFollowers(u *User) *UserQuery {
|
||||
func (c *UserClient) QueryFollowing(u *User) *UserQuery {
|
||||
query := &UserQuery{config: c.config}
|
||||
id := u.ID
|
||||
builder := sql.Dialect(u.driver.Dialect())
|
||||
t1 := builder.Table(user.Table)
|
||||
t2 := builder.Table(user.Table)
|
||||
t3 := builder.Table(user.FollowingTable)
|
||||
t4 := builder.Select(t3.C(user.FollowingPrimaryKey[1])).
|
||||
From(t3).
|
||||
Join(t2).
|
||||
On(t3.C(user.FollowingPrimaryKey[0]), t2.C(user.FieldID)).
|
||||
Where(sql.EQ(t2.C(user.FieldID), id))
|
||||
query.sql = builder.Select().
|
||||
From(t1).
|
||||
Join(t4).
|
||||
On(t1.C(user.FieldID), t4.C(user.FollowingPrimaryKey[1]))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = user.Table
|
||||
step.From.Column = user.FieldID
|
||||
step.To.Table = user.Table
|
||||
step.To.Column = user.FieldID
|
||||
step.Edge.Rel = sql.M2M
|
||||
step.Edge.Inverse = false
|
||||
step.Edge.Table = user.FollowingTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, user.FollowingPrimaryKey...)
|
||||
query.sql = sql.Neighbors(u.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
|
||||
@@ -170,12 +170,17 @@ func (c *PetClient) GetX(ctx context.Context, id int) *Pet {
|
||||
func (c *PetClient) QueryOwner(pe *Pet) *UserQuery {
|
||||
query := &UserQuery{config: c.config}
|
||||
id := pe.ID
|
||||
builder := sql.Dialect(pe.driver.Dialect())
|
||||
t1 := builder.Table(user.Table)
|
||||
t2 := builder.Select(pet.OwnerColumn).
|
||||
From(builder.Table(pet.OwnerTable)).
|
||||
Where(sql.EQ(pet.FieldID, id))
|
||||
query.sql = builder.Select().From(t1).Join(t2).On(t1.C(user.FieldID), t2.C(pet.OwnerColumn))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = pet.Table
|
||||
step.From.Column = pet.FieldID
|
||||
step.To.Table = user.Table
|
||||
step.To.Column = user.FieldID
|
||||
step.Edge.Rel = sql.M2O
|
||||
step.Edge.Inverse = true
|
||||
step.Edge.Table = pet.OwnerTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, pet.OwnerColumn)
|
||||
query.sql = sql.Neighbors(pe.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
@@ -248,9 +253,17 @@ func (c *UserClient) GetX(ctx context.Context, id int) *User {
|
||||
func (c *UserClient) QueryPets(u *User) *PetQuery {
|
||||
query := &PetQuery{config: c.config}
|
||||
id := u.ID
|
||||
builder := sql.Dialect(u.driver.Dialect())
|
||||
query.sql = builder.Select().From(builder.Table(pet.Table)).
|
||||
Where(sql.EQ(user.PetsColumn, id))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = user.Table
|
||||
step.From.Column = user.FieldID
|
||||
step.To.Table = pet.Table
|
||||
step.To.Column = pet.FieldID
|
||||
step.Edge.Rel = sql.O2M
|
||||
step.Edge.Inverse = false
|
||||
step.Edge.Table = user.PetsTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, user.PetsColumn)
|
||||
query.sql = sql.Neighbors(u.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
|
||||
@@ -164,12 +164,17 @@ func (c *NodeClient) GetX(ctx context.Context, id int) *Node {
|
||||
func (c *NodeClient) QueryParent(n *Node) *NodeQuery {
|
||||
query := &NodeQuery{config: c.config}
|
||||
id := n.ID
|
||||
builder := sql.Dialect(n.driver.Dialect())
|
||||
t1 := builder.Table(node.Table)
|
||||
t2 := builder.Select(node.ParentColumn).
|
||||
From(builder.Table(node.ParentTable)).
|
||||
Where(sql.EQ(node.FieldID, id))
|
||||
query.sql = builder.Select().From(t1).Join(t2).On(t1.C(node.FieldID), t2.C(node.ParentColumn))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = node.Table
|
||||
step.From.Column = node.FieldID
|
||||
step.To.Table = node.Table
|
||||
step.To.Column = node.FieldID
|
||||
step.Edge.Rel = sql.M2O
|
||||
step.Edge.Inverse = true
|
||||
step.Edge.Table = node.ParentTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, node.ParentColumn)
|
||||
query.sql = sql.Neighbors(n.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
@@ -178,9 +183,17 @@ func (c *NodeClient) QueryParent(n *Node) *NodeQuery {
|
||||
func (c *NodeClient) QueryChildren(n *Node) *NodeQuery {
|
||||
query := &NodeQuery{config: c.config}
|
||||
id := n.ID
|
||||
builder := sql.Dialect(n.driver.Dialect())
|
||||
query.sql = builder.Select().From(builder.Table(node.Table)).
|
||||
Where(sql.EQ(node.ChildrenColumn, id))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = node.Table
|
||||
step.From.Column = node.FieldID
|
||||
step.To.Table = node.Table
|
||||
step.To.Column = node.FieldID
|
||||
step.Edge.Rel = sql.O2M
|
||||
step.Edge.Inverse = false
|
||||
step.Edge.Table = node.ChildrenTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, node.ChildrenColumn)
|
||||
query.sql = sql.Neighbors(n.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
|
||||
@@ -170,12 +170,17 @@ func (c *CardClient) GetX(ctx context.Context, id int) *Card {
|
||||
func (c *CardClient) QueryOwner(ca *Card) *UserQuery {
|
||||
query := &UserQuery{config: c.config}
|
||||
id := ca.ID
|
||||
builder := sql.Dialect(ca.driver.Dialect())
|
||||
t1 := builder.Table(user.Table)
|
||||
t2 := builder.Select(card.OwnerColumn).
|
||||
From(builder.Table(card.OwnerTable)).
|
||||
Where(sql.EQ(card.FieldID, id))
|
||||
query.sql = builder.Select().From(t1).Join(t2).On(t1.C(user.FieldID), t2.C(card.OwnerColumn))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = card.Table
|
||||
step.From.Column = card.FieldID
|
||||
step.To.Table = user.Table
|
||||
step.To.Column = user.FieldID
|
||||
step.Edge.Rel = sql.O2O
|
||||
step.Edge.Inverse = true
|
||||
step.Edge.Table = card.OwnerTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, card.OwnerColumn)
|
||||
query.sql = sql.Neighbors(ca.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
@@ -248,9 +253,17 @@ func (c *UserClient) GetX(ctx context.Context, id int) *User {
|
||||
func (c *UserClient) QueryCard(u *User) *CardQuery {
|
||||
query := &CardQuery{config: c.config}
|
||||
id := u.ID
|
||||
builder := sql.Dialect(u.driver.Dialect())
|
||||
query.sql = builder.Select().From(builder.Table(card.Table)).
|
||||
Where(sql.EQ(user.CardColumn, id))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = user.Table
|
||||
step.From.Column = user.FieldID
|
||||
step.To.Table = card.Table
|
||||
step.To.Column = card.FieldID
|
||||
step.Edge.Rel = sql.O2O
|
||||
step.Edge.Inverse = false
|
||||
step.Edge.Table = user.CardTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, user.CardColumn)
|
||||
query.sql = sql.Neighbors(u.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
|
||||
@@ -164,9 +164,17 @@ func (c *UserClient) GetX(ctx context.Context, id int) *User {
|
||||
func (c *UserClient) QuerySpouse(u *User) *UserQuery {
|
||||
query := &UserQuery{config: c.config}
|
||||
id := u.ID
|
||||
builder := sql.Dialect(u.driver.Dialect())
|
||||
query.sql = builder.Select().From(builder.Table(user.Table)).
|
||||
Where(sql.EQ(user.SpouseColumn, id))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = user.Table
|
||||
step.From.Column = user.FieldID
|
||||
step.To.Table = user.Table
|
||||
step.To.Column = user.FieldID
|
||||
step.Edge.Rel = sql.O2O
|
||||
step.Edge.Inverse = false
|
||||
step.Edge.Table = user.SpouseTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, user.SpouseColumn)
|
||||
query.sql = sql.Neighbors(u.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
|
||||
@@ -164,12 +164,17 @@ func (c *NodeClient) GetX(ctx context.Context, id int) *Node {
|
||||
func (c *NodeClient) QueryPrev(n *Node) *NodeQuery {
|
||||
query := &NodeQuery{config: c.config}
|
||||
id := n.ID
|
||||
builder := sql.Dialect(n.driver.Dialect())
|
||||
t1 := builder.Table(node.Table)
|
||||
t2 := builder.Select(node.PrevColumn).
|
||||
From(builder.Table(node.PrevTable)).
|
||||
Where(sql.EQ(node.FieldID, id))
|
||||
query.sql = builder.Select().From(t1).Join(t2).On(t1.C(node.FieldID), t2.C(node.PrevColumn))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = node.Table
|
||||
step.From.Column = node.FieldID
|
||||
step.To.Table = node.Table
|
||||
step.To.Column = node.FieldID
|
||||
step.Edge.Rel = sql.O2O
|
||||
step.Edge.Inverse = true
|
||||
step.Edge.Table = node.PrevTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, node.PrevColumn)
|
||||
query.sql = sql.Neighbors(n.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
@@ -178,9 +183,17 @@ func (c *NodeClient) QueryPrev(n *Node) *NodeQuery {
|
||||
func (c *NodeClient) QueryNext(n *Node) *NodeQuery {
|
||||
query := &NodeQuery{config: c.config}
|
||||
id := n.ID
|
||||
builder := sql.Dialect(n.driver.Dialect())
|
||||
query.sql = builder.Select().From(builder.Table(node.Table)).
|
||||
Where(sql.EQ(node.NextColumn, id))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = node.Table
|
||||
step.From.Column = node.FieldID
|
||||
step.To.Table = node.Table
|
||||
step.To.Column = node.FieldID
|
||||
step.Edge.Rel = sql.O2O
|
||||
step.Edge.Inverse = false
|
||||
step.Edge.Table = node.NextTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, node.NextColumn)
|
||||
query.sql = sql.Neighbors(n.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
|
||||
@@ -176,12 +176,17 @@ func (c *CarClient) GetX(ctx context.Context, id int) *Car {
|
||||
func (c *CarClient) QueryOwner(ca *Car) *UserQuery {
|
||||
query := &UserQuery{config: c.config}
|
||||
id := ca.ID
|
||||
builder := sql.Dialect(ca.driver.Dialect())
|
||||
t1 := builder.Table(user.Table)
|
||||
t2 := builder.Select(car.OwnerColumn).
|
||||
From(builder.Table(car.OwnerTable)).
|
||||
Where(sql.EQ(car.FieldID, id))
|
||||
query.sql = builder.Select().From(t1).Join(t2).On(t1.C(user.FieldID), t2.C(car.OwnerColumn))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = car.Table
|
||||
step.From.Column = car.FieldID
|
||||
step.To.Table = user.Table
|
||||
step.To.Column = user.FieldID
|
||||
step.Edge.Rel = sql.M2O
|
||||
step.Edge.Inverse = true
|
||||
step.Edge.Table = car.OwnerTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, car.OwnerColumn)
|
||||
query.sql = sql.Neighbors(ca.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
@@ -254,19 +259,17 @@ func (c *GroupClient) GetX(ctx context.Context, id int) *Group {
|
||||
func (c *GroupClient) QueryUsers(gr *Group) *UserQuery {
|
||||
query := &UserQuery{config: c.config}
|
||||
id := gr.ID
|
||||
builder := sql.Dialect(gr.driver.Dialect())
|
||||
t1 := builder.Table(user.Table)
|
||||
t2 := builder.Table(group.Table)
|
||||
t3 := builder.Table(group.UsersTable)
|
||||
t4 := builder.Select(t3.C(group.UsersPrimaryKey[1])).
|
||||
From(t3).
|
||||
Join(t2).
|
||||
On(t3.C(group.UsersPrimaryKey[0]), t2.C(group.FieldID)).
|
||||
Where(sql.EQ(t2.C(group.FieldID), id))
|
||||
query.sql = builder.Select().
|
||||
From(t1).
|
||||
Join(t4).
|
||||
On(t1.C(user.FieldID), t4.C(group.UsersPrimaryKey[1]))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = group.Table
|
||||
step.From.Column = group.FieldID
|
||||
step.To.Table = user.Table
|
||||
step.To.Column = user.FieldID
|
||||
step.Edge.Rel = sql.M2M
|
||||
step.Edge.Inverse = false
|
||||
step.Edge.Table = group.UsersTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, group.UsersPrimaryKey...)
|
||||
query.sql = sql.Neighbors(gr.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
@@ -339,9 +342,17 @@ func (c *UserClient) GetX(ctx context.Context, id int) *User {
|
||||
func (c *UserClient) QueryCars(u *User) *CarQuery {
|
||||
query := &CarQuery{config: c.config}
|
||||
id := u.ID
|
||||
builder := sql.Dialect(u.driver.Dialect())
|
||||
query.sql = builder.Select().From(builder.Table(car.Table)).
|
||||
Where(sql.EQ(user.CarsColumn, id))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = user.Table
|
||||
step.From.Column = user.FieldID
|
||||
step.To.Table = car.Table
|
||||
step.To.Column = car.FieldID
|
||||
step.Edge.Rel = sql.O2M
|
||||
step.Edge.Inverse = false
|
||||
step.Edge.Table = user.CarsTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, user.CarsColumn)
|
||||
query.sql = sql.Neighbors(u.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
@@ -350,19 +361,17 @@ func (c *UserClient) QueryCars(u *User) *CarQuery {
|
||||
func (c *UserClient) QueryGroups(u *User) *GroupQuery {
|
||||
query := &GroupQuery{config: c.config}
|
||||
id := u.ID
|
||||
builder := sql.Dialect(u.driver.Dialect())
|
||||
t1 := builder.Table(group.Table)
|
||||
t2 := builder.Table(user.Table)
|
||||
t3 := builder.Table(user.GroupsTable)
|
||||
t4 := builder.Select(t3.C(user.GroupsPrimaryKey[0])).
|
||||
From(t3).
|
||||
Join(t2).
|
||||
On(t3.C(user.GroupsPrimaryKey[1]), t2.C(user.FieldID)).
|
||||
Where(sql.EQ(t2.C(user.FieldID), id))
|
||||
query.sql = builder.Select().
|
||||
From(t1).
|
||||
Join(t4).
|
||||
On(t1.C(group.FieldID), t4.C(user.GroupsPrimaryKey[0]))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = user.Table
|
||||
step.From.Column = user.FieldID
|
||||
step.To.Table = group.Table
|
||||
step.To.Column = group.FieldID
|
||||
step.Edge.Rel = sql.M2M
|
||||
step.Edge.Inverse = true
|
||||
step.Edge.Table = user.GroupsTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, user.GroupsPrimaryKey...)
|
||||
query.sql = sql.Neighbors(u.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
|
||||
@@ -176,19 +176,17 @@ func (c *GroupClient) GetX(ctx context.Context, id int) *Group {
|
||||
func (c *GroupClient) QueryUsers(gr *Group) *UserQuery {
|
||||
query := &UserQuery{config: c.config}
|
||||
id := gr.ID
|
||||
builder := sql.Dialect(gr.driver.Dialect())
|
||||
t1 := builder.Table(user.Table)
|
||||
t2 := builder.Table(group.Table)
|
||||
t3 := builder.Table(group.UsersTable)
|
||||
t4 := builder.Select(t3.C(group.UsersPrimaryKey[1])).
|
||||
From(t3).
|
||||
Join(t2).
|
||||
On(t3.C(group.UsersPrimaryKey[0]), t2.C(group.FieldID)).
|
||||
Where(sql.EQ(t2.C(group.FieldID), id))
|
||||
query.sql = builder.Select().
|
||||
From(t1).
|
||||
Join(t4).
|
||||
On(t1.C(user.FieldID), t4.C(group.UsersPrimaryKey[1]))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = group.Table
|
||||
step.From.Column = group.FieldID
|
||||
step.To.Table = user.Table
|
||||
step.To.Column = user.FieldID
|
||||
step.Edge.Rel = sql.M2M
|
||||
step.Edge.Inverse = false
|
||||
step.Edge.Table = group.UsersTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, group.UsersPrimaryKey...)
|
||||
query.sql = sql.Neighbors(gr.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
@@ -197,12 +195,17 @@ func (c *GroupClient) QueryUsers(gr *Group) *UserQuery {
|
||||
func (c *GroupClient) QueryAdmin(gr *Group) *UserQuery {
|
||||
query := &UserQuery{config: c.config}
|
||||
id := gr.ID
|
||||
builder := sql.Dialect(gr.driver.Dialect())
|
||||
t1 := builder.Table(user.Table)
|
||||
t2 := builder.Select(group.AdminColumn).
|
||||
From(builder.Table(group.AdminTable)).
|
||||
Where(sql.EQ(group.FieldID, id))
|
||||
query.sql = builder.Select().From(t1).Join(t2).On(t1.C(user.FieldID), t2.C(group.AdminColumn))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = group.Table
|
||||
step.From.Column = group.FieldID
|
||||
step.To.Table = user.Table
|
||||
step.To.Column = user.FieldID
|
||||
step.Edge.Rel = sql.M2O
|
||||
step.Edge.Inverse = false
|
||||
step.Edge.Table = group.AdminTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, group.AdminColumn)
|
||||
query.sql = sql.Neighbors(gr.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
@@ -275,19 +278,17 @@ func (c *PetClient) GetX(ctx context.Context, id int) *Pet {
|
||||
func (c *PetClient) QueryFriends(pe *Pet) *PetQuery {
|
||||
query := &PetQuery{config: c.config}
|
||||
id := pe.ID
|
||||
builder := sql.Dialect(pe.driver.Dialect())
|
||||
t1 := builder.Table(pet.Table)
|
||||
t2 := builder.Table(pet.Table)
|
||||
t3 := builder.Table(pet.FriendsTable)
|
||||
t4 := builder.Select(t3.C(pet.FriendsPrimaryKey[1])).
|
||||
From(t3).
|
||||
Join(t2).
|
||||
On(t3.C(pet.FriendsPrimaryKey[0]), t2.C(pet.FieldID)).
|
||||
Where(sql.EQ(t2.C(pet.FieldID), id))
|
||||
query.sql = builder.Select().
|
||||
From(t1).
|
||||
Join(t4).
|
||||
On(t1.C(pet.FieldID), t4.C(pet.FriendsPrimaryKey[1]))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = pet.Table
|
||||
step.From.Column = pet.FieldID
|
||||
step.To.Table = pet.Table
|
||||
step.To.Column = pet.FieldID
|
||||
step.Edge.Rel = sql.M2M
|
||||
step.Edge.Inverse = false
|
||||
step.Edge.Table = pet.FriendsTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, pet.FriendsPrimaryKey...)
|
||||
query.sql = sql.Neighbors(pe.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
@@ -296,12 +297,17 @@ func (c *PetClient) QueryFriends(pe *Pet) *PetQuery {
|
||||
func (c *PetClient) QueryOwner(pe *Pet) *UserQuery {
|
||||
query := &UserQuery{config: c.config}
|
||||
id := pe.ID
|
||||
builder := sql.Dialect(pe.driver.Dialect())
|
||||
t1 := builder.Table(user.Table)
|
||||
t2 := builder.Select(pet.OwnerColumn).
|
||||
From(builder.Table(pet.OwnerTable)).
|
||||
Where(sql.EQ(pet.FieldID, id))
|
||||
query.sql = builder.Select().From(t1).Join(t2).On(t1.C(user.FieldID), t2.C(pet.OwnerColumn))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = pet.Table
|
||||
step.From.Column = pet.FieldID
|
||||
step.To.Table = user.Table
|
||||
step.To.Column = user.FieldID
|
||||
step.Edge.Rel = sql.M2O
|
||||
step.Edge.Inverse = true
|
||||
step.Edge.Table = pet.OwnerTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, pet.OwnerColumn)
|
||||
query.sql = sql.Neighbors(pe.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
@@ -374,9 +380,17 @@ func (c *UserClient) GetX(ctx context.Context, id int) *User {
|
||||
func (c *UserClient) QueryPets(u *User) *PetQuery {
|
||||
query := &PetQuery{config: c.config}
|
||||
id := u.ID
|
||||
builder := sql.Dialect(u.driver.Dialect())
|
||||
query.sql = builder.Select().From(builder.Table(pet.Table)).
|
||||
Where(sql.EQ(user.PetsColumn, id))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = user.Table
|
||||
step.From.Column = user.FieldID
|
||||
step.To.Table = pet.Table
|
||||
step.To.Column = pet.FieldID
|
||||
step.Edge.Rel = sql.O2M
|
||||
step.Edge.Inverse = false
|
||||
step.Edge.Table = user.PetsTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, user.PetsColumn)
|
||||
query.sql = sql.Neighbors(u.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
@@ -385,19 +399,17 @@ func (c *UserClient) QueryPets(u *User) *PetQuery {
|
||||
func (c *UserClient) QueryFriends(u *User) *UserQuery {
|
||||
query := &UserQuery{config: c.config}
|
||||
id := u.ID
|
||||
builder := sql.Dialect(u.driver.Dialect())
|
||||
t1 := builder.Table(user.Table)
|
||||
t2 := builder.Table(user.Table)
|
||||
t3 := builder.Table(user.FriendsTable)
|
||||
t4 := builder.Select(t3.C(user.FriendsPrimaryKey[1])).
|
||||
From(t3).
|
||||
Join(t2).
|
||||
On(t3.C(user.FriendsPrimaryKey[0]), t2.C(user.FieldID)).
|
||||
Where(sql.EQ(t2.C(user.FieldID), id))
|
||||
query.sql = builder.Select().
|
||||
From(t1).
|
||||
Join(t4).
|
||||
On(t1.C(user.FieldID), t4.C(user.FriendsPrimaryKey[1]))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = user.Table
|
||||
step.From.Column = user.FieldID
|
||||
step.To.Table = user.Table
|
||||
step.To.Column = user.FieldID
|
||||
step.Edge.Rel = sql.M2M
|
||||
step.Edge.Inverse = false
|
||||
step.Edge.Table = user.FriendsTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, user.FriendsPrimaryKey...)
|
||||
query.sql = sql.Neighbors(u.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
@@ -406,19 +418,17 @@ func (c *UserClient) QueryFriends(u *User) *UserQuery {
|
||||
func (c *UserClient) QueryGroups(u *User) *GroupQuery {
|
||||
query := &GroupQuery{config: c.config}
|
||||
id := u.ID
|
||||
builder := sql.Dialect(u.driver.Dialect())
|
||||
t1 := builder.Table(group.Table)
|
||||
t2 := builder.Table(user.Table)
|
||||
t3 := builder.Table(user.GroupsTable)
|
||||
t4 := builder.Select(t3.C(user.GroupsPrimaryKey[0])).
|
||||
From(t3).
|
||||
Join(t2).
|
||||
On(t3.C(user.GroupsPrimaryKey[1]), t2.C(user.FieldID)).
|
||||
Where(sql.EQ(t2.C(user.FieldID), id))
|
||||
query.sql = builder.Select().
|
||||
From(t1).
|
||||
Join(t4).
|
||||
On(t1.C(group.FieldID), t4.C(user.GroupsPrimaryKey[0]))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = user.Table
|
||||
step.From.Column = user.FieldID
|
||||
step.To.Table = group.Table
|
||||
step.To.Column = group.FieldID
|
||||
step.Edge.Rel = sql.M2M
|
||||
step.Edge.Inverse = true
|
||||
step.Edge.Table = user.GroupsTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, user.GroupsPrimaryKey...)
|
||||
query.sql = sql.Neighbors(u.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
@@ -427,9 +437,17 @@ func (c *UserClient) QueryGroups(u *User) *GroupQuery {
|
||||
func (c *UserClient) QueryManage(u *User) *GroupQuery {
|
||||
query := &GroupQuery{config: c.config}
|
||||
id := u.ID
|
||||
builder := sql.Dialect(u.driver.Dialect())
|
||||
query.sql = builder.Select().From(builder.Table(group.Table)).
|
||||
Where(sql.EQ(user.ManageColumn, id))
|
||||
step := &sql.Step{}
|
||||
step.From.V = id
|
||||
step.From.Table = user.Table
|
||||
step.From.Column = user.FieldID
|
||||
step.To.Table = group.Table
|
||||
step.To.Column = group.FieldID
|
||||
step.Edge.Rel = sql.O2M
|
||||
step.Edge.Inverse = true
|
||||
step.Edge.Table = user.ManageTable
|
||||
step.Edge.Columns = append(step.Edge.Columns, user.ManageColumn)
|
||||
query.sql = sql.Neighbors(u.driver.Dialect(), step)
|
||||
|
||||
return query
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user