dialect/sql/sqlgraph: allow query edge fields with alias (#3470)

This commit is contained in:
Ariel Mashraki
2023-04-11 13:55:04 +03:00
committed by GitHub
parent 36cd6a8a8b
commit 44b8648720
3 changed files with 55 additions and 1 deletions

View File

@@ -447,7 +447,11 @@ func selectTerms(q *sql.Selector, ts []sql.OrderTerm) {
for _, t := range ts {
switch t := t.(type) {
case *sql.OrderFieldTerm:
q.AppendSelect(q.C(t.Field))
if t.As != "" {
q.AppendSelectAs(q.C(t.Field), t.As)
} else {
q.AppendSelect(q.C(t.Field))
}
case *sql.OrderExprTerm:
q.AppendSelectExprAs(t.Expr(q), t.As)
}

View File

@@ -1006,6 +1006,23 @@ func TestOrderByNeighborTerms(t *testing.T) {
require.Empty(t, args)
require.Equal(t, `SELECT "users"."name" FROM "users" LEFT JOIN (SELECT "workplace"."id", "workplace"."name" FROM "workplace") AS "t1" ON "users"."workplace_id" = "t1"."id" ORDER BY "t1"."name" NULLS FIRST`, query)
})
t.Run("M2O/SelectedAs", func(t *testing.T) {
s := s.Clone()
OrderByNeighborTerms(s,
NewStep(
From("users", "id"),
To("workplace", "id"),
Edge(M2O, true, "users", "workplace_id"),
),
sql.OrderByField(
"name",
sql.OrderSelectAs("workplace_name"),
),
)
query, args := s.Query()
require.Empty(t, args)
require.Equal(t, `SELECT "users"."name", "t1"."workplace_name" FROM "users" LEFT JOIN (SELECT "workplace"."id", "workplace"."name" AS "workplace_name" FROM "workplace") AS "t1" ON "users"."workplace_id" = "t1"."id" ORDER BY "t1"."workplace_name" NULLS FIRST`, query)
})
t.Run("M2O/NullsLast", func(t *testing.T) {
s := s.Clone()
OrderByNeighborTerms(s,