MCPcopy Index your code
hub / github.com/TanStack/db / createJoinSubqueryTests

Function createJoinSubqueryTests

packages/db/tests/query/join-subquery.test.ts:203–871  ·  view source on GitHub ↗
(autoIndex: `off` | `eager`)

Source from the content-addressed store, hash-verified

201}
202
203function createJoinSubqueryTests(autoIndex: `off` | `eager`): void {
204 describe(`with autoIndex ${autoIndex}`, () => {
205 describe(`subqueries in FROM clause with joins`, () => {
206 let issuesCollection: ReturnType<typeof createIssuesCollection>
207 let usersCollection: ReturnType<typeof createUsersCollection>
208
209 beforeEach(() => {
210 issuesCollection = createIssuesCollection(autoIndex)
211 usersCollection = createUsersCollection(autoIndex)
212 })
213
214 test(`should join subquery with collection - inner join`, () => {
215 const joinQuery = createLiveQueryCollection({
216 startSync: true,
217 query: (q) => {
218 // Subquery: filter issues by project 1
219 const project1Issues = q
220 .from({ issue: issuesCollection })
221 .where(({ issue }) => eq(issue.projectId, 1))
222
223 // Join subquery with users
224 return q
225 .from({ issue: project1Issues })
226 .join(
227 { user: usersCollection },
228 ({ issue, user }) => eq(issue.userId, user.id),
229 `inner`,
230 )
231 .select(({ issue, user }) => ({
232 issue_title: issue.title,
233 user_name: user.name,
234 issue_duration: issue.duration,
235 user_status: user.status,
236 }))
237 },
238 })
239
240 const results = joinQuery.toArray
241 expect(results).toHaveLength(3) // Issues 1, 2, 3 from project 1 with users
242
243 const resultTitles = results.map((r) => r.issue_title).sort()
244 expect(resultTitles).toEqual([`Bug 1`, `Bug 2`, `Feature 1`])
245
246 const alice = results.find((r) => r.user_name === `Alice`)
247 expect(alice).toMatchObject({
248 user_name: `Alice`,
249 user_status: `active`,
250 })
251 })
252
253 test(`should join collection with subquery - left join`, () => {
254 const joinQuery = createLiveQueryCollection({
255 startSync: true,
256 query: (q) => {
257 // Subquery: filter active users
258 const activeUsers = q
259 .from({ user: usersCollection })
260 .where(({ user }) => eq(user.status, `active`))

Callers 1

Calls 15

beforeEachFunction · 0.90
expectFunction · 0.90
createProductsCollectionFunction · 0.85
createTrialsCollectionFunction · 0.85
createProfilesCollectionFunction · 0.85
whereMethod · 0.80
fromMethod · 0.80
selectMethod · 0.80
filterMethod · 0.80
limitMethod · 0.80
orderByMethod · 0.80

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…