Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Are you running a service, using an SQL database, and want to support cursor sty

1. When a request comes in you call the library with a `query` object containing how many items to fetch (`first`/`last`), where to fetch from (`beforeCursor`/`afterCursor`) and the sort config (`sortFields`), along with a `setup` object.
2. The `runQuery` function you provided in `setup` is invoked, and provided with a `limit`, `whereFragmentBuilder` and `orderByFragmentBuilder`. You integrate these into your query, run it, and then return the results.
3. The library takes the results, and for each one it generates a unique `cursor`, which it then returns alongside each row. It also returns `hasNextPage`/`hasPreviousPage` properties.
3. The library takes the results, and for each one it generates a unique `cursor`, which it then returns alongside each row. It also returns `hasNextPage`/`hasPreviousPage`/`startCursor`/`endCursor` properties.

## What is cursor pagination?

Expand Down Expand Up @@ -109,7 +109,7 @@ The result is a promise that resolves with an object containing `edges` and `pag

`edges` is an array of objects containing `cursor` and `node` properties, where `cursor` is the generated cursor for the `node`, and `node` is the object you returned for the row from `runQuery`.

`pageInfo` contains `hasNextPage` and `hasPreviousPage` properties.
`pageInfo` contains `hasNextPage`/`hasPreviousPage`/`startCursor`/`endCursor` properties.

E.g.

Expand All @@ -128,7 +128,9 @@ E.g.
],
"pageInfo": {
"hasNextPage": true,
"hasPreviousPage": false
"hasPreviousPage": false,
"startCursor": "l1X624m67Z5aYShVOLrThEcP7c-ezmCc4C48Dvxtt98.x7zYjxX9VEWDA1KAnJii8zyw5DP_OdIRnSkXATGhwTy6Wf0SSkjdjq6pTl9qxhp87EI-85pUJW9Thz_A6F_8BzlgccgDV-hXWjEj3CsGl96tSaA-X0_qNWBu425Mt6t5j3wNSdk8sSArBQ",
"endCursor": "l1X624m67Z5aYShVOLrThEcP7c-ezmCc4C48Dvxtt98.x7zYjxX9VEWDA1KAnJii8zyw5DP_OdIRnSkXATGhwTy6Wf0SSkjdjq6pTl9qxhp87EI-85pUJW9Thz_A6F_8BzlgccgDV-hXWjEj3CsGl96tSaA-X0_qNWBu425Mt6t5j3wNSdk8sSArBQ"
}
}
```
Expand Down
192 changes: 192 additions & 0 deletions src/__snapshots__/sql-cursor-pagination.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -158,8 +158,10 @@ exports[`SqlCursorPagination > accepts a raw \`afterCursor\` 19`] = `
},
],
"pageInfo": {
"endCursor": "l1X624m67Z5aYShVOLrThEcP7c-ezmCc4C48Dvxtt98.x7zYjxX9VEWDA1KAnJii8zyw5DP_OdIRnSkXATGhwTy6Wf0SSkjdjq6pTl9qxhp87EI-85pUJW9Thz_A6F_8BzlgccgDV-hXWjEj3CsGl96tSaA-X0_qNWBu425Mt6t5j3wNSdk8sSArBQ",
"hasNextPage": true,
"hasPreviousPage": false,
"startCursor": "l1X624m67Z5aYShVOLrThEcP7c-ezmCc4C48Dvxtt98.x7zYjxX9VEWDA1KAnJii8zyw5DP_OdIRnSkXATGhwTy6Wf0SSkjdjq6pTl9qxhp87EI-85pUJW9Thz_A6F_8BzlgccgDV-hXWjEj3CsGl96tSaA-X0_qNWBu425Mt6t5j3wNSdk8sSArBQ",
},
Symbol(edgesWithRawCursor): [
{
Expand Down Expand Up @@ -344,8 +346,10 @@ exports[`SqlCursorPagination > accepts a raw \`beforeCursor\` 19`] = `
},
],
"pageInfo": {
"endCursor": "BF4zwhmn3i_aUO8fMntuvbJbVfFA77xjg4HWAbCqZ8s.TcLZaSN-rn8Zij9ZZWUQgs3n6YG4t0yuwODBikGsWGnL3td0c3YCwQt99Dml_IfofoAbMsPQTVoiu1gWjQ3cm4xA5Pm019RFK3kSzgV3TUHM7EjIkmTbnmjYlTsGT-xYHt8V5QmM",
"hasNextPage": false,
"hasPreviousPage": true,
"startCursor": "BF4zwhmn3i_aUO8fMntuvbJbVfFA77xjg4HWAbCqZ8s.TcLZaSN-rn8Zij9ZZWUQgs3n6YG4t0yuwODBikGsWGnL3td0c3YCwQt99Dml_IfofoAbMsPQTVoiu1gWjQ3cm4xA5Pm019RFK3kSzgV3TUHM7EjIkmTbnmjYlTsGT-xYHt8V5QmM",
},
Symbol(edgesWithRawCursor): [
{
Expand Down Expand Up @@ -778,6 +782,160 @@ exports[`SqlCursorPagination > errors > throws an error if raw cursor passed dir
}
`;

exports[`SqlCursorPagination > returns nothing when selecting after the last row 1`] = `Infinity`;

exports[`SqlCursorPagination > returns nothing when selecting after the last row 2`] = `
{
"bindings": [],
"sql": "\`first_name\` asc, \`last_name\` desc, \`id\` asc",
}
`;

exports[`SqlCursorPagination > returns nothing when selecting after the last row 3`] = `
{
"bindings": [],
"sql": "\`first_name\` asc, \`last_name\` desc, \`id\` asc",
}
`;

exports[`SqlCursorPagination > returns nothing when selecting after the last row 4`] = `
{
"bindings": [],
"sql": "\`first_name\` asc, \`last_name\` desc, \`id\` asc",
}
`;

exports[`SqlCursorPagination > returns nothing when selecting after the last row 5`] = `
{
"bindings": {},
"sql": "\`first_name\` asc, \`last_name\` desc, \`id\` asc",
}
`;

exports[`SqlCursorPagination > returns nothing when selecting after the last row 6`] = `
{
"bindings": [],
"sql": "1",
}
`;

exports[`SqlCursorPagination > returns nothing when selecting after the last row 7`] = `
{
"bindings": [],
"sql": "1",
}
`;

exports[`SqlCursorPagination > returns nothing when selecting after the last row 8`] = `
{
"bindings": [],
"sql": "1",
}
`;

exports[`SqlCursorPagination > returns nothing when selecting after the last row 9`] = `
{
"bindings": {},
"sql": "1",
}
`;

exports[`SqlCursorPagination > returns nothing when selecting after the last row 10`] = `2`;

exports[`SqlCursorPagination > returns nothing when selecting after the last row 11`] = `
{
"bindings": [],
"sql": "\`first_name\` asc, \`last_name\` desc, \`id\` asc",
}
`;

exports[`SqlCursorPagination > returns nothing when selecting after the last row 12`] = `
{
"bindings": [],
"sql": "\`first_name\` asc, \`last_name\` desc, \`id\` asc",
}
`;

exports[`SqlCursorPagination > returns nothing when selecting after the last row 13`] = `
{
"bindings": [],
"sql": "\`first_name\` asc, \`last_name\` desc, \`id\` asc",
}
`;

exports[`SqlCursorPagination > returns nothing when selecting after the last row 14`] = `
{
"bindings": {},
"sql": "\`first_name\` asc, \`last_name\` desc, \`id\` asc",
}
`;

exports[`SqlCursorPagination > returns nothing when selecting after the last row 15`] = `
{
"bindings": [
"Joseph",
"Joseph",
"Rhodes",
"Joseph",
"Rhodes",
"3",
],
"sql": "(((\`first_name\`>?) OR (\`first_name\`=? AND \`last_name\`<?) OR (\`first_name\`=? AND \`last_name\`=? AND \`id\`>?)))",
}
`;

exports[`SqlCursorPagination > returns nothing when selecting after the last row 16`] = `
{
"bindings": [
"Joseph",
"Joseph",
"Rhodes",
"Joseph",
"Rhodes",
"3",
],
"sql": "(((\`first_name\`>X) OR (\`first_name\`=X AND \`last_name\`<X) OR (\`first_name\`=X AND \`last_name\`=X AND \`id\`>X)))",
}
`;

exports[`SqlCursorPagination > returns nothing when selecting after the last row 17`] = `
{
"bindings": [
"Joseph",
"Joseph",
"Rhodes",
"Joseph",
"Rhodes",
"3",
],
"sql": "(((\`first_name\`>:0) OR (\`first_name\`=:1 AND \`last_name\`<:2) OR (\`first_name\`=:3 AND \`last_name\`=:4 AND \`id\`>:5)))",
}
`;

exports[`SqlCursorPagination > returns nothing when selecting after the last row 18`] = `
{
"bindings": {
":0": "Joseph",
":1": "Rhodes",
":2": "3",
},
"sql": "(((\`first_name\`>:0) OR (\`first_name\`=:0 AND \`last_name\`<:1) OR (\`first_name\`=:0 AND \`last_name\`=:1 AND \`id\`>:2)))",
}
`;

exports[`SqlCursorPagination > returns nothing when selecting after the last row 19`] = `
{
"edges": [],
"pageInfo": {
"endCursor": null,
"hasNextPage": false,
"hasPreviousPage": false,
"startCursor": null,
},
Symbol(edgesWithRawCursor): [],
}
`;

exports[`SqlCursorPagination > selects first 2 rows when selecting 2 before the third row 1`] = `Infinity`;

exports[`SqlCursorPagination > selects first 2 rows when selecting 2 before the third row 2`] = `
Expand Down Expand Up @@ -948,8 +1106,10 @@ exports[`SqlCursorPagination > selects first 2 rows when selecting 2 before the
},
],
"pageInfo": {
"endCursor": "Vl8ajMnWgEXNNlI9TZNEzkzZT5fPgD7qdP_dIQBcjlM.nGHtSUghlMl64TM8BjfzsV4r2v-SL_TlQyYbwTz0nSbnzpetCeSw81VKEzJhkakKw3yRUHxi6ijfpwZEvyprnzBJzZ1gh070hs4CqayTv-g_KwpwjHGWUxUBkKA5S40-_oaeVS8",
"hasNextPage": false,
"hasPreviousPage": false,
"startCursor": "gmWf5PUciGkaS3yuWvnYlCXra1kqrlsaGbbNJfxaF7I.IR52jEVV-zw_W7sRw5HtYQfTQhWbA4dLQw_stenfwgBDIAMZvc78sR5MEvBaLasXRLLv-Z0hxSu0HzZIczNC0zm-ltJ7NRLnQD09498KNFpdBeQBGnEJuskupvdR5TyG0l4Mjbg",
},
Symbol(edgesWithRawCursor): [
{
Expand Down Expand Up @@ -1166,8 +1326,10 @@ exports[`SqlCursorPagination > selects last 2 rows when selecting 2 after the th
},
],
"pageInfo": {
"endCursor": "hxq6aLoYC69MhcHj_7nAHEAOYBgQgK-lilrZZK8PlUQ.UMAa_PpPVW-1oDBX3oeT2v8hWra5lGac55zuXzuQPAXXrGcc4PnbIIZJWTcqzXAOOCzqPER9aVjPNQGXtFgCBw1vyZNIcFTVMsMnQyCuvr71p4VYGlQF7qgFIwtCUU7xF1tQA8zK",
"hasNextPage": false,
"hasPreviousPage": false,
"startCursor": "l1X624m67Z5aYShVOLrThEcP7c-ezmCc4C48Dvxtt98.x7zYjxX9VEWDA1KAnJii8zyw5DP_OdIRnSkXATGhwTy6Wf0SSkjdjq6pTl9qxhp87EI-85pUJW9Thz_A6F_8BzlgccgDV-hXWjEj3CsGl96tSaA-X0_qNWBu425Mt6t5j3wNSdk8sSArBQ",
},
Symbol(edgesWithRawCursor): [
{
Expand Down Expand Up @@ -1359,8 +1521,10 @@ exports[`SqlCursorPagination > selects rows 2-3 when requesting the last 2 of fi
},
],
"pageInfo": {
"endCursor": "BF4zwhmn3i_aUO8fMntuvbJbVfFA77xjg4HWAbCqZ8s.TcLZaSN-rn8Zij9ZZWUQgs3n6YG4t0yuwODBikGsWGnL3td0c3YCwQt99Dml_IfofoAbMsPQTVoiu1gWjQ3cm4xA5Pm019RFK3kSzgV3TUHM7EjIkmTbnmjYlTsGT-xYHt8V5QmM",
"hasNextPage": true,
"hasPreviousPage": true,
"startCursor": "Vl8ajMnWgEXNNlI9TZNEzkzZT5fPgD7qdP_dIQBcjlM.nGHtSUghlMl64TM8BjfzsV4r2v-SL_TlQyYbwTz0nSbnzpetCeSw81VKEzJhkakKw3yRUHxi6ijfpwZEvyprnzBJzZ1gh070hs4CqayTv-g_KwpwjHGWUxUBkKA5S40-_oaeVS8",
},
Symbol(edgesWithRawCursor): [
{
Expand Down Expand Up @@ -1552,8 +1716,10 @@ exports[`SqlCursorPagination > selects rows 4-5 when requesting the last 2 of fi
},
],
"pageInfo": {
"endCursor": "hxq6aLoYC69MhcHj_7nAHEAOYBgQgK-lilrZZK8PlUQ.UMAa_PpPVW-1oDBX3oeT2v8hWra5lGac55zuXzuQPAXXrGcc4PnbIIZJWTcqzXAOOCzqPER9aVjPNQGXtFgCBw1vyZNIcFTVMsMnQyCuvr71p4VYGlQF7qgFIwtCUU7xF1tQA8zK",
"hasNextPage": false,
"hasPreviousPage": true,
"startCursor": "l1X624m67Z5aYShVOLrThEcP7c-ezmCc4C48Dvxtt98.x7zYjxX9VEWDA1KAnJii8zyw5DP_OdIRnSkXATGhwTy6Wf0SSkjdjq6pTl9qxhp87EI-85pUJW9Thz_A6F_8BzlgccgDV-hXWjEj3CsGl96tSaA-X0_qNWBu425Mt6t5j3wNSdk8sSArBQ",
},
Symbol(edgesWithRawCursor): [
{
Expand Down Expand Up @@ -1699,8 +1865,10 @@ exports[`SqlCursorPagination > selects the first 3 items 10`] = `
},
],
"pageInfo": {
"endCursor": "BF4zwhmn3i_aUO8fMntuvbJbVfFA77xjg4HWAbCqZ8s.TcLZaSN-rn8Zij9ZZWUQgs3n6YG4t0yuwODBikGsWGnL3td0c3YCwQt99Dml_IfofoAbMsPQTVoiu1gWjQ3cm4xA5Pm019RFK3kSzgV3TUHM7EjIkmTbnmjYlTsGT-xYHt8V5QmM",
"hasNextPage": true,
"hasPreviousPage": false,
"startCursor": "gmWf5PUciGkaS3yuWvnYlCXra1kqrlsaGbbNJfxaF7I.IR52jEVV-zw_W7sRw5HtYQfTQhWbA4dLQw_stenfwgBDIAMZvc78sR5MEvBaLasXRLLv-Z0hxSu0HzZIczNC0zm-ltJ7NRLnQD09498KNFpdBeQBGnEJuskupvdR5TyG0l4Mjbg",
},
Symbol(edgesWithRawCursor): [
{
Expand Down Expand Up @@ -1890,8 +2058,10 @@ exports[`SqlCursorPagination > selects the first infinity (all) items 10`] = `
},
],
"pageInfo": {
"endCursor": "hxq6aLoYC69MhcHj_7nAHEAOYBgQgK-lilrZZK8PlUQ.UMAa_PpPVW-1oDBX3oeT2v8hWra5lGac55zuXzuQPAXXrGcc4PnbIIZJWTcqzXAOOCzqPER9aVjPNQGXtFgCBw1vyZNIcFTVMsMnQyCuvr71p4VYGlQF7qgFIwtCUU7xF1tQA8zK",
"hasNextPage": false,
"hasPreviousPage": false,
"startCursor": "gmWf5PUciGkaS3yuWvnYlCXra1kqrlsaGbbNJfxaF7I.IR52jEVV-zw_W7sRw5HtYQfTQhWbA4dLQw_stenfwgBDIAMZvc78sR5MEvBaLasXRLLv-Z0hxSu0HzZIczNC0zm-ltJ7NRLnQD09498KNFpdBeQBGnEJuskupvdR5TyG0l4Mjbg",
},
Symbol(edgesWithRawCursor): [
{
Expand Down Expand Up @@ -2097,8 +2267,10 @@ exports[`SqlCursorPagination > selects the last 3 items 10`] = `
},
],
"pageInfo": {
"endCursor": "hxq6aLoYC69MhcHj_7nAHEAOYBgQgK-lilrZZK8PlUQ.UMAa_PpPVW-1oDBX3oeT2v8hWra5lGac55zuXzuQPAXXrGcc4PnbIIZJWTcqzXAOOCzqPER9aVjPNQGXtFgCBw1vyZNIcFTVMsMnQyCuvr71p4VYGlQF7qgFIwtCUU7xF1tQA8zK",
"hasNextPage": false,
"hasPreviousPage": true,
"startCursor": "BF4zwhmn3i_aUO8fMntuvbJbVfFA77xjg4HWAbCqZ8s.TcLZaSN-rn8Zij9ZZWUQgs3n6YG4t0yuwODBikGsWGnL3td0c3YCwQt99Dml_IfofoAbMsPQTVoiu1gWjQ3cm4xA5Pm019RFK3kSzgV3TUHM7EjIkmTbnmjYlTsGT-xYHt8V5QmM",
},
Symbol(edgesWithRawCursor): [
{
Expand Down Expand Up @@ -2288,8 +2460,10 @@ exports[`SqlCursorPagination > selects the last infinity (all) items 10`] = `
},
],
"pageInfo": {
"endCursor": "hxq6aLoYC69MhcHj_7nAHEAOYBgQgK-lilrZZK8PlUQ.UMAa_PpPVW-1oDBX3oeT2v8hWra5lGac55zuXzuQPAXXrGcc4PnbIIZJWTcqzXAOOCzqPER9aVjPNQGXtFgCBw1vyZNIcFTVMsMnQyCuvr71p4VYGlQF7qgFIwtCUU7xF1tQA8zK",
"hasNextPage": false,
"hasPreviousPage": false,
"startCursor": "gmWf5PUciGkaS3yuWvnYlCXra1kqrlsaGbbNJfxaF7I.IR52jEVV-zw_W7sRw5HtYQfTQhWbA4dLQw_stenfwgBDIAMZvc78sR5MEvBaLasXRLLv-Z0hxSu0HzZIczNC0zm-ltJ7NRLnQD09498KNFpdBeQBGnEJuskupvdR5TyG0l4Mjbg",
},
Symbol(edgesWithRawCursor): [
{
Expand Down Expand Up @@ -2587,8 +2761,10 @@ exports[`SqlCursorPagination > selects the second and third row when selecting a
},
],
"pageInfo": {
"endCursor": "BF4zwhmn3i_aUO8fMntuvbJbVfFA77xjg4HWAbCqZ8s.TcLZaSN-rn8Zij9ZZWUQgs3n6YG4t0yuwODBikGsWGnL3td0c3YCwQt99Dml_IfofoAbMsPQTVoiu1gWjQ3cm4xA5Pm019RFK3kSzgV3TUHM7EjIkmTbnmjYlTsGT-xYHt8V5QmM",
"hasNextPage": false,
"hasPreviousPage": false,
"startCursor": "Vl8ajMnWgEXNNlI9TZNEzkzZT5fPgD7qdP_dIQBcjlM.nGHtSUghlMl64TM8BjfzsV4r2v-SL_TlQyYbwTz0nSbnzpetCeSw81VKEzJhkakKw3yRUHxi6ijfpwZEvyprnzBJzZ1gh070hs4CqayTv-g_KwpwjHGWUxUBkKA5S40-_oaeVS8",
},
Symbol(edgesWithRawCursor): [
{
Expand Down Expand Up @@ -2813,8 +2989,10 @@ exports[`SqlCursorPagination > selects the second row when selecting after the f
},
],
"pageInfo": {
"endCursor": "Vl8ajMnWgEXNNlI9TZNEzkzZT5fPgD7qdP_dIQBcjlM.nGHtSUghlMl64TM8BjfzsV4r2v-SL_TlQyYbwTz0nSbnzpetCeSw81VKEzJhkakKw3yRUHxi6ijfpwZEvyprnzBJzZ1gh070hs4CqayTv-g_KwpwjHGWUxUBkKA5S40-_oaeVS8",
"hasNextPage": false,
"hasPreviousPage": false,
"startCursor": "Vl8ajMnWgEXNNlI9TZNEzkzZT5fPgD7qdP_dIQBcjlM.nGHtSUghlMl64TM8BjfzsV4r2v-SL_TlQyYbwTz0nSbnzpetCeSw81VKEzJhkakKw3yRUHxi6ijfpwZEvyprnzBJzZ1gh070hs4CqayTv-g_KwpwjHGWUxUBkKA5S40-_oaeVS8",
},
Symbol(edgesWithRawCursor): [
{
Expand Down Expand Up @@ -2999,8 +3177,10 @@ exports[`SqlCursorPagination > selects the second row when selecting one before
},
],
"pageInfo": {
"endCursor": "Vl8ajMnWgEXNNlI9TZNEzkzZT5fPgD7qdP_dIQBcjlM.nGHtSUghlMl64TM8BjfzsV4r2v-SL_TlQyYbwTz0nSbnzpetCeSw81VKEzJhkakKw3yRUHxi6ijfpwZEvyprnzBJzZ1gh070hs4CqayTv-g_KwpwjHGWUxUBkKA5S40-_oaeVS8",
"hasNextPage": false,
"hasPreviousPage": true,
"startCursor": "Vl8ajMnWgEXNNlI9TZNEzkzZT5fPgD7qdP_dIQBcjlM.nGHtSUghlMl64TM8BjfzsV4r2v-SL_TlQyYbwTz0nSbnzpetCeSw81VKEzJhkakKw3yRUHxi6ijfpwZEvyprnzBJzZ1gh070hs4CqayTv-g_KwpwjHGWUxUBkKA5S40-_oaeVS8",
},
Symbol(edgesWithRawCursor): [
{
Expand Down Expand Up @@ -3185,8 +3365,10 @@ exports[`SqlCursorPagination > selects the second row when selecting one before
},
],
"pageInfo": {
"endCursor": "Vl8ajMnWgEXNNlI9TZNEzkzZT5fPgD7qdP_dIQBcjlM.nGHtSUghlMl64TM8BjfzsV4r2v-SL_TlQyYbwTz0nSbnzpetCeSw81VKEzJhkakKw3yRUHxi6ijfpwZEvyprnzBJzZ1gh070hs4CqayTv-g_KwpwjHGWUxUBkKA5S40-_oaeVS8",
"hasNextPage": false,
"hasPreviousPage": true,
"startCursor": "Vl8ajMnWgEXNNlI9TZNEzkzZT5fPgD7qdP_dIQBcjlM.nGHtSUghlMl64TM8BjfzsV4r2v-SL_TlQyYbwTz0nSbnzpetCeSw81VKEzJhkakKw3yRUHxi6ijfpwZEvyprnzBJzZ1gh070hs4CqayTv-g_KwpwjHGWUxUBkKA5S40-_oaeVS8",
},
Symbol(edgesWithRawCursor): [
{
Expand Down Expand Up @@ -3392,8 +3574,10 @@ exports[`SqlCursorPagination > selects the second row when selecting the first o
},
],
"pageInfo": {
"endCursor": "Vl8ajMnWgEXNNlI9TZNEzkzZT5fPgD7qdP_dIQBcjlM.nGHtSUghlMl64TM8BjfzsV4r2v-SL_TlQyYbwTz0nSbnzpetCeSw81VKEzJhkakKw3yRUHxi6ijfpwZEvyprnzBJzZ1gh070hs4CqayTv-g_KwpwjHGWUxUBkKA5S40-_oaeVS8",
"hasNextPage": true,
"hasPreviousPage": false,
"startCursor": "Vl8ajMnWgEXNNlI9TZNEzkzZT5fPgD7qdP_dIQBcjlM.nGHtSUghlMl64TM8BjfzsV4r2v-SL_TlQyYbwTz0nSbnzpetCeSw81VKEzJhkakKw3yRUHxi6ijfpwZEvyprnzBJzZ1gh070hs4CqayTv-g_KwpwjHGWUxUBkKA5S40-_oaeVS8",
},
Symbol(edgesWithRawCursor): [
{
Expand Down Expand Up @@ -3578,8 +3762,10 @@ exports[`SqlCursorPagination > selects the third row when selecting one after th
},
],
"pageInfo": {
"endCursor": "BF4zwhmn3i_aUO8fMntuvbJbVfFA77xjg4HWAbCqZ8s.TcLZaSN-rn8Zij9ZZWUQgs3n6YG4t0yuwODBikGsWGnL3td0c3YCwQt99Dml_IfofoAbMsPQTVoiu1gWjQ3cm4xA5Pm019RFK3kSzgV3TUHM7EjIkmTbnmjYlTsGT-xYHt8V5QmM",
"hasNextPage": true,
"hasPreviousPage": false,
"startCursor": "BF4zwhmn3i_aUO8fMntuvbJbVfFA77xjg4HWAbCqZ8s.TcLZaSN-rn8Zij9ZZWUQgs3n6YG4t0yuwODBikGsWGnL3td0c3YCwQt99Dml_IfofoAbMsPQTVoiu1gWjQ3cm4xA5Pm019RFK3kSzgV3TUHM7EjIkmTbnmjYlTsGT-xYHt8V5QmM",
},
Symbol(edgesWithRawCursor): [
{
Expand Down Expand Up @@ -3785,8 +3971,10 @@ exports[`SqlCursorPagination > selects the third row when selecting the last one
},
],
"pageInfo": {
"endCursor": "BF4zwhmn3i_aUO8fMntuvbJbVfFA77xjg4HWAbCqZ8s.TcLZaSN-rn8Zij9ZZWUQgs3n6YG4t0yuwODBikGsWGnL3td0c3YCwQt99Dml_IfofoAbMsPQTVoiu1gWjQ3cm4xA5Pm019RFK3kSzgV3TUHM7EjIkmTbnmjYlTsGT-xYHt8V5QmM",
"hasNextPage": false,
"hasPreviousPage": true,
"startCursor": "BF4zwhmn3i_aUO8fMntuvbJbVfFA77xjg4HWAbCqZ8s.TcLZaSN-rn8Zij9ZZWUQgs3n6YG4t0yuwODBikGsWGnL3td0c3YCwQt99Dml_IfofoAbMsPQTVoiu1gWjQ3cm4xA5Pm019RFK3kSzgV3TUHM7EjIkmTbnmjYlTsGT-xYHt8V5QmM",
},
Symbol(edgesWithRawCursor): [
{
Expand Down Expand Up @@ -3888,8 +4076,10 @@ exports[`SqlCursorPagination > supports field aliases 10`] = `
},
],
"pageInfo": {
"endCursor": "eTi5IVXuus3g1sablUWFGWkZBbE8pKn1NpODYFyekPk.6pGQw7mGK7nGKpaVhAjxa5hfy_yJlJReRXPrGHHITChuwCzaKubo2hHL6LSHAr2y0SwB2lWFNN5nNOPzQrDYKiI7FwFSRtJhZT_698sW8J3n52yGVehDWOA",
"hasNextPage": true,
"hasPreviousPage": false,
"startCursor": "eTi5IVXuus3g1sablUWFGWkZBbE8pKn1NpODYFyekPk.6pGQw7mGK7nGKpaVhAjxa5hfy_yJlJReRXPrGHHITChuwCzaKubo2hHL6LSHAr2y0SwB2lWFNN5nNOPzQrDYKiI7FwFSRtJhZT_698sW8J3n52yGVehDWOA",
},
Symbol(edgesWithRawCursor): [
{
Expand Down Expand Up @@ -3989,8 +4179,10 @@ exports[`SqlCursorPagination > supports fully qualified column names 10`] = `
},
],
"pageInfo": {
"endCursor": "6ivs-1J-XTxms7CXt1QscsdUQ9LOZ2_k1WKxcNCh4uA.dZuwTEQegp2jJQAGcUOOYX04RyrK8r11IMU6Mwol870lhImHOcGc3BAExnrn51cTb8lzGmvZlXQQHlg",
"hasNextPage": true,
"hasPreviousPage": false,
"startCursor": "6ivs-1J-XTxms7CXt1QscsdUQ9LOZ2_k1WKxcNCh4uA.dZuwTEQegp2jJQAGcUOOYX04RyrK8r11IMU6Mwol870lhImHOcGc3BAExnrn51cTb8lzGmvZlXQQHlg",
},
Symbol(edgesWithRawCursor): [
{
Expand Down
Loading