fix: empty inArray no longer crashes postgres

This commit is contained in:
James
2023-10-15 17:28:13 -04:00
parent 1481ef97b5
commit c4ac341d75
7 changed files with 52 additions and 13 deletions

View File

@@ -59,6 +59,7 @@
"fs-extra": "10.1.0", "fs-extra": "10.1.0",
"get-port": "5.1.1", "get-port": "5.1.1",
"glob": "8.1.0", "glob": "8.1.0",
"graphql-request": "6.1.0",
"husky": "^8.0.3", "husky": "^8.0.3",
"isomorphic-fetch": "3.0.0", "isomorphic-fetch": "3.0.0",
"jest": "29.6.4", "jest": "29.6.4",

View File

@@ -33,7 +33,7 @@ export const findMany = async function find({
const db = adapter.sessions[req.transactionID]?.db || adapter.drizzle const db = adapter.sessions[req.transactionID]?.db || adapter.drizzle
const table = adapter.tables[tableName] const table = adapter.tables[tableName]
let limit = limitArg let limit = limitArg ?? 10
let totalDocs: number let totalDocs: number
let totalPages: number let totalPages: number
let hasPrevPage: boolean let hasPrevPage: boolean
@@ -119,7 +119,11 @@ export const findMany = async function find({
findManyArgs.where = inArray(adapter.tables[tableName].id, Object.keys(orderedIDMap)) findManyArgs.where = inArray(adapter.tables[tableName].id, Object.keys(orderedIDMap))
} else { } else {
findManyArgs.limit = limitArg === 0 ? undefined : limitArg findManyArgs.limit = limitArg === 0 ? undefined : limitArg
findManyArgs.offset = skip || (page - 1) * limitArg
const offset = skip || (page - 1) * limitArg
if (!Number.isNaN(offset)) findManyArgs.offset = offset
if (where) { if (where) {
findManyArgs.where = where findManyArgs.where = where
} }

View File

@@ -144,13 +144,19 @@ export async function parseParams({
break break
} }
const { operator: queryOperator, value: queryValue } = sanitizeQueryValue({ const sanitizedQueryValue = sanitizeQueryValue({
field, field,
operator, operator,
relationOrPath, relationOrPath,
val, val,
}) })
if (sanitizedQueryValue === null) {
break
}
const { operator: queryOperator, value: queryValue } = sanitizedQueryValue
if (queryOperator === 'not_equals' && queryValue !== null) { if (queryOperator === 'not_equals' && queryValue !== null) {
constraints.push( constraints.push(
or( or(
@@ -159,7 +165,10 @@ export async function parseParams({
ne<any>(rawColumn || table[columnName], queryValue), ne<any>(rawColumn || table[columnName], queryValue),
), ),
) )
} else if ( break
}
if (
(field.type === 'relationship' || field.type === 'upload') && (field.type === 'relationship' || field.type === 'upload') &&
Array.isArray(queryValue) && Array.isArray(queryValue) &&
operator === 'not_in' operator === 'not_in'
@@ -170,11 +179,13 @@ export async function parseParams({
IS IS
NULL`, NULL`,
) )
} else {
constraints.push( break
operatorMap[queryOperator](rawColumn || table[columnName], queryValue),
)
} }
constraints.push(
operatorMap[queryOperator](rawColumn || table[columnName], queryValue),
)
} }
} }
} }

View File

@@ -42,11 +42,17 @@ export const sanitizeQueryValue = ({
if (val.toLowerCase() === 'false') formattedValue = false if (val.toLowerCase() === 'false') formattedValue = false
} }
if (['all', 'in', 'not_in'].includes(operator) && typeof formattedValue === 'string') { if (['all', 'in', 'not_in'].includes(operator)) {
formattedValue = createArrayFromCommaDelineated(formattedValue) if (formattedValue === 'string') {
formattedValue = createArrayFromCommaDelineated(formattedValue)
if (field.type === 'number') { if (field.type === 'number') {
formattedValue = formattedValue.map((arrayVal) => parseFloat(arrayVal)) formattedValue = formattedValue.map((arrayVal) => parseFloat(arrayVal))
}
}
if (!Array.isArray(formattedValue) || formattedValue.length === 0) {
return null
} }
} }

View File

@@ -187,7 +187,6 @@
"file-loader": "6.2.0", "file-loader": "6.2.0",
"form-data": "3.0.1", "form-data": "3.0.1",
"get-port": "5.1.1", "get-port": "5.1.1",
"graphql-request": "6.1.0",
"mini-css-extract-plugin": "1.6.2", "mini-css-extract-plugin": "1.6.2",
"node-fetch": "2.6.12", "node-fetch": "2.6.12",
"nodemon": "3.0.1", "nodemon": "3.0.1",

3
pnpm-lock.yaml generated
View File

@@ -96,6 +96,9 @@ importers:
glob: glob:
specifier: 8.1.0 specifier: 8.1.0
version: 8.1.0 version: 8.1.0
graphql-request:
specifier: 6.1.0
version: 6.1.0(graphql@16.8.1)
husky: husky:
specifier: ^8.0.3 specifier: ^8.0.3
version: 8.0.3 version: 8.0.3

View File

@@ -796,4 +796,19 @@ describe('Fields', () => {
expect(uploadElement.value.media.filename).toStrictEqual('payload.png') expect(uploadElement.value.media.filename).toStrictEqual('payload.png')
}) })
}) })
describe('relationships', () => {
it('should not crash if querying with empty in operator', async () => {
const query = await payload.find({
collection: 'relationship-fields',
where: {
'relationship.value': {
in: [],
},
},
})
expect(query.docs).toBeDefined()
})
})
}) })