Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add support for not_like operation #11326

Merged
merged 7 commits into from
Feb 22, 2025
Merged
Show file tree
Hide file tree
Changes from 4 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
19 changes: 19 additions & 0 deletions packages/db-mongodb/src/queries/buildSearchParams.ts
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,25 @@ export async function buildSearchParam({
return result
}

if (formattedOperator === 'not_like' && typeof formattedValue === 'string') {
const words = formattedValue.split(' ')

const result = {
value: {
$and: words.map((word) => ({
[path]: {
$not: {
$options: 'i',
$regex: word.replace(/[\\^$*+?.()|[\]{}]/g, '\\$&'),
},
},
})),
},
}

return result
}

// Some operators like 'near' need to define a full query
// so if there is no operator key, just return the value
if (!operatorKey) {
Expand Down
1 change: 1 addition & 0 deletions packages/db-mongodb/src/queries/operatorMap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,6 @@ export const operatorMap = {
near: '$near',
not_equals: '$ne',
not_in: '$nin',
not_like: '$not',
within: '$geoWithin',
}
3 changes: 3 additions & 0 deletions packages/db-sqlite/src/createJSONQuery/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,9 @@ const createConstraint = ({
if (['contains', 'like'].includes(operator)) {
formattedOperator = 'like'
formattedValue = `%${value}%`
} else if (['not_like'].includes(operator)) {
formattedOperator = 'notlike'
formattedValue = `%${value}%`
} else if (operator === 'equals') {
formattedOperator = '='
}
Expand Down
3 changes: 2 additions & 1 deletion packages/db-sqlite/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ import {
updateOne,
updateVersion,
} from '@payloadcms/drizzle'
import { like } from 'drizzle-orm'
import { like, notLike } from 'drizzle-orm'
import { createDatabaseAdapter, defaultBeginTransaction } from 'payload'
import { fileURLToPath } from 'url'

Expand Down Expand Up @@ -81,6 +81,7 @@ export function sqliteAdapter(args: Args): DatabaseAdapterObj<SQLiteAdapter> {
...operatorMap,
contains: like,
like,
not_like: notLike,
} as unknown as Operators

return createDatabaseAdapter<SQLiteAdapter>({
Expand Down
3 changes: 3 additions & 0 deletions packages/drizzle/src/queries/operatorMap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
lt,
lte,
ne,
notIlike,
notInArray,
or,
type SQL,
Expand All @@ -31,6 +32,7 @@ type OperatorKeys =
| 'like'
| 'not_equals'
| 'not_in'
| 'not_like'
| 'or'

export type Operators = Record<OperatorKeys, (column: Column, value: SQLWrapper | unknown) => SQL>
Expand All @@ -48,6 +50,7 @@ export const operatorMap: Operators = {
less_than_equal: lte,
like: ilike,
not_equals: ne,
not_like: notIlike,
// TODO: support this
// all: all,
not_in: notInArray,
Expand Down
1 change: 1 addition & 0 deletions packages/drizzle/src/queries/parseParams.ts
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@ export function parseParams({
like: { operator: 'like', wildcard: '%' },
not_equals: { operator: '<>', wildcard: '' },
not_in: { operator: 'not in', wildcard: '' },
not_like: { operator: 'not like', wildcard: '%' },
}

let formattedValue = val
Expand Down
1 change: 1 addition & 0 deletions packages/payload/src/types/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ export const validOperators = [
'less_than',
'less_than_equal',
'like',
'not_like',
'within',
'intersects',
'near',
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/clientKeys.ts
Original file line number Diff line number Diff line change
Expand Up @@ -301,6 +301,7 @@ export const clientTranslationKeys = createClientTranslationKeys([
'operators:isIn',
'operators:contains',
'operators:isLike',
'operators:isNotLike',
'operators:isNotEqualTo',
'operators:near',
'operators:isGreaterThan',
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/ar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -370,6 +370,7 @@ export const arTranslations: DefaultTranslationsObject = {
isLike: 'هو مثل',
isNotEqualTo: 'لا يساوي',
isNotIn: 'غير موجود في',
isNotLike: 'ليس مثل',
near: 'قريب من',
within: 'في غضون',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/az.ts
Original file line number Diff line number Diff line change
Expand Up @@ -375,6 +375,7 @@ export const azTranslations: DefaultTranslationsObject = {
isLike: 'kimi',
isNotEqualTo: 'bərabər deyil',
isNotIn: 'daxil deyil',
isNotLike: 'deyil kimi',
near: 'yaxın',
within: 'daxilinde',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/bg.ts
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,7 @@ export const bgTranslations: DefaultTranslationsObject = {
isLike: 'е като',
isNotEqualTo: 'не е равно на',
isNotIn: 'не е в',
isNotLike: 'не е като',
near: 'близко',
within: 'в рамките на',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/ca.ts
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,7 @@ export const caTranslations: DefaultTranslationsObject = {
isLike: 'és semblant a',
isNotEqualTo: 'no és igual a',
isNotIn: 'no està en',
isNotLike: 'no és com',
near: 'a prop de',
within: 'dins de',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/cs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -371,6 +371,7 @@ export const csTranslations: DefaultTranslationsObject = {
isLike: 'je jako',
isNotEqualTo: 'není rovno',
isNotIn: 'není v',
isNotLike: 'není jako',
near: 'blízko',
within: 'uvnitř',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/da.ts
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,7 @@ export const daTranslations: DefaultTranslationsObject = {
isLike: 'Ligner',
isNotEqualTo: 'Er ikke lig med',
isNotIn: 'Er ikke i',
isNotLike: 'er ikke som',
near: 'Tæt på',
within: 'Inden for',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -379,6 +379,7 @@ export const deTranslations: DefaultTranslationsObject = {
isLike: 'ist wie',
isNotEqualTo: 'ist nicht gleich',
isNotIn: 'ist nicht drin',
isNotLike: 'ist nicht wie',
near: 'in der Nähe',
within: 'innerhalb',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,7 @@ export const enTranslations = {
isLike: 'is like',
isNotEqualTo: 'is not equal to',
isNotIn: 'is not in',
isNotLike: 'is not like',
near: 'near',
within: 'within',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,7 @@ export const esTranslations: DefaultTranslationsObject = {
isLike: 'es como',
isNotEqualTo: 'no es igual a',
isNotIn: 'no está en',
isNotLike: 'no es como',
near: 'cerca',
within: 'dentro de',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/et.ts
Original file line number Diff line number Diff line change
Expand Up @@ -370,6 +370,7 @@ export const etTranslations: DefaultTranslationsObject = {
isLike: 'on sarnane',
isNotEqualTo: 'ei võrdu',
isNotIn: 'ei ole hulgas',
isNotLike: 'ei ole nagu',
near: 'lähedal',
within: 'vahemikus',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/fa.ts
Original file line number Diff line number Diff line change
Expand Up @@ -371,6 +371,7 @@ export const faTranslations: DefaultTranslationsObject = {
isLike: 'مانند این است',
isNotEqualTo: 'برابر نیست',
isNotIn: 'در این نیست',
isNotLike: 'مانند نیست',
near: 'نزدیک',
within: 'در داخل',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/fr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -383,6 +383,7 @@ export const frTranslations: DefaultTranslationsObject = {
isLike: 'est comme',
isNotEqualTo: 'n’est pas égal à',
isNotIn: 'n’est pas dans',
isNotLike: "n'est pas comme",
near: 'proche',
within: 'dans',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/he.ts
Original file line number Diff line number Diff line change
Expand Up @@ -366,6 +366,7 @@ export const heTranslations: DefaultTranslationsObject = {
isLike: 'דומה ל',
isNotEqualTo: 'לא שווה ל',
isNotIn: 'לא נמצא ב',
isNotLike: 'אינו דומה',
near: 'קרוב ל',
within: 'בתוך',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/hr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,7 @@ export const hrTranslations: DefaultTranslationsObject = {
isLike: 'je kao',
isNotEqualTo: 'nije jednako',
isNotIn: 'nije unutra',
isNotLike: 'nije kao',
near: 'blizu',
within: 'unutar',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/hu.ts
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,7 @@ export const huTranslations: DefaultTranslationsObject = {
isLike: 'olyan, mint',
isNotEqualTo: 'nem egyenlő',
isNotIn: 'nincs benne',
isNotLike: 'nem olyan mint',
near: 'közel',
within: 'belül',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/it.ts
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,7 @@ export const itTranslations: DefaultTranslationsObject = {
isLike: 'è come',
isNotEqualTo: 'non è uguale a',
isNotIn: 'non è in',
isNotLike: 'non è come',
near: 'vicino',
within: "all'interno",
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/ja.ts
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,7 @@ export const jaTranslations: DefaultTranslationsObject = {
isLike: 'のような',
isNotEqualTo: '等しくない',
isNotIn: '入っていません',
isNotLike: 'ではない',
near: '近く',
within: '内で',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/ko.ts
Original file line number Diff line number Diff line change
Expand Up @@ -371,6 +371,7 @@ export const koTranslations: DefaultTranslationsObject = {
isLike: '유사',
isNotEqualTo: '같지 않음',
isNotIn: '포함되지 않음',
isNotLike: '같지 않다',
near: '근처',
within: '내에서',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/lt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -375,6 +375,7 @@ export const ltTranslations: DefaultTranslationsObject = {
isLike: 'yra panašu',
isNotEqualTo: 'nelygu',
isNotIn: 'nėra',
isNotLike: 'nėra panašus',
near: 'šalia',
within: 'viduje',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/my.ts
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,7 @@ export const myTranslations: DefaultTranslationsObject = {
isLike: 'တူသည်',
isNotEqualTo: 'ညီမျှသည်',
isNotIn: 'မဝင်ပါ',
isNotLike: 'မဟုတ်ကဲ့သို့',
near: 'နီး',
within: 'အတွင်း',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/nb.ts
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,7 @@ export const nbTranslations: DefaultTranslationsObject = {
isLike: 'er som',
isNotEqualTo: 'er ikke lik',
isNotIn: 'er ikke med',
isNotLike: 'er ikke lik',
near: 'nær',
within: 'innen',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/nl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,7 @@ export const nlTranslations: DefaultTranslationsObject = {
isLike: 'is als',
isNotEqualTo: 'is niet gelijk aan',
isNotIn: 'zit er niet in',
isNotLike: 'is niet zoals',
near: 'nabij',
within: 'binnen',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/pl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,7 @@ export const plTranslations: DefaultTranslationsObject = {
isLike: 'jest jak',
isNotEqualTo: 'nie jest równe',
isNotIn: 'nie ma go w',
isNotLike: 'nie jest jak',
near: 'blisko',
within: 'w ciągu',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/pt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,7 @@ export const ptTranslations: DefaultTranslationsObject = {
isLike: 'é como',
isNotEqualTo: 'não é igual a',
isNotIn: 'não está em',
isNotLike: 'não é como',
near: 'perto',
within: 'dentro',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/ro.ts
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,7 @@ export const roTranslations: DefaultTranslationsObject = {
isLike: 'este ca',
isNotEqualTo: 'nu este egal cu',
isNotIn: 'nu este în',
isNotLike: 'nu este ca',
near: 'în apropiere de',
within: 'înăuntru',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/rs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,7 @@ export const rsTranslations: DefaultTranslationsObject = {
isLike: 'је као',
isNotEqualTo: 'није једнако',
isNotIn: 'није у',
isNotLike: 'nije kao',
near: 'близу',
within: 'unutar',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/rsLatin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,7 @@ export const rsLatinTranslations: DefaultTranslationsObject = {
isLike: 'je kao',
isNotEqualTo: 'nije jednako',
isNotIn: 'nije unutra',
isNotLike: 'nije kao',
near: 'blizu',
within: 'unutar',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/ru.ts
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,7 @@ export const ruTranslations: DefaultTranslationsObject = {
isLike: 'похоже',
isNotEqualTo: 'не равно',
isNotIn: 'нет в',
isNotLike: 'не похож',
near: 'рядом',
within: 'в пределах',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/sk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,7 @@ export const skTranslations: DefaultTranslationsObject = {
isLike: 'je ako',
isNotEqualTo: 'nie je rovné',
isNotIn: 'nie je v',
isNotLike: 'nie je ako',
near: 'blízko',
within: 'vnútri',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/sl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,7 @@ export const slTranslations: DefaultTranslationsObject = {
isLike: 'je podobno',
isNotEqualTo: 'ni enako',
isNotIn: 'ni v',
isNotLike: 'ni podobno',
near: 'blizu',
within: 'znotraj',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/sv.ts
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,7 @@ export const svTranslations: DefaultTranslationsObject = {
isLike: 'är som',
isNotEqualTo: 'är inte lika med',
isNotIn: 'är inte med',
isNotLike: 'är inte som',
near: 'nära',
within: 'inom',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/th.ts
Original file line number Diff line number Diff line change
Expand Up @@ -369,6 +369,7 @@ export const thTranslations: DefaultTranslationsObject = {
isLike: 'เหมือน',
isNotEqualTo: 'ไม่เท่ากับ',
isNotIn: 'ไม่ได้อยู่ใน',
isNotLike: 'ไม่เหมือน',
near: 'ใกล้',
within: 'ภายใน',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/tr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,7 @@ export const trTranslations: DefaultTranslationsObject = {
isLike: 'gibidir',
isNotEqualTo: 'eşit değildir',
isNotIn: 'içinde değil',
isNotLike: 'gibi değil',
near: 'yakın',
within: 'içinde',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/uk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,7 @@ export const ukTranslations: DefaultTranslationsObject = {
isLike: 'схоже',
isNotEqualTo: 'не дорівнює',
isNotIn: 'не в',
isNotLike: 'не такий як',
near: 'поруч',
within: 'в межах',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/vi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,7 @@ export const viTranslations: DefaultTranslationsObject = {
isLike: 'gần giống',
isNotEqualTo: 'không bằng',
isNotIn: 'không có trong',
isNotLike: 'không giống như',
near: 'gần',
within: 'trong',
},
Expand Down
1 change: 1 addition & 0 deletions packages/translations/src/languages/zh.ts
Original file line number Diff line number Diff line change
Expand Up @@ -362,6 +362,7 @@ export const zhTranslations: DefaultTranslationsObject = {
isLike: '就像',
isNotEqualTo: '不等于',
isNotIn: '不在',
isNotLike: '不像',
near: '附近',
within: '在...之内',
},
Expand Down
Loading