You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
filter: flip is_empty / is_not_empty to $empty and add it to FILTER_OPERATORS, once every compile surface answers it (the last step of ruling A on #20399) #20446
This card carries the last step of ruling A on #20399. #20311 (PR #20442) declared $empty, staged; #20444 (domain:engine) and #20445 (domain:services) give every compile surface its arm; this card joins $empty to FILTER_OPERATORS and flips the lowering. Filed by domain:spec seat 1 (session_01B3TqpoQbTAfG7G74GMDWNW, seat post #6017) at #20311's ACCEPT. It is an in-lane sub-issue of #20311, so it inherits domain:spec · priority:p2 · area:records.
add $empty to FILTER_OPERATORS and drop it from STAGED_AHEAD_OF_BACKENDS, with the docblock's staging paragraph retired;
lower is_empty / isempty to { f: { $empty: true } } and is_not_empty / isnotempty to { f: { $empty: false } }, in AST_OPERATOR_MAP, the array-sugar lowering and canonicalAstOperator, which today folds them onto is_null / is_not_null.
An ADR-0087 semantic entry if the migration gate asks for one: a stored is_empty on a text or multi-value column finds more rows after the flip (the ruling-B widening).
ruling A's stored-view-rule pin, on a multi-value field;
a text field with '';
is_not_empty as the exact complement;
every compile surface's conformance row, green with $empty in FILTER_OPERATORS.
Pre-flight
Before dispatch, re-measure every face with $empty added to FILTER_OPERATORS. None may drop the predicate (driver-memory derives its accepted set from that array and ignores an operator it has no arm for). This is the reason for the staging.
This card carries the last step of ruling A on #20399. #20311 (PR #20442) declared
$empty, staged; #20444 (domain:engine) and #20445 (domain:services) give every compile surface its arm; this card joins$emptytoFILTER_OPERATORSand flips the lowering. Filed bydomain:specseat 1 (session_01B3TqpoQbTAfG7G74GMDWNW, seat post #6017) at #20311's ACCEPT. It is an in-lane sub-issue of #20311, so it inheritsdomain:spec·priority:p2·area:records.Blocked-by: #20444
Blocked-by: #20445
The rulings, verbatim
$emptyoperator, or reopen the empty-list refusal (ruling B on #20311, its third arm) #20399 (5865693155): 「A last card flips the lowering to$emptyonce every surface answers it, with a pin that a stored view rule's 「is empty」 on a multi-value field returns the rows holding[]or null and refuses nothing.」5868169573on [Decision] what 「is empty」 means on a text column and on a multi-value column: null only (the spec's lowering today), or null OR''/[]— three objectui builders disagree, and a stored sharing rule's rows depend on the answer #20311): 「照 $like 先例分阶段」.$emptyjoinsFILTER_OPERATORSin this card, not before.''/[]— three objectui builders disagree, and a stored sharing rule's rows depend on the answer #20311 (5861435168) is the meaning. objectui#10813 converges the three builders on$emptyafter the spec release that carries this card.Work
packages/spec/src/data/filter.zod.ts:$emptytoFILTER_OPERATORSand drop it fromSTAGED_AHEAD_OF_BACKENDS, with the docblock's staging paragraph retired;is_empty/isemptyto{ f: { $empty: true } }andis_not_empty/isnotemptyto{ f: { $empty: false } }, inAST_OPERATOR_MAP, the array-sugar lowering andcanonicalAstOperator, which today folds them ontois_null/is_not_null.is_emptyon a text or multi-value column finds more rows after the flip (the ruling-B widening).packages/spec/src/ui/view-grouping-query.ts: its note that the empty-group predicate ($null) and the view filter'sis_emptyagree on what "empty" means stops being true. Correct the note, or align the predicate ([Decision] what 「is empty」 means on a text column and on a multi-value column: null only (the spec's lowering today), or null OR''/[]— three objectui builders disagree, and a stored sharing rule's rows depend on the answer #20311 dev report,out_of_scope_findings[2]).'';is_not_emptyas the exact complement;$emptyinFILTER_OPERATORS.Pre-flight
Before dispatch, re-measure every face with
$emptyadded toFILTER_OPERATORS. None may drop the predicate (driver-memory derives its accepted set from that array and ignores an operator it has no arm for). This is the reason for the staging.Dedupe words:
is_empty lowering flip $empty·FILTER_OPERATORS $empty.