Skip to content

Commit 1d9a5b9

Browse files
committed
fix overlaps array filter predicates by using arrayOverlaps() function
1 parent 3595979 commit 1d9a5b9

File tree

3 files changed

+23
-29
lines changed

3 files changed

+23
-29
lines changed

src/utils/feed.server.ts

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { feedEntries } from '~/db/schema'
2-
import { eq, and, sql, inArray, gte, lte } from 'drizzle-orm'
2+
import { eq, and, sql, inArray, gte, lte, arrayOverlaps } from 'drizzle-orm'
33
import { getAuthenticatedUser } from './auth.server-helpers'
44
import { getEffectiveCapabilities } from './capabilities.server'
55
import type { EntryType, ReleaseLevel } from '~/db/schema'
@@ -110,12 +110,10 @@ export function buildFeedQueryConditions(
110110
filters.libraries &&
111111
filters.libraries.length > 0
112112
) {
113-
conditions.push(
114-
sql`${feedEntries.libraryIds} && ARRAY[${sql.join(
115-
filters.libraries.map((l) => sql`${l}`),
116-
sql`, `,
117-
)}]::text[]`,
118-
)
113+
conditions.push(arrayOverlaps(feedEntries.libraryIds, filters.libraries))
114+
// conditions.push(
115+
// sql`${feedEntries.libraryIds} && ${filters.libraries}::text[]`,
116+
// )
119117
}
120118

121119
// Partner filter (array overlap) - use parameterized array
@@ -124,22 +122,12 @@ export function buildFeedQueryConditions(
124122
filters.partners &&
125123
filters.partners.length > 0
126124
) {
127-
conditions.push(
128-
sql`${feedEntries.partnerIds} && ARRAY[${sql.join(
129-
filters.partners.map((p) => sql`${p}`),
130-
sql`, `,
131-
)}]::text[]`,
132-
)
125+
conditions.push(arrayOverlaps(feedEntries.partnerIds, filters.partners))
133126
}
134127

135128
// Tag filter (array overlap) - use parameterized array
136129
if (excludeFacet !== 'tags' && filters.tags && filters.tags.length > 0) {
137-
conditions.push(
138-
sql`${feedEntries.tags} && ARRAY[${sql.join(
139-
filters.tags.map((t) => sql`${t}`),
140-
sql`, `,
141-
)}]::text[]`,
142-
)
130+
conditions.push(arrayOverlaps(feedEntries.tags, filters.tags))
143131
}
144132

145133
// Featured filter

src/utils/showcase.server.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,16 @@ import {
66
type ShowcaseStatus,
77
type ShowcaseUseCase,
88
} from '~/db/schema'
9-
import { and, eq, or, sql, desc, arrayContains, isNotNull } from 'drizzle-orm'
9+
import {
10+
and,
11+
eq,
12+
or,
13+
sql,
14+
desc,
15+
arrayContains,
16+
isNotNull,
17+
arrayOverlaps,
18+
} from 'drizzle-orm'
1019
import { requireCapability } from './auth.server'
1120
import { getEffectiveCapabilities } from './capabilities.server'
1221
import { libraryIds } from '~/libraries'
@@ -525,10 +534,7 @@ export async function searchShowcasesCore(
525534

526535
if (filters.useCases && filters.useCases.length > 0) {
527536
conditions.push(
528-
sql`${showcases.useCases} && ARRAY[${sql.join(
529-
filters.useCases.map((uc) => sql`${uc}`),
530-
sql`, `,
531-
)}]::showcase_use_case[]`,
537+
arrayOverlaps(showcases.useCases, filters.useCases as ShowcaseUseCase[]),
532538
)
533539
}
534540

src/utils/users.server.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { createServerFn } from '@tanstack/react-start'
22
import { db } from '~/db/client'
33
import { users } from '~/db/schema'
4-
import { eq, and, or, ilike, sql, asc, desc } from 'drizzle-orm'
4+
import { eq, and, or, ilike, sql, asc, desc, arrayOverlaps } from 'drizzle-orm'
55
import type { InferSelectModel } from 'drizzle-orm'
66
import { getAuthenticatedUser } from './auth.server-helpers'
77
import { getBulkEffectiveCapabilities } from './capabilities.server'
@@ -109,10 +109,10 @@ export const listUsers = createServerFn({ method: 'POST' })
109109
) {
110110
// Use PostgreSQL array overlap operator (&&) with parameterized values
111111
conditions.push(
112-
sql`${users.capabilities} && ARRAY[${sql.join(
113-
data.capabilityFilter.map((c) => sql`${c}`),
114-
sql`, `,
115-
)}]::capability[]`,
112+
arrayOverlaps(
113+
users.capabilities,
114+
data.capabilityFilter as Capability[],
115+
),
116116
)
117117
}
118118

0 commit comments

Comments
 (0)