-
Notifications
You must be signed in to change notification settings - Fork 8.3k
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
[ES|QL] Batch of fixes and new features for autocomplete and validation #175986
Conversation
/ci |
/ci |
Pinging @elastic/kibana-visualizations (Team:Visualizations) |
/ci |
/ci |
…bana into fix/esql-various-fixes
/ci |
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.
Love all the fixes, I am just not so sure about the metadata validation and autocomplete.
@@ -341,6 +342,7 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ | |||
} | |||
return []; | |||
}, | |||
getMetaFields: async () => uiSettings?.get('metaFields') || [], |
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.
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.
Who decides what's a metafield or not?
Right now this information can be configured by Users/Admins into Kibana Settings, and we're using them already.
Let me ask the ES team where are they sourcing metadata fields.
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 get your point but I dont think that is correct to error out a query which is not wrong and is going to return results. I am pretty sure that there is a list we can use without retrieving this information from the ui setting.
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.
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've found in the ES source code a hardcoded list of metadata fields:
_version
_index
_source
_id
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.
Discussed offline with the ES ES|QL team and they suggested to adopt their own hardcoded list of fields.
Changed here 6faf762
packages/kbn-text-based-editor/src/text_based_languages_editor.tsx
Outdated
Show resolved
Hide resolved
packages/kbn-text-based-editor/src/text_based_languages_editor.tsx
Outdated
Show resolved
Hide resolved
packages/kbn-text-based-editor/src/text_based_languages_editor.tsx
Outdated
Show resolved
Hide resolved
/ci |
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.
Very nice enhancements Marco! LGTM! 💃
💚 Build SucceededMetrics [docs]Public APIs missing comments
Async chunks
Page load bundle
History
To update your PR or re-run it, just comment with: |
…on (elastic#175986) ## Summary This PR is a batch of fixes and (tiny) new features for validation and autocomplete items in ES|QL client side area. Content of the PR: * 🐛 remove array/multi-value definition annotation for `mv_*` functions - fix elastic#174709 <img width="305" alt="Screenshot 2024-01-31 at 13 43 37" src="https://github.com/elastic/kibana/assets/924948/2a458e74-9c87-4a67-8b42-0071e7a04f48"> <img width="287" alt="Screenshot 2024-01-31 at 13 43 25" src="https://github.com/elastic/kibana/assets/924948/7205d984-d0c9-410b-8b39-c1d530c3f54f"> * while the type check has been relaxed for lists, the actual non-multivalued argument type is retained and used for validation <img width="758" alt="Screenshot 2024-01-31 at 13 44 06" src="https://github.com/elastic/kibana/assets/924948/384e9dfa-aaf8-4e0f-953e-a2d656776ea7"> * 🐛 Remove array/multi-value definition annotation for `mv_expand` command - fix elastic#174709 <img width="556" alt="Screenshot 2024-01-31 at 14 36 19" src="https://github.com/elastic/kibana/assets/924948/0debbccc-da9a-4e6a-bfc9-3fded61300b5"> <img width="277" alt="Screenshot 2024-01-31 at 14 36 13" src="https://github.com/elastic/kibana/assets/924948/9438832b-d8d5-48c5-a030-b8983057546e"> * ✨ add metadata fields validation + autocomplete (fields are retrieved via Kibana `uiSettings`) ( part of elastic#172646 )  <img width="760" alt="Screenshot 2024-01-31 at 13 45 43" src="https://github.com/elastic/kibana/assets/924948/b3f13d99-3e12-4586-b39c-f4ea3691a2f1"> * ✨ Quick fixes now available also for metadata fields  * 🐛 fixed autocomplete for `NOT` operation <img width="549" alt="Screenshot 2024-01-31 at 13 46 43" src="https://github.com/elastic/kibana/assets/924948/29b7aa7c-db66-485a-a5b0-329e66df842f"> * fixed autocomplete for `in` operation, with or without `not`: * ✨ now a missing list bracket is correctly detected and suggested after `in` * ✨ the content for the list is suggested and takes into account both the left side of the `in`/`not in` operator, but also the current content of the list    * fixed `grok` and `dissect` in various ways *:sparkles: the pattern provided by autocomplete for both was not valid in `dissect` nor useful at all, so I've changed to something more useful like `'"%{WORD:firstWord}"'` for `grok` and `'"%{firstWord}"'` for `dissect` to match the first word in the text field. * :bug: there was a bug in the validation engine as both `grok` and `dissect` could generate new columns based on matches, so now a new field query is fired (only when either a `GROK` or a `DISSECT` command is detected) which enriches the set of fields available (similar to the enrich fields) * ✅ Added tons of tests here   * 🐛 fixed an issue with proposing an assign (`=`) operator when it should not * `... EVAL var0 = round( ...) <here>` not within another assignment * `... EVAL var0 = 1 <here>` not within another assignment * `... EVAL var0 = 1 year + 2 <here>` not within another assignment * `... | WHERE field` should not shadow a field name in this case * 🐛 fix an annoying auto trigger suggestion on field selection, and kept it only for functions  * 🐛 fixed an error in console with autocomplete when a typed function does not exists * ✅ Add tests for the hover feature * 🔥 Removed some unused functions detected via code coverage analysis ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --------- Co-authored-by: Stratoula Kalafateli <[email protected]>
…on (elastic#175986) ## Summary This PR is a batch of fixes and (tiny) new features for validation and autocomplete items in ES|QL client side area. Content of the PR: * 🐛 remove array/multi-value definition annotation for `mv_*` functions - fix elastic#174709 <img width="305" alt="Screenshot 2024-01-31 at 13 43 37" src="https://github.com/elastic/kibana/assets/924948/2a458e74-9c87-4a67-8b42-0071e7a04f48"> <img width="287" alt="Screenshot 2024-01-31 at 13 43 25" src="https://github.com/elastic/kibana/assets/924948/7205d984-d0c9-410b-8b39-c1d530c3f54f"> * while the type check has been relaxed for lists, the actual non-multivalued argument type is retained and used for validation <img width="758" alt="Screenshot 2024-01-31 at 13 44 06" src="https://github.com/elastic/kibana/assets/924948/384e9dfa-aaf8-4e0f-953e-a2d656776ea7"> * 🐛 Remove array/multi-value definition annotation for `mv_expand` command - fix elastic#174709 <img width="556" alt="Screenshot 2024-01-31 at 14 36 19" src="https://github.com/elastic/kibana/assets/924948/0debbccc-da9a-4e6a-bfc9-3fded61300b5"> <img width="277" alt="Screenshot 2024-01-31 at 14 36 13" src="https://github.com/elastic/kibana/assets/924948/9438832b-d8d5-48c5-a030-b8983057546e"> * ✨ add metadata fields validation + autocomplete (fields are retrieved via Kibana `uiSettings`) ( part of elastic#172646 )  <img width="760" alt="Screenshot 2024-01-31 at 13 45 43" src="https://github.com/elastic/kibana/assets/924948/b3f13d99-3e12-4586-b39c-f4ea3691a2f1"> * ✨ Quick fixes now available also for metadata fields  * 🐛 fixed autocomplete for `NOT` operation <img width="549" alt="Screenshot 2024-01-31 at 13 46 43" src="https://github.com/elastic/kibana/assets/924948/29b7aa7c-db66-485a-a5b0-329e66df842f"> * fixed autocomplete for `in` operation, with or without `not`: * ✨ now a missing list bracket is correctly detected and suggested after `in` * ✨ the content for the list is suggested and takes into account both the left side of the `in`/`not in` operator, but also the current content of the list    * fixed `grok` and `dissect` in various ways *:sparkles: the pattern provided by autocomplete for both was not valid in `dissect` nor useful at all, so I've changed to something more useful like `'"%{WORD:firstWord}"'` for `grok` and `'"%{firstWord}"'` for `dissect` to match the first word in the text field. * :bug: there was a bug in the validation engine as both `grok` and `dissect` could generate new columns based on matches, so now a new field query is fired (only when either a `GROK` or a `DISSECT` command is detected) which enriches the set of fields available (similar to the enrich fields) * ✅ Added tons of tests here   * 🐛 fixed an issue with proposing an assign (`=`) operator when it should not * `... EVAL var0 = round( ...) <here>` not within another assignment * `... EVAL var0 = 1 <here>` not within another assignment * `... EVAL var0 = 1 year + 2 <here>` not within another assignment * `... | WHERE field` should not shadow a field name in this case * 🐛 fix an annoying auto trigger suggestion on field selection, and kept it only for functions  * 🐛 fixed an error in console with autocomplete when a typed function does not exists * ✅ Add tests for the hover feature * 🔥 Removed some unused functions detected via code coverage analysis ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --------- Co-authored-by: Stratoula Kalafateli <[email protected]>
…on (elastic#175986) ## Summary This PR is a batch of fixes and (tiny) new features for validation and autocomplete items in ES|QL client side area. Content of the PR: * 🐛 remove array/multi-value definition annotation for `mv_*` functions - fix elastic#174709 <img width="305" alt="Screenshot 2024-01-31 at 13 43 37" src="https://github.com/elastic/kibana/assets/924948/2a458e74-9c87-4a67-8b42-0071e7a04f48"> <img width="287" alt="Screenshot 2024-01-31 at 13 43 25" src="https://github.com/elastic/kibana/assets/924948/7205d984-d0c9-410b-8b39-c1d530c3f54f"> * while the type check has been relaxed for lists, the actual non-multivalued argument type is retained and used for validation <img width="758" alt="Screenshot 2024-01-31 at 13 44 06" src="https://github.com/elastic/kibana/assets/924948/384e9dfa-aaf8-4e0f-953e-a2d656776ea7"> * 🐛 Remove array/multi-value definition annotation for `mv_expand` command - fix elastic#174709 <img width="556" alt="Screenshot 2024-01-31 at 14 36 19" src="https://github.com/elastic/kibana/assets/924948/0debbccc-da9a-4e6a-bfc9-3fded61300b5"> <img width="277" alt="Screenshot 2024-01-31 at 14 36 13" src="https://github.com/elastic/kibana/assets/924948/9438832b-d8d5-48c5-a030-b8983057546e"> * ✨ add metadata fields validation + autocomplete (fields are retrieved via Kibana `uiSettings`) ( part of elastic#172646 )  <img width="760" alt="Screenshot 2024-01-31 at 13 45 43" src="https://github.com/elastic/kibana/assets/924948/b3f13d99-3e12-4586-b39c-f4ea3691a2f1"> * ✨ Quick fixes now available also for metadata fields  * 🐛 fixed autocomplete for `NOT` operation <img width="549" alt="Screenshot 2024-01-31 at 13 46 43" src="https://github.com/elastic/kibana/assets/924948/29b7aa7c-db66-485a-a5b0-329e66df842f"> * fixed autocomplete for `in` operation, with or without `not`: * ✨ now a missing list bracket is correctly detected and suggested after `in` * ✨ the content for the list is suggested and takes into account both the left side of the `in`/`not in` operator, but also the current content of the list    * fixed `grok` and `dissect` in various ways *:sparkles: the pattern provided by autocomplete for both was not valid in `dissect` nor useful at all, so I've changed to something more useful like `'"%{WORD:firstWord}"'` for `grok` and `'"%{firstWord}"'` for `dissect` to match the first word in the text field. * :bug: there was a bug in the validation engine as both `grok` and `dissect` could generate new columns based on matches, so now a new field query is fired (only when either a `GROK` or a `DISSECT` command is detected) which enriches the set of fields available (similar to the enrich fields) * ✅ Added tons of tests here   * 🐛 fixed an issue with proposing an assign (`=`) operator when it should not * `... EVAL var0 = round( ...) <here>` not within another assignment * `... EVAL var0 = 1 <here>` not within another assignment * `... EVAL var0 = 1 year + 2 <here>` not within another assignment * `... | WHERE field` should not shadow a field name in this case * 🐛 fix an annoying auto trigger suggestion on field selection, and kept it only for functions  * 🐛 fixed an error in console with autocomplete when a typed function does not exists * ✅ Add tests for the hover feature * 🔥 Removed some unused functions detected via code coverage analysis ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --------- Co-authored-by: Stratoula Kalafateli <[email protected]>
Summary
This PR is a batch of fixes and (tiny) new features for validation and autocomplete items in ES|QL client side area.
Content of the PR:
🐛 remove array/multi-value definition annotation for


mv_*
functions - fix [ES|QL] Use non array types for multi-value functions #174709🐛 Remove array/multi-value definition annotation for
mv_expand
command - fix [ES|QL] Use non array types for multi-value functions #174709✨ add metadata fields validation + autocomplete (fields are retrieved via Kibana
uiSettings
) ( part of [ES|QL] New grammar follow up tasks #172646 )🐛 fixed autocomplete for
NOT
operationfixed autocomplete for
in
operation, with or withoutnot
:in
in
/not in
operator, but also the current content of the listfixed
grok
anddissect
in various ways*:sparkles: the pattern provided by autocomplete for both was not valid in
dissect
nor useful at all, so I've changed to something more useful like'"%{WORD:firstWord}"'
forgrok
and'"%{firstWord}"'
fordissect
to match the first word in the text field.grok
anddissect
could generate new columns based on matches, so now a new field query is fired (only when either aGROK
or aDISSECT
command is detected) which enriches the set of fields available (similar to the enrich fields)🐛 fixed an issue with proposing an assign (
=
) operator when it should not... EVAL var0 = round( ...) <here>
not within another assignment... EVAL var0 = 1 <here>
not within another assignment... EVAL var0 = 1 year + 2 <here>
not within another assignment... | WHERE field
should not shadow a field name in this case🐛 fix an annoying auto trigger suggestion on field selection, and kept it only for functions

🐛 fixed an error in console with autocomplete when a typed function does not exists
✅ Add tests for the hover feature
🔥 Removed some unused functions detected via code coverage analysis
Checklist