{"record":{"id":"cedb8164432d3180","repo":"refinedev/refine","slug":"operator-operator-is-not-supported-cedb81","errorCode":null,"errorMessage":"Operator ${operator} is not supported","messagePattern":"Operator (.+?) is not supported","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/supabase/src/utils/mapOperator.ts","lineNumber":27,"sourceCode":"    case \"contains\":\n      return \"ilike\";\n    case \"ncontains\":\n      return \"not.ilike\";\n    case \"containss\":\n      return \"like\";\n    case \"ncontainss\":\n      return \"not.like\";\n    case \"null\":\n      return \"is\";\n    case \"nnull\":\n      return \"not.is\";\n    case \"ina\":\n      return \"cs\";\n    case \"nina\":\n      return \"not.cs\";\n    case \"between\":\n    case \"nbetween\":\n      throw Error(`Operator ${operator} is not supported`);\n    default:\n      return operator;\n  }\n};\n","sourceCodeStart":9,"sourceCodeEnd":32,"githubUrl":"https://github.com/refinedev/refine/blob/779d52a20e29b0307ac0df04d135beba434370dc/packages/supabase/src/utils/mapOperator.ts#L9-L32","documentation":"The Supabase mapOperator utility rejects the \"between\" and \"nbetween\" operators — PostgREST/Supabase has no single operator token for range filtering, so the provider throws instead of silently mis-filtering. All other operators map to PostgREST tokens (cs, not.cs, etc.) or pass through.","triggerScenarios":"Using a filter like { field: \"created_at\", operator: \"between\", value: [start, end] } in useTable/useList filters with the Supabase data provider.","commonSituations":"Porting date-range filters from Strapi/other providers that support between; adding a date range picker that emits between filters.","solutions":["Replace 'between' with two explicit boundary filters: gte/lte (or gt/lt)","Build the range filter directly via supabaseClient.query.gte(field, start).lte(field, end) if using the query builder","Upgrade the package in case a later version adds between support, but verify release notes"],"exampleFix":"// before\nfilters: [{ field: \"created_at\", operator: \"between\", value: [start, end] }]\n\n// after\nfilters: [\n  { field: \"created_at\", operator: \"gte\", value: start },\n  { field: \"created_at\", operator: \"lte\", value: end },\n]","handlingStrategy":"validation","validationCode":"const BAD = new Set([\"between\", \"nbetween\"]);\nconst hasRangeFilter = (filters: any[]) => filters.some((f) => BAD.has(f.operator));\nif (hasRangeFilter(filters)) { /* rewrite to gte/lte pair */ }","typeGuard":"const isSupabaseSupportedOperator = (op: string): boolean => op !== \"between\" && op !== \"nbetween\";","tryCatchPattern":"try { await dataProvider.getList({ resource, filters }); } catch (e) { if (String(e).includes(\"is not supported\")) { /* replace between with gte/lte and retry */ } else throw e; }","preventionTips":["Express ranges as gte + lte filter pairs for Supabase","Add a normalization step that rewrites between filters before any dataProvider call","Add tests covering date-range filters per provider"],"tags":["refine","supabase","filter","operator","between","data-provider"],"backgroundTag":"unsupported-filter-operator","analyzedSha":"779d52a20e29b0307ac0df04d135beba434370dc","analyzedAt":"2026-08-27T11:15:25.854Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}