MCPcopy
hub / github.com/ent/ent / TestLimitNeighbors

Function TestLimitNeighbors

dialect/sql/sqlgraph/graph_test.go:2721–2746  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

2719}
2720
2721func TestLimitNeighbors(t *testing.T) {
2722 t.Run("O2M", func(t *testing.T) {
2723 const fk = "author_id"
2724 // Authors load their posts.
2725 s := sql.Select(fk, "id").From(sql.Table("posts"))
2726 LimitNeighbors(fk, 2)(s)
2727 query, args := s.Query()
2728 require.Equal(t,
2729 "WITH `src_query` AS (SELECT `author_id`, `id` FROM `posts`), `limited_query` AS (SELECT *, (ROW_NUMBER() OVER (PARTITION BY `author_id` ORDER BY `id`)) AS `row_number` FROM `src_query`) SELECT `author_id`, `id` FROM `limited_query` AS `posts` WHERE `posts`.`row_number` <= ?",
2730 query,
2731 )
2732 require.Equal(t, []any{2}, args)
2733 })
2734 t.Run("M2M", func(t *testing.T) {
2735 const fk = "user_id"
2736 edgeT, neighborsT := sql.Table("user_groups"), sql.Table("groups")
2737 s := sql.Select(fk, "id", "name").From(neighborsT).Join(edgeT).On(neighborsT.C("id"), edgeT.C("group_id"))
2738 LimitNeighbors(fk, 1, sql.ExprFunc(func(b *sql.Builder) { b.Ident("updated_at") }))(s)
2739 query, args := s.Query()
2740 require.Equal(t,
2741 "WITH `src_query` AS (SELECT `user_id`, `id`, `name` FROM `groups` JOIN `user_groups` AS `t1` ON `groups`.`id` = `t1`.`group_id`), `limited_query` AS (SELECT *, (ROW_NUMBER() OVER (PARTITION BY `user_id` ORDER BY `updated_at`)) AS `row_number` FROM `src_query`) SELECT `user_id`, `id`, `name` FROM `limited_query` AS `groups` WHERE `groups`.`row_number` <= ?",
2742 query,
2743 )
2744 require.Equal(t, []any{1}, args)
2745 })
2746}
2747
2748func escape(query string) string {
2749 rows := strings.Split(query, "\n")

Callers

nothing calls this directly

Calls 11

SelectFunction · 0.92
TableFunction · 0.92
ExprFuncFunction · 0.92
LimitNeighborsFunction · 0.85
RunMethod · 0.80
OnMethod · 0.80
IdentMethod · 0.80
QueryMethod · 0.65
CMethod · 0.65
FromMethod · 0.45
JoinMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…