Add "Is not in" (notOneOf) filter operator#18932
Merged
Merged
Conversation
Mirror the existing "Is in" (oneOf) operator with a negated "Is not in" (notOneOf) operator across the whole filter stack: - types: ArrayOperator.NOT_ONE_OF enum, SearchFilters field, Zod + Joi validation schemas - shared-core: operator option, valid operators per field type, in-memory runQuery matcher, numeric value parsing - backend-core: SQL builder (whereNotIn + orWhereNull so rows with empty values are returned), lucene builder - server: external row _id decoding - client/frontend-core/builder: multiselect value input, datetime exclusion, conditional-UI editors Rows with an empty/null value are returned by "Is not in" (they are not in the list), matching intuitive expectations. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Contributor
Author
Contributor
|
@Stropdasman I can’t start this review because this PR was opened by an external contributor in a public repository. Ask an installation member or outside collaborator to comment |
Contributor
|
@Stropdasman - in addition to this, would you add Greater than and less than in the operands please? |
Contributor
Author
|
@NDCallahan, this option is already available for numeric columns, or when you choose “Number” as the condition type. |
melohagan
approved these changes
Jun 15, 2026
melohagan
left a comment
Collaborator
There was a problem hiding this comment.
LGTM! I pulled it down locally and gave it a test with BudibaseDB and Postgres, and appeared to be working as intended.
Nice addition, and the tests are appreciated too. 🙂
Collaborator
|
Ah looks like there's some test failures to fix! |
Contributor
Author
|
@melohagan Thanks for the review. Will push changes soon. |
cleanupConfig only skipped oneOf, so notOneOf array values were mangled by convertRowId into scalars, crashing parseFilters. Skip notOneOf too and add FilterType.NOT_ONE_OF.
melohagan
approved these changes
Jun 15, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Addresses: #16460
Mirror the existing "Is in" (oneOf) operator with a negated "Is not in" (notOneOf) operator across the whole filter stack:
Rows with an empty/null value are returned by "Is not in" (they are not in the list), matching intuitive expectations.
Summary by cubic
Adds an “Is not in” (
notOneOf) filter operator across the stack. MirrorsoneOfin SQL, Lucene, and in-memory filters, and returns rows with empty/null values.New Features
ArrayOperator.NOT_ONE_OF,FilterType.NOT_ONE_OF, andSearchFilters.notOneOfin@budibase/types; Zod + Joi schemas; OpenAPI specs regenerated.whereNotIn+orWhereNull(SQLite date-only via LIKE; Oracle CLOBs handled); Lucene builds(*:* -field:(...)); in-memoryrunQueryinversesoneOfand includes nulls._idvalues fornotOneOfin external row search; validators and generated OpenAPI types includenotOneOf.notOneOf; hidden for DateTime; type selectors disabled foroneOf/notOneOf; conditional-UI editors updated.OPTIONS, single refs, and external SQL_id; added to no-empty list; numeric CSV values parsed foroneOf/notOneOf.notOneOfuseswhereNotIn+is null;oneOfuseswhereIn; server route coverage; shared-corerunQuerycases.Bug Fixes
notOneOfarrays incleanupConfigand addingFilterType.NOT_ONE_OF.Written for commit 8bfa5fc. Summary will update on new commits.