(t *testing.T)
| 912 | } |
| 913 | |
| 914 | func TestOrderByNeighborsCount(t *testing.T) { |
| 915 | build := sql.Dialect(dialect.Postgres) |
| 916 | t1 := build.Table("users") |
| 917 | s := build.Select(t1.C("name")). |
| 918 | From(t1) |
| 919 | t.Run("O2M", func(t *testing.T) { |
| 920 | s := s.Clone() |
| 921 | OrderByNeighborsCount(s, |
| 922 | NewStep( |
| 923 | From("users", "id"), |
| 924 | To("pets", "owner_id"), |
| 925 | Edge(O2M, false, "pets", "owner_id"), |
| 926 | ), |
| 927 | sql.OrderDesc(), |
| 928 | sql.OrderAs("count_pets"), |
| 929 | ) |
| 930 | query, args := s.Query() |
| 931 | require.Empty(t, args) |
| 932 | require.Equal(t, `SELECT "users"."name" FROM "users" LEFT JOIN (SELECT "pets"."owner_id", COUNT(*) AS "count_pets" FROM "pets" GROUP BY "pets"."owner_id") AS "t1" ON "users"."id" = "t1"."owner_id" ORDER BY "t1"."count_pets" DESC NULLS LAST`, query) |
| 933 | }) |
| 934 | t.Run("O2M/Selected", func(t *testing.T) { |
| 935 | s := s.Clone() |
| 936 | OrderByNeighborsCount(s, |
| 937 | NewStep( |
| 938 | From("users", "id"), |
| 939 | To("pets", "owner_id"), |
| 940 | Edge(O2M, false, "pets", "owner_id"), |
| 941 | ), |
| 942 | sql.OrderDesc(), |
| 943 | sql.OrderSelectAs("count_pets"), |
| 944 | ) |
| 945 | query, args := s.Query() |
| 946 | require.Empty(t, args) |
| 947 | require.Equal(t, `SELECT "users"."name", "t1"."count_pets" FROM "users" LEFT JOIN (SELECT "pets"."owner_id", COUNT(*) AS "count_pets" FROM "pets" GROUP BY "pets"."owner_id") AS "t1" ON "users"."id" = "t1"."owner_id" ORDER BY "t1"."count_pets" DESC NULLS LAST`, query) |
| 948 | }) |
| 949 | t.Run("M2M", func(t *testing.T) { |
| 950 | s := s.Clone() |
| 951 | OrderByNeighborsCount(s, |
| 952 | NewStep( |
| 953 | From("users", "id"), |
| 954 | To("groups", "id"), |
| 955 | Edge(M2M, false, "user_groups", "user_id", "group_id"), |
| 956 | ), |
| 957 | ) |
| 958 | query, args := s.Query() |
| 959 | require.Empty(t, args) |
| 960 | require.Equal(t, `SELECT "users"."name" FROM "users" LEFT JOIN (SELECT "user_groups"."user_id", COUNT(*) AS "count_groups" FROM "user_groups" GROUP BY "user_groups"."user_id") AS "t1" ON "users"."id" = "t1"."user_id" ORDER BY "t1"."count_groups" NULLS FIRST`, query) |
| 961 | }) |
| 962 | // Zero or one. |
| 963 | t.Run("M2O", func(t *testing.T) { |
| 964 | s1, s2 := s.Clone(), s.Clone() |
| 965 | OrderByNeighborsCount(s1, |
| 966 | NewStep( |
| 967 | From("pets", "owner_id"), |
| 968 | To("users", "id"), |
| 969 | Edge(M2O, true, "pets", "owner_id"), |
| 970 | ), |
| 971 | ) |
nothing calls this directly
no test coverage detected
searching dependent graphs…