-
Notifications
You must be signed in to change notification settings - Fork 4.9k
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
Support Offset()
in custom columns [frontend]
#42326
Support Offset()
in custom columns [frontend]
#42326
Conversation
- Rename identifiers in isCompatible - Make isCompatible accept a clause object instead of just the type - Handle offset as a special case in isCompatible
@@ -303,6 +291,18 @@ export const MBQL_CLAUSES: MBQLClauseMap = { | |||
args: ["expression", "expression"], // ideally we'd alternate boolean/expression | |||
multiple: true, | |||
}, | |||
offset: { | |||
displayName: `Offset`, | |||
type: "any", // ideally we'd dynamically infer it from the first argument |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I moved the definition from aggregations section closer to somewhat similar functions (coalesce
and case
) and changed the return type
to "any"
, since offset
will return the same type as it receives as the first argument (which is "any"
).
// and b is the inferred type of the argument | ||
const isCompatible = (a, b) => { | ||
if (a === "any") { | ||
const isCompatible = (expectedType, inferredType) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I renamed a
& b
to something more meaningful (which was previously conveyed in a comment).
This reverts commit e63790b.
adjustOffset, | ||
adjustCase, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The order matters. This fixes #42377
const isCompatible = (a, b) => { | ||
if (a === "any") { | ||
const isCompatible = (expectedType, inferredType) => { | ||
if (expectedType === "any" || inferredType === "any") { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The second part of the condition is new, the rest of the function works the same as before
|
The code looks good! Works as expected in the when there is a order by clause, but running the query breaks when it is absent. |
* [MBQL lib] Reject broken uses of `offset` in expressions, filters (#42662) - Using `offset` in custom expressions is supported only when there is an order-by defined on that stage. - Using `offset` in custom filters is not supported at all, currently. * Support `Offset()` in custom columns [frontend] (#42326) * Only nest expressions referenced in breakouts or aggregations * Support Offset() as expression with no breakouts * Test fixes 🔧 * Oracle test update * Improved Oracle test * Test update 🔧 * Fix busted test * Add naive support for Offset() in expressions * Introduce MBQLClauseFunctionReturnType * Add "window" to MBQLClauseFunctionReturnType and use it for the offset function * Handle offset type inference * Remove unused export * Use "expression" instead of "window" return type - Rename identifiers in isCompatible - Make isCompatible accept a clause object instead of just the type - Handle offset as a special case in isCompatible * Use any type * Rename expectedArgumentType to expectedType * Format code * Sort types * Do not suggest offset function in filters * Fix offset not working in case * Revert "Do not suggest offset function in filters" This reverts commit e63790b. * Fix order of adjustments --------- Co-authored-by: Cam Saul <github@camsaul.com> Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com> * Disable offsets in filters expressions * Group existing aggregations-specific tests * Remove repro for a closed issue * Use findByText instead of contains * Add a test for filter expressions * Add a test for aggregation expressions suggestions * Disable offsets in filters expressions (#42755) * Add a test for custom column suggestions * Add "typing" to enterCustomColumnDetails * Use enterCustomColumnDetails, improve assertions * Add more assertions * Optimize queries * Add typing for offset expressions * Add a repro for #42764 * Add a TODO * Add a TODO * Add a TODO * Use NumericLiteral * Post-merge fixes * Update test * Add tests for other custom expressions * Test drills * Format code * Update test name * Add an assertion * Add assertions for the preview * Unskip fixed issue --------- Co-authored-by: Braden Shepherdson <braden@metabase.com> Co-authored-by: Cam Saul <github@camsaul.com> Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
* [MBQL lib] Reject broken uses of `offset` in expressions, filters (#42662) - Using `offset` in custom expressions is supported only when there is an order-by defined on that stage. - Using `offset` in custom filters is not supported at all, currently. * Support `Offset()` in custom columns [frontend] (#42326) * Only nest expressions referenced in breakouts or aggregations * Support Offset() as expression with no breakouts * Test fixes 🔧 * Oracle test update * Improved Oracle test * Test update 🔧 * Fix busted test * Add naive support for Offset() in expressions * Introduce MBQLClauseFunctionReturnType * Add "window" to MBQLClauseFunctionReturnType and use it for the offset function * Handle offset type inference * Remove unused export * Use "expression" instead of "window" return type - Rename identifiers in isCompatible - Make isCompatible accept a clause object instead of just the type - Handle offset as a special case in isCompatible * Use any type * Rename expectedArgumentType to expectedType * Format code * Sort types * Do not suggest offset function in filters * Fix offset not working in case * Revert "Do not suggest offset function in filters" This reverts commit e63790b. * Fix order of adjustments --------- Co-authored-by: Cam Saul <github@camsaul.com> Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com> * Disable offsets in filters expressions * Group existing aggregations-specific tests * Remove repro for a closed issue * Use findByText instead of contains * Add a test for filter expressions * Add a test for aggregation expressions suggestions * Disable offsets in filters expressions (#42755) * Add a test for custom column suggestions * Add "typing" to enterCustomColumnDetails * Use enterCustomColumnDetails, improve assertions * Add more assertions * Optimize queries * Add typing for offset expressions * Add a repro for #42764 * Add a TODO * Add a TODO * Add a TODO * Use NumericLiteral * Post-merge fixes * Update test * Add tests for other custom expressions * Test drills * Format code * Update test name * Add an assertion * Add assertions for the preview * Unskip fixed issue --------- Co-authored-by: Braden Shepherdson <braden@metabase.com> Co-authored-by: Cam Saul <github@camsaul.com> Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
* [MBQL lib] Reject broken uses of `offset` in expressions, filters (#42662) - Using `offset` in custom expressions is supported only when there is an order-by defined on that stage. - Using `offset` in custom filters is not supported at all, currently. * Support `Offset()` in custom columns [frontend] (#42326) * Only nest expressions referenced in breakouts or aggregations * Support Offset() as expression with no breakouts * Test fixes 🔧 * Oracle test update * Improved Oracle test * Test update 🔧 * Fix busted test * Add naive support for Offset() in expressions * Introduce MBQLClauseFunctionReturnType * Add "window" to MBQLClauseFunctionReturnType and use it for the offset function * Handle offset type inference * Remove unused export * Use "expression" instead of "window" return type - Rename identifiers in isCompatible - Make isCompatible accept a clause object instead of just the type - Handle offset as a special case in isCompatible * Use any type * Rename expectedArgumentType to expectedType * Format code * Sort types * Do not suggest offset function in filters * Fix offset not working in case * Revert "Do not suggest offset function in filters" This reverts commit e63790b. * Fix order of adjustments --------- * Disable offsets in filters expressions * Group existing aggregations-specific tests * Remove repro for a closed issue * Use findByText instead of contains * Add a test for filter expressions * Add a test for aggregation expressions suggestions * Disable offsets in filters expressions (#42755) * Add a test for custom column suggestions * Add "typing" to enterCustomColumnDetails * Use enterCustomColumnDetails, improve assertions * Add more assertions * Optimize queries * Add typing for offset expressions * Add a repro for #42764 * Add a TODO * Add a TODO * Add a TODO * Use NumericLiteral * Post-merge fixes * Update test * Add tests for other custom expressions * Test drills * Format code * Update test name * Add an assertion * Add assertions for the preview * Unskip fixed issue --------- Co-authored-by: Kamil Mielnik <kamil@kamilmielnik.com> Co-authored-by: Braden Shepherdson <braden@metabase.com> Co-authored-by: Cam Saul <github@camsaul.com> Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
Closes #42318
Fixes #42377
How to verify
Offset([Total], -3)