From 788e9b34dd1414eec8c9c4f186e457ebfe6db183 Mon Sep 17 00:00:00 2001 From: Stratoula Kalafateli Date: Thu, 1 Aug 2024 17:39:46 +0200 Subject: [PATCH 01/25] [ES|QL] Initialize with time named params for dataviews without @timestamp (#189367) ## Summary Closes https://github.com/elastic/kibana/issues/189032 For indices with no @timestamp, when the users are transitioning from the dataview mode to the ES|QL mode then we are defaulting to ``` from dataviewIndex | where dataviewTimefield <= ?end and dataviewTimefield >= ?start ``` ![meow](https://github.com/user-attachments/assets/d55e17d1-d867-400a-b6eb-b7cf7047d070) which will : 1. Train the users for the named params 2. Enable the histogram 3. Enable the datepicker ### Checklist - [ ] [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: Julia Rechkunova --- .../src/utils/get_initial_esql_query.test.ts | 93 ++++++++++++++++++- .../src/utils/get_initial_esql_query.ts | 17 +++- src/plugins/discover/common/esql_locator.ts | 12 +-- .../application/main/discover_main_route.tsx | 2 +- .../public/global_search/search_provider.ts | 2 +- src/plugins/discover/public/plugin.tsx | 2 +- .../dataview_picker/change_dataview.tsx | 23 +++-- .../open_lens_config/create_action_helpers.ts | 7 +- 8 files changed, 133 insertions(+), 25 deletions(-) diff --git a/packages/kbn-esql-utils/src/utils/get_initial_esql_query.test.ts b/packages/kbn-esql-utils/src/utils/get_initial_esql_query.test.ts index 45aac1344725d..26d3b1c0c4a89 100644 --- a/packages/kbn-esql-utils/src/utils/get_initial_esql_query.test.ts +++ b/packages/kbn-esql-utils/src/utils/get_initial_esql_query.test.ts @@ -5,11 +5,98 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ - +import type { DataView } from '@kbn/data-views-plugin/public'; import { getInitialESQLQuery } from './get_initial_esql_query'; +const getDataView = (name: string, dataViewFields: DataView['fields'], timeFieldName?: string) => { + dataViewFields.getByName = (fieldName: string) => { + return dataViewFields.find((field) => field.name === fieldName); + }; + return { + id: `${name}-id`, + title: name, + metaFields: ['_index', '_score'], + fields: dataViewFields, + type: 'default', + getName: () => name, + getIndexPattern: () => name, + getFieldByName: jest.fn((fieldName: string) => dataViewFields.getByName(fieldName)), + timeFieldName, + isPersisted: () => true, + toSpec: () => ({}), + toMinimalSpec: () => ({}), + } as unknown as DataView; +}; + describe('getInitialESQLQuery', () => { - it('should work correctly', () => { - expect(getInitialESQLQuery('logs*')).toBe('FROM logs* | LIMIT 10'); + it('should NOT add the where clause if there is @timestamp in the index', () => { + const fields = [ + { + name: '@timestamp', + displayName: '@timestamp', + type: 'date', + scripted: false, + filterable: true, + aggregatable: true, + sortable: true, + }, + { + name: 'message', + displayName: 'message', + type: 'string', + scripted: false, + filterable: false, + }, + ] as DataView['fields']; + const dataView = getDataView('logs*', fields, '@timestamp'); + expect(getInitialESQLQuery(dataView)).toBe('FROM logs* | LIMIT 10'); + }); + + it('should NOT add the where clause if there is @timestamp in the index although the dataview timefielName is different', () => { + const fields = [ + { + name: '@timestamp', + displayName: '@timestamp', + type: 'date', + scripted: false, + filterable: true, + aggregatable: true, + sortable: true, + }, + { + name: 'message', + displayName: 'message', + type: 'string', + scripted: false, + filterable: false, + }, + ] as DataView['fields']; + const dataView = getDataView('logs*', fields, 'timestamp'); + expect(getInitialESQLQuery(dataView)).toBe('FROM logs* | LIMIT 10'); + }); + + it('should append a where clause correctly if there is no @timestamp in the index fields', () => { + const fields = [ + { + name: '@custom_timestamp', + displayName: '@custom_timestamp', + type: 'date', + scripted: false, + filterable: true, + aggregatable: true, + sortable: true, + }, + { + name: 'message', + displayName: 'message', + type: 'string', + scripted: false, + filterable: false, + }, + ] as DataView['fields']; + const dataView = getDataView('logs*', fields, '@custom_timestamp'); + expect(getInitialESQLQuery(dataView)).toBe( + 'FROM logs* | WHERE @custom_timestamp >= ?start AND @custom_timestamp <= ?end | LIMIT 10' + ); }); }); diff --git a/packages/kbn-esql-utils/src/utils/get_initial_esql_query.ts b/packages/kbn-esql-utils/src/utils/get_initial_esql_query.ts index 302f3c364f1a6..1d78432b14269 100644 --- a/packages/kbn-esql-utils/src/utils/get_initial_esql_query.ts +++ b/packages/kbn-esql-utils/src/utils/get_initial_esql_query.ts @@ -5,11 +5,20 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ +import type { DataView } from '@kbn/data-views-plugin/public'; /** - * Builds an ES|QL query for the provided index or index pattern - * @param indexOrIndexPattern + * Builds an ES|QL query for the provided dataView + * If there is @timestamp field in the index, we don't add the WHERE clause + * If there is no @timestamp and there is a dataView timeFieldName, we add the WHERE clause with the timeFieldName + * @param dataView */ -export function getInitialESQLQuery(indexOrIndexPattern: string): string { - return `FROM ${indexOrIndexPattern} | LIMIT 10`; +export function getInitialESQLQuery(dataView: DataView): string { + const hasAtTimestampField = dataView?.fields?.getByName?.('@timestamp')?.type === 'date'; + const timeFieldName = dataView?.timeFieldName; + const filterByTimeParams = + !hasAtTimestampField && timeFieldName + ? ` | WHERE ${timeFieldName} >= ?start AND ${timeFieldName} <= ?end` + : ''; + return `FROM ${dataView.getIndexPattern()}${filterByTimeParams} | LIMIT 10`; } diff --git a/src/plugins/discover/common/esql_locator.ts b/src/plugins/discover/common/esql_locator.ts index fa7ca618e5bf9..ce4c772cc676c 100644 --- a/src/plugins/discover/common/esql_locator.ts +++ b/src/plugins/discover/common/esql_locator.ts @@ -9,14 +9,14 @@ import { DISCOVER_ESQL_LOCATOR } from '@kbn/deeplinks-analytics'; import { LocatorDefinition, LocatorPublic } from '@kbn/share-plugin/common'; import { SerializableRecord } from '@kbn/utility-types'; -import { getIndexForESQLQuery, getInitialESQLQuery } from '@kbn/esql-utils'; +import { getIndexForESQLQuery, getInitialESQLQuery, getESQLAdHocDataview } from '@kbn/esql-utils'; import type { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; export type DiscoverESQLLocatorParams = SerializableRecord; export interface DiscoverESQLLocatorDependencies { discoverAppLocator: LocatorPublic; - getIndices: DataViewsPublicPluginStart['getIndices']; + dataViews: DataViewsPublicPluginStart; } export type DiscoverESQLLocator = LocatorPublic; @@ -27,10 +27,10 @@ export class DiscoverESQLLocatorDefinition implements LocatorDefinition { - const { discoverAppLocator, getIndices } = this.deps; - - const indexName = await getIndexForESQLQuery({ dataViews: { getIndices } }); - const esql = getInitialESQLQuery(indexName ?? '*'); + const { discoverAppLocator, dataViews } = this.deps; + const indexName = (await getIndexForESQLQuery({ dataViews })) ?? '*'; + const dataView = await getESQLAdHocDataview(`from ${indexName}`, dataViews); + const esql = getInitialESQLQuery(dataView); const params = { query: { esql }, diff --git a/src/plugins/discover/public/application/main/discover_main_route.tsx b/src/plugins/discover/public/application/main/discover_main_route.tsx index f37487b6b93b7..0e1c1472ac556 100644 --- a/src/plugins/discover/public/application/main/discover_main_route.tsx +++ b/src/plugins/discover/public/application/main/discover_main_route.tsx @@ -377,7 +377,7 @@ function getLoadParamsForNewSearch(stateContainer: DiscoverStateContainer): { ? { // reset to a default ES|QL query query: { - esql: getInitialESQLQuery(prevDataView.getIndexPattern()), + esql: getInitialESQLQuery(prevDataView), }, } : undefined; diff --git a/src/plugins/discover/public/global_search/search_provider.ts b/src/plugins/discover/public/global_search/search_provider.ts index d4a21e9603a3c..e9b6bb6f048a5 100644 --- a/src/plugins/discover/public/global_search/search_provider.ts +++ b/src/plugins/discover/public/global_search/search_provider.ts @@ -50,7 +50,7 @@ export const getESQLSearchProvider: ( const params = { query: { - esql: getInitialESQLQuery(defaultDataView?.getIndexPattern()), + esql: getInitialESQLQuery(defaultDataView), }, dataViewSpec: defaultDataView?.toSpec(), }; diff --git a/src/plugins/discover/public/plugin.tsx b/src/plugins/discover/public/plugin.tsx index fcce348a319d1..d81bacb958d38 100644 --- a/src/plugins/discover/public/plugin.tsx +++ b/src/plugins/discover/public/plugin.tsx @@ -278,7 +278,7 @@ export class DiscoverPlugin plugins.share?.url.locators.create( new DiscoverESQLLocatorDefinition({ discoverAppLocator: this.locator, - getIndices: plugins.dataViews.getIndices, + dataViews: plugins.dataViews, }) ); } diff --git a/src/plugins/unified_search/public/dataview_picker/change_dataview.tsx b/src/plugins/unified_search/public/dataview_picker/change_dataview.tsx index 4afa5f84997ee..466b75ba140a1 100644 --- a/src/plugins/unified_search/public/dataview_picker/change_dataview.tsx +++ b/src/plugins/unified_search/public/dataview_picker/change_dataview.tsx @@ -92,7 +92,7 @@ export function ChangeDataView({ Boolean(textBasedLanguage) ); const [isTextLangTransitionModalVisible, setIsTextLangTransitionModalVisible] = useState(false); - const [selectedDataViewId, setSelectedDataViewId] = useState(currentDataViewId); + const [selectedDataView, setSelectedDataView] = useState(undefined); const kibana = useKibana(); const { application, data, storage, dataViews, dataViewEditor, appName, usageCollection } = @@ -117,6 +117,10 @@ export function ChangeDataView({ adHocDataViews?.map(mapAdHocDataView) ?? []; setDataViewsList(savedDataViewRefs.concat(adHocDataViewRefs)); + if (currentDataViewId) { + const currentDataview = await data.dataViews.get(currentDataViewId, false); + setSelectedDataView(currentDataview); + } }; fetchDataViews(); }, [data, currentDataViewId, adHocDataViews, savedDataViews, isTextBasedLangSelected]); @@ -308,7 +312,8 @@ export function ChangeDataView({ isTextBasedLangSelected={isTextBasedLangSelected} setPopoverIsOpen={setPopoverIsOpen} onChangeDataView={async (newId) => { - setSelectedDataViewId(newId); + const currentDataview = await data.dataViews.get(newId, false); + setSelectedDataView(currentDataview); setPopoverIsOpen(false); if (isTextBasedLangSelected) { @@ -348,7 +353,13 @@ export function ChangeDataView({ color="success" size="s" fullWidth - onClick={() => onTextBasedSubmit({ esql: getInitialESQLQuery(trigger.title!) })} + onClick={() => { + if (selectedDataView) { + onTextBasedSubmit({ + esql: getInitialESQLQuery(selectedDataView), + }); + } + }} data-test-subj="select-text-based-language-panel" contentProps={{ css: { @@ -393,8 +404,8 @@ export function ChangeDataView({ language: 'kuery', query: '', }); - if (selectedDataViewId) { - onChangeDataView(selectedDataViewId); + if (selectedDataView?.id) { + onChangeDataView(selectedDataView?.id); } setTriggerLabel(trigger.label); if (shouldDismissModal) { @@ -405,7 +416,7 @@ export function ChangeDataView({ onChangeDataView, onTextLangQuerySubmit, onTransitionModalDismiss, - selectedDataViewId, + selectedDataView?.id, trigger.label, ] ); diff --git a/x-pack/plugins/lens/public/trigger_actions/open_lens_config/create_action_helpers.ts b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/create_action_helpers.ts index 8768bc721480d..96cd0ab6877e3 100644 --- a/x-pack/plugins/lens/public/trigger_actions/open_lens_config/create_action_helpers.ts +++ b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/create_action_helpers.ts @@ -14,6 +14,7 @@ import { getIndexForESQLQuery, ENABLE_ESQL, getESQLQueryColumns, + getInitialESQLQuery, } from '@kbn/esql-utils'; import type { Datasource, Visualization } from '../../types'; import type { LensPluginStartDependencies } from '../../plugin'; @@ -81,10 +82,10 @@ export async function executeCreateAction({ setVisualizationMap(visualizationMap); } - const defaultIndex = dataView.getIndexPattern(); + const esqlQuery = getInitialESQLQuery(dataView); const defaultEsqlQuery = { - esql: `FROM ${defaultIndex} | LIMIT 10`, + esql: esqlQuery, }; // For the suggestions api we need only the columns @@ -93,7 +94,7 @@ export async function executeCreateAction({ // all the table const abortController = new AbortController(); const columns = await getESQLQueryColumns({ - esqlQuery: `from ${defaultIndex}`, + esqlQuery, search: deps.data.search.search, signal: abortController.signal, timeRange: deps.data.query.timefilter.timefilter.getAbsoluteTime(), From 7dca2aa7126128dabb9a390071e39b1d261d9086 Mon Sep 17 00:00:00 2001 From: "Quynh Nguyen (Quinn)" <43350163+qn895@users.noreply.github.com> Date: Thu, 1 Aug 2024 11:04:21 -0500 Subject: [PATCH 02/25] [ES|QL] Improved support for Elasticsearch sub-types in AST for both validation and autocomplete (#189689) ## Summary Fixed version of https://github.com/elastic/kibana/pull/188600 that updates the failed tests [caused by clash with the visitor API tests](https://github.com/elastic/kibana/pull/189516). ### Checklist Delete any items that are not applicable to this PR. - [ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [ ] [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 - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [ ] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [ ] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker) - [ ] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [ ] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) ### Risk Matrix Delete this section if it is not applicable to this PR. Before closing this PR, invite QA, stakeholders, and other developers to identify risks that should be tested prior to the change/feature release. When forming the risk matrix, consider some of the following examples and how they may potentially impact the change: | Risk | Probability | Severity | Mitigation/Notes | |---------------------------|-------------|----------|-------------------------| | Multiple Spaces—unexpected behavior in non-default Kibana Space. | Low | High | Integration tests will verify that all features are still supported in non-default Kibana Space and when user switches between spaces. | | Multiple nodes—Elasticsearch polling might have race conditions when multiple Kibana nodes are polling for the same tasks. | High | Low | Tasks are idempotent, so executing them multiple times will not result in logical error, but will degrade performance. To test for this case we add plenty of unit tests around this logic and document manual testing procedure. | | Code should gracefully handle cases when feature X or plugin Y are disabled. | Medium | High | Unit tests will verify that any feature flag or plugin combination still results in our service operational. | | [See more potential risk examples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx) | ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Elastic Machine --- .../src/__tests__/ast_parser.literal.test.ts | 2 +- packages/kbn-esql-ast/src/ast_factory.ts | 2 +- packages/kbn-esql-ast/src/ast_helpers.ts | 23 +- packages/kbn-esql-ast/src/ast_walker.ts | 19 +- .../kbn-esql-ast/src/builder/index.test.ts | 2 +- packages/kbn-esql-ast/src/builder/index.ts | 16 +- packages/kbn-esql-ast/src/types.ts | 17 +- packages/kbn-esql-ast/src/visitor/contexts.ts | 11 +- .../kbn-esql-ast/src/walker/walker.test.ts | 28 +- .../scripts/generate_function_definitions.ts | 5 +- .../generate_function_validation_tests.ts | 92 +- .../src/__tests__/helpers.ts | 10 +- .../autocomplete.command.stats.test.ts | 107 +- .../src/autocomplete/__tests__/helpers.ts | 6 +- .../src/autocomplete/autocomplete.test.ts | 379 +- .../src/autocomplete/autocomplete.ts | 27 +- .../src/autocomplete/factories.ts | 5 +- .../src/autocomplete/helper.ts | 12 + .../src/definitions/aggs.ts | 140 +- .../src/definitions/builtin.ts | 220 +- .../src/definitions/commands.ts | 4 +- .../src/definitions/functions.ts | 6294 +++- .../src/definitions/grouping.ts | 118 +- .../src/definitions/types.ts | 42 +- .../src/shared/esql_to_kibana_type.ts | 44 - .../src/shared/esql_types.ts | 49 + .../src/shared/helpers.ts | 57 +- .../src/shared/variables.ts | 6 +- .../src/validation/__tests__/helpers.ts | 17 +- .../test_suites/validation.command.metrics.ts | 80 +- .../test_suites/validation.command.stats.ts | 153 +- .../validation.eval.date_diff.test.ts | 56 + .../__tests__/validation.params.test.ts | 14 +- .../esql_validation_meta_tests.json | 24350 +++++++++++----- .../src/validation/validation.test.ts | 14895 ++++++---- .../src/validation/validation.ts | 2 + .../src/ecs_metadata_helper.test.ts | 28 +- .../src/ecs_metadata_helper.ts | 7 +- .../src/text_based_languages_editor.tsx | 9 +- packages/kbn-text-based-editor/tsconfig.json | 1 - test/api_integration/apis/esql/errors.ts | 12 +- 41 files changed, 31848 insertions(+), 15513 deletions(-) delete mode 100644 packages/kbn-esql-validation-autocomplete/src/shared/esql_to_kibana_type.ts create mode 100644 packages/kbn-esql-validation-autocomplete/src/shared/esql_types.ts create mode 100644 packages/kbn-esql-validation-autocomplete/src/validation/__tests__/validation.eval.date_diff.test.ts diff --git a/packages/kbn-esql-ast/src/__tests__/ast_parser.literal.test.ts b/packages/kbn-esql-ast/src/__tests__/ast_parser.literal.test.ts index 9b966905308d7..1f941c49f0fbe 100644 --- a/packages/kbn-esql-ast/src/__tests__/ast_parser.literal.test.ts +++ b/packages/kbn-esql-ast/src/__tests__/ast_parser.literal.test.ts @@ -17,7 +17,7 @@ describe('literal expression', () => { expect(literal).toMatchObject({ type: 'literal', - literalType: 'number', + literalType: 'integer', name: '1', value: 1, }); diff --git a/packages/kbn-esql-ast/src/ast_factory.ts b/packages/kbn-esql-ast/src/ast_factory.ts index f389be63b3afd..cd73bc79a3887 100644 --- a/packages/kbn-esql-ast/src/ast_factory.ts +++ b/packages/kbn-esql-ast/src/ast_factory.ts @@ -205,7 +205,7 @@ export class AstListener implements ESQLParserListener { const command = createCommand('limit', ctx); this.ast.push(command); if (ctx.getToken(esql_parser.INTEGER_LITERAL, 0)) { - const literal = createLiteral('number', ctx.INTEGER_LITERAL()); + const literal = createLiteral('integer', ctx.INTEGER_LITERAL()); if (literal) { command.args.push(literal); } diff --git a/packages/kbn-esql-ast/src/ast_helpers.ts b/packages/kbn-esql-ast/src/ast_helpers.ts index cc6488d5bbc0c..6ebb3fb9c4490 100644 --- a/packages/kbn-esql-ast/src/ast_helpers.ts +++ b/packages/kbn-esql-ast/src/ast_helpers.ts @@ -35,7 +35,9 @@ import type { ESQLCommandMode, ESQLInlineCast, ESQLUnknownItem, + ESQLNumericLiteralType, FunctionSubtype, + ESQLNumericLiteral, } from './types'; export function nonNullable(v: T): v is NonNullable { @@ -87,11 +89,14 @@ export function createList(ctx: ParserRuleContext, values: ESQLLiteral[]): ESQLL }; } -export function createNumericLiteral(ctx: DecimalValueContext | IntegerValueContext): ESQLLiteral { +export function createNumericLiteral( + ctx: DecimalValueContext | IntegerValueContext, + literalType: ESQLNumericLiteralType +): ESQLLiteral { const text = ctx.getText(); return { type: 'literal', - literalType: 'number', + literalType, text, name: text, value: Number(text), @@ -100,10 +105,13 @@ export function createNumericLiteral(ctx: DecimalValueContext | IntegerValueCont }; } -export function createFakeMultiplyLiteral(ctx: ArithmeticUnaryContext): ESQLLiteral { +export function createFakeMultiplyLiteral( + ctx: ArithmeticUnaryContext, + literalType: ESQLNumericLiteralType +): ESQLLiteral { return { type: 'literal', - literalType: 'number', + literalType, text: ctx.getText(), name: ctx.getText(), value: ctx.PLUS() ? 1 : -1, @@ -158,12 +166,13 @@ export function createLiteral( location: getPosition(node.symbol), incomplete: isMissingText(text), }; - if (type === 'number') { + if (type === 'decimal' || type === 'integer') { return { ...partialLiteral, literalType: type, value: Number(text), - }; + paramType: 'number', + } as ESQLNumericLiteral<'decimal'> | ESQLNumericLiteral<'integer'>; } else if (type === 'param') { throw new Error('Should never happen'); } @@ -171,7 +180,7 @@ export function createLiteral( ...partialLiteral, literalType: type, value: text, - }; + } as ESQLLiteral; } export function createTimeUnit(ctx: QualifiedIntegerLiteralContext): ESQLTimeInterval { diff --git a/packages/kbn-esql-ast/src/ast_walker.ts b/packages/kbn-esql-ast/src/ast_walker.ts index 1b603975cf68f..3a0f182215c3e 100644 --- a/packages/kbn-esql-ast/src/ast_walker.ts +++ b/packages/kbn-esql-ast/src/ast_walker.ts @@ -84,7 +84,7 @@ import { createUnknownItem, } from './ast_helpers'; import { getPosition } from './ast_position_utils'; -import type { +import { ESQLLiteral, ESQLColumn, ESQLFunction, @@ -289,7 +289,7 @@ function visitOperatorExpression( const arg = visitOperatorExpression(ctx.operatorExpression()); // this is a number sign thing const fn = createFunction('*', ctx, undefined, 'binary-expression'); - fn.args.push(createFakeMultiplyLiteral(ctx)); + fn.args.push(createFakeMultiplyLiteral(ctx, 'integer')); if (arg) { fn.args.push(arg); } @@ -328,16 +328,21 @@ function getConstant(ctx: ConstantContext): ESQLAstItem { // e.g. 1 year, 15 months return createTimeUnit(ctx); } + + // Decimal type covers multiple ES|QL types: long, double, etc. if (ctx instanceof DecimalLiteralContext) { - return createNumericLiteral(ctx.decimalValue()); + return createNumericLiteral(ctx.decimalValue(), 'decimal'); } + + // Integer type encompasses integer if (ctx instanceof IntegerLiteralContext) { - return createNumericLiteral(ctx.integerValue()); + return createNumericLiteral(ctx.integerValue(), 'integer'); } if (ctx instanceof BooleanLiteralContext) { return getBooleanValue(ctx); } if (ctx instanceof StringLiteralContext) { + // String literal covers multiple ES|QL types: text and keyword types return createLiteral('string', ctx.string_().QUOTED_STRING()); } if ( @@ -346,14 +351,18 @@ function getConstant(ctx: ConstantContext): ESQLAstItem { ctx instanceof StringArrayLiteralContext ) { const values: ESQLLiteral[] = []; + for (const numericValue of ctx.getTypedRuleContexts(NumericValueContext)) { + const isDecimal = + numericValue.decimalValue() !== null && numericValue.decimalValue() !== undefined; const value = numericValue.decimalValue() || numericValue.integerValue(); - values.push(createNumericLiteral(value!)); + values.push(createNumericLiteral(value!, isDecimal ? 'decimal' : 'integer')); } for (const booleanValue of ctx.getTypedRuleContexts(BooleanValueContext)) { values.push(getBooleanValue(booleanValue)!); } for (const string of ctx.getTypedRuleContexts(StringContext)) { + // String literal covers multiple ES|QL types: text and keyword types const literal = createLiteral('string', string.QUOTED_STRING()); if (literal) { values.push(literal); diff --git a/packages/kbn-esql-ast/src/builder/index.test.ts b/packages/kbn-esql-ast/src/builder/index.test.ts index f54ab2f90a9ca..d8199027ea1c8 100644 --- a/packages/kbn-esql-ast/src/builder/index.test.ts +++ b/packages/kbn-esql-ast/src/builder/index.test.ts @@ -13,7 +13,7 @@ test('can mint a numeric literal', () => { expect(node).toMatchObject({ type: 'literal', - literalType: 'number', + literalType: 'integer', name: '42', value: 42, }); diff --git a/packages/kbn-esql-ast/src/builder/index.ts b/packages/kbn-esql-ast/src/builder/index.ts index d389caf40fab2..524301111ed4d 100644 --- a/packages/kbn-esql-ast/src/builder/index.ts +++ b/packages/kbn-esql-ast/src/builder/index.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { ESQLNumberLiteral } from '../types'; +import { ESQLDecimalLiteral, ESQLIntegerLiteral, ESQLNumericLiteralType } from '../types'; import { AstNodeParserFields, AstNodeTemplate } from './types'; export class Builder { @@ -25,16 +25,20 @@ export class Builder { }); /** - * Constructs a number literal node. + * Constructs a integer literal node. */ public static readonly numericLiteral = ( - template: Omit, 'literalType' | 'name'> - ): ESQLNumberLiteral => { - const node: ESQLNumberLiteral = { + template: Omit< + AstNodeTemplate, + 'literalType' | 'name' + >, + type: ESQLNumericLiteralType = 'integer' + ): ESQLIntegerLiteral | ESQLDecimalLiteral => { + const node: ESQLIntegerLiteral | ESQLDecimalLiteral = { ...template, ...Builder.parserFields(template), type: 'literal', - literalType: 'number', + literalType: type, name: template.value.toString(), }; diff --git a/packages/kbn-esql-ast/src/types.ts b/packages/kbn-esql-ast/src/types.ts index 5bc1a02ffd2ae..12496835ea12b 100644 --- a/packages/kbn-esql-ast/src/types.ts +++ b/packages/kbn-esql-ast/src/types.ts @@ -179,19 +179,30 @@ export interface ESQLList extends ESQLAstBaseItem { values: ESQLLiteral[]; } +export type ESQLNumericLiteralType = 'decimal' | 'integer'; + export type ESQLLiteral = - | ESQLNumberLiteral + | ESQLDecimalLiteral + | ESQLIntegerLiteral | ESQLBooleanLiteral | ESQLNullLiteral | ESQLStringLiteral | ESQLParamLiteral; +// Exporting here to prevent TypeScript error TS4058 +// Return type of exported function has or is using name 'ESQLNumericLiteral' from external module // @internal -export interface ESQLNumberLiteral extends ESQLAstBaseItem { +export interface ESQLNumericLiteral extends ESQLAstBaseItem { type: 'literal'; - literalType: 'number'; + literalType: T; value: number; } +// We cast anything as decimal (e.g. 32.12) as generic decimal numeric type here +// @internal +export type ESQLDecimalLiteral = ESQLNumericLiteral<'decimal'>; + +// @internal +export type ESQLIntegerLiteral = ESQLNumericLiteral<'integer'>; // @internal export interface ESQLBooleanLiteral extends ESQLAstBaseItem { diff --git a/packages/kbn-esql-ast/src/visitor/contexts.ts b/packages/kbn-esql-ast/src/visitor/contexts.ts index ca6044c017aa6..a7920358e1bab 100644 --- a/packages/kbn-esql-ast/src/visitor/contexts.ts +++ b/packages/kbn-esql-ast/src/visitor/contexts.ts @@ -18,11 +18,12 @@ import type { ESQLAstNodeWithArgs, ESQLColumn, ESQLCommandOption, + ESQLDecimalLiteral, ESQLFunction, ESQLInlineCast, + ESQLIntegerLiteral, ESQLList, ESQLLiteral, - ESQLNumberLiteral, ESQLSource, ESQLTimeInterval, } from '../types'; @@ -260,10 +261,14 @@ export class LimitCommandVisitorContext< /** * @returns The first numeric literal argument of the command. */ - public numericLiteral(): ESQLNumberLiteral | undefined { + public numericLiteral(): ESQLIntegerLiteral | ESQLDecimalLiteral | undefined { const arg = firstItem(this.node.args); - if (arg && arg.type === 'literal' && arg.literalType === 'number') { + if ( + arg && + arg.type === 'literal' && + (arg.literalType === 'integer' || arg.literalType === 'decimal') + ) { return arg; } } diff --git a/packages/kbn-esql-ast/src/walker/walker.test.ts b/packages/kbn-esql-ast/src/walker/walker.test.ts index 2bc666a1e0421..9f62c2f07d200 100644 --- a/packages/kbn-esql-ast/src/walker/walker.test.ts +++ b/packages/kbn-esql-ast/src/walker/walker.test.ts @@ -211,7 +211,7 @@ describe('structurally can walk all nodes', () => { expect(columns).toMatchObject([ { type: 'literal', - literalType: 'number', + literalType: 'integer', name: '123', }, { @@ -244,7 +244,7 @@ describe('structurally can walk all nodes', () => { expect(columns).toMatchObject([ { type: 'literal', - literalType: 'number', + literalType: 'integer', name: '1', }, { @@ -264,7 +264,7 @@ describe('structurally can walk all nodes', () => { }, { type: 'literal', - literalType: 'number', + literalType: 'decimal', name: '3.14', }, ]); @@ -288,12 +288,12 @@ describe('structurally can walk all nodes', () => { values: [ { type: 'literal', - literalType: 'number', + literalType: 'integer', name: '1', }, { type: 'literal', - literalType: 'number', + literalType: 'integer', name: '2', }, ], @@ -318,12 +318,12 @@ describe('structurally can walk all nodes', () => { values: [ { type: 'literal', - literalType: 'number', + literalType: 'integer', name: '1', }, { type: 'literal', - literalType: 'number', + literalType: 'integer', name: '2', }, ], @@ -333,7 +333,7 @@ describe('structurally can walk all nodes', () => { values: [ { type: 'literal', - literalType: 'number', + literalType: 'decimal', name: '3.3', }, ], @@ -342,17 +342,17 @@ describe('structurally can walk all nodes', () => { expect(literals).toMatchObject([ { type: 'literal', - literalType: 'number', + literalType: 'integer', name: '1', }, { type: 'literal', - literalType: 'number', + literalType: 'integer', name: '2', }, { type: 'literal', - literalType: 'number', + literalType: 'decimal', name: '3.3', }, ]); @@ -511,7 +511,7 @@ describe('structurally can walk all nodes', () => { describe('cast expression', () => { test('can visit cast expression', () => { - const query = 'FROM index | STATS a = 123::number'; + const query = 'FROM index | STATS a = 123::integer'; const { ast } = getAstAndSyntaxErrors(query); const casts: ESQLInlineCast[] = []; @@ -523,10 +523,10 @@ describe('structurally can walk all nodes', () => { expect(casts).toMatchObject([ { type: 'inlineCast', - castType: 'number', + castType: 'integer', value: { type: 'literal', - literalType: 'number', + literalType: 'integer', value: 123, }, }, diff --git a/packages/kbn-esql-validation-autocomplete/scripts/generate_function_definitions.ts b/packages/kbn-esql-validation-autocomplete/scripts/generate_function_definitions.ts index aa92c7bd024d5..cbee9d00e8928 100644 --- a/packages/kbn-esql-validation-autocomplete/scripts/generate_function_definitions.ts +++ b/packages/kbn-esql-validation-autocomplete/scripts/generate_function_definitions.ts @@ -12,7 +12,6 @@ import { join } from 'path'; import _ from 'lodash'; import type { RecursivePartial } from '@kbn/utility-types'; import { FunctionDefinition } from '../src/definitions/types'; -import { esqlToKibanaType } from '../src/shared/esql_to_kibana_type'; const aliasTable: Record = { to_version: ['to_ver'], @@ -240,10 +239,10 @@ function getFunctionDefinition(ESFunctionDefinition: Record): Funct ...signature, params: signature.params.map((param: any) => ({ ...param, - type: esqlToKibanaType(param.type), + type: param.type, description: undefined, })), - returnType: esqlToKibanaType(signature.returnType), + returnType: signature.returnType, variadic: undefined, // we don't support variadic property minParams: signature.variadic ? signature.params.filter((param: any) => !param.optional).length diff --git a/packages/kbn-esql-validation-autocomplete/scripts/generate_function_validation_tests.ts b/packages/kbn-esql-validation-autocomplete/scripts/generate_function_validation_tests.ts index 8d6394fe96af6..d3497115aecf9 100644 --- a/packages/kbn-esql-validation-autocomplete/scripts/generate_function_validation_tests.ts +++ b/packages/kbn-esql-validation-autocomplete/scripts/generate_function_validation_tests.ts @@ -25,6 +25,7 @@ import { } from '../src/definitions/types'; import { FUNCTION_DESCRIBE_BLOCK_NAME } from '../src/validation/function_describe_block_name'; import { getMaxMinNumberOfParams } from '../src/validation/helpers'; +import { ESQL_NUMBER_TYPES, isNumericType, isStringType } from '../src/shared/esql_types'; export const fieldNameFromType = (type: SupportedFieldType) => `${camelCase(type)}Field`; @@ -141,8 +142,8 @@ function generateImplicitDateCastingTestsForFunction( const allSignaturesWithDateParams = definition.signatures.filter((signature) => signature.params.some( (param, i) => - param.type === 'date' && - !definition.signatures.some((def) => getParamAtPosition(def, i)?.type === 'string') // don't count parameters that already accept a string + (param.type === 'date' || param.type === 'date_period') && + !definition.signatures.some((def) => isStringType(getParamAtPosition(def, i)?.type)) // don't count parameters that already accept a string ) ); @@ -300,8 +301,8 @@ function generateWhereCommandTestsForEvalFunction( // TODO: not sure why there's this constraint... const supportedFunction = signatures.some( ({ returnType, params }) => - ['number', 'string'].includes(returnType) && - params.every(({ type }) => ['number', 'string'].includes(type)) + [...ESQL_NUMBER_TYPES, 'string'].includes(returnType) && + params.every(({ type }) => [...ESQL_NUMBER_TYPES, 'string'].includes(type)) ); if (!supportedFunction) { @@ -311,12 +312,12 @@ function generateWhereCommandTestsForEvalFunction( const supportedSignatures = signatures.filter(({ returnType }) => // TODO — not sure why the tests have this limitation... seems like any type // that can be part of a boolean expression should be allowed in a where clause - ['number', 'string'].includes(returnType) + [...ESQL_NUMBER_TYPES, 'string'].includes(returnType) ); for (const { params, returnType, ...restSign } of supportedSignatures) { const correctMapping = getFieldMapping(params); testCases.set( - `from a_index | where ${returnType !== 'number' ? 'length(' : ''}${ + `from a_index | where ${!isNumericType(returnType) ? 'length(' : ''}${ // hijacking a bit this function to produce a function call getFunctionSignatures( { @@ -326,7 +327,7 @@ function generateWhereCommandTestsForEvalFunction( }, { withTypes: false } )[0].declaration - }${returnType !== 'number' ? ')' : ''} > 0`, + }${!isNumericType(returnType) ? ')' : ''} > 0`, [] ); @@ -337,7 +338,7 @@ function generateWhereCommandTestsForEvalFunction( supportedTypesAndFieldNames ); testCases.set( - `from a_index | where ${returnType !== 'number' ? 'length(' : ''}${ + `from a_index | where ${!isNumericType(returnType) ? 'length(' : ''}${ // hijacking a bit this function to produce a function call getFunctionSignatures( { @@ -347,7 +348,7 @@ function generateWhereCommandTestsForEvalFunction( }, { withTypes: false } )[0].declaration - }${returnType !== 'number' ? ')' : ''} > 0`, + }${!isNumericType(returnType) ? ')' : ''} > 0`, expectedErrors ); } @@ -357,7 +358,7 @@ function generateWhereCommandTestsForAggFunction( { name, alias, signatures, ...defRest }: FunctionDefinition, testCases: Map ) { - // statsSignatures.some(({ returnType, params }) => ['number'].includes(returnType)) + // statsSignatures.some(({ returnType, params }) => [...ESQL_NUMBER_TYPES].includes(returnType)) for (const { params, ...signRest } of signatures) { const fieldMapping = getFieldMapping(params); @@ -542,7 +543,7 @@ function generateEvalCommandTestsForEvalFunction( signatureWithGreatestNumberOfParams.params ).concat({ name: 'extraArg', - type: 'number', + type: 'integer', }); // get the expected args from the first signature in case of errors @@ -660,7 +661,7 @@ function generateStatsCommandTestsForAggFunction( testCases.set(`from a_index | stats var = ${correctSignature}`, []); testCases.set(`from a_index | stats ${correctSignature}`, []); - if (signRest.returnType === 'number') { + if (isNumericType(signRest.returnType)) { testCases.set(`from a_index | stats var = round(${correctSignature})`, []); testCases.set(`from a_index | stats round(${correctSignature})`, []); testCases.set( @@ -713,8 +714,8 @@ function generateStatsCommandTestsForAggFunction( } // test only numeric functions for now - if (params[0].type === 'number') { - const nestedBuiltin = 'numberField / 2'; + if (isNumericType(params[0].type)) { + const nestedBuiltin = 'doubleField / 2'; const fieldMappingWithNestedBuiltinFunctions = getFieldMapping(params); fieldMappingWithNestedBuiltinFunctions[0].name = nestedBuiltin; @@ -726,16 +727,16 @@ function generateStatsCommandTestsForAggFunction( }, { withTypes: false } )[0].declaration; - // from a_index | STATS aggFn( numberField / 2 ) + // from a_index | STATS aggFn( doubleField / 2 ) testCases.set(`from a_index | stats ${fnSignatureWithBuiltinString}`, []); testCases.set(`from a_index | stats var0 = ${fnSignatureWithBuiltinString}`, []); - testCases.set(`from a_index | stats avg(numberField), ${fnSignatureWithBuiltinString}`, []); + testCases.set(`from a_index | stats avg(doubleField), ${fnSignatureWithBuiltinString}`, []); testCases.set( - `from a_index | stats avg(numberField), var0 = ${fnSignatureWithBuiltinString}`, + `from a_index | stats avg(doubleField), var0 = ${fnSignatureWithBuiltinString}`, [] ); - const nestedEvalAndBuiltin = 'round(numberField / 2)'; + const nestedEvalAndBuiltin = 'round(doubleField / 2)'; const fieldMappingWithNestedEvalAndBuiltinFunctions = getFieldMapping(params); fieldMappingWithNestedBuiltinFunctions[0].name = nestedEvalAndBuiltin; @@ -747,18 +748,18 @@ function generateStatsCommandTestsForAggFunction( }, { withTypes: false } )[0].declaration; - // from a_index | STATS aggFn( round(numberField / 2) ) + // from a_index | STATS aggFn( round(doubleField / 2) ) testCases.set(`from a_index | stats ${fnSignatureWithEvalAndBuiltinString}`, []); testCases.set(`from a_index | stats var0 = ${fnSignatureWithEvalAndBuiltinString}`, []); testCases.set( - `from a_index | stats avg(numberField), ${fnSignatureWithEvalAndBuiltinString}`, + `from a_index | stats avg(doubleField), ${fnSignatureWithEvalAndBuiltinString}`, [] ); testCases.set( - `from a_index | stats avg(numberField), var0 = ${fnSignatureWithEvalAndBuiltinString}`, + `from a_index | stats avg(doubleField), var0 = ${fnSignatureWithEvalAndBuiltinString}`, [] ); - // from a_index | STATS aggFn(round(numberField / 2) ) BY round(numberField / 2) + // from a_index | STATS aggFn(round(doubleField / 2) ) BY round(doubleField / 2) testCases.set( `from a_index | stats ${fnSignatureWithEvalAndBuiltinString} by ${nestedEvalAndBuiltin}`, [] @@ -768,19 +769,19 @@ function generateStatsCommandTestsForAggFunction( [] ); testCases.set( - `from a_index | stats avg(numberField), ${fnSignatureWithEvalAndBuiltinString} by ${nestedEvalAndBuiltin}, ipField`, + `from a_index | stats avg(doubleField), ${fnSignatureWithEvalAndBuiltinString} by ${nestedEvalAndBuiltin}, ipField`, [] ); testCases.set( - `from a_index | stats avg(numberField), var0 = ${fnSignatureWithEvalAndBuiltinString} by var1 = ${nestedEvalAndBuiltin}, ipField`, + `from a_index | stats avg(doubleField), var0 = ${fnSignatureWithEvalAndBuiltinString} by var1 = ${nestedEvalAndBuiltin}, ipField`, [] ); testCases.set( - `from a_index | stats avg(numberField), ${fnSignatureWithEvalAndBuiltinString} by ${nestedEvalAndBuiltin}, ${nestedBuiltin}`, + `from a_index | stats avg(doubleField), ${fnSignatureWithEvalAndBuiltinString} by ${nestedEvalAndBuiltin}, ${nestedBuiltin}`, [] ); testCases.set( - `from a_index | stats avg(numberField), var0 = ${fnSignatureWithEvalAndBuiltinString} by var1 = ${nestedEvalAndBuiltin}, ${nestedBuiltin}`, + `from a_index | stats avg(doubleField), var0 = ${fnSignatureWithEvalAndBuiltinString} by var1 = ${nestedEvalAndBuiltin}, ${nestedBuiltin}`, [] ); } @@ -798,7 +799,7 @@ function generateStatsCommandTestsForAggFunction( .filter(({ constantOnly }) => !constantOnly) .map( (_) => - `Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]` + `Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(doubleField)] of type [double]` ); testCases.set( `from a_index | stats var = ${ @@ -965,9 +966,17 @@ function generateSortCommandTestsForAggFunction( const generateSortCommandTestsForGroupingFunction = generateSortCommandTestsForAggFunction; const fieldTypesToConstants: Record = { - string: '"a"', - number: '5', - date: 'now()', + text: '"a"', + keyword: '"a"', + double: '5.5', + integer: '5', + long: '5', + unsigned_long: '5', + counter_integer: '5', + counter_long: '5', + counter_double: '5.5', + date: 'to_datetime("2021-01-01T00:00:00Z")', + date_period: 'to_date_period("2021-01-01/2021-01-02")', boolean: 'true', version: 'to_version("1.0.0")', ip: 'to_ip("127.0.0.1")', @@ -1003,8 +1012,8 @@ function prepareNestedFunction(fnSignature: FunctionDefinition): string { } const toAvgSignature = statsAggregationFunctionDefinitions.find(({ name }) => name === 'avg')!; - const toInteger = evalFunctionDefinitions.find(({ name }) => name === 'to_integer')!; +const toDoubleSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_double')!; const toStringSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_string')!; const toDateSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_datetime')!; const toBooleanSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_boolean')!; @@ -1019,10 +1028,12 @@ const toCartesianShapeSignature = evalFunctionDefinitions.find( )!; const toVersionSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_version')!; +// We don't have full list for long, unsigned_long, etc. const nestedFunctions: Record = { - number: prepareNestedFunction(toInteger), - string: prepareNestedFunction(toStringSignature), - date: prepareNestedFunction(toDateSignature), + double: prepareNestedFunction(toDoubleSignature), + integer: prepareNestedFunction(toInteger), + text: prepareNestedFunction(toStringSignature), + keyword: prepareNestedFunction(toStringSignature), boolean: prepareNestedFunction(toBooleanSignature), ip: prepareNestedFunction(toIpSignature), version: prepareNestedFunction(toVersionSignature), @@ -1030,6 +1041,8 @@ const nestedFunctions: Record = { geo_shape: prepareNestedFunction(toGeoShapeSignature), cartesian_point: prepareNestedFunction(toCartesianPointSignature), cartesian_shape: prepareNestedFunction(toCartesianShapeSignature), + // @ts-expect-error + datetime: prepareNestedFunction(toDateSignature), }; function getFieldName( @@ -1086,6 +1099,7 @@ function getFieldMapping( number: '5', date: 'now()', }; + return params.map(({ name: _name, type, constantOnly, literalOptions, ...rest }) => { const typeString: string = type; if (isSupportedFieldType(typeString)) { @@ -1124,7 +1138,7 @@ function getFieldMapping( ...rest, }; } - return { name: 'stringField', type, ...rest }; + return { name: 'textField', type, ...rest }; }); } @@ -1225,8 +1239,12 @@ function generateIncorrectlyTypedParameters( } const fieldName = wrongFieldMapping[i].name; if ( - fieldName === 'numberField' && - signatures.every((signature) => getParamAtPosition(signature, i)?.type !== 'string') + fieldName === 'doubleField' && + signatures.every( + (signature) => + getParamAtPosition(signature, i)?.type !== 'keyword' || + getParamAtPosition(signature, i)?.type !== 'text' + ) ) { return; } diff --git a/packages/kbn-esql-validation-autocomplete/src/__tests__/helpers.ts b/packages/kbn-esql-validation-autocomplete/src/__tests__/helpers.ts index f3c159247e260..5f24d86e718bc 100644 --- a/packages/kbn-esql-validation-autocomplete/src/__tests__/helpers.ts +++ b/packages/kbn-esql-validation-autocomplete/src/__tests__/helpers.ts @@ -11,14 +11,14 @@ import { supportedFieldTypes } from '../definitions/types'; export const fields = [ ...supportedFieldTypes.map((type) => ({ name: `${camelCase(type)}Field`, type })), - { name: 'any#Char$Field', type: 'number' }, - { name: 'kubernetes.something.something', type: 'number' }, + { name: 'any#Char$Field', type: 'double' }, + { name: 'kubernetes.something.something', type: 'double' }, { name: '@timestamp', type: 'date' }, ]; export const enrichFields = [ - { name: 'otherField', type: 'string' }, - { name: 'yetAnotherField', type: 'number' }, + { name: 'otherField', type: 'text' }, + { name: 'yetAnotherField', type: 'double' }, ]; // eslint-disable-next-line @typescript-eslint/naming-convention @@ -58,7 +58,7 @@ export function getCallbackMocks() { return unsupported_field; } if (/dissect|grok/.test(query)) { - return [{ name: 'firstWord', type: 'string' }]; + return [{ name: 'firstWord', type: 'text' }]; } return fields; }), diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts index 58d4698974089..88fd654a83453 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts @@ -6,8 +6,11 @@ * Side Public License, v 1. */ +import { ESQL_COMMON_NUMERIC_TYPES, ESQL_NUMBER_TYPES } from '../../shared/esql_types'; import { setup, getFunctionSignaturesByReturnType, getFieldNamesByType } from './helpers'; +const ESQL_NUMERIC_TYPES = ESQL_NUMBER_TYPES as unknown as string[]; + const allAggFunctions = getFunctionSignaturesByReturnType('stats', 'any', { agg: true, }); @@ -74,51 +77,76 @@ describe('autocomplete.suggest', () => { const { assertSuggestions } = await setup(); await assertSuggestions('from a | stats by bucket(/', [ - ...getFieldNamesByType(['number', 'date']).map((field) => `${field},`), - ...getFunctionSignaturesByReturnType('eval', ['date', 'number'], { scalar: true }).map( - (s) => ({ ...s, text: `${s.text},` }) + ...getFieldNamesByType([...ESQL_COMMON_NUMERIC_TYPES, 'date']).map( + (field) => `${field},` ), + ...getFunctionSignaturesByReturnType('eval', ['date', ...ESQL_COMMON_NUMERIC_TYPES], { + scalar: true, + }).map((s) => ({ ...s, text: `${s.text},` })), ]); await assertSuggestions('from a | stats round(/', [ - ...getFunctionSignaturesByReturnType('stats', 'number', { agg: true, grouping: true }), - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }, undefined, [ - 'round', - ]), + ...getFunctionSignaturesByReturnType('stats', ESQL_NUMERIC_TYPES, { + agg: true, + grouping: true, + }), + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType( + 'eval', + ESQL_NUMERIC_TYPES, + { scalar: true }, + undefined, + ['round'] + ), ]); await assertSuggestions('from a | stats round(round(/', [ - ...getFunctionSignaturesByReturnType('stats', 'number', { agg: true }), - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }, undefined, [ - 'round', - ]), + ...getFunctionSignaturesByReturnType('stats', ESQL_NUMERIC_TYPES, { agg: true }), + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType( + 'eval', + ESQL_NUMERIC_TYPES, + { scalar: true }, + undefined, + ['round'] + ), ]); await assertSuggestions('from a | stats avg(round(/', [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }, undefined, [ - 'round', - ]), + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType( + 'eval', + ESQL_NUMERIC_TYPES, + { scalar: true }, + undefined, + ['round'] + ), ]); await assertSuggestions('from a | stats avg(/', [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }), + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType('eval', ESQL_NUMERIC_TYPES, { scalar: true }), ]); await assertSuggestions('from a | stats round(avg(/', [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }, undefined, [ - 'round', - ]), + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType( + 'eval', + ESQL_NUMERIC_TYPES, + { scalar: true }, + undefined, + ['round'] + ), ]); }); test('when typing inside function left paren', async () => { const { assertSuggestions } = await setup(); const expected = [ - ...getFieldNamesByType(['number', 'date', 'boolean', 'ip']), - ...getFunctionSignaturesByReturnType('stats', ['number', 'date', 'boolean', 'ip'], { - scalar: true, - }), + ...getFieldNamesByType([...ESQL_COMMON_NUMERIC_TYPES, 'date', 'boolean', 'ip']), + ...getFunctionSignaturesByReturnType( + 'stats', + [...ESQL_COMMON_NUMERIC_TYPES, 'date', 'boolean', 'ip'], + { + scalar: true, + } + ), ]; await assertSuggestions('from a | stats a=min(/)', expected); @@ -130,8 +158,14 @@ describe('autocomplete.suggest', () => { const { assertSuggestions } = await setup(); await assertSuggestions('from a | stats avg(b/) by stringField', [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }), + ...getFieldNamesByType('double'), + ...getFunctionSignaturesByReturnType( + 'eval', + ['double', 'integer', 'long', 'unsigned_long'], + { + scalar: true, + } + ), ]); }); @@ -205,10 +239,15 @@ describe('autocomplete.suggest', () => { test('on space before expression right hand side operand', async () => { const { assertSuggestions } = await setup(); - await assertSuggestions('from a | stats avg(b) by numberField % /', [ - ...getFieldNamesByType('number'), + await assertSuggestions('from a | stats avg(b) by integerField % /', [ + ...getFieldNamesByType('integer'), + ...getFieldNamesByType('double'), + ...getFieldNamesByType('long'), '`avg(b)`', - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }), + ...getFunctionSignaturesByReturnType('eval', ['integer', 'double', 'long'], { + scalar: true, + }), + ...allGroupingFunctions, ]); await assertSuggestions('from a | stats avg(b) by var0 = /', [ @@ -226,10 +265,10 @@ describe('autocomplete.suggest', () => { test('on space after expression right hand side operand', async () => { const { assertSuggestions } = await setup(); - await assertSuggestions('from a | stats avg(b) by numberField % 2 /', [',', '|']); + await assertSuggestions('from a | stats avg(b) by doubleField % 2 /', [',', '|']); await assertSuggestions( - 'from a | stats var0 = AVG(products.base_price) BY var1 = BUCKET(order_date, 1 day)/', + 'from a | stats var0 = AVG(doubleField) BY var1 = BUCKET(dateField, 1 day)/', [',', '|', '+ $0', '- $0'] ); }); diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/helpers.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/helpers.ts index 3d9ed7058a4a8..6600ffdbaf1d8 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/helpers.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/helpers.ts @@ -41,7 +41,7 @@ export const triggerCharacters = [',', '(', '=', ' ']; export const fields: Array<{ name: string; type: string; suggestedAs?: string }> = [ ...[ 'string', - 'number', + 'double', 'date', 'boolean', 'ip', @@ -53,8 +53,8 @@ export const fields: Array<{ name: string; type: string; suggestedAs?: string }> name: `${camelCase(type)}Field`, type, })), - { name: 'any#Char$Field', type: 'number', suggestedAs: '`any#Char$Field`' }, - { name: 'kubernetes.something.something', type: 'number' }, + { name: 'any#Char$Field', type: 'double', suggestedAs: '`any#Char$Field`' }, + { name: 'kubernetes.something.something', type: 'double' }, ]; export const indexes = ( diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts index d4ad5157d979a..d9c958b5bd4f7 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts @@ -10,15 +10,10 @@ import { suggest } from './autocomplete'; import { evalFunctionDefinitions } from '../definitions/functions'; import { timeUnitsToSuggest } from '../definitions/literals'; import { commandDefinitions } from '../definitions/commands'; -import { - getSafeInsertText, - getUnitDuration, - TRIGGER_SUGGESTION_COMMAND, - TIME_SYSTEM_PARAMS, -} from './factories'; +import { getSafeInsertText, getUnitDuration, TRIGGER_SUGGESTION_COMMAND } from './factories'; import { camelCase, partition } from 'lodash'; import { getAstAndSyntaxErrors } from '@kbn/esql-ast'; -import { FunctionParameter } from '../definitions/types'; +import { FunctionParameter, FunctionReturnType } from '../definitions/types'; import { getParamAtPosition } from './helper'; import { nonNullable } from '../shared/helpers'; import { @@ -31,9 +26,16 @@ import { createCompletionContext, getPolicyFields, PartialSuggestionWithText, - TIME_PICKER_SUGGESTION, } from './__tests__/helpers'; import { METADATA_FIELDS } from '../shared/constants'; +import { + ESQL_COMMON_NUMERIC_TYPES as UNCASTED_ESQL_COMMON_NUMERIC_TYPES, + ESQL_NUMBER_TYPES, +} from '../shared/esql_types'; + +const ESQL_NUMERIC_TYPES = ESQL_NUMBER_TYPES as unknown as string[]; +const ESQL_COMMON_NUMERIC_TYPES = + UNCASTED_ESQL_COMMON_NUMERIC_TYPES as unknown as FunctionReturnType[]; describe('autocomplete', () => { type TestArgs = [ @@ -166,25 +168,18 @@ describe('autocomplete', () => { ['string'] ), ]); - testSuggestions('from a | where stringField >= ', [ - ...getFieldNamesByType('string'), - ...getFunctionSignaturesByReturnType('where', 'string', { scalar: true }), + testSuggestions('from a | where textField >= ', [ + ...getFieldNamesByType('any'), + ...getFunctionSignaturesByReturnType('where', ['any'], { scalar: true }), ]); // Skip these tests until the insensitive case equality gets restored back testSuggestions.skip('from a | where stringField =~ ', [ ...getFieldNamesByType('string'), ...getFunctionSignaturesByReturnType('where', 'string', { scalar: true }), ]); - testSuggestions('from a | where stringField >= stringField ', [ - '|', - ...getFunctionSignaturesByReturnType( - 'where', - 'boolean', - { - builtin: true, - }, - ['boolean'] - ), + testSuggestions('from a | where textField >= textField', [ + ...getFieldNamesByType('any'), + ...getFunctionSignaturesByReturnType('where', 'any', { scalar: true }), ]); testSuggestions.skip('from a | where stringField =~ stringField ', [ '|', @@ -202,52 +197,60 @@ describe('autocomplete', () => { ...getFieldNamesByType('any'), ...getFunctionSignaturesByReturnType('where', 'any', { scalar: true }), ]); - testSuggestions(`from a | where stringField >= stringField ${op} numberField `, [ - ...getFunctionSignaturesByReturnType('where', 'boolean', { builtin: true }, ['number']), + testSuggestions(`from a | where stringField >= stringField ${op} doubleField `, [ + ...getFunctionSignaturesByReturnType('where', 'boolean', { builtin: true }, ['double']), ]); - testSuggestions(`from a | where stringField >= stringField ${op} numberField == `, [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('where', 'number', { scalar: true }), + testSuggestions(`from a | where stringField >= stringField ${op} doubleField == `, [ + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType('where', ESQL_COMMON_NUMERIC_TYPES, { scalar: true }), ]); } - testSuggestions('from a | stats a=avg(numberField) | where a ', [ + testSuggestions('from a | stats a=avg(doubleField) | where a ', [ ...getFunctionSignaturesByReturnType('where', 'any', { builtin: true, skipAssign: true }, [ - 'number', + 'double', ]), ]); // Mind this test: suggestion is aware of previous commands when checking for fields - // in this case the numberField has been wiped by the STATS command and suggest cannot find it's type + // in this case the doubleField has been wiped by the STATS command and suggest cannot find it's type // @TODO: verify this is the correct behaviour in this case or if we want a "generic" suggestion anyway testSuggestions( - 'from a | stats a=avg(numberField) | where numberField ', + 'from a | stats a=avg(doubleField) | where doubleField ', [], undefined, undefined, // make the fields suggest aware of the previous STATS, leave the other callbacks untouched - [[{ name: 'a', type: 'number' }], undefined, undefined] + [[{ name: 'a', type: 'double' }], undefined, undefined] ); // The editor automatically inject the final bracket, so it is not useful to test with just open bracket testSuggestions( 'from a | where log10()', [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('where', 'number', { scalar: true }, undefined, [ - 'log10', - ]), + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType( + 'where', + ESQL_NUMERIC_TYPES, + { scalar: true }, + undefined, + ['log10'] + ), ], '(' ); - testSuggestions('from a | where log10(numberField) ', [ - ...getFunctionSignaturesByReturnType('where', 'number', { builtin: true }, ['number']), - ...getFunctionSignaturesByReturnType('where', 'boolean', { builtin: true }, ['number']), + testSuggestions('from a | where log10(doubleField) ', [ + ...getFunctionSignaturesByReturnType('where', 'double', { builtin: true }, ['double']), + ...getFunctionSignaturesByReturnType('where', 'boolean', { builtin: true }, ['double']), ]); testSuggestions( - 'from a | WHERE pow(numberField, )', + 'from a | WHERE pow(doubleField, )', [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('where', 'number', { scalar: true }, undefined, [ - 'pow', - ]), + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType( + 'where', + ESQL_NUMERIC_TYPES, + { scalar: true }, + undefined, + ['pow'] + ), ], ',' ); @@ -258,34 +261,34 @@ describe('autocomplete', () => { ...getFieldNamesByType('boolean'), ...getFunctionSignaturesByReturnType('eval', 'boolean', { scalar: true }), ]); - testSuggestions('from index | WHERE numberField in ', ['( $0 )']); - testSuggestions('from index | WHERE numberField not in ', ['( $0 )']); + testSuggestions('from index | WHERE doubleField in ', ['( $0 )']); + testSuggestions('from index | WHERE doubleField not in ', ['( $0 )']); testSuggestions( - 'from index | WHERE numberField not in ( )', + 'from index | WHERE doubleField not in ( )', [ - ...getFieldNamesByType('number').filter((name) => name !== 'numberField'), - ...getFunctionSignaturesByReturnType('where', 'number', { scalar: true }), + ...getFieldNamesByType('double').filter((name) => name !== 'doubleField'), + ...getFunctionSignaturesByReturnType('where', 'double', { scalar: true }), ], '(' ); testSuggestions( - 'from index | WHERE numberField in ( `any#Char$Field`, )', + 'from index | WHERE doubleField in ( `any#Char$Field`, )', [ - ...getFieldNamesByType('number').filter( - (name) => name !== '`any#Char$Field`' && name !== 'numberField' + ...getFieldNamesByType('double').filter( + (name) => name !== '`any#Char$Field`' && name !== 'doubleField' ), - ...getFunctionSignaturesByReturnType('where', 'number', { scalar: true }), + ...getFunctionSignaturesByReturnType('where', 'double', { scalar: true }), ], undefined, 54 // after the first suggestions ); testSuggestions( - 'from index | WHERE numberField not in ( `any#Char$Field`, )', + 'from index | WHERE doubleField not in ( `any#Char$Field`, )', [ - ...getFieldNamesByType('number').filter( - (name) => name !== '`any#Char$Field`' && name !== 'numberField' + ...getFieldNamesByType('double').filter( + (name) => name !== '`any#Char$Field`' && name !== 'doubleField' ), - ...getFunctionSignaturesByReturnType('where', 'number', { scalar: true }), + ...getFunctionSignaturesByReturnType('where', 'double', { scalar: true }), ], undefined, 58 // after the first suggestions @@ -377,14 +380,14 @@ describe('autocomplete', () => { ); testSuggestions( - `from a_index | eval round(numberField) + 1 | eval \`round(numberField) + 1\` + 1 | eval \`\`\`round(numberField) + 1\`\` + 1\` + 1 | eval \`\`\`\`\`\`\`round(numberField) + 1\`\`\`\` + 1\`\` + 1\` + 1 | eval \`\`\`\`\`\`\`\`\`\`\`\`\`\`\`round(numberField) + 1\`\`\`\`\`\`\`\` + 1\`\`\`\` + 1\`\` + 1\` + 1 | ${command} `, + `from a_index | eval round(doubleField) + 1 | eval \`round(doubleField) + 1\` + 1 | eval \`\`\`round(doubleField) + 1\`\` + 1\` + 1 | eval \`\`\`\`\`\`\`round(doubleField) + 1\`\`\`\` + 1\`\` + 1\` + 1 | eval \`\`\`\`\`\`\`\`\`\`\`\`\`\`\`round(doubleField) + 1\`\`\`\`\`\`\`\` + 1\`\`\`\` + 1\`\` + 1\` + 1 | ${command} `, [ ...getFieldNamesByType('any'), - '`round(numberField) + 1`', - '```round(numberField) + 1`` + 1`', - '```````round(numberField) + 1```` + 1`` + 1`', - '```````````````round(numberField) + 1```````` + 1```` + 1`` + 1`', - '```````````````````````````````round(numberField) + 1```````````````` + 1```````` + 1```` + 1`` + 1`', + '`round(doubleField) + 1`', + '```round(doubleField) + 1`` + 1`', + '```````round(doubleField) + 1```` + 1`` + 1`', + '```````````````round(doubleField) + 1```````` + 1```` + 1`` + 1`', + '```````````````````````````````round(doubleField) + 1```````````````` + 1```````` + 1```` + 1`` + 1`', ] ); }); @@ -413,7 +416,7 @@ describe('autocomplete', () => { testSuggestions(`from a ${prevCommand}| enrich policy `, ['ON $0', 'WITH $0', '|']); testSuggestions(`from a ${prevCommand}| enrich policy on `, [ 'stringField', - 'numberField', + 'doubleField', 'dateField', 'booleanField', 'ipField', @@ -466,25 +469,25 @@ describe('autocomplete', () => { ...getFieldNamesByType('any'), ...getFunctionSignaturesByReturnType('eval', 'any', { scalar: true }), ]); - testSuggestions('from a | eval numberField ', [ + testSuggestions('from a | eval doubleField ', [ ...getFunctionSignaturesByReturnType('eval', 'any', { builtin: true, skipAssign: true }, [ - 'number', + 'double', ]), ',', '|', ]); testSuggestions('from index | EVAL stringField not ', ['LIKE $0', 'RLIKE $0', 'IN $0']); testSuggestions('from index | EVAL stringField NOT ', ['LIKE $0', 'RLIKE $0', 'IN $0']); - testSuggestions('from index | EVAL numberField in ', ['( $0 )']); + testSuggestions('from index | EVAL doubleField in ', ['( $0 )']); testSuggestions( - 'from index | EVAL numberField in ( )', + 'from index | EVAL doubleField in ( )', [ - ...getFieldNamesByType('number').filter((name) => name !== 'numberField'), - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }), + ...getFieldNamesByType('double').filter((name) => name !== 'doubleField'), + ...getFunctionSignaturesByReturnType('eval', 'double', { scalar: true }), ], '(' ); - testSuggestions('from index | EVAL numberField not in ', ['( $0 )']); + testSuggestions('from index | EVAL doubleField not in ', ['( $0 )']); testSuggestions('from index | EVAL not ', [ ...getFieldNamesByType('boolean'), ...getFunctionSignaturesByReturnType('eval', 'boolean', { scalar: true }), @@ -492,10 +495,10 @@ describe('autocomplete', () => { testSuggestions('from a | eval a=', [ ...getFunctionSignaturesByReturnType('eval', 'any', { scalar: true }), ]); - testSuggestions('from a | eval a=abs(numberField), b= ', [ + testSuggestions('from a | eval a=abs(doubleField), b= ', [ ...getFunctionSignaturesByReturnType('eval', 'any', { scalar: true }), ]); - testSuggestions('from a | eval a=numberField, ', [ + testSuggestions('from a | eval a=doubleField, ', [ 'var0 =', ...getFieldNamesByType('any'), 'a', @@ -509,10 +512,14 @@ describe('autocomplete', () => { testSuggestions( 'from a | eval a=round()', [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }, undefined, [ - 'round', - ]), + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType( + 'eval', + ESQL_NUMERIC_TYPES, + { scalar: true }, + undefined, + ['round'] + ), ], '(' ); @@ -539,64 +546,59 @@ describe('autocomplete', () => { [], ' ' ); - testSuggestions('from a | eval a=round(numberField) ', [ + testSuggestions('from a | eval a=round(doubleField) ', [ ',', '|', ...getFunctionSignaturesByReturnType('eval', 'any', { builtin: true, skipAssign: true }, [ - 'number', + 'double', ]), ]); testSuggestions( - 'from a | eval a=round(numberField, ', + 'from a | eval a=round(doubleField, ', [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }, undefined, [ + ...getFieldNamesByType('integer'), + ...getFunctionSignaturesByReturnType('eval', 'integer', { scalar: true }, undefined, [ 'round', ]), ], ' ' ); testSuggestions( - 'from a | eval round(numberField, ', + 'from a | eval round(doubleField, ', [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }, undefined, [ + ...getFunctionSignaturesByReturnType('eval', 'integer', { scalar: true }, undefined, [ 'round', ]), ], ' ' ); - testSuggestions('from a | eval a=round(numberField),', [ + testSuggestions('from a | eval a=round(doubleField),', [ 'var0 =', ...getFieldNamesByType('any'), 'a', ...getFunctionSignaturesByReturnType('eval', 'any', { scalar: true }), ]); - testSuggestions('from a | eval a=round(numberField) + ', [ - ...getFieldNamesByType('number'), - 'a', // @TODO remove this - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }), + testSuggestions('from a | eval a=round(doubleField) + ', [ + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType('eval', ESQL_COMMON_NUMERIC_TYPES, { scalar: true }), ]); - testSuggestions('from a | eval a=round(numberField)+ ', [ - ...getFieldNamesByType('number'), - 'a', // @TODO remove this - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }), + testSuggestions('from a | eval a=round(doubleField)+ ', [ + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType('eval', ESQL_COMMON_NUMERIC_TYPES, { scalar: true }), ]); - testSuggestions('from a | eval a=numberField+ ', [ - ...getFieldNamesByType('number'), - 'a', // @TODO remove this - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }), + testSuggestions('from a | eval a=doubleField+ ', [ + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType('eval', ESQL_COMMON_NUMERIC_TYPES, { scalar: true }), ]); testSuggestions('from a | eval a=`any#Char$Field`+ ', [ - ...getFieldNamesByType('number'), - 'a', // @TODO remove this - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }), + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType('eval', ESQL_COMMON_NUMERIC_TYPES, { scalar: true }), ]); testSuggestions( - 'from a | stats avg(numberField) by stringField | eval ', + 'from a | stats avg(doubleField) by stringField | eval ', [ 'var0 =', - '`avg(numberField)`', + '`avg(doubleField)`', ...getFunctionSignaturesByReturnType('eval', 'any', { scalar: true }), ], ' ', @@ -605,32 +607,32 @@ describe('autocomplete', () => { [[], undefined, undefined] ); testSuggestions( - 'from a | eval abs(numberField) + 1 | eval ', + 'from a | eval abs(doubleField) + 1 | eval ', [ 'var0 =', ...getFieldNamesByType('any'), - '`abs(numberField) + 1`', + '`abs(doubleField) + 1`', ...getFunctionSignaturesByReturnType('eval', 'any', { scalar: true }), ], ' ' ); testSuggestions( - 'from a | stats avg(numberField) by stringField | eval ', + 'from a | stats avg(doubleField) by stringField | eval ', [ 'var0 =', - '`avg(numberField)`', + '`avg(doubleField)`', ...getFunctionSignaturesByReturnType('eval', 'any', { scalar: true }), ], ' ', undefined, // make aware EVAL of the previous STATS command with the buggy field name from expression - [[{ name: 'avg_numberField_', type: 'number' }], undefined, undefined] + [[{ name: 'avg_doubleField_', type: 'double' }], undefined, undefined] ); testSuggestions( - 'from a | stats avg(numberField), avg(kubernetes.something.something) by stringField | eval ', + 'from a | stats avg(doubleField), avg(kubernetes.something.something) by stringField | eval ', [ 'var0 =', - '`avg(numberField)`', + '`avg(doubleField)`', '`avg(kubernetes.something.something)`', ...getFunctionSignaturesByReturnType('eval', 'any', { scalar: true }), ], @@ -639,48 +641,64 @@ describe('autocomplete', () => { // make aware EVAL of the previous STATS command with the buggy field name from expression [ [ - { name: 'avg_numberField_', type: 'number' }, - { name: 'avg_kubernetes.something.something_', type: 'number' }, + { name: 'avg_doubleField_', type: 'double' }, + { name: 'avg_kubernetes.something.something_', type: 'double' }, ], undefined, undefined, ] ); testSuggestions( - 'from a | eval a=round(numberField), b=round()', + 'from a | eval a=round(doubleField), b=round()', [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }, undefined, [ - 'round', - ]), + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType( + 'eval', + ESQL_NUMERIC_TYPES, + { scalar: true }, + undefined, + ['round'] + ), ], '(' ); // test that comma is correctly added to the suggestions if minParams is not reached yet testSuggestions('from a | eval a=concat( ', [ - ...getFieldNamesByType('string').map((v) => `${v},`), - ...getFunctionSignaturesByReturnType('eval', 'string', { scalar: true }, undefined, [ - 'concat', - ]).map((v) => ({ ...v, text: `${v.text},` })), + ...getFieldNamesByType(['text', 'keyword']).map((v) => `${v},`), + ...getFunctionSignaturesByReturnType( + 'eval', + ['text', 'keyword'], + { scalar: true }, + undefined, + ['concat'] + ).map((v) => ({ ...v, text: `${v.text},` })), ]); testSuggestions( - 'from a | eval a=concat(stringField, ', + 'from a | eval a=concat(textField, ', [ - ...getFieldNamesByType('string'), - ...getFunctionSignaturesByReturnType('eval', 'string', { scalar: true }, undefined, [ - 'concat', - ]), + ...getFieldNamesByType(['text', 'keyword']), + ...getFunctionSignaturesByReturnType( + 'eval', + ['text', 'keyword'], + { scalar: true }, + undefined, + ['concat'] + ), ], ' ' ); // test that the arg type is correct after minParams testSuggestions( - 'from a | eval a=cidr_match(ipField, stringField, ', + 'from a | eval a=cidr_match(ipField, textField, ', [ - ...getFieldNamesByType('string'), - ...getFunctionSignaturesByReturnType('eval', 'string', { scalar: true }, undefined, [ - 'cidr_match', - ]), + ...getFieldNamesByType('text'), + ...getFunctionSignaturesByReturnType( + 'eval', + ['text', 'keyword'], + { scalar: true }, + undefined, + ['cidr_match'] + ), ], ' ' ); @@ -694,10 +712,14 @@ describe('autocomplete', () => { testSuggestions( 'from a | eval a=cidr_match(ipField, ', [ - ...getFieldNamesByType('string'), - ...getFunctionSignaturesByReturnType('eval', 'string', { scalar: true }, undefined, [ - 'cidr_match', - ]), + ...getFieldNamesByType(['text', 'keyword']), + ...getFunctionSignaturesByReturnType( + 'eval', + ['text', 'keyword'], + { scalar: true }, + undefined, + ['cidr_match'] + ), ], ' ' ); @@ -709,10 +731,14 @@ describe('autocomplete', () => { testSuggestions( `from a | eval a=${Array(nesting).fill('round(').join('')}`, [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }, undefined, [ - 'round', - ]), + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType( + 'eval', + ESQL_NUMERIC_TYPES, + { scalar: true }, + undefined, + ['round'] + ), ], '(' ); @@ -720,12 +746,12 @@ describe('autocomplete', () => { // Smoke testing for suggestions in previous position than the end of the statement testSuggestions( - 'from a | eval var0 = abs(numberField) | eval abs(var0)', + 'from a | eval var0 = abs(doubleField) | eval abs(var0)', [ ',', '|', ...getFunctionSignaturesByReturnType('eval', 'any', { builtin: true, skipAssign: true }, [ - 'number', + 'double', ]), ], undefined, @@ -734,10 +760,14 @@ describe('autocomplete', () => { testSuggestions( 'from a | eval var0 = abs(b) | eval abs(var0)', [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('eval', 'number', { scalar: true }, undefined, [ - 'abs', - ]), + ...getFieldNamesByType(ESQL_NUMERIC_TYPES), + ...getFunctionSignaturesByReturnType( + 'eval', + ESQL_NUMERIC_TYPES, + { scalar: true }, + undefined, + ['abs'] + ), ], undefined, 26 /* b column in abs */ @@ -746,7 +776,7 @@ describe('autocomplete', () => { // Test suggestions for each possible param, within each signature variation, for each function for (const fn of evalFunctionDefinitions) { // skip this fn for the moment as it's quite hard to test - if (fn.name !== 'bucket') { + if (!['bucket', 'date_extract', 'date_diff'].includes(fn.name)) { for (const signature of fn.signatures) { signature.params.forEach((param, i) => { if (i < signature.params.length) { @@ -822,6 +852,23 @@ describe('autocomplete', () => { }); } } + + // The above test fails cause it expects nested functions like + // DATE_EXTRACT(concat("aligned_day_","of_week_in_month"), date) to also be suggested + // which is actually valid according to func signature + // but currently, our autocomplete only suggests the literal suggestions + if (['date_extract', 'date_diff'].includes(fn.name)) { + const firstParam = fn.signatures[0].params[0]; + const suggestedConstants = firstParam?.literalSuggestions || firstParam?.literalOptions; + const requiresMoreArgs = true; + + testSuggestions( + `from a | eval ${fn.name}(`, + suggestedConstants?.length + ? [...suggestedConstants.map((option) => `"${option}"${requiresMoreArgs ? ',' : ''}`)] + : [] + ); + } } testSuggestions('from a | eval var0 = bucket(@timestamp, ', getUnitDuration(1), ' '); @@ -836,7 +883,7 @@ describe('autocomplete', () => { ',', '|', ...getFunctionSignaturesByReturnType('eval', 'any', { builtin: true, skipAssign: true }, [ - 'number', + 'integer', ]), ], ' ' @@ -848,39 +895,20 @@ describe('autocomplete', () => { 'time_interval', ]), ]); - testSuggestions( - 'from a | eval a = 1 day + 2 ', - [ - ...dateSuggestions, - ',', - '|', - ...getFunctionSignaturesByReturnType('eval', 'any', { builtin: true, skipAssign: true }, [ - 'number', - ]), - ], - ' ' - ); + testSuggestions('from a | eval a = 1 day + 2 ', [',', '|']); testSuggestions( 'from a | eval 1 day + 2 ', [ ...dateSuggestions, ...getFunctionSignaturesByReturnType('eval', 'any', { builtin: true, skipAssign: true }, [ - 'number', + 'integer', ]), ], ' ' ); testSuggestions( 'from a | eval var0=date_trunc()', - [ - ...[...TIME_SYSTEM_PARAMS].map((t) => `${t},`), - ...getLiteralsByType('time_literal').map((t) => `${t},`), - ...getFunctionSignaturesByReturnType('eval', 'date', { scalar: true }, undefined, [ - 'date_trunc', - ]).map((t) => ({ ...t, text: `${t.text},` })), - ...getFieldNamesByType('date').map((t) => `${t},`), - TIME_PICKER_SUGGESTION, - ], + [...getLiteralsByType('time_literal').map((t) => `${t},`)], '(' ); testSuggestions( @@ -917,7 +945,7 @@ describe('autocomplete', () => { describe('callbacks', () => { it('should send the fields query without the last command', async () => { const callbackMocks = createCustomCallbackMocks(undefined, undefined, undefined); - const statement = 'from a | drop stringField | eval var0 = abs(numberField) '; + const statement = 'from a | drop stringField | eval var0 = abs(doubleField) '; const triggerOffset = statement.lastIndexOf(' '); const context = createCompletionContext(statement[triggerOffset]); await suggest( @@ -933,7 +961,7 @@ describe('autocomplete', () => { }); it('should send the fields query aware of the location', async () => { const callbackMocks = createCustomCallbackMocks(undefined, undefined, undefined); - const statement = 'from a | drop | eval var0 = abs(numberField) '; + const statement = 'from a | drop | eval var0 = abs(doubleField) '; const triggerOffset = statement.lastIndexOf('p') + 1; // drop const context = createCompletionContext(statement[triggerOffset]); await suggest( @@ -1025,10 +1053,13 @@ describe('autocomplete', () => { testSuggestions( 'FROM kibana_sample_data_logs | EVAL TRIM(e)', [ - ...getFieldNamesByType('string'), - ...getFunctionSignaturesByReturnType('eval', 'string', { scalar: true }, undefined, [ - 'trim', - ]), + ...getFunctionSignaturesByReturnType( + 'eval', + ['text', 'keyword'], + { scalar: true }, + undefined, + ['trim'] + ), ], undefined, 42 diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts index 42e82662e7110..d2d617aac4315 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts @@ -16,6 +16,7 @@ import type { ESQLSingleAstItem, } from '@kbn/esql-ast'; import { partition } from 'lodash'; +import { ESQL_NUMBER_TYPES, isNumericType } from '../shared/esql_types'; import type { EditorContext, SuggestionRawDefinition } from './types'; import { lookupColumn, @@ -88,6 +89,7 @@ import { getParamAtPosition, getQueryForFields, getSourcesFromCommands, + getSupportedTypesForBinaryOperators, isAggFunctionUsedAlready, removeQuoteForSuggestedSources, } from './helper'; @@ -124,7 +126,7 @@ function appendEnrichFields( // @TODO: improve this const newMap: Map = new Map(fieldsMap); for (const field of policyMetadata.enrichFields) { - newMap.set(field, { name: field, type: 'number' }); + newMap.set(field, { name: field, type: 'double' }); } return newMap; } @@ -732,7 +734,7 @@ async function getExpressionSuggestionsByType( workoutBuiltinOptions(rightArg, references) ) ); - if (nodeArgType === 'number' && isLiteralItem(rightArg)) { + if (isNumericType(nodeArgType) && isLiteralItem(rightArg)) { // ... EVAL var = 1 suggestions.push(...getCompatibleLiterals(command.name, ['time_literal_unit'])); } @@ -740,7 +742,7 @@ async function getExpressionSuggestionsByType( if (rightArg.args.some(isTimeIntervalItem)) { const lastFnArg = rightArg.args[rightArg.args.length - 1]; const lastFnArgType = extractFinalTypeFromArg(lastFnArg, references); - if (lastFnArgType === 'number' && isLiteralItem(lastFnArg)) + if (isNumericType(lastFnArgType) && isLiteralItem(lastFnArg)) // ... EVAL var = 1 year + 2 suggestions.push(...getCompatibleLiterals(command.name, ['time_literal_unit'])); } @@ -777,7 +779,7 @@ async function getExpressionSuggestionsByType( if (nodeArg.args.some(isTimeIntervalItem)) { const lastFnArg = nodeArg.args[nodeArg.args.length - 1]; const lastFnArgType = extractFinalTypeFromArg(lastFnArg, references); - if (lastFnArgType === 'number' && isLiteralItem(lastFnArg)) + if (isNumericType(lastFnArgType) && isLiteralItem(lastFnArg)) // ... EVAL var = 1 year + 2 suggestions.push(...getCompatibleLiterals(command.name, ['time_literal_unit'])); } @@ -793,7 +795,10 @@ async function getExpressionSuggestionsByType( suggestions.push(...buildConstantsDefinitions(argDef.values)); } // If the type is specified try to dig deeper in the definition to suggest the best candidate - if (['string', 'number', 'boolean'].includes(argDef.type) && !argDef.values) { + if ( + ['string', 'text', 'keyword', 'boolean', ...ESQL_NUMBER_TYPES].includes(argDef.type) && + !argDef.values + ) { // it can be just literal values (i.e. "string") if (argDef.constantOnly) { // ... | ... @@ -971,6 +976,7 @@ async function getBuiltinFunctionNextArgument( ) { const suggestions = []; const isFnComplete = isFunctionArgComplete(nodeArg, references); + if (isFnComplete.complete) { // i.e. ... | field > 0 // i.e. ... | field + otherN @@ -1001,17 +1007,16 @@ async function getBuiltinFunctionNextArgument( suggestions.push(listCompleteItem); } else { const finalType = nestedType || nodeArgType || 'any'; + const supportedTypes = getSupportedTypesForBinaryOperators(fnDef, finalType); suggestions.push( ...(await getFieldsOrFunctionsSuggestions( // this is a special case with AND/OR // expression AND/OR // technically another boolean value should be suggested, but it is a better experience // to actually suggest a wider set of fields/functions - [ - finalType === 'boolean' && getFunctionDefinition(nodeArg.name)?.type === 'builtin' - ? 'any' - : finalType, - ], + finalType === 'boolean' && getFunctionDefinition(nodeArg.name)?.type === 'builtin' + ? ['any'] + : supportedTypes, command.name, option?.name, getFieldsByType, @@ -1321,7 +1326,7 @@ async function getFunctionArgsSuggestions( // for eval and row commands try also to complete numeric literals with time intervals where possible if (arg) { if (command.name !== 'stats') { - if (isLiteralItem(arg) && arg.literalType === 'number') { + if (isLiteralItem(arg) && isNumericType(arg.literalType)) { // ... | EVAL fn(2 ) suggestions.push( ...(await getFieldsOrFunctionsSuggestions( diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts index f54511c8e304d..cb56f40a6d6f4 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts @@ -22,7 +22,8 @@ import { import { shouldBeQuotedSource, getCommandDefinition, shouldBeQuotedText } from '../shared/helpers'; import { buildDocumentation, buildFunctionDocumentation } from './documentation_util'; import { DOUBLE_BACKTICK, SINGLE_TICK_REGEX } from '../shared/constants'; -import type { ESQLRealField } from '../validation/types'; +import { ESQLRealField } from '../validation/types'; +import { isNumericType } from '../shared/esql_types'; const allFunctions = statsAggregationFunctionDefinitions .concat(evalFunctionDefinitions) @@ -359,7 +360,7 @@ export function getUnitDuration(unit: number = 1) { */ export function getCompatibleLiterals(commandName: string, types: string[], names?: string[]) { const suggestions: SuggestionRawDefinition[] = []; - if (types.includes('number')) { + if (types.some(isNumericType)) { if (commandName === 'limit') { // suggest 10/100/1000 for limit suggestions.push(...buildConstantsDefinitions(['10', '100', '1000'], '')); diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/helper.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/helper.ts index f9586670b29e6..65f6601c51c13 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/helper.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/helper.ts @@ -80,3 +80,15 @@ export function removeQuoteForSuggestedSources(suggestions: SuggestionRawDefinit text: d.text.startsWith('"') && d.text.endsWith('"') ? d.text.slice(1, -1) : d.text, })); } + +export function getSupportedTypesForBinaryOperators( + fnDef: FunctionDefinition | undefined, + previousType: string +) { + // Retrieve list of all 'right' supported types that match the left hand side of the function + return fnDef && Array.isArray(fnDef?.signatures) + ? fnDef.signatures + .filter(({ params }) => params.find((p) => p.name === 'left' && p.type === previousType)) + .map(({ params }) => params[1].type) + : [previousType]; +} diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts index a27b8a68a9be0..97dc654f525ce 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts @@ -7,15 +7,18 @@ */ import { i18n } from '@kbn/i18n'; -import type { FunctionDefinition, FunctionParameterType } from './types'; +import { ESQL_COMMON_NUMERIC_TYPES, ESQL_NUMBER_TYPES } from '../shared/esql_types'; +import type { FunctionDefinition, FunctionParameterType, FunctionReturnType } from './types'; function createNumericAggDefinition({ name, description, + returnType, args = [], }: { name: string; description: string; + returnType?: (numericType: FunctionParameterType) => FunctionReturnType; args?: Array<{ name: string; type: FunctionParameterType; @@ -30,9 +33,9 @@ function createNumericAggDefinition({ description, supportedCommands: ['stats', 'metrics'], signatures: [ - { + ...ESQL_NUMBER_TYPES.map((numericType) => ({ params: [ - { name: 'column', type: 'number', noNestingFunctions: true }, + { name: 'column', type: numericType, noNestingFunctions: true }, ...args.map(({ name: paramName, type, constantOnly }) => ({ name: paramName, type, @@ -40,8 +43,8 @@ function createNumericAggDefinition({ constantOnly, })), ], - returnType: 'number', - }, + returnType: returnType ? returnType(numericType) : numericType, + })), ], examples: [ `from index | stats result = ${name}(field${extraParamsExample})`, @@ -56,18 +59,28 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.avgDoc', { defaultMessage: 'Returns the average of the values in a field', }), + returnType: () => 'double' as FunctionReturnType, }, { name: 'sum', description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.sumDoc', { defaultMessage: 'Returns the sum of the values in a field.', }), + returnType: (numericType: FunctionParameterType): FunctionReturnType => { + switch (numericType) { + case 'double': + return 'double'; + default: + return 'long'; + } + }, }, { name: 'median', description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.medianDoc', { defaultMessage: 'Returns the 50% percentile.', }), + returnType: () => 'double' as FunctionReturnType, }, { name: 'median_absolute_deviation', @@ -78,20 +91,42 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ 'Returns the median of each data point’s deviation from the median of the entire sample.', } ), - }, - { - name: 'percentile', - description: i18n.translate( - 'kbn-esql-validation-autocomplete.esql.definitions.percentiletDoc', - { - defaultMessage: 'Returns the n percentile of a field.', - } - ), - args: [{ name: 'percentile', type: 'number' as const, value: '90', constantOnly: true }], + returnType: () => 'double' as FunctionReturnType, }, ] .map(createNumericAggDefinition) .concat([ + { + name: 'percentile', + description: i18n.translate( + 'kbn-esql-validation-autocomplete.esql.definitions.percentiletDoc', + { + defaultMessage: 'Returns the n percentile of a field.', + } + ), + type: 'agg', + supportedCommands: ['stats', 'metrics'], + signatures: [ + ...ESQL_COMMON_NUMERIC_TYPES.map((numericType: FunctionParameterType) => { + return ESQL_COMMON_NUMERIC_TYPES.map((weightType: FunctionParameterType) => ({ + params: [ + { + name: 'column', + type: numericType, + noNestingFunctions: true, + }, + { + name: 'percentile', + type: weightType, + noNestingFunctions: true, + constantOnly: true, + }, + ], + returnType: 'double' as FunctionReturnType, + })); + }).flat(), + ], + }, { name: 'max', description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.maxDoc', { @@ -100,13 +135,17 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ type: 'agg', supportedCommands: ['stats', 'metrics'], signatures: [ + ...ESQL_COMMON_NUMERIC_TYPES.map((type) => ({ + params: [{ name: 'column', type, noNestingFunctions: true }], + returnType: type, + })), { - params: [{ name: 'column', type: 'number', noNestingFunctions: true }], - returnType: 'number', + params: [{ name: 'column', type: 'date', noNestingFunctions: true }], + returnType: 'date', }, { - params: [{ name: 'column', type: 'date', noNestingFunctions: true }], - returnType: 'number', + params: [{ name: 'column', type: 'date_period', noNestingFunctions: true }], + returnType: 'date_period', }, { params: [{ name: 'column', type: 'boolean', noNestingFunctions: true }], @@ -127,13 +166,17 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ type: 'agg', supportedCommands: ['stats', 'metrics'], signatures: [ + ...ESQL_COMMON_NUMERIC_TYPES.map((type) => ({ + params: [{ name: 'column', type, noNestingFunctions: true }], + returnType: type, + })), { - params: [{ name: 'column', type: 'number', noNestingFunctions: true }], - returnType: 'number', + params: [{ name: 'column', type: 'date', noNestingFunctions: true }], + returnType: 'date', }, { - params: [{ name: 'column', type: 'date', noNestingFunctions: true }], - returnType: 'number', + params: [{ name: 'column', type: 'date_period', noNestingFunctions: true }], + returnType: 'date_period', }, { params: [{ name: 'column', type: 'boolean', noNestingFunctions: true }], @@ -166,7 +209,7 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ optional: true, }, ], - returnType: 'number', + returnType: 'long', }, ], examples: [`from index | stats result = count(field)`, `from index | stats count(field)`], @@ -185,9 +228,14 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ { params: [ { name: 'column', type: 'any', noNestingFunctions: true }, - { name: 'precision', type: 'number', noNestingFunctions: true, optional: true }, + ...ESQL_NUMBER_TYPES.map((type) => ({ + name: 'precision', + type, + noNestingFunctions: true, + optional: true, + })), ], - returnType: 'number', + returnType: 'long', }, ], examples: [ @@ -258,14 +306,14 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ }, { name: 'limit', - type: 'number', + type: 'integer', noNestingFunctions: true, optional: false, constantOnly: true, }, { name: 'order', - type: 'string', + type: 'keyword', noNestingFunctions: true, optional: false, constantOnly: true, @@ -292,23 +340,25 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ ), supportedCommands: ['stats', 'metrics'], signatures: [ - { - params: [ - { - name: 'number', - type: 'number', - noNestingFunctions: true, - optional: false, - }, - { - name: 'weight', - type: 'number', - noNestingFunctions: true, - optional: false, - }, - ], - returnType: 'number', - }, + ...ESQL_COMMON_NUMERIC_TYPES.map((numericType: FunctionParameterType) => { + return ESQL_COMMON_NUMERIC_TYPES.map((weightType: FunctionParameterType) => ({ + params: [ + { + name: 'number', + type: numericType, + noNestingFunctions: true, + optional: false, + }, + { + name: 'weight', + type: weightType, + noNestingFunctions: true, + optional: false, + }, + ], + returnType: 'double' as FunctionReturnType, + })); + }).flat(), ], examples: [ `from employees | stats w_avg = weighted_avg(salary, height) by languages | eval w_avg = round(w_avg)`, diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/builtin.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/builtin.ts index a32cba3d191c3..10945d1c6b135 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/builtin.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/builtin.ts @@ -7,14 +7,14 @@ */ import { i18n } from '@kbn/i18n'; +import { ESQL_NUMBER_TYPES, isNumericType } from '../shared/esql_types'; import type { FunctionDefinition, FunctionParameterType, FunctionReturnType } from './types'; +type MathFunctionSignature = [FunctionParameterType, FunctionParameterType, FunctionReturnType]; + function createMathDefinition( name: string, - types: Array< - | (FunctionParameterType & FunctionReturnType) - | [FunctionParameterType, FunctionParameterType, FunctionReturnType] - >, + functionSignatures: MathFunctionSignature[], description: string, validate?: FunctionDefinition['validate'] ): FunctionDefinition { @@ -24,28 +24,41 @@ function createMathDefinition( description, supportedCommands: ['eval', 'where', 'row', 'stats', 'metrics', 'sort'], supportedOptions: ['by'], - signatures: types.map((type) => { - if (Array.isArray(type)) { - return { - params: [ - { name: 'left', type: type[0] }, - { name: 'right', type: type[1] }, - ], - returnType: type[2], - }; - } + signatures: functionSignatures.map((functionSignature) => { + const [lhs, rhs, result] = functionSignature; return { params: [ - { name: 'left', type }, - { name: 'right', type }, + { name: 'left', type: lhs }, + { name: 'right', type: rhs }, ], - returnType: type, + returnType: result, }; }), validate, }; } +// https://www.elastic.co/guide/en/elasticsearch/reference/master/esql-functions-operators.html#_less_than +const baseComparisonTypeTable: MathFunctionSignature[] = [ + ['date', 'date', 'boolean'], + ['double', 'double', 'boolean'], + ['double', 'integer', 'boolean'], + ['double', 'long', 'boolean'], + ['integer', 'double', 'boolean'], + ['integer', 'integer', 'boolean'], + ['integer', 'long', 'boolean'], + ['ip', 'ip', 'boolean'], + ['keyword', 'keyword', 'boolean'], + ['keyword', 'text', 'boolean'], + ['long', 'double', 'boolean'], + ['long', 'integer', 'boolean'], + ['long', 'long', 'boolean'], + ['text', 'keyword', 'boolean'], + ['text', 'text', 'boolean'], + ['unsigned_long', 'unsigned_long', 'boolean'], + ['version', 'version', 'boolean'], +]; + function createComparisonDefinition( { name, @@ -58,6 +71,17 @@ function createComparisonDefinition( }, validate?: FunctionDefinition['validate'] ): FunctionDefinition { + const commonSignatures = baseComparisonTypeTable.map((functionSignature) => { + const [lhs, rhs, result] = functionSignature; + return { + params: [ + { name: 'left', type: lhs }, + { name: 'right', type: rhs }, + ], + returnType: result, + }; + }); + return { type: 'builtin' as const, name, @@ -66,41 +90,7 @@ function createComparisonDefinition( supportedOptions: ['by'], validate, signatures: [ - { - params: [ - { name: 'left', type: 'number' }, - { name: 'right', type: 'number' }, - ], - returnType: 'boolean', - }, - { - params: [ - { name: 'left', type: 'string' }, - { name: 'right', type: 'string' }, - ], - returnType: 'boolean', - }, - { - params: [ - { name: 'left', type: 'date' }, - { name: 'right', type: 'date' }, - ], - returnType: 'boolean', - }, - { - params: [ - { name: 'left', type: 'ip' }, - { name: 'right', type: 'ip' }, - ], - returnType: 'boolean', - }, - { - params: [ - { name: 'left', type: 'version' }, - { name: 'right', type: 'version' }, - ], - returnType: 'boolean', - }, + ...commonSignatures, // constant strings okay because of implicit casting for // string to version and ip // @@ -113,13 +103,13 @@ function createComparisonDefinition( { params: [ { name: 'left', type }, - { name: 'right', type: 'string' as const, constantOnly: true }, + { name: 'right', type: 'text' as const, constantOnly: true }, ], returnType: 'boolean' as const, }, { params: [ - { name: 'right', type: 'string' as const, constantOnly: true }, + { name: 'left', type: 'text' as const, constantOnly: true }, { name: 'right', type }, ], returnType: 'boolean' as const, @@ -130,31 +120,111 @@ function createComparisonDefinition( }; } +const addTypeTable: MathFunctionSignature[] = [ + ['date_period', 'date_period', 'date_period'], + ['date_period', 'date', 'date'], + ['date', 'date_period', 'date'], + ['date', 'time_duration', 'date'], + ['date', 'time_literal', 'date'], + ['double', 'double', 'double'], + ['double', 'integer', 'double'], + ['double', 'long', 'double'], + ['integer', 'double', 'double'], + ['integer', 'integer', 'integer'], + ['integer', 'long', 'long'], + ['long', 'double', 'double'], + ['long', 'integer', 'long'], + ['long', 'long', 'long'], + ['time_duration', 'date', 'date'], + ['time_duration', 'time_duration', 'time_duration'], + ['unsigned_long', 'unsigned_long', 'unsigned_long'], + ['time_literal', 'date', 'date'], +]; + +const subtractTypeTable: MathFunctionSignature[] = [ + ['date_period', 'date_period', 'date_period'], + ['date', 'date_period', 'date'], + ['date', 'time_duration', 'date'], + ['date', 'time_literal', 'date'], + ['double', 'double', 'double'], + ['double', 'integer', 'double'], + ['double', 'long', 'double'], + ['integer', 'double', 'double'], + ['integer', 'integer', 'integer'], + ['integer', 'long', 'long'], + ['long', 'double', 'double'], + ['long', 'integer', 'long'], + ['long', 'long', 'long'], + ['time_duration', 'date', 'date'], + ['time_duration', 'time_duration', 'time_duration'], + ['unsigned_long', 'unsigned_long', 'unsigned_long'], + ['time_literal', 'date', 'date'], +]; + +const multiplyTypeTable: MathFunctionSignature[] = [ + ['double', 'double', 'double'], + ['double', 'integer', 'double'], + ['double', 'long', 'double'], + ['integer', 'double', 'double'], + ['integer', 'integer', 'integer'], + ['integer', 'long', 'long'], + ['long', 'double', 'double'], + ['long', 'integer', 'long'], + ['long', 'long', 'long'], + ['unsigned_long', 'unsigned_long', 'unsigned_long'], +]; + +const divideTypeTable: MathFunctionSignature[] = [ + ['double', 'double', 'double'], + ['double', 'integer', 'double'], + ['double', 'long', 'double'], + ['integer', 'double', 'double'], + ['integer', 'integer', 'integer'], + ['integer', 'long', 'long'], + ['long', 'double', 'double'], + ['long', 'integer', 'long'], + ['long', 'long', 'long'], + ['unsigned_long', 'unsigned_long', 'unsigned_long'], +]; + +const modulusTypeTable: MathFunctionSignature[] = [ + ['double', 'double', 'double'], + ['double', 'integer', 'double'], + ['double', 'long', 'double'], + ['integer', 'double', 'double'], + ['integer', 'integer', 'integer'], + ['integer', 'long', 'long'], + ['long', 'double', 'double'], + ['long', 'integer', 'long'], + ['long', 'long', 'long'], + ['unsigned_long', 'unsigned_long', 'unsigned_long'], +]; + export const mathFunctions: FunctionDefinition[] = [ createMathDefinition( '+', - ['number', ['date', 'time_literal', 'date'], ['time_literal', 'date', 'date']], + addTypeTable, i18n.translate('kbn-esql-validation-autocomplete.esql.definition.addDoc', { defaultMessage: 'Add (+)', }) ), createMathDefinition( '-', - ['number', ['date', 'time_literal', 'date'], ['time_literal', 'date', 'date']], + subtractTypeTable, i18n.translate('kbn-esql-validation-autocomplete.esql.definition.subtractDoc', { defaultMessage: 'Subtract (-)', }) ), createMathDefinition( '*', - ['number'], + multiplyTypeTable, i18n.translate('kbn-esql-validation-autocomplete.esql.definition.multiplyDoc', { defaultMessage: 'Multiply (*)', }) ), createMathDefinition( '/', - ['number'], + divideTypeTable, i18n.translate('kbn-esql-validation-autocomplete.esql.definition.divideDoc', { defaultMessage: 'Divide (/)', }), @@ -162,7 +232,7 @@ export const mathFunctions: FunctionDefinition[] = [ const [left, right] = fnDef.args; const messages = []; if (!Array.isArray(left) && !Array.isArray(right)) { - if (right.type === 'literal' && right.literalType === 'number') { + if (right.type === 'literal' && isNumericType(right.literalType)) { if (right.value === 0) { messages.push({ type: 'warning' as const, @@ -187,7 +257,7 @@ export const mathFunctions: FunctionDefinition[] = [ ), createMathDefinition( '%', - ['number'], + modulusTypeTable, i18n.translate('kbn-esql-validation-autocomplete.esql.definition.moduleDoc', { defaultMessage: 'Module (%)', }), @@ -195,7 +265,7 @@ export const mathFunctions: FunctionDefinition[] = [ const [left, right] = fnDef.args; const messages = []; if (!Array.isArray(left) && !Array.isArray(right)) { - if (right.type === 'literal' && right.literalType === 'number') { + if (right.type === 'literal' && isNumericType(right.literalType)) { if (right.value === 0) { messages.push({ type: 'warning' as const, @@ -244,7 +314,7 @@ const comparisonFunctions: FunctionDefinition[] = [ }, { params: [ - { name: 'right', type: 'string' as const, constantOnly: true }, + { name: 'left', type: 'string' as const, constantOnly: true }, { name: 'right', type: 'boolean' as const }, ], returnType: 'boolean' as const, @@ -274,7 +344,7 @@ const comparisonFunctions: FunctionDefinition[] = [ }, { params: [ - { name: 'right', type: 'string' as const, constantOnly: true }, + { name: 'left', type: 'string' as const, constantOnly: true }, { name: 'right', type: 'boolean' as const }, ], returnType: 'boolean' as const, @@ -347,8 +417,15 @@ const likeFunctions: FunctionDefinition[] = [ signatures: [ { params: [ - { name: 'left', type: 'string' as const }, - { name: 'right', type: 'string' as const }, + { name: 'left', type: 'text' as const }, + { name: 'right', type: 'text' as const }, + ], + returnType: 'boolean', + }, + { + params: [ + { name: 'left', type: 'keyword' as const }, + { name: 'right', type: 'keyword' as const }, ], returnType: 'boolean', }, @@ -383,17 +460,24 @@ const inFunctions: FunctionDefinition[] = [ description, supportedCommands: ['eval', 'where', 'row', 'sort'], signatures: [ - { + ...ESQL_NUMBER_TYPES.map((type) => ({ params: [ - { name: 'left', type: 'number' }, + { name: 'left', type: type as FunctionParameterType }, + { name: 'right', type: 'any[]' as FunctionParameterType }, + ], + returnType: 'boolean' as FunctionReturnType, + })), + { + params: [ + { name: 'left', type: 'keyword' }, { name: 'right', type: 'any[]' }, ], returnType: 'boolean', }, { params: [ - { name: 'left', type: 'string' }, + { name: 'left', type: 'text' }, { name: 'right', type: 'any[]' }, ], returnType: 'boolean', diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/commands.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/commands.ts index 033518ac16c37..df0d5f02f8cf0 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/commands.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/commands.ts @@ -273,7 +273,7 @@ export const commandDefinitions: CommandDefinition[] = [ examples: ['… | limit 100', '… | limit 0'], signature: { multipleParams: false, - params: [{ name: 'size', type: 'number', constantOnly: true }], + params: [{ name: 'size', type: 'integer', constantOnly: true }], }, options: [], modes: [], @@ -390,6 +390,7 @@ export const commandDefinitions: CommandDefinition[] = [ signature: { multipleParams: false, params: [ + // innerType: 'string' is interpreted as keyword and text (see columnParamsWithInnerTypes) { name: 'column', type: 'column', innerType: 'string' }, { name: 'pattern', type: 'string', constantOnly: true }, ], @@ -407,6 +408,7 @@ export const commandDefinitions: CommandDefinition[] = [ signature: { multipleParams: false, params: [ + // innerType: 'string' is interpreted as keyword and text (see columnParamsWithInnerTypes) { name: 'column', type: 'column', innerType: 'string' }, { name: 'pattern', type: 'string', constantOnly: true }, ], diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts index a02a09757d033..3b9d9131e7643 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts @@ -43,11 +43,41 @@ const absDefinition: FunctionDefinition = { params: [ { name: 'number', - type: 'number', + type: 'double', optional: false, }, ], - returnType: 'number', + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'unsigned_long', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -72,11 +102,41 @@ const acosDefinition: FunctionDefinition = { params: [ { name: 'number', - type: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', optional: false, }, ], - returnType: 'number', + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -99,85 +159,56 @@ const asinDefinition: FunctionDefinition = { params: [ { name: 'number', - type: 'number', + type: 'double', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW a=.9\n| EVAL asin=ASIN(a)'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const atanDefinition: FunctionDefinition = { - type: 'eval', - name: 'atan', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.atan', { - defaultMessage: - 'Returns the arctangent of the input\nnumeric expression as an angle, expressed in radians.', - }), - alias: undefined, - signatures: [ { params: [ { name: 'number', - type: 'number', + type: 'integer', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW a=12.9\n| EVAL atan=ATAN(a)'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const atan2Definition: FunctionDefinition = { - type: 'eval', - name: 'atan2', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.atan2', { - defaultMessage: - 'The angle between the positive x-axis and the ray from the\norigin to the point (x , y) in the Cartesian plane, expressed in radians.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'y_coordinate', - type: 'number', + name: 'number', + type: 'long', optional: false, }, + ], + returnType: 'double', + }, + { + params: [ { - name: 'x_coordinate', - type: 'number', + name: 'number', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: ['ROW y=12.9, x=.6\n| EVAL atan2=ATAN2(y, x)'], + examples: ['ROW a=.9\n| EVAL asin=ASIN(a)'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const cbrtDefinition: FunctionDefinition = { +const atanDefinition: FunctionDefinition = { type: 'eval', - name: 'cbrt', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.cbrt', { + name: 'atan', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.atan', { defaultMessage: - 'Returns the cube root of a number. The input can be any numeric value, the return value is always a double.\nCube roots of infinities are null.', + 'Returns the arctangent of the input\nnumeric expression as an angle, expressed in radians.', }), alias: undefined, signatures: [ @@ -185,503 +216,1075 @@ const cbrtDefinition: FunctionDefinition = { params: [ { name: 'number', - type: 'number', + type: 'double', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW d = 1000.0\n| EVAL c = cbrt(d)'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const ceilDefinition: FunctionDefinition = { - type: 'eval', - name: 'ceil', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.ceil', { - defaultMessage: 'Round a number up to the nearest integer.', - }), - alias: undefined, - signatures: [ { params: [ { name: 'number', - type: 'number', + type: 'integer', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW a=1.8\n| EVAL a=CEIL(a)'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const cidrMatchDefinition: FunctionDefinition = { - type: 'eval', - name: 'cidr_match', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.cidr_match', { - defaultMessage: - 'Returns true if the provided IP is contained in one of the provided CIDR blocks.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'ip', - type: 'ip', + name: 'number', + type: 'long', optional: false, }, + ], + returnType: 'double', + }, + { + params: [ { - name: 'blockX', - type: 'string', + name: 'number', + type: 'unsigned_long', optional: false, }, ], - returnType: 'boolean', - minParams: 2, + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: [ - 'FROM hosts \n| WHERE CIDR_MATCH(ip1, "127.0.0.2/32", "127.0.0.3/32") \n| KEEP card, host, ip0, ip1', - ], + examples: ['ROW a=12.9\n| EVAL atan=ATAN(a)'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const coalesceDefinition: FunctionDefinition = { +const atan2Definition: FunctionDefinition = { type: 'eval', - name: 'coalesce', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.coalesce', { + name: 'atan2', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.atan2', { defaultMessage: - 'Returns the first of its arguments that is not null. If all arguments are null, it returns `null`.', + 'The angle between the positive x-axis and the ray from the\norigin to the point (x , y) in the Cartesian plane, expressed in radians.', }), alias: undefined, signatures: [ { params: [ { - name: 'first', - type: 'boolean', + name: 'y_coordinate', + type: 'double', + optional: false, + }, + { + name: 'x_coordinate', + type: 'double', optional: false, }, ], - returnType: 'boolean', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'boolean', + name: 'y_coordinate', + type: 'double', optional: false, }, { - name: 'rest', - type: 'boolean', - optional: true, + name: 'x_coordinate', + type: 'integer', + optional: false, }, ], - returnType: 'boolean', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'cartesian_point', + name: 'y_coordinate', + type: 'double', optional: false, }, { - name: 'rest', - type: 'cartesian_point', - optional: true, + name: 'x_coordinate', + type: 'long', + optional: false, }, ], - returnType: 'cartesian_point', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'cartesian_shape', + name: 'y_coordinate', + type: 'double', optional: false, }, { - name: 'rest', - type: 'cartesian_shape', - optional: true, + name: 'x_coordinate', + type: 'unsigned_long', + optional: false, }, ], - returnType: 'cartesian_shape', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'date', + name: 'y_coordinate', + type: 'integer', optional: false, }, { - name: 'rest', - type: 'date', - optional: true, + name: 'x_coordinate', + type: 'double', + optional: false, }, ], - returnType: 'date', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'geo_point', + name: 'y_coordinate', + type: 'integer', optional: false, }, { - name: 'rest', - type: 'geo_point', - optional: true, + name: 'x_coordinate', + type: 'integer', + optional: false, }, ], - returnType: 'geo_point', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'geo_shape', + name: 'y_coordinate', + type: 'integer', optional: false, }, { - name: 'rest', - type: 'geo_shape', - optional: true, + name: 'x_coordinate', + type: 'long', + optional: false, }, ], - returnType: 'geo_shape', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'number', + name: 'y_coordinate', + type: 'integer', + optional: false, + }, + { + name: 'x_coordinate', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'number', + name: 'y_coordinate', + type: 'long', optional: false, }, { - name: 'rest', - type: 'number', - optional: true, + name: 'x_coordinate', + type: 'double', + optional: false, }, ], - returnType: 'number', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'ip', + name: 'y_coordinate', + type: 'long', optional: false, }, { - name: 'rest', - type: 'ip', - optional: true, + name: 'x_coordinate', + type: 'integer', + optional: false, }, ], - returnType: 'ip', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'string', + name: 'y_coordinate', + type: 'long', + optional: false, + }, + { + name: 'x_coordinate', + type: 'long', optional: false, }, ], - returnType: 'string', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'string', + name: 'y_coordinate', + type: 'long', optional: false, }, { - name: 'rest', - type: 'string', - optional: true, + name: 'x_coordinate', + type: 'unsigned_long', + optional: false, }, ], - returnType: 'string', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'version', + name: 'y_coordinate', + type: 'unsigned_long', optional: false, }, { - name: 'rest', - type: 'version', - optional: true, + name: 'x_coordinate', + type: 'double', + optional: false, }, ], - returnType: 'version', - minParams: 1, + returnType: 'double', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW a=null, b="b"\n| EVAL COALESCE(a, b)'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const concatDefinition: FunctionDefinition = { - type: 'eval', - name: 'concat', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.concat', { - defaultMessage: 'Concatenates two or more strings.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'string1', - type: 'string', + name: 'y_coordinate', + type: 'unsigned_long', optional: false, }, { - name: 'string2', - type: 'string', + name: 'x_coordinate', + type: 'integer', optional: false, }, ], - returnType: 'string', - minParams: 2, + returnType: 'double', + }, + { + params: [ + { + name: 'y_coordinate', + type: 'unsigned_long', + optional: false, + }, + { + name: 'x_coordinate', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'y_coordinate', + type: 'unsigned_long', + optional: false, + }, + { + name: 'x_coordinate', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: [ - 'FROM employees\n| KEEP first_name, last_name\n| EVAL fullname = CONCAT(first_name, " ", last_name)', - ], + examples: ['ROW y=12.9, x=.6\n| EVAL atan2=ATAN2(y, x)'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const cosDefinition: FunctionDefinition = { +const cbrtDefinition: FunctionDefinition = { type: 'eval', - name: 'cos', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.cos', { - defaultMessage: 'Returns the cosine of an angle.', + name: 'cbrt', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.cbrt', { + defaultMessage: + 'Returns the cube root of a number. The input can be any numeric value, the return value is always a double.\nCube roots of infinities are null.', }), alias: undefined, signatures: [ { params: [ { - name: 'angle', - type: 'number', + name: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: ['ROW a=1.8 \n| EVAL cos=COS(a)'], + examples: ['ROW d = 1000.0\n| EVAL c = cbrt(d)'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const coshDefinition: FunctionDefinition = { +const ceilDefinition: FunctionDefinition = { type: 'eval', - name: 'cosh', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.cosh', { - defaultMessage: 'Returns the hyperbolic cosine of an angle.', + name: 'ceil', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.ceil', { + defaultMessage: 'Round a number up to the nearest integer.', }), alias: undefined, signatures: [ { params: [ { - name: 'angle', - type: 'number', + name: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'unsigned_long', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: ['ROW a=1.8 \n| EVAL cosh=COSH(a)'], + examples: ['ROW a=1.8\n| EVAL a=CEIL(a)'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const dateDiffDefinition: FunctionDefinition = { +const cidrMatchDefinition: FunctionDefinition = { type: 'eval', - name: 'date_diff', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.date_diff', { + name: 'cidr_match', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.cidr_match', { defaultMessage: - 'Subtracts the `startTimestamp` from the `endTimestamp` and returns the difference in multiples of `unit`.\nIf `startTimestamp` is later than the `endTimestamp`, negative values are returned.', + 'Returns true if the provided IP is contained in one of the provided CIDR blocks.', }), alias: undefined, signatures: [ { params: [ { - name: 'unit', - type: 'string', + name: 'ip', + type: 'ip', optional: false, - literalOptions: [ - 'year', - 'years', - 'yy', - 'yyyy', - 'quarter', - 'quarters', - 'qq', - 'q', - 'month', - 'months', - 'mm', - 'm', - 'dayofyear', - 'dy', - 'y', - 'day', - 'days', - 'dd', - 'd', - 'week', - 'weeks', - 'wk', - 'ww', - 'weekday', - 'weekdays', - 'dw', - 'hour', - 'hours', - 'hh', - 'minute', - 'minutes', - 'mi', - 'n', - 'second', - 'seconds', - 'ss', - 's', - 'millisecond', - 'milliseconds', - 'ms', - 'microsecond', - 'microseconds', - 'mcs', - 'nanosecond', - 'nanoseconds', - 'ns', - ], - literalSuggestions: [ - 'year', - 'quarter', - 'month', - 'week', - 'day', - 'hour', - 'minute', - 'second', - 'millisecond', - 'microsecond', - 'nanosecond', - ], }, { - name: 'startTimestamp', - type: 'date', + name: 'blockX', + type: 'keyword', optional: false, }, + ], + returnType: 'boolean', + minParams: 2, + }, + { + params: [ { - name: 'endTimestamp', - type: 'date', + name: 'ip', + type: 'ip', + optional: false, + }, + { + name: 'blockX', + type: 'text', optional: false, }, ], - returnType: 'number', + returnType: 'boolean', + minParams: 2, }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, examples: [ - 'ROW date1 = TO_DATETIME("2023-12-02T11:00:00.000Z"), date2 = TO_DATETIME("2023-12-02T11:00:00.001Z")\n| EVAL dd_ms = DATE_DIFF("microseconds", date1, date2)', + 'FROM hosts \n| WHERE CIDR_MATCH(ip1, "127.0.0.2/32", "127.0.0.3/32") \n| KEEP card, host, ip0, ip1', ], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const dateExtractDefinition: FunctionDefinition = { +const coalesceDefinition: FunctionDefinition = { type: 'eval', - name: 'date_extract', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.date_extract', { - defaultMessage: 'Extracts parts of a date, like year, month, day, hour.', + name: 'coalesce', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.coalesce', { + defaultMessage: + 'Returns the first of its arguments that is not null. If all arguments are null, it returns `null`.', }), alias: undefined, signatures: [ { params: [ { - name: 'datePart', - type: 'string', + name: 'first', + type: 'boolean', optional: false, - literalOptions: [ - 'ALIGNED_DAY_OF_WEEK_IN_MONTH', - 'ALIGNED_DAY_OF_WEEK_IN_YEAR', - 'ALIGNED_WEEK_OF_MONTH', - 'ALIGNED_WEEK_OF_YEAR', - 'AMPM_OF_DAY', - 'CLOCK_HOUR_OF_AMPM', - 'CLOCK_HOUR_OF_DAY', - 'DAY_OF_MONTH', - 'DAY_OF_WEEK', - 'DAY_OF_YEAR', - 'EPOCH_DAY', + }, + ], + returnType: 'boolean', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'boolean', + optional: false, + }, + { + name: 'rest', + type: 'boolean', + optional: true, + }, + ], + returnType: 'boolean', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'cartesian_point', + optional: false, + }, + { + name: 'rest', + type: 'cartesian_point', + optional: true, + }, + ], + returnType: 'cartesian_point', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'cartesian_shape', + optional: false, + }, + { + name: 'rest', + type: 'cartesian_shape', + optional: true, + }, + ], + returnType: 'cartesian_shape', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'date', + optional: false, + }, + { + name: 'rest', + type: 'date', + optional: true, + }, + ], + returnType: 'date', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'geo_point', + optional: false, + }, + { + name: 'rest', + type: 'geo_point', + optional: true, + }, + ], + returnType: 'geo_point', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'geo_shape', + optional: false, + }, + { + name: 'rest', + type: 'geo_shape', + optional: true, + }, + ], + returnType: 'geo_shape', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'integer', + optional: false, + }, + ], + returnType: 'integer', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'integer', + optional: false, + }, + { + name: 'rest', + type: 'integer', + optional: true, + }, + ], + returnType: 'integer', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'ip', + optional: false, + }, + { + name: 'rest', + type: 'ip', + optional: true, + }, + ], + returnType: 'ip', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'keyword', + optional: false, + }, + { + name: 'rest', + type: 'keyword', + optional: true, + }, + ], + returnType: 'keyword', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'long', + optional: false, + }, + ], + returnType: 'long', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'long', + optional: false, + }, + { + name: 'rest', + type: 'long', + optional: true, + }, + ], + returnType: 'long', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'text', + optional: false, + }, + ], + returnType: 'text', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'text', + optional: false, + }, + { + name: 'rest', + type: 'text', + optional: true, + }, + ], + returnType: 'text', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'version', + optional: false, + }, + { + name: 'rest', + type: 'version', + optional: true, + }, + ], + returnType: 'version', + minParams: 1, + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a=null, b="b"\n| EVAL COALESCE(a, b)'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const concatDefinition: FunctionDefinition = { + type: 'eval', + name: 'concat', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.concat', { + defaultMessage: 'Concatenates two or more strings.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'string1', + type: 'keyword', + optional: false, + }, + { + name: 'string2', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + minParams: 2, + }, + { + params: [ + { + name: 'string1', + type: 'keyword', + optional: false, + }, + { + name: 'string2', + type: 'text', + optional: false, + }, + ], + returnType: 'keyword', + minParams: 2, + }, + { + params: [ + { + name: 'string1', + type: 'text', + optional: false, + }, + { + name: 'string2', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + minParams: 2, + }, + { + params: [ + { + name: 'string1', + type: 'text', + optional: false, + }, + { + name: 'string2', + type: 'text', + optional: false, + }, + ], + returnType: 'keyword', + minParams: 2, + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'FROM employees\n| KEEP first_name, last_name\n| EVAL fullname = CONCAT(first_name, " ", last_name)', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const cosDefinition: FunctionDefinition = { + type: 'eval', + name: 'cos', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.cos', { + defaultMessage: 'Returns the cosine of an angle.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'angle', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'double', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a=1.8 \n| EVAL cos=COS(a)'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const coshDefinition: FunctionDefinition = { + type: 'eval', + name: 'cosh', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.cosh', { + defaultMessage: 'Returns the hyperbolic cosine of an angle.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'angle', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'double', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a=1.8 \n| EVAL cosh=COSH(a)'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const dateDiffDefinition: FunctionDefinition = { + type: 'eval', + name: 'date_diff', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.date_diff', { + defaultMessage: + 'Subtracts the `startTimestamp` from the `endTimestamp` and returns the difference in multiples of `unit`.\nIf `startTimestamp` is later than the `endTimestamp`, negative values are returned.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'unit', + type: 'keyword', + optional: false, + literalOptions: [ + 'year', + 'years', + 'yy', + 'yyyy', + 'quarter', + 'quarters', + 'qq', + 'q', + 'month', + 'months', + 'mm', + 'm', + 'dayofyear', + 'dy', + 'y', + 'day', + 'days', + 'dd', + 'd', + 'week', + 'weeks', + 'wk', + 'ww', + 'weekday', + 'weekdays', + 'dw', + 'hour', + 'hours', + 'hh', + 'minute', + 'minutes', + 'mi', + 'n', + 'second', + 'seconds', + 'ss', + 's', + 'millisecond', + 'milliseconds', + 'ms', + 'microsecond', + 'microseconds', + 'mcs', + 'nanosecond', + 'nanoseconds', + 'ns', + ], + literalSuggestions: [ + 'year', + 'quarter', + 'month', + 'week', + 'day', + 'hour', + 'minute', + 'second', + 'millisecond', + 'microsecond', + 'nanosecond', + ], + }, + { + name: 'startTimestamp', + type: 'date', + optional: false, + }, + { + name: 'endTimestamp', + type: 'date', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'unit', + type: 'text', + optional: false, + }, + { + name: 'startTimestamp', + type: 'date', + optional: false, + }, + { + name: 'endTimestamp', + type: 'date', + optional: false, + }, + ], + returnType: 'integer', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW date1 = TO_DATETIME("2023-12-02T11:00:00.000Z"), date2 = TO_DATETIME("2023-12-02T11:00:00.001Z")\n| EVAL dd_ms = DATE_DIFF("microseconds", date1, date2)', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const dateExtractDefinition: FunctionDefinition = { + type: 'eval', + name: 'date_extract', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.date_extract', { + defaultMessage: 'Extracts parts of a date, like year, month, day, hour.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'datePart', + type: 'keyword', + optional: false, + literalOptions: [ + 'ALIGNED_DAY_OF_WEEK_IN_MONTH', + 'ALIGNED_DAY_OF_WEEK_IN_YEAR', + 'ALIGNED_WEEK_OF_MONTH', + 'ALIGNED_WEEK_OF_YEAR', + 'AMPM_OF_DAY', + 'CLOCK_HOUR_OF_AMPM', + 'CLOCK_HOUR_OF_DAY', + 'DAY_OF_MONTH', + 'DAY_OF_WEEK', + 'DAY_OF_YEAR', + 'EPOCH_DAY', 'ERA', 'HOUR_OF_AMPM', 'HOUR_OF_DAY', @@ -704,842 +1307,2528 @@ const dateExtractDefinition: FunctionDefinition = { ], }, { - name: 'date', - type: 'date', + name: 'date', + type: 'date', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'datePart', + type: 'text', + optional: false, + }, + { + name: 'date', + type: 'date', + optional: false, + }, + ], + returnType: 'long', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW date = DATE_PARSE("yyyy-MM-dd", "2022-05-06")\n| EVAL year = DATE_EXTRACT("year", date)', + 'FROM sample_data\n| WHERE DATE_EXTRACT("hour_of_day", @timestamp) < 9 AND DATE_EXTRACT("hour_of_day", @timestamp) >= 17', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const dateFormatDefinition: FunctionDefinition = { + type: 'eval', + name: 'date_format', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.date_format', { + defaultMessage: 'Returns a string representation of a date, in the provided format.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'dateFormat', + type: 'keyword', + optional: true, + }, + { + name: 'date', + type: 'date', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'dateFormat', + type: 'text', + optional: true, + }, + { + name: 'date', + type: 'date', + optional: false, + }, + ], + returnType: 'keyword', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'FROM employees\n| KEEP first_name, last_name, hire_date\n| EVAL hired = DATE_FORMAT("YYYY-MM-dd", hire_date)', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const dateParseDefinition: FunctionDefinition = { + type: 'eval', + name: 'date_parse', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.date_parse', { + defaultMessage: + 'Returns a date by parsing the second argument using the format specified in the first argument.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'datePattern', + type: 'keyword', + optional: true, + }, + { + name: 'dateString', + type: 'keyword', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'datePattern', + type: 'keyword', + optional: true, + }, + { + name: 'dateString', + type: 'text', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'datePattern', + type: 'text', + optional: true, + }, + { + name: 'dateString', + type: 'keyword', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'datePattern', + type: 'text', + optional: true, + }, + { + name: 'dateString', + type: 'text', + optional: false, + }, + ], + returnType: 'date', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW date_string = "2022-05-06"\n| EVAL date = DATE_PARSE("yyyy-MM-dd", date_string)'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const dateTruncDefinition: FunctionDefinition = { + type: 'eval', + name: 'date_trunc', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.date_trunc', { + defaultMessage: 'Rounds down a date to the closest interval.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'interval', + type: 'time_literal', + optional: false, + }, + { + name: 'date', + type: 'date', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'interval', + type: 'time_duration', + optional: false, + }, + { + name: 'date', + type: 'date', + optional: false, + }, + ], + returnType: 'date', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'FROM employees\n| KEEP first_name, last_name, hire_date\n| EVAL year_hired = DATE_TRUNC(1 year, hire_date)', + 'FROM employees\n| EVAL year = DATE_TRUNC(1 year, hire_date)\n| STATS hires = COUNT(emp_no) BY year\n| SORT year', + 'FROM sample_data\n| EVAL error = CASE(message LIKE "*error*", 1, 0)\n| EVAL hour = DATE_TRUNC(1 hour, @timestamp)\n| STATS error_rate = AVG(error) by hour\n| SORT hour', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const eDefinition: FunctionDefinition = { + type: 'eval', + name: 'e', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.e', { + defaultMessage: "Returns Euler's number.", + }), + alias: undefined, + signatures: [ + { + params: [], + returnType: 'double', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW E()'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const endsWithDefinition: FunctionDefinition = { + type: 'eval', + name: 'ends_with', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.ends_with', { + defaultMessage: + 'Returns a boolean that indicates whether a keyword string ends with another string.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'str', + type: 'keyword', + optional: false, + }, + { + name: 'suffix', + type: 'keyword', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'str', + type: 'text', + optional: false, + }, + { + name: 'suffix', + type: 'text', + optional: false, + }, + ], + returnType: 'boolean', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['FROM employees\n| KEEP last_name\n| EVAL ln_E = ENDS_WITH(last_name, "d")'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const expDefinition: FunctionDefinition = { + type: 'eval', + name: 'exp', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.exp', { + defaultMessage: 'Returns the value of e raised to the power of the given number.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'double', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW d = 5.0\n| EVAL s = EXP(d)'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const floorDefinition: FunctionDefinition = { + type: 'eval', + name: 'floor', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.floor', { + defaultMessage: 'Round a number down to the nearest integer.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'unsigned_long', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a=1.8\n| EVAL a=FLOOR(a)'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const fromBase64Definition: FunctionDefinition = { + type: 'eval', + name: 'from_base64', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.from_base64', { + defaultMessage: 'Decode a base64 string.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', + optional: false, + }, + ], + returnType: 'keyword', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['row a = "ZWxhc3RpYw==" \n| eval d = from_base64(a)'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const greatestDefinition: FunctionDefinition = { + type: 'eval', + name: 'greatest', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.greatest', { + defaultMessage: + 'Returns the maximum value from multiple columns. This is similar to `MV_MAX`\nexcept it is intended to run on multiple columns at once.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'first', + type: 'boolean', + optional: false, + }, + ], + returnType: 'boolean', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'boolean', + optional: false, + }, + { + name: 'rest', + type: 'boolean', + optional: true, + }, + ], + returnType: 'boolean', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'double', + optional: false, + }, + { + name: 'rest', + type: 'double', + optional: true, + }, + ], + returnType: 'double', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'integer', + optional: false, + }, + ], + returnType: 'integer', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'integer', + optional: false, + }, + { + name: 'rest', + type: 'integer', + optional: true, + }, + ], + returnType: 'integer', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'ip', + optional: false, + }, + { + name: 'rest', + type: 'ip', + optional: true, + }, + ], + returnType: 'ip', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'keyword', + optional: false, + }, + { + name: 'rest', + type: 'keyword', + optional: true, + }, + ], + returnType: 'keyword', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'long', + optional: false, + }, + ], + returnType: 'long', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'long', + optional: false, + }, + { + name: 'rest', + type: 'long', + optional: true, + }, + ], + returnType: 'long', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'text', + optional: false, + }, + ], + returnType: 'text', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'text', + optional: false, + }, + { + name: 'rest', + type: 'text', + optional: true, + }, + ], + returnType: 'text', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'version', + optional: false, + }, + { + name: 'rest', + type: 'version', + optional: true, + }, + ], + returnType: 'version', + minParams: 1, + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a = 10, b = 20\n| EVAL g = GREATEST(a, b)'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const ipPrefixDefinition: FunctionDefinition = { + type: 'eval', + name: 'ip_prefix', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.ip_prefix', { + defaultMessage: 'Truncates an IP to a given prefix length.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'ip', + type: 'ip', + optional: false, + }, + { + name: 'prefixLengthV4', + type: 'integer', + optional: false, + }, + { + name: 'prefixLengthV6', + type: 'integer', + optional: false, + }, + ], + returnType: 'ip', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'row ip4 = to_ip("1.2.3.4"), ip6 = to_ip("fe80::cae2:65ff:fece:feb9")\n| eval ip4_prefix = ip_prefix(ip4, 24, 0), ip6_prefix = ip_prefix(ip6, 0, 112);', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const leastDefinition: FunctionDefinition = { + type: 'eval', + name: 'least', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.least', { + defaultMessage: + 'Returns the minimum value from multiple columns. This is similar to `MV_MIN` except it is intended to run on multiple columns at once.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'first', + type: 'boolean', + optional: false, + }, + ], + returnType: 'boolean', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'boolean', + optional: false, + }, + { + name: 'rest', + type: 'boolean', + optional: true, + }, + ], + returnType: 'boolean', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'double', + optional: false, + }, + { + name: 'rest', + type: 'double', + optional: true, + }, + ], + returnType: 'double', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'integer', + optional: false, + }, + ], + returnType: 'integer', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'integer', + optional: false, + }, + { + name: 'rest', + type: 'integer', + optional: true, + }, + ], + returnType: 'integer', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'ip', + optional: false, + }, + { + name: 'rest', + type: 'ip', + optional: true, + }, + ], + returnType: 'ip', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'keyword', + optional: false, + }, + { + name: 'rest', + type: 'keyword', + optional: true, + }, + ], + returnType: 'keyword', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'long', + optional: false, + }, + ], + returnType: 'long', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'long', + optional: false, + }, + { + name: 'rest', + type: 'long', + optional: true, + }, + ], + returnType: 'long', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'text', + optional: false, + }, + ], + returnType: 'text', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'text', + optional: false, + }, + { + name: 'rest', + type: 'text', + optional: true, + }, + ], + returnType: 'text', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'version', + optional: false, + }, + { + name: 'rest', + type: 'version', + optional: true, + }, + ], + returnType: 'version', + minParams: 1, + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a = 10, b = 20\n| EVAL l = LEAST(a, b)'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const leftDefinition: FunctionDefinition = { + type: 'eval', + name: 'left', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.left', { + defaultMessage: + "Returns the substring that extracts 'length' chars from 'string' starting from the left.", + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'string', + type: 'keyword', + optional: false, + }, + { + name: 'length', + type: 'integer', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', + optional: false, + }, + { + name: 'length', + type: 'integer', + optional: false, + }, + ], + returnType: 'keyword', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'FROM employees\n| KEEP last_name\n| EVAL left = LEFT(last_name, 3)\n| SORT last_name ASC\n| LIMIT 5', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const lengthDefinition: FunctionDefinition = { + type: 'eval', + name: 'length', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.length', { + defaultMessage: 'Returns the character length of a string.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'string', + type: 'text', + optional: false, + }, + ], + returnType: 'integer', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['FROM employees\n| KEEP first_name, last_name\n| EVAL fn_length = LENGTH(first_name)'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const locateDefinition: FunctionDefinition = { + type: 'eval', + name: 'locate', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.locate', { + defaultMessage: + 'Returns an integer that indicates the position of a keyword substring within another string.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'string', + type: 'keyword', + optional: false, + }, + { + name: 'substring', + type: 'keyword', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'string', + type: 'keyword', + optional: false, + }, + { + name: 'substring', + type: 'keyword', + optional: false, + }, + { + name: 'start', + type: 'integer', + optional: true, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'string', + type: 'keyword', + optional: false, + }, + { + name: 'substring', + type: 'text', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'string', + type: 'keyword', + optional: false, + }, + { + name: 'substring', + type: 'text', + optional: false, + }, + { + name: 'start', + type: 'integer', + optional: true, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'string', + type: 'text', + optional: false, + }, + { + name: 'substring', + type: 'keyword', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'string', + type: 'text', + optional: false, + }, + { + name: 'substring', + type: 'keyword', + optional: false, + }, + { + name: 'start', + type: 'integer', + optional: true, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'string', + type: 'text', + optional: false, + }, + { + name: 'substring', + type: 'text', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'string', + type: 'text', + optional: false, + }, + { + name: 'substring', + type: 'text', + optional: false, + }, + { + name: 'start', + type: 'integer', + optional: true, + }, + ], + returnType: 'integer', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['row a = "hello"\n| eval a_ll = locate(a, "ll")'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const logDefinition: FunctionDefinition = { + type: 'eval', + name: 'log', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.log', { + defaultMessage: + 'Returns the logarithm of a value to a base. The input can be any numeric value, the return value is always a double.\n\nLogs of zero, negative numbers, and base of one return `null` as well as a warning.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'base', + type: 'double', + optional: true, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'double', + optional: true, + }, + { + name: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'double', + optional: true, + }, + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'double', + optional: true, + }, + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'double', + optional: true, + }, + { + name: 'number', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'integer', + optional: true, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'integer', + optional: true, + }, + { + name: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'integer', + optional: true, + }, + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'integer', + optional: true, + }, + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'integer', + optional: true, + }, + { + name: 'number', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'long', + optional: true, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'long', + optional: true, + }, + { + name: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'long', + optional: true, + }, + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'long', + optional: true, + }, + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'long', + optional: true, + }, + { + name: 'number', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'unsigned_long', + optional: true, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'unsigned_long', + optional: true, + }, + { + name: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'unsigned_long', + optional: true, + }, + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'unsigned_long', + optional: true, + }, + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'base', + type: 'unsigned_long', + optional: true, + }, + { + name: 'number', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'double', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: (fnDef: ESQLFunction) => { + const messages = []; + // do not really care here about the base and field + // just need to check both values are not negative + for (const arg of fnDef.args) { + if (isLiteralItem(arg) && Number(arg.value) < 0) { + messages.push({ + type: 'warning' as const, + code: 'logOfNegativeValue', + text: i18n.translate( + 'kbn-esql-validation-autocomplete.esql.divide.warning.logOfNegativeValue', + { + defaultMessage: 'Log of a negative number results in null: {value}', + values: { + value: arg.value, + }, + } + ), + location: arg.location, + }); + } + } + return messages; + }, + examples: [ + 'ROW base = 2.0, value = 8.0\n| EVAL s = LOG(base, value)', + 'row value = 100\n| EVAL s = LOG(value);', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const log10Definition: FunctionDefinition = { + type: 'eval', + name: 'log10', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.log10', { + defaultMessage: + 'Returns the logarithm of a value to base 10. The input can be any numeric value, the return value is always a double.\n\nLogs of 0 and negative numbers return `null` as well as a warning.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'double', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: (fnDef: ESQLFunction) => { + const messages = []; + // do not really care here about the base and field + // just need to check both values are not negative + for (const arg of fnDef.args) { + if (isLiteralItem(arg) && Number(arg.value) < 0) { + messages.push({ + type: 'warning' as const, + code: 'logOfNegativeValue', + text: i18n.translate( + 'kbn-esql-validation-autocomplete.esql.divide.warning.logOfNegativeValue', + { + defaultMessage: 'Log of a negative number results in null: {value}', + values: { + value: arg.value, + }, + } + ), + location: arg.location, + }); + } + } + return messages; + }, + examples: ['ROW d = 1000.0 \n| EVAL s = LOG10(d)'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const ltrimDefinition: FunctionDefinition = { + type: 'eval', + name: 'ltrim', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.ltrim', { + defaultMessage: 'Removes leading whitespaces from a string.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', + optional: false, + }, + ], + returnType: 'text', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW message = " some text ", color = " red "\n| EVAL message = LTRIM(message)\n| EVAL color = LTRIM(color)\n| EVAL message = CONCAT("\'", message, "\'")\n| EVAL color = CONCAT("\'", color, "\'")', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const mvAppendDefinition: FunctionDefinition = { + type: 'eval', + name: 'mv_append', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_append', { + defaultMessage: 'Concatenates values of two multi-value fields.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'field1', + type: 'boolean', + optional: false, + }, + { + name: 'field2', + type: 'boolean', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'field1', + type: 'cartesian_point', + optional: false, + }, + { + name: 'field2', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'cartesian_point', + }, + { + params: [ + { + name: 'field1', + type: 'cartesian_shape', + optional: false, + }, + { + name: 'field2', + type: 'cartesian_shape', + optional: false, + }, + ], + returnType: 'cartesian_shape', + }, + { + params: [ + { + name: 'field1', + type: 'date', + optional: false, + }, + { + name: 'field2', + type: 'date', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'field1', + type: 'double', + optional: false, + }, + { + name: 'field2', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'field1', + type: 'geo_point', + optional: false, + }, + { + name: 'field2', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'geo_point', + }, + { + params: [ + { + name: 'field1', + type: 'geo_shape', + optional: false, + }, + { + name: 'field2', + type: 'geo_shape', + optional: false, + }, + ], + returnType: 'geo_shape', + }, + { + params: [ + { + name: 'field1', + type: 'integer', + optional: false, + }, + { + name: 'field2', + type: 'integer', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field1', + type: 'ip', + optional: false, + }, + { + name: 'field2', + type: 'ip', + optional: false, + }, + ], + returnType: 'ip', + }, + { + params: [ + { + name: 'field1', + type: 'keyword', + optional: false, + }, + { + name: 'field2', + type: 'keyword', optional: false, }, ], - returnType: 'number', + returnType: 'keyword', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: [ - 'ROW date = DATE_PARSE("yyyy-MM-dd", "2022-05-06")\n| EVAL year = DATE_EXTRACT("year", date)', - 'FROM sample_data\n| WHERE DATE_EXTRACT("hour_of_day", @timestamp) < 9 AND DATE_EXTRACT("hour_of_day", @timestamp) >= 17', - ], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const dateFormatDefinition: FunctionDefinition = { - type: 'eval', - name: 'date_format', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.date_format', { - defaultMessage: 'Returns a string representation of a date, in the provided format.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'dateFormat', - type: 'string', - optional: true, + name: 'field1', + type: 'long', + optional: false, }, { - name: 'date', - type: 'date', + name: 'field2', + type: 'long', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field1', + type: 'text', + optional: false, + }, + { + name: 'field2', + type: 'text', + optional: false, + }, + ], + returnType: 'text', + }, + { + params: [ + { + name: 'field1', + type: 'version', + optional: false, + }, + { + name: 'field2', + type: 'version', optional: false, }, ], - returnType: 'string', + returnType: 'version', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: [ - 'FROM employees\n| KEEP first_name, last_name, hire_date\n| EVAL hired = DATE_FORMAT("YYYY-MM-dd", hire_date)', - ], + examples: [], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const dateParseDefinition: FunctionDefinition = { +const mvAvgDefinition: FunctionDefinition = { type: 'eval', - name: 'date_parse', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.date_parse', { + name: 'mv_avg', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_avg', { defaultMessage: - 'Returns a date by parsing the second argument using the format specified in the first argument.', + 'Converts a multivalued field into a single valued field containing the average of all of the values.', }), alias: undefined, signatures: [ { params: [ { - name: 'datePattern', - type: 'string', - optional: true, + name: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, }, + ], + returnType: 'double', + }, + { + params: [ { - name: 'dateString', - type: 'string', + name: 'number', + type: 'long', optional: false, }, ], - returnType: 'date', + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: ['ROW date_string = "2022-05-06"\n| EVAL date = DATE_PARSE("yyyy-MM-dd", date_string)'], + examples: ['ROW a=[3, 5, 1, 6]\n| EVAL avg_a = MV_AVG(a)'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const dateTruncDefinition: FunctionDefinition = { +const mvConcatDefinition: FunctionDefinition = { type: 'eval', - name: 'date_trunc', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.date_trunc', { - defaultMessage: 'Rounds down a date to the closest interval.', + name: 'mv_concat', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_concat', { + defaultMessage: + 'Converts a multivalued string expression into a single valued column containing the concatenation of all values separated by a delimiter.', }), alias: undefined, signatures: [ { params: [ { - name: 'interval', - type: 'time_literal', + name: 'string', + type: 'keyword', optional: false, }, { - name: 'date', - type: 'date', + name: 'delim', + type: 'keyword', optional: false, }, ], - returnType: 'date', + returnType: 'keyword', }, { params: [ { - name: 'interval', - type: 'date', + name: 'string', + type: 'keyword', optional: false, }, { - name: 'date', - type: 'date', + name: 'delim', + type: 'text', optional: false, }, ], - returnType: 'date', + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', + optional: false, + }, + { + name: 'delim', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', + optional: false, + }, + { + name: 'delim', + type: 'text', + optional: false, + }, + ], + returnType: 'keyword', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, examples: [ - 'FROM employees\n| KEEP first_name, last_name, hire_date\n| EVAL year_hired = DATE_TRUNC(1 year, hire_date)', - 'FROM employees\n| EVAL year = DATE_TRUNC(1 year, hire_date)\n| STATS hires = COUNT(emp_no) BY year\n| SORT year', - 'FROM sample_data\n| EVAL error = CASE(message LIKE "*error*", 1, 0)\n| EVAL hour = DATE_TRUNC(1 hour, @timestamp)\n| STATS error_rate = AVG(error) by hour\n| SORT hour', + 'ROW a=["foo", "zoo", "bar"]\n| EVAL j = MV_CONCAT(a, ", ")', + 'ROW a=[10, 9, 8]\n| EVAL j = MV_CONCAT(TO_STRING(a), ", ")', ], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const eDefinition: FunctionDefinition = { +const mvCountDefinition: FunctionDefinition = { type: 'eval', - name: 'e', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.e', { - defaultMessage: "Returns Euler's number.", + name: 'mv_count', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_count', { + defaultMessage: + 'Converts a multivalued expression into a single valued column containing a count of the number of values.', }), alias: undefined, signatures: [ { - params: [], - returnType: 'number', + params: [ + { + name: 'field', + type: 'boolean', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'cartesian_shape', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'double', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'geo_shape', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'integer', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'ip', + optional: false, + }, + ], + returnType: 'integer', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW E()'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const endsWithDefinition: FunctionDefinition = { - type: 'eval', - name: 'ends_with', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.ends_with', { - defaultMessage: - 'Returns a boolean that indicates whether a keyword string ends with another string.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'str', - type: 'string', + name: 'field', + type: 'keyword', optional: false, }, + ], + returnType: 'integer', + }, + { + params: [ { - name: 'suffix', - type: 'string', + name: 'field', + type: 'long', optional: false, }, ], - returnType: 'boolean', + returnType: 'integer', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['FROM employees\n| KEEP last_name\n| EVAL ln_E = ENDS_WITH(last_name, "d")'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const expDefinition: FunctionDefinition = { - type: 'eval', - name: 'exp', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.exp', { - defaultMessage: 'Returns the value of e raised to the power of the given number.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'number', - type: 'number', + name: 'field', + type: 'text', optional: false, }, ], - returnType: 'number', + returnType: 'integer', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW d = 5.0\n| EVAL s = EXP(d)'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const floorDefinition: FunctionDefinition = { - type: 'eval', - name: 'floor', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.floor', { - defaultMessage: 'Round a number down to the nearest integer.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'number', - type: 'number', + name: 'field', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'integer', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW a=1.8\n| EVAL a=FLOOR(a)'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const fromBase64Definition: FunctionDefinition = { - type: 'eval', - name: 'from_base64', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.from_base64', { - defaultMessage: 'Decode a base64 string.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'string', - type: 'string', + name: 'field', + type: 'version', optional: false, }, ], - returnType: 'string', + returnType: 'integer', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: ['row a = "ZWxhc3RpYw==" \n| eval d = from_base64(a)'], + examples: ['ROW a=["foo", "zoo", "bar"]\n| EVAL count_a = MV_COUNT(a)'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const greatestDefinition: FunctionDefinition = { +const mvDedupeDefinition: FunctionDefinition = { type: 'eval', - name: 'greatest', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.greatest', { - defaultMessage: - 'Returns the maximum value from multiple columns. This is similar to `MV_MAX`\nexcept it is intended to run on multiple columns at once.', + name: 'mv_dedupe', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_dedupe', { + defaultMessage: 'Remove duplicate values from a multivalued field.', }), alias: undefined, signatures: [ { params: [ { - name: 'first', + name: 'field', type: 'boolean', optional: false, }, ], returnType: 'boolean', - minParams: 1, }, { params: [ { - name: 'first', - type: 'boolean', + name: 'field', + type: 'cartesian_point', optional: false, }, + ], + returnType: 'cartesian_point', + }, + { + params: [ { - name: 'rest', - type: 'boolean', - optional: true, + name: 'field', + type: 'cartesian_shape', + optional: false, }, ], - returnType: 'boolean', - minParams: 1, + returnType: 'cartesian_shape', }, { params: [ { - name: 'first', - type: 'number', + name: 'field', + type: 'date', optional: false, }, + ], + returnType: 'date', + }, + { + params: [ { - name: 'rest', - type: 'number', - optional: true, + name: 'field', + type: 'double', + optional: false, }, ], - returnType: 'number', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'number', + name: 'field', + type: 'geo_point', optional: false, }, ], - returnType: 'number', - minParams: 1, + returnType: 'geo_point', }, { params: [ { - name: 'first', - type: 'ip', + name: 'field', + type: 'geo_shape', optional: false, }, + ], + returnType: 'geo_shape', + }, + { + params: [ { - name: 'rest', - type: 'ip', - optional: true, + name: 'field', + type: 'integer', + optional: false, }, ], - returnType: 'ip', - minParams: 1, + returnType: 'integer', }, { params: [ { - name: 'first', - type: 'string', + name: 'field', + type: 'ip', optional: false, }, ], - returnType: 'string', - minParams: 1, + returnType: 'ip', }, { params: [ { - name: 'first', - type: 'string', + name: 'field', + type: 'keyword', optional: false, }, + ], + returnType: 'keyword', + }, + { + params: [ { - name: 'rest', - type: 'string', - optional: true, + name: 'field', + type: 'long', + optional: false, }, ], - returnType: 'string', - minParams: 1, + returnType: 'long', }, { params: [ { - name: 'first', - type: 'version', + name: 'field', + type: 'text', optional: false, }, + ], + returnType: 'text', + }, + { + params: [ { - name: 'rest', + name: 'field', type: 'version', - optional: true, + optional: false, }, ], returnType: 'version', - minParams: 1, }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: ['ROW a = 10, b = 20\n| EVAL g = GREATEST(a, b)'], + examples: ['ROW a=["foo", "foo", "bar", "foo"]\n| EVAL dedupe_a = MV_DEDUPE(a)'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const ipPrefixDefinition: FunctionDefinition = { +const mvFirstDefinition: FunctionDefinition = { type: 'eval', - name: 'ip_prefix', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.ip_prefix', { - defaultMessage: 'Truncates an IP to a given prefix length.', + name: 'mv_first', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_first', { + defaultMessage: + "Converts a multivalued expression into a single valued column containing the\nfirst value. This is most useful when reading from a function that emits\nmultivalued columns in a known order like `SPLIT`.\n\nThe order that multivalued fields are read from\nunderlying storage is not guaranteed. It is *frequently* ascending, but don't\nrely on that. If you need the minimum value use `MV_MIN` instead of\n`MV_FIRST`. `MV_MIN` has optimizations for sorted values so there isn't a\nperformance benefit to `MV_FIRST`.", }), alias: undefined, signatures: [ { params: [ { - name: 'ip', - type: 'ip', + name: 'field', + type: 'boolean', optional: false, }, + ], + returnType: 'boolean', + }, + { + params: [ { - name: 'prefixLengthV4', - type: 'number', + name: 'field', + type: 'cartesian_point', optional: false, }, + ], + returnType: 'cartesian_point', + }, + { + params: [ { - name: 'prefixLengthV6', - type: 'number', + name: 'field', + type: 'cartesian_shape', optional: false, }, ], - returnType: 'ip', + returnType: 'cartesian_shape', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: [ - 'row ip4 = to_ip("1.2.3.4"), ip6 = to_ip("fe80::cae2:65ff:fece:feb9")\n| eval ip4_prefix = ip_prefix(ip4, 24, 0), ip6_prefix = ip_prefix(ip6, 0, 112);', - ], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const leastDefinition: FunctionDefinition = { - type: 'eval', - name: 'least', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.least', { - defaultMessage: - 'Returns the minimum value from multiple columns. This is similar to `MV_MIN` except it is intended to run on multiple columns at once.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'first', - type: 'boolean', + name: 'field', + type: 'date', optional: false, }, ], - returnType: 'boolean', - minParams: 1, + returnType: 'date', }, { params: [ { - name: 'first', - type: 'boolean', + name: 'field', + type: 'double', optional: false, }, - { - name: 'rest', - type: 'boolean', - optional: true, - }, ], - returnType: 'boolean', - minParams: 1, + returnType: 'double', }, { params: [ { - name: 'first', - type: 'number', + name: 'field', + type: 'geo_point', optional: false, }, - { - name: 'rest', - type: 'number', - optional: true, - }, ], - returnType: 'number', - minParams: 1, + returnType: 'geo_point', }, { params: [ { - name: 'first', - type: 'number', + name: 'field', + type: 'geo_shape', optional: false, }, ], - returnType: 'number', - minParams: 1, + returnType: 'geo_shape', }, { params: [ { - name: 'first', - type: 'ip', + name: 'field', + type: 'integer', optional: false, }, + ], + returnType: 'integer', + }, + { + params: [ { - name: 'rest', + name: 'field', type: 'ip', - optional: true, + optional: false, }, ], returnType: 'ip', - minParams: 1, }, { params: [ { - name: 'first', - type: 'string', + name: 'field', + type: 'keyword', optional: false, }, ], - returnType: 'string', - minParams: 1, + returnType: 'keyword', }, { params: [ { - name: 'first', - type: 'string', + name: 'field', + type: 'long', optional: false, }, + ], + returnType: 'long', + }, + { + params: [ { - name: 'rest', - type: 'string', - optional: true, + name: 'field', + type: 'text', + optional: false, }, ], - returnType: 'string', - minParams: 1, + returnType: 'text', }, { params: [ { - name: 'first', - type: 'version', + name: 'field', + type: 'unsigned_long', optional: false, }, + ], + returnType: 'unsigned_long', + }, + { + params: [ { - name: 'rest', + name: 'field', type: 'version', - optional: true, + optional: false, }, ], returnType: 'version', - minParams: 1, }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: ['ROW a = 10, b = 20\n| EVAL l = LEAST(a, b)'], + examples: ['ROW a="foo;bar;baz"\n| EVAL first_a = MV_FIRST(SPLIT(a, ";"))'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const leftDefinition: FunctionDefinition = { +const mvLastDefinition: FunctionDefinition = { type: 'eval', - name: 'left', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.left', { + name: 'mv_last', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_last', { defaultMessage: - "Returns the substring that extracts 'length' chars from 'string' starting from the left.", + "Converts a multivalue expression into a single valued column containing the last\nvalue. This is most useful when reading from a function that emits multivalued\ncolumns in a known order like `SPLIT`.\n\nThe order that multivalued fields are read from\nunderlying storage is not guaranteed. It is *frequently* ascending, but don't\nrely on that. If you need the maximum value use `MV_MAX` instead of\n`MV_LAST`. `MV_MAX` has optimizations for sorted values so there isn't a\nperformance benefit to `MV_LAST`.", }), alias: undefined, signatures: [ { params: [ { - name: 'string', - type: 'string', + name: 'field', + type: 'boolean', optional: false, }, + ], + returnType: 'boolean', + }, + { + params: [ { - name: 'length', - type: 'number', + name: 'field', + type: 'cartesian_point', optional: false, }, ], - returnType: 'string', + returnType: 'cartesian_point', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: [ - 'FROM employees\n| KEEP last_name\n| EVAL left = LEFT(last_name, 3)\n| SORT last_name ASC\n| LIMIT 5', - ], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const lengthDefinition: FunctionDefinition = { - type: 'eval', - name: 'length', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.length', { - defaultMessage: 'Returns the character length of a string.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'string', - type: 'string', + name: 'field', + type: 'cartesian_shape', optional: false, }, ], - returnType: 'number', + returnType: 'cartesian_shape', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['FROM employees\n| KEEP first_name, last_name\n| EVAL fn_length = LENGTH(first_name)'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const locateDefinition: FunctionDefinition = { - type: 'eval', - name: 'locate', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.locate', { - defaultMessage: - 'Returns an integer that indicates the position of a keyword substring within another string.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'string', - type: 'string', + name: 'field', + type: 'date', optional: false, }, + ], + returnType: 'date', + }, + { + params: [ { - name: 'substring', - type: 'string', + name: 'field', + type: 'double', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, { params: [ { - name: 'string', - type: 'string', + name: 'field', + type: 'geo_point', optional: false, }, + ], + returnType: 'geo_point', + }, + { + params: [ { - name: 'substring', - type: 'string', + name: 'field', + type: 'geo_shape', optional: false, }, + ], + returnType: 'geo_shape', + }, + { + params: [ { - name: 'start', - type: 'number', - optional: true, + name: 'field', + type: 'integer', + optional: false, }, ], - returnType: 'number', + returnType: 'integer', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['row a = "hello"\n| eval a_ll = locate(a, "ll")'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const logDefinition: FunctionDefinition = { - type: 'eval', - name: 'log', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.log', { - defaultMessage: - 'Returns the logarithm of a value to a base. The input can be any numeric value, the return value is always a double.\n\nLogs of zero, negative numbers, and base of one return `null` as well as a warning.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'base', - type: 'number', - optional: true, + name: 'field', + type: 'ip', + optional: false, }, ], - returnType: 'number', + returnType: 'ip', }, { params: [ { - name: 'base', - type: 'number', - optional: true, + name: 'field', + type: 'keyword', + optional: false, }, + ], + returnType: 'keyword', + }, + { + params: [ { - name: 'number', - type: 'number', + name: 'field', + type: 'long', optional: false, }, ], - returnType: 'number', + returnType: 'long', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: (fnDef: ESQLFunction) => { - const messages = []; - // do not really care here about the base and field - // just need to check both values are not negative - for (const arg of fnDef.args) { - if (isLiteralItem(arg) && Number(arg.value) < 0) { - messages.push({ - type: 'warning' as const, - code: 'logOfNegativeValue', - text: i18n.translate( - 'kbn-esql-validation-autocomplete.esql.divide.warning.logOfNegativeValue', - { - defaultMessage: 'Log of a negative number results in null: {value}', - values: { - value: arg.value, - }, - } - ), - location: arg.location, - }); - } - } - return messages; - }, - examples: [ - 'ROW base = 2.0, value = 8.0\n| EVAL s = LOG(base, value)', - 'row value = 100\n| EVAL s = LOG(value);', - ], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const log10Definition: FunctionDefinition = { - type: 'eval', - name: 'log10', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.log10', { - defaultMessage: - 'Returns the logarithm of a value to base 10. The input can be any numeric value, the return value is always a double.\n\nLogs of 0 and negative numbers return `null` as well as a warning.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'number', - type: 'number', + name: 'field', + type: 'text', optional: false, }, ], - returnType: 'number', + returnType: 'text', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: (fnDef: ESQLFunction) => { - const messages = []; - // do not really care here about the base and field - // just need to check both values are not negative - for (const arg of fnDef.args) { - if (isLiteralItem(arg) && Number(arg.value) < 0) { - messages.push({ - type: 'warning' as const, - code: 'logOfNegativeValue', - text: i18n.translate( - 'kbn-esql-validation-autocomplete.esql.divide.warning.logOfNegativeValue', - { - defaultMessage: 'Log of a negative number results in null: {value}', - values: { - value: arg.value, - }, - } - ), - location: arg.location, - }); - } - } - return messages; - }, - examples: ['ROW d = 1000.0 \n| EVAL s = LOG10(d)'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const ltrimDefinition: FunctionDefinition = { - type: 'eval', - name: 'ltrim', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.ltrim', { - defaultMessage: 'Removes leading whitespaces from a string.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'string', - type: 'string', + name: 'field', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'unsigned_long', + }, + { + params: [ + { + name: 'field', + type: 'version', optional: false, }, ], - returnType: 'string', + returnType: 'version', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: [ - 'ROW message = " some text ", color = " red "\n| EVAL message = LTRIM(message)\n| EVAL color = LTRIM(color)\n| EVAL message = CONCAT("\'", message, "\'")\n| EVAL color = CONCAT("\'", color, "\'")', - ], + examples: ['ROW a="foo;bar;baz"\n| EVAL last_a = MV_LAST(SPLIT(a, ";"))'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvAppendDefinition: FunctionDefinition = { +const mvMaxDefinition: FunctionDefinition = { type: 'eval', - name: 'mv_append', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_append', { - defaultMessage: 'Concatenates values of two multi-value fields.', + name: 'mv_max', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_max', { + defaultMessage: + 'Converts a multivalued expression into a single valued column containing the maximum value.', }), alias: undefined, signatures: [ { params: [ { - name: 'field1', - type: 'boolean', - optional: false, - }, - { - name: 'field2', + name: 'field', type: 'boolean', optional: false, }, @@ -1549,132 +3838,87 @@ const mvAppendDefinition: FunctionDefinition = { { params: [ { - name: 'field1', - type: 'cartesian_point', - optional: false, - }, - { - name: 'field2', - type: 'cartesian_point', + name: 'field', + type: 'date', optional: false, }, ], - returnType: 'cartesian_point', + returnType: 'date', }, { params: [ { - name: 'field1', - type: 'cartesian_shape', - optional: false, - }, - { - name: 'field2', - type: 'cartesian_shape', + name: 'field', + type: 'double', optional: false, }, ], - returnType: 'cartesian_shape', + returnType: 'double', }, { params: [ { - name: 'field1', - type: 'date', - optional: false, - }, - { - name: 'field2', - type: 'date', + name: 'field', + type: 'integer', optional: false, }, ], - returnType: 'date', + returnType: 'integer', }, { params: [ { - name: 'field1', - type: 'number', - optional: false, - }, - { - name: 'field2', - type: 'number', + name: 'field', + type: 'ip', optional: false, }, ], - returnType: 'number', + returnType: 'ip', }, { params: [ { - name: 'field1', - type: 'geo_point', - optional: false, - }, - { - name: 'field2', - type: 'geo_point', + name: 'field', + type: 'keyword', optional: false, }, ], - returnType: 'geo_point', + returnType: 'keyword', }, { params: [ { - name: 'field1', - type: 'geo_shape', - optional: false, - }, - { - name: 'field2', - type: 'geo_shape', + name: 'field', + type: 'long', optional: false, }, ], - returnType: 'geo_shape', + returnType: 'long', }, { params: [ { - name: 'field1', - type: 'ip', - optional: false, - }, - { - name: 'field2', - type: 'ip', + name: 'field', + type: 'text', optional: false, }, ], - returnType: 'ip', + returnType: 'text', }, { params: [ { - name: 'field1', - type: 'string', - optional: false, - }, - { - name: 'field2', - type: 'string', + name: 'field', + type: 'unsigned_long', optional: false, }, ], - returnType: 'string', + returnType: 'unsigned_long', }, { params: [ { - name: 'field1', - type: 'version', - optional: false, - }, - { - name: 'field2', + name: 'field', type: 'version', optional: false, }, @@ -1685,16 +3929,19 @@ const mvAppendDefinition: FunctionDefinition = { supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: [], + examples: [ + 'ROW a=[3, 5, 1]\n| EVAL max_a = MV_MAX(a)', + 'ROW a=["foo", "zoo", "bar"]\n| EVAL max_a = MV_MAX(a)', + ], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvAvgDefinition: FunctionDefinition = { +const mvMedianDefinition: FunctionDefinition = { type: 'eval', - name: 'mv_avg', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_avg', { + name: 'mv_median', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_median', { defaultMessage: - 'Converts a multivalued field into a single valued field containing the average of all of the values.', + 'Converts a multivalued field into a single valued field containing the median value.', }), alias: undefined, signatures: [ @@ -1702,61 +3949,59 @@ const mvAvgDefinition: FunctionDefinition = { params: [ { name: 'number', - type: 'number', + type: 'double', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW a=[3, 5, 1, 6]\n| EVAL avg_a = MV_AVG(a)'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvConcatDefinition: FunctionDefinition = { - type: 'eval', - name: 'mv_concat', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_concat', { - defaultMessage: - 'Converts a multivalued string expression into a single valued column containing the concatenation of all values separated by a delimiter.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'string', - type: 'string', + name: 'number', + type: 'integer', optional: false, }, + ], + returnType: 'integer', + }, + { + params: [ { - name: 'delim', - type: 'string', + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', optional: false, }, ], - returnType: 'string', + returnType: 'unsigned_long', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, examples: [ - 'ROW a=["foo", "zoo", "bar"]\n| EVAL j = MV_CONCAT(a, ", ")', - 'ROW a=[10, 9, 8]\n| EVAL j = MV_CONCAT(TO_STRING(a), ", ")', + 'ROW a=[3, 5, 1]\n| EVAL median_a = MV_MEDIAN(a)', + 'ROW a=[3, 7, 1, 6]\n| EVAL median_a = MV_MEDIAN(a)', ], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvCountDefinition: FunctionDefinition = { +const mvMinDefinition: FunctionDefinition = { type: 'eval', - name: 'mv_count', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_count', { + name: 'mv_min', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_min', { defaultMessage: - 'Converts a multivalued expression into a single valued column containing a count of the number of values.', + 'Converts a multivalued expression into a single valued column containing the minimum value.', }), alias: undefined, signatures: [ @@ -1768,87 +4013,87 @@ const mvCountDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'boolean', }, { params: [ { name: 'field', - type: 'cartesian_point', + type: 'date', optional: false, }, ], - returnType: 'number', + returnType: 'date', }, { params: [ { name: 'field', - type: 'cartesian_shape', + type: 'double', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, { params: [ { name: 'field', - type: 'date', + type: 'integer', optional: false, }, ], - returnType: 'number', + returnType: 'integer', }, { params: [ { name: 'field', - type: 'number', + type: 'ip', optional: false, }, ], - returnType: 'number', + returnType: 'ip', }, { params: [ { name: 'field', - type: 'geo_point', + type: 'keyword', optional: false, }, ], - returnType: 'number', + returnType: 'keyword', }, { params: [ { name: 'field', - type: 'geo_shape', + type: 'long', optional: false, }, ], - returnType: 'number', + returnType: 'long', }, { params: [ { name: 'field', - type: 'ip', + type: 'text', optional: false, }, ], - returnType: 'number', + returnType: 'text', }, { params: [ { name: 'field', - type: 'string', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'unsigned_long', }, { params: [ @@ -1858,21 +4103,25 @@ const mvCountDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'version', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: ['ROW a=["foo", "zoo", "bar"]\n| EVAL count_a = MV_COUNT(a)'], + examples: [ + 'ROW a=[2, 1]\n| EVAL min_a = MV_MIN(a)', + 'ROW a=["foo", "bar"]\n| EVAL min_a = MV_MIN(a)', + ], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvDedupeDefinition: FunctionDefinition = { +const mvSliceDefinition: FunctionDefinition = { type: 'eval', - name: 'mv_dedupe', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_dedupe', { - defaultMessage: 'Remove duplicate values from a multivalued field.', + name: 'mv_slice', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_slice', { + defaultMessage: + 'Returns a subset of the multivalued field using the start and end index values.', }), alias: undefined, signatures: [ @@ -1883,6 +4132,16 @@ const mvDedupeDefinition: FunctionDefinition = { type: 'boolean', optional: false, }, + { + name: 'start', + type: 'integer', + optional: false, + }, + { + name: 'end', + type: 'integer', + optional: true, + }, ], returnType: 'boolean', }, @@ -1893,78 +4152,218 @@ const mvDedupeDefinition: FunctionDefinition = { type: 'cartesian_point', optional: false, }, + { + name: 'start', + type: 'integer', + optional: false, + }, + { + name: 'end', + type: 'integer', + optional: true, + }, + ], + returnType: 'cartesian_point', + }, + { + params: [ + { + name: 'field', + type: 'cartesian_shape', + optional: false, + }, + { + name: 'start', + type: 'integer', + optional: false, + }, + { + name: 'end', + type: 'integer', + optional: true, + }, + ], + returnType: 'cartesian_shape', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + { + name: 'start', + type: 'integer', + optional: false, + }, + { + name: 'end', + type: 'integer', + optional: true, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'field', + type: 'double', + optional: false, + }, + { + name: 'start', + type: 'integer', + optional: false, + }, + { + name: 'end', + type: 'integer', + optional: true, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'field', + type: 'geo_point', + optional: false, + }, + { + name: 'start', + type: 'integer', + optional: false, + }, + { + name: 'end', + type: 'integer', + optional: true, + }, ], - returnType: 'cartesian_point', + returnType: 'geo_point', }, { params: [ { name: 'field', - type: 'cartesian_shape', + type: 'geo_shape', optional: false, }, - ], - returnType: 'cartesian_shape', - }, - { - params: [ { - name: 'field', - type: 'date', + name: 'start', + type: 'integer', optional: false, }, + { + name: 'end', + type: 'integer', + optional: true, + }, ], - returnType: 'date', + returnType: 'geo_shape', }, { params: [ { name: 'field', - type: 'number', + type: 'integer', + optional: false, + }, + { + name: 'start', + type: 'integer', optional: false, }, + { + name: 'end', + type: 'integer', + optional: true, + }, ], - returnType: 'number', + returnType: 'integer', }, { params: [ { name: 'field', - type: 'geo_point', + type: 'ip', + optional: false, + }, + { + name: 'start', + type: 'integer', optional: false, }, + { + name: 'end', + type: 'integer', + optional: true, + }, ], - returnType: 'geo_point', + returnType: 'ip', }, { params: [ { name: 'field', - type: 'geo_shape', + type: 'keyword', optional: false, }, + { + name: 'start', + type: 'integer', + optional: false, + }, + { + name: 'end', + type: 'integer', + optional: true, + }, ], - returnType: 'geo_shape', + returnType: 'keyword', }, { params: [ { name: 'field', - type: 'ip', + type: 'long', + optional: false, + }, + { + name: 'start', + type: 'integer', optional: false, }, + { + name: 'end', + type: 'integer', + optional: true, + }, ], - returnType: 'ip', + returnType: 'long', }, { params: [ { name: 'field', - type: 'string', + type: 'text', + optional: false, + }, + { + name: 'start', + type: 'integer', optional: false, }, + { + name: 'end', + type: 'integer', + optional: true, + }, ], - returnType: 'string', + returnType: 'text', }, { params: [ @@ -1973,6 +4372,16 @@ const mvDedupeDefinition: FunctionDefinition = { type: 'version', optional: false, }, + { + name: 'start', + type: 'integer', + optional: false, + }, + { + name: 'end', + type: 'integer', + optional: true, + }, ], returnType: 'version', }, @@ -1980,16 +4389,18 @@ const mvDedupeDefinition: FunctionDefinition = { supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: ['ROW a=["foo", "foo", "bar", "foo"]\n| EVAL dedupe_a = MV_DEDUPE(a)'], + examples: [ + 'row a = [1, 2, 2, 3]\n| eval a1 = mv_slice(a, 1), a2 = mv_slice(a, 2, 3)', + 'row a = [1, 2, 2, 3]\n| eval a1 = mv_slice(a, -2), a2 = mv_slice(a, -3, -1)', + ], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvFirstDefinition: FunctionDefinition = { +const mvSortDefinition: FunctionDefinition = { type: 'eval', - name: 'mv_first', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_first', { - defaultMessage: - "Converts a multivalued expression into a single valued column containing the\nfirst value. This is most useful when reading from a function that emits\nmultivalued columns in a known order like `SPLIT`.\n\nThe order that multivalued fields are read from\nunderlying storage is not guaranteed. It is *frequently* ascending, but don't\nrely on that. If you need the minimum value use `MV_MIN` instead of\n`MV_FIRST`. `MV_MIN` has optimizations for sorted values so there isn't a\nperformance benefit to `MV_FIRST`.", + name: 'mv_sort', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_sort', { + defaultMessage: 'Sorts a multivalued field in lexicographical order.', }), alias: undefined, signatures: [ @@ -2000,6 +4411,12 @@ const mvFirstDefinition: FunctionDefinition = { type: 'boolean', optional: false, }, + { + name: 'order', + type: 'keyword', + optional: true, + literalOptions: ['asc', 'desc'], + }, ], returnType: 'boolean', }, @@ -2007,81 +4424,113 @@ const mvFirstDefinition: FunctionDefinition = { params: [ { name: 'field', - type: 'cartesian_point', + type: 'date', optional: false, }, - ], - returnType: 'cartesian_point', - }, - { - params: [ { - name: 'field', - type: 'cartesian_shape', - optional: false, + name: 'order', + type: 'keyword', + optional: true, + literalOptions: ['asc', 'desc'], }, ], - returnType: 'cartesian_shape', + returnType: 'date', }, { params: [ { name: 'field', - type: 'date', + type: 'double', optional: false, }, + { + name: 'order', + type: 'keyword', + optional: true, + literalOptions: ['asc', 'desc'], + }, ], - returnType: 'date', + returnType: 'double', }, { params: [ { name: 'field', - type: 'number', + type: 'integer', optional: false, }, + { + name: 'order', + type: 'keyword', + optional: true, + literalOptions: ['asc', 'desc'], + }, ], - returnType: 'number', + returnType: 'integer', }, { params: [ { name: 'field', - type: 'geo_point', + type: 'ip', optional: false, }, + { + name: 'order', + type: 'keyword', + optional: true, + literalOptions: ['asc', 'desc'], + }, ], - returnType: 'geo_point', + returnType: 'ip', }, { params: [ { name: 'field', - type: 'geo_shape', + type: 'keyword', optional: false, }, + { + name: 'order', + type: 'keyword', + optional: true, + literalOptions: ['asc', 'desc'], + }, ], - returnType: 'geo_shape', + returnType: 'keyword', }, { params: [ { name: 'field', - type: 'ip', + type: 'long', optional: false, }, + { + name: 'order', + type: 'keyword', + optional: true, + literalOptions: ['asc', 'desc'], + }, ], - returnType: 'ip', + returnType: 'long', }, { params: [ { name: 'field', - type: 'string', + type: 'text', optional: false, }, + { + name: 'order', + type: 'keyword', + optional: true, + literalOptions: ['asc', 'desc'], + }, ], - returnType: 'string', + returnType: 'text', }, { params: [ @@ -2090,6 +4539,12 @@ const mvFirstDefinition: FunctionDefinition = { type: 'version', optional: false, }, + { + name: 'order', + type: 'keyword', + optional: true, + literalOptions: ['asc', 'desc'], + }, ], returnType: 'version', }, @@ -2097,864 +4552,820 @@ const mvFirstDefinition: FunctionDefinition = { supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: ['ROW a="foo;bar;baz"\n| EVAL first_a = MV_FIRST(SPLIT(a, ";"))'], + examples: ['ROW a = [4, 2, -3, 2]\n| EVAL sa = mv_sort(a), sd = mv_sort(a, "DESC")'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvLastDefinition: FunctionDefinition = { +const mvSumDefinition: FunctionDefinition = { type: 'eval', - name: 'mv_last', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_last', { + name: 'mv_sum', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_sum', { defaultMessage: - "Converts a multivalue expression into a single valued column containing the last\nvalue. This is most useful when reading from a function that emits multivalued\ncolumns in a known order like `SPLIT`.\n\nThe order that multivalued fields are read from\nunderlying storage is not guaranteed. It is *frequently* ascending, but don't\nrely on that. If you need the maximum value use `MV_MAX` instead of\n`MV_LAST`. `MV_MAX` has optimizations for sorted values so there isn't a\nperformance benefit to `MV_LAST`.", + 'Converts a multivalued field into a single valued field containing the sum of all of the values.', }), alias: undefined, signatures: [ { params: [ { - name: 'field', - type: 'boolean', + name: 'number', + type: 'double', optional: false, }, ], - returnType: 'boolean', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'cartesian_point', + name: 'number', + type: 'integer', optional: false, }, ], - returnType: 'cartesian_point', + returnType: 'integer', }, { params: [ { - name: 'field', - type: 'cartesian_shape', + name: 'number', + type: 'long', optional: false, }, ], - returnType: 'cartesian_shape', + returnType: 'long', }, { params: [ { - name: 'field', - type: 'date', + name: 'number', + type: 'unsigned_long', optional: false, }, ], - returnType: 'date', + returnType: 'unsigned_long', }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a=[3, 5, 6]\n| EVAL sum_a = MV_SUM(a)'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const mvZipDefinition: FunctionDefinition = { + type: 'eval', + name: 'mv_zip', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_zip', { + defaultMessage: + 'Combines the values from two multivalued fields with a delimiter that joins them together.', + }), + alias: undefined, + signatures: [ { params: [ { - name: 'field', - type: 'number', + name: 'string1', + type: 'keyword', + optional: false, + }, + { + name: 'string2', + type: 'keyword', optional: false, }, ], - returnType: 'number', + returnType: 'keyword', }, { params: [ { - name: 'field', - type: 'geo_point', + name: 'string1', + type: 'keyword', + optional: false, + }, + { + name: 'string2', + type: 'keyword', optional: false, }, + { + name: 'delim', + type: 'keyword', + optional: true, + }, ], - returnType: 'geo_point', + returnType: 'keyword', }, { params: [ { - name: 'field', - type: 'geo_shape', + name: 'string1', + type: 'keyword', + optional: false, + }, + { + name: 'string2', + type: 'keyword', optional: false, }, + { + name: 'delim', + type: 'text', + optional: true, + }, ], - returnType: 'geo_shape', + returnType: 'keyword', }, { params: [ { - name: 'field', - type: 'ip', + name: 'string1', + type: 'keyword', + optional: false, + }, + { + name: 'string2', + type: 'text', optional: false, }, ], - returnType: 'ip', + returnType: 'keyword', }, { params: [ { - name: 'field', - type: 'string', + name: 'string1', + type: 'keyword', + optional: false, + }, + { + name: 'string2', + type: 'text', optional: false, }, + { + name: 'delim', + type: 'keyword', + optional: true, + }, ], - returnType: 'string', + returnType: 'keyword', }, { params: [ { - name: 'field', - type: 'version', + name: 'string1', + type: 'keyword', optional: false, }, + { + name: 'string2', + type: 'text', + optional: false, + }, + { + name: 'delim', + type: 'text', + optional: true, + }, ], - returnType: 'version', + returnType: 'keyword', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW a="foo;bar;baz"\n| EVAL last_a = MV_LAST(SPLIT(a, ";"))'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvMaxDefinition: FunctionDefinition = { - type: 'eval', - name: 'mv_max', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_max', { - defaultMessage: - 'Converts a multivalued expression into a single valued column containing the maximum value.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'field', - type: 'boolean', + name: 'string1', + type: 'text', + optional: false, + }, + { + name: 'string2', + type: 'keyword', optional: false, }, ], - returnType: 'boolean', + returnType: 'keyword', }, { params: [ { - name: 'field', - type: 'date', + name: 'string1', + type: 'text', + optional: false, + }, + { + name: 'string2', + type: 'keyword', optional: false, }, + { + name: 'delim', + type: 'keyword', + optional: true, + }, ], - returnType: 'date', + returnType: 'keyword', }, { params: [ { - name: 'field', - type: 'number', + name: 'string1', + type: 'text', optional: false, }, + { + name: 'string2', + type: 'keyword', + optional: false, + }, + { + name: 'delim', + type: 'text', + optional: true, + }, ], - returnType: 'number', + returnType: 'keyword', }, { params: [ { - name: 'field', - type: 'ip', + name: 'string1', + type: 'text', + optional: false, + }, + { + name: 'string2', + type: 'text', optional: false, }, ], - returnType: 'ip', + returnType: 'keyword', }, { params: [ { - name: 'field', - type: 'string', + name: 'string1', + type: 'text', + optional: false, + }, + { + name: 'string2', + type: 'text', optional: false, }, + { + name: 'delim', + type: 'keyword', + optional: true, + }, ], - returnType: 'string', + returnType: 'keyword', }, { params: [ { - name: 'field', - type: 'version', + name: 'string1', + type: 'text', + optional: false, + }, + { + name: 'string2', + type: 'text', optional: false, }, + { + name: 'delim', + type: 'text', + optional: true, + }, ], - returnType: 'version', + returnType: 'keyword', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, examples: [ - 'ROW a=[3, 5, 1]\n| EVAL max_a = MV_MAX(a)', - 'ROW a=["foo", "zoo", "bar"]\n| EVAL max_a = MV_MAX(a)', + 'ROW a = ["x", "y", "z"], b = ["1", "2"]\n| EVAL c = mv_zip(a, b, "-")\n| KEEP a, b, c', ], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvMedianDefinition: FunctionDefinition = { +const nowDefinition: FunctionDefinition = { type: 'eval', - name: 'mv_median', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_median', { - defaultMessage: - 'Converts a multivalued field into a single valued field containing the median value.', + name: 'now', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.now', { + defaultMessage: 'Returns current date and time.', }), alias: undefined, signatures: [ { - params: [ - { - name: 'number', - type: 'number', - optional: false, - }, - ], - returnType: 'number', + params: [], + returnType: 'date', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: [ - 'ROW a=[3, 5, 1]\n| EVAL median_a = MV_MEDIAN(a)', - 'ROW a=[3, 7, 1, 6]\n| EVAL median_a = MV_MEDIAN(a)', - ], + examples: ['ROW current_date = NOW()', 'FROM sample_data\n| WHERE @timestamp > NOW() - 1 hour'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvMinDefinition: FunctionDefinition = { +const piDefinition: FunctionDefinition = { type: 'eval', - name: 'mv_min', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_min', { - defaultMessage: - 'Converts a multivalued expression into a single valued column containing the minimum value.', + name: 'pi', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.pi', { + defaultMessage: "Returns Pi, the ratio of a circle's circumference to its diameter.", }), alias: undefined, signatures: [ { - params: [ - { - name: 'field', - type: 'boolean', - optional: false, - }, - ], - returnType: 'boolean', - }, - { - params: [ - { - name: 'field', - type: 'date', - optional: false, - }, - ], - returnType: 'date', - }, - { - params: [ - { - name: 'field', - type: 'number', - optional: false, - }, - ], - returnType: 'number', - }, - { - params: [ - { - name: 'field', - type: 'ip', - optional: false, - }, - ], - returnType: 'ip', - }, - { - params: [ - { - name: 'field', - type: 'string', - optional: false, - }, - ], - returnType: 'string', - }, - { - params: [ - { - name: 'field', - type: 'version', - optional: false, - }, - ], - returnType: 'version', + params: [], + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: [ - 'ROW a=[2, 1]\n| EVAL min_a = MV_MIN(a)', - 'ROW a=["foo", "bar"]\n| EVAL min_a = MV_MIN(a)', - ], + examples: ['ROW PI()'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvSliceDefinition: FunctionDefinition = { +const powDefinition: FunctionDefinition = { type: 'eval', - name: 'mv_slice', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_slice', { - defaultMessage: - 'Returns a subset of the multivalued field using the start and end index values.', + name: 'pow', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.pow', { + defaultMessage: 'Returns the value of `base` raised to the power of `exponent`.', }), alias: undefined, signatures: [ { params: [ { - name: 'field', - type: 'boolean', + name: 'base', + type: 'double', optional: false, }, { - name: 'start', - type: 'number', + name: 'exponent', + type: 'double', optional: false, }, - { - name: 'end', - type: 'number', - optional: true, - }, ], - returnType: 'boolean', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'cartesian_point', + name: 'base', + type: 'double', optional: false, }, { - name: 'start', - type: 'number', + name: 'exponent', + type: 'integer', optional: false, }, - { - name: 'end', - type: 'number', - optional: true, - }, ], - returnType: 'cartesian_point', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'cartesian_shape', + name: 'base', + type: 'double', optional: false, }, { - name: 'start', - type: 'number', + name: 'exponent', + type: 'long', optional: false, }, - { - name: 'end', - type: 'number', - optional: true, - }, ], - returnType: 'cartesian_shape', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'date', + name: 'base', + type: 'double', optional: false, }, { - name: 'start', - type: 'number', + name: 'exponent', + type: 'unsigned_long', optional: false, }, - { - name: 'end', - type: 'number', - optional: true, - }, ], - returnType: 'date', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'number', + name: 'base', + type: 'integer', optional: false, }, { - name: 'start', - type: 'number', + name: 'exponent', + type: 'double', optional: false, }, - { - name: 'end', - type: 'number', - optional: true, - }, ], - returnType: 'number', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'geo_point', + name: 'base', + type: 'integer', optional: false, }, { - name: 'start', - type: 'number', + name: 'exponent', + type: 'integer', optional: false, }, - { - name: 'end', - type: 'number', - optional: true, - }, ], - returnType: 'geo_point', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'geo_shape', + name: 'base', + type: 'integer', optional: false, }, { - name: 'start', - type: 'number', + name: 'exponent', + type: 'long', optional: false, }, - { - name: 'end', - type: 'number', - optional: true, - }, ], - returnType: 'geo_shape', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'ip', - optional: false, - }, - { - name: 'start', - type: 'number', + name: 'base', + type: 'integer', optional: false, }, { - name: 'end', - type: 'number', - optional: true, + name: 'exponent', + type: 'unsigned_long', + optional: false, }, ], - returnType: 'ip', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'string', + name: 'base', + type: 'long', optional: false, }, { - name: 'start', - type: 'number', + name: 'exponent', + type: 'double', optional: false, }, - { - name: 'end', - type: 'number', - optional: true, - }, ], - returnType: 'string', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'version', + name: 'base', + type: 'long', optional: false, }, { - name: 'start', - type: 'number', + name: 'exponent', + type: 'integer', optional: false, }, - { - name: 'end', - type: 'number', - optional: true, - }, ], - returnType: 'version', + returnType: 'double', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: [ - 'row a = [1, 2, 2, 3]\n| eval a1 = mv_slice(a, 1), a2 = mv_slice(a, 2, 3)', - 'row a = [1, 2, 2, 3]\n| eval a1 = mv_slice(a, -2), a2 = mv_slice(a, -3, -1)', - ], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvSortDefinition: FunctionDefinition = { - type: 'eval', - name: 'mv_sort', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_sort', { - defaultMessage: 'Sorts a multivalued field in lexicographical order.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'field', - type: 'boolean', + name: 'base', + type: 'long', optional: false, }, { - name: 'order', - type: 'string', - optional: true, - literalOptions: ['asc', 'desc'], + name: 'exponent', + type: 'long', + optional: false, }, ], - returnType: 'boolean', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'date', + name: 'base', + type: 'long', optional: false, }, { - name: 'order', - type: 'string', - optional: true, - literalOptions: ['asc', 'desc'], + name: 'exponent', + type: 'unsigned_long', + optional: false, }, ], - returnType: 'date', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'number', + name: 'base', + type: 'unsigned_long', optional: false, }, { - name: 'order', - type: 'string', - optional: true, - literalOptions: ['asc', 'desc'], + name: 'exponent', + type: 'double', + optional: false, }, ], - returnType: 'number', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'ip', + name: 'base', + type: 'unsigned_long', optional: false, }, { - name: 'order', - type: 'string', - optional: true, - literalOptions: ['asc', 'desc'], + name: 'exponent', + type: 'integer', + optional: false, }, ], - returnType: 'ip', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'string', + name: 'base', + type: 'unsigned_long', optional: false, }, { - name: 'order', - type: 'string', - optional: true, - literalOptions: ['asc', 'desc'], + name: 'exponent', + type: 'long', + optional: false, }, ], - returnType: 'string', + returnType: 'double', }, { params: [ { - name: 'field', - type: 'version', + name: 'base', + type: 'unsigned_long', optional: false, }, { - name: 'order', - type: 'string', - optional: true, - literalOptions: ['asc', 'desc'], + name: 'exponent', + type: 'unsigned_long', + optional: false, }, ], - returnType: 'version', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: ['ROW a = [4, 2, -3, 2]\n| EVAL sa = mv_sort(a), sd = mv_sort(a, "DESC")'], + examples: [ + 'ROW base = 2.0, exponent = 2\n| EVAL result = POW(base, exponent)', + 'ROW base = 4, exponent = 0.5\n| EVAL s = POW(base, exponent)', + ], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvSumDefinition: FunctionDefinition = { +const repeatDefinition: FunctionDefinition = { type: 'eval', - name: 'mv_sum', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_sum', { + name: 'repeat', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.repeat', { defaultMessage: - 'Converts a multivalued field into a single valued field containing the sum of all of the values.', + 'Returns a string constructed by concatenating `string` with itself the specified `number` of times.', }), alias: undefined, signatures: [ { params: [ + { + name: 'string', + type: 'keyword', + optional: false, + }, + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', + optional: false, + }, { name: 'number', - type: 'number', + type: 'integer', optional: false, }, ], - returnType: 'number', + returnType: 'keyword', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: ['ROW a=[3, 5, 6]\n| EVAL sum_a = MV_SUM(a)'], + examples: ['ROW a = "Hello!"\n| EVAL triple_a = REPEAT(a, 3);'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts -const mvZipDefinition: FunctionDefinition = { +const replaceDefinition: FunctionDefinition = { type: 'eval', - name: 'mv_zip', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_zip', { + name: 'replace', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.replace', { defaultMessage: - 'Combines the values from two multivalued fields with a delimiter that joins them together.', + 'The function substitutes in the string `str` any match of the regular expression `regex`\nwith the replacement string `newStr`.', }), alias: undefined, signatures: [ { params: [ { - name: 'string1', - type: 'string', + name: 'string', + type: 'keyword', optional: false, }, { - name: 'string2', - type: 'string', + name: 'regex', + type: 'keyword', + optional: false, + }, + { + name: 'newString', + type: 'keyword', optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, { params: [ { - name: 'string1', - type: 'string', + name: 'string', + type: 'keyword', optional: false, }, { - name: 'string2', - type: 'string', + name: 'regex', + type: 'keyword', optional: false, }, { - name: 'delim', - type: 'string', - optional: true, + name: 'newString', + type: 'text', + optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: [ - 'ROW a = ["x", "y", "z"], b = ["1", "2"]\n| EVAL c = mv_zip(a, b, "-")\n| KEEP a, b, c', - ], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const nowDefinition: FunctionDefinition = { - type: 'eval', - name: 'now', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.now', { - defaultMessage: 'Returns current date and time.', - }), - alias: undefined, - signatures: [ { - params: [], - returnType: 'date', + params: [ + { + name: 'string', + type: 'keyword', + optional: false, + }, + { + name: 'regex', + type: 'text', + optional: false, + }, + { + name: 'newString', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW current_date = NOW()', 'FROM sample_data\n| WHERE @timestamp > NOW() - 1 hour'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const piDefinition: FunctionDefinition = { - type: 'eval', - name: 'pi', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.pi', { - defaultMessage: "Returns Pi, the ratio of a circle's circumference to its diameter.", - }), - alias: undefined, - signatures: [ { - params: [], - returnType: 'number', + params: [ + { + name: 'string', + type: 'keyword', + optional: false, + }, + { + name: 'regex', + type: 'text', + optional: false, + }, + { + name: 'newString', + type: 'text', + optional: false, + }, + ], + returnType: 'keyword', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW PI()'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const powDefinition: FunctionDefinition = { - type: 'eval', - name: 'pow', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.pow', { - defaultMessage: 'Returns the value of `base` raised to the power of `exponent`.', - }), - alias: undefined, - signatures: [ { params: [ { - name: 'base', - type: 'number', + name: 'string', + type: 'text', optional: false, }, { - name: 'exponent', - type: 'number', + name: 'regex', + type: 'keyword', + optional: false, + }, + { + name: 'newString', + type: 'keyword', optional: false, }, ], - returnType: 'number', + returnType: 'keyword', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: [ - 'ROW base = 2.0, exponent = 2\n| EVAL result = POW(base, exponent)', - 'ROW base = 4, exponent = 0.5\n| EVAL s = POW(base, exponent)', - ], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const repeatDefinition: FunctionDefinition = { - type: 'eval', - name: 'repeat', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.repeat', { - defaultMessage: - 'Returns a string constructed by concatenating `string` with itself the specified `number` of times.', - }), - alias: undefined, - signatures: [ { params: [ { name: 'string', - type: 'string', + type: 'text', optional: false, }, { - name: 'number', - type: 'number', + name: 'regex', + type: 'keyword', + optional: false, + }, + { + name: 'newString', + type: 'text', optional: false, }, ], - returnType: 'string', + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', + optional: false, + }, + { + name: 'regex', + type: 'text', + optional: false, + }, + { + name: 'newString', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW a = "Hello!"\n| EVAL triple_a = REPEAT(a, 3);'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const replaceDefinition: FunctionDefinition = { - type: 'eval', - name: 'replace', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.replace', { - defaultMessage: - 'The function substitutes in the string `str` any match of the regular expression `regex`\nwith the replacement string `newStr`.', - }), - alias: undefined, - signatures: [ { params: [ { name: 'string', - type: 'string', + type: 'text', optional: false, }, { name: 'regex', - type: 'string', + type: 'text', optional: false, }, { name: 'newString', - type: 'string', + type: 'text', optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -2977,16 +5388,31 @@ const rightDefinition: FunctionDefinition = { params: [ { name: 'string', - type: 'string', + type: 'keyword', + optional: false, + }, + { + name: 'length', + type: 'integer', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', optional: false, }, { name: 'length', - type: 'number', + type: 'integer', optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -3011,26 +5437,86 @@ const roundDefinition: FunctionDefinition = { params: [ { name: 'number', - type: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'double', + optional: false, + }, + { + name: 'decimals', + type: 'integer', + optional: true, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + { + name: 'decimals', + type: 'integer', + optional: true, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'number', + type: 'long', optional: false, }, ], - returnType: 'number', + returnType: 'long', }, { params: [ { name: 'number', - type: 'number', + type: 'long', optional: false, }, { name: 'decimals', - type: 'number', + type: 'integer', optional: true, }, ], - returnType: 'number', + returnType: 'long', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'unsigned_long', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -3054,11 +5540,21 @@ const rtrimDefinition: FunctionDefinition = { params: [ { name: 'string', - type: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', optional: false, }, ], - returnType: 'string', + returnType: 'text', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -3083,11 +5579,41 @@ const signumDefinition: FunctionDefinition = { params: [ { name: 'number', - type: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -3109,11 +5635,41 @@ const sinDefinition: FunctionDefinition = { params: [ { name: 'angle', - type: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -3135,11 +5691,41 @@ const sinhDefinition: FunctionDefinition = { params: [ { name: 'angle', - type: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -3161,16 +5747,61 @@ const splitDefinition: FunctionDefinition = { params: [ { name: 'string', - type: 'string', + type: 'keyword', + optional: false, + }, + { + name: 'delim', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'keyword', + optional: false, + }, + { + name: 'delim', + type: 'text', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', + optional: false, + }, + { + name: 'delim', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', optional: false, }, { name: 'delim', - type: 'string', + type: 'text', optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -3193,11 +5824,41 @@ const sqrtDefinition: FunctionDefinition = { params: [ { name: 'number', - type: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -3507,7 +6168,7 @@ const stDistanceDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'double', }, { params: [ @@ -3522,7 +6183,7 @@ const stDistanceDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -3829,7 +6490,7 @@ const stXDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'double', }, { params: [ @@ -3839,7 +6500,7 @@ const stXDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -3868,7 +6529,7 @@ const stYDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'double', }, { params: [ @@ -3878,7 +6539,7 @@ const stYDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -3903,12 +6564,27 @@ const startsWithDefinition: FunctionDefinition = { params: [ { name: 'str', - type: 'string', + type: 'keyword', + optional: false, + }, + { + name: 'prefix', + type: 'keyword', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'str', + type: 'text', optional: false, }, { name: 'prefix', - type: 'string', + type: 'text', optional: false, }, ], @@ -3935,21 +6611,41 @@ const substringDefinition: FunctionDefinition = { params: [ { name: 'string', - type: 'string', + type: 'keyword', + optional: false, + }, + { + name: 'start', + type: 'integer', + optional: false, + }, + { + name: 'length', + type: 'integer', + optional: true, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', optional: false, }, { name: 'start', - type: 'number', + type: 'integer', optional: false, }, { name: 'length', - type: 'number', + type: 'integer', optional: true, }, ], - returnType: 'string', + returnType: 'keyword', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -3975,11 +6671,41 @@ const tanDefinition: FunctionDefinition = { params: [ { name: 'angle', - type: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -4001,11 +6727,41 @@ const tanhDefinition: FunctionDefinition = { params: [ { name: 'angle', - type: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'angle', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -4025,7 +6781,7 @@ const tauDefinition: FunctionDefinition = { signatures: [ { params: [], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -4047,11 +6803,21 @@ const toBase64Definition: FunctionDefinition = { params: [ { name: 'string', - type: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -4084,7 +6850,47 @@ const toBooleanDefinition: FunctionDefinition = { params: [ { name: 'field', - type: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'field', + type: 'integer', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'field', + type: 'keyword', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'field', + type: 'long', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'field', + type: 'text', optional: false, }, ], @@ -4094,7 +6900,7 @@ const toBooleanDefinition: FunctionDefinition = { params: [ { name: 'field', - type: 'string', + type: 'unsigned_long', optional: false, }, ], @@ -4134,7 +6940,17 @@ const toCartesianpointDefinition: FunctionDefinition = { params: [ { name: 'field', - type: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'cartesian_point', + }, + { + params: [ + { + name: 'field', + type: 'text', optional: false, }, ], @@ -4186,7 +7002,17 @@ const toCartesianshapeDefinition: FunctionDefinition = { params: [ { name: 'field', - type: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'cartesian_shape', + }, + { + params: [ + { + name: 'field', + type: 'text', optional: false, }, ], @@ -4225,7 +7051,47 @@ const toDatetimeDefinition: FunctionDefinition = { params: [ { name: 'field', - type: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'field', + type: 'integer', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'field', + type: 'keyword', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'field', + type: 'long', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'field', + type: 'text', optional: false, }, ], @@ -4235,7 +7101,7 @@ const toDatetimeDefinition: FunctionDefinition = { params: [ { name: 'field', - type: 'string', + type: 'unsigned_long', optional: false, }, ], @@ -4264,68 +7130,168 @@ const toDegreesDefinition: FunctionDefinition = { params: [ { name: 'number', - type: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'double', + }, + ], + supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW rad = [1.57, 3.14, 4.71]\n| EVAL deg = TO_DEGREES(rad)'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const toDoubleDefinition: FunctionDefinition = { + type: 'eval', + name: 'to_double', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.to_double', { + defaultMessage: + 'Converts an input value to a double value. If the input parameter is of a date type,\nits value will be interpreted as milliseconds since the Unix epoch,\nconverted to double. Boolean *true* will be converted to double *1.0*, *false* to *0.0*.', + }), + alias: ['to_dbl'], + signatures: [ + { + params: [ + { + name: 'field', + type: 'boolean', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'field', + type: 'counter_double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'field', + type: 'counter_integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'field', + type: 'counter_long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'field', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'field', + type: 'integer', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, - ], - supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - validate: undefined, - examples: ['ROW rad = [1.57, 3.14, 4.71]\n| EVAL deg = TO_DEGREES(rad)'], -}; - -// Do not edit this manually... generated by scripts/generate_function_definitions.ts -const toDoubleDefinition: FunctionDefinition = { - type: 'eval', - name: 'to_double', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.to_double', { - defaultMessage: - 'Converts an input value to a double value. If the input parameter is of a date type,\nits value will be interpreted as milliseconds since the Unix epoch,\nconverted to double. Boolean *true* will be converted to double *1.0*, *false* to *0.0*.', - }), - alias: ['to_dbl'], - signatures: [ { params: [ { name: 'field', - type: 'boolean', + type: 'keyword', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, { params: [ { name: 'field', - type: 'number', + type: 'long', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, { params: [ { name: 'field', - type: 'date', + type: 'text', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, { params: [ { name: 'field', - type: 'string', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -4360,7 +7326,17 @@ const toGeopointDefinition: FunctionDefinition = { params: [ { name: 'field', - type: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'geo_point', + }, + { + params: [ + { + name: 'field', + type: 'text', optional: false, }, ], @@ -4407,7 +7383,17 @@ const toGeoshapeDefinition: FunctionDefinition = { params: [ { name: 'field', - type: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'geo_shape', + }, + { + params: [ + { + name: 'field', + type: 'text', optional: false, }, ], @@ -4440,17 +7426,17 @@ const toIntegerDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'integer', }, { params: [ { name: 'field', - type: 'number', + type: 'counter_integer', optional: false, }, ], - returnType: 'number', + returnType: 'integer', }, { params: [ @@ -4460,17 +7446,67 @@ const toIntegerDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'double', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'integer', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'keyword', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'long', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'text', + optional: false, + }, + ], + returnType: 'integer', }, { params: [ { name: 'field', - type: 'string', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'integer', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -4502,7 +7538,17 @@ const toIpDefinition: FunctionDefinition = { params: [ { name: 'field', - type: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'ip', + }, + { + params: [ + { + name: 'field', + type: 'text', optional: false, }, ], @@ -4535,17 +7581,27 @@ const toLongDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'counter_integer', + optional: false, + }, + ], + returnType: 'long', }, { params: [ { name: 'field', - type: 'number', + type: 'counter_long', optional: false, }, ], - returnType: 'number', + returnType: 'long', }, { params: [ @@ -4555,17 +7611,67 @@ const toLongDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'double', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'integer', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'keyword', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'long', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'text', + optional: false, + }, + ], + returnType: 'long', }, { params: [ { name: 'field', - type: 'string', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'long', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -4589,11 +7695,21 @@ const toLowerDefinition: FunctionDefinition = { params: [ { name: 'str', - type: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'str', + type: 'text', optional: false, }, ], - returnType: 'string', + returnType: 'text', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -4615,11 +7731,41 @@ const toRadiansDefinition: FunctionDefinition = { params: [ { name: 'number', - type: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'double', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -4645,7 +7791,7 @@ const toStringDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, { params: [ @@ -4655,7 +7801,7 @@ const toStringDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, { params: [ @@ -4665,7 +7811,7 @@ const toStringDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, { params: [ @@ -4675,17 +7821,17 @@ const toStringDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, { params: [ { name: 'field', - type: 'number', + type: 'double', optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, { params: [ @@ -4695,7 +7841,7 @@ const toStringDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, { params: [ @@ -4705,7 +7851,17 @@ const toStringDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'string', + returnType: 'keyword', + }, + { + params: [ + { + name: 'field', + type: 'integer', + optional: false, + }, + ], + returnType: 'keyword', }, { params: [ @@ -4715,17 +7871,47 @@ const toStringDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'string', + returnType: 'keyword', + }, + { + params: [ + { + name: 'field', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'field', + type: 'long', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'field', + type: 'text', + optional: false, + }, + ], + returnType: 'keyword', }, { params: [ { name: 'field', - type: 'string', + type: 'unsigned_long', optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, { params: [ @@ -4735,7 +7921,7 @@ const toStringDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'string', + returnType: 'keyword', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -4765,7 +7951,7 @@ const toUnsignedLongDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'unsigned_long', }, { params: [ @@ -4775,27 +7961,67 @@ const toUnsignedLongDefinition: FunctionDefinition = { optional: false, }, ], - returnType: 'number', + returnType: 'unsigned_long', + }, + { + params: [ + { + name: 'field', + type: 'double', + optional: false, + }, + ], + returnType: 'unsigned_long', + }, + { + params: [ + { + name: 'field', + type: 'integer', + optional: false, + }, + ], + returnType: 'unsigned_long', + }, + { + params: [ + { + name: 'field', + type: 'keyword', + optional: false, + }, + ], + returnType: 'unsigned_long', + }, + { + params: [ + { + name: 'field', + type: 'long', + optional: false, + }, + ], + returnType: 'unsigned_long', }, { params: [ { name: 'field', - type: 'number', + type: 'text', optional: false, }, ], - returnType: 'number', + returnType: 'unsigned_long', }, { params: [ { name: 'field', - type: 'string', + type: 'unsigned_long', optional: false, }, ], - returnType: 'number', + returnType: 'unsigned_long', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -4819,11 +8045,21 @@ const toUpperDefinition: FunctionDefinition = { params: [ { name: 'str', - type: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'str', + type: 'text', optional: false, }, ], - returnType: 'string', + returnType: 'text', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], @@ -4845,7 +8081,17 @@ const toVersionDefinition: FunctionDefinition = { params: [ { name: 'field', - type: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'version', + }, + { + params: [ + { + name: 'field', + type: 'text', optional: false, }, ], @@ -4881,11 +8127,21 @@ const trimDefinition: FunctionDefinition = { params: [ { name: 'string', - type: 'string', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'string', + type: 'text', optional: false, }, ], - returnType: 'string', + returnType: 'text', }, ], supportedCommands: ['stats', 'metrics', 'eval', 'where', 'row', 'sort'], diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/grouping.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/grouping.ts index 79ac91d14403a..043c6e44d55bc 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/grouping.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/grouping.ts @@ -7,8 +7,53 @@ */ import { i18n } from '@kbn/i18n'; -import { FunctionDefinition } from './types'; +import { FunctionDefinition, FunctionParameterType, FunctionReturnType } from './types'; +const groupingTypeTable: Array< + [ + FunctionParameterType, + FunctionParameterType, + FunctionParameterType | null, + FunctionParameterType | null, + FunctionReturnType + ] +> = [ + // field // bucket //from // to //result + ['date', 'date_period', null, null, 'date'], + ['date', 'integer', 'date', 'date', 'date'], + // Modified time_duration to time_literal + ['date', 'time_literal', null, null, 'date'], + ['double', 'double', null, null, 'double'], + ['double', 'integer', 'double', 'double', 'double'], + ['double', 'integer', 'double', 'integer', 'double'], + ['double', 'integer', 'double', 'long', 'double'], + ['double', 'integer', 'integer', 'double', 'double'], + ['double', 'integer', 'integer', 'integer', 'double'], + ['double', 'integer', 'integer', 'long', 'double'], + ['double', 'integer', 'long', 'double', 'double'], + ['double', 'integer', 'long', 'integer', 'double'], + ['double', 'integer', 'long', 'long', 'double'], + ['integer', 'double', null, null, 'double'], + ['integer', 'integer', 'double', 'double', 'double'], + ['integer', 'integer', 'double', 'integer', 'double'], + ['integer', 'integer', 'double', 'long', 'double'], + ['integer', 'integer', 'integer', 'double', 'double'], + ['integer', 'integer', 'integer', 'integer', 'double'], + ['integer', 'integer', 'integer', 'long', 'double'], + ['integer', 'integer', 'long', 'double', 'double'], + ['integer', 'integer', 'long', 'integer', 'double'], + ['integer', 'integer', 'long', 'long', 'double'], + ['long', 'double', null, null, 'double'], + ['long', 'integer', 'double', 'double', 'double'], + ['long', 'integer', 'double', 'integer', 'double'], + ['long', 'integer', 'double', 'long', 'double'], + ['long', 'integer', 'integer', 'double', 'double'], + ['long', 'integer', 'integer', 'integer', 'double'], + ['long', 'integer', 'integer', 'long', 'double'], + ['long', 'integer', 'long', 'double', 'double'], + ['long', 'integer', 'long', 'integer', 'double'], + ['long', 'integer', 'long', 'long', 'double'], +]; export const groupingFunctionDefinitions: FunctionDefinition[] = [ { name: 'bucket', @@ -21,65 +66,18 @@ export const groupingFunctionDefinitions: FunctionDefinition[] = [ supportedCommands: ['stats'], supportedOptions: ['by'], signatures: [ - { - params: [ - { name: 'field', type: 'date' }, - { name: 'buckets', type: 'time_literal', constantOnly: true }, - ], - returnType: 'date', - }, - { - params: [ - { name: 'field', type: 'number' }, - { name: 'buckets', type: 'number', constantOnly: true }, - ], - returnType: 'number', - }, - { - params: [ - { name: 'field', type: 'date' }, - { name: 'buckets', type: 'number', constantOnly: true }, - { name: 'startDate', type: 'string', constantOnly: true }, - { name: 'endDate', type: 'string', constantOnly: true }, - ], - returnType: 'date', - }, - { - params: [ - { name: 'field', type: 'date' }, - { name: 'buckets', type: 'number', constantOnly: true }, - { name: 'startDate', type: 'date', constantOnly: true }, - { name: 'endDate', type: 'date', constantOnly: true }, - ], - returnType: 'date', - }, - { - params: [ - { name: 'field', type: 'date' }, - { name: 'buckets', type: 'number', constantOnly: true }, - { name: 'startDate', type: 'string', constantOnly: true }, - { name: 'endDate', type: 'date', constantOnly: true }, - ], - returnType: 'date', - }, - { - params: [ - { name: 'field', type: 'date' }, - { name: 'buckets', type: 'number', constantOnly: true }, - { name: 'startDate', type: 'date', constantOnly: true }, - { name: 'endDate', type: 'string', constantOnly: true }, - ], - returnType: 'date', - }, - { - params: [ - { name: 'field', type: 'number' }, - { name: 'buckets', type: 'number', constantOnly: true }, - { name: 'startValue', type: 'number', constantOnly: true }, - { name: 'endValue', type: 'number', constantOnly: true }, - ], - returnType: 'number', - }, + ...groupingTypeTable.map((signature) => { + const [fieldType, bucketType, fromType, toType, resultType] = signature; + return { + params: [ + { name: 'field', type: fieldType }, + { name: 'buckets', type: bucketType, constantOnly: true }, + ...(fromType ? [{ name: 'startDate', type: fromType, constantOnly: true }] : []), + ...(toType ? [{ name: 'endDate', type: toType, constantOnly: true }] : []), + ], + returnType: resultType, + }; + }), ], examples: [ 'from index | eval hd = bucket(bytes, 1 hour)', diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/types.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/types.ts index dbf0b7782d1a4..660bb1c7aca81 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/types.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/types.ts @@ -8,10 +8,20 @@ import type { ESQLCommand, ESQLCommandOption, ESQLFunction, ESQLMessage } from '@kbn/esql-ast'; +// Currently, partial of the full list +// https://github.com/elastic/elasticsearch/blob/main/x-pack/plugin/esql-core/src/main/java/org/elasticsearch/xpack/esql/core/type/DataType.java export const supportedFieldTypes = [ - 'number', + 'double', + 'unsigned_long', + 'long', + 'integer', + 'counter_integer', + 'counter_long', + 'counter_double', 'date', - 'string', + 'date_period', + 'text', + 'keyword', 'boolean', 'ip', 'cartesian_point', @@ -28,21 +38,43 @@ export type SupportedFieldType = (typeof supportedFieldTypes)[number]; export type FunctionParameterType = | SupportedFieldType + | 'string' | 'null' | 'any' | 'chrono_literal' | 'time_literal' - | 'number[]' + | 'time_duration' + | 'double[]' + | 'unsigned_long[]' + | 'long[]' + | 'integer[]' + | 'counter_integer[]' + | 'counter_long[]' + | 'counter_double[]' | 'string[]' + | 'keyword[]' + | 'text[]' | 'boolean[]' | 'any[]' - | 'date[]'; + | 'datetime[]' + | 'date_period[]'; export type FunctionReturnType = - | 'number' + | 'double' + | 'unsigned_long' + | 'long' + | 'integer' + | 'int' + | 'counter_integer' + | 'counter_long' + | 'counter_double' | 'date' + | 'date_period' + | 'time_duration' | 'any' | 'boolean' + | 'text' + | 'keyword' | 'string' | 'cartesian_point' | 'cartesian_shape' diff --git a/packages/kbn-esql-validation-autocomplete/src/shared/esql_to_kibana_type.ts b/packages/kbn-esql-validation-autocomplete/src/shared/esql_to_kibana_type.ts deleted file mode 100644 index f13052288f29f..0000000000000 --- a/packages/kbn-esql-validation-autocomplete/src/shared/esql_to_kibana_type.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -const ESQL_NUMBER_TYPES = [ - 'double', - 'unsigned_long', - 'long', - 'integer', - 'int', - 'counter_integer', - 'counter_long', - 'counter_double', -]; - -const ESQL_TEXT_TYPES = ['text', 'keyword', 'string']; - -export const esqlToKibanaType = (elasticsearchType: string) => { - if (ESQL_NUMBER_TYPES.includes(elasticsearchType)) { - return 'number'; - } - - if (ESQL_TEXT_TYPES.includes(elasticsearchType)) { - return 'string'; - } - - if (['datetime', 'time_duration'].includes(elasticsearchType)) { - return 'date'; - } - - if (elasticsearchType === 'bool') { - return 'boolean'; - } - - if (elasticsearchType === 'date_period') { - return 'time_literal'; // TODO - consider aligning with Elasticsearch - } - - return elasticsearchType; -}; diff --git a/packages/kbn-esql-validation-autocomplete/src/shared/esql_types.ts b/packages/kbn-esql-validation-autocomplete/src/shared/esql_types.ts new file mode 100644 index 0000000000000..dab8769f8477a --- /dev/null +++ b/packages/kbn-esql-validation-autocomplete/src/shared/esql_types.ts @@ -0,0 +1,49 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { ESQLDecimalLiteral, ESQLNumericLiteralType } from '@kbn/esql-ast/src/types'; + +export const ESQL_COMMON_NUMERIC_TYPES = ['double', 'long', 'integer'] as const; +export const ESQL_NUMERIC_DECIMAL_TYPES = [ + 'double', + 'unsigned_long', + 'long', + 'counter_long', + 'counter_double', +] as const; +export const ESQL_NUMBER_TYPES = [ + 'integer', + 'counter_integer', + ...ESQL_NUMERIC_DECIMAL_TYPES, +] as const; + +export const ESQL_STRING_TYPES = ['keyword', 'text'] as const; +export const ESQL_DATE_TYPES = ['datetime', 'date_period'] as const; + +/** + * + * @param type + * @returns + */ +export function isStringType(type: unknown) { + return typeof type === 'string' && ['keyword', 'text'].includes(type); +} + +export function isNumericType(type: unknown): type is ESQLNumericLiteralType { + return ( + typeof type === 'string' && + [...ESQL_NUMBER_TYPES, 'decimal'].includes(type as (typeof ESQL_NUMBER_TYPES)[number]) + ); +} + +export function isNumericDecimalType(type: unknown): type is ESQLDecimalLiteral { + return ( + typeof type === 'string' && + ESQL_NUMERIC_DECIMAL_TYPES.includes(type as (typeof ESQL_NUMERIC_DECIMAL_TYPES)[number]) + ); +} diff --git a/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts b/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts index 68658b29251b5..e13326c2a9f43 100644 --- a/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts +++ b/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts @@ -33,7 +33,7 @@ import { withOption, appendSeparatorOption, } from '../definitions/options'; -import type { +import { CommandDefinition, CommandOptionsDefinition, FunctionParameter, @@ -43,7 +43,7 @@ import type { } from '../definitions/types'; import type { ESQLRealField, ESQLVariable, ReferenceMaps } from '../validation/types'; import { removeMarkerArgFromArgsList } from './context'; -import { esqlToKibanaType } from './esql_to_kibana_type'; +import { isNumericDecimalType } from './esql_types'; import type { ReasonTypes } from './types'; export function nonNullable(v: T): v is NonNullable { @@ -226,6 +226,14 @@ function compareLiteralType(argType: string, item: ESQLLiteral) { return true; } + if (item.literalType === 'decimal' && isNumericDecimalType(argType)) { + return true; + } + + if (item.literalType === 'string' && (argType === 'text' || argType === 'keyword')) { + return true; + } + if (item.literalType !== 'string') { if (argType === item.literalType) { return true; @@ -234,7 +242,7 @@ function compareLiteralType(argType: string, item: ESQLLiteral) { } // date-type parameters accept string literals because of ES auto-casting - return ['string', 'date'].includes(argType); + return ['string', 'date', 'date', 'date_period'].includes(argType); } /** @@ -245,7 +253,14 @@ export function lookupColumn( { fields, variables }: Pick ): ESQLRealField | ESQLVariable | undefined { const columnName = getQuotedColumnName(column); - return fields.get(columnName) || variables.get(columnName)?.[0]; + return ( + fields.get(columnName) || + variables.get(columnName)?.[0] || + // It's possible columnName has backticks "`fieldName`" + // so we need to access the original name as well + fields.get(column.name) || + variables.get(column.name)?.[0] + ); } const ARRAY_REGEXP = /\[\]$/; @@ -255,10 +270,19 @@ export function isArrayType(type: string) { } const arrayToSingularMap: Map = new Map([ - ['number[]', 'number'], - ['date[]', 'date'], - ['boolean[]', 'boolean'], + ['double[]', 'double'], + ['unsigned_long[]', 'unsigned_long'], + ['long[]', 'long'], + ['integer[]', 'integer'], + ['counter_integer[]', 'counter_integer'], + ['counter_long[]', 'counter_long'], + ['counter_double[]', 'counter_double'], ['string[]', 'string'], + ['keyword[]', 'keyword'], + ['text[]', 'text'], + ['datetime[]', 'date'], + ['date_period[]', 'date_period'], + ['boolean[]', 'boolean'], ['any[]', 'any'], ]); @@ -407,7 +431,8 @@ export function checkFunctionArgMatchesDefinition( return true; } if (arg.type === 'literal') { - return compareLiteralType(argType, arg); + const matched = compareLiteralType(argType, arg); + return matched; } if (arg.type === 'function') { if (isSupportedFunction(arg.name, parentCommand).supported) { @@ -428,11 +453,21 @@ export function checkFunctionArgMatchesDefinition( } const wrappedTypes = Array.isArray(validHit.type) ? validHit.type : [validHit.type]; // if final type is of type any make it pass for now - return wrappedTypes.some((ct) => ['any', 'null'].includes(ct) || argType === ct); + return wrappedTypes.some( + (ct) => + ['any', 'null'].includes(ct) || + argType === ct || + (ct === 'string' && ['text', 'keyword'].includes(argType)) + ); } if (arg.type === 'inlineCast') { - // TODO - remove with https://github.com/elastic/kibana/issues/174710 - return argType === esqlToKibanaType(arg.castType); + const lowerArgType = argType?.toLowerCase(); + const lowerArgCastType = arg.castType?.toLowerCase(); + return ( + lowerArgType === lowerArgCastType || + // for valid shorthand casts like 321.12::int or "false"::bool + (['int', 'bool'].includes(lowerArgCastType) && argType.startsWith(lowerArgCastType)) + ); } } diff --git a/packages/kbn-esql-validation-autocomplete/src/shared/variables.ts b/packages/kbn-esql-validation-autocomplete/src/shared/variables.ts index 22c38cd286e19..ee1a912c688ea 100644 --- a/packages/kbn-esql-validation-autocomplete/src/shared/variables.ts +++ b/packages/kbn-esql-validation-autocomplete/src/shared/variables.ts @@ -35,7 +35,7 @@ function addToVariables( if (isColumnItem(oldArg) && isColumnItem(newArg)) { const newVariable: ESQLVariable = { name: newArg.name, - type: 'number' /* fallback to number */, + type: 'double' /* fallback to number */, location: newArg.location, }; // Now workout the exact type @@ -107,7 +107,7 @@ function addVariableFromAssignment( const rightHandSideArgType = getAssignRightHandSideType(assignOperation.args[1], fields); addToVariableOccurrencies(variables, { name: assignOperation.args[0].name, - type: rightHandSideArgType || 'number' /* fallback to number */, + type: rightHandSideArgType || 'double' /* fallback to number */, location: assignOperation.args[0].location, }); } @@ -125,7 +125,7 @@ function addVariableFromExpression( queryString, expressionOperation.location ); - const expressionType = 'number'; + const expressionType = 'double'; addToVariableOccurrencies(variables, { name: forwardThinkingVariableName, type: expressionType, diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/helpers.ts b/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/helpers.ts index 9d28f88115b42..02f7c30d96ff9 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/helpers.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/helpers.ts @@ -31,7 +31,7 @@ export const setup = async () => { return await validateQuery(query, getAstAndSyntaxErrors, opts, cb); }; - const assertErrors = (errors: unknown[], expectedErrors: string[]) => { + const assertErrors = (errors: unknown[], expectedErrors: string[], query?: string) => { const errorMessages: string[] = []; for (const error of errors) { if (error && typeof error === 'object') { @@ -46,7 +46,16 @@ export const setup = async () => { errorMessages.push(String(error)); } } - expect(errorMessages.sort()).toStrictEqual(expectedErrors.sort()); + + try { + expect(errorMessages.sort()).toStrictEqual(expectedErrors.sort()); + } catch (error) { + throw Error(`${query}\n + Received: + '${errorMessages.sort()}' + Expected: + ${expectedErrors.sort()}`); + } }; const expectErrors = async ( @@ -57,9 +66,9 @@ export const setup = async () => { cb: ESQLCallbacks = callbacks ) => { const { errors, warnings } = await validateQuery(query, getAstAndSyntaxErrors, opts, cb); - assertErrors(errors, expectedErrors); + assertErrors(errors, expectedErrors, query); if (expectedWarnings) { - assertErrors(warnings, expectedWarnings); + assertErrors(warnings, expectedWarnings, query); } }; diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/test_suites/validation.command.metrics.ts b/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/test_suites/validation.command.metrics.ts index 44c15c722a1de..ea5df88553888 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/test_suites/validation.command.metrics.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/test_suites/validation.command.metrics.ts @@ -85,7 +85,7 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { await expectErrors(`METRICS average()`, ['Unknown index [average()]']); await expectErrors(`metrics custom_function()`, ['Unknown index [custom_function()]']); await expectErrors(`metrics indexes*`, ['Unknown index [indexes*]']); - await expectErrors('metrics numberField', ['Unknown index [numberField]']); + await expectErrors('metrics doubleField', ['Unknown index [doubleField]']); await expectErrors('metrics policy', ['Unknown index [policy]']); }); }); @@ -95,26 +95,26 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { const { expectErrors } = await setup(); await expectErrors('METRICS a_index count()', []); - await expectErrors('metrics a_index avg(numberField) by 1', []); - await expectErrors('metrics a_index count(`numberField`)', []); + await expectErrors('metrics a_index avg(doubleField) by 1', []); + await expectErrors('metrics a_index count(`doubleField`)', []); await expectErrors('metrics a_index count(*)', []); await expectErrors('metrics index var0 = count(*)', []); await expectErrors('metrics a_index var0 = count()', []); - await expectErrors('metrics a_index var0 = avg(numberField), count(*)', []); + await expectErrors('metrics a_index var0 = avg(doubleField), count(*)', []); await expectErrors(`metrics a_index sum(case(false, 0, 1))`, []); await expectErrors(`metrics a_index var0 = sum( case(false, 0, 1))`, []); - await expectErrors('metrics a_index count(stringField == "a" or null)', []); - await expectErrors('metrics other_index max(numberField) by stringField', []); + await expectErrors('metrics a_index count(textField == "a" or null)', []); + await expectErrors('metrics other_index max(doubleField) by textField', []); }); test('syntax errors', async () => { const { expectErrors } = await setup(); - await expectErrors('metrics a_index numberField=', [ + await expectErrors('metrics a_index doubleField=', [ expect.any(String), "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); - await expectErrors('metrics a_index numberField=5 by ', [ + await expectErrors('metrics a_index doubleField=5 by ', [ expect.any(String), "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); @@ -131,29 +131,29 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { test('errors when no aggregation function specified', async () => { const { expectErrors } = await setup(); - await expectErrors('metrics a_index numberField + 1', [ - 'At least one aggregation function required in [METRICS], found [numberField+1]', + await expectErrors('metrics a_index doubleField + 1', [ + 'At least one aggregation function required in [METRICS], found [doubleField+1]', ]); - await expectErrors('metrics a_index a = numberField + 1', [ - 'At least one aggregation function required in [METRICS], found [a=numberField+1]', + await expectErrors('metrics a_index a = doubleField + 1', [ + 'At least one aggregation function required in [METRICS], found [a=doubleField+1]', ]); - await expectErrors('metrics a_index a = numberField + 1, stringField', [ - 'At least one aggregation function required in [METRICS], found [a=numberField+1]', - 'Expected an aggregate function or group but got [stringField] of type [FieldAttribute]', + await expectErrors('metrics a_index a = doubleField + 1, textField', [ + 'At least one aggregation function required in [METRICS], found [a=doubleField+1]', + 'Expected an aggregate function or group but got [textField] of type [FieldAttribute]', ]); - await expectErrors('metrics a_index numberField + 1 by ipField', [ - 'At least one aggregation function required in [METRICS], found [numberField+1]', + await expectErrors('metrics a_index doubleField + 1 by ipField', [ + 'At least one aggregation function required in [METRICS], found [doubleField+1]', ]); }); test('errors on agg and non-agg mix', async () => { const { expectErrors } = await setup(); - await expectErrors('METRICS a_index sum( numberField ) + abs( numberField ) ', [ - 'Cannot combine aggregation and non-aggregation values in [METRICS], found [sum(numberField)+abs(numberField)]', + await expectErrors('METRICS a_index sum( doubleField ) + abs( doubleField ) ', [ + 'Cannot combine aggregation and non-aggregation values in [METRICS], found [sum(doubleField)+abs(doubleField)]', ]); - await expectErrors('METRICS a_index abs( numberField + sum( numberField )) ', [ - 'Cannot combine aggregation and non-aggregation values in [METRICS], found [abs(numberField+sum(numberField))]', + await expectErrors('METRICS a_index abs( doubleField + sum( doubleField )) ', [ + 'Cannot combine aggregation and non-aggregation values in [METRICS], found [abs(doubleField+sum(doubleField))]', ]); }); @@ -169,8 +169,8 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { test('errors when input is not an aggregate function', async () => { const { expectErrors } = await setup(); - await expectErrors('metrics a_index numberField ', [ - 'Expected an aggregate function or group but got [numberField] of type [FieldAttribute]', + await expectErrors('metrics a_index doubleField ', [ + 'Expected an aggregate function or group but got [doubleField] of type [FieldAttribute]', ]); }); @@ -179,9 +179,9 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { for (const subCommand of ['keep', 'drop', 'eval']) { await expectErrors( - 'metrics a_index count(`numberField`) | ' + + 'metrics a_index count(`doubleField`) | ' + subCommand + - ' `count(``numberField``)` ', + ' `count(``doubleField``)` ', [] ); } @@ -194,7 +194,7 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { 'Using wildcards (*) in round is not allowed', ]); await expectErrors('metrics a_index count(count(*))', [ - `Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [count(*)] of type [number]`, + `Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [count(*)] of type [long]`, ]); }); }); @@ -204,21 +204,21 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { const { expectErrors } = await setup(); await expectErrors( - 'metrics a_index avg(numberField), percentile(numberField, 50) by ipField', + 'metrics a_index avg(doubleField), percentile(doubleField, 50) by ipField', [] ); await expectErrors( - 'metrics a_index avg(numberField), percentile(numberField, 50) BY ipField', + 'metrics a_index avg(doubleField), percentile(doubleField, 50) BY ipField', [] ); await expectErrors( - 'metrics a_index avg(numberField), percentile(numberField, 50) + 1 by ipField', + 'metrics a_index avg(doubleField), percentile(doubleField, 50) + 1 by ipField', [] ); - await expectErrors('metrics a_index avg(numberField) by stringField | limit 100', []); + await expectErrors('metrics a_index avg(doubleField) by textField | limit 100', []); for (const op of ['+', '-', '*', '/', '%']) { await expectErrors( - `metrics a_index avg(numberField) ${op} percentile(numberField, 50) BY ipField`, + `metrics a_index avg(doubleField) ${op} percentile(doubleField, 50) BY ipField`, [] ); } @@ -227,9 +227,9 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { test('syntax does not allow clause without ', async () => { const { expectErrors } = await setup(); - await expectErrors('metrics a_index BY stringField', [ + await expectErrors('metrics a_index BY textField', [ 'Expected an aggregate function or group but got [BY] of type [FieldAttribute]', - "SyntaxError: extraneous input 'stringField' expecting ", + "SyntaxError: extraneous input 'textField' expecting ", ]); }); @@ -239,7 +239,7 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { await expectErrors('metrics a_index count(* + 1) BY ipField', [ "SyntaxError: no viable alternative at input 'count(* +'", ]); - await expectErrors('metrics a_index \n count(* + round(numberField)) BY ipField', [ + await expectErrors('metrics a_index \n count(* + round(doubleField)) BY ipField', [ "SyntaxError: no viable alternative at input 'count(* +'", ]); }); @@ -251,20 +251,20 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { 'Using wildcards (*) in round is not allowed', ]); await expectErrors('metrics a_index count(count(*)) BY ipField', [ - `Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [count(*)] of type [number]`, + `Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [count(*)] of type [long]`, ]); }); test('errors on unknown field', async () => { const { expectErrors } = await setup(); - await expectErrors('metrics a_index avg(numberField) by wrongField', [ + await expectErrors('metrics a_index avg(doubleField) by wrongField', [ 'Unknown column [wrongField]', ]); - await expectErrors('metrics a_index avg(numberField) by wrongField + 1', [ + await expectErrors('metrics a_index avg(doubleField) by wrongField + 1', [ 'Unknown column [wrongField]', ]); - await expectErrors('metrics a_index avg(numberField) by var0 = wrongField + 1', [ + await expectErrors('metrics a_index avg(doubleField) by var0 = wrongField + 1', [ 'Unknown column [wrongField]', ]); }); @@ -272,11 +272,11 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { test('various errors', async () => { const { expectErrors } = await setup(); - await expectErrors('METRICS a_index avg(numberField) by percentile(numberField)', [ + await expectErrors('METRICS a_index avg(doubleField) by percentile(doubleField)', [ 'METRICS BY does not support function percentile', ]); await expectErrors( - 'METRICS a_index avg(numberField) by stringField, percentile(numberField) by ipField', + 'METRICS a_index avg(doubleField) by textField, percentile(doubleField) by ipField', [ "SyntaxError: mismatched input 'by' expecting ", 'METRICS BY does not support function percentile', diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/test_suites/validation.command.stats.ts b/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/test_suites/validation.command.stats.ts index 5a98d362dc002..f5bd10fe0ca83 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/test_suites/validation.command.stats.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/test_suites/validation.command.stats.ts @@ -15,15 +15,15 @@ export const validationStatsCommandTestSuite = (setup: helpers.Setup) => { test('no errors on correct usage', async () => { const { expectErrors } = await setup(); - await expectErrors('from a_index | stats by stringField', []); + await expectErrors('from a_index | stats by textField', []); await expectErrors( `FROM index - | EVAL numberField * 3.281 - | STATS avg_numberField = AVG(\`numberField * 3.281\`)`, + | EVAL doubleField * 3.281 + | STATS avg_doubleField = AVG(\`doubleField * 3.281\`)`, [] ); await expectErrors( - `FROM index | STATS AVG(numberField) by round(numberField) + 1 | EVAL \`round(numberField) + 1\` / 2`, + `FROM index | STATS AVG(doubleField) by round(doubleField) + 1 | EVAL \`round(doubleField) + 1\` / 2`, [] ); }); @@ -40,18 +40,18 @@ export const validationStatsCommandTestSuite = (setup: helpers.Setup) => { test('no errors on correct usage', async () => { const { expectErrors } = await setup(); - await expectErrors('from a_index | stats avg(numberField) by 1', []); - await expectErrors('from a_index | stats count(`numberField`)', []); + await expectErrors('from a_index | stats avg(doubleField) by 1', []); + await expectErrors('from a_index | stats count(`doubleField`)', []); await expectErrors('from a_index | stats count(*)', []); await expectErrors('from a_index | stats count()', []); await expectErrors('from a_index | stats var0 = count(*)', []); await expectErrors('from a_index | stats var0 = count()', []); - await expectErrors('from a_index | stats var0 = avg(numberField), count(*)', []); + await expectErrors('from a_index | stats var0 = avg(doubleField), count(*)', []); await expectErrors(`from a_index | stats sum(case(false, 0, 1))`, []); await expectErrors(`from a_index | stats var0 = sum( case(false, 0, 1))`, []); // "or" must accept "null" - await expectErrors('from a_index | stats count(stringField == "a" or null)', []); + await expectErrors('from a_index | stats count(textField == "a" or null)', []); }); test('sub-command can reference aggregated field', async () => { @@ -59,9 +59,9 @@ export const validationStatsCommandTestSuite = (setup: helpers.Setup) => { for (const subCommand of ['keep', 'drop', 'eval']) { await expectErrors( - 'from a_index | stats count(`numberField`) | ' + + 'from a_index | stats count(`doubleField`) | ' + subCommand + - ' `count(``numberField``)` ', + ' `count(``doubleField``)` ', [] ); } @@ -70,64 +70,64 @@ export const validationStatsCommandTestSuite = (setup: helpers.Setup) => { test('errors on agg and non-agg mix', async () => { const { expectErrors } = await setup(); - await expectErrors('from a_index | STATS sum( numberField ) + abs( numberField ) ', [ - 'Cannot combine aggregation and non-aggregation values in [STATS], found [sum(numberField)+abs(numberField)]', + await expectErrors('from a_index | STATS sum( doubleField ) + abs( doubleField ) ', [ + 'Cannot combine aggregation and non-aggregation values in [STATS], found [sum(doubleField)+abs(doubleField)]', ]); - await expectErrors('from a_index | STATS abs( numberField + sum( numberField )) ', [ - 'Cannot combine aggregation and non-aggregation values in [STATS], found [abs(numberField+sum(numberField))]', + await expectErrors('from a_index | STATS abs( doubleField + sum( doubleField )) ', [ + 'Cannot combine aggregation and non-aggregation values in [STATS], found [abs(doubleField+sum(doubleField))]', ]); }); test('errors on each aggregation field, which does not contain at least one agg function', async () => { const { expectErrors } = await setup(); - await expectErrors('from a_index | stats numberField + 1', [ - 'At least one aggregation function required in [STATS], found [numberField+1]', + await expectErrors('from a_index | stats doubleField + 1', [ + 'At least one aggregation function required in [STATS], found [doubleField+1]', ]); - await expectErrors('from a_index | stats numberField + 1, stringField', [ - 'At least one aggregation function required in [STATS], found [numberField+1]', - 'Expected an aggregate function or group but got [stringField] of type [FieldAttribute]', + await expectErrors('from a_index | stats doubleField + 1, textField', [ + 'At least one aggregation function required in [STATS], found [doubleField+1]', + 'Expected an aggregate function or group but got [textField] of type [FieldAttribute]', ]); - await expectErrors('from a_index | stats numberField + 1, numberField + 2, count()', [ - 'At least one aggregation function required in [STATS], found [numberField+1]', - 'At least one aggregation function required in [STATS], found [numberField+2]', + await expectErrors('from a_index | stats doubleField + 1, doubleField + 2, count()', [ + 'At least one aggregation function required in [STATS], found [doubleField+1]', + 'At least one aggregation function required in [STATS], found [doubleField+2]', ]); await expectErrors( - 'from a_index | stats numberField + 1, numberField + count(), count()', - ['At least one aggregation function required in [STATS], found [numberField+1]'] + 'from a_index | stats doubleField + 1, doubleField + count(), count()', + ['At least one aggregation function required in [STATS], found [doubleField+1]'] ); - await expectErrors('from a_index | stats 5 + numberField + 1', [ - 'At least one aggregation function required in [STATS], found [5+numberField+1]', + await expectErrors('from a_index | stats 5 + doubleField + 1', [ + 'At least one aggregation function required in [STATS], found [5+doubleField+1]', ]); - await expectErrors('from a_index | stats numberField + 1 by ipField', [ - 'At least one aggregation function required in [STATS], found [numberField+1]', + await expectErrors('from a_index | stats doubleField + 1 by ipField', [ + 'At least one aggregation function required in [STATS], found [doubleField+1]', ]); }); test('errors when input is not an aggregate function', async () => { const { expectErrors } = await setup(); - await expectErrors('from a_index | stats numberField ', [ - 'Expected an aggregate function or group but got [numberField] of type [FieldAttribute]', + await expectErrors('from a_index | stats doubleField ', [ + 'Expected an aggregate function or group but got [doubleField] of type [FieldAttribute]', ]); }); test('various errors', async () => { const { expectErrors } = await setup(); - await expectErrors('from a_index | stats numberField=', [ + await expectErrors('from a_index | stats doubleField=', [ "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); - await expectErrors('from a_index | stats numberField=5 by ', [ + await expectErrors('from a_index | stats doubleField=5 by ', [ "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); - await expectErrors('from a_index | stats avg(numberField) by wrongField', [ + await expectErrors('from a_index | stats avg(doubleField) by wrongField', [ 'Unknown column [wrongField]', ]); - await expectErrors('from a_index | stats avg(numberField) by wrongField + 1', [ + await expectErrors('from a_index | stats avg(doubleField) by wrongField + 1', [ 'Unknown column [wrongField]', ]); - await expectErrors('from a_index | stats avg(numberField) by var0 = wrongField + 1', [ + await expectErrors('from a_index | stats avg(doubleField) by var0 = wrongField + 1', [ 'Unknown column [wrongField]', ]); await expectErrors('from a_index | stats var0 = avg(fn(number)), count(*)', [ @@ -142,7 +142,7 @@ export const validationStatsCommandTestSuite = (setup: helpers.Setup) => { 'Using wildcards (*) in round is not allowed', ]); await expectErrors('from a_index | stats count(count(*))', [ - `Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [count(*)] of type [number]`, + `Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [count(*)] of type [long]`, ]); }); }); @@ -152,20 +152,20 @@ export const validationStatsCommandTestSuite = (setup: helpers.Setup) => { const { expectErrors } = await setup(); await expectErrors( - 'from a_index | stats avg(numberField), percentile(numberField, 50) by ipField', + 'from a_index | stats avg(doubleField), percentile(doubleField, 50) by ipField', [] ); await expectErrors( - 'from a_index | stats avg(numberField), percentile(numberField, 50) BY ipField', + 'from a_index | stats avg(doubleField), percentile(doubleField, 50) BY ipField', [] ); await expectErrors( - 'from a_index | stats avg(numberField), percentile(numberField, 50) + 1 by ipField', + 'from a_index | stats avg(doubleField), percentile(doubleField, 50) + 1 by ipField', [] ); for (const op of ['+', '-', '*', '/', '%']) { await expectErrors( - `from a_index | stats avg(numberField) ${op} percentile(numberField, 50) BY ipField`, + `from a_index | stats avg(doubleField) ${op} percentile(doubleField, 50) BY ipField`, [] ); } @@ -185,7 +185,7 @@ export const validationStatsCommandTestSuite = (setup: helpers.Setup) => { await expectErrors('from a_index | stats count(* + 1) BY ipField', [ "SyntaxError: no viable alternative at input 'count(* +'", ]); - await expectErrors('from a_index | stats count(* + round(numberField)) BY ipField', [ + await expectErrors('from a_index | stats count(* + round(doubleField)) BY ipField', [ "SyntaxError: no viable alternative at input 'count(* +'", ]); }); @@ -197,18 +197,18 @@ export const validationStatsCommandTestSuite = (setup: helpers.Setup) => { 'Using wildcards (*) in round is not allowed', ]); await expectErrors('from a_index | stats count(count(*)) BY ipField', [ - `Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [count(*)] of type [number]`, + `Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [count(*)] of type [long]`, ]); }); test('various errors', async () => { const { expectErrors } = await setup(); - await expectErrors('from a_index | stats avg(numberField) by percentile(numberField)', [ + await expectErrors('from a_index | stats avg(doubleField) by percentile(doubleField)', [ 'STATS BY does not support function percentile', ]); await expectErrors( - 'from a_index | stats avg(numberField) by stringField, percentile(numberField) by ipField', + 'from a_index | stats avg(doubleField) by textField, percentile(doubleField) by ipField', [ "SyntaxError: mismatched input 'by' expecting ", 'STATS BY does not support function percentile', @@ -220,34 +220,37 @@ export const validationStatsCommandTestSuite = (setup: helpers.Setup) => { test('no errors', async () => { const { expectErrors } = await setup(); - await expectErrors('from index | stats by bucket(dateField, pi(), "", "")', []); await expectErrors( 'from index | stats by bucket(dateField, 1 + 30 / 10, "", "")', [] ); await expectErrors( 'from index | stats by bucket(dateField, 1 + 30 / 10, concat("", ""), "")', - [] + ['Argument of [bucket] must be [date], found value [concat("","")] type [keyword]'] ); }); test('errors', async () => { const { expectErrors } = await setup(); + await expectErrors('from index | stats by bucket(dateField, pi(), "", "")', [ + 'Argument of [bucket] must be [integer], found value [pi()] type [double]', + ]); + await expectErrors( - 'from index | stats by bucket(dateField, abs(numberField), "", "")', - ['Argument of [bucket] must be a constant, received [abs(numberField)]'] + 'from index | stats by bucket(dateField, abs(doubleField), "", "")', + ['Argument of [bucket] must be a constant, received [abs(doubleField)]'] ); await expectErrors( - 'from index | stats by bucket(dateField, abs(length(numberField)), "", "")', - ['Argument of [bucket] must be a constant, received [abs(length(numberField))]'] + 'from index | stats by bucket(dateField, abs(length(doubleField)), "", "")', + ['Argument of [bucket] must be a constant, received [abs(length(doubleField))]'] ); await expectErrors( - 'from index | stats by bucket(dateField, numberField, stringField, stringField)', + 'from index | stats by bucket(dateField, doubleField, textField, textField)', [ - 'Argument of [bucket] must be a constant, received [numberField]', - 'Argument of [bucket] must be a constant, received [stringField]', - 'Argument of [bucket] must be a constant, received [stringField]', + 'Argument of [bucket] must be a constant, received [doubleField]', + 'Argument of [bucket] must be a constant, received [textField]', + 'Argument of [bucket] must be a constant, received [textField]', ] ); }); @@ -269,11 +272,11 @@ export const validationStatsCommandTestSuite = (setup: helpers.Setup) => { const { expectErrors } = await setup(); await expectErrors( - `from a_index | stats 5 + avg(numberField) ${builtinWrapping}`, + `from a_index | stats 5 + avg(doubleField) ${builtinWrapping}`, [] ); await expectErrors( - `from a_index | stats 5 ${builtinWrapping} + avg(numberField)`, + `from a_index | stats 5 ${builtinWrapping} + avg(doubleField)`, [] ); }); @@ -281,16 +284,16 @@ export const validationStatsCommandTestSuite = (setup: helpers.Setup) => { test('errors', async () => { const { expectErrors } = await setup(); - await expectErrors(`from a_index | stats 5 ${builtinWrapping} + numberField`, [ - `At least one aggregation function required in [STATS], found [5${builtinWrapping}+numberField]`, + await expectErrors(`from a_index | stats 5 ${builtinWrapping} + doubleField`, [ + `At least one aggregation function required in [STATS], found [5${builtinWrapping}+doubleField]`, ]); - await expectErrors(`from a_index | stats 5 + numberField ${builtinWrapping}`, [ - `At least one aggregation function required in [STATS], found [5+numberField${builtinWrapping}]`, + await expectErrors(`from a_index | stats 5 + doubleField ${builtinWrapping}`, [ + `At least one aggregation function required in [STATS], found [5+doubleField${builtinWrapping}]`, ]); await expectErrors( - `from a_index | stats 5 + numberField ${builtinWrapping}, var0 = sum(numberField)`, + `from a_index | stats 5 + doubleField ${builtinWrapping}, var0 = sum(doubleField)`, [ - `At least one aggregation function required in [STATS], found [5+numberField${builtinWrapping}]`, + `At least one aggregation function required in [STATS], found [5+doubleField${builtinWrapping}]`, ] ); }); @@ -304,31 +307,31 @@ export const validationStatsCommandTestSuite = (setup: helpers.Setup) => { const { expectErrors } = await setup(); await expectErrors( - `from a_index | stats ${evalWrapping} sum(numberField) ${closingWrapping}`, + `from a_index | stats ${evalWrapping} sum(doubleField) ${closingWrapping}`, [] ); await expectErrors( - `from a_index | stats ${evalWrapping} sum(numberField) ${closingWrapping} + ${evalWrapping} sum(numberField) ${closingWrapping}`, + `from a_index | stats ${evalWrapping} sum(doubleField) ${closingWrapping} + ${evalWrapping} sum(doubleField) ${closingWrapping}`, [] ); await expectErrors( - `from a_index | stats ${evalWrapping} sum(numberField + numberField) ${closingWrapping}`, + `from a_index | stats ${evalWrapping} sum(doubleField + doubleField) ${closingWrapping}`, [] ); await expectErrors( - `from a_index | stats ${evalWrapping} sum(numberField + round(numberField)) ${closingWrapping}`, + `from a_index | stats ${evalWrapping} sum(doubleField + round(doubleField)) ${closingWrapping}`, [] ); await expectErrors( - `from a_index | stats ${evalWrapping} sum(numberField + round(numberField)) ${closingWrapping} + ${evalWrapping} sum(numberField + round(numberField)) ${closingWrapping}`, + `from a_index | stats ${evalWrapping} sum(doubleField + round(doubleField)) ${closingWrapping} + ${evalWrapping} sum(doubleField + round(doubleField)) ${closingWrapping}`, [] ); await expectErrors( - `from a_index | stats sum(${evalWrapping} numberField ${closingWrapping} )`, + `from a_index | stats sum(${evalWrapping} doubleField ${closingWrapping} )`, [] ); await expectErrors( - `from a_index | stats sum(${evalWrapping} numberField ${closingWrapping} ) + sum(${evalWrapping} numberField ${closingWrapping} )`, + `from a_index | stats sum(${evalWrapping} doubleField ${closingWrapping} ) + sum(${evalWrapping} doubleField ${closingWrapping} )`, [] ); }); @@ -337,21 +340,21 @@ export const validationStatsCommandTestSuite = (setup: helpers.Setup) => { const { expectErrors } = await setup(); await expectErrors( - `from a_index | stats ${evalWrapping} numberField + sum(numberField) ${closingWrapping}`, + `from a_index | stats ${evalWrapping} doubleField + sum(doubleField) ${closingWrapping}`, [ - `Cannot combine aggregation and non-aggregation values in [STATS], found [${evalWrapping}numberField+sum(numberField)${closingWrapping}]`, + `Cannot combine aggregation and non-aggregation values in [STATS], found [${evalWrapping}doubleField+sum(doubleField)${closingWrapping}]`, ] ); await expectErrors( - `from a_index | stats ${evalWrapping} numberField + sum(numberField) ${closingWrapping}, var0 = sum(numberField)`, + `from a_index | stats ${evalWrapping} doubleField + sum(doubleField) ${closingWrapping}, var0 = sum(doubleField)`, [ - `Cannot combine aggregation and non-aggregation values in [STATS], found [${evalWrapping}numberField+sum(numberField)${closingWrapping}]`, + `Cannot combine aggregation and non-aggregation values in [STATS], found [${evalWrapping}doubleField+sum(doubleField)${closingWrapping}]`, ] ); await expectErrors( - `from a_index | stats var0 = ${evalWrapping} numberField + sum(numberField) ${closingWrapping}, var1 = sum(numberField)`, + `from a_index | stats var0 = ${evalWrapping} doubleField + sum(doubleField) ${closingWrapping}, var1 = sum(doubleField)`, [ - `Cannot combine aggregation and non-aggregation values in [STATS], found [${evalWrapping}numberField+sum(numberField)${closingWrapping}]`, + `Cannot combine aggregation and non-aggregation values in [STATS], found [${evalWrapping}doubleField+sum(doubleField)${closingWrapping}]`, ] ); }); diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/validation.eval.date_diff.test.ts b/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/validation.eval.date_diff.test.ts new file mode 100644 index 0000000000000..fd21ceb9b681c --- /dev/null +++ b/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/validation.eval.date_diff.test.ts @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { setup } from './helpers'; + +describe('validation', () => { + describe('command', () => { + test('date_diff', async () => { + const { expectErrors } = await setup(); + await expectErrors( + 'row var = date_diff("month", "2023-12-02T11:00:00.000Z", "2023-12-02T11:00:00.000Z")', + [] + ); + await expectErrors( + 'row var = date_diff("mm", "2023-12-02T11:00:00.000Z", "2023-12-02T11:00:00.000Z")', + [] + ); + await expectErrors( + 'row var = date_diff("bogus", "2023-12-02T11:00:00.000Z", "2023-12-02T11:00:00.000Z")', + [] + ); + await expectErrors( + 'from a_index | eval date_diff(textField, "2023-12-02T11:00:00.000Z", "2023-12-02T11:00:00.000Z")', + [] + ); + await expectErrors( + 'from a_index | eval date_diff("month", dateField, "2023-12-02T11:00:00.000Z")', + [] + ); + await expectErrors( + 'from a_index | eval date_diff("month", "2023-12-02T11:00:00.000Z", dateField)', + [] + ); + await expectErrors('from a_index | eval date_diff("month", textField, dateField)', [ + 'Argument of [date_diff] must be [date], found value [textField] type [text]', + ]); + await expectErrors('from a_index | eval date_diff("month", dateField, textField)', [ + 'Argument of [date_diff] must be [date], found value [textField] type [text]', + ]); + await expectErrors( + 'from a_index | eval var = date_diff("year", to_datetime(textField), to_datetime(textField))', + [] + ); + await expectErrors('from a_index | eval date_diff(doubleField, textField, textField)', [ + 'Argument of [date_diff] must be [date], found value [textField] type [text]', + 'Argument of [date_diff] must be [date], found value [textField] type [text]', + 'Argument of [date_diff] must be [keyword], found value [doubleField] type [double]', + ]); + }); + }); +}); diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/validation.params.test.ts b/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/validation.params.test.ts index db132d4d3e488..d732838ed919e 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/validation.params.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/validation.params.test.ts @@ -23,18 +23,18 @@ test('should allow param inside agg function argument', async () => { test('allow params in WHERE command expressions', async () => { const { validate } = await setup(); - const res1 = await validate('FROM index | WHERE stringField >= ?start'); + const res1 = await validate('FROM index | WHERE textField >= ?start'); const res2 = await validate(` FROM index - | WHERE stringField >= ?start - | WHERE stringField <= ?0 - | WHERE stringField == ? + | WHERE textField >= ?start + | WHERE textField <= ?0 + | WHERE textField == ? `); const res3 = await validate(` FROM index - | WHERE stringField >= ?start - AND stringField <= ?0 - AND stringField == ? + | WHERE textField >= ?start + AND textField <= ?0 + AND textField == ? `); expect(res1).toMatchObject({ errors: [], warnings: [] }); diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json b/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json index b8b91d665663f..0b601ab2f66a1 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json +++ b/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json @@ -9,16 +9,48 @@ ], "fields": [ { - "name": "numberField", - "type": "number" + "name": "doubleField", + "type": "double" + }, + { + "name": "unsignedLongField", + "type": "unsigned_long" + }, + { + "name": "longField", + "type": "long" + }, + { + "name": "integerField", + "type": "integer" + }, + { + "name": "counterIntegerField", + "type": "counter_integer" + }, + { + "name": "counterLongField", + "type": "counter_long" + }, + { + "name": "counterDoubleField", + "type": "counter_double" }, { "name": "dateField", "type": "date" }, { - "name": "stringField", - "type": "string" + "name": "datePeriodField", + "type": "date_period" + }, + { + "name": "textField", + "type": "text" + }, + { + "name": "keywordField", + "type": "keyword" }, { "name": "booleanField", @@ -50,11 +82,11 @@ }, { "name": "any#Char$Field", - "type": "number" + "type": "double" }, { "name": "kubernetes.something.something", - "type": "number" + "type": "double" }, { "name": "@timestamp", @@ -68,11 +100,11 @@ "enrichFields": [ { "name": "otherField", - "type": "string" + "type": "text" }, { "name": "yetAnotherField", - "type": "number" + "type": "double" }, { "name": "otherStringField", @@ -417,9 +449,9 @@ "warning": [] }, { - "query": "row var = (numberField > 0)", + "query": "row var = (doubleField > 0)", "error": [ - "Unknown column [numberField]" + "Unknown column [doubleField]" ], "warning": [] }, @@ -441,8 +473,8 @@ { "query": "row var = false > false", "error": [ - "Argument of [>] must be [number], found value [false] type [boolean]", - "Argument of [>] must be [number], found value [false] type [boolean]" + "Argument of [>] must be [date], found value [false] type [boolean]", + "Argument of [>] must be [date], found value [false] type [boolean]" ], "warning": [] }, @@ -467,9 +499,9 @@ "warning": [] }, { - "query": "row var = (numberField >= 0)", + "query": "row var = (doubleField >= 0)", "error": [ - "Unknown column [numberField]" + "Unknown column [doubleField]" ], "warning": [] }, @@ -491,8 +523,8 @@ { "query": "row var = false >= false", "error": [ - "Argument of [>=] must be [number], found value [false] type [boolean]", - "Argument of [>=] must be [number], found value [false] type [boolean]" + "Argument of [>=] must be [date], found value [false] type [boolean]", + "Argument of [>=] must be [date], found value [false] type [boolean]" ], "warning": [] }, @@ -517,9 +549,9 @@ "warning": [] }, { - "query": "row var = (numberField < 0)", + "query": "row var = (doubleField < 0)", "error": [ - "Unknown column [numberField]" + "Unknown column [doubleField]" ], "warning": [] }, @@ -541,8 +573,8 @@ { "query": "row var = false < false", "error": [ - "Argument of [<] must be [number], found value [false] type [boolean]", - "Argument of [<] must be [number], found value [false] type [boolean]" + "Argument of [<] must be [date], found value [false] type [boolean]", + "Argument of [<] must be [date], found value [false] type [boolean]" ], "warning": [] }, @@ -567,9 +599,9 @@ "warning": [] }, { - "query": "row var = (numberField <= 0)", + "query": "row var = (doubleField <= 0)", "error": [ - "Unknown column [numberField]" + "Unknown column [doubleField]" ], "warning": [] }, @@ -591,8 +623,8 @@ { "query": "row var = false <= false", "error": [ - "Argument of [<=] must be [number], found value [false] type [boolean]", - "Argument of [<=] must be [number], found value [false] type [boolean]" + "Argument of [<=] must be [date], found value [false] type [boolean]", + "Argument of [<=] must be [date], found value [false] type [boolean]" ], "warning": [] }, @@ -617,9 +649,9 @@ "warning": [] }, { - "query": "row var = (numberField == 0)", + "query": "row var = (doubleField == 0)", "error": [ - "Unknown column [numberField]" + "Unknown column [doubleField]" ], "warning": [] }, @@ -664,9 +696,9 @@ "warning": [] }, { - "query": "row var = (numberField != 0)", + "query": "row var = (doubleField != 0)", "error": [ - "Unknown column [numberField]" + "Unknown column [doubleField]" ], "warning": [] }, @@ -713,7 +745,7 @@ { "query": "row var = now() + now()", "error": [ - "Argument of [+] must be [time_literal], found value [now()] type [date]" + "Argument of [+] must be [date_period], found value [now()] type [date]" ], "warning": [] }, @@ -730,7 +762,7 @@ { "query": "row var = now() - now()", "error": [ - "Argument of [-] must be [time_literal], found value [now()] type [date]" + "Argument of [-] must be [date_period], found value [now()] type [date]" ], "warning": [] }, @@ -747,8 +779,8 @@ { "query": "row var = now() * now()", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [now()] type [date]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [now()] type [date]" ], "warning": [] }, @@ -765,8 +797,8 @@ { "query": "row var = now() / now()", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [now()] type [date]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [now()] type [date]" ], "warning": [] }, @@ -783,8 +815,8 @@ { "query": "row var = now() % now()", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [now()] type [date]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [now()] type [date]" ], "warning": [] }, @@ -811,28 +843,28 @@ { "query": "row var = 5 like \"?a\"", "error": [ - "Argument of [like] must be [string], found value [5] type [number]" + "Argument of [like] must be [text], found value [5] type [integer]" ], "warning": [] }, { "query": "row var = 5 NOT like \"?a\"", "error": [ - "Argument of [not_like] must be [string], found value [5] type [number]" + "Argument of [not_like] must be [text], found value [5] type [integer]" ], "warning": [] }, { "query": "row var = NOT 5 like \"?a\"", "error": [ - "Argument of [like] must be [string], found value [5] type [number]" + "Argument of [like] must be [text], found value [5] type [integer]" ], "warning": [] }, { "query": "row var = NOT 5 NOT like \"?a\"", "error": [ - "Argument of [not_like] must be [string], found value [5] type [number]" + "Argument of [not_like] must be [text], found value [5] type [integer]" ], "warning": [] }, @@ -859,28 +891,28 @@ { "query": "row var = 5 rlike \"?a\"", "error": [ - "Argument of [rlike] must be [string], found value [5] type [number]" + "Argument of [rlike] must be [text], found value [5] type [integer]" ], "warning": [] }, { "query": "row var = 5 NOT rlike \"?a\"", "error": [ - "Argument of [not_rlike] must be [string], found value [5] type [number]" + "Argument of [not_rlike] must be [text], found value [5] type [integer]" ], "warning": [] }, { "query": "row var = NOT 5 rlike \"?a\"", "error": [ - "Argument of [rlike] must be [string], found value [5] type [number]" + "Argument of [rlike] must be [text], found value [5] type [integer]" ], "warning": [] }, { "query": "row var = NOT 5 NOT rlike \"?a\"", "error": [ - "Argument of [not_rlike] must be [string], found value [5] type [number]" + "Argument of [not_rlike] must be [text], found value [5] type [integer]" ], "warning": [] }, @@ -966,24 +998,24 @@ { "query": "row var = now() * 1 year", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 year] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 year] type [duration]" ], "warning": [] }, { "query": "row var = now() / 1 year", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 year] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 year] type [duration]" ], "warning": [] }, { "query": "row var = now() % 1 year", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 year] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 year] type [duration]" ], "warning": [] }, @@ -1031,24 +1063,24 @@ { "query": "row var = now() * 1 years", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 years] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 years] type [duration]" ], "warning": [] }, { "query": "row var = now() / 1 years", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 years] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 years] type [duration]" ], "warning": [] }, { "query": "row var = now() % 1 years", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 years] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 years] type [duration]" ], "warning": [] }, @@ -1096,24 +1128,24 @@ { "query": "row var = now() * 1 quarter", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 quarter] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 quarter] type [duration]" ], "warning": [] }, { "query": "row var = now() / 1 quarter", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 quarter] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 quarter] type [duration]" ], "warning": [] }, { "query": "row var = now() % 1 quarter", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 quarter] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 quarter] type [duration]" ], "warning": [] }, @@ -1161,24 +1193,24 @@ { "query": "row var = now() * 1 quarters", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 quarters] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 quarters] type [duration]" ], "warning": [] }, { "query": "row var = now() / 1 quarters", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 quarters] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 quarters] type [duration]" ], "warning": [] }, { "query": "row var = now() % 1 quarters", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 quarters] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 quarters] type [duration]" ], "warning": [] }, @@ -1226,24 +1258,24 @@ { "query": "row var = now() * 1 month", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 month] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 month] type [duration]" ], "warning": [] }, { "query": "row var = now() / 1 month", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 month] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 month] type [duration]" ], "warning": [] }, { "query": "row var = now() % 1 month", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 month] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 month] type [duration]" ], "warning": [] }, @@ -1291,24 +1323,24 @@ { "query": "row var = now() * 1 months", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 months] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 months] type [duration]" ], "warning": [] }, { "query": "row var = now() / 1 months", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 months] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 months] type [duration]" ], "warning": [] }, { "query": "row var = now() % 1 months", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 months] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 months] type [duration]" ], "warning": [] }, @@ -1356,24 +1388,24 @@ { "query": "row var = now() * 1 week", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 week] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 week] type [duration]" ], "warning": [] }, { "query": "row var = now() / 1 week", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 week] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 week] type [duration]" ], "warning": [] }, { "query": "row var = now() % 1 week", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 week] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 week] type [duration]" ], "warning": [] }, @@ -1421,24 +1453,24 @@ { "query": "row var = now() * 1 weeks", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 weeks] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 weeks] type [duration]" ], "warning": [] }, { "query": "row var = now() / 1 weeks", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 weeks] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 weeks] type [duration]" ], "warning": [] }, { "query": "row var = now() % 1 weeks", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 weeks] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 weeks] type [duration]" ], "warning": [] }, @@ -1486,24 +1518,24 @@ { "query": "row var = now() * 1 day", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 day] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 day] type [duration]" ], "warning": [] }, { "query": "row var = now() / 1 day", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 day] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 day] type [duration]" ], "warning": [] }, { "query": "row var = now() % 1 day", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 day] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 day] type [duration]" ], "warning": [] }, @@ -1551,24 +1583,24 @@ { "query": "row var = now() * 1 days", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 days] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 days] type [duration]" ], "warning": [] }, { "query": "row var = now() / 1 days", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 days] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 days] type [duration]" ], "warning": [] }, { "query": "row var = now() % 1 days", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 days] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 days] type [duration]" ], "warning": [] }, @@ -1616,24 +1648,24 @@ { "query": "row var = now() * 1 hour", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 hour] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 hour] type [duration]" ], "warning": [] }, { "query": "row var = now() / 1 hour", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 hour] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 hour] type [duration]" ], "warning": [] }, { "query": "row var = now() % 1 hour", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 hour] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 hour] type [duration]" ], "warning": [] }, @@ -1681,24 +1713,24 @@ { "query": "row var = now() * 1 hours", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 hours] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 hours] type [duration]" ], "warning": [] }, { "query": "row var = now() / 1 hours", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 hours] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 hours] type [duration]" ], "warning": [] }, { "query": "row var = now() % 1 hours", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 hours] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 hours] type [duration]" ], "warning": [] }, @@ -1746,24 +1778,24 @@ { "query": "row var = now() * 1 minute", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 minute] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 minute] type [duration]" ], "warning": [] }, { "query": "row var = now() / 1 minute", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 minute] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 minute] type [duration]" ], "warning": [] }, { "query": "row var = now() % 1 minute", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 minute] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 minute] type [duration]" ], "warning": [] }, @@ -1811,24 +1843,24 @@ { "query": "row var = now() * 1 minutes", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 minutes] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 minutes] type [duration]" ], "warning": [] }, { "query": "row var = now() / 1 minutes", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 minutes] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 minutes] type [duration]" ], "warning": [] }, { "query": "row var = now() % 1 minutes", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 minutes] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 minutes] type [duration]" ], "warning": [] }, @@ -1876,24 +1908,24 @@ { "query": "row var = now() * 1 second", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 second] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 second] type [duration]" ], "warning": [] }, { "query": "row var = now() / 1 second", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 second] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 second] type [duration]" ], "warning": [] }, { "query": "row var = now() % 1 second", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 second] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 second] type [duration]" ], "warning": [] }, @@ -1941,24 +1973,24 @@ { "query": "row var = now() * 1 seconds", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 seconds] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 seconds] type [duration]" ], "warning": [] }, { "query": "row var = now() / 1 seconds", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 seconds] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 seconds] type [duration]" ], "warning": [] }, { "query": "row var = now() % 1 seconds", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 seconds] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 seconds] type [duration]" ], "warning": [] }, @@ -2006,24 +2038,24 @@ { "query": "row var = now() * 1 millisecond", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 millisecond] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 millisecond] type [duration]" ], "warning": [] }, { "query": "row var = now() / 1 millisecond", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 millisecond] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 millisecond] type [duration]" ], "warning": [] }, { "query": "row var = now() % 1 millisecond", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 millisecond] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 millisecond] type [duration]" ], "warning": [] }, @@ -2071,24 +2103,24 @@ { "query": "row var = now() * 1 milliseconds", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 milliseconds] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 milliseconds] type [duration]" ], "warning": [] }, { "query": "row var = now() / 1 milliseconds", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 milliseconds] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 milliseconds] type [duration]" ], "warning": [] }, { "query": "row var = now() % 1 milliseconds", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 milliseconds] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 milliseconds] type [duration]" ], "warning": [] }, @@ -2105,14 +2137,14 @@ "warning": [] }, { - "query": "show numberField", + "query": "show doubleField", "error": [ - "SyntaxError: token recognition error at: 'n'", + "SyntaxError: token recognition error at: 'd'", + "SyntaxError: token recognition error at: 'o'", "SyntaxError: token recognition error at: 'u'", - "SyntaxError: token recognition error at: 'm'", "SyntaxError: token recognition error at: 'b'", + "SyntaxError: token recognition error at: 'l'", "SyntaxError: token recognition error at: 'e'", - "SyntaxError: token recognition error at: 'r'", "SyntaxError: token recognition error at: 'F'", "SyntaxError: token recognition error at: 'ie'", "SyntaxError: token recognition error at: 'l'", @@ -2148,16 +2180,16 @@ "warning": [] }, { - "query": "from index | limit numberField", + "query": "from index | limit doubleField", "error": [ - "SyntaxError: mismatched input 'numberField' expecting INTEGER_LITERAL" + "SyntaxError: mismatched input 'doubleField' expecting INTEGER_LITERAL" ], "warning": [] }, { - "query": "from index | limit stringField", + "query": "from index | limit textField", "error": [ - "SyntaxError: mismatched input 'stringField' expecting INTEGER_LITERAL" + "SyntaxError: mismatched input 'textField' expecting INTEGER_LITERAL" ], "warning": [] }, @@ -2179,12 +2211,12 @@ "warning": [] }, { - "query": "from index | keep stringField, numberField, dateField", + "query": "from index | keep keywordField, doubleField, integerField, dateField", "error": [], "warning": [] }, { - "query": "from index | keep `stringField`, `numberField`, `dateField`", + "query": "from index | keep `keywordField`, `doubleField`, `integerField`, `dateField`", "error": [], "warning": [] }, @@ -2206,7 +2238,7 @@ "warning": [] }, { - "query": "from index | keep missingField, numberField, dateField", + "query": "from index | keep missingField, doubleField, dateField", "error": [ "Unknown column [missingField]" ], @@ -2225,28 +2257,28 @@ "warning": [] }, { - "query": "from index | project stringField, numberField, dateField", + "query": "from index | project textField, doubleField, dateField", "error": [ "SyntaxError: mismatched input 'project' expecting {'dissect', 'drop', 'enrich', 'eval', 'grok', 'inlinestats', 'keep', 'limit', 'lookup', 'mv_expand', 'rename', 'sort', 'stats', 'where'}" ], "warning": [] }, { - "query": "from index | PROJECT stringField, numberField, dateField", + "query": "from index | PROJECT textField, doubleField, dateField", "error": [ "SyntaxError: mismatched input 'PROJECT' expecting {'dissect', 'drop', 'enrich', 'eval', 'grok', 'inlinestats', 'keep', 'limit', 'lookup', 'mv_expand', 'rename', 'sort', 'stats', 'where'}" ], "warning": [] }, { - "query": "from index | project missingField, numberField, dateField", + "query": "from index | project missingField, doubleField, dateField", "error": [ "SyntaxError: mismatched input 'project' expecting {'dissect', 'drop', 'enrich', 'eval', 'grok', 'inlinestats', 'keep', 'limit', 'lookup', 'mv_expand', 'rename', 'sort', 'stats', 'where'}" ], "warning": [] }, { - "query": "from index | keep s*", + "query": "from index | keep k*", "error": [], "warning": [] }, @@ -2256,17 +2288,17 @@ "warning": [] }, { - "query": "from index | keep s*Field", + "query": "from index | keep k*Field", "error": [], "warning": [] }, { - "query": "from index | keep string*Field", + "query": "from index | keep key*Field", "error": [], "warning": [] }, { - "query": "from index | keep s*, n*", + "query": "from index | keep k*, i*", "error": [], "warning": [] }, @@ -2299,12 +2331,12 @@ ] }, { - "query": "FROM index | STATS ROUND(AVG(numberField * 1.5)), COUNT(*), MIN(numberField * 10) | KEEP `MIN(numberField * 10)`", + "query": "FROM index | STATS ROUND(AVG(doubleField * 1.5)), COUNT(*), MIN(doubleField * 10) | KEEP `MIN(doubleField * 10)`", "error": [], "warning": [] }, { - "query": "FROM index | STATS COUNT(*), MIN(numberField * 10), MAX(numberField)| KEEP `COUNT(*)`", + "query": "FROM index | STATS COUNT(*), MIN(doubleField * 10), MAX(doubleField)| KEEP `COUNT(*)`", "error": [], "warning": [] }, @@ -2316,7 +2348,7 @@ "warning": [] }, { - "query": "from index | drop stringField, numberField, dateField", + "query": "from index | drop textField, doubleField, dateField", "error": [], "warning": [] }, @@ -2331,7 +2363,7 @@ "warning": [] }, { - "query": "from index | drop missingField, numberField, dateField", + "query": "from index | drop missingField, doubleField, dateField", "error": [ "Unknown column [missingField]" ], @@ -2343,12 +2375,12 @@ "warning": [] }, { - "query": "from index | drop s*", + "query": "from index | drop t*", "error": [], "warning": [] }, { - "query": "from index | drop s**Field", + "query": "from index | drop t**Field", "error": [], "warning": [] }, @@ -2358,7 +2390,7 @@ "warning": [] }, { - "query": "from index | drop s*F*d", + "query": "from index | drop t*F*d", "error": [], "warning": [] }, @@ -2368,18 +2400,20 @@ "warning": [] }, { - "query": "from index | drop s*Field", + "query": "from index | drop t*Field", "error": [], "warning": [] }, { - "query": "from index | drop string*Field", + "query": "from index | drop textField", "error": [], "warning": [] }, { - "query": "from index | drop s*, n*", - "error": [], + "query": "from index | drop s*, d*", + "error": [ + "Unknown column [s*]" + ], "warning": [] }, { @@ -2411,7 +2445,7 @@ "warning": [] }, { - "query": "from index | drop stringField, *", + "query": "from index | drop textField, *", "error": [ "Removing all fields is not allowed [*]" ], @@ -2425,19 +2459,19 @@ ] }, { - "query": "from index | drop stringField, @timestamp", + "query": "from index | drop textField, @timestamp", "error": [], "warning": [ "Drop [@timestamp] will remove all time filters to the search results" ] }, { - "query": "FROM index | STATS ROUND(AVG(numberField * 1.5)), COUNT(*), MIN(numberField * 10) | DROP `MIN(numberField * 10)`", + "query": "FROM index | STATS ROUND(AVG(doubleField * 1.5)), COUNT(*), MIN(doubleField * 10) | DROP `MIN(doubleField * 10)`", "error": [], "warning": [] }, { - "query": "FROM index | STATS COUNT(*), MIN(numberField * 10), MAX(numberField)| DROP `COUNT(*)`", + "query": "FROM index | STATS COUNT(*), MIN(doubleField * 10), MAX(doubleField)| DROP `COUNT(*)`", "error": [], "warning": [] }, @@ -2449,12 +2483,12 @@ "warning": [] }, { - "query": "from a_index | mv_expand stringField", + "query": "from a_index | mv_expand textField", "error": [], "warning": [] }, { - "query": "from a_index | mv_expand numberField", + "query": "from a_index | mv_expand integerField", "error": [], "warning": [] }, @@ -2474,7 +2508,7 @@ "warning": [] }, { - "query": "from a_index | mv_expand numberField, b", + "query": "from a_index | mv_expand doubleField, b", "error": [ "SyntaxError: token recognition error at: ','", "SyntaxError: extraneous input 'b' expecting " @@ -2509,7 +2543,7 @@ "warning": [] }, { - "query": "from a_index | rename stringField", + "query": "from a_index | rename textField", "error": [ "SyntaxError: mismatched input '' expecting 'as'" ], @@ -2524,7 +2558,7 @@ "warning": [] }, { - "query": "from a_index | rename stringField as", + "query": "from a_index | rename textField as", "error": [ "SyntaxError: missing ID_PATTERN at ''" ], @@ -2539,22 +2573,22 @@ "warning": [] }, { - "query": "from a_index | rename stringField as b", + "query": "from a_index | rename textField as b", "error": [], "warning": [] }, { - "query": "from a_index | rename stringField AS b", + "query": "from a_index | rename textField AS b", "error": [], "warning": [] }, { - "query": "from a_index | rename stringField As b", + "query": "from a_index | rename textField As b", "error": [], "warning": [] }, { - "query": "from a_index | rename stringField As b, b AS c", + "query": "from a_index | rename textField As b, b AS c", "error": [], "warning": [] }, @@ -2569,26 +2603,34 @@ "warning": [] }, { - "query": "from a_index | eval numberField + 1 | rename `numberField + 1` as a", + "query": "from a_index | eval doubleField + 1 | rename `doubleField + 1` as a", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField) | rename `avg(numberField)` as avg0", + "query": "from a_index | stats avg(doubleField) | rename `avg(doubleField)` as avg0", "error": [], "warning": [] }, { - "query": "from a_index |eval numberField + 1 | rename `numberField + 1` as ", + "query": "from a_index |eval doubleField + 1 | rename `doubleField + 1` as ", "error": [ "SyntaxError: missing ID_PATTERN at ''" ], "warning": [] }, + { + "query": "from a_index | rename key* as keywords", + "error": [ + "Using wildcards (*) in RENAME is not allowed [key*]", + "Unknown column [keywords]" + ], + "warning": [] + }, { "query": "from a_index | rename s* as strings", "error": [ - "Using wildcards (*) in RENAME is not allowed [s*]", + "Unknown column [s*]", "Unknown column [strings]" ], "warning": [] @@ -2613,29 +2655,29 @@ "warning": [] }, { - "query": "from a_index | dissect stringField", + "query": "from a_index | dissect textField", "error": [ "SyntaxError: missing QUOTED_STRING at ''" ], "warning": [] }, { - "query": "from a_index | dissect stringField 2", + "query": "from a_index | dissect textField 2", "error": [ "SyntaxError: mismatched input '2' expecting QUOTED_STRING" ], "warning": [] }, { - "query": "from a_index | dissect stringField .", + "query": "from a_index | dissect textField .", "error": [ "SyntaxError: mismatched input '' expecting {UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", - "Unknown column [stringField.]" + "Unknown column [textField.]" ], "warning": [] }, { - "query": "from a_index | dissect stringField %a", + "query": "from a_index | dissect textField %a", "error": [ "SyntaxError: mismatched input '%' expecting QUOTED_STRING", "SyntaxError: mismatched input '' expecting '='" @@ -2643,26 +2685,26 @@ "warning": [] }, { - "query": "from a_index | dissect stringField \"%{firstWord}\"", + "query": "from a_index | dissect textField \"%{firstWord}\"", "error": [], "warning": [] }, { - "query": "from a_index | dissect numberField \"%{firstWord}\"", + "query": "from a_index | dissect doubleField \"%{firstWord}\"", "error": [ - "DISSECT only supports string type values, found [numberField] of type [number]" + "DISSECT only supports string type values, found [doubleField] of type [double]" ], "warning": [] }, { - "query": "from a_index | dissect stringField \"%{firstWord}\" option ", + "query": "from a_index | dissect textField \"%{firstWord}\" option ", "error": [ "SyntaxError: mismatched input '' expecting '='" ], "warning": [] }, { - "query": "from a_index | dissect stringField \"%{firstWord}\" option = ", + "query": "from a_index | dissect textField \"%{firstWord}\" option = ", "error": [ "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET}", "Invalid option for DISSECT: [option]" @@ -2670,33 +2712,33 @@ "warning": [] }, { - "query": "from a_index | dissect stringField \"%{firstWord}\" option = 1", + "query": "from a_index | dissect textField \"%{firstWord}\" option = 1", "error": [ "Invalid option for DISSECT: [option]" ], "warning": [] }, { - "query": "from a_index | dissect stringField \"%{firstWord}\" append_separator = \"-\"", + "query": "from a_index | dissect textField \"%{firstWord}\" append_separator = \"-\"", "error": [], "warning": [] }, { - "query": "from a_index | dissect stringField \"%{firstWord}\" ignore_missing = true", + "query": "from a_index | dissect textField \"%{firstWord}\" ignore_missing = true", "error": [ "Invalid option for DISSECT: [ignore_missing]" ], "warning": [] }, { - "query": "from a_index | dissect stringField \"%{firstWord}\" append_separator = true", + "query": "from a_index | dissect textField \"%{firstWord}\" append_separator = true", "error": [ "Invalid value for DISSECT append_separator: expected a string, but was [true]" ], "warning": [] }, { - "query": "from a_index | dissect stringField \"%{firstWord}\" | keep firstWord", + "query": "from a_index | dissect textField \"%{firstWord}\" | keep firstWord", "error": [], "warning": [] }, @@ -2708,48 +2750,48 @@ "warning": [] }, { - "query": "from a_index | grok stringField", + "query": "from a_index | grok textField", "error": [ "SyntaxError: missing QUOTED_STRING at ''" ], "warning": [] }, { - "query": "from a_index | grok stringField 2", + "query": "from a_index | grok textField 2", "error": [ "SyntaxError: mismatched input '2' expecting QUOTED_STRING" ], "warning": [] }, { - "query": "from a_index | grok stringField .", + "query": "from a_index | grok textField .", "error": [ "SyntaxError: mismatched input '' expecting {UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", - "Unknown column [stringField.]" + "Unknown column [textField.]" ], "warning": [] }, { - "query": "from a_index | grok stringField %a", + "query": "from a_index | grok textField %a", "error": [ "SyntaxError: mismatched input '%' expecting QUOTED_STRING" ], "warning": [] }, { - "query": "from a_index | grok stringField \"%{firstWord}\"", + "query": "from a_index | grok textField \"%{firstWord}\"", "error": [], "warning": [] }, { - "query": "from a_index | grok numberField \"%{firstWord}\"", + "query": "from a_index | grok doubleField \"%{firstWord}\"", "error": [ - "GROK only supports string type values, found [numberField] of type [number]" + "GROK only supports string type values, found [doubleField] of type [double]" ], "warning": [] }, { - "query": "from a_index | grok stringField \"%{firstWord}\" | keep firstWord", + "query": "from a_index | grok textField \"%{firstWord}\" | keep firstWord", "error": [], "warning": [] }, @@ -2851,22 +2893,22 @@ "warning": [] }, { - "query": "from a_index | where numberField > 0", + "query": "from a_index | where doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where NOT numberField > 0", + "query": "from a_index | where NOT doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where (numberField > 0)", + "query": "from a_index | where (doubleField > 0)", "error": [], "warning": [] }, { - "query": "from a_index | where (NOT (numberField > 0))", + "query": "from a_index | where (NOT (doubleField > 0))", "error": [], "warning": [] }, @@ -2876,12 +2918,12 @@ "warning": [] }, { - "query": "from a_index | where stringField > stringField", + "query": "from a_index | where textField > textField", "error": [], "warning": [] }, { - "query": "from a_index | where numberField > numberField", + "query": "from a_index | where doubleField > doubleField", "error": [], "warning": [] }, @@ -2893,8 +2935,8 @@ { "query": "from a_index | where booleanField > booleanField", "error": [ - "Argument of [>] must be [number], found value [booleanField] type [boolean]", - "Argument of [>] must be [number], found value [booleanField] type [boolean]" + "Argument of [>] must be [date], found value [booleanField] type [boolean]", + "Argument of [>] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, @@ -2904,22 +2946,22 @@ "warning": [] }, { - "query": "from a_index | where numberField >= 0", + "query": "from a_index | where doubleField >= 0", "error": [], "warning": [] }, { - "query": "from a_index | where NOT numberField >= 0", + "query": "from a_index | where NOT doubleField >= 0", "error": [], "warning": [] }, { - "query": "from a_index | where (numberField >= 0)", + "query": "from a_index | where (doubleField >= 0)", "error": [], "warning": [] }, { - "query": "from a_index | where (NOT (numberField >= 0))", + "query": "from a_index | where (NOT (doubleField >= 0))", "error": [], "warning": [] }, @@ -2929,12 +2971,12 @@ "warning": [] }, { - "query": "from a_index | where stringField >= stringField", + "query": "from a_index | where textField >= textField", "error": [], "warning": [] }, { - "query": "from a_index | where numberField >= numberField", + "query": "from a_index | where doubleField >= doubleField", "error": [], "warning": [] }, @@ -2946,8 +2988,8 @@ { "query": "from a_index | where booleanField >= booleanField", "error": [ - "Argument of [>=] must be [number], found value [booleanField] type [boolean]", - "Argument of [>=] must be [number], found value [booleanField] type [boolean]" + "Argument of [>=] must be [date], found value [booleanField] type [boolean]", + "Argument of [>=] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, @@ -2957,22 +2999,22 @@ "warning": [] }, { - "query": "from a_index | where numberField < 0", + "query": "from a_index | where doubleField < 0", "error": [], "warning": [] }, { - "query": "from a_index | where NOT numberField < 0", + "query": "from a_index | where NOT doubleField < 0", "error": [], "warning": [] }, { - "query": "from a_index | where (numberField < 0)", + "query": "from a_index | where (doubleField < 0)", "error": [], "warning": [] }, { - "query": "from a_index | where (NOT (numberField < 0))", + "query": "from a_index | where (NOT (doubleField < 0))", "error": [], "warning": [] }, @@ -2982,12 +3024,12 @@ "warning": [] }, { - "query": "from a_index | where stringField < stringField", + "query": "from a_index | where textField < textField", "error": [], "warning": [] }, { - "query": "from a_index | where numberField < numberField", + "query": "from a_index | where doubleField < doubleField", "error": [], "warning": [] }, @@ -2999,8 +3041,8 @@ { "query": "from a_index | where booleanField < booleanField", "error": [ - "Argument of [<] must be [number], found value [booleanField] type [boolean]", - "Argument of [<] must be [number], found value [booleanField] type [boolean]" + "Argument of [<] must be [date], found value [booleanField] type [boolean]", + "Argument of [<] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, @@ -3010,22 +3052,22 @@ "warning": [] }, { - "query": "from a_index | where numberField <= 0", + "query": "from a_index | where doubleField <= 0", "error": [], "warning": [] }, { - "query": "from a_index | where NOT numberField <= 0", + "query": "from a_index | where NOT doubleField <= 0", "error": [], "warning": [] }, { - "query": "from a_index | where (numberField <= 0)", + "query": "from a_index | where (doubleField <= 0)", "error": [], "warning": [] }, { - "query": "from a_index | where (NOT (numberField <= 0))", + "query": "from a_index | where (NOT (doubleField <= 0))", "error": [], "warning": [] }, @@ -3035,12 +3077,12 @@ "warning": [] }, { - "query": "from a_index | where stringField <= stringField", + "query": "from a_index | where textField <= textField", "error": [], "warning": [] }, { - "query": "from a_index | where numberField <= numberField", + "query": "from a_index | where doubleField <= doubleField", "error": [], "warning": [] }, @@ -3052,8 +3094,8 @@ { "query": "from a_index | where booleanField <= booleanField", "error": [ - "Argument of [<=] must be [number], found value [booleanField] type [boolean]", - "Argument of [<=] must be [number], found value [booleanField] type [boolean]" + "Argument of [<=] must be [date], found value [booleanField] type [boolean]", + "Argument of [<=] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, @@ -3063,22 +3105,22 @@ "warning": [] }, { - "query": "from a_index | where numberField == 0", + "query": "from a_index | where doubleField == 0", "error": [], "warning": [] }, { - "query": "from a_index | where NOT numberField == 0", + "query": "from a_index | where NOT doubleField == 0", "error": [], "warning": [] }, { - "query": "from a_index | where (numberField == 0)", + "query": "from a_index | where (doubleField == 0)", "error": [], "warning": [] }, { - "query": "from a_index | where (NOT (numberField == 0))", + "query": "from a_index | where (NOT (doubleField == 0))", "error": [], "warning": [] }, @@ -3088,12 +3130,12 @@ "warning": [] }, { - "query": "from a_index | where stringField == stringField", + "query": "from a_index | where textField == textField", "error": [], "warning": [] }, { - "query": "from a_index | where numberField == numberField", + "query": "from a_index | where doubleField == doubleField", "error": [], "warning": [] }, @@ -3113,22 +3155,22 @@ "warning": [] }, { - "query": "from a_index | where numberField != 0", + "query": "from a_index | where doubleField != 0", "error": [], "warning": [] }, { - "query": "from a_index | where NOT numberField != 0", + "query": "from a_index | where NOT doubleField != 0", "error": [], "warning": [] }, { - "query": "from a_index | where (numberField != 0)", + "query": "from a_index | where (doubleField != 0)", "error": [], "warning": [] }, { - "query": "from a_index | where (NOT (numberField != 0))", + "query": "from a_index | where (NOT (doubleField != 0))", "error": [], "warning": [] }, @@ -3138,12 +3180,12 @@ "warning": [] }, { - "query": "from a_index | where stringField != stringField", + "query": "from a_index | where textField != textField", "error": [], "warning": [] }, { - "query": "from a_index | where numberField != numberField", + "query": "from a_index | where doubleField != doubleField", "error": [], "warning": [] }, @@ -3163,82 +3205,82 @@ "warning": [] }, { - "query": "from a_index | where - numberField > 0", + "query": "from a_index | where - doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where - round(numberField) > 0", + "query": "from a_index | where - round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + - numberField > 0", + "query": "from a_index | where 1 + - doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 - numberField > 0", + "query": "from a_index | where 1 - doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where - numberField > 0", + "query": "from a_index | where - doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where - round(numberField) > 0", + "query": "from a_index | where - round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + - numberField > 0", + "query": "from a_index | where 1 + - doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 - numberField > 0", + "query": "from a_index | where 1 - doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where + numberField > 0", + "query": "from a_index | where + doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where + round(numberField) > 0", + "query": "from a_index | where + round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + + numberField > 0", + "query": "from a_index | where 1 + + doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + numberField > 0", + "query": "from a_index | where 1 + doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where + numberField > 0", + "query": "from a_index | where + doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where + round(numberField) > 0", + "query": "from a_index | where + round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + + numberField > 0", + "query": "from a_index | where 1 + + doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + numberField > 0", + "query": "from a_index | where 1 + doubleField > 0", "error": [], "warning": [] }, @@ -3248,82 +3290,82 @@ "warning": [] }, { - "query": "from a_index | where -- numberField > 0", + "query": "from a_index | where -- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where -- round(numberField) > 0", + "query": "from a_index | where -- round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + -- numberField > 0", + "query": "from a_index | where 1 + -- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 -- numberField > 0", + "query": "from a_index | where 1 -- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where -+ numberField > 0", + "query": "from a_index | where -+ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where -+ round(numberField) > 0", + "query": "from a_index | where -+ round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + -+ numberField > 0", + "query": "from a_index | where 1 + -+ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 -+ numberField > 0", + "query": "from a_index | where 1 -+ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where +- numberField > 0", + "query": "from a_index | where +- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where +- round(numberField) > 0", + "query": "from a_index | where +- round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + +- numberField > 0", + "query": "from a_index | where 1 + +- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 +- numberField > 0", + "query": "from a_index | where 1 +- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where ++ numberField > 0", + "query": "from a_index | where ++ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where ++ round(numberField) > 0", + "query": "from a_index | where ++ round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + ++ numberField > 0", + "query": "from a_index | where 1 + ++ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 ++ numberField > 0", + "query": "from a_index | where 1 ++ doubleField > 0", "error": [], "warning": [] }, @@ -3333,82 +3375,82 @@ "warning": [] }, { - "query": "from a_index | where --- numberField > 0", + "query": "from a_index | where --- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where --- round(numberField) > 0", + "query": "from a_index | where --- round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + --- numberField > 0", + "query": "from a_index | where 1 + --- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 --- numberField > 0", + "query": "from a_index | where 1 --- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where -+- numberField > 0", + "query": "from a_index | where -+- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where -+- round(numberField) > 0", + "query": "from a_index | where -+- round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + -+- numberField > 0", + "query": "from a_index | where 1 + -+- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 -+- numberField > 0", + "query": "from a_index | where 1 -+- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where +-+ numberField > 0", + "query": "from a_index | where +-+ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where +-+ round(numberField) > 0", + "query": "from a_index | where +-+ round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + +-+ numberField > 0", + "query": "from a_index | where 1 + +-+ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 +-+ numberField > 0", + "query": "from a_index | where 1 +-+ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where +++ numberField > 0", + "query": "from a_index | where +++ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where +++ round(numberField) > 0", + "query": "from a_index | where +++ round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + +++ numberField > 0", + "query": "from a_index | where 1 + +++ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 +++ numberField > 0", + "query": "from a_index | where 1 +++ doubleField > 0", "error": [], "warning": [] }, @@ -3418,82 +3460,82 @@ "warning": [] }, { - "query": "from a_index | where ---- numberField > 0", + "query": "from a_index | where ---- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where ---- round(numberField) > 0", + "query": "from a_index | where ---- round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + ---- numberField > 0", + "query": "from a_index | where 1 + ---- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 ---- numberField > 0", + "query": "from a_index | where 1 ---- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where -+-+ numberField > 0", + "query": "from a_index | where -+-+ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where -+-+ round(numberField) > 0", + "query": "from a_index | where -+-+ round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + -+-+ numberField > 0", + "query": "from a_index | where 1 + -+-+ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 -+-+ numberField > 0", + "query": "from a_index | where 1 -+-+ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where +-+- numberField > 0", + "query": "from a_index | where +-+- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where +-+- round(numberField) > 0", + "query": "from a_index | where +-+- round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + +-+- numberField > 0", + "query": "from a_index | where 1 + +-+- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 +-+- numberField > 0", + "query": "from a_index | where 1 +-+- doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where ++++ numberField > 0", + "query": "from a_index | where ++++ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where ++++ round(numberField) > 0", + "query": "from a_index | where ++++ round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + ++++ numberField > 0", + "query": "from a_index | where 1 + ++++ doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where 1 ++++ numberField > 0", + "query": "from a_index | where 1 ++++ doubleField > 0", "error": [], "warning": [] }, @@ -3503,166 +3545,166 @@ "warning": [] }, { - "query": "from a_index | where *+ numberField", + "query": "from a_index | where *+ doubleField", "error": [ "SyntaxError: extraneous input '*' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { - "query": "from a_index | where /+ numberField", + "query": "from a_index | where /+ doubleField", "error": [ "SyntaxError: extraneous input '/' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { - "query": "from a_index | where %+ numberField", + "query": "from a_index | where %+ doubleField", "error": [ "SyntaxError: extraneous input '%' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { - "query": "from a_index | where numberField =~ 0", + "query": "from a_index | where doubleField =~ 0", "error": [ - "Argument of [=~] must be [string], found value [numberField] type [number]", - "Argument of [=~] must be [string], found value [0] type [number]" + "Argument of [=~] must be [text], found value [doubleField] type [double]", + "Argument of [=~] must be [text], found value [0] type [number]" ], "warning": [] }, { - "query": "from a_index | where NOT numberField =~ 0", + "query": "from a_index | where NOT doubleField =~ 0", "error": [ - "Argument of [=~] must be [string], found value [numberField] type [number]", - "Argument of [=~] must be [string], found value [0] type [number]" + "Argument of [=~] must be [text], found value [doubleField] type [double]", + "Argument of [=~] must be [text], found value [0] type [number]" ], "warning": [] }, { - "query": "from a_index | where (numberField =~ 0)", + "query": "from a_index | where (doubleField =~ 0)", "error": [ - "Argument of [=~] must be [string], found value [numberField] type [number]", - "Argument of [=~] must be [string], found value [0] type [number]" + "Argument of [=~] must be [text], found value [doubleField] type [double]", + "Argument of [=~] must be [text], found value [0] type [number]" ], "warning": [] }, { - "query": "from a_index | where (NOT (numberField =~ 0))", + "query": "from a_index | where (NOT (doubleField =~ 0))", "error": [ - "Argument of [=~] must be [string], found value [numberField] type [number]", - "Argument of [=~] must be [string], found value [0] type [number]" + "Argument of [=~] must be [text], found value [doubleField] type [double]", + "Argument of [=~] must be [text], found value [0] type [number]" ], "warning": [] }, { "query": "from a_index | where 1 =~ 0", "error": [ - "Argument of [=~] must be [string], found value [1] type [number]", - "Argument of [=~] must be [string], found value [0] type [number]" + "Argument of [=~] must be [text], found value [1] type [number]", + "Argument of [=~] must be [text], found value [0] type [number]" ], "warning": [] }, { - "query": "from a_index | eval stringField =~ 0", + "query": "from a_index | eval textField =~ 0", "error": [ - "Argument of [=~] must be [string], found value [0] type [number]" + "Argument of [=~] must be [text], found value [0] type [number]" ], "warning": [] }, { - "query": "from a_index | where stringField like \"?a\"", + "query": "from a_index | where textField like \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | where stringField NOT like \"?a\"", + "query": "from a_index | where textField NOT like \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | where NOT stringField like \"?a\"", + "query": "from a_index | where NOT textField like \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | where NOT stringField NOT like \"?a\"", + "query": "from a_index | where NOT textField NOT like \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | where numberField like \"?a\"", + "query": "from a_index | where doubleField like \"?a\"", "error": [ - "Argument of [like] must be [string], found value [numberField] type [number]" + "Argument of [like] must be [text], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | where numberField NOT like \"?a\"", + "query": "from a_index | where doubleField NOT like \"?a\"", "error": [ - "Argument of [not_like] must be [string], found value [numberField] type [number]" + "Argument of [not_like] must be [text], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | where NOT numberField like \"?a\"", + "query": "from a_index | where NOT doubleField like \"?a\"", "error": [ - "Argument of [like] must be [string], found value [numberField] type [number]" + "Argument of [like] must be [text], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | where NOT numberField NOT like \"?a\"", + "query": "from a_index | where NOT doubleField NOT like \"?a\"", "error": [ - "Argument of [not_like] must be [string], found value [numberField] type [number]" + "Argument of [not_like] must be [text], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | where stringField rlike \"?a\"", + "query": "from a_index | where textField rlike \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | where stringField NOT rlike \"?a\"", + "query": "from a_index | where textField NOT rlike \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | where NOT stringField rlike \"?a\"", + "query": "from a_index | where NOT textField rlike \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | where NOT stringField NOT rlike \"?a\"", + "query": "from a_index | where NOT textField NOT rlike \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | where numberField rlike \"?a\"", + "query": "from a_index | where doubleField rlike \"?a\"", "error": [ - "Argument of [rlike] must be [string], found value [numberField] type [number]" + "Argument of [rlike] must be [text], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | where numberField NOT rlike \"?a\"", + "query": "from a_index | where doubleField NOT rlike \"?a\"", "error": [ - "Argument of [not_rlike] must be [string], found value [numberField] type [number]" + "Argument of [not_rlike] must be [text], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | where NOT numberField rlike \"?a\"", + "query": "from a_index | where NOT doubleField rlike \"?a\"", "error": [ - "Argument of [rlike] must be [string], found value [numberField] type [number]" + "Argument of [rlike] must be [text], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | where NOT numberField NOT rlike \"?a\"", + "query": "from a_index | where NOT doubleField NOT rlike \"?a\"", "error": [ - "Argument of [not_rlike] must be [string], found value [numberField] type [number]" + "Argument of [not_rlike] must be [text], found value [doubleField] type [double]" ], "warning": [] }, @@ -3679,22936 +3721,31688 @@ "warning": [] }, { - "query": "from a_index | where numberField IS NULL", + "query": "from a_index | where doubleField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where numberField IS null", + "query": "from a_index | where doubleField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where numberField is null", + "query": "from a_index | where doubleField is null", "error": [], "warning": [] }, { - "query": "from a_index | where numberField is NULL", + "query": "from a_index | where doubleField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where numberField IS NOT NULL", + "query": "from a_index | where doubleField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where numberField IS NOT null", + "query": "from a_index | where doubleField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where numberField IS not NULL", + "query": "from a_index | where doubleField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where numberField Is nOt NuLL", + "query": "from a_index | where doubleField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | where dateField IS NULL", + "query": "from a_index | where unsignedLongField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where dateField IS null", + "query": "from a_index | where unsignedLongField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where dateField is null", + "query": "from a_index | where unsignedLongField is null", "error": [], "warning": [] }, { - "query": "from a_index | where dateField is NULL", + "query": "from a_index | where unsignedLongField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where dateField IS NOT NULL", + "query": "from a_index | where unsignedLongField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where dateField IS NOT null", + "query": "from a_index | where unsignedLongField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where dateField IS not NULL", + "query": "from a_index | where unsignedLongField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where dateField Is nOt NuLL", + "query": "from a_index | where unsignedLongField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | where stringField IS NULL", + "query": "from a_index | where longField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where stringField IS null", + "query": "from a_index | where longField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where stringField is null", + "query": "from a_index | where longField is null", "error": [], "warning": [] }, { - "query": "from a_index | where stringField is NULL", + "query": "from a_index | where longField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where stringField IS NOT NULL", + "query": "from a_index | where longField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where stringField IS NOT null", + "query": "from a_index | where longField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where stringField IS not NULL", + "query": "from a_index | where longField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where stringField Is nOt NuLL", + "query": "from a_index | where longField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField IS NULL", + "query": "from a_index | where integerField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField IS null", + "query": "from a_index | where integerField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField is null", + "query": "from a_index | where integerField is null", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField is NULL", + "query": "from a_index | where integerField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField IS NOT NULL", + "query": "from a_index | where integerField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField IS NOT null", + "query": "from a_index | where integerField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField IS not NULL", + "query": "from a_index | where integerField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField Is nOt NuLL", + "query": "from a_index | where integerField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | where ipField IS NULL", + "query": "from a_index | where counterIntegerField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where ipField IS null", + "query": "from a_index | where counterIntegerField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where ipField is null", + "query": "from a_index | where counterIntegerField is null", "error": [], "warning": [] }, { - "query": "from a_index | where ipField is NULL", + "query": "from a_index | where counterIntegerField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where ipField IS NOT NULL", + "query": "from a_index | where counterIntegerField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where ipField IS NOT null", + "query": "from a_index | where counterIntegerField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where ipField IS not NULL", + "query": "from a_index | where counterIntegerField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where ipField Is nOt NuLL", + "query": "from a_index | where counterIntegerField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianPointField IS NULL", + "query": "from a_index | where counterLongField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianPointField IS null", + "query": "from a_index | where counterLongField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianPointField is null", + "query": "from a_index | where counterLongField is null", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianPointField is NULL", + "query": "from a_index | where counterLongField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianPointField IS NOT NULL", + "query": "from a_index | where counterLongField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianPointField IS NOT null", + "query": "from a_index | where counterLongField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianPointField IS not NULL", + "query": "from a_index | where counterLongField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianPointField Is nOt NuLL", + "query": "from a_index | where counterLongField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianShapeField IS NULL", + "query": "from a_index | where counterDoubleField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianShapeField IS null", + "query": "from a_index | where counterDoubleField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianShapeField is null", + "query": "from a_index | where counterDoubleField is null", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianShapeField is NULL", + "query": "from a_index | where counterDoubleField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianShapeField IS NOT NULL", + "query": "from a_index | where counterDoubleField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianShapeField IS NOT null", + "query": "from a_index | where counterDoubleField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianShapeField IS not NULL", + "query": "from a_index | where counterDoubleField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianShapeField Is nOt NuLL", + "query": "from a_index | where counterDoubleField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | where geoPointField IS NULL", + "query": "from a_index | where dateField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where geoPointField IS null", + "query": "from a_index | where dateField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where geoPointField is null", + "query": "from a_index | where dateField is null", "error": [], "warning": [] }, { - "query": "from a_index | where geoPointField is NULL", + "query": "from a_index | where dateField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where geoPointField IS NOT NULL", + "query": "from a_index | where dateField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where geoPointField IS NOT null", + "query": "from a_index | where dateField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where geoPointField IS not NULL", + "query": "from a_index | where dateField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where geoPointField Is nOt NuLL", + "query": "from a_index | where dateField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | where geoShapeField IS NULL", + "query": "from a_index | where datePeriodField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where geoShapeField IS null", + "query": "from a_index | where datePeriodField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where geoShapeField is null", + "query": "from a_index | where datePeriodField is null", "error": [], "warning": [] }, { - "query": "from a_index | where geoShapeField is NULL", + "query": "from a_index | where datePeriodField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where geoShapeField IS NOT NULL", + "query": "from a_index | where datePeriodField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where geoShapeField IS NOT null", + "query": "from a_index | where datePeriodField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where geoShapeField IS not NULL", + "query": "from a_index | where datePeriodField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where geoShapeField Is nOt NuLL", + "query": "from a_index | where datePeriodField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | where versionField IS NULL", + "query": "from a_index | where textField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where versionField IS null", + "query": "from a_index | where textField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where versionField is null", + "query": "from a_index | where textField is null", "error": [], "warning": [] }, { - "query": "from a_index | where versionField is NULL", + "query": "from a_index | where textField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where versionField IS NOT NULL", + "query": "from a_index | where textField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where versionField IS NOT null", + "query": "from a_index | where textField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where versionField IS not NULL", + "query": "from a_index | where textField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where versionField Is nOt NuLL", + "query": "from a_index | where textField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | where stringField == \"a\" or null", + "query": "from a_index | where keywordField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval ", - "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" - ], - "warning": [] - }, - { - "query": "from a_index | eval stringField ", + "query": "from a_index | where keywordField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval b = stringField", + "query": "from a_index | where keywordField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField + 1", + "query": "from a_index | where keywordField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField + ", - "error": [ - "SyntaxError: no viable alternative at input 'numberField + '" - ], + "query": "from a_index | where keywordField IS NOT NULL", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField + 1", - "error": [ - "Argument of [+] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | where keywordField IS NOT null", + "error": [], "warning": [] }, { - "query": "from a_index | eval a=b", - "error": [ - "Unknown column [b]" - ], + "query": "from a_index | where keywordField IS not NULL", + "error": [], "warning": [] }, { - "query": "from a_index | eval a=b, ", - "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", - "Unknown column [b]" - ], + "query": "from a_index | where keywordField Is nOt NuLL", + "error": [], "warning": [] }, { - "query": "from a_index | eval a=round", - "error": [ - "Unknown column [round]" - ], + "query": "from a_index | where booleanField IS NULL", + "error": [], "warning": [] }, { - "query": "from a_index | eval a=round(", - "error": [ - "SyntaxError: no viable alternative at input 'round('" - ], + "query": "from a_index | where booleanField IS null", + "error": [], "warning": [] }, { - "query": "from a_index | eval a=round(numberField) ", + "query": "from a_index | where booleanField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=round(numberField), ", - "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" - ], + "query": "from a_index | where booleanField is NULL", + "error": [], "warning": [] }, { - "query": "from a_index | eval a=round(numberField) + round(numberField) ", + "query": "from a_index | where booleanField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=round(numberField) + round(stringField) ", - "error": [ - "Argument of [round] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | where booleanField IS NOT null", + "error": [], "warning": [] }, { - "query": "from a_index | eval a=round(numberField) + round(stringField), numberField ", - "error": [ - "Argument of [round] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | where booleanField IS not NULL", + "error": [], "warning": [] }, { - "query": "from a_index | eval a=round(numberField) + round(numberField), numberField ", + "query": "from a_index | where booleanField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=round(numberField) + round(numberField), b = numberField ", + "query": "from a_index | where ipField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=[1, 2, 3]", + "query": "from a_index | where ipField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=[true, false]", + "query": "from a_index | where ipField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=[\"a\", \"b\"]", + "query": "from a_index | where ipField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=null", + "query": "from a_index | where ipField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField IS NULL", + "query": "from a_index | where ipField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField IS null", + "query": "from a_index | where ipField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField is null", + "query": "from a_index | where ipField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField is NULL", + "query": "from a_index | where cartesianPointField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField IS NOT NULL", + "query": "from a_index | where cartesianPointField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField IS NOT null", + "query": "from a_index | where cartesianPointField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField IS not NULL", + "query": "from a_index | where cartesianPointField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField IS NULL", + "query": "from a_index | where cartesianPointField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField IS null", + "query": "from a_index | where cartesianPointField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField is null", + "query": "from a_index | where cartesianPointField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField is NULL", + "query": "from a_index | where cartesianPointField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField IS NOT NULL", + "query": "from a_index | where cartesianShapeField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField IS NOT null", + "query": "from a_index | where cartesianShapeField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField IS not NULL", + "query": "from a_index | where cartesianShapeField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField IS NULL", + "query": "from a_index | where cartesianShapeField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField IS null", + "query": "from a_index | where cartesianShapeField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField is null", + "query": "from a_index | where cartesianShapeField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField is NULL", + "query": "from a_index | where cartesianShapeField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField IS NOT NULL", + "query": "from a_index | where cartesianShapeField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField IS NOT null", + "query": "from a_index | where geoPointField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField IS not NULL", + "query": "from a_index | where geoPointField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField IS NULL", + "query": "from a_index | where geoPointField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField IS null", + "query": "from a_index | where geoPointField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField is null", + "query": "from a_index | where geoPointField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField is NULL", + "query": "from a_index | where geoPointField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField IS NOT NULL", + "query": "from a_index | where geoPointField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField IS NOT null", + "query": "from a_index | where geoPointField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField IS not NULL", + "query": "from a_index | where geoShapeField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField IS NULL", + "query": "from a_index | where geoShapeField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField IS null", + "query": "from a_index | where geoShapeField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField is null", + "query": "from a_index | where geoShapeField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField is NULL", + "query": "from a_index | where geoShapeField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField IS NOT NULL", + "query": "from a_index | where geoShapeField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField IS NOT null", + "query": "from a_index | where geoShapeField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField IS not NULL", + "query": "from a_index | where geoShapeField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianPointField IS NULL", + "query": "from a_index | where versionField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianPointField IS null", + "query": "from a_index | where versionField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianPointField is null", + "query": "from a_index | where versionField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianPointField is NULL", + "query": "from a_index | where versionField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianPointField IS NOT NULL", + "query": "from a_index | where versionField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianPointField IS NOT null", + "query": "from a_index | where versionField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianPointField IS not NULL", + "query": "from a_index | where versionField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianShapeField IS NULL", + "query": "from a_index | where versionField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianShapeField IS null", + "query": "from a_index | where textField == \"a\" or null", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianShapeField is null", - "error": [], + "query": "from a_index | eval ", + "error": [ + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + ], "warning": [] }, { - "query": "from a_index | eval cartesianShapeField is NULL", + "query": "from a_index | eval textField ", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianShapeField IS NOT NULL", + "query": "from a_index | eval b = textField", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianShapeField IS NOT null", + "query": "from a_index | eval doubleField + 1", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianShapeField IS not NULL", - "error": [], + "query": "from a_index | eval doubleField + ", + "error": [ + "SyntaxError: no viable alternative at input 'doubleField + '" + ], "warning": [] }, { - "query": "from a_index | eval geoPointField IS NULL", - "error": [], + "query": "from a_index | eval textField + 1", + "error": [ + "Argument of [+] must be [double], found value [textField] type [text]" + ], "warning": [] }, { - "query": "from a_index | eval geoPointField IS null", - "error": [], + "query": "from a_index | eval a=b", + "error": [ + "Unknown column [b]" + ], "warning": [] }, { - "query": "from a_index | eval geoPointField is null", - "error": [], + "query": "from a_index | eval a=b, ", + "error": [ + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + "Unknown column [b]" + ], "warning": [] }, { - "query": "from a_index | eval geoPointField is NULL", - "error": [], + "query": "from a_index | eval a=round", + "error": [ + "Unknown column [round]" + ], "warning": [] }, { - "query": "from a_index | eval geoPointField IS NOT NULL", - "error": [], + "query": "from a_index | eval a=round(", + "error": [ + "SyntaxError: no viable alternative at input 'round('" + ], "warning": [] }, { - "query": "from a_index | eval geoPointField IS NOT null", + "query": "from a_index | eval a=round(doubleField) ", "error": [], "warning": [] }, { - "query": "from a_index | eval geoPointField IS not NULL", - "error": [], + "query": "from a_index | eval a=round(doubleField), ", + "error": [ + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + ], "warning": [] }, { - "query": "from a_index | eval geoShapeField IS NULL", + "query": "from a_index | eval a=round(doubleField) + round(doubleField) ", "error": [], "warning": [] }, { - "query": "from a_index | eval geoShapeField IS null", - "error": [], + "query": "from a_index | eval a=round(doubleField) + round(textField) ", + "error": [ + "Argument of [round] must be [double], found value [textField] type [text]" + ], "warning": [] }, { - "query": "from a_index | eval geoShapeField is null", - "error": [], + "query": "from a_index | eval a=round(doubleField) + round(textField), doubleField ", + "error": [ + "Argument of [round] must be [double], found value [textField] type [text]" + ], "warning": [] }, { - "query": "from a_index | eval geoShapeField is NULL", + "query": "from a_index | eval a=round(doubleField) + round(doubleField), doubleField ", "error": [], "warning": [] }, { - "query": "from a_index | eval geoShapeField IS NOT NULL", + "query": "from a_index | eval a=round(doubleField) + round(doubleField), b = doubleField ", "error": [], "warning": [] }, { - "query": "from a_index | eval geoShapeField IS NOT null", + "query": "from a_index | eval a=[1, 2, 3]", "error": [], "warning": [] }, { - "query": "from a_index | eval geoShapeField IS not NULL", + "query": "from a_index | eval a=[true, false]", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField IS NULL", + "query": "from a_index | eval a=[\"a\", \"b\"]", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField IS null", + "query": "from a_index | eval a=null", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField is null", + "query": "from a_index | eval doubleField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField is NULL", + "query": "from a_index | eval doubleField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField IS NOT NULL", + "query": "from a_index | eval doubleField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField IS NOT null", + "query": "from a_index | eval doubleField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField IS not NULL", + "query": "from a_index | eval doubleField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval - numberField", + "query": "from a_index | eval doubleField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=- numberField", + "query": "from a_index | eval doubleField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=- round(numberField)", + "query": "from a_index | eval unsignedLongField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + - numberField", + "query": "from a_index | eval unsignedLongField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 - numberField", + "query": "from a_index | eval unsignedLongField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval - numberField", + "query": "from a_index | eval unsignedLongField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=- numberField", + "query": "from a_index | eval unsignedLongField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=- round(numberField)", + "query": "from a_index | eval unsignedLongField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + - numberField", + "query": "from a_index | eval unsignedLongField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 - numberField", + "query": "from a_index | eval longField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval + numberField", + "query": "from a_index | eval longField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+ numberField", + "query": "from a_index | eval longField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+ round(numberField)", + "query": "from a_index | eval longField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + + numberField", + "query": "from a_index | eval longField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + numberField", + "query": "from a_index | eval longField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval + numberField", + "query": "from a_index | eval longField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+ numberField", + "query": "from a_index | eval integerField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+ round(numberField)", + "query": "from a_index | eval integerField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + + numberField", + "query": "from a_index | eval integerField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + numberField", + "query": "from a_index | eval integerField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval not booleanField", + "query": "from a_index | eval integerField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval -- numberField", + "query": "from a_index | eval integerField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=-- numberField", + "query": "from a_index | eval integerField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=-- round(numberField)", + "query": "from a_index | eval counterIntegerField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + -- numberField", + "query": "from a_index | eval counterIntegerField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 -- numberField", + "query": "from a_index | eval counterIntegerField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval -+ numberField", + "query": "from a_index | eval counterIntegerField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=-+ numberField", + "query": "from a_index | eval counterIntegerField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=-+ round(numberField)", + "query": "from a_index | eval counterIntegerField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + -+ numberField", + "query": "from a_index | eval counterIntegerField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 -+ numberField", + "query": "from a_index | eval counterLongField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval +- numberField", + "query": "from a_index | eval counterLongField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+- numberField", + "query": "from a_index | eval counterLongField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+- round(numberField)", + "query": "from a_index | eval counterLongField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + +- numberField", + "query": "from a_index | eval counterLongField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 +- numberField", + "query": "from a_index | eval counterLongField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval ++ numberField", + "query": "from a_index | eval counterLongField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=++ numberField", + "query": "from a_index | eval counterDoubleField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=++ round(numberField)", + "query": "from a_index | eval counterDoubleField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + ++ numberField", + "query": "from a_index | eval counterDoubleField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 ++ numberField", + "query": "from a_index | eval counterDoubleField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval not not booleanField", + "query": "from a_index | eval counterDoubleField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval --- numberField", + "query": "from a_index | eval counterDoubleField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=--- numberField", + "query": "from a_index | eval counterDoubleField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=--- round(numberField)", + "query": "from a_index | eval dateField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + --- numberField", + "query": "from a_index | eval dateField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 --- numberField", + "query": "from a_index | eval dateField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval -+- numberField", + "query": "from a_index | eval dateField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=-+- numberField", + "query": "from a_index | eval dateField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=-+- round(numberField)", + "query": "from a_index | eval dateField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + -+- numberField", + "query": "from a_index | eval dateField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 -+- numberField", + "query": "from a_index | eval datePeriodField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval +-+ numberField", + "query": "from a_index | eval datePeriodField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+-+ numberField", + "query": "from a_index | eval datePeriodField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+-+ round(numberField)", + "query": "from a_index | eval datePeriodField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + +-+ numberField", + "query": "from a_index | eval datePeriodField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 +-+ numberField", + "query": "from a_index | eval datePeriodField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval +++ numberField", + "query": "from a_index | eval datePeriodField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+++ numberField", + "query": "from a_index | eval textField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+++ round(numberField)", + "query": "from a_index | eval textField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + +++ numberField", + "query": "from a_index | eval textField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 +++ numberField", + "query": "from a_index | eval textField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval not not not booleanField", + "query": "from a_index | eval textField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval ---- numberField", + "query": "from a_index | eval textField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=---- numberField", + "query": "from a_index | eval textField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=---- round(numberField)", + "query": "from a_index | eval keywordField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + ---- numberField", + "query": "from a_index | eval keywordField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 ---- numberField", + "query": "from a_index | eval keywordField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval -+-+ numberField", + "query": "from a_index | eval keywordField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=-+-+ numberField", + "query": "from a_index | eval keywordField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=-+-+ round(numberField)", + "query": "from a_index | eval keywordField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + -+-+ numberField", + "query": "from a_index | eval keywordField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 -+-+ numberField", + "query": "from a_index | eval booleanField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval +-+- numberField", + "query": "from a_index | eval booleanField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+-+- numberField", + "query": "from a_index | eval booleanField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+-+- round(numberField)", + "query": "from a_index | eval booleanField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + +-+- numberField", + "query": "from a_index | eval booleanField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 +-+- numberField", + "query": "from a_index | eval booleanField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval ++++ numberField", + "query": "from a_index | eval booleanField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=++++ numberField", + "query": "from a_index | eval ipField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval a=++++ round(numberField)", + "query": "from a_index | eval ipField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + ++++ numberField", + "query": "from a_index | eval ipField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 ++++ numberField", + "query": "from a_index | eval ipField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval not not not not booleanField", + "query": "from a_index | eval ipField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval *+ numberField", - "error": [ - "SyntaxError: extraneous input '*' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" - ], + "query": "from a_index | eval ipField IS NOT null", + "error": [], "warning": [] }, { - "query": "from a_index | eval /+ numberField", - "error": [ - "SyntaxError: extraneous input '/' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" - ], + "query": "from a_index | eval ipField IS not NULL", + "error": [], "warning": [] }, { - "query": "from a_index | eval %+ numberField", - "error": [ - "SyntaxError: extraneous input '%' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" - ], + "query": "from a_index | eval cartesianPointField IS NULL", + "error": [], "warning": [] }, { - "query": "from a_index | eval log10(-1)", + "query": "from a_index | eval cartesianPointField IS null", "error": [], - "warning": [ - "Log of a negative number results in null: -1" - ] + "warning": [] }, { - "query": "from a_index | eval log(-1)", + "query": "from a_index | eval cartesianPointField is null", "error": [], - "warning": [ - "Log of a negative number results in null: -1" - ] + "warning": [] }, { - "query": "from a_index | eval log(-1, 20)", + "query": "from a_index | eval cartesianPointField is NULL", "error": [], - "warning": [ - "Log of a negative number results in null: -1" - ] + "warning": [] }, { - "query": "from a_index | eval log(-1, -20)", + "query": "from a_index | eval cartesianPointField IS NOT NULL", "error": [], - "warning": [ - "Log of a negative number results in null: -1", - "Log of a negative number results in null: -20" - ] + "warning": [] }, { - "query": "from a_index | eval var0 = log(-1, -20)", + "query": "from a_index | eval cartesianPointField IS NOT null", "error": [], - "warning": [ - "Log of a negative number results in null: -1", - "Log of a negative number results in null: -20" - ] + "warning": [] }, { - "query": "from a_index | eval numberField > 0", + "query": "from a_index | eval cartesianPointField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval NOT numberField > 0", + "query": "from a_index | eval cartesianShapeField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField > 0)", + "query": "from a_index | eval cartesianShapeField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval (NOT (numberField > 0))", + "query": "from a_index | eval cartesianShapeField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 > 0", + "query": "from a_index | eval cartesianShapeField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField > stringField", + "query": "from a_index | eval cartesianShapeField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField > numberField", + "query": "from a_index | eval cartesianShapeField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField > dateField", + "query": "from a_index | eval cartesianShapeField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField > booleanField", - "error": [ - "Argument of [>] must be [number], found value [booleanField] type [boolean]", - "Argument of [>] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval geoPointField IS NULL", + "error": [], "warning": [] }, { - "query": "from a_index | eval ipField > ipField", + "query": "from a_index | eval geoPointField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField > stringField", - "error": [ - "Argument of [>] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval geoPointField is null", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField > numberField", - "error": [ - "Argument of [>] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval geoPointField is NULL", + "error": [], "warning": [] }, { - "query": "from a_index | eval numberField > \"2022\"", - "error": [ - "Argument of [>] must be [number], found value [\"2022\"] type [string]" - ], + "query": "from a_index | eval geoPointField IS NOT NULL", + "error": [], "warning": [] }, { - "query": "from a_index | eval dateField > stringField", - "error": [ - "Argument of [>] must be [string], found value [dateField] type [date]" - ], + "query": "from a_index | eval geoPointField IS NOT null", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField > dateField", - "error": [ - "Argument of [>] must be [string], found value [dateField] type [date]" - ], + "query": "from a_index | eval geoPointField IS not NULL", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField > 0", - "error": [ - "Argument of [>] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval geoShapeField IS NULL", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField > now()", - "error": [ - "Argument of [>] must be [string], found value [now()] type [date]" - ], + "query": "from a_index | eval geoShapeField IS null", + "error": [], "warning": [] }, { - "query": "from a_index | eval dateField > \"2022\"", + "query": "from a_index | eval geoShapeField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval \"2022\" > dateField", + "query": "from a_index | eval geoShapeField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField > \"1.2.3\"", + "query": "from a_index | eval geoShapeField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval \"1.2.3\" > versionField", + "query": "from a_index | eval geoShapeField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField > \"true\"", - "error": [ - "Argument of [>] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval geoShapeField IS not NULL", + "error": [], "warning": [] }, { - "query": "from a_index | eval \"true\" > booleanField", - "error": [ - "Argument of [>] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval versionField IS NULL", + "error": [], "warning": [] }, { - "query": "from a_index | eval ipField > \"136.36.3.205\"", + "query": "from a_index | eval versionField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval \"136.36.3.205\" > ipField", + "query": "from a_index | eval versionField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField >= 0", + "query": "from a_index | eval versionField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval NOT numberField >= 0", + "query": "from a_index | eval versionField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField >= 0)", + "query": "from a_index | eval versionField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval (NOT (numberField >= 0))", + "query": "from a_index | eval versionField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 >= 0", + "query": "from a_index | eval - doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField >= stringField", + "query": "from a_index | eval a=- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField >= numberField", + "query": "from a_index | eval a=- round(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField >= dateField", + "query": "from a_index | eval 1 + - doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField >= booleanField", - "error": [ - "Argument of [>=] must be [number], found value [booleanField] type [boolean]", - "Argument of [>=] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval 1 - doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval ipField >= ipField", + "query": "from a_index | eval - doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField >= stringField", - "error": [ - "Argument of [>=] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval a=- doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField >= numberField", - "error": [ - "Argument of [>=] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval a=- round(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval numberField >= \"2022\"", - "error": [ - "Argument of [>=] must be [number], found value [\"2022\"] type [string]" - ], + "query": "from a_index | eval 1 + - doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval dateField >= stringField", - "error": [ - "Argument of [>=] must be [string], found value [dateField] type [date]" - ], + "query": "from a_index | eval 1 - doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField >= dateField", - "error": [ - "Argument of [>=] must be [string], found value [dateField] type [date]" - ], + "query": "from a_index | eval + doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField >= 0", - "error": [ - "Argument of [>=] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval a=+ doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField >= now()", - "error": [ - "Argument of [>=] must be [string], found value [now()] type [date]" - ], + "query": "from a_index | eval a=+ round(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval dateField >= \"2022\"", + "query": "from a_index | eval 1 + + doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval \"2022\" >= dateField", + "query": "from a_index | eval 1 + doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField >= \"1.2.3\"", + "query": "from a_index | eval + doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval \"1.2.3\" >= versionField", + "query": "from a_index | eval a=+ doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField >= \"true\"", - "error": [ - "Argument of [>=] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval a=+ round(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval \"true\" >= booleanField", - "error": [ - "Argument of [>=] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval 1 + + doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval ipField >= \"136.36.3.205\"", + "query": "from a_index | eval 1 + doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval \"136.36.3.205\" >= ipField", + "query": "from a_index | eval not booleanField", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField < 0", + "query": "from a_index | eval -- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval NOT numberField < 0", + "query": "from a_index | eval a=-- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField < 0)", + "query": "from a_index | eval a=-- round(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval (NOT (numberField < 0))", + "query": "from a_index | eval 1 + -- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 < 0", + "query": "from a_index | eval 1 -- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField < stringField", + "query": "from a_index | eval -+ doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField < numberField", + "query": "from a_index | eval a=-+ doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField < dateField", + "query": "from a_index | eval a=-+ round(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField < booleanField", - "error": [ - "Argument of [<] must be [number], found value [booleanField] type [boolean]", - "Argument of [<] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval 1 + -+ doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval ipField < ipField", + "query": "from a_index | eval 1 -+ doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField < stringField", - "error": [ - "Argument of [<] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval +- doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField < numberField", - "error": [ - "Argument of [<] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval a=+- doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval numberField < \"2022\"", - "error": [ - "Argument of [<] must be [number], found value [\"2022\"] type [string]" - ], + "query": "from a_index | eval a=+- round(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval dateField < stringField", - "error": [ - "Argument of [<] must be [string], found value [dateField] type [date]" - ], + "query": "from a_index | eval 1 + +- doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField < dateField", - "error": [ - "Argument of [<] must be [string], found value [dateField] type [date]" - ], + "query": "from a_index | eval 1 +- doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField < 0", - "error": [ - "Argument of [<] must be [number], found value [stringField] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | eval stringField < now()", - "error": [ - "Argument of [<] must be [string], found value [now()] type [date]" - ], + "query": "from a_index | eval ++ doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval dateField < \"2022\"", + "query": "from a_index | eval a=++ doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval \"2022\" < dateField", + "query": "from a_index | eval a=++ round(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField < \"1.2.3\"", + "query": "from a_index | eval 1 + ++ doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval \"1.2.3\" < versionField", + "query": "from a_index | eval 1 ++ doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField < \"true\"", - "error": [ - "Argument of [<] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval not not booleanField", + "error": [], "warning": [] }, { - "query": "from a_index | eval \"true\" < booleanField", - "error": [ - "Argument of [<] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval --- doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval ipField < \"136.36.3.205\"", + "query": "from a_index | eval a=--- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval \"136.36.3.205\" < ipField", + "query": "from a_index | eval a=--- round(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField <= 0", + "query": "from a_index | eval 1 + --- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval NOT numberField <= 0", + "query": "from a_index | eval 1 --- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField <= 0)", + "query": "from a_index | eval -+- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval (NOT (numberField <= 0))", + "query": "from a_index | eval a=-+- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 <= 0", + "query": "from a_index | eval a=-+- round(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField <= stringField", + "query": "from a_index | eval 1 + -+- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField <= numberField", + "query": "from a_index | eval 1 -+- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField <= dateField", + "query": "from a_index | eval +-+ doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField <= booleanField", - "error": [ - "Argument of [<=] must be [number], found value [booleanField] type [boolean]", - "Argument of [<=] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval a=+-+ doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval ipField <= ipField", + "query": "from a_index | eval a=+-+ round(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField <= stringField", - "error": [ - "Argument of [<=] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval 1 + +-+ doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField <= numberField", - "error": [ - "Argument of [<=] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval 1 +-+ doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval numberField <= \"2022\"", - "error": [ - "Argument of [<=] must be [number], found value [\"2022\"] type [string]" - ], + "query": "from a_index | eval +++ doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval dateField <= stringField", - "error": [ - "Argument of [<=] must be [string], found value [dateField] type [date]" - ], + "query": "from a_index | eval a=+++ doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField <= dateField", - "error": [ - "Argument of [<=] must be [string], found value [dateField] type [date]" - ], + "query": "from a_index | eval a=+++ round(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField <= 0", - "error": [ - "Argument of [<=] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval 1 + +++ doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField <= now()", - "error": [ - "Argument of [<=] must be [string], found value [now()] type [date]" - ], + "query": "from a_index | eval 1 +++ doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval dateField <= \"2022\"", + "query": "from a_index | eval not not not booleanField", "error": [], "warning": [] }, { - "query": "from a_index | eval \"2022\" <= dateField", + "query": "from a_index | eval ---- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField <= \"1.2.3\"", + "query": "from a_index | eval a=---- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval \"1.2.3\" <= versionField", + "query": "from a_index | eval a=---- round(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField <= \"true\"", - "error": [ - "Argument of [<=] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval 1 + ---- doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval \"true\" <= booleanField", - "error": [ - "Argument of [<=] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval 1 ---- doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval ipField <= \"136.36.3.205\"", + "query": "from a_index | eval -+-+ doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval \"136.36.3.205\" <= ipField", + "query": "from a_index | eval a=-+-+ doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField == 0", + "query": "from a_index | eval a=-+-+ round(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval NOT numberField == 0", + "query": "from a_index | eval 1 + -+-+ doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField == 0)", + "query": "from a_index | eval 1 -+-+ doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval (NOT (numberField == 0))", + "query": "from a_index | eval +-+- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 == 0", + "query": "from a_index | eval a=+-+- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField == stringField", + "query": "from a_index | eval a=+-+- round(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField == numberField", + "query": "from a_index | eval 1 + +-+- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField == dateField", + "query": "from a_index | eval 1 +-+- doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField == booleanField", + "query": "from a_index | eval ++++ doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField == ipField", + "query": "from a_index | eval a=++++ doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField == stringField", - "error": [ - "Argument of [==] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval a=++++ round(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField == numberField", - "error": [ - "Argument of [==] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval 1 + ++++ doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval numberField == \"2022\"", - "error": [ - "Argument of [==] must be [number], found value [\"2022\"] type [string]" - ], + "query": "from a_index | eval 1 ++++ doubleField", + "error": [], "warning": [] }, { - "query": "from a_index | eval dateField == stringField", - "error": [ - "Argument of [==] must be [string], found value [dateField] type [date]" - ], + "query": "from a_index | eval not not not not booleanField", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField == dateField", + "query": "from a_index | eval *+ doubleField", "error": [ - "Argument of [==] must be [string], found value [dateField] type [date]" + "SyntaxError: extraneous input '*' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { - "query": "from a_index | eval stringField == 0", + "query": "from a_index | eval /+ doubleField", "error": [ - "Argument of [==] must be [number], found value [stringField] type [string]" + "SyntaxError: extraneous input '/' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { - "query": "from a_index | eval stringField == now()", + "query": "from a_index | eval %+ doubleField", "error": [ - "Argument of [==] must be [string], found value [now()] type [date]" + "SyntaxError: extraneous input '%' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { - "query": "from a_index | eval dateField == \"2022\"", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval \"2022\" == dateField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval versionField == \"1.2.3\"", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval \"1.2.3\" == versionField", + "query": "from a_index | eval log10(-1)", "error": [], - "warning": [] + "warning": [ + "Log of a negative number results in null: -1" + ] }, { - "query": "from a_index | eval booleanField == \"true\"", + "query": "from a_index | eval log(-1)", "error": [], - "warning": [] + "warning": [ + "Log of a negative number results in null: -1" + ] }, { - "query": "from a_index | eval \"true\" == booleanField", + "query": "from a_index | eval log(-1, 20)", "error": [], - "warning": [] + "warning": [ + "Log of a negative number results in null: -1" + ] }, { - "query": "from a_index | eval ipField == \"136.36.3.205\"", + "query": "from a_index | eval log(-1, -20)", "error": [], - "warning": [] + "warning": [ + "Log of a negative number results in null: -1", + "Log of a negative number results in null: -20" + ] }, { - "query": "from a_index | eval \"136.36.3.205\" == ipField", + "query": "from a_index | eval var0 = log(-1, -20)", "error": [], - "warning": [] + "warning": [ + "Log of a negative number results in null: -1", + "Log of a negative number results in null: -20" + ] }, { - "query": "from a_index | eval numberField != 0", + "query": "from a_index | eval doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval NOT numberField != 0", + "query": "from a_index | eval NOT doubleField > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField != 0)", + "query": "from a_index | eval (doubleField > 0)", "error": [], "warning": [] }, { - "query": "from a_index | eval (NOT (numberField != 0))", + "query": "from a_index | eval (NOT (doubleField > 0))", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 != 0", + "query": "from a_index | eval 1 > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField != stringField", + "query": "from a_index | eval textField > textField", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField != numberField", + "query": "from a_index | eval doubleField > doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField != dateField", + "query": "from a_index | eval dateField > dateField", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField != booleanField", - "error": [], + "query": "from a_index | eval booleanField > booleanField", + "error": [ + "Argument of [>] must be [date], found value [booleanField] type [boolean]", + "Argument of [>] must be [date], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval ipField != ipField", + "query": "from a_index | eval ipField > ipField", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField != stringField", + "query": "from a_index | eval doubleField > textField", "error": [ - "Argument of [!=] must be [number], found value [stringField] type [string]" + "Argument of [>] must be [double], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval stringField != numberField", + "query": "from a_index | eval keywordField > doubleField", "error": [ - "Argument of [!=] must be [number], found value [stringField] type [string]" + "Argument of [>] must be [double], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval numberField != \"2022\"", + "query": "from a_index | eval doubleField > \"2022\"", "error": [ - "Argument of [!=] must be [number], found value [\"2022\"] type [string]" + "Argument of [>] must be [date], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | eval dateField != stringField", + "query": "from a_index | eval dateField > keywordField", "error": [ - "Argument of [!=] must be [string], found value [dateField] type [date]" + "Argument of [>] must be [date], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval stringField != dateField", + "query": "from a_index | eval keywordField > dateField", "error": [ - "Argument of [!=] must be [string], found value [dateField] type [date]" + "Argument of [>] must be [date], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval stringField != 0", + "query": "from a_index | eval textField > 0", "error": [ - "Argument of [!=] must be [number], found value [stringField] type [string]" + "Argument of [>] must be [double], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval stringField != now()", + "query": "from a_index | eval textField > now()", "error": [ - "Argument of [!=] must be [string], found value [now()] type [date]" + "Argument of [>] must be [date], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval dateField != \"2022\"", + "query": "from a_index | eval dateField > \"2022\"", "error": [], "warning": [] }, { - "query": "from a_index | eval \"2022\" != dateField", + "query": "from a_index | eval \"2022\" > dateField", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField != \"1.2.3\"", + "query": "from a_index | eval versionField > \"1.2.3\"", "error": [], "warning": [] }, { - "query": "from a_index | eval \"1.2.3\" != versionField", + "query": "from a_index | eval \"1.2.3\" > versionField", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField != \"true\"", - "error": [], + "query": "from a_index | eval booleanField > \"true\"", + "error": [ + "Argument of [>] must be [date], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval \"true\" != booleanField", + "query": "from a_index | eval \"true\" > booleanField", + "error": [ + "Argument of [>] must be [date], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval ipField > \"136.36.3.205\"", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField != \"136.36.3.205\"", + "query": "from a_index | eval \"136.36.3.205\" > ipField", "error": [], "warning": [] }, { - "query": "from a_index | eval \"136.36.3.205\" != ipField", + "query": "from a_index | eval doubleField >= 0", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField in (\"1.2.3\", \"4.5.6\", to_version(\"2.3.2\"))", + "query": "from a_index | eval NOT doubleField >= 0", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField in (\"2023-12-12\", \"2024-12-12\", date_parse(\"yyyy-MM-dd\", \"2025-12-12\"))", + "query": "from a_index | eval (doubleField >= 0)", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField in (\"true\", \"false\", false)", + "query": "from a_index | eval (NOT (doubleField >= 0))", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField in (\"136.36.3.205\", \"136.36.3.206\", to_ip(\"136.36.3.207\"))", + "query": "from a_index | eval 1 >= 0", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField + 1", + "query": "from a_index | eval textField >= textField", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField + 1)", + "query": "from a_index | eval doubleField >= doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + 1", + "query": "from a_index | eval dateField >= dateField", "error": [], "warning": [] }, { - "query": "from a_index | eval now() + now()", + "query": "from a_index | eval booleanField >= booleanField", "error": [ - "Argument of [+] must be [time_literal], found value [now()] type [date]" + "Argument of [>=] must be [date], found value [booleanField] type [boolean]", + "Argument of [>=] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval 1 + \"1\"", - "error": [ - "Argument of [+] must be [number], found value [\"1\"] type [string]" - ], + "query": "from a_index | eval ipField >= ipField", + "error": [], "warning": [] }, { - "query": "from a_index | eval \"1\" + 1", + "query": "from a_index | eval doubleField >= textField", "error": [ - "Argument of [+] must be [number], found value [\"1\"] type [string]" + "Argument of [>=] must be [double], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval numberField - 1", - "error": [], + "query": "from a_index | eval keywordField >= doubleField", + "error": [ + "Argument of [>=] must be [double], found value [keywordField] type [keyword]" + ], "warning": [] }, { - "query": "from a_index | eval (numberField - 1)", - "error": [], + "query": "from a_index | eval doubleField >= \"2022\"", + "error": [ + "Argument of [>=] must be [date], found value [doubleField] type [double]" + ], "warning": [] }, { - "query": "from a_index | eval 1 - 1", - "error": [], + "query": "from a_index | eval dateField >= keywordField", + "error": [ + "Argument of [>=] must be [date], found value [keywordField] type [keyword]" + ], "warning": [] }, { - "query": "from a_index | eval now() - now()", + "query": "from a_index | eval keywordField >= dateField", "error": [ - "Argument of [-] must be [time_literal], found value [now()] type [date]" + "Argument of [>=] must be [date], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval 1 - \"1\"", + "query": "from a_index | eval textField >= 0", "error": [ - "Argument of [-] must be [number], found value [\"1\"] type [string]" + "Argument of [>=] must be [double], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval \"1\" - 1", + "query": "from a_index | eval textField >= now()", "error": [ - "Argument of [-] must be [number], found value [\"1\"] type [string]" + "Argument of [>=] must be [date], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval numberField * 1", + "query": "from a_index | eval dateField >= \"2022\"", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField * 1)", + "query": "from a_index | eval \"2022\" >= dateField", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 * 1", + "query": "from a_index | eval versionField >= \"1.2.3\"", "error": [], "warning": [] }, { - "query": "from a_index | eval now() * now()", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [now()] type [date]" - ], + "query": "from a_index | eval \"1.2.3\" >= versionField", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 * \"1\"", + "query": "from a_index | eval booleanField >= \"true\"", "error": [ - "Argument of [*] must be [number], found value [\"1\"] type [string]" + "Argument of [>=] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval \"1\" * 1", + "query": "from a_index | eval \"true\" >= booleanField", "error": [ - "Argument of [*] must be [number], found value [\"1\"] type [string]" + "Argument of [>=] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval numberField / 1", + "query": "from a_index | eval ipField >= \"136.36.3.205\"", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField / 1)", + "query": "from a_index | eval \"136.36.3.205\" >= ipField", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 / 1", + "query": "from a_index | eval doubleField < 0", "error": [], "warning": [] }, { - "query": "from a_index | eval now() / now()", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [now()] type [date]" - ], + "query": "from a_index | eval NOT doubleField < 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 / \"1\"", - "error": [ - "Argument of [/] must be [number], found value [\"1\"] type [string]" - ], + "query": "from a_index | eval (doubleField < 0)", + "error": [], "warning": [] }, { - "query": "from a_index | eval \"1\" / 1", - "error": [ - "Argument of [/] must be [number], found value [\"1\"] type [string]" - ], + "query": "from a_index | eval (NOT (doubleField < 0))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval 1 < 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval numberField % 1", + "query": "from a_index | eval textField < textField", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField % 1)", + "query": "from a_index | eval doubleField < doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 % 1", + "query": "from a_index | eval dateField < dateField", "error": [], "warning": [] }, { - "query": "from a_index | eval now() % now()", + "query": "from a_index | eval booleanField < booleanField", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [now()] type [date]" + "Argument of [<] must be [date], found value [booleanField] type [boolean]", + "Argument of [<] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval 1 % \"1\"", + "query": "from a_index | eval ipField < ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval doubleField < textField", "error": [ - "Argument of [%] must be [number], found value [\"1\"] type [string]" + "Argument of [<] must be [double], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval \"1\" % 1", + "query": "from a_index | eval keywordField < doubleField", "error": [ - "Argument of [%] must be [number], found value [\"1\"] type [string]" + "Argument of [<] must be [double], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval 1/0", - "error": [], - "warning": [ - "Cannot divide by zero: 1/0" - ] + "query": "from a_index | eval doubleField < \"2022\"", + "error": [ + "Argument of [<] must be [date], found value [doubleField] type [double]" + ], + "warning": [] }, { - "query": "from a_index | eval var = 1/0", - "error": [], - "warning": [ - "Cannot divide by zero: 1/0" - ] + "query": "from a_index | eval dateField < keywordField", + "error": [ + "Argument of [<] must be [date], found value [keywordField] type [keyword]" + ], + "warning": [] }, { - "query": "from a_index | eval 1 + 1/0", - "error": [], - "warning": [ - "Cannot divide by zero: 1/0" - ] - }, - { - "query": "from a_index | eval 1%0", - "error": [], - "warning": [ - "Module by zero can return null value: 1%0" - ] - }, - { - "query": "from a_index | eval var = 1%0", - "error": [], - "warning": [ - "Module by zero can return null value: 1%0" - ] - }, - { - "query": "from a_index | eval 1 + 1%0", - "error": [], - "warning": [ - "Module by zero can return null value: 1%0" - ] - }, - { - "query": "from a_index | eval stringField like \"?a\"", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval stringField NOT like \"?a\"", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval NOT stringField like \"?a\"", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval NOT stringField NOT like \"?a\"", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval numberField like \"?a\"", - "error": [ - "Argument of [like] must be [string], found value [numberField] type [number]" - ], - "warning": [] - }, - { - "query": "from a_index | eval numberField NOT like \"?a\"", + "query": "from a_index | eval keywordField < dateField", "error": [ - "Argument of [not_like] must be [string], found value [numberField] type [number]" + "Argument of [<] must be [date], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval NOT numberField like \"?a\"", + "query": "from a_index | eval textField < 0", "error": [ - "Argument of [like] must be [string], found value [numberField] type [number]" + "Argument of [<] must be [double], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval NOT numberField NOT like \"?a\"", + "query": "from a_index | eval textField < now()", "error": [ - "Argument of [not_like] must be [string], found value [numberField] type [number]" + "Argument of [<] must be [date], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval stringField rlike \"?a\"", + "query": "from a_index | eval dateField < \"2022\"", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField NOT rlike \"?a\"", + "query": "from a_index | eval \"2022\" < dateField", "error": [], "warning": [] }, { - "query": "from a_index | eval NOT stringField rlike \"?a\"", + "query": "from a_index | eval versionField < \"1.2.3\"", "error": [], "warning": [] }, { - "query": "from a_index | eval NOT stringField NOT rlike \"?a\"", + "query": "from a_index | eval \"1.2.3\" < versionField", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField rlike \"?a\"", - "error": [ - "Argument of [rlike] must be [string], found value [numberField] type [number]" - ], - "warning": [] - }, - { - "query": "from a_index | eval numberField NOT rlike \"?a\"", - "error": [ - "Argument of [not_rlike] must be [string], found value [numberField] type [number]" - ], - "warning": [] - }, - { - "query": "from a_index | eval NOT numberField rlike \"?a\"", + "query": "from a_index | eval booleanField < \"true\"", "error": [ - "Argument of [rlike] must be [string], found value [numberField] type [number]" + "Argument of [<] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval NOT numberField NOT rlike \"?a\"", + "query": "from a_index | eval \"true\" < booleanField", "error": [ - "Argument of [not_rlike] must be [string], found value [numberField] type [number]" + "Argument of [<] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval 1 in (1, 2, 3)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval numberField in (1, 2, 3)", + "query": "from a_index | eval ipField < \"136.36.3.205\"", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField not in (1, 2, 3)", + "query": "from a_index | eval \"136.36.3.205\" < ipField", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField not in (1, 2, 3, numberField)", + "query": "from a_index | eval doubleField <= 0", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 in (1, 2, 3, round(numberField))", + "query": "from a_index | eval NOT doubleField <= 0", "error": [], "warning": [] }, { - "query": "from a_index | eval \"a\" in (\"a\", \"b\", \"c\")", + "query": "from a_index | eval (doubleField <= 0)", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField in (\"a\", \"b\", \"c\")", + "query": "from a_index | eval (NOT (doubleField <= 0))", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField not in (\"a\", \"b\", \"c\")", + "query": "from a_index | eval 1 <= 0", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField not in (\"a\", \"b\", \"c\", stringField)", + "query": "from a_index | eval textField <= textField", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 in (\"a\", \"b\", \"c\")", + "query": "from a_index | eval doubleField <= doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField in (\"a\", \"b\", \"c\")", + "query": "from a_index | eval dateField <= dateField", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField not in (\"a\", \"b\", \"c\")", - "error": [], + "query": "from a_index | eval booleanField <= booleanField", + "error": [ + "Argument of [<=] must be [date], found value [booleanField] type [boolean]", + "Argument of [<=] must be [date], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval numberField not in (1, 2, 3, stringField)", + "query": "from a_index | eval ipField <= ipField", "error": [], "warning": [] }, { - "query": "from a_index | eval avg(numberField)", + "query": "from a_index | eval doubleField <= textField", "error": [ - "EVAL does not support function avg" + "Argument of [<=] must be [double], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | stats avg(numberField) | eval `avg(numberField)` + 1", - "error": [], + "query": "from a_index | eval keywordField <= doubleField", + "error": [ + "Argument of [<=] must be [double], found value [keywordField] type [keyword]" + ], "warning": [] }, { - "query": "from a_index | eval not", + "query": "from a_index | eval doubleField <= \"2022\"", "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", - "Error: [not] function expects exactly one argument, got 0." + "Argument of [<=] must be [date], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | eval in", + "query": "from a_index | eval dateField <= keywordField", "error": [ - "SyntaxError: mismatched input 'in' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "Argument of [<=] must be [date], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval stringField in stringField", + "query": "from a_index | eval keywordField <= dateField", "error": [ - "SyntaxError: missing '(' at 'stringField'", - "SyntaxError: mismatched input '' expecting {',', ')'}" + "Argument of [<=] must be [date], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval stringField in stringField)", + "query": "from a_index | eval textField <= 0", "error": [ - "SyntaxError: missing '(' at 'stringField'", - "Error: [in] function expects exactly 2 arguments, got 1." + "Argument of [<=] must be [double], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval stringField not in stringField", + "query": "from a_index | eval textField <= now()", "error": [ - "SyntaxError: missing '(' at 'stringField'", - "SyntaxError: mismatched input '' expecting {',', ')'}" + "Argument of [<=] must be [date], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval mv_sort([\"a\", \"b\"], \"bogus\")", + "query": "from a_index | eval dateField <= \"2022\"", "error": [], - "warning": [ - "Invalid option [\"bogus\"] for mv_sort. Supported options: [\"asc\", \"desc\"]." - ] + "warning": [] }, { - "query": "from a_index | eval mv_sort([\"a\", \"b\"], \"ASC\")", + "query": "from a_index | eval \"2022\" <= dateField", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sort([\"a\", \"b\"], \"DESC\")", + "query": "from a_index | eval versionField <= \"1.2.3\"", "error": [], "warning": [] }, { - "query": "from a_index | eval result = case(false, 0, 1), round(result)", + "query": "from a_index | eval \"1.2.3\" <= versionField", "error": [], "warning": [] }, { - "query": "from a_index | eval result = case(false, 0, 1) | stats sum(result)", - "error": [], + "query": "from a_index | eval booleanField <= \"true\"", + "error": [ + "Argument of [<=] must be [date], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval result = case(false, 0, 1) | stats var0 = sum(result)", + "query": "from a_index | eval \"true\" <= booleanField", + "error": [ + "Argument of [<=] must be [date], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval ipField <= \"136.36.3.205\"", "error": [], "warning": [] }, { - "query": "from a_index | eval round(case(false, 0, 1))", + "query": "from a_index | eval \"136.36.3.205\" <= ipField", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 anno", - "error": [ - "EVAL does not support [date_period] in expression [1 anno]" - ], + "query": "from a_index | eval doubleField == 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = 1 anno", - "error": [ - "Unexpected time interval qualifier: 'anno'" - ], + "query": "from a_index | eval NOT doubleField == 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval now() + 1 anno", - "error": [ - "Unexpected time interval qualifier: 'anno'" - ], + "query": "from a_index | eval (doubleField == 0)", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 year", - "error": [ - "EVAL does not support [date_period] in expression [1 year]" - ], + "query": "from a_index | eval (NOT (doubleField == 0))", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 year", - "error": [ - "EVAL does not support [date_period] in expression [1 year]" - ], + "query": "from a_index | eval 1 == 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 year", + "query": "from a_index | eval textField == textField", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 year", + "query": "from a_index | eval doubleField == doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 YEAR", + "query": "from a_index | eval dateField == dateField", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Year", + "query": "from a_index | eval booleanField == booleanField", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 year", + "query": "from a_index | eval ipField == ipField", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 year + 1 year", + "query": "from a_index | eval doubleField == textField", "error": [ - "Argument of [+] must be [date], found value [1 year] type [duration]" + "Argument of [==] must be [double], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 year", + "query": "from a_index | eval keywordField == doubleField", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 year] type [duration]" + "Argument of [==] must be [double], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 year", + "query": "from a_index | eval doubleField == \"2022\"", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 year] type [duration]" + "Argument of [==] must be [date], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 year", + "query": "from a_index | eval dateField == keywordField", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 year] type [duration]" + "Argument of [==] must be [date], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval 1 years", + "query": "from a_index | eval keywordField == dateField", "error": [ - "EVAL does not support [date_period] in expression [1 years]" + "Argument of [==] must be [date], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval 1 years", + "query": "from a_index | eval textField == 0", "error": [ - "EVAL does not support [date_period] in expression [1 years]" + "Argument of [==] must be [double], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 years", + "query": "from a_index | eval textField == now()", + "error": [ + "Argument of [==] must be [date], found value [textField] type [text]" + ], + "warning": [] + }, + { + "query": "from a_index | eval dateField == \"2022\"", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 years", + "query": "from a_index | eval \"2022\" == dateField", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 YEARS", + "query": "from a_index | eval versionField == \"1.2.3\"", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Years", + "query": "from a_index | eval \"1.2.3\" == versionField", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 years", + "query": "from a_index | eval booleanField == \"true\"", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 years + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 years] type [duration]" - ], + "query": "from a_index | eval \"true\" == booleanField", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 years", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 years] type [duration]" - ], + "query": "from a_index | eval ipField == \"136.36.3.205\"", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 years", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 years] type [duration]" - ], + "query": "from a_index | eval \"136.36.3.205\" == ipField", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 years", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 years] type [duration]" - ], + "query": "from a_index | eval doubleField != 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 quarter", - "error": [ - "EVAL does not support [date_period] in expression [1 quarter]" - ], + "query": "from a_index | eval NOT doubleField != 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 quarter", - "error": [ - "EVAL does not support [date_period] in expression [1 quarter]" - ], + "query": "from a_index | eval (doubleField != 0)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 quarter", + "query": "from a_index | eval (NOT (doubleField != 0))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 quarter", + "query": "from a_index | eval 1 != 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 QUARTER", + "query": "from a_index | eval textField != textField", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Quarter", + "query": "from a_index | eval doubleField != doubleField", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 quarter", + "query": "from a_index | eval dateField != dateField", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 quarter + 1 year", + "query": "from a_index | eval booleanField != booleanField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval ipField != ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval doubleField != textField", "error": [ - "Argument of [+] must be [date], found value [1 quarter] type [duration]" + "Argument of [!=] must be [double], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 quarter", + "query": "from a_index | eval keywordField != doubleField", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 quarter] type [duration]" + "Argument of [!=] must be [double], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 quarter", + "query": "from a_index | eval doubleField != \"2022\"", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 quarter] type [duration]" + "Argument of [!=] must be [date], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 quarter", + "query": "from a_index | eval dateField != keywordField", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 quarter] type [duration]" + "Argument of [!=] must be [date], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval 1 quarters", + "query": "from a_index | eval keywordField != dateField", "error": [ - "EVAL does not support [date_period] in expression [1 quarters]" + "Argument of [!=] must be [date], found value [keywordField] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval 1 quarters", + "query": "from a_index | eval textField != 0", "error": [ - "EVAL does not support [date_period] in expression [1 quarters]" + "Argument of [!=] must be [double], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 quarters", - "error": [], + "query": "from a_index | eval textField != now()", + "error": [ + "Argument of [!=] must be [date], found value [textField] type [text]" + ], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 quarters", + "query": "from a_index | eval dateField != \"2022\"", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 QUARTERS", + "query": "from a_index | eval \"2022\" != dateField", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Quarters", + "query": "from a_index | eval versionField != \"1.2.3\"", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 quarters", + "query": "from a_index | eval \"1.2.3\" != versionField", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 quarters + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 quarters] type [duration]" - ], + "query": "from a_index | eval booleanField != \"true\"", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 quarters", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 quarters] type [duration]" - ], + "query": "from a_index | eval \"true\" != booleanField", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 quarters", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 quarters] type [duration]" - ], + "query": "from a_index | eval ipField != \"136.36.3.205\"", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 quarters", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 quarters] type [duration]" - ], + "query": "from a_index | eval \"136.36.3.205\" != ipField", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 month", - "error": [ - "EVAL does not support [date_period] in expression [1 month]" - ], + "query": "from a_index | eval versionField in (\"1.2.3\", \"4.5.6\", to_version(\"2.3.2\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 month", - "error": [ - "EVAL does not support [date_period] in expression [1 month]" - ], + "query": "from a_index | eval dateField in (\"2023-12-12\", \"2024-12-12\", date_parse(\"yyyy-MM-dd\", \"2025-12-12\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 month", + "query": "from a_index | eval booleanField in (\"true\", \"false\", false)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 month", + "query": "from a_index | eval ipField in (\"136.36.3.205\", \"136.36.3.206\", to_ip(\"136.36.3.207\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 MONTH", + "query": "from a_index | eval doubleField + 1", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Month", + "query": "from a_index | eval (doubleField + 1)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 month", + "query": "from a_index | eval 1 + 1", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 month + 1 year", + "query": "from a_index | eval now() + now()", "error": [ - "Argument of [+] must be [date], found value [1 month] type [duration]" + "Argument of [+] must be [date_period], found value [now()] type [date]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 month", + "query": "from a_index | eval 1 + \"1\"", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 month] type [duration]" + "Argument of [+] must be [date_period], found value [1] type [integer]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 month", + "query": "from a_index | eval \"1\" + 1", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 month] type [duration]" + "Argument of [+] must be [date_period], found value [1] type [integer]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 month", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 month] type [duration]" - ], + "query": "from a_index | eval doubleField - 1", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 months", - "error": [ - "EVAL does not support [date_period] in expression [1 months]" - ], + "query": "from a_index | eval (doubleField - 1)", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 months", + "query": "from a_index | eval 1 - 1", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval now() - now()", "error": [ - "EVAL does not support [date_period] in expression [1 months]" + "Argument of [-] must be [date_period], found value [now()] type [date]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 months", - "error": [], + "query": "from a_index | eval 1 - \"1\"", + "error": [ + "Argument of [-] must be [date_period], found value [1] type [integer]" + ], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 months", - "error": [], + "query": "from a_index | eval \"1\" - 1", + "error": [ + "Argument of [-] must be [date_period], found value [1] type [integer]" + ], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 MONTHS", + "query": "from a_index | eval doubleField * 1", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Months", + "query": "from a_index | eval (doubleField * 1)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 months", + "query": "from a_index | eval 1 * 1", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 months + 1 year", + "query": "from a_index | eval now() * now()", "error": [ - "Argument of [+] must be [date], found value [1 months] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [now()] type [date]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 months", + "query": "from a_index | eval 1 * \"1\"", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 months] type [duration]" + "Argument of [*] must be [double], found value [\"1\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 months", + "query": "from a_index | eval \"1\" * 1", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 months] type [duration]" + "Argument of [*] must be [double], found value [\"1\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 months", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 months] type [duration]" - ], + "query": "from a_index | eval doubleField / 1", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 week", - "error": [ - "EVAL does not support [date_period] in expression [1 week]" - ], + "query": "from a_index | eval (doubleField / 1)", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 week", + "query": "from a_index | eval 1 / 1", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval now() / now()", "error": [ - "EVAL does not support [date_period] in expression [1 week]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [now()] type [date]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 week", - "error": [], + "query": "from a_index | eval 1 / \"1\"", + "error": [ + "Argument of [/] must be [double], found value [\"1\"] type [string]" + ], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 week", - "error": [], + "query": "from a_index | eval \"1\" / 1", + "error": [ + "Argument of [/] must be [double], found value [\"1\"] type [string]" + ], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 WEEK", + "query": "from a_index | eval doubleField % 1", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Week", + "query": "from a_index | eval (doubleField % 1)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 week", + "query": "from a_index | eval 1 % 1", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 week + 1 year", + "query": "from a_index | eval now() % now()", "error": [ - "Argument of [+] must be [date], found value [1 week] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [now()] type [date]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 week", + "query": "from a_index | eval 1 % \"1\"", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 week] type [duration]" + "Argument of [%] must be [double], found value [\"1\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 week", + "query": "from a_index | eval \"1\" % 1", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 week] type [duration]" + "Argument of [%] must be [double], found value [\"1\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 week", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 week] type [duration]" - ], - "warning": [] + "query": "from a_index | eval 1/0", + "error": [], + "warning": [ + "Cannot divide by zero: 1/0" + ] }, { - "query": "from a_index | eval 1 weeks", - "error": [ - "EVAL does not support [date_period] in expression [1 weeks]" - ], - "warning": [] + "query": "from a_index | eval var = 1/0", + "error": [], + "warning": [ + "Cannot divide by zero: 1/0" + ] }, { - "query": "from a_index | eval 1 weeks", - "error": [ - "EVAL does not support [date_period] in expression [1 weeks]" - ], - "warning": [] + "query": "from a_index | eval 1 + 1/0", + "error": [], + "warning": [ + "Cannot divide by zero: 1/0" + ] }, { - "query": "from a_index | eval var = now() - 1 weeks", + "query": "from a_index | eval 1%0", "error": [], - "warning": [] + "warning": [ + "Module by zero can return null value: 1%0" + ] }, { - "query": "from a_index | eval var = dateField - 1 weeks", + "query": "from a_index | eval var = 1%0", "error": [], - "warning": [] + "warning": [ + "Module by zero can return null value: 1%0" + ] }, { - "query": "from a_index | eval var = dateField - 1 WEEKS", + "query": "from a_index | eval 1 + 1%0", "error": [], - "warning": [] + "warning": [ + "Module by zero can return null value: 1%0" + ] }, { - "query": "from a_index | eval var = dateField - 1 Weeks", + "query": "from a_index | eval textField like \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 weeks", + "query": "from a_index | eval textField NOT like \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 weeks + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 weeks] type [duration]" - ], + "query": "from a_index | eval NOT textField like \"?a\"", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 weeks", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 weeks] type [duration]" - ], + "query": "from a_index | eval NOT textField NOT like \"?a\"", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 weeks", + "query": "from a_index | eval doubleField like \"?a\"", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 weeks] type [duration]" + "Argument of [like] must be [text], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 weeks", + "query": "from a_index | eval doubleField NOT like \"?a\"", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 weeks] type [duration]" + "Argument of [not_like] must be [text], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | eval 1 day", + "query": "from a_index | eval NOT doubleField like \"?a\"", "error": [ - "EVAL does not support [date_period] in expression [1 day]" + "Argument of [like] must be [text], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | eval 1 day", + "query": "from a_index | eval NOT doubleField NOT like \"?a\"", "error": [ - "EVAL does not support [date_period] in expression [1 day]" + "Argument of [not_like] must be [text], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 day", + "query": "from a_index | eval textField rlike \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 day", + "query": "from a_index | eval textField NOT rlike \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 DAY", + "query": "from a_index | eval NOT textField rlike \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Day", + "query": "from a_index | eval NOT textField NOT rlike \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 day", - "error": [], + "query": "from a_index | eval doubleField rlike \"?a\"", + "error": [ + "Argument of [rlike] must be [text], found value [doubleField] type [double]" + ], "warning": [] }, { - "query": "from a_index | eval 1 day + 1 year", + "query": "from a_index | eval doubleField NOT rlike \"?a\"", "error": [ - "Argument of [+] must be [date], found value [1 day] type [duration]" + "Argument of [not_rlike] must be [text], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 day", + "query": "from a_index | eval NOT doubleField rlike \"?a\"", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 day] type [duration]" + "Argument of [rlike] must be [text], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 day", + "query": "from a_index | eval NOT doubleField NOT rlike \"?a\"", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 day] type [duration]" + "Argument of [not_rlike] must be [text], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 day", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 day] type [duration]" - ], + "query": "from a_index | eval 1 in (1, 2, 3)", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 days", - "error": [ - "EVAL does not support [date_period] in expression [1 days]" - ], + "query": "from a_index | eval doubleField in (1, 2, 3)", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 days", - "error": [ - "EVAL does not support [date_period] in expression [1 days]" - ], + "query": "from a_index | eval doubleField not in (1, 2, 3)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 days", + "query": "from a_index | eval doubleField not in (1, 2, 3, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 days", + "query": "from a_index | eval 1 in (1, 2, 3, round(doubleField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 DAYS", + "query": "from a_index | eval \"a\" in (\"a\", \"b\", \"c\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Days", + "query": "from a_index | eval textField in (\"a\", \"b\", \"c\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 days", + "query": "from a_index | eval textField not in (\"a\", \"b\", \"c\")", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 days + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 days] type [duration]" - ], + "query": "from a_index | eval textField not in (\"a\", \"b\", \"c\", textField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 days", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 days] type [duration]" - ], + "query": "from a_index | eval 1 in (\"a\", \"b\", \"c\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 days", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 days] type [duration]" - ], + "query": "from a_index | eval doubleField in (\"a\", \"b\", \"c\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 days", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 days] type [duration]" - ], + "query": "from a_index | eval doubleField not in (\"a\", \"b\", \"c\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 hour", - "error": [ - "EVAL does not support [date_period] in expression [1 hour]" - ], + "query": "from a_index | eval doubleField not in (1, 2, 3, textField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 hour", + "query": "from a_index | eval avg(doubleField)", "error": [ - "EVAL does not support [date_period] in expression [1 hour]" + "EVAL does not support function avg" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 hour", + "query": "from a_index | stats avg(doubleField) | eval `avg(doubleField)` + 1", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 hour", - "error": [], + "query": "from a_index | eval not", + "error": [ + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + "Error: [not] function expects exactly one argument, got 0." + ], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 HOUR", - "error": [], + "query": "from a_index | eval in", + "error": [ + "SyntaxError: mismatched input 'in' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + ], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Hour", - "error": [], + "query": "from a_index | eval textField in textField", + "error": [ + "SyntaxError: missing '(' at 'textField'", + "SyntaxError: mismatched input '' expecting {',', ')'}" + ], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 hour", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval 1 hour + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 hour] type [duration]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = now() * 1 hour", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 hour] type [duration]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = now() / 1 hour", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 hour] type [duration]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = now() % 1 hour", + "query": "from a_index | eval textField in textField)", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 hour] type [duration]" + "SyntaxError: missing '(' at 'textField'", + "Error: [in] function expects exactly 2 arguments, got 1." ], "warning": [] }, { - "query": "from a_index | eval 1 hours", + "query": "from a_index | eval textField not in textField", "error": [ - "EVAL does not support [date_period] in expression [1 hours]" + "SyntaxError: missing '(' at 'textField'", + "SyntaxError: mismatched input '' expecting {',', ')'}" ], "warning": [] }, { - "query": "from a_index | eval 1 hours", - "error": [ - "EVAL does not support [date_period] in expression [1 hours]" - ], - "warning": [] + "query": "from a_index | eval mv_sort([\"a\", \"b\"], \"bogus\")", + "error": [], + "warning": [ + "Invalid option [\"bogus\"] for mv_sort. Supported options: [\"asc\", \"desc\"]." + ] }, { - "query": "from a_index | eval var = now() - 1 hours", + "query": "from a_index | eval mv_sort([\"a\", \"b\"], \"ASC\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 hours", + "query": "from a_index | eval mv_sort([\"a\", \"b\"], \"DESC\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 HOURS", + "query": "from a_index | eval result = case(false, 0, 1), round(result)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Hours", + "query": "from a_index | eval result = case(false, 0, 1) | stats sum(result)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 hours", + "query": "from a_index | eval result = case(false, 0, 1) | stats var0 = sum(result)", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 hours + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 hours] type [duration]" - ], + "query": "from a_index | eval round(case(false, 0, 1))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 hours", + "query": "from a_index | eval 1 anno", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 hours] type [duration]" + "EVAL does not support [date_period] in expression [1 anno]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 hours", + "query": "from a_index | eval var = 1 anno", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 hours] type [duration]" + "Unexpected time interval qualifier: 'anno'" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 hours", + "query": "from a_index | eval now() + 1 anno", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 hours] type [duration]" + "Unexpected time interval qualifier: 'anno'" ], "warning": [] }, { - "query": "from a_index | eval 1 minute", + "query": "from a_index | eval 1 year", "error": [ - "EVAL does not support [date_period] in expression [1 minute]" + "EVAL does not support [date_period] in expression [1 year]" ], "warning": [] }, { - "query": "from a_index | eval 1 minute", + "query": "from a_index | eval 1 year", "error": [ - "EVAL does not support [date_period] in expression [1 minute]" + "EVAL does not support [date_period] in expression [1 year]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 minute", + "query": "from a_index | eval var = now() - 1 year", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 minute", + "query": "from a_index | eval var = dateField - 1 year", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 MINUTE", + "query": "from a_index | eval var = dateField - 1 YEAR", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Minute", + "query": "from a_index | eval var = dateField - 1 Year", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 minute", + "query": "from a_index | eval var = dateField + 1 year", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 minute + 1 year", + "query": "from a_index | eval 1 year + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 minute] type [duration]" + "Argument of [+] must be [date], found value [1 year] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 minute", + "query": "from a_index | eval var = now() * 1 year", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 minute] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 year] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 minute", + "query": "from a_index | eval var = now() / 1 year", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 minute] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 year] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 minute", + "query": "from a_index | eval var = now() % 1 year", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 minute] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 year] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 minutes", + "query": "from a_index | eval 1 years", "error": [ - "EVAL does not support [date_period] in expression [1 minutes]" + "EVAL does not support [date_period] in expression [1 years]" ], "warning": [] }, { - "query": "from a_index | eval 1 minutes", + "query": "from a_index | eval 1 years", "error": [ - "EVAL does not support [date_period] in expression [1 minutes]" + "EVAL does not support [date_period] in expression [1 years]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 minutes", + "query": "from a_index | eval var = now() - 1 years", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 minutes", + "query": "from a_index | eval var = dateField - 1 years", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 MINUTES", + "query": "from a_index | eval var = dateField - 1 YEARS", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Minutes", + "query": "from a_index | eval var = dateField - 1 Years", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 minutes", + "query": "from a_index | eval var = dateField + 1 years", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 minutes + 1 year", + "query": "from a_index | eval 1 years + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 minutes] type [duration]" + "Argument of [+] must be [date], found value [1 years] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 minutes", + "query": "from a_index | eval var = now() * 1 years", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 minutes] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 years] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 minutes", + "query": "from a_index | eval var = now() / 1 years", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 minutes] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 years] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 minutes", + "query": "from a_index | eval var = now() % 1 years", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 minutes] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 years] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 second", + "query": "from a_index | eval 1 quarter", "error": [ - "EVAL does not support [date_period] in expression [1 second]" + "EVAL does not support [date_period] in expression [1 quarter]" ], "warning": [] }, { - "query": "from a_index | eval 1 second", + "query": "from a_index | eval 1 quarter", "error": [ - "EVAL does not support [date_period] in expression [1 second]" + "EVAL does not support [date_period] in expression [1 quarter]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 second", + "query": "from a_index | eval var = now() - 1 quarter", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 second", + "query": "from a_index | eval var = dateField - 1 quarter", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 SECOND", + "query": "from a_index | eval var = dateField - 1 QUARTER", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Second", + "query": "from a_index | eval var = dateField - 1 Quarter", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 second", + "query": "from a_index | eval var = dateField + 1 quarter", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 second + 1 year", + "query": "from a_index | eval 1 quarter + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 second] type [duration]" + "Argument of [+] must be [date], found value [1 quarter] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 second", + "query": "from a_index | eval var = now() * 1 quarter", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 second] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 quarter] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 second", + "query": "from a_index | eval var = now() / 1 quarter", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 second] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 quarter] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 second", + "query": "from a_index | eval var = now() % 1 quarter", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 second] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 quarter] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 seconds", + "query": "from a_index | eval 1 quarters", "error": [ - "EVAL does not support [date_period] in expression [1 seconds]" + "EVAL does not support [date_period] in expression [1 quarters]" ], "warning": [] }, { - "query": "from a_index | eval 1 seconds", + "query": "from a_index | eval 1 quarters", "error": [ - "EVAL does not support [date_period] in expression [1 seconds]" + "EVAL does not support [date_period] in expression [1 quarters]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 seconds", + "query": "from a_index | eval var = now() - 1 quarters", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 seconds", + "query": "from a_index | eval var = dateField - 1 quarters", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 SECONDS", + "query": "from a_index | eval var = dateField - 1 QUARTERS", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Seconds", + "query": "from a_index | eval var = dateField - 1 Quarters", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 seconds", + "query": "from a_index | eval var = dateField + 1 quarters", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 seconds + 1 year", + "query": "from a_index | eval 1 quarters + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 seconds] type [duration]" + "Argument of [+] must be [date], found value [1 quarters] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 seconds", + "query": "from a_index | eval var = now() * 1 quarters", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 seconds] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 quarters] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 seconds", + "query": "from a_index | eval var = now() / 1 quarters", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 seconds] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 quarters] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 seconds", + "query": "from a_index | eval var = now() % 1 quarters", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 seconds] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 quarters] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 millisecond", + "query": "from a_index | eval 1 month", "error": [ - "EVAL does not support [date_period] in expression [1 millisecond]" + "EVAL does not support [date_period] in expression [1 month]" ], "warning": [] }, { - "query": "from a_index | eval 1 millisecond", + "query": "from a_index | eval 1 month", "error": [ - "EVAL does not support [date_period] in expression [1 millisecond]" + "EVAL does not support [date_period] in expression [1 month]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 millisecond", + "query": "from a_index | eval var = now() - 1 month", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 millisecond", + "query": "from a_index | eval var = dateField - 1 month", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 MILLISECOND", + "query": "from a_index | eval var = dateField - 1 MONTH", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Millisecond", + "query": "from a_index | eval var = dateField - 1 Month", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 millisecond", + "query": "from a_index | eval var = dateField + 1 month", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 millisecond + 1 year", + "query": "from a_index | eval 1 month + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 millisecond] type [duration]" + "Argument of [+] must be [date], found value [1 month] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 millisecond", + "query": "from a_index | eval var = now() * 1 month", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 millisecond] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 month] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 millisecond", + "query": "from a_index | eval var = now() / 1 month", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 millisecond] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 month] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 millisecond", + "query": "from a_index | eval var = now() % 1 month", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 millisecond] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 month] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 milliseconds", + "query": "from a_index | eval 1 months", "error": [ - "EVAL does not support [date_period] in expression [1 milliseconds]" + "EVAL does not support [date_period] in expression [1 months]" ], "warning": [] }, { - "query": "from a_index | eval 1 milliseconds", + "query": "from a_index | eval 1 months", "error": [ - "EVAL does not support [date_period] in expression [1 milliseconds]" + "EVAL does not support [date_period] in expression [1 months]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 milliseconds", + "query": "from a_index | eval var = now() - 1 months", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 milliseconds", + "query": "from a_index | eval var = dateField - 1 months", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 MILLISECONDS", + "query": "from a_index | eval var = dateField - 1 MONTHS", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Milliseconds", + "query": "from a_index | eval var = dateField - 1 Months", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 milliseconds", + "query": "from a_index | eval var = dateField + 1 months", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 milliseconds + 1 year", + "query": "from a_index | eval 1 months + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 milliseconds] type [duration]" + "Argument of [+] must be [date], found value [1 months] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 milliseconds", + "query": "from a_index | eval var = now() * 1 months", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 milliseconds] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 months] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 milliseconds", + "query": "from a_index | eval var = now() / 1 months", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 milliseconds] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 months] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 milliseconds", + "query": "from a_index | eval var = now() % 1 months", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 milliseconds] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 months] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 ms", + "query": "from a_index | eval 1 week", "error": [ - "EVAL does not support [date_period] in expression [1 ms]" + "EVAL does not support [date_period] in expression [1 week]" ], "warning": [] }, { - "query": "from a_index | eval 1 ms", + "query": "from a_index | eval 1 week", "error": [ - "EVAL does not support [date_period] in expression [1 ms]" + "EVAL does not support [date_period] in expression [1 week]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 ms", + "query": "from a_index | eval var = now() - 1 week", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 ms", + "query": "from a_index | eval var = dateField - 1 week", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 MS", + "query": "from a_index | eval var = dateField - 1 WEEK", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Ms", + "query": "from a_index | eval var = dateField - 1 Week", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 ms", + "query": "from a_index | eval var = dateField + 1 week", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 ms + 1 year", + "query": "from a_index | eval 1 week + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 ms] type [duration]" + "Argument of [+] must be [date], found value [1 week] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 ms", + "query": "from a_index | eval var = now() * 1 week", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 ms] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 week] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 ms", + "query": "from a_index | eval var = now() / 1 week", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 ms] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 week] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 ms", + "query": "from a_index | eval var = now() % 1 week", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 ms] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 week] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 s", + "query": "from a_index | eval 1 weeks", "error": [ - "EVAL does not support [date_period] in expression [1 s]" + "EVAL does not support [date_period] in expression [1 weeks]" ], "warning": [] }, { - "query": "from a_index | eval 1 s", + "query": "from a_index | eval 1 weeks", "error": [ - "EVAL does not support [date_period] in expression [1 s]" + "EVAL does not support [date_period] in expression [1 weeks]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 s", + "query": "from a_index | eval var = now() - 1 weeks", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 s", + "query": "from a_index | eval var = dateField - 1 weeks", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 S", + "query": "from a_index | eval var = dateField - 1 WEEKS", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 S", + "query": "from a_index | eval var = dateField - 1 Weeks", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 s", + "query": "from a_index | eval var = dateField + 1 weeks", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 s + 1 year", + "query": "from a_index | eval 1 weeks + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 s] type [duration]" + "Argument of [+] must be [date], found value [1 weeks] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 s", + "query": "from a_index | eval var = now() * 1 weeks", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 s] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 weeks] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 s", + "query": "from a_index | eval var = now() / 1 weeks", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 s] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 weeks] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 s", + "query": "from a_index | eval var = now() % 1 weeks", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 s] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 weeks] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 m", + "query": "from a_index | eval 1 day", "error": [ - "EVAL does not support [date_period] in expression [1 m]" + "EVAL does not support [date_period] in expression [1 day]" ], "warning": [] }, { - "query": "from a_index | eval 1 m", + "query": "from a_index | eval 1 day", "error": [ - "EVAL does not support [date_period] in expression [1 m]" + "EVAL does not support [date_period] in expression [1 day]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 m", + "query": "from a_index | eval var = now() - 1 day", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 m", + "query": "from a_index | eval var = dateField - 1 day", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 M", + "query": "from a_index | eval var = dateField - 1 DAY", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 M", + "query": "from a_index | eval var = dateField - 1 Day", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 m", + "query": "from a_index | eval var = dateField + 1 day", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 m + 1 year", + "query": "from a_index | eval 1 day + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 m] type [duration]" + "Argument of [+] must be [date], found value [1 day] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 m", + "query": "from a_index | eval var = now() * 1 day", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 m] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 day] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 m", + "query": "from a_index | eval var = now() / 1 day", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 m] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 day] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 m", + "query": "from a_index | eval var = now() % 1 day", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 m] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 day] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 h", + "query": "from a_index | eval 1 days", "error": [ - "EVAL does not support [date_period] in expression [1 h]" + "EVAL does not support [date_period] in expression [1 days]" ], "warning": [] }, { - "query": "from a_index | eval 1 h", + "query": "from a_index | eval 1 days", "error": [ - "EVAL does not support [date_period] in expression [1 h]" + "EVAL does not support [date_period] in expression [1 days]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 h", + "query": "from a_index | eval var = now() - 1 days", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 h", + "query": "from a_index | eval var = dateField - 1 days", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 H", + "query": "from a_index | eval var = dateField - 1 DAYS", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 H", + "query": "from a_index | eval var = dateField - 1 Days", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 h", + "query": "from a_index | eval var = dateField + 1 days", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 h + 1 year", + "query": "from a_index | eval 1 days + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 h] type [duration]" + "Argument of [+] must be [date], found value [1 days] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 h", + "query": "from a_index | eval var = now() * 1 days", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 h] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 days] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 h", + "query": "from a_index | eval var = now() / 1 days", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 h] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 days] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 h", + "query": "from a_index | eval var = now() % 1 days", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 h] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 days] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 d", + "query": "from a_index | eval 1 hour", "error": [ - "EVAL does not support [date_period] in expression [1 d]" + "EVAL does not support [date_period] in expression [1 hour]" ], "warning": [] }, { - "query": "from a_index | eval 1 d", + "query": "from a_index | eval 1 hour", "error": [ - "EVAL does not support [date_period] in expression [1 d]" + "EVAL does not support [date_period] in expression [1 hour]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 d", + "query": "from a_index | eval var = now() - 1 hour", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 d", + "query": "from a_index | eval var = dateField - 1 hour", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 D", + "query": "from a_index | eval var = dateField - 1 HOUR", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 D", + "query": "from a_index | eval var = dateField - 1 Hour", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 d", + "query": "from a_index | eval var = dateField + 1 hour", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 d + 1 year", + "query": "from a_index | eval 1 hour + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 d] type [duration]" + "Argument of [+] must be [date], found value [1 hour] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 d", + "query": "from a_index | eval var = now() * 1 hour", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 d] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 hour] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 d", + "query": "from a_index | eval var = now() / 1 hour", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 d] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 hour] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 d", + "query": "from a_index | eval var = now() % 1 hour", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 d] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 hour] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 w", + "query": "from a_index | eval 1 hours", "error": [ - "EVAL does not support [date_period] in expression [1 w]" + "EVAL does not support [date_period] in expression [1 hours]" ], "warning": [] }, { - "query": "from a_index | eval 1 w", + "query": "from a_index | eval 1 hours", "error": [ - "EVAL does not support [date_period] in expression [1 w]" + "EVAL does not support [date_period] in expression [1 hours]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 w", + "query": "from a_index | eval var = now() - 1 hours", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 w", + "query": "from a_index | eval var = dateField - 1 hours", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 W", + "query": "from a_index | eval var = dateField - 1 HOURS", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 W", + "query": "from a_index | eval var = dateField - 1 Hours", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 w", + "query": "from a_index | eval var = dateField + 1 hours", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 w + 1 year", + "query": "from a_index | eval 1 hours + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 w] type [duration]" + "Argument of [+] must be [date], found value [1 hours] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 w", + "query": "from a_index | eval var = now() * 1 hours", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 w] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 hours] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 w", + "query": "from a_index | eval var = now() / 1 hours", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 w] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 hours] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 w", + "query": "from a_index | eval var = now() % 1 hours", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 w] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 hours] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 mo", + "query": "from a_index | eval 1 minute", "error": [ - "EVAL does not support [date_period] in expression [1 mo]" + "EVAL does not support [date_period] in expression [1 minute]" ], "warning": [] }, { - "query": "from a_index | eval 1 mo", + "query": "from a_index | eval 1 minute", "error": [ - "EVAL does not support [date_period] in expression [1 mo]" + "EVAL does not support [date_period] in expression [1 minute]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 mo", + "query": "from a_index | eval var = now() - 1 minute", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 mo", + "query": "from a_index | eval var = dateField - 1 minute", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 MO", + "query": "from a_index | eval var = dateField - 1 MINUTE", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Mo", + "query": "from a_index | eval var = dateField - 1 Minute", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 mo", + "query": "from a_index | eval var = dateField + 1 minute", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 mo + 1 year", + "query": "from a_index | eval 1 minute + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 mo] type [duration]" + "Argument of [+] must be [date], found value [1 minute] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 mo", + "query": "from a_index | eval var = now() * 1 minute", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 mo] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 minute] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 mo", + "query": "from a_index | eval var = now() / 1 minute", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 mo] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 minute] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 mo", + "query": "from a_index | eval var = now() % 1 minute", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 mo] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 minute] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 q", + "query": "from a_index | eval 1 minutes", "error": [ - "EVAL does not support [date_period] in expression [1 q]" + "EVAL does not support [date_period] in expression [1 minutes]" ], "warning": [] }, { - "query": "from a_index | eval 1 q", + "query": "from a_index | eval 1 minutes", "error": [ - "EVAL does not support [date_period] in expression [1 q]" + "EVAL does not support [date_period] in expression [1 minutes]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 q", + "query": "from a_index | eval var = now() - 1 minutes", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 q", + "query": "from a_index | eval var = dateField - 1 minutes", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Q", + "query": "from a_index | eval var = dateField - 1 MINUTES", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Q", + "query": "from a_index | eval var = dateField - 1 Minutes", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 q", + "query": "from a_index | eval var = dateField + 1 minutes", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 q + 1 year", + "query": "from a_index | eval 1 minutes + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 q] type [duration]" + "Argument of [+] must be [date], found value [1 minutes] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 q", + "query": "from a_index | eval var = now() * 1 minutes", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 q] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 minutes] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 q", + "query": "from a_index | eval var = now() / 1 minutes", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 q] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 minutes] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 q", + "query": "from a_index | eval var = now() % 1 minutes", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 q] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 minutes] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 y", + "query": "from a_index | eval 1 second", "error": [ - "EVAL does not support [date_period] in expression [1 y]" + "EVAL does not support [date_period] in expression [1 second]" ], "warning": [] }, { - "query": "from a_index | eval 1 y", + "query": "from a_index | eval 1 second", "error": [ - "EVAL does not support [date_period] in expression [1 y]" + "EVAL does not support [date_period] in expression [1 second]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 y", + "query": "from a_index | eval var = now() - 1 second", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 y", + "query": "from a_index | eval var = dateField - 1 second", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Y", + "query": "from a_index | eval var = dateField - 1 SECOND", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Y", + "query": "from a_index | eval var = dateField - 1 Second", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 y", + "query": "from a_index | eval var = dateField + 1 second", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 y + 1 year", + "query": "from a_index | eval 1 second + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 y] type [duration]" + "Argument of [+] must be [date], found value [1 second] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 y", + "query": "from a_index | eval var = now() * 1 second", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 y] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 second] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 y", + "query": "from a_index | eval var = now() / 1 second", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 y] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 second] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 y", + "query": "from a_index | eval var = now() % 1 second", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 y] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 second] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval 1 yr", + "query": "from a_index | eval 1 seconds", "error": [ - "EVAL does not support [date_period] in expression [1 yr]" + "EVAL does not support [date_period] in expression [1 seconds]" ], "warning": [] }, { - "query": "from a_index | eval 1 yr", + "query": "from a_index | eval 1 seconds", "error": [ - "EVAL does not support [date_period] in expression [1 yr]" + "EVAL does not support [date_period] in expression [1 seconds]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 yr", + "query": "from a_index | eval var = now() - 1 seconds", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 yr", + "query": "from a_index | eval var = dateField - 1 seconds", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 YR", + "query": "from a_index | eval var = dateField - 1 SECONDS", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Yr", + "query": "from a_index | eval var = dateField - 1 Seconds", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 yr", + "query": "from a_index | eval var = dateField + 1 seconds", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 yr + 1 year", + "query": "from a_index | eval 1 seconds + 1 year", "error": [ - "Argument of [+] must be [date], found value [1 yr] type [duration]" + "Argument of [+] must be [date], found value [1 seconds] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 yr", + "query": "from a_index | eval var = now() * 1 seconds", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 yr] type [duration]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 seconds] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 yr", + "query": "from a_index | eval var = now() / 1 seconds", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 yr] type [duration]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 seconds] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 yr", + "query": "from a_index | eval var = now() % 1 seconds", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 yr] type [duration]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 seconds] type [duration]" ], "warning": [] }, { - "query": "from a_index | sort ", + "query": "from a_index | eval 1 millisecond", "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "EVAL does not support [date_period] in expression [1 millisecond]" ], "warning": [] }, { - "query": "from a_index | sort \"field\" ", - "error": [], + "query": "from a_index | eval 1 millisecond", + "error": [ + "EVAL does not support [date_period] in expression [1 millisecond]" + ], "warning": [] }, { - "query": "from a_index | sort wrongField ", - "error": [ - "Unknown column [wrongField]" - ], + "query": "from a_index | eval var = now() - 1 millisecond", + "error": [], "warning": [] }, { - "query": "from a_index | sort numberField, ", - "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" - ], + "query": "from a_index | eval var = dateField - 1 millisecond", + "error": [], "warning": [] }, { - "query": "from a_index | sort numberField, stringField", + "query": "from a_index | eval var = dateField - 1 MILLISECOND", "error": [], "warning": [] }, { - "query": "from a_index | sort \"field\" desc ", + "query": "from a_index | eval var = dateField - 1 Millisecond", "error": [], "warning": [] }, { - "query": "from a_index | sort numberField desc ", + "query": "from a_index | eval var = dateField + 1 millisecond", "error": [], "warning": [] }, { - "query": "from a_index | sort numberField desc nulls ", + "query": "from a_index | eval 1 millisecond + 1 year", "error": [ - "SyntaxError: missing {'first', 'last'} at ''" + "Argument of [+] must be [date], found value [1 millisecond] type [duration]" ], "warning": [] }, { - "query": "from a_index | sort numberField desc nulls first", - "error": [], + "query": "from a_index | eval var = now() * 1 millisecond", + "error": [ + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 millisecond] type [duration]" + ], "warning": [] }, { - "query": "from a_index | sort numberField desc first", + "query": "from a_index | eval var = now() / 1 millisecond", "error": [ - "SyntaxError: extraneous input 'first' expecting " + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 millisecond] type [duration]" ], "warning": [] }, { - "query": "from a_index | sort numberField desc nulls last", - "error": [], + "query": "from a_index | eval var = now() % 1 millisecond", + "error": [ + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 millisecond] type [duration]" + ], "warning": [] }, { - "query": "from a_index | sort numberField desc last", + "query": "from a_index | eval 1 milliseconds", "error": [ - "SyntaxError: extraneous input 'last' expecting " + "EVAL does not support [date_period] in expression [1 milliseconds]" ], "warning": [] }, { - "query": "from a_index | sort \"field\" asc ", - "error": [], + "query": "from a_index | eval 1 milliseconds", + "error": [ + "EVAL does not support [date_period] in expression [1 milliseconds]" + ], "warning": [] }, { - "query": "from a_index | sort numberField asc ", + "query": "from a_index | eval var = now() - 1 milliseconds", "error": [], "warning": [] }, { - "query": "from a_index | sort numberField asc nulls ", - "error": [ - "SyntaxError: missing {'first', 'last'} at ''" - ], + "query": "from a_index | eval var = dateField - 1 milliseconds", + "error": [], "warning": [] }, { - "query": "from a_index | sort numberField asc nulls first", + "query": "from a_index | eval var = dateField - 1 MILLISECONDS", "error": [], "warning": [] }, { - "query": "from a_index | sort numberField asc first", - "error": [ - "SyntaxError: extraneous input 'first' expecting " - ], + "query": "from a_index | eval var = dateField - 1 Milliseconds", + "error": [], "warning": [] }, { - "query": "from a_index | sort numberField asc nulls last", + "query": "from a_index | eval var = dateField + 1 milliseconds", "error": [], "warning": [] }, { - "query": "from a_index | sort numberField asc last", + "query": "from a_index | eval 1 milliseconds + 1 year", "error": [ - "SyntaxError: extraneous input 'last' expecting " + "Argument of [+] must be [date], found value [1 milliseconds] type [duration]" ], "warning": [] }, { - "query": "from a_index | sort numberField nulls first", - "error": [], + "query": "from a_index | eval var = now() * 1 milliseconds", + "error": [ + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 milliseconds] type [duration]" + ], "warning": [] }, { - "query": "from a_index | sort numberField first", + "query": "from a_index | eval var = now() / 1 milliseconds", "error": [ - "SyntaxError: extraneous input 'first' expecting " + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 milliseconds] type [duration]" ], "warning": [] }, { - "query": "from a_index | sort numberField nulls last", - "error": [], + "query": "from a_index | eval var = now() % 1 milliseconds", + "error": [ + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 milliseconds] type [duration]" + ], "warning": [] }, { - "query": "from a_index | sort numberField last", + "query": "from a_index | eval 1 ms", "error": [ - "SyntaxError: extraneous input 'last' expecting " + "EVAL does not support [date_period] in expression [1 ms]" ], "warning": [] }, { - "query": "row a = 1 | stats COUNT(*) | sort `COUNT(*)`", - "error": [], + "query": "from a_index | eval 1 ms", + "error": [ + "EVAL does not support [date_period] in expression [1 ms]" + ], "warning": [] }, { - "query": "ROW a = 1 | STATS couNt(*) | SORT `couNt(*)`", + "query": "from a_index | eval var = now() - 1 ms", "error": [], "warning": [] }, { - "query": "from a_index | sort abs(numberField) - to_long(stringField) desc nulls first", + "query": "from a_index | eval var = dateField - 1 ms", "error": [], "warning": [] }, { - "query": "from a_index | sort sin(stringField)", - "error": [ - "Argument of [sin] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = dateField - 1 MS", + "error": [], "warning": [] }, { - "query": "from a_index | sort numberField + stringField", - "error": [ - "Argument of [+] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = dateField - 1 Ms", + "error": [], "warning": [] }, { - "query": "from a_index | enrich", - "error": [ - "SyntaxError: missing ENRICH_POLICY_NAME at ''" - ], + "query": "from a_index | eval var = dateField + 1 ms", + "error": [], "warning": [] }, { - "query": "from a_index | enrich _", + "query": "from a_index | eval 1 ms + 1 year", "error": [ - "Unknown policy [_]" + "Argument of [+] must be [date], found value [1 ms] type [duration]" ], "warning": [] }, { - "query": "from a_index | enrich _:", + "query": "from a_index | eval var = now() * 1 ms", "error": [ - "SyntaxError: token recognition error at: ':'", - "Unknown policy [_]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 ms] type [duration]" ], "warning": [] }, { - "query": "from a_index | enrich _:policy", + "query": "from a_index | eval var = now() / 1 ms", "error": [ - "Unrecognized value [_] for ENRICH, mode needs to be one of [_ANY, _COORDINATOR, _REMOTE]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 ms] type [duration]" ], "warning": [] }, { - "query": "from a_index | enrich :policy", + "query": "from a_index | eval var = now() % 1 ms", "error": [ - "SyntaxError: token recognition error at: ':'" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 ms] type [duration]" ], "warning": [] }, { - "query": "from a_index | enrich any:", + "query": "from a_index | eval 1 s", "error": [ - "SyntaxError: token recognition error at: ':'", - "Unknown policy [any]" + "EVAL does not support [date_period] in expression [1 s]" ], "warning": [] }, { - "query": "from a_index | enrich _any:", + "query": "from a_index | eval 1 s", "error": [ - "SyntaxError: token recognition error at: ':'", - "Unknown policy [_any]" + "EVAL does not support [date_period] in expression [1 s]" ], "warning": [] }, { - "query": "from a_index | enrich any:policy", - "error": [ - "Unrecognized value [any] for ENRICH, mode needs to be one of [_ANY, _COORDINATOR, _REMOTE]" - ], + "query": "from a_index | eval var = now() - 1 s", + "error": [], "warning": [] }, { - "query": "from a_index | enrich policy ", + "query": "from a_index | eval var = dateField - 1 s", "error": [], "warning": [] }, { - "query": "from a_index | enrich `this``is fine`", - "error": [ - "SyntaxError: extraneous input 'fine`' expecting ", - "Unknown policy [`this``is]" - ], + "query": "from a_index | eval var = dateField - 1 S", + "error": [], "warning": [] }, { - "query": "from a_index | enrich this is fine", - "error": [ - "SyntaxError: mismatched input 'is' expecting ", - "Unknown policy [this]" - ], + "query": "from a_index | eval var = dateField - 1 S", + "error": [], "warning": [] }, { - "query": "from a_index | enrich _any:policy ", + "query": "from a_index | eval var = dateField + 1 s", "error": [], "warning": [] }, { - "query": "from a_index | enrich _any : policy ", + "query": "from a_index | eval 1 s + 1 year", "error": [ - "SyntaxError: token recognition error at: ':'", - "SyntaxError: extraneous input 'policy' expecting ", - "Unknown policy [_any]" + "Argument of [+] must be [date], found value [1 s] type [duration]" ], "warning": [] }, { - "query": "from a_index | enrich _any: policy ", + "query": "from a_index | eval var = now() * 1 s", "error": [ - "SyntaxError: token recognition error at: ':'", - "SyntaxError: extraneous input 'policy' expecting ", - "Unknown policy [_any]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 s] type [duration]" ], "warning": [] }, { - "query": "from a_index | enrich _any:policy ", - "error": [], - "warning": [] - }, - { - "query": "from a_index | enrich _ANY:policy ", - "error": [], + "query": "from a_index | eval var = now() / 1 s", + "error": [ + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 s] type [duration]" + ], "warning": [] }, { - "query": "from a_index | enrich _coordinator:policy ", - "error": [], + "query": "from a_index | eval var = now() % 1 s", + "error": [ + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 s] type [duration]" + ], "warning": [] }, { - "query": "from a_index | enrich _coordinator : policy ", + "query": "from a_index | eval 1 m", "error": [ - "SyntaxError: token recognition error at: ':'", - "SyntaxError: extraneous input 'policy' expecting ", - "Unknown policy [_coordinator]" + "EVAL does not support [date_period] in expression [1 m]" ], "warning": [] }, { - "query": "from a_index | enrich _coordinator: policy ", + "query": "from a_index | eval 1 m", "error": [ - "SyntaxError: token recognition error at: ':'", - "SyntaxError: extraneous input 'policy' expecting ", - "Unknown policy [_coordinator]" + "EVAL does not support [date_period] in expression [1 m]" ], "warning": [] }, { - "query": "from a_index | enrich _coordinator:policy ", + "query": "from a_index | eval var = now() - 1 m", "error": [], "warning": [] }, { - "query": "from a_index | enrich _COORDINATOR:policy ", + "query": "from a_index | eval var = dateField - 1 m", "error": [], "warning": [] }, { - "query": "from a_index | enrich _remote:policy ", + "query": "from a_index | eval var = dateField - 1 M", "error": [], "warning": [] }, { - "query": "from a_index | enrich _remote : policy ", - "error": [ - "SyntaxError: token recognition error at: ':'", - "SyntaxError: extraneous input 'policy' expecting ", - "Unknown policy [_remote]" - ], - "warning": [] - }, - { - "query": "from a_index | enrich _remote: policy ", - "error": [ - "SyntaxError: token recognition error at: ':'", - "SyntaxError: extraneous input 'policy' expecting ", - "Unknown policy [_remote]" - ], - "warning": [] - }, - { - "query": "from a_index | enrich _remote:policy ", + "query": "from a_index | eval var = dateField - 1 M", "error": [], "warning": [] }, { - "query": "from a_index | enrich _REMOTE:policy ", + "query": "from a_index | eval var = dateField + 1 m", "error": [], "warning": [] }, { - "query": "from a_index | enrich _unknown:policy", + "query": "from a_index | eval 1 m + 1 year", "error": [ - "Unrecognized value [_unknown] for ENRICH, mode needs to be one of [_ANY, _COORDINATOR, _REMOTE]" + "Argument of [+] must be [date], found value [1 m] type [duration]" ], "warning": [] }, { - "query": "from a_index |enrich missing-policy ", + "query": "from a_index | eval var = now() * 1 m", "error": [ - "Unknown policy [missing-policy]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 m] type [duration]" ], "warning": [] }, { - "query": "from a_index |enrich policy on ", + "query": "from a_index | eval var = now() / 1 m", "error": [ - "SyntaxError: missing ID_PATTERN at ''" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 m] type [duration]" ], "warning": [] }, { - "query": "from a_index | enrich policy on b ", + "query": "from a_index | eval var = now() % 1 m", "error": [ - "Unknown column [b]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 m] type [duration]" ], "warning": [] }, { - "query": "from a_index | enrich policy on `this``is fine`", + "query": "from a_index | eval 1 h", "error": [ - "Unknown column [this`is fine]" + "EVAL does not support [date_period] in expression [1 h]" ], "warning": [] }, { - "query": "from a_index | enrich policy on this is fine", + "query": "from a_index | eval 1 h", "error": [ - "SyntaxError: mismatched input 'is' expecting ", - "Unknown column [this]" + "EVAL does not support [date_period] in expression [1 h]" ], "warning": [] }, { - "query": "from a_index | enrich policy on stringField with ", - "error": [ - "SyntaxError: mismatched input '' expecting ID_PATTERN" - ], + "query": "from a_index | eval var = now() - 1 h", + "error": [], "warning": [] }, { - "query": "from a_index | enrich policy on stringField with var0 ", - "error": [ - "Unknown column [var0]" - ], + "query": "from a_index | eval var = dateField - 1 h", + "error": [], "warning": [] }, { - "query": "from a_index |enrich policy on numberField with var0 = ", - "error": [ - "SyntaxError: missing ID_PATTERN at ''", - "Unknown column [var0]" - ], + "query": "from a_index | eval var = dateField - 1 H", + "error": [], "warning": [] }, { - "query": "from a_index | enrich policy on stringField with var0 = c ", - "error": [ - "Unknown column [var0]", - "Unknown column [c]" - ], + "query": "from a_index | eval var = dateField - 1 H", + "error": [], "warning": [] }, { - "query": "from a_index |enrich policy on numberField with var0 = , ", + "query": "from a_index | eval var = dateField + 1 h", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval 1 h + 1 year", "error": [ - "SyntaxError: missing ID_PATTERN at ','", - "SyntaxError: mismatched input '' expecting ID_PATTERN", - "Unknown column [var0]" + "Argument of [+] must be [date], found value [1 h] type [duration]" ], "warning": [] }, { - "query": "from a_index | enrich policy on stringField with var0 = otherField, var1 ", + "query": "from a_index | eval var = now() * 1 h", "error": [ - "Unknown column [var1]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 h] type [duration]" ], "warning": [] }, { - "query": "from a_index | enrich policy on stringField with var0 = otherField ", - "error": [], + "query": "from a_index | eval var = now() / 1 h", + "error": [ + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 h] type [duration]" + ], "warning": [] }, { - "query": "from a_index | enrich policy on stringField with var0 = otherField, yetAnotherField ", - "error": [], + "query": "from a_index | eval var = now() % 1 h", + "error": [ + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 h] type [duration]" + ], "warning": [] }, { - "query": "from a_index |enrich policy on numberField with var0 = otherField, var1 = ", + "query": "from a_index | eval 1 d", "error": [ - "SyntaxError: missing ID_PATTERN at ''", - "Unknown column [var1]" + "EVAL does not support [date_period] in expression [1 d]" ], "warning": [] }, { - "query": "from a_index | enrich policy on stringField with var0 = otherField, var1 = yetAnotherField", - "error": [], + "query": "from a_index | eval 1 d", + "error": [ + "EVAL does not support [date_period] in expression [1 d]" + ], "warning": [] }, { - "query": "from a_index | enrich policy on stringField with var0 = otherField, `this``is fine` = yetAnotherField", + "query": "from a_index | eval var = now() - 1 d", "error": [], "warning": [] }, { - "query": "from a_index | enrich policy with ", - "error": [ - "SyntaxError: mismatched input '' expecting ID_PATTERN" - ], + "query": "from a_index | eval var = dateField - 1 d", + "error": [], "warning": [] }, { - "query": "from a_index | enrich policy with otherField", + "query": "from a_index | eval var = dateField - 1 D", "error": [], "warning": [] }, { - "query": "from a_index | enrich policy | eval otherField", + "query": "from a_index | eval var = dateField - 1 D", "error": [], "warning": [] }, { - "query": "from a_index | enrich policy with var0 = otherField | eval var0", + "query": "from a_index | eval var = dateField + 1 d", "error": [], "warning": [] }, { - "query": "from a_index | enrich my-pol*", + "query": "from a_index | eval 1 d + 1 year", "error": [ - "Using wildcards (*) in ENRICH is not allowed [my-pol*]" + "Argument of [+] must be [date], found value [1 d] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval stringField = 5", - "error": [], - "warning": [ - "Column [stringField] of type string has been overwritten as new type: number" - ] - }, - { - "query": "from a_index | eval numberField = \"5\"", - "error": [], - "warning": [ - "Column [numberField] of type number has been overwritten as new type: string" - ] + "query": "from a_index | eval var = now() * 1 d", + "error": [ + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 d] type [duration]" + ], + "warning": [] }, { - "query": "from a_index | eval round(numberField) + 1 | eval `round(numberField) + 1` + 1 | keep ```round(numberField) + 1`` + 1`", - "error": [], + "query": "from a_index | eval var = now() / 1 d", + "error": [ + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 d] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval round(numberField) + 1 | eval `round(numberField) + 1` + 1 | eval ```round(numberField) + 1`` + 1` + 1 | keep ```````round(numberField) + 1```` + 1`` + 1`", - "error": [], + "query": "from a_index | eval var = now() % 1 d", + "error": [ + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 d] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval round(numberField) + 1 | eval `round(numberField) + 1` + 1 | eval ```round(numberField) + 1`` + 1` + 1 | eval ```````round(numberField) + 1```` + 1`` + 1` + 1 | keep ```````````````round(numberField) + 1```````` + 1```` + 1`` + 1`", - "error": [], + "query": "from a_index | eval 1 w", + "error": [ + "EVAL does not support [date_period] in expression [1 w]" + ], "warning": [] }, { - "query": "from a_index | eval round(numberField) + 1 | eval `round(numberField) + 1` + 1 | eval ```round(numberField) + 1`` + 1` + 1 | eval ```````round(numberField) + 1```` + 1`` + 1` + 1 | eval ```````````````round(numberField) + 1```````` + 1```` + 1`` + 1` + 1 | keep ```````````````````````````````round(numberField) + 1```````````````` + 1```````` + 1```` + 1`` + 1`", - "error": [], + "query": "from a_index | eval 1 w", + "error": [ + "EVAL does not support [date_period] in expression [1 w]" + ], "warning": [] }, { - "query": "from a_index | eval 1::string", + "query": "from a_index | eval var = now() - 1 w", "error": [], "warning": [] }, { - "query": "from a_index | eval 1::string::long::double", + "query": "from a_index | eval var = dateField - 1 w", "error": [], "warning": [] }, { - "query": "from a_index | eval trim(\"23\"::double)", - "error": [ - "Argument of [trim] must be [string], found value [\"23\"::double] type [double]" - ], + "query": "from a_index | eval var = dateField - 1 W", + "error": [], "warning": [] }, { - "query": "from a_index | eval trim(23::string)", + "query": "from a_index | eval var = dateField - 1 W", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + \"2\"::long", + "query": "from a_index | eval var = dateField + 1 w", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + \"2\"", + "query": "from a_index | eval 1 w + 1 year", "error": [ - "Argument of [+] must be [number], found value [\"2\"] type [string]" + "Argument of [+] must be [date], found value [1 w] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval trim(to_double(\"23\")::string::double::long::string::double)", + "query": "from a_index | eval var = now() * 1 w", "error": [ - "Argument of [trim] must be [string], found value [to_double(\"23\")::string::double::long::string::double] type [double]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 w] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval CEIL(23::long)", - "error": [], + "query": "from a_index | eval var = now() / 1 w", + "error": [ + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 w] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval CEIL(23::unsigned_long)", - "error": [], + "query": "from a_index | eval var = now() % 1 w", + "error": [ + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 w] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval CEIL(23::int)", - "error": [], + "query": "from a_index | eval 1 mo", + "error": [ + "EVAL does not support [date_period] in expression [1 mo]" + ], "warning": [] }, { - "query": "from a_index | eval CEIL(23::integer)", - "error": [], + "query": "from a_index | eval 1 mo", + "error": [ + "EVAL does not support [date_period] in expression [1 mo]" + ], "warning": [] }, { - "query": "from a_index | eval CEIL(23::double)", + "query": "from a_index | eval var = now() - 1 mo", "error": [], "warning": [] }, { - "query": "from a_index | eval TRIM(23::string)", + "query": "from a_index | eval var = dateField - 1 mo", "error": [], "warning": [] }, { - "query": "from a_index | eval TRIM(23::text)", + "query": "from a_index | eval var = dateField - 1 MO", "error": [], "warning": [] }, { - "query": "from a_index | eval TRIM(23::keyword)", + "query": "from a_index | eval var = dateField - 1 Mo", "error": [], "warning": [] }, { - "query": "from a_index | eval true AND \"false\"::boolean", + "query": "from a_index | eval var = dateField + 1 mo", "error": [], "warning": [] }, { - "query": "from a_index | eval true AND \"false\"::bool", - "error": [], + "query": "from a_index | eval 1 mo + 1 year", + "error": [ + "Argument of [+] must be [date], found value [1 mo] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval true AND \"false\"", + "query": "from a_index | eval var = now() * 1 mo", "error": [ - "Argument of [and] must be [boolean], found value [\"false\"] type [string]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 mo] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval to_lower(trim(numberField)::string)", + "query": "from a_index | eval var = now() / 1 mo", "error": [ - "Argument of [trim] must be [string], found value [numberField] type [number]" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 mo] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval to_upper(trim(numberField)::string::string::string::string)", + "query": "from a_index | eval var = now() % 1 mo", "error": [ - "Argument of [trim] must be [string], found value [numberField] type [number]" + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 mo] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval to_lower(to_upper(trim(numberField)::string)::string)", + "query": "from a_index | eval 1 q", "error": [ - "Argument of [trim] must be [string], found value [numberField] type [number]" + "EVAL does not support [date_period] in expression [1 q]" ], "warning": [] }, { - "query": "row var = date_diff(\"month\", \"2023-12-02T11:00:00.000Z\", \"2023-12-02T11:00:00.000Z\")", - "error": [], + "query": "from a_index | eval 1 q", + "error": [ + "EVAL does not support [date_period] in expression [1 q]" + ], "warning": [] }, { - "query": "row var = date_diff(\"mm\", \"2023-12-02T11:00:00.000Z\", \"2023-12-02T11:00:00.000Z\")", + "query": "from a_index | eval var = now() - 1 q", "error": [], "warning": [] }, { - "query": "row var = date_diff(\"bogus\", \"2023-12-02T11:00:00.000Z\", \"2023-12-02T11:00:00.000Z\")", + "query": "from a_index | eval var = dateField - 1 q", "error": [], - "warning": [ - "Invalid option [\"bogus\"] for date_diff. Supported options: [\"year\", \"years\", \"yy\", \"yyyy\", \"quarter\", \"quarters\", \"qq\", \"q\", \"month\", \"months\", \"mm\", \"m\", \"dayofyear\", \"dy\", \"y\", \"day\", \"days\", \"dd\", \"d\", \"week\", \"weeks\", \"wk\", \"ww\", \"weekday\", \"weekdays\", \"dw\", \"hour\", \"hours\", \"hh\", \"minute\", \"minutes\", \"mi\", \"n\", \"second\", \"seconds\", \"ss\", \"s\", \"millisecond\", \"milliseconds\", \"ms\", \"microsecond\", \"microseconds\", \"mcs\", \"nanosecond\", \"nanoseconds\", \"ns\"]." - ] + "warning": [] }, { - "query": "from a_index | eval date_diff(stringField, \"2023-12-02T11:00:00.000Z\", \"2023-12-02T11:00:00.000Z\")", + "query": "from a_index | eval var = dateField - 1 Q", "error": [], "warning": [] }, { - "query": "from a_index | eval date_diff(\"month\", dateField, \"2023-12-02T11:00:00.000Z\")", + "query": "from a_index | eval var = dateField - 1 Q", "error": [], "warning": [] }, { - "query": "from a_index | eval date_diff(\"month\", \"2023-12-02T11:00:00.000Z\", dateField)", + "query": "from a_index | eval var = dateField + 1 q", "error": [], "warning": [] }, { - "query": "from a_index | eval date_diff(\"month\", stringField, dateField)", + "query": "from a_index | eval 1 q + 1 year", "error": [ - "Argument of [date_diff] must be [date], found value [stringField] type [string]" + "Argument of [+] must be [date], found value [1 q] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval date_diff(\"month\", dateField, stringField)", + "query": "from a_index | eval var = now() * 1 q", "error": [ - "Argument of [date_diff] must be [date], found value [stringField] type [string]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 q] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = date_diff(\"year\", dateField, dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_diff(\"year\", dateField, dateField)", - "error": [], + "query": "from a_index | eval var = now() / 1 q", + "error": [ + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 q] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval var = date_diff(\"year\", to_datetime(stringField), to_datetime(stringField))", - "error": [], + "query": "from a_index | eval var = now() % 1 q", + "error": [ + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 q] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval date_diff(numberField, stringField, stringField)", + "query": "from a_index | eval 1 y", "error": [ - "Argument of [date_diff] must be [string], found value [numberField] type [number]", - "Argument of [date_diff] must be [date], found value [stringField] type [string]", - "Argument of [date_diff] must be [date], found value [stringField] type [string]" + "EVAL does not support [date_period] in expression [1 y]" ], "warning": [] }, { - "query": "from a_index | eval date_diff(\"year\", dateField, dateField, extraArg)", + "query": "from a_index | eval 1 y", "error": [ - "Error: [date_diff] function expects exactly 3 arguments, got 4." + "EVAL does not support [date_period] in expression [1 y]" ], "warning": [] }, { - "query": "from a_index | sort date_diff(\"year\", dateField, dateField)", + "query": "from a_index | eval var = now() - 1 y", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_diff(\"year\", to_datetime(dateField), to_datetime(dateField))", + "query": "from a_index | eval var = dateField - 1 y", "error": [], "warning": [] }, { - "query": "from a_index | eval date_diff(booleanField, booleanField, booleanField)", - "error": [ - "Argument of [date_diff] must be [string], found value [booleanField] type [boolean]", - "Argument of [date_diff] must be [date], found value [booleanField] type [boolean]", - "Argument of [date_diff] must be [date], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = dateField - 1 Y", + "error": [], "warning": [] }, { - "query": "from a_index | eval date_diff(null, null, null)", + "query": "from a_index | eval var = dateField - 1 Y", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval date_diff(nullVar, nullVar, nullVar)", + "query": "from a_index | eval var = dateField + 1 y", "error": [], "warning": [] }, { - "query": "from a_index | eval date_diff(\"year\", \"2022\", \"2022\")", - "error": [], + "query": "from a_index | eval 1 y + 1 year", + "error": [ + "Argument of [+] must be [date], found value [1 y] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval date_diff(\"year\", concat(\"20\", \"22\"), concat(\"20\", \"22\"))", + "query": "from a_index | eval var = now() * 1 y", "error": [ - "Argument of [date_diff] must be [date], found value [concat(\"20\",\"22\")] type [string]", - "Argument of [date_diff] must be [date], found value [concat(\"20\",\"22\")] type [string]" + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 y] type [duration]" ], "warning": [] }, { - "query": "row var = abs(5)", - "error": [], + "query": "from a_index | eval var = now() / 1 y", + "error": [ + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 y] type [duration]" + ], "warning": [] }, { - "query": "row abs(5)", - "error": [], + "query": "from a_index | eval var = now() % 1 y", + "error": [ + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 y] type [duration]" + ], "warning": [] }, { - "query": "row var = abs(to_integer(\"a\"))", - "error": [], + "query": "from a_index | eval 1 yr", + "error": [ + "EVAL does not support [date_period] in expression [1 yr]" + ], "warning": [] }, { - "query": "row var = abs(\"a\")", + "query": "from a_index | eval 1 yr", "error": [ - "Argument of [abs] must be [number], found value [\"a\"] type [string]" + "EVAL does not support [date_period] in expression [1 yr]" ], "warning": [] }, { - "query": "from a_index | where abs(numberField) > 0", + "query": "from a_index | eval var = now() - 1 yr", "error": [], "warning": [] }, { - "query": "from a_index | where abs(stringField) > 0", - "error": [ - "Argument of [abs] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = dateField - 1 yr", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = abs(numberField)", + "query": "from a_index | eval var = dateField - 1 YR", "error": [], "warning": [] }, { - "query": "from a_index | eval abs(numberField)", + "query": "from a_index | eval var = dateField - 1 Yr", "error": [], "warning": [] }, { - "query": "from a_index | eval var = abs(to_integer(stringField))", + "query": "from a_index | eval var = dateField + 1 yr", "error": [], "warning": [] }, { - "query": "from a_index | eval abs(stringField)", + "query": "from a_index | eval 1 yr + 1 year", "error": [ - "Argument of [abs] must be [number], found value [stringField] type [string]" + "Argument of [+] must be [date], found value [1 yr] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval abs(numberField, extraArg)", + "query": "from a_index | eval var = now() * 1 yr", "error": [ - "Error: [abs] function expects exactly one argument, got 2." + "Argument of [*] must be [double], found value [now()] type [date]", + "Argument of [*] must be [double], found value [1 yr] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = abs(*)", + "query": "from a_index | eval var = now() / 1 yr", "error": [ - "Using wildcards (*) in abs is not allowed" + "Argument of [/] must be [double], found value [now()] type [date]", + "Argument of [/] must be [double], found value [1 yr] type [duration]" ], "warning": [] }, { - "query": "from a_index | sort abs(numberField)", - "error": [], + "query": "from a_index | eval var = now() % 1 yr", + "error": [ + "Argument of [%] must be [double], found value [now()] type [date]", + "Argument of [%] must be [double], found value [1 yr] type [duration]" + ], "warning": [] }, { - "query": "row var = abs(to_integer(true))", + "query": "from a_index | sort ", + "error": [ + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + ], + "warning": [] + }, + { + "query": "from a_index | sort \"field\" ", "error": [], "warning": [] }, { - "query": "row var = abs(true)", + "query": "from a_index | sort wrongField ", "error": [ - "Argument of [abs] must be [number], found value [true] type [boolean]" + "Unknown column [wrongField]" ], "warning": [] }, { - "query": "from a_index | where abs(booleanField) > 0", + "query": "from a_index | sort doubleField, ", "error": [ - "Argument of [abs] must be [number], found value [booleanField] type [boolean]" + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { - "query": "from a_index | eval var = abs(to_integer(booleanField))", + "query": "from a_index | sort doubleField, textField", "error": [], "warning": [] }, { - "query": "from a_index | eval abs(booleanField)", - "error": [ - "Argument of [abs] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | sort \"field\" desc ", + "error": [], "warning": [] }, { - "query": "from a_index | eval abs(null)", + "query": "from a_index | sort doubleField desc ", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval abs(nullVar)", - "error": [], + "query": "from a_index | sort doubleField desc nulls ", + "error": [ + "SyntaxError: missing {'first', 'last'} at ''" + ], "warning": [] }, { - "query": "row var = acos(5)", + "query": "from a_index | sort doubleField desc nulls first", "error": [], "warning": [] }, { - "query": "row acos(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = acos(to_integer(\"a\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = acos(\"a\")", + "query": "from a_index | sort doubleField desc first", "error": [ - "Argument of [acos] must be [number], found value [\"a\"] type [string]" + "SyntaxError: extraneous input 'first' expecting " ], "warning": [] }, { - "query": "from a_index | where acos(numberField) > 0", + "query": "from a_index | sort doubleField desc nulls last", "error": [], "warning": [] }, { - "query": "from a_index | where acos(stringField) > 0", + "query": "from a_index | sort doubleField desc last", "error": [ - "Argument of [acos] must be [number], found value [stringField] type [string]" + "SyntaxError: extraneous input 'last' expecting " ], "warning": [] }, { - "query": "from a_index | eval var = acos(numberField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval acos(numberField)", + "query": "from a_index | sort \"field\" asc ", "error": [], "warning": [] }, { - "query": "from a_index | eval var = acos(to_integer(stringField))", + "query": "from a_index | sort doubleField asc ", "error": [], "warning": [] }, { - "query": "from a_index | eval acos(stringField)", + "query": "from a_index | sort doubleField asc nulls ", "error": [ - "Argument of [acos] must be [number], found value [stringField] type [string]" + "SyntaxError: missing {'first', 'last'} at ''" ], "warning": [] }, { - "query": "from a_index | eval acos(numberField, extraArg)", - "error": [ - "Error: [acos] function expects exactly one argument, got 2." - ], + "query": "from a_index | sort doubleField asc nulls first", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = acos(*)", + "query": "from a_index | sort doubleField asc first", "error": [ - "Using wildcards (*) in acos is not allowed" + "SyntaxError: extraneous input 'first' expecting " ], "warning": [] }, { - "query": "from a_index | sort acos(numberField)", + "query": "from a_index | sort doubleField asc nulls last", "error": [], "warning": [] }, { - "query": "row var = acos(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = acos(true)", - "error": [ - "Argument of [acos] must be [number], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where acos(booleanField) > 0", + "query": "from a_index | sort doubleField asc last", "error": [ - "Argument of [acos] must be [number], found value [booleanField] type [boolean]" + "SyntaxError: extraneous input 'last' expecting " ], "warning": [] }, { - "query": "from a_index | eval var = acos(to_integer(booleanField))", + "query": "from a_index | sort doubleField nulls first", "error": [], "warning": [] }, { - "query": "from a_index | eval acos(booleanField)", + "query": "from a_index | sort doubleField first", "error": [ - "Argument of [acos] must be [number], found value [booleanField] type [boolean]" + "SyntaxError: extraneous input 'first' expecting " ], "warning": [] }, { - "query": "from a_index | eval acos(null)", + "query": "from a_index | sort doubleField nulls last", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval acos(nullVar)", - "error": [], + "query": "from a_index | sort doubleField last", + "error": [ + "SyntaxError: extraneous input 'last' expecting " + ], "warning": [] }, { - "query": "row var = asin(5)", + "query": "row a = 1 | stats COUNT(*) | sort `COUNT(*)`", "error": [], "warning": [] }, { - "query": "row asin(5)", + "query": "ROW a = 1 | STATS couNt(*) | SORT `couNt(*)`", "error": [], "warning": [] }, { - "query": "row var = asin(to_integer(\"a\"))", + "query": "from a_index | sort abs(doubleField) - to_long(textField) desc nulls first", "error": [], "warning": [] }, { - "query": "row var = asin(\"a\")", + "query": "from a_index | sort sin(textField)", "error": [ - "Argument of [asin] must be [number], found value [\"a\"] type [string]" + "Argument of [sin] must be [double], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | where asin(numberField) > 0", - "error": [], + "query": "from a_index | sort doubleField + textField", + "error": [ + "Argument of [+] must be [double], found value [textField] type [text]" + ], "warning": [] }, { - "query": "from a_index | where asin(stringField) > 0", + "query": "from a_index | enrich", "error": [ - "Argument of [asin] must be [number], found value [stringField] type [string]" + "SyntaxError: missing ENRICH_POLICY_NAME at ''" ], "warning": [] }, { - "query": "from a_index | eval var = asin(numberField)", - "error": [], + "query": "from a_index | enrich _", + "error": [ + "Unknown policy [_]" + ], "warning": [] }, { - "query": "from a_index | eval asin(numberField)", - "error": [], + "query": "from a_index | enrich _:", + "error": [ + "SyntaxError: token recognition error at: ':'", + "Unknown policy [_]" + ], "warning": [] }, { - "query": "from a_index | eval var = asin(to_integer(stringField))", - "error": [], + "query": "from a_index | enrich _:policy", + "error": [ + "Unrecognized value [_] for ENRICH, mode needs to be one of [_ANY, _COORDINATOR, _REMOTE]" + ], "warning": [] }, { - "query": "from a_index | eval asin(stringField)", + "query": "from a_index | enrich :policy", "error": [ - "Argument of [asin] must be [number], found value [stringField] type [string]" + "SyntaxError: token recognition error at: ':'" ], "warning": [] }, { - "query": "from a_index | eval asin(numberField, extraArg)", + "query": "from a_index | enrich any:", "error": [ - "Error: [asin] function expects exactly one argument, got 2." + "SyntaxError: token recognition error at: ':'", + "Unknown policy [any]" ], "warning": [] }, { - "query": "from a_index | eval var = asin(*)", + "query": "from a_index | enrich _any:", "error": [ - "Using wildcards (*) in asin is not allowed" + "SyntaxError: token recognition error at: ':'", + "Unknown policy [_any]" ], "warning": [] }, { - "query": "from a_index | sort asin(numberField)", - "error": [], + "query": "from a_index | enrich any:policy", + "error": [ + "Unrecognized value [any] for ENRICH, mode needs to be one of [_ANY, _COORDINATOR, _REMOTE]" + ], "warning": [] }, { - "query": "row var = asin(to_integer(true))", + "query": "from a_index | enrich policy ", "error": [], "warning": [] }, { - "query": "row var = asin(true)", + "query": "from a_index | enrich `this``is fine`", "error": [ - "Argument of [asin] must be [number], found value [true] type [boolean]" + "SyntaxError: extraneous input 'fine`' expecting ", + "Unknown policy [`this``is]" ], "warning": [] }, { - "query": "from a_index | where asin(booleanField) > 0", + "query": "from a_index | enrich this is fine", "error": [ - "Argument of [asin] must be [number], found value [booleanField] type [boolean]" + "SyntaxError: mismatched input 'is' expecting ", + "Unknown policy [this]" ], "warning": [] }, { - "query": "from a_index | eval var = asin(to_integer(booleanField))", + "query": "from a_index | enrich _any:policy ", "error": [], "warning": [] }, { - "query": "from a_index | eval asin(booleanField)", + "query": "from a_index | enrich _any : policy ", "error": [ - "Argument of [asin] must be [number], found value [booleanField] type [boolean]" + "SyntaxError: token recognition error at: ':'", + "SyntaxError: extraneous input 'policy' expecting ", + "Unknown policy [_any]" ], "warning": [] }, { - "query": "from a_index | eval asin(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval asin(nullVar)", - "error": [], + "query": "from a_index | enrich _any: policy ", + "error": [ + "SyntaxError: token recognition error at: ':'", + "SyntaxError: extraneous input 'policy' expecting ", + "Unknown policy [_any]" + ], "warning": [] }, { - "query": "row var = atan(5)", + "query": "from a_index | enrich _any:policy ", "error": [], "warning": [] }, { - "query": "row atan(5)", + "query": "from a_index | enrich _ANY:policy ", "error": [], "warning": [] }, { - "query": "row var = atan(to_integer(\"a\"))", + "query": "from a_index | enrich _coordinator:policy ", "error": [], "warning": [] }, { - "query": "row var = atan(\"a\")", + "query": "from a_index | enrich _coordinator : policy ", "error": [ - "Argument of [atan] must be [number], found value [\"a\"] type [string]" + "SyntaxError: token recognition error at: ':'", + "SyntaxError: extraneous input 'policy' expecting ", + "Unknown policy [_coordinator]" ], "warning": [] }, { - "query": "from a_index | where atan(numberField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where atan(stringField) > 0", + "query": "from a_index | enrich _coordinator: policy ", "error": [ - "Argument of [atan] must be [number], found value [stringField] type [string]" + "SyntaxError: token recognition error at: ':'", + "SyntaxError: extraneous input 'policy' expecting ", + "Unknown policy [_coordinator]" ], "warning": [] }, { - "query": "from a_index | eval var = atan(numberField)", + "query": "from a_index | enrich _coordinator:policy ", "error": [], "warning": [] }, { - "query": "from a_index | eval atan(numberField)", + "query": "from a_index | enrich _COORDINATOR:policy ", "error": [], "warning": [] }, { - "query": "from a_index | eval var = atan(to_integer(stringField))", + "query": "from a_index | enrich _remote:policy ", "error": [], "warning": [] }, { - "query": "from a_index | eval atan(stringField)", - "error": [ - "Argument of [atan] must be [number], found value [stringField] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | eval atan(numberField, extraArg)", + "query": "from a_index | enrich _remote : policy ", "error": [ - "Error: [atan] function expects exactly one argument, got 2." + "SyntaxError: token recognition error at: ':'", + "SyntaxError: extraneous input 'policy' expecting ", + "Unknown policy [_remote]" ], "warning": [] }, { - "query": "from a_index | eval var = atan(*)", + "query": "from a_index | enrich _remote: policy ", "error": [ - "Using wildcards (*) in atan is not allowed" + "SyntaxError: token recognition error at: ':'", + "SyntaxError: extraneous input 'policy' expecting ", + "Unknown policy [_remote]" ], "warning": [] }, { - "query": "from a_index | sort atan(numberField)", + "query": "from a_index | enrich _remote:policy ", "error": [], "warning": [] }, { - "query": "row var = atan(to_integer(true))", + "query": "from a_index | enrich _REMOTE:policy ", "error": [], "warning": [] }, { - "query": "row var = atan(true)", + "query": "from a_index | enrich _unknown:policy", "error": [ - "Argument of [atan] must be [number], found value [true] type [boolean]" + "Unrecognized value [_unknown] for ENRICH, mode needs to be one of [_ANY, _COORDINATOR, _REMOTE]" ], "warning": [] }, { - "query": "from a_index | where atan(booleanField) > 0", + "query": "from a_index |enrich missing-policy ", "error": [ - "Argument of [atan] must be [number], found value [booleanField] type [boolean]" + "Unknown policy [missing-policy]" ], "warning": [] }, { - "query": "from a_index | eval var = atan(to_integer(booleanField))", - "error": [], + "query": "from a_index |enrich policy on ", + "error": [ + "SyntaxError: missing ID_PATTERN at ''" + ], "warning": [] }, { - "query": "from a_index | eval atan(booleanField)", + "query": "from a_index | enrich policy on b ", "error": [ - "Argument of [atan] must be [number], found value [booleanField] type [boolean]" + "Unknown column [b]" ], "warning": [] }, { - "query": "from a_index | eval atan(null)", - "error": [], + "query": "from a_index | enrich policy on `this``is fine`", + "error": [ + "Unknown column [this`is fine]" + ], "warning": [] }, { - "query": "row nullVar = null | eval atan(nullVar)", - "error": [], + "query": "from a_index | enrich policy on this is fine", + "error": [ + "SyntaxError: mismatched input 'is' expecting ", + "Unknown column [this]" + ], "warning": [] }, { - "query": "row var = atan2(5, 5)", - "error": [], + "query": "from a_index | enrich policy on textField with ", + "error": [ + "SyntaxError: mismatched input '' expecting ID_PATTERN" + ], "warning": [] }, { - "query": "row atan2(5, 5)", - "error": [], + "query": "from a_index | enrich policy on textField with var0 ", + "error": [ + "Unknown column [var0]" + ], "warning": [] }, { - "query": "row var = atan2(to_integer(\"a\"), to_integer(\"a\"))", - "error": [], + "query": "from a_index |enrich policy on doubleField with var0 = ", + "error": [ + "SyntaxError: missing ID_PATTERN at ''", + "Unknown column [var0]" + ], "warning": [] }, { - "query": "row var = atan2(\"a\", \"a\")", + "query": "from a_index | enrich policy on textField with var0 = c ", "error": [ - "Argument of [atan2] must be [number], found value [\"a\"] type [string]", - "Argument of [atan2] must be [number], found value [\"a\"] type [string]" + "Unknown column [var0]", + "Unknown column [c]" ], "warning": [] }, { - "query": "from a_index | where atan2(numberField, numberField) > 0", - "error": [], + "query": "from a_index |enrich policy on doubleField with var0 = , ", + "error": [ + "SyntaxError: missing ID_PATTERN at ','", + "SyntaxError: mismatched input '' expecting ID_PATTERN", + "Unknown column [var0]" + ], "warning": [] }, { - "query": "from a_index | where atan2(stringField, stringField) > 0", + "query": "from a_index | enrich policy on textField with var0 = otherField, var1 ", "error": [ - "Argument of [atan2] must be [number], found value [stringField] type [string]", - "Argument of [atan2] must be [number], found value [stringField] type [string]" + "Unknown column [var1]" ], "warning": [] }, { - "query": "from a_index | eval var = atan2(numberField, numberField)", + "query": "from a_index | enrich policy on textField with var0 = otherField ", "error": [], "warning": [] }, { - "query": "from a_index | eval atan2(numberField, numberField)", + "query": "from a_index | enrich policy on textField with var0 = otherField, yetAnotherField ", "error": [], "warning": [] }, { - "query": "from a_index | eval var = atan2(to_integer(stringField), to_integer(stringField))", + "query": "from a_index |enrich policy on doubleField with var0 = otherField, var1 = ", + "error": [ + "SyntaxError: missing ID_PATTERN at ''", + "Unknown column [var1]" + ], + "warning": [] + }, + { + "query": "from a_index | enrich policy on textField with var0 = otherField, var1 = yetAnotherField", "error": [], "warning": [] }, { - "query": "from a_index | eval atan2(stringField, stringField)", - "error": [ - "Argument of [atan2] must be [number], found value [stringField] type [string]", - "Argument of [atan2] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | enrich policy on textField with var0 = otherField, `this``is fine` = yetAnotherField", + "error": [], "warning": [] }, { - "query": "from a_index | eval atan2(numberField, numberField, extraArg)", + "query": "from a_index | enrich policy with ", "error": [ - "Error: [atan2] function expects exactly 2 arguments, got 3." + "SyntaxError: mismatched input '' expecting ID_PATTERN" ], "warning": [] }, { - "query": "from a_index | sort atan2(numberField, numberField)", + "query": "from a_index | enrich policy with otherField", "error": [], "warning": [] }, { - "query": "row var = atan2(to_integer(true), to_integer(true))", + "query": "from a_index | enrich policy | eval otherField", "error": [], "warning": [] }, { - "query": "row var = atan2(true, true)", - "error": [ - "Argument of [atan2] must be [number], found value [true] type [boolean]", - "Argument of [atan2] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | enrich policy with var0 = otherField | eval var0", + "error": [], "warning": [] }, { - "query": "from a_index | where atan2(booleanField, booleanField) > 0", + "query": "from a_index | enrich my-pol*", "error": [ - "Argument of [atan2] must be [number], found value [booleanField] type [boolean]", - "Argument of [atan2] must be [number], found value [booleanField] type [boolean]" + "Using wildcards (*) in ENRICH is not allowed [my-pol*]" ], "warning": [] }, { - "query": "from a_index | eval var = atan2(to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval textField = 5", "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan2(booleanField, booleanField)", - "error": [ - "Argument of [atan2] must be [number], found value [booleanField] type [boolean]", - "Argument of [atan2] must be [number], found value [booleanField] type [boolean]" - ], - "warning": [] + "warning": [ + "Column [textField] of type text has been overwritten as new type: integer" + ] }, { - "query": "from a_index | eval atan2(null, null)", + "query": "from a_index | eval doubleField = \"5\"", "error": [], - "warning": [] + "warning": [ + "Column [doubleField] of type double has been overwritten as new type: string" + ] }, { - "query": "row nullVar = null | eval atan2(nullVar, nullVar)", + "query": "from a_index | eval round(doubleField) + 1 | eval `round(doubleField) + 1` + 1 | keep ```round(doubleField) + 1`` + 1`", "error": [], "warning": [] }, { - "query": "row var = case(true, \"a\")", + "query": "from a_index | eval round(doubleField) + 1 | eval `round(doubleField) + 1` + 1 | eval ```round(doubleField) + 1`` + 1` + 1 | keep ```````round(doubleField) + 1```` + 1`` + 1`", "error": [], "warning": [] }, { - "query": "row case(true, \"a\")", + "query": "from a_index | eval round(doubleField) + 1 | eval `round(doubleField) + 1` + 1 | eval ```round(doubleField) + 1`` + 1` + 1 | eval ```````round(doubleField) + 1```` + 1`` + 1` + 1 | keep ```````````````round(doubleField) + 1```````` + 1```` + 1`` + 1`", "error": [], "warning": [] }, { - "query": "from a_index | eval var = case(booleanField, stringField)", + "query": "from a_index | eval round(doubleField) + 1 | eval `round(doubleField) + 1` + 1 | eval ```round(doubleField) + 1`` + 1` + 1 | eval ```````round(doubleField) + 1```` + 1`` + 1` + 1 | eval ```````````````round(doubleField) + 1```````` + 1```` + 1`` + 1` + 1 | keep ```````````````````````````````round(doubleField) + 1```````````````` + 1```````` + 1```` + 1`` + 1`", "error": [], "warning": [] }, { - "query": "from a_index | eval case(booleanField, stringField)", + "query": "from a_index | eval 1::keyword", "error": [], "warning": [] }, { - "query": "from a_index | sort case(booleanField, stringField)", + "query": "from a_index | eval 1::keyword::long::double", "error": [], "warning": [] }, { - "query": "row var = case(to_cartesianpoint(\"POINT (30 10)\"), true)", + "query": "from a_index | eval trim(\"23\"::double)", "error": [ - "Argument of [case] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + "Argument of [trim] must be [keyword], found value [\"23\"::double] type [double]" ], "warning": [] }, { - "query": "from a_index | eval case(null, null)", + "query": "from a_index | eval trim(23::keyword)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval case(nullVar, nullVar)", + "query": "from a_index | eval 1 + \"2\"::long", "error": [], "warning": [] }, { - "query": "row var = ceil(5)", + "query": "from a_index | eval 1 + \"2\"::LONG", "error": [], "warning": [] }, { - "query": "row ceil(5)", + "query": "from a_index | eval 1 + \"2\"::Long", "error": [], "warning": [] }, { - "query": "row var = ceil(to_integer(\"a\"))", + "query": "from a_index | eval 1 + \"2\"::LoNg", "error": [], "warning": [] }, { - "query": "row var = ceil(\"a\")", + "query": "from a_index | eval 1 + \"2\"", + "error": [ + "Argument of [+] must be [date_period], found value [1] type [integer]" + ], + "warning": [] + }, + { + "query": "from a_index | eval trim(to_double(\"23\")::keyword::double::long::keyword::double)", "error": [ - "Argument of [ceil] must be [number], found value [\"a\"] type [string]" + "Argument of [trim] must be [keyword], found value [to_double(\"23\")::keyword::double::long::keyword::double] type [double]" ], "warning": [] }, { - "query": "from a_index | where ceil(numberField) > 0", + "query": "from a_index | eval CEIL(23::long)", "error": [], "warning": [] }, { - "query": "from a_index | where ceil(stringField) > 0", - "error": [ - "Argument of [ceil] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval CEIL(23::unsigned_long)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = ceil(numberField)", + "query": "from a_index | eval CEIL(23::int)", "error": [], "warning": [] }, { - "query": "from a_index | eval ceil(numberField)", + "query": "from a_index | eval CEIL(23::integer)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = ceil(to_integer(stringField))", + "query": "from a_index | eval CEIL(23::Integer)", "error": [], "warning": [] }, { - "query": "from a_index | eval ceil(stringField)", - "error": [ - "Argument of [ceil] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval CEIL(23::double)", + "error": [], "warning": [] }, { - "query": "from a_index | eval ceil(numberField, extraArg)", - "error": [ - "Error: [ceil] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval CEIL(23::DOUBLE)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = ceil(*)", + "query": "from a_index | eval CEIL(23::doubla)", "error": [ - "Using wildcards (*) in ceil is not allowed" + "Argument of [ceil] must be [double], found value [23::doubla] type [doubla]" ], "warning": [] }, { - "query": "from a_index | sort ceil(numberField)", + "query": "from a_index | eval TRIM(23::keyword)", "error": [], "warning": [] }, { - "query": "row var = ceil(to_integer(true))", + "query": "from a_index | eval TRIM(23::text)", "error": [], "warning": [] }, { - "query": "row var = ceil(true)", + "query": "from a_index | eval TRIM(23::keyword)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval true AND \"false\"::boolean", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval true AND \"false\"::bool", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval true AND \"false\"", "error": [ - "Argument of [ceil] must be [number], found value [true] type [boolean]" + "Argument of [and] must be [boolean], found value [\"false\"] type [string]" ], "warning": [] }, { - "query": "from a_index | where ceil(booleanField) > 0", + "query": "from a_index | eval to_lower(trim(doubleField)::keyword)", "error": [ - "Argument of [ceil] must be [number], found value [booleanField] type [boolean]" + "Argument of [trim] must be [keyword], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | eval var = ceil(to_integer(booleanField))", - "error": [], + "query": "from a_index | eval to_upper(trim(doubleField)::keyword::keyword::keyword::keyword)", + "error": [ + "Argument of [trim] must be [keyword], found value [doubleField] type [double]" + ], "warning": [] }, { - "query": "from a_index | eval ceil(booleanField)", + "query": "from a_index | eval to_lower(to_upper(trim(doubleField)::keyword)::keyword)", "error": [ - "Argument of [ceil] must be [number], found value [booleanField] type [boolean]" + "Argument of [trim] must be [keyword], found value [doubleField] type [double]" ], "warning": [] }, { - "query": "from a_index | eval ceil(null)", + "query": "row var = abs(5.5)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval ceil(nullVar)", + "query": "row abs(5.5)", "error": [], "warning": [] }, { - "query": "row var = cidr_match(to_ip(\"127.0.0.1\"), \"a\")", + "query": "row var = abs(to_double(true))", "error": [], "warning": [] }, { - "query": "row cidr_match(to_ip(\"127.0.0.1\"), \"a\")", + "query": "row var = abs(5)", "error": [], "warning": [] }, { - "query": "row var = cidr_match(to_ip(\"a\"), to_string(\"a\"))", + "query": "row abs(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = abs(to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = cidr_match(\"a\", 5)", + "query": "row var = abs(true)", "error": [ - "Argument of [cidr_match] must be [ip], found value [\"a\"] type [string]", - "Argument of [cidr_match] must be [string], found value [5] type [number]" + "Argument of [abs] must be [double], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = cidr_match(ipField, stringField)", + "query": "from a_index | where abs(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval cidr_match(ipField, stringField)", - "error": [], + "query": "from a_index | where abs(booleanField) > 0", + "error": [ + "Argument of [abs] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = cidr_match(to_ip(stringField), to_string(stringField))", + "query": "from a_index | where abs(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval cidr_match(stringField, numberField)", - "error": [ - "Argument of [cidr_match] must be [ip], found value [stringField] type [string]", - "Argument of [cidr_match] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | where abs(longField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | sort cidr_match(ipField, stringField)", + "query": "from a_index | where abs(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = cidr_match(to_ip(to_ip(\"127.0.0.1\")), to_string(true))", + "query": "from a_index | eval var = abs(doubleField)", "error": [], "warning": [] }, { - "query": "row var = cidr_match(true, true)", - "error": [ - "Argument of [cidr_match] must be [ip], found value [true] type [boolean]", - "Argument of [cidr_match] must be [string], found value [true] type [boolean]" - ], + "query": "from a_index | eval abs(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = cidr_match(to_ip(ipField), to_string(booleanField))", + "query": "from a_index | eval var = abs(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval cidr_match(booleanField, booleanField)", + "query": "from a_index | eval abs(booleanField)", "error": [ - "Argument of [cidr_match] must be [ip], found value [booleanField] type [boolean]", - "Argument of [cidr_match] must be [string], found value [booleanField] type [boolean]" + "Argument of [abs] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval cidr_match(null, null)", - "error": [], + "query": "from a_index | eval var = abs(*)", + "error": [ + "Using wildcards (*) in abs is not allowed" + ], "warning": [] }, { - "query": "row nullVar = null | eval cidr_match(nullVar, nullVar)", + "query": "from a_index | eval var = abs(integerField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(5)", + "query": "from a_index | eval abs(integerField)", "error": [], "warning": [] }, { - "query": "row coalesce(5)", + "query": "from a_index | eval var = abs(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_integer(true))", + "query": "from a_index | eval var = abs(longField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(5, 5)", + "query": "from a_index | eval abs(longField)", "error": [], "warning": [] }, { - "query": "row coalesce(5, 5)", + "query": "from a_index | eval var = abs(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_integer(true), to_integer(true))", + "query": "from a_index | eval abs(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(now())", - "error": [], + "query": "from a_index | eval abs(doubleField, extraArg)", + "error": [ + "Error: [abs] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "row coalesce(now())", + "query": "from a_index | sort abs(doubleField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_datetime(now()))", + "query": "from a_index | eval abs(null)", "error": [], "warning": [] }, { - "query": "row var = coalesce(now(), now())", + "query": "row nullVar = null | eval abs(nullVar)", "error": [], "warning": [] }, { - "query": "row coalesce(now(), now())", + "query": "row var = acos(5.5)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_datetime(now()), to_datetime(now()))", + "query": "row acos(5.5)", "error": [], "warning": [] }, { - "query": "row var = coalesce(\"a\")", + "query": "row var = acos(to_double(true))", "error": [], "warning": [] }, { - "query": "row coalesce(\"a\")", + "query": "row var = acos(5)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_string(true))", + "query": "row acos(5)", "error": [], "warning": [] }, { - "query": "row var = coalesce(\"a\", \"a\")", + "query": "row var = acos(to_integer(true))", "error": [], "warning": [] }, { - "query": "row coalesce(\"a\", \"a\")", - "error": [], + "query": "row var = acos(true)", + "error": [ + "Argument of [acos] must be [double], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row var = coalesce(to_string(true), to_string(true))", + "query": "from a_index | where acos(doubleField) > 0", "error": [], "warning": [] }, { - "query": "row var = coalesce(true)", - "error": [], + "query": "from a_index | where acos(booleanField) > 0", + "error": [ + "Argument of [acos] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row coalesce(true)", + "query": "from a_index | where acos(integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_boolean(true))", + "query": "from a_index | where acos(longField) > 0", "error": [], "warning": [] }, { - "query": "row var = coalesce(true, true)", + "query": "from a_index | where acos(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row coalesce(true, true)", + "query": "from a_index | eval var = acos(doubleField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_boolean(true), to_boolean(true))", + "query": "from a_index | eval acos(doubleField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval var = acos(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row coalesce(to_ip(\"127.0.0.1\"))", - "error": [], + "query": "from a_index | eval acos(booleanField)", + "error": [ + "Argument of [acos] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = coalesce(to_ip(to_ip(\"127.0.0.1\")))", - "error": [], + "query": "from a_index | eval var = acos(*)", + "error": [ + "Using wildcards (*) in acos is not allowed" + ], "warning": [] }, { - "query": "row var = coalesce(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval var = acos(integerField)", "error": [], "warning": [] }, { - "query": "row coalesce(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval acos(integerField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_ip(to_ip(\"127.0.0.1\")), to_ip(to_ip(\"127.0.0.1\")))", + "query": "from a_index | eval var = acos(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = acos(longField)", "error": [], "warning": [] }, { - "query": "row coalesce(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval acos(longField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = acos(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval acos(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row coalesce(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | eval acos(doubleField, extraArg)", + "error": [ + "Error: [acos] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "row var = coalesce(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | sort acos(doubleField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval acos(null)", "error": [], "warning": [] }, { - "query": "row coalesce(to_cartesianshape(\"POINT (30 10)\"))", + "query": "row nullVar = null | eval acos(nullVar)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row var = asin(5.5)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "row asin(5.5)", "error": [], "warning": [] }, { - "query": "row coalesce(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "row var = asin(to_double(true))", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row var = asin(5)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_geopoint(\"POINT (30 10)\"))", + "query": "row asin(5)", "error": [], "warning": [] }, { - "query": "row coalesce(to_geopoint(\"POINT (30 10)\"))", + "query": "row var = asin(to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_geopoint(to_geopoint(\"POINT (30 10)\")))", - "error": [], + "query": "row var = asin(true)", + "error": [ + "Argument of [asin] must be [double], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row var = coalesce(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | where asin(doubleField) > 0", "error": [], "warning": [] }, { - "query": "row coalesce(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | where asin(booleanField) > 0", + "error": [ + "Argument of [asin] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = coalesce(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | where asin(integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | where asin(longField) > 0", "error": [], "warning": [] }, { - "query": "row coalesce(to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | where asin(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = asin(doubleField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval asin(doubleField)", "error": [], "warning": [] }, { - "query": "row coalesce(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = asin(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", - "error": [], + "query": "from a_index | eval asin(booleanField)", + "error": [ + "Argument of [asin] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = coalesce(to_version(\"1.0.0\"))", - "error": [], + "query": "from a_index | eval var = asin(*)", + "error": [ + "Using wildcards (*) in asin is not allowed" + ], "warning": [] }, { - "query": "row coalesce(to_version(\"1.0.0\"))", + "query": "from a_index | eval var = asin(integerField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_version(\"a\"))", + "query": "from a_index | eval asin(integerField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", + "query": "from a_index | eval var = asin(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row coalesce(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", + "query": "from a_index | eval var = asin(longField)", "error": [], "warning": [] }, { - "query": "row var = coalesce(to_version(\"a\"), to_version(\"a\"))", + "query": "from a_index | eval asin(longField)", "error": [], "warning": [] }, { - "query": "from a_index | where coalesce(numberField) > 0", + "query": "from a_index | eval var = asin(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | where coalesce(numberField, numberField) > 0", + "query": "from a_index | eval asin(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(coalesce(stringField)) > 0", - "error": [], + "query": "from a_index | eval asin(doubleField, extraArg)", + "error": [ + "Error: [asin] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "from a_index | where length(coalesce(stringField, stringField)) > 0", + "query": "from a_index | sort asin(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(numberField)", + "query": "from a_index | eval asin(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(numberField)", + "query": "row nullVar = null | eval asin(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_integer(booleanField))", + "query": "row var = atan(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(numberField, numberField)", + "query": "row atan(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(numberField, numberField)", + "query": "row var = atan(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_integer(booleanField), to_integer(booleanField))", + "query": "row var = atan(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(dateField)", + "query": "row atan(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(dateField)", + "query": "row var = atan(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_datetime(dateField))", - "error": [], + "query": "row var = atan(true)", + "error": [ + "Argument of [atan] must be [double], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = coalesce(dateField, dateField)", + "query": "from a_index | where atan(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(dateField, dateField)", - "error": [], + "query": "from a_index | where atan(booleanField) > 0", + "error": [ + "Argument of [atan] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_datetime(dateField), to_datetime(dateField))", + "query": "from a_index | where atan(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(stringField)", + "query": "from a_index | where atan(longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(stringField)", + "query": "from a_index | where atan(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_string(booleanField))", + "query": "from a_index | eval var = atan(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(stringField, stringField)", + "query": "from a_index | eval atan(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(stringField, stringField)", + "query": "from a_index | eval var = atan(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_string(booleanField), to_string(booleanField))", - "error": [], + "query": "from a_index | eval atan(booleanField)", + "error": [ + "Argument of [atan] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = coalesce(booleanField)", - "error": [], + "query": "from a_index | eval var = atan(*)", + "error": [ + "Using wildcards (*) in atan is not allowed" + ], "warning": [] }, { - "query": "from a_index | eval coalesce(booleanField)", + "query": "from a_index | eval var = atan(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_boolean(booleanField))", + "query": "from a_index | eval atan(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(booleanField, booleanField)", + "query": "from a_index | eval var = atan(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(booleanField, booleanField)", + "query": "from a_index | eval var = atan(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_boolean(booleanField), to_boolean(booleanField))", + "query": "from a_index | eval atan(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(ipField)", + "query": "from a_index | eval var = atan(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(ipField)", + "query": "from a_index | eval atan(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_ip(ipField))", - "error": [], + "query": "from a_index | eval atan(doubleField, extraArg)", + "error": [ + "Error: [atan] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "from a_index | eval var = coalesce(ipField, ipField)", + "query": "from a_index | sort atan(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(ipField, ipField)", + "query": "from a_index | eval atan(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_ip(ipField), to_ip(ipField))", + "query": "row nullVar = null | eval atan(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(cartesianPointField)", + "query": "row var = atan2(5.5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(cartesianPointField)", + "query": "row atan2(5.5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_cartesianpoint(cartesianPointField))", + "query": "row var = atan2(to_double(true), to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(cartesianPointField, cartesianPointField)", + "query": "row var = atan2(5.5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(cartesianPointField, cartesianPointField)", + "query": "row atan2(5.5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "query": "row var = atan2(to_double(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(cartesianShapeField)", + "query": "row var = atan2(to_double(true), 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(cartesianShapeField)", + "query": "row var = atan2(5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_cartesianshape(cartesianPointField))", + "query": "row atan2(5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(cartesianShapeField, cartesianShapeField)", + "query": "row var = atan2(to_integer(true), to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(cartesianShapeField, cartesianShapeField)", + "query": "row var = atan2(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "query": "row atan2(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(geoPointField)", + "query": "row var = atan2(to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(geoPointField)", + "query": "row var = atan2(to_integer(true), 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_geopoint(geoPointField))", + "query": "row var = atan2(5, to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(geoPointField, geoPointField)", + "query": "row var = atan2(5, to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(geoPointField, geoPointField)", - "error": [], + "query": "row var = atan2(true, true)", + "error": [ + "Argument of [atan2] must be [double], found value [true] type [boolean]", + "Argument of [atan2] must be [double], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "query": "from a_index | where atan2(doubleField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(geoShapeField)", - "error": [], + "query": "from a_index | where atan2(booleanField, booleanField) > 0", + "error": [ + "Argument of [atan2] must be [double], found value [booleanField] type [boolean]", + "Argument of [atan2] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval coalesce(geoShapeField)", + "query": "from a_index | where atan2(doubleField, integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_geoshape(geoPointField))", + "query": "from a_index | where atan2(doubleField, longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(geoShapeField, geoShapeField)", + "query": "from a_index | where atan2(doubleField, unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(geoShapeField, geoShapeField)", + "query": "from a_index | where atan2(integerField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_geoshape(geoPointField), to_geoshape(geoPointField))", + "query": "from a_index | where atan2(integerField, integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(versionField)", + "query": "from a_index | where atan2(integerField, longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(versionField)", + "query": "from a_index | where atan2(integerField, unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_version(stringField))", + "query": "from a_index | where atan2(longField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(versionField, versionField)", + "query": "from a_index | where atan2(longField, integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(versionField, versionField)", + "query": "from a_index | where atan2(longField, longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = coalesce(to_version(stringField), to_version(stringField))", + "query": "from a_index | where atan2(longField, unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | sort coalesce(numberField)", + "query": "from a_index | where atan2(unsignedLongField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(null)", + "query": "from a_index | where atan2(unsignedLongField, integerField) > 0", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval coalesce(nullVar)", + "query": "from a_index | where atan2(unsignedLongField, longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | sort coalesce(booleanField)", + "query": "from a_index | where atan2(unsignedLongField, unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = concat(\"a\", \"a\")", + "query": "from a_index | eval var = atan2(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "row concat(\"a\", \"a\")", + "query": "from a_index | eval atan2(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "row var = concat(to_string(\"a\"), to_string(\"a\"))", + "query": "from a_index | eval var = atan2(to_double(booleanField), to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = concat(5, 5)", + "query": "from a_index | eval atan2(booleanField, booleanField)", "error": [ - "Argument of [concat] must be [string], found value [5] type [number]", - "Argument of [concat] must be [string], found value [5] type [number]" + "Argument of [atan2] must be [double], found value [booleanField] type [boolean]", + "Argument of [atan2] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where length(concat(stringField, stringField)) > 0", + "query": "from a_index | eval var = atan2(doubleField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(concat(numberField, numberField)) > 0", - "error": [ - "Argument of [concat] must be [string], found value [numberField] type [number]", - "Argument of [concat] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval atan2(doubleField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = concat(stringField, stringField)", + "query": "from a_index | eval var = atan2(to_double(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval concat(stringField, stringField)", + "query": "from a_index | eval var = atan2(doubleField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = concat(to_string(stringField), to_string(stringField))", + "query": "from a_index | eval atan2(doubleField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval concat(numberField, numberField)", - "error": [ - "Argument of [concat] must be [string], found value [numberField] type [number]", - "Argument of [concat] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval var = atan2(to_double(booleanField), longField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort concat(stringField, stringField)", + "query": "from a_index | eval var = atan2(doubleField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = concat(to_string(true), to_string(true))", + "query": "from a_index | eval atan2(doubleField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = concat(true, true)", - "error": [ - "Argument of [concat] must be [string], found value [true] type [boolean]", - "Argument of [concat] must be [string], found value [true] type [boolean]" - ], + "query": "from a_index | eval var = atan2(to_double(booleanField), unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | where length(concat(booleanField, booleanField)) > 0", - "error": [ - "Argument of [concat] must be [string], found value [booleanField] type [boolean]", - "Argument of [concat] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = atan2(integerField, doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = concat(to_string(booleanField), to_string(booleanField))", + "query": "from a_index | eval atan2(integerField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval concat(booleanField, booleanField)", - "error": [ - "Argument of [concat] must be [string], found value [booleanField] type [boolean]", - "Argument of [concat] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = atan2(to_integer(booleanField), to_double(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval concat(null, null)", + "query": "from a_index | eval var = atan2(integerField, integerField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval concat(nullVar, nullVar)", + "query": "from a_index | eval atan2(integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = cos(5)", + "query": "from a_index | eval var = atan2(to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row cos(5)", + "query": "from a_index | eval var = atan2(integerField, longField)", "error": [], "warning": [] }, { - "query": "row var = cos(to_integer(\"a\"))", + "query": "from a_index | eval atan2(integerField, longField)", "error": [], "warning": [] }, { - "query": "row var = cos(\"a\")", - "error": [ - "Argument of [cos] must be [number], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval var = atan2(to_integer(booleanField), longField)", + "error": [], "warning": [] }, { - "query": "from a_index | where cos(numberField) > 0", + "query": "from a_index | eval var = atan2(integerField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | where cos(stringField) > 0", - "error": [ - "Argument of [cos] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval atan2(integerField, unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = cos(numberField)", + "query": "from a_index | eval var = atan2(to_integer(booleanField), unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval cos(numberField)", + "query": "from a_index | eval var = atan2(longField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = cos(to_integer(stringField))", + "query": "from a_index | eval atan2(longField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval cos(stringField)", - "error": [ - "Argument of [cos] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = atan2(longField, to_double(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval cos(numberField, extraArg)", - "error": [ - "Error: [cos] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = atan2(longField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = cos(*)", - "error": [ - "Using wildcards (*) in cos is not allowed" - ], + "query": "from a_index | eval atan2(longField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort cos(numberField)", + "query": "from a_index | eval var = atan2(longField, to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = cos(to_integer(true))", + "query": "from a_index | eval var = atan2(longField, longField)", "error": [], "warning": [] }, { - "query": "row var = cos(true)", - "error": [ - "Argument of [cos] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | eval atan2(longField, longField)", + "error": [], "warning": [] }, { - "query": "from a_index | where cos(booleanField) > 0", - "error": [ - "Argument of [cos] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = atan2(longField, unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = cos(to_integer(booleanField))", + "query": "from a_index | eval atan2(longField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval cos(booleanField)", - "error": [ - "Argument of [cos] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = atan2(unsignedLongField, doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval cos(null)", + "query": "from a_index | eval atan2(unsignedLongField, doubleField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval cos(nullVar)", + "query": "from a_index | eval var = atan2(unsignedLongField, to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = cosh(5)", + "query": "from a_index | eval var = atan2(unsignedLongField, integerField)", "error": [], "warning": [] }, { - "query": "row cosh(5)", + "query": "from a_index | eval atan2(unsignedLongField, integerField)", "error": [], "warning": [] }, { - "query": "row var = cosh(to_integer(\"a\"))", + "query": "from a_index | eval var = atan2(unsignedLongField, to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = cosh(\"a\")", - "error": [ - "Argument of [cosh] must be [number], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval var = atan2(unsignedLongField, longField)", + "error": [], "warning": [] }, { - "query": "from a_index | where cosh(numberField) > 0", + "query": "from a_index | eval atan2(unsignedLongField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | where cosh(stringField) > 0", - "error": [ - "Argument of [cosh] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = atan2(unsignedLongField, unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = cosh(numberField)", + "query": "from a_index | eval atan2(unsignedLongField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval cosh(numberField)", - "error": [], + "query": "from a_index | eval atan2(doubleField, doubleField, extraArg)", + "error": [ + "Error: [atan2] function expects exactly 2 arguments, got 3." + ], "warning": [] }, { - "query": "from a_index | eval var = cosh(to_integer(stringField))", + "query": "from a_index | sort atan2(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval cosh(stringField)", - "error": [ - "Argument of [cosh] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval atan2(null, null)", + "error": [], "warning": [] }, { - "query": "from a_index | eval cosh(numberField, extraArg)", - "error": [ - "Error: [cosh] function expects exactly one argument, got 2." - ], + "query": "row nullVar = null | eval atan2(nullVar, nullVar)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = cosh(*)", - "error": [ - "Using wildcards (*) in cosh is not allowed" - ], + "query": "row var = cbrt(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | sort cosh(numberField)", + "query": "row cbrt(5.5)", "error": [], "warning": [] }, { - "query": "row var = cosh(to_integer(true))", + "query": "row var = cbrt(to_double(true))", "error": [], "warning": [] }, { - "query": "row var = cosh(true)", - "error": [ - "Argument of [cosh] must be [number], found value [true] type [boolean]" - ], + "query": "row var = cbrt(5)", + "error": [], "warning": [] }, { - "query": "from a_index | where cosh(booleanField) > 0", - "error": [ - "Argument of [cosh] must be [number], found value [booleanField] type [boolean]" - ], + "query": "row cbrt(5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = cosh(to_integer(booleanField))", + "query": "row var = cbrt(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval cosh(booleanField)", + "query": "row var = cbrt(true)", "error": [ - "Argument of [cosh] must be [number], found value [booleanField] type [boolean]" + "Argument of [cbrt] must be [double], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval cosh(null)", + "query": "from a_index | where cbrt(doubleField) > 0", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval cosh(nullVar)", - "error": [], + "query": "from a_index | where cbrt(booleanField) > 0", + "error": [ + "Argument of [cbrt] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", now())", + "query": "from a_index | where cbrt(integerField) > 0", "error": [], "warning": [] }, { - "query": "row date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", now())", + "query": "from a_index | where cbrt(longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval date_extract(\"SOME_RANDOM_STRING\", now())", + "query": "from a_index | where cbrt(unsignedLongField) > 0", "error": [], - "warning": [ - "Invalid option [\"SOME_RANDOM_STRING\"] for date_extract. Supported options: [\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", \"ALIGNED_DAY_OF_WEEK_IN_YEAR\", \"ALIGNED_WEEK_OF_MONTH\", \"ALIGNED_WEEK_OF_YEAR\", \"AMPM_OF_DAY\", \"CLOCK_HOUR_OF_AMPM\", \"CLOCK_HOUR_OF_DAY\", \"DAY_OF_MONTH\", \"DAY_OF_WEEK\", \"DAY_OF_YEAR\", \"EPOCH_DAY\", \"ERA\", \"HOUR_OF_AMPM\", \"HOUR_OF_DAY\", \"INSTANT_SECONDS\", \"MICRO_OF_DAY\", \"MICRO_OF_SECOND\", \"MILLI_OF_DAY\", \"MILLI_OF_SECOND\", \"MINUTE_OF_DAY\", \"MINUTE_OF_HOUR\", \"MONTH_OF_YEAR\", \"NANO_OF_DAY\", \"NANO_OF_SECOND\", \"OFFSET_SECONDS\", \"PROLEPTIC_MONTH\", \"SECOND_OF_DAY\", \"SECOND_OF_MINUTE\", \"YEAR\", \"YEAR_OF_ERA\"]." - ] + "warning": [] }, { - "query": "from a_index | eval var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", + "query": "from a_index | eval var = cbrt(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", + "query": "from a_index | eval cbrt(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", to_datetime(stringField))", + "query": "from a_index | eval var = cbrt(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval date_extract(stringField, stringField)", + "query": "from a_index | eval cbrt(booleanField)", "error": [ - "Argument of [date_extract] must be [date], found value [stringField] type [string]" + "Argument of [cbrt] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField, extraArg)", + "query": "from a_index | eval var = cbrt(*)", "error": [ - "Error: [date_extract] function expects exactly 2 arguments, got 3." + "Using wildcards (*) in cbrt is not allowed" ], "warning": [] }, { - "query": "from a_index | sort date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", + "query": "from a_index | eval var = cbrt(integerField)", "error": [], "warning": [] }, { - "query": "row var = date_extract(true, true)", - "error": [ - "Argument of [date_extract] must be [string], found value [true] type [boolean]", - "Argument of [date_extract] must be [date], found value [true] type [boolean]" - ], + "query": "from a_index | eval cbrt(integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", to_datetime(dateField))", + "query": "from a_index | eval var = cbrt(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval date_extract(booleanField, booleanField)", - "error": [ - "Argument of [date_extract] must be [string], found value [booleanField] type [boolean]", - "Argument of [date_extract] must be [date], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = cbrt(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval date_extract(null, null)", + "query": "from a_index | eval cbrt(longField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval date_extract(nullVar, nullVar)", + "query": "from a_index | eval var = cbrt(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", \"2022\")", + "query": "from a_index | eval cbrt(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", concat(\"20\", \"22\"))", + "query": "from a_index | eval cbrt(doubleField, extraArg)", "error": [ - "Argument of [date_extract] must be [date], found value [concat(\"20\",\"22\")] type [string]" + "Error: [cbrt] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "row var = date_format(\"a\", now())", + "query": "from a_index | sort cbrt(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval cbrt(null)", "error": [], "warning": [] }, { - "query": "row date_format(\"a\", now())", + "query": "row nullVar = null | eval cbrt(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_format(stringField, dateField)", + "query": "row var = ceil(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval date_format(stringField, dateField)", + "query": "row ceil(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_format(to_string(stringField), to_datetime(stringField))", + "query": "row var = ceil(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval date_format(stringField, numberField)", - "error": [ - "Argument of [date_format] must be [date], found value [numberField] type [number]" - ], + "query": "row var = ceil(5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval date_format(stringField, dateField, extraArg)", - "error": [ - "Error: [date_format] function expects no more than 2 arguments, got 3." - ], + "query": "row ceil(5)", + "error": [], "warning": [] }, { - "query": "from a_index | sort date_format(stringField, dateField)", + "query": "row var = ceil(to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = date_format(true, true)", + "query": "row var = ceil(true)", "error": [ - "Argument of [date_format] must be [string], found value [true] type [boolean]", - "Argument of [date_format] must be [date], found value [true] type [boolean]" + "Argument of [ceil] must be [double], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = date_format(to_string(booleanField), to_datetime(dateField))", + "query": "from a_index | where ceil(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval date_format(booleanField, booleanField)", + "query": "from a_index | where ceil(booleanField) > 0", "error": [ - "Argument of [date_format] must be [string], found value [booleanField] type [boolean]", - "Argument of [date_format] must be [date], found value [booleanField] type [boolean]" + "Argument of [ceil] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval date_format(null, null)", + "query": "from a_index | where ceil(integerField) > 0", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval date_format(nullVar, nullVar)", + "query": "from a_index | where ceil(longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval date_format(stringField, \"2022\")", + "query": "from a_index | where ceil(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval date_format(stringField, concat(\"20\", \"22\"))", - "error": [ - "Argument of [date_format] must be [date], found value [concat(\"20\",\"22\")] type [string]" - ], - "warning": [] - }, - { - "query": "row var = date_parse(\"a\", \"a\")", + "query": "from a_index | eval var = ceil(doubleField)", "error": [], "warning": [] }, { - "query": "row var = date_parse(\"a\")", + "query": "from a_index | eval ceil(doubleField)", "error": [], "warning": [] }, { - "query": "row date_parse(\"a\", \"a\")", + "query": "from a_index | eval var = ceil(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = date_parse(to_string(\"a\"), to_string(\"a\"))", - "error": [], + "query": "from a_index | eval ceil(booleanField)", + "error": [ + "Argument of [ceil] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = date_parse(5, 5)", + "query": "from a_index | eval var = ceil(*)", "error": [ - "Argument of [date_parse] must be [string], found value [5] type [number]", - "Argument of [date_parse] must be [string], found value [5] type [number]" + "Using wildcards (*) in ceil is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = date_parse(stringField)", + "query": "from a_index | eval var = ceil(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_parse(stringField, stringField)", + "query": "from a_index | eval ceil(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval date_parse(stringField, stringField)", + "query": "from a_index | eval var = ceil(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_parse(to_string(stringField), to_string(stringField))", + "query": "from a_index | eval var = ceil(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval date_parse(numberField, numberField)", - "error": [ - "Argument of [date_parse] must be [string], found value [numberField] type [number]", - "Argument of [date_parse] must be [string], found value [numberField] type [number]" - ], - "warning": [] - }, - { - "query": "from a_index | eval date_parse(stringField, stringField, extraArg)", - "error": [ - "Error: [date_parse] function expects no more than 2 arguments, got 3." - ], + "query": "from a_index | eval ceil(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort date_parse(stringField, stringField)", + "query": "from a_index | eval var = ceil(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = date_parse(to_string(true), to_string(true))", + "query": "from a_index | eval ceil(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = date_parse(true, true)", + "query": "from a_index | eval ceil(doubleField, extraArg)", "error": [ - "Argument of [date_parse] must be [string], found value [true] type [boolean]", - "Argument of [date_parse] must be [string], found value [true] type [boolean]" + "Error: [ceil] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = date_parse(to_string(booleanField), to_string(booleanField))", + "query": "from a_index | sort ceil(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval date_parse(booleanField, booleanField)", - "error": [ - "Argument of [date_parse] must be [string], found value [booleanField] type [boolean]", - "Argument of [date_parse] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval ceil(null)", + "error": [], "warning": [] }, { - "query": "from a_index | eval date_parse(null, null)", + "query": "row nullVar = null | eval ceil(nullVar)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval date_parse(nullVar, nullVar)", + "query": "row var = cidr_match(to_ip(\"127.0.0.1\"), \"a\")", "error": [], "warning": [] }, { - "query": "row var = date_trunc(1 year, now())", + "query": "row cidr_match(to_ip(\"127.0.0.1\"), \"a\")", "error": [], "warning": [] }, { - "query": "row date_trunc(1 year, now())", + "query": "row var = cidr_match(to_ip(to_ip(\"127.0.0.1\")), to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_trunc(1 year, dateField)", - "error": [], + "query": "row var = cidr_match(true, true)", + "error": [ + "Argument of [cidr_match] must be [ip], found value [true] type [boolean]", + "Argument of [cidr_match] must be [keyword], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval date_trunc(1 year, dateField)", + "query": "from a_index | eval var = cidr_match(ipField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_trunc(1 year, to_datetime(stringField))", + "query": "from a_index | eval cidr_match(ipField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval date_trunc(stringField, stringField)", - "error": [ - "Argument of [date_trunc] must be [time_literal], found value [stringField] type [string]", - "Argument of [date_trunc] must be [date], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = cidr_match(to_ip(ipField), to_string(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval date_trunc(1 year, dateField, extraArg)", + "query": "from a_index | eval cidr_match(booleanField, booleanField)", "error": [ - "Error: [date_trunc] function expects exactly 2 arguments, got 3." + "Argument of [cidr_match] must be [ip], found value [booleanField] type [boolean]", + "Argument of [cidr_match] must be [keyword], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort date_trunc(1 year, dateField)", + "query": "from a_index | eval var = cidr_match(ipField, textField)", "error": [], "warning": [] }, { - "query": "row var = date_trunc(now(), now())", + "query": "from a_index | eval cidr_match(ipField, textField)", "error": [], "warning": [] }, { - "query": "row date_trunc(now(), now())", + "query": "from a_index | sort cidr_match(ipField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = date_trunc(true, true)", - "error": [ - "Argument of [date_trunc] must be [time_literal], found value [true] type [boolean]", - "Argument of [date_trunc] must be [date], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = date_trunc(1 year, to_datetime(dateField))", + "query": "from a_index | eval cidr_match(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | eval date_trunc(booleanField, booleanField)", - "error": [ - "Argument of [date_trunc] must be [time_literal], found value [booleanField] type [boolean]", - "Argument of [date_trunc] must be [date], found value [booleanField] type [boolean]" - ], + "query": "row nullVar = null | eval cidr_match(nullVar, nullVar)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_trunc(dateField, dateField)", + "query": "row var = coalesce(true)", "error": [], "warning": [] }, { - "query": "from a_index | eval date_trunc(dateField, dateField)", + "query": "row coalesce(true)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_trunc(to_datetime(dateField), to_datetime(dateField))", + "query": "row var = coalesce(to_boolean(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval date_trunc(null, null)", + "query": "row var = coalesce(true, true)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval date_trunc(nullVar, nullVar)", + "query": "row coalesce(true, true)", "error": [], "warning": [] }, { - "query": "from a_index | eval date_trunc(1 year, \"2022\")", + "query": "row var = coalesce(to_boolean(true), to_boolean(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval date_trunc(1 year, concat(\"20\", \"22\"))", + "query": "row var = coalesce(cartesianPointField, cartesianPointField)", "error": [ - "Argument of [date_trunc] must be [date], found value [concat(\"20\",\"22\")] type [string]" + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval date_trunc(\"2022\", \"2022\")", - "error": [], + "query": "row coalesce(cartesianPointField, cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval date_trunc(concat(\"20\", \"22\"), concat(\"20\", \"22\"))", + "query": "row var = coalesce(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", "error": [ - "Argument of [date_trunc] must be [time_literal], found value [concat(\"20\",\"22\")] type [string]", - "Argument of [date_trunc] must be [date], found value [concat(\"20\",\"22\")] type [string]" + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "row var = e()", + "query": "row var = coalesce(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row e()", + "query": "row coalesce(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | where e() > 0", + "query": "row var = coalesce(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], + "warning": [] + }, + { + "query": "row var = coalesce(to_datetime(\"2021-01-01T00:00:00Z\"), to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = e()", + "query": "row coalesce(to_datetime(\"2021-01-01T00:00:00Z\"), to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval e()", + "query": "row var = coalesce(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")), to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval e(extraArg)", + "query": "row var = coalesce(geoPointField, geoPointField)", "error": [ - "Error: [e] function expects exactly 0 arguments, got 1." + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | sort e()", - "error": [], + "query": "row coalesce(geoPointField, geoPointField)", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row nullVar = null | eval e()", - "error": [], - "warning": [] - }, - { - "query": "row var = ends_with(\"a\", \"a\")", - "error": [], + "query": "row var = coalesce(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row ends_with(\"a\", \"a\")", + "query": "row var = coalesce(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = ends_with(to_string(\"a\"), to_string(\"a\"))", + "query": "row coalesce(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = ends_with(5, 5)", + "query": "row var = coalesce(to_geoshape(geoPointField), to_geoshape(geoPointField))", "error": [ - "Argument of [ends_with] must be [string], found value [5] type [number]", - "Argument of [ends_with] must be [string], found value [5] type [number]" + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = ends_with(stringField, stringField)", + "query": "row var = coalesce(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval ends_with(stringField, stringField)", + "query": "row coalesce(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = ends_with(to_string(stringField), to_string(stringField))", + "query": "row var = coalesce(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval ends_with(numberField, numberField)", - "error": [ - "Argument of [ends_with] must be [string], found value [numberField] type [number]", - "Argument of [ends_with] must be [string], found value [numberField] type [number]" - ], - "warning": [] - }, - { - "query": "from a_index | eval ends_with(stringField, stringField, extraArg)", - "error": [ - "Error: [ends_with] function expects exactly 2 arguments, got 3." - ], + "query": "row var = coalesce(5, 5)", + "error": [], "warning": [] }, { - "query": "from a_index | sort ends_with(stringField, stringField)", + "query": "row coalesce(5, 5)", "error": [], "warning": [] }, { - "query": "row var = ends_with(to_string(true), to_string(true))", + "query": "row var = coalesce(to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = ends_with(true, true)", - "error": [ - "Argument of [ends_with] must be [string], found value [true] type [boolean]", - "Argument of [ends_with] must be [string], found value [true] type [boolean]" - ], + "query": "row var = coalesce(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = ends_with(to_string(booleanField), to_string(booleanField))", + "query": "row coalesce(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval ends_with(booleanField, booleanField)", - "error": [ - "Argument of [ends_with] must be [string], found value [booleanField] type [boolean]", - "Argument of [ends_with] must be [string], found value [booleanField] type [boolean]" - ], + "query": "row var = coalesce(to_ip(to_ip(\"127.0.0.1\")), to_ip(to_ip(\"127.0.0.1\")))", + "error": [], "warning": [] }, { - "query": "from a_index | eval ends_with(null, null)", + "query": "row var = coalesce(\"a\")", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval ends_with(nullVar, nullVar)", + "query": "row coalesce(\"a\")", "error": [], "warning": [] }, { - "query": "row var = floor(5)", + "query": "row var = coalesce(to_string(true))", "error": [], "warning": [] }, { - "query": "row floor(5)", + "query": "row var = coalesce(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row var = floor(to_integer(\"a\"))", + "query": "row coalesce(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row var = floor(\"a\")", - "error": [ - "Argument of [floor] must be [number], found value [\"a\"] type [string]" - ], + "query": "row var = coalesce(to_string(true), to_string(true))", + "error": [], "warning": [] }, { - "query": "from a_index | where floor(numberField) > 0", + "query": "row var = coalesce(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "from a_index | where floor(stringField) > 0", - "error": [ - "Argument of [floor] must be [number], found value [stringField] type [string]" - ], + "query": "row coalesce(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = floor(numberField)", + "query": "row var = coalesce(to_version(\"a\"), to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval floor(numberField)", + "query": "row var = coalesce(5.5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = floor(to_integer(stringField))", + "query": "from a_index | where coalesce(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval floor(stringField)", + "query": "from a_index | where coalesce(counterDoubleField) > 0", "error": [ - "Argument of [floor] must be [number], found value [stringField] type [string]" + "Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]" ], "warning": [] }, { - "query": "from a_index | eval floor(numberField, extraArg)", - "error": [ - "Error: [floor] function expects exactly one argument, got 2." - ], + "query": "from a_index | where coalesce(integerField, integerField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = floor(*)", + "query": "from a_index | where coalesce(counterDoubleField, counterDoubleField) > 0", "error": [ - "Using wildcards (*) in floor is not allowed" + "Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]", + "Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]" ], "warning": [] }, { - "query": "from a_index | sort floor(numberField)", + "query": "from a_index | where coalesce(longField) > 0", "error": [], "warning": [] }, { - "query": "row var = floor(to_integer(true))", + "query": "from a_index | where coalesce(longField, longField) > 0", "error": [], "warning": [] }, { - "query": "row var = floor(true)", - "error": [ - "Argument of [floor] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | eval var = coalesce(booleanField)", + "error": [], "warning": [] }, { - "query": "from a_index | where floor(booleanField) > 0", - "error": [ - "Argument of [floor] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval coalesce(booleanField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = floor(to_integer(booleanField))", + "query": "from a_index | eval var = coalesce(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval floor(booleanField)", + "query": "from a_index | eval coalesce(counterDoubleField)", "error": [ - "Argument of [floor] must be [number], found value [booleanField] type [boolean]" + "Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]" ], "warning": [] }, { - "query": "from a_index | eval floor(null)", + "query": "from a_index | eval var = coalesce(booleanField, booleanField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval floor(nullVar)", + "query": "from a_index | eval coalesce(booleanField, booleanField)", "error": [], "warning": [] }, { - "query": "row var = greatest(\"a\")", + "query": "from a_index | eval var = coalesce(to_boolean(booleanField), to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "row greatest(\"a\")", - "error": [], + "query": "from a_index | eval coalesce(counterDoubleField, counterDoubleField)", + "error": [ + "Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]", + "Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]" + ], "warning": [] }, { - "query": "from a_index | eval var = greatest(stringField)", + "query": "from a_index | eval var = coalesce(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval greatest(stringField)", + "query": "from a_index | eval coalesce(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | sort greatest(stringField)", + "query": "from a_index | eval var = coalesce(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "row var = greatest(true)", + "query": "from a_index | eval var = coalesce(cartesianShapeField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "row greatest(true)", + "query": "from a_index | eval coalesce(cartesianShapeField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "row var = greatest(to_boolean(true))", + "query": "from a_index | eval var = coalesce(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "row var = greatest(true, true)", + "query": "from a_index | eval var = coalesce(dateField, dateField)", "error": [], "warning": [] }, { - "query": "row greatest(true, true)", + "query": "from a_index | eval coalesce(dateField, dateField)", "error": [], "warning": [] }, { - "query": "row var = greatest(to_boolean(true), to_boolean(true))", + "query": "from a_index | eval var = coalesce(to_datetime(dateField), to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "row var = greatest(5, 5)", + "query": "from a_index | eval var = coalesce(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "row greatest(5, 5)", + "query": "from a_index | eval coalesce(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "row var = greatest(to_integer(true), to_integer(true))", + "query": "from a_index | eval var = coalesce(to_geopoint(geoPointField), to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "row var = greatest(5)", + "query": "from a_index | eval var = coalesce(geoShapeField, geoShapeField)", "error": [], "warning": [] }, { - "query": "row greatest(5)", + "query": "from a_index | eval coalesce(geoShapeField, geoShapeField)", "error": [], "warning": [] }, { - "query": "row var = greatest(to_integer(true))", + "query": "from a_index | eval var = coalesce(to_geoshape(geoPointField), to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "row var = greatest(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval var = coalesce(integerField)", "error": [], "warning": [] }, { - "query": "row greatest(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval coalesce(integerField)", "error": [], "warning": [] }, { - "query": "row var = greatest(to_ip(to_ip(\"127.0.0.1\")), to_ip(to_ip(\"127.0.0.1\")))", + "query": "from a_index | eval var = coalesce(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = greatest(to_string(true))", + "query": "from a_index | eval var = coalesce(integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = greatest(\"a\", \"a\")", + "query": "from a_index | eval coalesce(integerField, integerField)", "error": [], "warning": [] }, { - "query": "row greatest(\"a\", \"a\")", + "query": "from a_index | eval var = coalesce(to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = greatest(to_string(true), to_string(true))", + "query": "from a_index | eval var = coalesce(ipField, ipField)", "error": [], "warning": [] }, { - "query": "row var = greatest(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", + "query": "from a_index | eval coalesce(ipField, ipField)", "error": [], "warning": [] }, { - "query": "row greatest(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", + "query": "from a_index | eval var = coalesce(to_ip(ipField), to_ip(ipField))", "error": [], "warning": [] }, { - "query": "row var = greatest(to_version(\"a\"), to_version(\"a\"))", + "query": "from a_index | eval var = coalesce(keywordField)", "error": [], "warning": [] }, { - "query": "row var = greatest(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [ - "Argument of [greatest] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]", - "Argument of [greatest] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | where greatest(numberField, numberField) > 0", + "query": "from a_index | eval coalesce(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | where greatest(cartesianPointField, cartesianPointField) > 0", - "error": [ - "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]", - "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "from a_index | eval var = coalesce(to_string(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | where greatest(numberField) > 0", + "query": "from a_index | eval var = coalesce(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | where greatest(cartesianPointField) > 0", - "error": [ - "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "from a_index | eval coalesce(keywordField, keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | where length(greatest(stringField)) > 0", + "query": "from a_index | eval var = coalesce(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | where length(greatest(cartesianPointField)) > 0", - "error": [ - "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "from a_index | eval var = coalesce(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | where length(greatest(stringField, stringField)) > 0", + "query": "from a_index | eval coalesce(longField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(greatest(cartesianPointField, cartesianPointField)) > 0", - "error": [ - "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]", - "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "from a_index | eval var = coalesce(longField, longField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = greatest(booleanField)", + "query": "from a_index | eval coalesce(longField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval greatest(booleanField)", + "query": "from a_index | eval var = coalesce(textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = greatest(to_boolean(booleanField))", + "query": "from a_index | eval coalesce(textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval greatest(cartesianPointField)", - "error": [ - "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "from a_index | eval var = coalesce(textField, textField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = greatest(booleanField, booleanField)", + "query": "from a_index | eval coalesce(textField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval greatest(booleanField, booleanField)", + "query": "from a_index | eval var = coalesce(versionField, versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = greatest(to_boolean(booleanField), to_boolean(booleanField))", + "query": "from a_index | eval coalesce(versionField, versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval greatest(cartesianPointField, cartesianPointField)", - "error": [ - "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]", - "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "from a_index | eval var = coalesce(to_version(keywordField), to_version(keywordField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = greatest(numberField, numberField)", + "query": "from a_index | sort coalesce(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval greatest(numberField, numberField)", + "query": "from a_index | eval coalesce(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = greatest(to_integer(booleanField), to_integer(booleanField))", + "query": "row nullVar = null | eval coalesce(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = greatest(numberField)", + "query": "from a_index | eval coalesce(\"2022\", \"2022\")", "error": [], "warning": [] }, { - "query": "from a_index | eval greatest(numberField)", + "query": "from a_index | eval coalesce(concat(\"20\", \"22\"), concat(\"20\", \"22\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = greatest(to_integer(booleanField))", + "query": "row var = concat(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = greatest(ipField, ipField)", + "query": "row concat(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval greatest(ipField, ipField)", + "query": "row var = concat(to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = greatest(to_ip(ipField), to_ip(ipField))", - "error": [], + "query": "row var = concat(true, true)", + "error": [ + "Argument of [concat] must be [keyword], found value [true] type [boolean]", + "Argument of [concat] must be [keyword], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = greatest(to_string(booleanField))", + "query": "from a_index | eval var = concat(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = greatest(stringField, stringField)", + "query": "from a_index | eval concat(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval greatest(stringField, stringField)", + "query": "from a_index | eval var = concat(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = greatest(to_string(booleanField), to_string(booleanField))", - "error": [], + "query": "from a_index | eval concat(booleanField, booleanField)", + "error": [ + "Argument of [concat] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [concat] must be [keyword], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = greatest(versionField, versionField)", + "query": "from a_index | eval var = concat(keywordField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval greatest(versionField, versionField)", + "query": "from a_index | eval concat(keywordField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = greatest(to_version(stringField), to_version(stringField))", + "query": "from a_index | eval var = concat(textField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | sort greatest(booleanField)", + "query": "from a_index | eval concat(textField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval greatest(null)", + "query": "from a_index | eval var = concat(textField, textField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval greatest(nullVar)", + "query": "from a_index | eval concat(textField, textField)", "error": [], "warning": [] }, { - "query": "row var = least(\"a\")", + "query": "from a_index | sort concat(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row least(\"a\")", + "query": "from a_index | eval concat(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = least(stringField)", + "query": "row nullVar = null | eval concat(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval least(stringField)", + "query": "row var = cos(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | sort least(stringField)", + "query": "row cos(5.5)", "error": [], "warning": [] }, { - "query": "row var = least(true)", + "query": "row var = cos(to_double(true))", "error": [], "warning": [] }, { - "query": "row least(true)", + "query": "row var = cos(5)", "error": [], "warning": [] }, { - "query": "row var = least(to_boolean(true))", + "query": "row cos(5)", "error": [], "warning": [] }, { - "query": "row var = least(true, true)", + "query": "row var = cos(to_integer(true))", "error": [], "warning": [] }, { - "query": "row least(true, true)", - "error": [], + "query": "row var = cos(true)", + "error": [ + "Argument of [cos] must be [double], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row var = least(to_boolean(true), to_boolean(true))", + "query": "from a_index | where cos(doubleField) > 0", "error": [], "warning": [] }, { - "query": "row var = least(5, 5)", - "error": [], + "query": "from a_index | where cos(booleanField) > 0", + "error": [ + "Argument of [cos] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row least(5, 5)", + "query": "from a_index | where cos(integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = least(to_integer(true), to_integer(true))", + "query": "from a_index | where cos(longField) > 0", "error": [], "warning": [] }, { - "query": "row var = least(5)", + "query": "from a_index | where cos(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row least(5)", + "query": "from a_index | eval var = cos(doubleField)", "error": [], "warning": [] }, { - "query": "row var = least(to_integer(true))", + "query": "from a_index | eval cos(doubleField)", "error": [], "warning": [] }, { - "query": "row var = least(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval var = cos(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row least(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", - "error": [], + "query": "from a_index | eval cos(booleanField)", + "error": [ + "Argument of [cos] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = least(to_ip(to_ip(\"127.0.0.1\")), to_ip(to_ip(\"127.0.0.1\")))", - "error": [], + "query": "from a_index | eval var = cos(*)", + "error": [ + "Using wildcards (*) in cos is not allowed" + ], "warning": [] }, { - "query": "row var = least(to_string(true))", + "query": "from a_index | eval var = cos(integerField)", "error": [], "warning": [] }, { - "query": "row var = least(\"a\", \"a\")", + "query": "from a_index | eval cos(integerField)", "error": [], "warning": [] }, { - "query": "row least(\"a\", \"a\")", + "query": "from a_index | eval var = cos(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = least(to_string(true), to_string(true))", + "query": "from a_index | eval var = cos(longField)", "error": [], "warning": [] }, { - "query": "row var = least(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", + "query": "from a_index | eval cos(longField)", "error": [], "warning": [] }, { - "query": "row least(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", + "query": "from a_index | eval var = cos(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = least(to_version(\"a\"), to_version(\"a\"))", + "query": "from a_index | eval cos(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = least(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval cos(doubleField, extraArg)", "error": [ - "Argument of [least] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]", - "Argument of [least] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + "Error: [cos] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | where least(numberField, numberField) > 0", + "query": "from a_index | sort cos(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | where least(cartesianPointField, cartesianPointField) > 0", - "error": [ - "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]", - "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "from a_index | eval cos(null)", + "error": [], "warning": [] }, { - "query": "from a_index | where least(numberField) > 0", + "query": "row nullVar = null | eval cos(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | where least(cartesianPointField) > 0", - "error": [ - "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "row var = cosh(5.5)", + "error": [], + "warning": [] + }, + { + "query": "row cosh(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | where length(least(stringField)) > 0", + "query": "row var = cosh(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | where length(least(cartesianPointField)) > 0", + "query": "row var = cosh(5)", + "error": [], + "warning": [] + }, + { + "query": "row cosh(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = cosh(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = cosh(true)", "error": [ - "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + "Argument of [cosh] must be [double], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where length(least(stringField, stringField)) > 0", + "query": "from a_index | where cosh(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where length(least(cartesianPointField, cartesianPointField)) > 0", + "query": "from a_index | where cosh(booleanField) > 0", "error": [ - "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]", - "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + "Argument of [cosh] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = least(booleanField)", + "query": "from a_index | where cosh(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval least(booleanField)", + "query": "from a_index | where cosh(longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = least(to_boolean(booleanField))", + "query": "from a_index | where cosh(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval least(cartesianPointField)", - "error": [ - "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "from a_index | eval var = cosh(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = least(booleanField, booleanField)", + "query": "from a_index | eval cosh(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval least(booleanField, booleanField)", + "query": "from a_index | eval var = cosh(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = least(to_boolean(booleanField), to_boolean(booleanField))", - "error": [], + "query": "from a_index | eval cosh(booleanField)", + "error": [ + "Argument of [cosh] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval least(cartesianPointField, cartesianPointField)", + "query": "from a_index | eval var = cosh(*)", "error": [ - "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]", - "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + "Using wildcards (*) in cosh is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = least(numberField, numberField)", + "query": "from a_index | eval var = cosh(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval least(numberField, numberField)", + "query": "from a_index | eval cosh(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = least(to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval var = cosh(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = least(numberField)", + "query": "from a_index | eval var = cosh(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval least(numberField)", + "query": "from a_index | eval cosh(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = least(to_integer(booleanField))", + "query": "from a_index | eval var = cosh(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = least(ipField, ipField)", + "query": "from a_index | eval cosh(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval least(ipField, ipField)", - "error": [], + "query": "from a_index | eval cosh(doubleField, extraArg)", + "error": [ + "Error: [cosh] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "from a_index | eval var = least(to_ip(ipField), to_ip(ipField))", + "query": "from a_index | sort cosh(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = least(to_string(booleanField))", + "query": "from a_index | eval cosh(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = least(stringField, stringField)", + "query": "row nullVar = null | eval cosh(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval least(stringField, stringField)", + "query": "from a_index | eval var = date_diff(\"year\", dateField, dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = least(to_string(booleanField), to_string(booleanField))", + "query": "from a_index | eval date_diff(\"year\", dateField, dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = least(versionField, versionField)", + "query": "from a_index | eval var = date_diff(\"year\", to_datetime(dateField), to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "from a_index | eval least(versionField, versionField)", - "error": [], + "query": "from a_index | eval date_diff(booleanField, booleanField, booleanField)", + "error": [ + "Argument of [date_diff] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [date_diff] must be [date], found value [booleanField] type [boolean]", + "Argument of [date_diff] must be [date], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = least(to_version(stringField), to_version(stringField))", + "query": "from a_index | eval var = date_diff(textField, dateField, dateField)", "error": [], "warning": [] }, { - "query": "from a_index | sort least(booleanField)", + "query": "from a_index | eval date_diff(textField, dateField, dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval least(null)", + "query": "from a_index | eval var = date_diff(to_string(booleanField), to_datetime(dateField), to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval least(nullVar)", + "query": "from a_index | eval date_diff(\"year\", dateField, dateField, extraArg)", + "error": [ + "Error: [date_diff] function expects exactly 3 arguments, got 4." + ], + "warning": [] + }, + { + "query": "from a_index | sort date_diff(\"year\", dateField, dateField)", "error": [], "warning": [] }, { - "query": "row var = left(\"a\", 5)", + "query": "from a_index | eval date_diff(null, null, null)", "error": [], "warning": [] }, { - "query": "row left(\"a\", 5)", + "query": "row nullVar = null | eval date_diff(nullVar, nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "row var = left(to_string(\"a\"), to_integer(\"a\"))", + "query": "from a_index | eval date_diff(\"year\", \"2022\", \"2022\")", "error": [], "warning": [] }, { - "query": "row var = left(5, \"a\")", + "query": "from a_index | eval date_diff(\"year\", concat(\"20\", \"22\"), concat(\"20\", \"22\"))", "error": [ - "Argument of [left] must be [string], found value [5] type [number]", - "Argument of [left] must be [number], found value [\"a\"] type [string]" + "Argument of [date_diff] must be [date], found value [concat(\"20\",\"22\")] type [keyword]", + "Argument of [date_diff] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" ], "warning": [] }, { - "query": "from a_index | where length(left(stringField, numberField)) > 0", + "query": "from a_index | eval date_diff(textField, \"2022\", \"2022\")", "error": [], "warning": [] }, { - "query": "from a_index | where length(left(numberField, stringField)) > 0", + "query": "from a_index | eval date_diff(textField, concat(\"20\", \"22\"), concat(\"20\", \"22\"))", "error": [ - "Argument of [left] must be [string], found value [numberField] type [number]", - "Argument of [left] must be [number], found value [stringField] type [string]" + "Argument of [date_diff] must be [date], found value [concat(\"20\",\"22\")] type [keyword]", + "Argument of [date_diff] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval var = left(stringField, numberField)", + "query": "row var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval left(stringField, numberField)", + "query": "row date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = left(to_string(stringField), to_integer(stringField))", + "query": "row var = date_extract(\"a\", to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval left(numberField, stringField)", - "error": [ - "Argument of [left] must be [string], found value [numberField] type [number]", - "Argument of [left] must be [number], found value [stringField] type [string]" - ], + "query": "row date_extract(\"a\", to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval left(stringField, numberField, extraArg)", + "query": "row var = date_extract(true, true)", "error": [ - "Error: [left] function expects exactly 2 arguments, got 3." + "Argument of [date_extract] must be [keyword], found value [true] type [boolean]", + "Argument of [date_extract] must be [date], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort left(stringField, numberField)", + "query": "from a_index | eval var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", "error": [], "warning": [] }, { - "query": "row var = left(to_string(true), to_integer(true))", + "query": "from a_index | eval date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", "error": [], "warning": [] }, { - "query": "row var = left(true, true)", - "error": [ - "Argument of [left] must be [string], found value [true] type [boolean]", - "Argument of [left] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | eval var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", to_datetime(dateField))", + "error": [], "warning": [] }, { - "query": "from a_index | where length(left(booleanField, booleanField)) > 0", + "query": "from a_index | eval date_extract(booleanField, booleanField)", "error": [ - "Argument of [left] must be [string], found value [booleanField] type [boolean]", - "Argument of [left] must be [number], found value [booleanField] type [boolean]" + "Argument of [date_extract] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [date_extract] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = left(to_string(booleanField), to_integer(booleanField))", + "query": "from a_index | eval var = date_extract(textField, dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval left(booleanField, booleanField)", - "error": [ - "Argument of [left] must be [string], found value [booleanField] type [boolean]", - "Argument of [left] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval date_extract(textField, dateField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval left(null, null)", + "query": "from a_index | eval var = date_extract(to_string(booleanField), to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval left(nullVar, nullVar)", + "query": "from a_index | eval date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField, extraArg)", + "error": [ + "Error: [date_extract] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | sort date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", "error": [], "warning": [] }, { - "query": "row var = length(\"a\")", + "query": "from a_index | eval date_extract(null, null)", "error": [], "warning": [] }, { - "query": "row length(\"a\")", + "query": "row nullVar = null | eval date_extract(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "row var = length(to_string(\"a\"))", + "query": "from a_index | eval date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", \"2022\")", "error": [], "warning": [] }, { - "query": "row var = length(5)", + "query": "from a_index | eval date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", concat(\"20\", \"22\"))", "error": [ - "Argument of [length] must be [string], found value [5] type [number]" + "Argument of [date_extract] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" ], "warning": [] }, { - "query": "from a_index | where length(stringField) > 0", + "query": "from a_index | eval date_extract(textField, \"2022\")", "error": [], "warning": [] }, { - "query": "from a_index | where length(numberField) > 0", + "query": "from a_index | eval date_extract(textField, concat(\"20\", \"22\"))", "error": [ - "Argument of [length] must be [string], found value [numberField] type [number]" + "Argument of [date_extract] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval var = length(stringField)", + "query": "row var = date_format(\"a\", to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval length(stringField)", + "query": "row date_format(\"a\", to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = length(to_string(stringField))", + "query": "row var = date_format(true, true)", + "error": [ + "Argument of [date_format] must be [keyword], found value [true] type [boolean]", + "Argument of [date_format] must be [date], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = date_format(keywordField, dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval length(numberField)", - "error": [ - "Argument of [length] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval date_format(keywordField, dateField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval length(stringField, extraArg)", - "error": [ - "Error: [length] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = date_format(to_string(booleanField), to_datetime(dateField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = length(*)", + "query": "from a_index | eval date_format(booleanField, booleanField)", "error": [ - "Using wildcards (*) in length is not allowed" + "Argument of [date_format] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [date_format] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort length(stringField)", + "query": "from a_index | eval var = date_format(textField, dateField)", "error": [], "warning": [] }, { - "query": "row var = length(to_string(true))", + "query": "from a_index | eval date_format(textField, dateField)", "error": [], "warning": [] }, { - "query": "row var = length(true)", + "query": "from a_index | eval date_format(keywordField, dateField, extraArg)", "error": [ - "Argument of [length] must be [string], found value [true] type [boolean]" + "Error: [date_format] function expects no more than 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | where length(booleanField) > 0", - "error": [ - "Argument of [length] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | sort date_format(keywordField, dateField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = length(to_string(booleanField))", + "query": "from a_index | eval date_format(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | eval length(booleanField)", - "error": [ - "Argument of [length] must be [string], found value [booleanField] type [boolean]" - ], + "query": "row nullVar = null | eval date_format(nullVar, nullVar)", + "error": [], "warning": [] }, { - "query": "from a_index | eval length(null)", + "query": "from a_index | eval date_format(keywordField, \"2022\")", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval length(nullVar)", - "error": [], + "query": "from a_index | eval date_format(keywordField, concat(\"20\", \"22\"))", + "error": [ + "Argument of [date_format] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" + ], "warning": [] }, { - "query": "row var = log(5, 5)", + "query": "from a_index | eval date_format(textField, \"2022\")", "error": [], "warning": [] }, { - "query": "row log(5, 5)", - "error": [], + "query": "from a_index | eval date_format(textField, concat(\"20\", \"22\"))", + "error": [ + "Argument of [date_format] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" + ], "warning": [] }, { - "query": "row var = log(to_integer(\"a\"), to_integer(\"a\"))", + "query": "row var = date_parse(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row var = log(\"a\", \"a\")", - "error": [ - "Argument of [log] must be [number], found value [\"a\"] type [string]", - "Argument of [log] must be [number], found value [\"a\"] type [string]" - ], + "query": "row date_parse(\"a\", \"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | where log(numberField, numberField) > 0", + "query": "row var = date_parse(to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | where log(stringField, stringField) > 0", + "query": "row var = date_parse(true, true)", "error": [ - "Argument of [log] must be [number], found value [stringField] type [string]", - "Argument of [log] must be [number], found value [stringField] type [string]" + "Argument of [date_parse] must be [keyword], found value [true] type [boolean]", + "Argument of [date_parse] must be [keyword], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = log(numberField, numberField)", + "query": "from a_index | eval var = date_parse(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval log(numberField, numberField)", + "query": "from a_index | eval date_parse(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = log(to_integer(stringField), to_integer(stringField))", + "query": "from a_index | eval var = date_parse(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval log(stringField, stringField)", + "query": "from a_index | eval date_parse(booleanField, booleanField)", "error": [ - "Argument of [log] must be [number], found value [stringField] type [string]", - "Argument of [log] must be [number], found value [stringField] type [string]" + "Argument of [date_parse] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [date_parse] must be [keyword], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval log(numberField, numberField, extraArg)", - "error": [ - "Error: [log] function expects no more than 2 arguments, got 3." - ], + "query": "from a_index | eval var = date_parse(keywordField, textField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort log(numberField, numberField)", + "query": "from a_index | eval date_parse(keywordField, textField)", "error": [], "warning": [] }, { - "query": "row var = log(5)", + "query": "from a_index | eval var = date_parse(textField, keywordField)", "error": [], "warning": [] }, { - "query": "row log(5)", + "query": "from a_index | eval date_parse(textField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = log(to_integer(true))", + "query": "from a_index | eval var = date_parse(textField, textField)", "error": [], "warning": [] }, { - "query": "row var = log(to_integer(true), to_integer(true))", + "query": "from a_index | eval date_parse(textField, textField)", "error": [], "warning": [] }, { - "query": "row var = log(true, true)", + "query": "from a_index | eval date_parse(keywordField, keywordField, extraArg)", "error": [ - "Argument of [log] must be [number], found value [true] type [boolean]", - "Argument of [log] must be [number], found value [true] type [boolean]" + "Error: [date_parse] function expects no more than 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | where log(numberField) > 0", + "query": "from a_index | sort date_parse(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | where log(booleanField) > 0", - "error": [ - "Argument of [log] must be [number], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where log(booleanField, booleanField) > 0", - "error": [ - "Argument of [log] must be [number], found value [booleanField] type [boolean]", - "Argument of [log] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval date_parse(null, null)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = log(numberField)", + "query": "row nullVar = null | eval date_parse(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval log(numberField)", + "query": "row var = date_trunc(1 year, to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = log(to_integer(booleanField))", + "query": "row date_trunc(1 year, to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval log(booleanField)", + "query": "row var = date_trunc(\"a\", to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [ - "Argument of [log] must be [number], found value [booleanField] type [boolean]" + "Argument of [date_trunc] must be [time_literal], found value [\"a\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = log(*)", + "query": "row date_trunc(\"a\", to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [ - "Using wildcards (*) in log is not allowed" + "Argument of [date_trunc] must be [time_literal], found value [\"a\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = log(to_integer(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log(booleanField, booleanField)", + "query": "row var = date_trunc(true, true)", "error": [ - "Argument of [log] must be [number], found value [booleanField] type [boolean]", - "Argument of [log] must be [number], found value [booleanField] type [boolean]" + "Argument of [date_trunc] must be [time_literal], found value [true] type [boolean]", + "Argument of [date_trunc] must be [date], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort log(numberField)", + "query": "from a_index | eval var = date_trunc(1 year, dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval log(null, null)", + "query": "from a_index | eval date_trunc(1 year, dateField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval log(nullVar, nullVar)", + "query": "from a_index | eval var = date_trunc(1 year, to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "row var = log10(5)", - "error": [], + "query": "from a_index | eval date_trunc(booleanField, booleanField)", + "error": [ + "Argument of [date_trunc] must be [time_literal], found value [booleanField] type [boolean]", + "Argument of [date_trunc] must be [date], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row log10(5)", - "error": [], + "query": "from a_index | eval var = date_trunc(textField, dateField)", + "error": [ + "Argument of [date_trunc] must be [time_literal], found value [textField] type [text]" + ], "warning": [] }, { - "query": "row var = log10(to_integer(\"a\"))", - "error": [], + "query": "from a_index | eval date_trunc(textField, dateField)", + "error": [ + "Argument of [date_trunc] must be [time_literal], found value [textField] type [text]" + ], "warning": [] }, { - "query": "row var = log10(\"a\")", + "query": "from a_index | eval var = date_trunc(textField, to_datetime(dateField))", "error": [ - "Argument of [log10] must be [number], found value [\"a\"] type [string]" + "Argument of [date_trunc] must be [time_literal], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | where log10(numberField) > 0", - "error": [], + "query": "from a_index | eval date_trunc(1 year, dateField, extraArg)", + "error": [ + "Error: [date_trunc] function expects exactly 2 arguments, got 3." + ], "warning": [] }, { - "query": "from a_index | where log10(stringField) > 0", - "error": [ - "Argument of [log10] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | sort date_trunc(1 year, dateField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = log10(numberField)", + "query": "from a_index | eval date_trunc(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | eval log10(numberField)", + "query": "row nullVar = null | eval date_trunc(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = log10(to_integer(stringField))", + "query": "from a_index | eval date_trunc(1 year, \"2022\")", "error": [], "warning": [] }, { - "query": "from a_index | eval log10(stringField)", + "query": "from a_index | eval date_trunc(1 year, concat(\"20\", \"22\"))", "error": [ - "Argument of [log10] must be [number], found value [stringField] type [string]" + "Argument of [date_trunc] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" ], "warning": [] }, { - "query": "from a_index | eval log10(numberField, extraArg)", + "query": "from a_index | eval date_trunc(textField, \"2022\")", "error": [ - "Error: [log10] function expects exactly one argument, got 2." + "Argument of [date_trunc] must be [time_literal], found value [textField] type [text]" ], "warning": [] }, { - "query": "from a_index | eval var = log10(*)", + "query": "from a_index | eval date_trunc(textField, concat(\"20\", \"22\"))", "error": [ - "Using wildcards (*) in log10 is not allowed" + "Argument of [date_trunc] must be [time_literal], found value [textField] type [text]", + "Argument of [date_trunc] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" ], "warning": [] }, { - "query": "from a_index | sort log10(numberField)", + "query": "row var = e()", "error": [], "warning": [] }, { - "query": "row var = log10(to_integer(true))", + "query": "row e()", "error": [], "warning": [] }, { - "query": "row var = log10(true)", - "error": [ - "Argument of [log10] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | where e() > 0", + "error": [], "warning": [] }, { - "query": "from a_index | where log10(booleanField) > 0", - "error": [ - "Argument of [log10] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = e()", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = log10(to_integer(booleanField))", + "query": "from a_index | eval e()", "error": [], "warning": [] }, { - "query": "from a_index | eval log10(booleanField)", + "query": "from a_index | eval e(extraArg)", "error": [ - "Argument of [log10] must be [number], found value [booleanField] type [boolean]" + "Error: [e] function expects exactly 0 arguments, got 1." ], "warning": [] }, { - "query": "from a_index | eval log10(null)", + "query": "from a_index | sort e()", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval log10(nullVar)", + "query": "row nullVar = null | eval e()", "error": [], "warning": [] }, { - "query": "row var = ltrim(\"a\")", + "query": "row var = ends_with(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row ltrim(\"a\")", + "query": "row ends_with(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row var = ltrim(to_string(\"a\"))", + "query": "row var = ends_with(to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "row var = ltrim(5)", + "query": "row var = ends_with(true, true)", "error": [ - "Argument of [ltrim] must be [string], found value [5] type [number]" + "Argument of [ends_with] must be [keyword], found value [true] type [boolean]", + "Argument of [ends_with] must be [keyword], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where length(ltrim(stringField)) > 0", + "query": "from a_index | eval var = ends_with(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(ltrim(numberField)) > 0", - "error": [ - "Argument of [ltrim] must be [string], found value [numberField] type [number]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = ltrim(stringField)", + "query": "from a_index | eval ends_with(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval ltrim(stringField)", + "query": "from a_index | eval var = ends_with(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = ltrim(to_string(stringField))", - "error": [], + "query": "from a_index | eval ends_with(booleanField, booleanField)", + "error": [ + "Argument of [ends_with] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [ends_with] must be [keyword], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval ltrim(numberField)", - "error": [ - "Argument of [ltrim] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval var = ends_with(textField, textField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval ltrim(stringField, extraArg)", - "error": [ - "Error: [ltrim] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval ends_with(textField, textField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = ltrim(*)", + "query": "from a_index | eval ends_with(keywordField, keywordField, extraArg)", "error": [ - "Using wildcards (*) in ltrim is not allowed" + "Error: [ends_with] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | sort ltrim(stringField)", + "query": "from a_index | sort ends_with(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = ltrim(to_string(true))", + "query": "from a_index | eval ends_with(null, null)", "error": [], "warning": [] }, { - "query": "row var = ltrim(true)", - "error": [ - "Argument of [ltrim] must be [string], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where length(ltrim(booleanField)) > 0", - "error": [ - "Argument of [ltrim] must be [string], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = ltrim(to_string(booleanField))", + "query": "row nullVar = null | eval ends_with(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval ltrim(booleanField)", - "error": [ - "Argument of [ltrim] must be [string], found value [booleanField] type [boolean]" - ], + "query": "row var = exp(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval ltrim(null)", + "query": "row exp(5.5)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval ltrim(nullVar)", + "query": "row var = exp(to_double(true))", "error": [], "warning": [] }, { - "query": "row var = mv_avg(5)", + "query": "row var = exp(5)", "error": [], "warning": [] }, { - "query": "row mv_avg(5)", + "query": "row exp(5)", "error": [], "warning": [] }, { - "query": "row var = mv_avg(to_integer(\"a\"))", + "query": "row var = exp(to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = mv_avg(\"a\")", + "query": "row var = exp(true)", "error": [ - "Argument of [mv_avg] must be [number], found value [\"a\"] type [string]" + "Argument of [exp] must be [double], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where mv_avg(numberField) > 0", + "query": "from a_index | where exp(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where mv_avg(stringField) > 0", + "query": "from a_index | where exp(booleanField) > 0", "error": [ - "Argument of [mv_avg] must be [number], found value [stringField] type [string]" + "Argument of [exp] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = mv_avg(numberField)", + "query": "from a_index | where exp(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_avg(numberField)", + "query": "from a_index | where exp(longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_avg(to_integer(stringField))", + "query": "from a_index | where exp(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_avg(stringField)", - "error": [ - "Argument of [mv_avg] must be [number], found value [stringField] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | eval mv_avg(numberField, extraArg)", - "error": [ - "Error: [mv_avg] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_avg(*)", - "error": [ - "Using wildcards (*) in mv_avg is not allowed" - ], + "query": "from a_index | eval var = exp(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort mv_avg(numberField)", + "query": "from a_index | eval exp(doubleField)", "error": [], "warning": [] }, { - "query": "row var = mv_avg(to_integer(true))", + "query": "from a_index | eval var = exp(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_avg(true)", + "query": "from a_index | eval exp(booleanField)", "error": [ - "Argument of [mv_avg] must be [number], found value [true] type [boolean]" + "Argument of [exp] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where mv_avg(booleanField) > 0", + "query": "from a_index | eval var = exp(*)", "error": [ - "Argument of [mv_avg] must be [number], found value [booleanField] type [boolean]" + "Using wildcards (*) in exp is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = mv_avg(to_integer(booleanField))", + "query": "from a_index | eval var = exp(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_avg(booleanField)", - "error": [ - "Argument of [mv_avg] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval exp(integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval mv_avg(null)", + "query": "from a_index | eval var = exp(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval mv_avg(nullVar)", + "query": "from a_index | eval var = exp(longField)", "error": [], "warning": [] }, { - "query": "row var = mv_concat(\"a\", \"a\")", + "query": "from a_index | eval exp(longField)", "error": [], "warning": [] }, { - "query": "row mv_concat(\"a\", \"a\")", + "query": "from a_index | eval var = exp(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = mv_concat(to_string(\"a\"), to_string(\"a\"))", + "query": "from a_index | eval exp(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = mv_concat(5, 5)", + "query": "from a_index | eval exp(doubleField, extraArg)", "error": [ - "Argument of [mv_concat] must be [string], found value [5] type [number]", - "Argument of [mv_concat] must be [string], found value [5] type [number]" + "Error: [exp] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | where length(mv_concat(stringField, stringField)) > 0", + "query": "from a_index | sort exp(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(mv_concat(numberField, numberField)) > 0", - "error": [ - "Argument of [mv_concat] must be [string], found value [numberField] type [number]", - "Argument of [mv_concat] must be [string], found value [numberField] type [number]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_concat(stringField, stringField)", + "query": "from a_index | eval exp(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_concat(stringField, stringField)", + "query": "row nullVar = null | eval exp(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_concat(to_string(stringField), to_string(stringField))", + "query": "row var = floor(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_concat(numberField, numberField)", - "error": [ - "Argument of [mv_concat] must be [string], found value [numberField] type [number]", - "Argument of [mv_concat] must be [string], found value [numberField] type [number]" - ], + "query": "row floor(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval mv_concat(stringField, stringField, extraArg)", - "error": [ - "Error: [mv_concat] function expects exactly 2 arguments, got 3." - ], + "query": "row var = floor(to_double(true))", + "error": [], "warning": [] }, { - "query": "from a_index | sort mv_concat(stringField, stringField)", + "query": "row var = floor(5)", "error": [], "warning": [] }, { - "query": "row var = mv_concat(to_string(true), to_string(true))", + "query": "row floor(5)", "error": [], "warning": [] }, { - "query": "row var = mv_concat(true, true)", - "error": [ - "Argument of [mv_concat] must be [string], found value [true] type [boolean]", - "Argument of [mv_concat] must be [string], found value [true] type [boolean]" - ], + "query": "row var = floor(to_integer(true))", + "error": [], "warning": [] }, { - "query": "from a_index | where length(mv_concat(booleanField, booleanField)) > 0", + "query": "row var = floor(true)", "error": [ - "Argument of [mv_concat] must be [string], found value [booleanField] type [boolean]", - "Argument of [mv_concat] must be [string], found value [booleanField] type [boolean]" + "Argument of [floor] must be [double], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = mv_concat(to_string(booleanField), to_string(booleanField))", + "query": "from a_index | where floor(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_concat(booleanField, booleanField)", + "query": "from a_index | where floor(booleanField) > 0", "error": [ - "Argument of [mv_concat] must be [string], found value [booleanField] type [boolean]", - "Argument of [mv_concat] must be [string], found value [booleanField] type [boolean]" + "Argument of [floor] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval mv_concat(null, null)", + "query": "from a_index | where floor(integerField) > 0", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval mv_concat(nullVar, nullVar)", + "query": "from a_index | where floor(longField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_count(\"a\")", + "query": "from a_index | where floor(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row mv_count(\"a\")", + "query": "from a_index | eval var = floor(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(stringField)", + "query": "from a_index | eval floor(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_count(stringField)", + "query": "from a_index | eval var = floor(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(*)", + "query": "from a_index | eval floor(booleanField)", "error": [ - "Using wildcards (*) in mv_count is not allowed" + "Argument of [floor] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort mv_count(stringField)", - "error": [], + "query": "from a_index | eval var = floor(*)", + "error": [ + "Using wildcards (*) in floor is not allowed" + ], "warning": [] }, { - "query": "row var = mv_count(true)", + "query": "from a_index | eval var = floor(integerField)", "error": [], "warning": [] }, { - "query": "row mv_count(true)", + "query": "from a_index | eval floor(integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_count(to_boolean(true))", + "query": "from a_index | eval var = floor(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_count(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = floor(longField)", "error": [], "warning": [] }, { - "query": "row mv_count(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval floor(longField)", "error": [], "warning": [] }, { - "query": "row var = mv_count(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = floor(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = mv_count(to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval floor(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row mv_count(to_cartesianshape(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | eval floor(doubleField, extraArg)", + "error": [ + "Error: [floor] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "row var = mv_count(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | sort floor(doubleField)", "error": [], "warning": [] }, { - "query": "row var = mv_count(now())", + "query": "from a_index | eval floor(null)", "error": [], "warning": [] }, { - "query": "row mv_count(now())", + "query": "row nullVar = null | eval floor(nullVar)", "error": [], "warning": [] }, { - "query": "row var = mv_count(to_datetime(now()))", + "query": "row var = from_base64(\"a\")", "error": [], "warning": [] }, { - "query": "row var = mv_count(5)", + "query": "row from_base64(\"a\")", "error": [], "warning": [] }, { - "query": "row mv_count(5)", + "query": "row var = from_base64(to_string(true))", "error": [], "warning": [] }, { - "query": "row var = mv_count(to_integer(true))", - "error": [], + "query": "row var = from_base64(true)", + "error": [ + "Argument of [from_base64] must be [keyword], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row var = mv_count(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = from_base64(keywordField)", "error": [], "warning": [] }, { - "query": "row mv_count(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval from_base64(keywordField)", "error": [], "warning": [] }, { - "query": "row var = mv_count(to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = from_base64(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_count(to_geoshape(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | eval from_base64(booleanField)", + "error": [ + "Argument of [from_base64] must be [keyword], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row mv_count(to_geoshape(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | eval var = from_base64(*)", + "error": [ + "Using wildcards (*) in from_base64 is not allowed" + ], "warning": [] }, { - "query": "row var = mv_count(to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = from_base64(textField)", "error": [], "warning": [] }, { - "query": "row var = mv_count(to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval from_base64(textField)", "error": [], "warning": [] }, { - "query": "row mv_count(to_ip(\"127.0.0.1\"))", - "error": [], + "query": "from a_index | eval from_base64(keywordField, extraArg)", + "error": [ + "Error: [from_base64] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "row var = mv_count(to_ip(to_ip(\"127.0.0.1\")))", + "query": "from a_index | sort from_base64(keywordField)", "error": [], "warning": [] }, { - "query": "row var = mv_count(to_string(true))", + "query": "from a_index | eval from_base64(null)", "error": [], "warning": [] }, { - "query": "row var = mv_count(to_version(\"1.0.0\"))", + "query": "row nullVar = null | eval from_base64(nullVar)", "error": [], "warning": [] }, { - "query": "row mv_count(to_version(\"1.0.0\"))", + "query": "row var = greatest(true)", "error": [], "warning": [] }, { - "query": "row var = mv_count(to_version(\"a\"))", + "query": "row greatest(true)", "error": [], "warning": [] }, { - "query": "from a_index | where mv_count(booleanField) > 0", + "query": "row var = greatest(to_boolean(true))", "error": [], "warning": [] }, { - "query": "from a_index | where mv_count(cartesianPointField) > 0", + "query": "row var = greatest(true, true)", "error": [], "warning": [] }, { - "query": "from a_index | where mv_count(cartesianShapeField) > 0", + "query": "row greatest(true, true)", "error": [], "warning": [] }, { - "query": "from a_index | where mv_count(dateField) > 0", + "query": "row var = greatest(to_boolean(true), to_boolean(true))", "error": [], "warning": [] }, { - "query": "from a_index | where mv_count(numberField) > 0", + "query": "row var = greatest(5.5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | where mv_count(geoPointField) > 0", + "query": "row greatest(5.5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | where mv_count(geoShapeField) > 0", + "query": "row var = greatest(to_double(true), to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | where mv_count(ipField) > 0", + "query": "row var = greatest(5)", "error": [], "warning": [] }, { - "query": "from a_index | where mv_count(stringField) > 0", + "query": "row greatest(5)", "error": [], "warning": [] }, { - "query": "from a_index | where mv_count(versionField) > 0", + "query": "row var = greatest(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(booleanField)", + "query": "row var = greatest(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_count(booleanField)", + "query": "row greatest(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(to_boolean(booleanField))", + "query": "row var = greatest(to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(cartesianPointField)", + "query": "row var = greatest(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_count(cartesianPointField)", + "query": "row greatest(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(to_cartesianpoint(cartesianPointField))", + "query": "row var = greatest(to_ip(to_ip(\"127.0.0.1\")), to_ip(to_ip(\"127.0.0.1\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(cartesianShapeField)", + "query": "row var = greatest(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_count(cartesianShapeField)", + "query": "row greatest(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(to_cartesianshape(cartesianPointField))", + "query": "row var = greatest(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(dateField)", + "query": "row var = greatest(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_count(dateField)", + "query": "row greatest(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(to_datetime(dateField))", + "query": "row var = greatest(to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(numberField)", + "query": "row var = greatest(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_count(numberField)", + "query": "row greatest(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(to_integer(booleanField))", + "query": "row var = greatest(to_version(\"a\"), to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(geoPointField)", - "error": [], + "query": "row var = greatest(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "error": [ + "Argument of [greatest] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]", + "Argument of [greatest] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + ], "warning": [] }, { - "query": "from a_index | eval mv_count(geoPointField)", + "query": "from a_index | where greatest(doubleField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(to_geopoint(geoPointField))", + "query": "from a_index | where greatest(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(geoShapeField)", - "error": [], + "query": "from a_index | where greatest(cartesianPointField) > 0", + "error": [ + "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], "warning": [] }, { - "query": "from a_index | eval mv_count(geoShapeField)", + "query": "from a_index | where greatest(integerField, integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(to_geoshape(geoPointField))", + "query": "from a_index | where greatest(longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_count(ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(to_ip(ipField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(to_string(booleanField))", + "query": "from a_index | where greatest(longField, longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(versionField)", + "query": "from a_index | eval var = greatest(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_count(versionField)", + "query": "from a_index | eval greatest(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(to_version(stringField))", + "query": "from a_index | eval var = greatest(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_count(booleanField, extraArg)", + "query": "from a_index | eval greatest(cartesianPointField)", "error": [ - "Error: [mv_count] function expects exactly one argument, got 2." + "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" ], "warning": [] }, { - "query": "from a_index | sort mv_count(booleanField)", + "query": "from a_index | eval var = greatest(booleanField, booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_count(null)", + "query": "from a_index | eval greatest(booleanField, booleanField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval mv_count(nullVar)", + "query": "from a_index | eval var = greatest(to_boolean(booleanField), to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(\"a\")", - "error": [], + "query": "from a_index | eval greatest(cartesianPointField, cartesianPointField)", + "error": [ + "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]", + "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], "warning": [] }, { - "query": "row mv_dedupe(\"a\")", + "query": "from a_index | eval var = greatest(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(stringField)", + "query": "from a_index | eval greatest(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(stringField)", + "query": "from a_index | eval var = greatest(to_double(booleanField), to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(*)", - "error": [ - "Using wildcards (*) in mv_dedupe is not allowed" - ], + "query": "from a_index | eval var = greatest(integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort mv_dedupe(stringField)", + "query": "from a_index | eval greatest(integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(true)", + "query": "from a_index | eval var = greatest(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row mv_dedupe(true)", + "query": "from a_index | eval var = greatest(integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_boolean(true))", + "query": "from a_index | eval greatest(integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(now())", + "query": "from a_index | eval var = greatest(to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row mv_dedupe(now())", + "query": "from a_index | eval var = greatest(ipField, ipField)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_datetime(now()))", + "query": "from a_index | eval greatest(ipField, ipField)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(5)", + "query": "from a_index | eval var = greatest(to_ip(ipField), to_ip(ipField))", "error": [], "warning": [] }, { - "query": "row mv_dedupe(5)", + "query": "from a_index | eval var = greatest(keywordField)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_integer(true))", + "query": "from a_index | eval greatest(keywordField)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval var = greatest(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row mv_dedupe(to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval var = greatest(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_ip(to_ip(\"127.0.0.1\")))", + "query": "from a_index | eval greatest(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_string(true))", + "query": "from a_index | eval var = greatest(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_version(\"1.0.0\"))", + "query": "from a_index | eval var = greatest(longField)", "error": [], "warning": [] }, { - "query": "row mv_dedupe(to_version(\"1.0.0\"))", + "query": "from a_index | eval greatest(longField)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_version(\"a\"))", + "query": "from a_index | eval var = greatest(longField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | where mv_dedupe(numberField) > 0", + "query": "from a_index | eval greatest(longField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(mv_dedupe(stringField)) > 0", + "query": "from a_index | eval var = greatest(textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(booleanField)", + "query": "from a_index | eval greatest(textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(booleanField)", + "query": "from a_index | eval var = greatest(textField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(to_boolean(booleanField))", + "query": "from a_index | eval greatest(textField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(dateField)", + "query": "from a_index | eval var = greatest(versionField, versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(dateField)", + "query": "from a_index | eval greatest(versionField, versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(to_datetime(dateField))", + "query": "from a_index | eval var = greatest(to_version(keywordField), to_version(keywordField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(numberField)", + "query": "from a_index | sort greatest(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(numberField)", + "query": "from a_index | eval greatest(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(to_integer(booleanField))", + "query": "row nullVar = null | eval greatest(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(ipField)", + "query": "row var = ip_prefix(to_ip(\"127.0.0.1\"), 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(ipField)", + "query": "row ip_prefix(to_ip(\"127.0.0.1\"), 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(to_ip(ipField))", + "query": "row var = ip_prefix(to_ip(to_ip(\"127.0.0.1\")), to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(to_string(booleanField))", - "error": [], + "query": "row var = ip_prefix(true, true, true)", + "error": [ + "Argument of [ip_prefix] must be [ip], found value [true] type [boolean]", + "Argument of [ip_prefix] must be [integer], found value [true] type [boolean]", + "Argument of [ip_prefix] must be [integer], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(versionField)", + "query": "from a_index | eval var = ip_prefix(ipField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(versionField)", + "query": "from a_index | eval ip_prefix(ipField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(to_version(stringField))", + "query": "from a_index | eval var = ip_prefix(to_ip(ipField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(booleanField, extraArg)", + "query": "from a_index | eval ip_prefix(booleanField, booleanField, booleanField)", "error": [ - "Error: [mv_dedupe] function expects exactly one argument, got 2." + "Argument of [ip_prefix] must be [ip], found value [booleanField] type [boolean]", + "Argument of [ip_prefix] must be [integer], found value [booleanField] type [boolean]", + "Argument of [ip_prefix] must be [integer], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort mv_dedupe(booleanField)", - "error": [], + "query": "from a_index | eval ip_prefix(ipField, integerField, integerField, extraArg)", + "error": [ + "Error: [ip_prefix] function expects exactly 3 arguments, got 4." + ], "warning": [] }, { - "query": "row mv_dedupe(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | sort ip_prefix(ipField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | eval ip_prefix(null, null, null)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_cartesianshape(\"POINT (30 10)\"))", + "query": "row nullVar = null | eval ip_prefix(nullVar, nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "row mv_dedupe(to_cartesianshape(\"POINT (30 10)\"))", + "query": "row var = least(true)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row least(true)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_geopoint(\"POINT (30 10)\"))", + "query": "row var = least(to_boolean(true))", "error": [], "warning": [] }, { - "query": "row mv_dedupe(to_geopoint(\"POINT (30 10)\"))", + "query": "row var = least(true, true)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "row least(true, true)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_geoshape(\"POINT (30 10)\"))", + "query": "row var = least(to_boolean(true), to_boolean(true))", "error": [], "warning": [] }, { - "query": "row mv_dedupe(to_geoshape(\"POINT (30 10)\"))", + "query": "row var = least(5.5, 5.5)", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "row least(5.5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(cartesianPointField)", + "query": "row var = least(to_double(true), to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(to_cartesianpoint(cartesianPointField))", + "query": "row var = least(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(cartesianShapeField)", + "query": "row least(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(cartesianShapeField)", + "query": "row var = least(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(to_cartesianshape(cartesianPointField))", + "query": "row var = least(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(geoPointField)", + "query": "row least(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(geoPointField)", + "query": "row var = least(to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(to_geopoint(geoPointField))", + "query": "row var = least(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(geoShapeField)", + "query": "row least(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(geoShapeField)", + "query": "row var = least(to_ip(to_ip(\"127.0.0.1\")), to_ip(to_ip(\"127.0.0.1\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(to_geoshape(geoPointField))", + "query": "row var = least(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(numberField, extraArg)", - "error": [ - "Error: [mv_dedupe] function expects exactly one argument, got 2." - ], + "query": "row least(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | sort mv_dedupe(numberField)", + "query": "row var = least(to_string(true))", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row var = least(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(cartesianPointField)", + "query": "row least(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(null)", + "query": "row var = least(to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval mv_dedupe(nullVar)", + "query": "row var = least(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "row var = mv_first(\"a\")", + "query": "row least(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "row mv_first(\"a\")", + "query": "row var = least(to_version(\"a\"), to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(stringField)", - "error": [], + "query": "row var = least(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "error": [ + "Argument of [least] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]", + "Argument of [least] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + ], "warning": [] }, { - "query": "from a_index | eval mv_first(stringField)", + "query": "from a_index | where least(doubleField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(*)", + "query": "from a_index | where least(cartesianPointField, cartesianPointField) > 0", "error": [ - "Using wildcards (*) in mv_first is not allowed" + "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]", + "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" ], "warning": [] }, { - "query": "from a_index | sort mv_first(stringField)", + "query": "from a_index | where least(integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_first(true)", - "error": [], + "query": "from a_index | where least(cartesianPointField) > 0", + "error": [ + "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], "warning": [] }, { - "query": "row mv_first(true)", + "query": "from a_index | where least(integerField, integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_boolean(true))", + "query": "from a_index | where least(longField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | where least(longField, longField) > 0", "error": [], "warning": [] }, { - "query": "row mv_first(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = least(booleanField)", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | eval least(booleanField)", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = least(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "row mv_first(to_cartesianshape(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | eval least(cartesianPointField)", + "error": [ + "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], "warning": [] }, { - "query": "row var = mv_first(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = least(booleanField, booleanField)", "error": [], "warning": [] }, { - "query": "row var = mv_first(now())", + "query": "from a_index | eval least(booleanField, booleanField)", "error": [], "warning": [] }, { - "query": "row mv_first(now())", + "query": "from a_index | eval var = least(to_boolean(booleanField), to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_datetime(now()))", - "error": [], + "query": "from a_index | eval least(cartesianPointField, cartesianPointField)", + "error": [ + "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]", + "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], "warning": [] }, { - "query": "row var = mv_first(5)", + "query": "from a_index | eval var = least(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "row mv_first(5)", + "query": "from a_index | eval least(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_integer(true))", + "query": "from a_index | eval var = least(to_double(booleanField), to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = least(integerField)", "error": [], "warning": [] }, { - "query": "row mv_first(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval least(integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = least(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = least(integerField, integerField)", "error": [], "warning": [] }, { - "query": "row mv_first(to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval least(integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = least(to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval var = least(ipField, ipField)", "error": [], "warning": [] }, { - "query": "row mv_first(to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval least(ipField, ipField)", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_ip(to_ip(\"127.0.0.1\")))", + "query": "from a_index | eval var = least(to_ip(ipField), to_ip(ipField))", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_string(true))", + "query": "from a_index | eval var = least(keywordField)", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_version(\"1.0.0\"))", + "query": "from a_index | eval least(keywordField)", "error": [], "warning": [] }, { - "query": "row mv_first(to_version(\"1.0.0\"))", + "query": "from a_index | eval var = least(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_first(to_version(\"a\"))", + "query": "from a_index | eval var = least(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | where mv_first(numberField) > 0", + "query": "from a_index | eval least(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(mv_first(stringField)) > 0", + "query": "from a_index | eval var = least(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(booleanField)", + "query": "from a_index | eval var = least(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_first(booleanField)", + "query": "from a_index | eval least(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(to_boolean(booleanField))", + "query": "from a_index | eval var = least(longField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(cartesianPointField)", + "query": "from a_index | eval least(longField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_first(cartesianPointField)", + "query": "from a_index | eval var = least(textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(to_cartesianpoint(cartesianPointField))", + "query": "from a_index | eval least(textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(cartesianShapeField)", + "query": "from a_index | eval var = least(textField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_first(cartesianShapeField)", + "query": "from a_index | eval least(textField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(to_cartesianshape(cartesianPointField))", + "query": "from a_index | eval var = least(versionField, versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(dateField)", + "query": "from a_index | eval least(versionField, versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_first(dateField)", + "query": "from a_index | eval var = least(to_version(keywordField), to_version(keywordField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(to_datetime(dateField))", + "query": "from a_index | sort least(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(numberField)", + "query": "from a_index | eval least(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_first(numberField)", + "query": "row nullVar = null | eval least(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(to_integer(booleanField))", + "query": "row var = left(\"a\", 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(geoPointField)", + "query": "row left(\"a\", 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_first(geoPointField)", + "query": "row var = left(to_string(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(to_geopoint(geoPointField))", - "error": [], + "query": "row var = left(true, true)", + "error": [ + "Argument of [left] must be [keyword], found value [true] type [boolean]", + "Argument of [left] must be [integer], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = mv_first(geoShapeField)", + "query": "from a_index | eval var = left(keywordField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_first(geoShapeField)", + "query": "from a_index | eval left(keywordField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(to_geoshape(geoPointField))", + "query": "from a_index | eval var = left(to_string(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(ipField)", - "error": [], + "query": "from a_index | eval left(booleanField, booleanField)", + "error": [ + "Argument of [left] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [left] must be [integer], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval mv_first(ipField)", + "query": "from a_index | eval var = left(textField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(to_ip(ipField))", + "query": "from a_index | eval left(textField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(to_string(booleanField))", - "error": [], + "query": "from a_index | eval left(keywordField, integerField, extraArg)", + "error": [ + "Error: [left] function expects exactly 2 arguments, got 3." + ], "warning": [] }, { - "query": "from a_index | eval var = mv_first(versionField)", + "query": "from a_index | sort left(keywordField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_first(versionField)", + "query": "from a_index | eval left(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(to_version(stringField))", + "query": "row nullVar = null | eval left(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_first(booleanField, extraArg)", - "error": [ - "Error: [mv_first] function expects exactly one argument, got 2." - ], + "query": "row var = length(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | sort mv_first(booleanField)", + "query": "row length(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_first(null)", + "query": "row var = length(to_string(true))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval mv_first(nullVar)", - "error": [], + "query": "row var = length(true)", + "error": [ + "Argument of [length] must be [keyword], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row var = mv_last(\"a\")", + "query": "from a_index | eval var = length(keywordField)", "error": [], "warning": [] }, { - "query": "row mv_last(\"a\")", + "query": "from a_index | eval length(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(stringField)", + "query": "from a_index | eval var = length(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_last(stringField)", - "error": [], + "query": "from a_index | eval length(booleanField)", + "error": [ + "Argument of [length] must be [keyword], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = mv_last(*)", + "query": "from a_index | eval var = length(*)", "error": [ - "Using wildcards (*) in mv_last is not allowed" + "Using wildcards (*) in length is not allowed" ], "warning": [] }, { - "query": "from a_index | sort mv_last(stringField)", + "query": "from a_index | eval var = length(textField)", "error": [], "warning": [] }, { - "query": "row var = mv_last(true)", + "query": "from a_index | eval length(textField)", "error": [], "warning": [] }, { - "query": "row mv_last(true)", - "error": [], + "query": "from a_index | eval length(keywordField, extraArg)", + "error": [ + "Error: [length] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "row var = mv_last(to_boolean(true))", + "query": "from a_index | sort length(keywordField)", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval length(null)", "error": [], "warning": [] }, { - "query": "row mv_last(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row nullVar = null | eval length(nullVar)", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row var = locate(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_cartesianshape(\"POINT (30 10)\"))", + "query": "row locate(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row mv_last(to_cartesianshape(\"POINT (30 10)\"))", + "query": "row var = locate(to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row var = locate(\"a\", \"a\", 5)", "error": [], "warning": [] }, { - "query": "row var = mv_last(now())", + "query": "row locate(\"a\", \"a\", 5)", "error": [], "warning": [] }, { - "query": "row mv_last(now())", + "query": "row var = locate(to_string(true), to_string(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_datetime(now()))", - "error": [], + "query": "row var = locate(true, true, true)", + "error": [ + "Argument of [locate] must be [keyword], found value [true] type [boolean]", + "Argument of [locate] must be [keyword], found value [true] type [boolean]", + "Argument of [locate] must be [integer], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row var = mv_last(5)", + "query": "from a_index | eval var = locate(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row mv_last(5)", + "query": "from a_index | eval locate(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_integer(true))", + "query": "from a_index | eval var = locate(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_geopoint(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | eval locate(booleanField, booleanField)", + "error": [ + "Argument of [locate] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [locate] must be [keyword], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row mv_last(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = locate(keywordField, keywordField, integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval locate(keywordField, keywordField, integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = locate(to_string(booleanField), to_string(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row mv_last(to_geoshape(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | eval locate(booleanField, booleanField, booleanField)", + "error": [ + "Argument of [locate] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [locate] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [locate] must be [integer], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = mv_last(to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = locate(keywordField, textField)", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval locate(keywordField, textField)", "error": [], "warning": [] }, { - "query": "row mv_last(to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval var = locate(keywordField, textField, integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_ip(to_ip(\"127.0.0.1\")))", + "query": "from a_index | eval locate(keywordField, textField, integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_string(true))", + "query": "from a_index | eval var = locate(textField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_version(\"1.0.0\"))", + "query": "from a_index | eval locate(textField, keywordField)", "error": [], "warning": [] }, { - "query": "row mv_last(to_version(\"1.0.0\"))", + "query": "from a_index | eval var = locate(textField, keywordField, integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_last(to_version(\"a\"))", + "query": "from a_index | eval locate(textField, keywordField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | where mv_last(numberField) > 0", + "query": "from a_index | eval var = locate(textField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(mv_last(stringField)) > 0", + "query": "from a_index | eval locate(textField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(booleanField)", + "query": "from a_index | eval var = locate(textField, textField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_last(booleanField)", + "query": "from a_index | eval locate(textField, textField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(to_boolean(booleanField))", - "error": [], + "query": "from a_index | eval locate(keywordField, keywordField, integerField, extraArg)", + "error": [ + "Error: [locate] function expects no more than 3 arguments, got 4." + ], "warning": [] }, { - "query": "from a_index | eval var = mv_last(cartesianPointField)", + "query": "from a_index | sort locate(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_last(cartesianPointField)", + "query": "from a_index | eval locate(null, null, null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(to_cartesianpoint(cartesianPointField))", + "query": "row nullVar = null | eval locate(nullVar, nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(cartesianShapeField)", + "query": "row var = log(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_last(cartesianShapeField)", + "query": "row log(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(to_cartesianshape(cartesianPointField))", + "query": "row var = log(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(dateField)", + "query": "row var = log(5.5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_last(dateField)", + "query": "row log(5.5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(to_datetime(dateField))", + "query": "row var = log(to_double(true), to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(numberField)", + "query": "row var = log(5.5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_last(numberField)", + "query": "row log(5.5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(to_integer(booleanField))", + "query": "row var = log(to_double(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(geoPointField)", + "query": "row var = log(to_double(true), 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_last(geoPointField)", + "query": "row var = log(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(to_geopoint(geoPointField))", + "query": "row log(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(geoShapeField)", + "query": "row var = log(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_last(geoShapeField)", + "query": "row var = log(5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(to_geoshape(geoPointField))", + "query": "row log(5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(ipField)", + "query": "row var = log(to_integer(true), to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_last(ipField)", + "query": "row var = log(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(to_ip(ipField))", + "query": "row log(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(to_string(booleanField))", + "query": "row var = log(to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(versionField)", + "query": "row var = log(to_integer(true), 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_last(versionField)", + "query": "row var = log(5, to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(to_version(stringField))", + "query": "row var = log(5, to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_last(booleanField, extraArg)", + "query": "row var = log(true, true)", "error": [ - "Error: [mv_last] function expects exactly one argument, got 2." + "Argument of [log] must be [double], found value [true] type [boolean]", + "Argument of [log] must be [double], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort mv_last(booleanField)", + "query": "from a_index | where log(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_last(null)", - "error": [], + "query": "from a_index | where log(booleanField) > 0", + "error": [ + "Argument of [log] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row nullVar = null | eval mv_last(nullVar)", + "query": "from a_index | where log(doubleField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_max(\"a\")", - "error": [], + "query": "from a_index | where log(booleanField, booleanField) > 0", + "error": [ + "Argument of [log] must be [double], found value [booleanField] type [boolean]", + "Argument of [log] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row mv_max(\"a\")", + "query": "from a_index | where log(doubleField, integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_max(stringField)", + "query": "from a_index | where log(doubleField, longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_max(stringField)", + "query": "from a_index | where log(doubleField, unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_max(*)", - "error": [ - "Using wildcards (*) in mv_max is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | sort mv_max(stringField)", + "query": "from a_index | where log(integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_max(true)", + "query": "from a_index | where log(integerField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "row mv_max(true)", + "query": "from a_index | where log(integerField, integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_max(to_boolean(true))", + "query": "from a_index | where log(integerField, longField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_max(now())", + "query": "from a_index | where log(integerField, unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row mv_max(now())", + "query": "from a_index | where log(longField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_max(to_datetime(now()))", + "query": "from a_index | where log(longField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_max(5)", + "query": "from a_index | where log(longField, integerField) > 0", "error": [], "warning": [] }, { - "query": "row mv_max(5)", + "query": "from a_index | where log(longField, longField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_max(to_integer(true))", + "query": "from a_index | where log(longField, unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_max(to_ip(\"127.0.0.1\"))", + "query": "from a_index | where log(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row mv_max(to_ip(\"127.0.0.1\"))", + "query": "from a_index | where log(unsignedLongField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_max(to_ip(to_ip(\"127.0.0.1\")))", + "query": "from a_index | where log(unsignedLongField, integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_max(to_string(true))", + "query": "from a_index | where log(unsignedLongField, longField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_max(to_version(\"1.0.0\"))", + "query": "from a_index | where log(unsignedLongField, unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row mv_max(to_version(\"1.0.0\"))", + "query": "from a_index | eval var = log(doubleField)", "error": [], "warning": [] }, { - "query": "row var = mv_max(to_version(\"a\"))", + "query": "from a_index | eval log(doubleField)", "error": [], "warning": [] }, { - "query": "row var = mv_max(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [ - "Argument of [mv_max] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | where mv_max(numberField) > 0", + "query": "from a_index | eval var = log(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | where mv_max(cartesianPointField) > 0", + "query": "from a_index | eval log(booleanField)", "error": [ - "Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + "Argument of [log] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where length(mv_max(stringField)) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where length(mv_max(cartesianPointField)) > 0", + "query": "from a_index | eval var = log(*)", "error": [ - "Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + "Using wildcards (*) in log is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = mv_max(booleanField)", + "query": "from a_index | eval var = log(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_max(booleanField)", + "query": "from a_index | eval log(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_max(to_boolean(booleanField))", + "query": "from a_index | eval var = log(to_double(booleanField), to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_max(cartesianPointField)", + "query": "from a_index | eval log(booleanField, booleanField)", "error": [ - "Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + "Argument of [log] must be [double], found value [booleanField] type [boolean]", + "Argument of [log] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = mv_max(dateField)", + "query": "from a_index | eval var = log(doubleField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_max(dateField)", + "query": "from a_index | eval log(doubleField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_max(to_datetime(dateField))", + "query": "from a_index | eval var = log(to_double(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_max(numberField)", + "query": "from a_index | eval var = log(doubleField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_max(numberField)", + "query": "from a_index | eval log(doubleField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_max(to_integer(booleanField))", + "query": "from a_index | eval var = log(to_double(booleanField), longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_max(ipField)", + "query": "from a_index | eval var = log(doubleField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_max(ipField)", + "query": "from a_index | eval log(doubleField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_max(to_ip(ipField))", + "query": "from a_index | eval var = log(to_double(booleanField), unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_max(to_string(booleanField))", + "query": "from a_index | eval var = log(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_max(versionField)", + "query": "from a_index | eval log(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_max(versionField)", + "query": "from a_index | eval var = log(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_max(to_version(stringField))", + "query": "from a_index | eval var = log(integerField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_max(booleanField, extraArg)", - "error": [ - "Error: [mv_max] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort mv_max(booleanField)", + "query": "from a_index | eval log(integerField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_max(null)", + "query": "from a_index | eval var = log(to_integer(booleanField), to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval mv_max(nullVar)", + "query": "from a_index | eval var = log(integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_median(5)", + "query": "from a_index | eval log(integerField, integerField)", "error": [], "warning": [] }, { - "query": "row mv_median(5)", + "query": "from a_index | eval var = log(to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_median(to_integer(\"a\"))", + "query": "from a_index | eval var = log(integerField, longField)", "error": [], "warning": [] }, { - "query": "row var = mv_median(\"a\")", - "error": [ - "Argument of [mv_median] must be [number], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval log(integerField, longField)", + "error": [], "warning": [] }, { - "query": "from a_index | where mv_median(numberField) > 0", + "query": "from a_index | eval var = log(to_integer(booleanField), longField)", "error": [], "warning": [] }, { - "query": "from a_index | where mv_median(stringField) > 0", - "error": [ - "Argument of [mv_median] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = log(integerField, unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_median(numberField)", + "query": "from a_index | eval log(integerField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_median(numberField)", + "query": "from a_index | eval var = log(to_integer(booleanField), unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_median(to_integer(stringField))", + "query": "from a_index | eval var = log(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_median(stringField)", - "error": [ - "Argument of [mv_median] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval log(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval mv_median(numberField, extraArg)", - "error": [ - "Error: [mv_median] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = log(longField, doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_median(*)", - "error": [ - "Using wildcards (*) in mv_median is not allowed" - ], + "query": "from a_index | eval log(longField, doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort mv_median(numberField)", + "query": "from a_index | eval var = log(longField, to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_median(to_integer(true))", + "query": "from a_index | eval var = log(longField, integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_median(true)", - "error": [ - "Argument of [mv_median] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | eval log(longField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | where mv_median(booleanField) > 0", - "error": [ - "Argument of [mv_median] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = log(longField, to_integer(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_median(to_integer(booleanField))", + "query": "from a_index | eval var = log(longField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_median(booleanField)", - "error": [ - "Argument of [mv_median] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval log(longField, longField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval mv_median(null)", + "query": "from a_index | eval var = log(longField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval mv_median(nullVar)", + "query": "from a_index | eval log(longField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = mv_min(\"a\")", + "query": "from a_index | eval var = log(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row mv_min(\"a\")", + "query": "from a_index | eval log(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_min(stringField)", + "query": "from a_index | eval var = log(unsignedLongField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_min(stringField)", + "query": "from a_index | eval log(unsignedLongField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_min(*)", - "error": [ - "Using wildcards (*) in mv_min is not allowed" - ], + "query": "from a_index | eval var = log(unsignedLongField, to_double(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | sort mv_min(stringField)", + "query": "from a_index | eval var = log(unsignedLongField, integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_min(true)", + "query": "from a_index | eval log(unsignedLongField, integerField)", "error": [], "warning": [] }, { - "query": "row mv_min(true)", + "query": "from a_index | eval var = log(unsignedLongField, to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_min(to_boolean(true))", + "query": "from a_index | eval var = log(unsignedLongField, longField)", "error": [], "warning": [] }, { - "query": "row var = mv_min(now())", + "query": "from a_index | eval log(unsignedLongField, longField)", "error": [], "warning": [] }, { - "query": "row mv_min(now())", + "query": "from a_index | eval var = log(unsignedLongField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = mv_min(to_datetime(now()))", + "query": "from a_index | eval log(unsignedLongField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = mv_min(5)", - "error": [], + "query": "from a_index | eval log(doubleField, doubleField, extraArg)", + "error": [ + "Error: [log] function expects no more than 2 arguments, got 3." + ], "warning": [] }, { - "query": "row mv_min(5)", + "query": "from a_index | sort log(doubleField)", "error": [], "warning": [] }, { - "query": "row var = mv_min(to_integer(true))", + "query": "from a_index | eval log(null, null)", "error": [], "warning": [] }, { - "query": "row var = mv_min(to_ip(\"127.0.0.1\"))", + "query": "row nullVar = null | eval log(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "row mv_min(to_ip(\"127.0.0.1\"))", + "query": "row var = log10(5.5)", "error": [], "warning": [] }, { - "query": "row var = mv_min(to_ip(to_ip(\"127.0.0.1\")))", + "query": "row log10(5.5)", "error": [], "warning": [] }, { - "query": "row var = mv_min(to_string(true))", + "query": "row var = log10(to_double(true))", "error": [], "warning": [] }, { - "query": "row var = mv_min(to_version(\"1.0.0\"))", + "query": "row var = log10(5)", "error": [], "warning": [] }, { - "query": "row mv_min(to_version(\"1.0.0\"))", + "query": "row log10(5)", "error": [], "warning": [] }, { - "query": "row var = mv_min(to_version(\"a\"))", + "query": "row var = log10(to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = mv_min(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row var = log10(true)", "error": [ - "Argument of [mv_min] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + "Argument of [log10] must be [double], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where mv_min(numberField) > 0", + "query": "from a_index | where log10(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where mv_min(cartesianPointField) > 0", + "query": "from a_index | where log10(booleanField) > 0", "error": [ - "Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + "Argument of [log10] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where length(mv_min(stringField)) > 0", + "query": "from a_index | where log10(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where length(mv_min(cartesianPointField)) > 0", - "error": [ - "Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "from a_index | where log10(longField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_min(booleanField)", + "query": "from a_index | where log10(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_min(booleanField)", + "query": "from a_index | eval var = log10(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_min(to_boolean(booleanField))", + "query": "from a_index | eval log10(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_min(cartesianPointField)", + "query": "from a_index | eval var = log10(to_double(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval log10(booleanField)", "error": [ - "Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + "Argument of [log10] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = mv_min(dateField)", + "query": "from a_index | eval var = log10(*)", + "error": [ + "Using wildcards (*) in log10 is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = log10(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_min(dateField)", + "query": "from a_index | eval log10(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_min(to_datetime(dateField))", + "query": "from a_index | eval var = log10(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_min(numberField)", + "query": "from a_index | eval var = log10(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_min(numberField)", + "query": "from a_index | eval log10(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_min(to_integer(booleanField))", + "query": "from a_index | eval var = log10(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_min(ipField)", + "query": "from a_index | eval log10(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_min(ipField)", + "query": "from a_index | eval log10(doubleField, extraArg)", + "error": [ + "Error: [log10] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort log10(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_min(to_ip(ipField))", + "query": "from a_index | eval log10(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_min(to_string(booleanField))", + "query": "row nullVar = null | eval log10(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_min(versionField)", + "query": "row var = ltrim(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_min(versionField)", + "query": "row ltrim(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_min(to_version(stringField))", + "query": "row var = ltrim(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_min(booleanField, extraArg)", + "query": "row var = ltrim(true)", "error": [ - "Error: [mv_min] function expects exactly one argument, got 2." + "Argument of [ltrim] must be [keyword], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort mv_min(booleanField)", + "query": "from a_index | eval var = ltrim(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_min(null)", + "query": "from a_index | eval ltrim(keywordField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval mv_min(nullVar)", + "query": "from a_index | eval var = ltrim(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_slice(\"a\", 5, 5)", - "error": [], + "query": "from a_index | eval ltrim(booleanField)", + "error": [ + "Argument of [ltrim] must be [keyword], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row mv_slice(\"a\", 5, 5)", - "error": [], + "query": "from a_index | eval var = ltrim(*)", + "error": [ + "Using wildcards (*) in ltrim is not allowed" + ], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(stringField, numberField, numberField)", + "query": "from a_index | eval var = ltrim(textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(stringField, numberField, numberField)", + "query": "from a_index | eval ltrim(textField)", "error": [], "warning": [] }, { - "query": "from a_index | sort mv_slice(stringField, numberField, numberField)", - "error": [], + "query": "from a_index | eval ltrim(keywordField, extraArg)", + "error": [ + "Error: [ltrim] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "row var = mv_slice(true, 5, 5)", + "query": "from a_index | sort ltrim(keywordField)", "error": [], "warning": [] }, { - "query": "row mv_slice(true, 5, 5)", + "query": "from a_index | eval ltrim(null)", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_boolean(true), to_integer(true), to_integer(true))", + "query": "row nullVar = null | eval ltrim(nullVar)", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_cartesianpoint(\"POINT (30 10)\"), 5, 5)", + "query": "row var = mv_append(true, true)", "error": [], "warning": [] }, { - "query": "row mv_slice(to_cartesianpoint(\"POINT (30 10)\"), 5, 5)", + "query": "row mv_append(true, true)", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_integer(true), to_integer(true))", + "query": "row var = mv_append(to_boolean(true), to_boolean(true))", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_cartesianshape(\"POINT (30 10)\"), 5, 5)", - "error": [], + "query": "row var = mv_append(cartesianPointField, cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row mv_slice(to_cartesianshape(\"POINT (30 10)\"), 5, 5)", + "query": "row mv_append(cartesianPointField, cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], + "warning": [] + }, + { + "query": "row var = mv_append(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], + "warning": [] + }, + { + "query": "row var = mv_append(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_integer(true), to_integer(true))", + "query": "row mv_append(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = mv_slice(now(), 5, 5)", + "query": "row var = mv_append(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], + "warning": [] + }, + { + "query": "row var = mv_append(to_datetime(\"2021-01-01T00:00:00Z\"), to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "row mv_slice(now(), 5, 5)", + "query": "row mv_append(to_datetime(\"2021-01-01T00:00:00Z\"), to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_datetime(now()), to_integer(true), to_integer(true))", + "query": "row var = mv_append(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")), to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", "error": [], "warning": [] }, { - "query": "row var = mv_slice(5, 5, 5)", + "query": "row var = mv_append(5.5, 5.5)", "error": [], "warning": [] }, { - "query": "row mv_slice(5, 5, 5)", + "query": "row mv_append(5.5, 5.5)", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_integer(true), to_integer(true), to_integer(true))", + "query": "row var = mv_append(to_double(true), to_double(true))", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_geopoint(\"POINT (30 10)\"), 5, 5)", + "query": "row var = mv_append(geoPointField, geoPointField)", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], + "warning": [] + }, + { + "query": "row mv_append(geoPointField, geoPointField)", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], + "warning": [] + }, + { + "query": "row var = mv_append(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], + "warning": [] + }, + { + "query": "row var = mv_append(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row mv_slice(to_geopoint(\"POINT (30 10)\"), 5, 5)", + "query": "row mv_append(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_integer(true), to_integer(true))", + "query": "row var = mv_append(to_geoshape(geoPointField), to_geoshape(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], + "warning": [] + }, + { + "query": "row var = mv_append(5, 5)", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_geoshape(\"POINT (30 10)\"), 5, 5)", + "query": "row mv_append(5, 5)", "error": [], "warning": [] }, { - "query": "row mv_slice(to_geoshape(\"POINT (30 10)\"), 5, 5)", + "query": "row var = mv_append(to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_integer(true), to_integer(true))", + "query": "row var = mv_append(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_ip(\"127.0.0.1\"), 5, 5)", + "query": "row mv_append(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "row mv_slice(to_ip(\"127.0.0.1\"), 5, 5)", + "query": "row var = mv_append(to_ip(to_ip(\"127.0.0.1\")), to_ip(to_ip(\"127.0.0.1\")))", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_ip(to_ip(\"127.0.0.1\")), to_integer(true), to_integer(true))", + "query": "row var = mv_append(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_string(true), to_integer(true), to_integer(true))", + "query": "row mv_append(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_version(\"1.0.0\"), 5, 5)", + "query": "row var = mv_append(to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "row mv_slice(to_version(\"1.0.0\"), 5, 5)", + "query": "row var = mv_append(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_version(\"a\"), to_integer(true), to_integer(true))", + "query": "row mv_append(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "row var = mv_slice(to_version(\"1.0.0\"), true, true)", - "error": [ - "Argument of [mv_slice] must be [number], found value [true] type [boolean]", - "Argument of [mv_slice] must be [number], found value [true] type [boolean]" - ], + "query": "row var = mv_append(to_version(\"a\"), to_version(\"a\"))", + "error": [], "warning": [] }, { - "query": "from a_index | where mv_slice(numberField, numberField, numberField) > 0", + "query": "from a_index | where mv_append(doubleField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where mv_slice(numberField, booleanField, booleanField) > 0", + "query": "from a_index | where mv_append(counterDoubleField, counterDoubleField) > 0", "error": [ - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" + "Argument of [mv_append] must be [boolean], found value [counterDoubleField] type [counter_double]", + "Argument of [mv_append] must be [boolean], found value [counterDoubleField] type [counter_double]" ], "warning": [] }, { - "query": "from a_index | where length(mv_slice(stringField, numberField, numberField)) > 0", + "query": "from a_index | where mv_append(integerField, integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where length(mv_slice(stringField, booleanField, booleanField)) > 0", - "error": [ - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | where mv_append(longField, longField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(booleanField, numberField, numberField)", + "query": "from a_index | eval var = mv_append(booleanField, booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(booleanField, numberField, numberField)", + "query": "from a_index | eval mv_append(booleanField, booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(to_boolean(booleanField), to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval var = mv_append(to_boolean(booleanField), to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(booleanField, booleanField, booleanField)", + "query": "from a_index | eval mv_append(counterDoubleField, counterDoubleField)", "error": [ - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" + "Argument of [mv_append] must be [boolean], found value [counterDoubleField] type [counter_double]", + "Argument of [mv_append] must be [boolean], found value [counterDoubleField] type [counter_double]" ], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(cartesianPointField, numberField, numberField)", + "query": "from a_index | eval var = mv_append(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(cartesianPointField, numberField, numberField)", + "query": "from a_index | eval mv_append(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(to_cartesianpoint(cartesianPointField), to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval var = mv_append(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(cartesianPointField, booleanField, booleanField)", - "error": [ - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_append(cartesianShapeField, cartesianShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(cartesianShapeField, numberField, numberField)", + "query": "from a_index | eval mv_append(cartesianShapeField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(cartesianShapeField, numberField, numberField)", + "query": "from a_index | eval var = mv_append(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(to_cartesianshape(cartesianPointField), to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval var = mv_append(dateField, dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(cartesianShapeField, booleanField, booleanField)", - "error": [ - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval mv_append(dateField, dateField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(dateField, numberField, numberField)", + "query": "from a_index | eval var = mv_append(to_datetime(dateField), to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(dateField, numberField, numberField)", + "query": "from a_index | eval var = mv_append(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(to_datetime(dateField), to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval mv_append(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(dateField, booleanField, booleanField)", - "error": [ - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_append(to_double(booleanField), to_double(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(numberField, numberField, numberField)", + "query": "from a_index | eval var = mv_append(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(numberField, numberField, numberField)", + "query": "from a_index | eval mv_append(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(to_integer(booleanField), to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval var = mv_append(to_geopoint(geoPointField), to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(numberField, booleanField, booleanField)", - "error": [ - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_append(geoShapeField, geoShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(geoPointField, numberField, numberField)", + "query": "from a_index | eval mv_append(geoShapeField, geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(geoPointField, numberField, numberField)", + "query": "from a_index | eval var = mv_append(to_geoshape(geoPointField), to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(to_geopoint(geoPointField), to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval var = mv_append(integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(geoPointField, booleanField, booleanField)", - "error": [ - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval mv_append(integerField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(geoShapeField, numberField, numberField)", + "query": "from a_index | eval var = mv_append(to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(geoShapeField, numberField, numberField)", + "query": "from a_index | eval var = mv_append(ipField, ipField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(to_geoshape(geoPointField), to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval mv_append(ipField, ipField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(geoShapeField, booleanField, booleanField)", - "error": [ - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_append(to_ip(ipField), to_ip(ipField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(ipField, numberField, numberField)", + "query": "from a_index | eval var = mv_append(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(ipField, numberField, numberField)", + "query": "from a_index | eval mv_append(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(to_ip(ipField), to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval var = mv_append(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(ipField, booleanField, booleanField)", - "error": [ - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_append(longField, longField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(to_string(booleanField), to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval mv_append(longField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(stringField, booleanField, booleanField)", - "error": [ - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_append(textField, textField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(versionField, numberField, numberField)", + "query": "from a_index | eval mv_append(textField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(versionField, numberField, numberField)", + "query": "from a_index | eval var = mv_append(versionField, versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(to_version(stringField), to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval mv_append(versionField, versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(versionField, booleanField, booleanField)", - "error": [ - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", - "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_append(to_version(keywordField), to_version(keywordField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(booleanField, numberField, numberField, extraArg)", + "query": "from a_index | eval mv_append(booleanField, booleanField, extraArg)", "error": [ - "Error: [mv_slice] function expects no more than 3 arguments, got 4." + "Error: [mv_append] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | sort mv_slice(booleanField, numberField, numberField)", + "query": "from a_index | sort mv_append(booleanField, booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(null, null, null)", + "query": "from a_index | eval mv_append(null, null)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval mv_slice(nullVar, nullVar, nullVar)", + "query": "row nullVar = null | eval mv_append(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "row var = mv_sort(\"a\", \"asc\")", + "query": "from a_index | eval mv_append(\"2022\", \"2022\")", "error": [], "warning": [] }, { - "query": "row mv_sort(\"a\", \"asc\")", + "query": "from a_index | eval mv_append(concat(\"20\", \"22\"), concat(\"20\", \"22\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_sort(stringField, \"asc\")", + "query": "row var = mv_avg(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sort(stringField, \"asc\")", + "query": "row mv_avg(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | sort mv_sort(stringField, \"asc\")", + "query": "row var = mv_avg(to_double(true))", "error": [], "warning": [] }, { - "query": "row var = mv_sort(true, \"asc\")", + "query": "row var = mv_avg(5)", "error": [], "warning": [] }, { - "query": "row mv_sort(true, \"asc\")", + "query": "row mv_avg(5)", "error": [], "warning": [] }, { - "query": "row var = mv_sort(now(), \"asc\")", + "query": "row var = mv_avg(to_integer(true))", "error": [], "warning": [] }, { - "query": "row mv_sort(now(), \"asc\")", - "error": [], + "query": "row var = mv_avg(true)", + "error": [ + "Argument of [mv_avg] must be [double], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row var = mv_sort(5, \"asc\")", + "query": "from a_index | where mv_avg(doubleField) > 0", "error": [], "warning": [] }, { - "query": "row mv_sort(5, \"asc\")", - "error": [], + "query": "from a_index | where mv_avg(booleanField) > 0", + "error": [ + "Argument of [mv_avg] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = mv_sort(to_ip(\"127.0.0.1\"), \"asc\")", + "query": "from a_index | where mv_avg(integerField) > 0", "error": [], "warning": [] }, { - "query": "row mv_sort(to_ip(\"127.0.0.1\"), \"asc\")", + "query": "from a_index | where mv_avg(longField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_sort(to_version(\"1.0.0\"), \"asc\")", + "query": "from a_index | where mv_avg(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row mv_sort(to_version(\"1.0.0\"), \"asc\")", + "query": "from a_index | eval var = mv_avg(doubleField)", "error": [], "warning": [] }, { - "query": "row var = mv_sort(to_cartesianpoint(\"POINT (30 10)\"), true)", - "error": [ - "Argument of [mv_sort] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]", - "Argument of [mv_sort] must be [string], found value [true] type [boolean]" - ], + "query": "from a_index | eval mv_avg(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | where mv_sort(numberField, \"asc\") > 0", + "query": "from a_index | eval var = mv_avg(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | where mv_sort(cartesianPointField, booleanField) > 0", + "query": "from a_index | eval mv_avg(booleanField)", "error": [ - "Argument of [mv_sort] must be [boolean], found value [cartesianPointField] type [cartesian_point]", - "Argument of [mv_sort] must be [string], found value [booleanField] type [boolean]" + "Argument of [mv_avg] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where length(mv_sort(stringField, \"asc\")) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where length(mv_sort(cartesianPointField, booleanField)) > 0", + "query": "from a_index | eval var = mv_avg(*)", "error": [ - "Argument of [mv_sort] must be [boolean], found value [cartesianPointField] type [cartesian_point]", - "Argument of [mv_sort] must be [string], found value [booleanField] type [boolean]" + "Using wildcards (*) in mv_avg is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = mv_sort(booleanField, \"asc\")", + "query": "from a_index | eval var = mv_avg(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sort(booleanField, \"asc\")", + "query": "from a_index | eval mv_avg(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_sort(dateField, \"asc\")", + "query": "from a_index | eval var = mv_avg(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sort(dateField, \"asc\")", + "query": "from a_index | eval var = mv_avg(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_sort(numberField, \"asc\")", + "query": "from a_index | eval mv_avg(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sort(numberField, \"asc\")", + "query": "from a_index | eval var = mv_avg(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_sort(ipField, \"asc\")", + "query": "from a_index | eval mv_avg(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sort(ipField, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_sort(versionField, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_sort(versionField, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_sort(booleanField, \"asc\", extraArg)", + "query": "from a_index | eval mv_avg(doubleField, extraArg)", "error": [ - "Error: [mv_sort] function expects no more than 2 arguments, got 3." + "Error: [mv_avg] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | sort mv_sort(booleanField, \"asc\")", + "query": "from a_index | sort mv_avg(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sort(null, null)", + "query": "from a_index | eval mv_avg(null)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval mv_sort(nullVar, nullVar)", + "query": "row nullVar = null | eval mv_avg(nullVar)", "error": [], "warning": [] }, { - "query": "row var = mv_sum(5)", + "query": "row var = mv_concat(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row mv_sum(5)", + "query": "row mv_concat(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row var = mv_sum(to_integer(\"a\"))", + "query": "row var = mv_concat(to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "row var = mv_sum(\"a\")", + "query": "row var = mv_concat(true, true)", "error": [ - "Argument of [mv_sum] must be [number], found value [\"a\"] type [string]" + "Argument of [mv_concat] must be [keyword], found value [true] type [boolean]", + "Argument of [mv_concat] must be [keyword], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where mv_sum(numberField) > 0", + "query": "from a_index | eval var = mv_concat(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | where mv_sum(stringField) > 0", - "error": [ - "Argument of [mv_sum] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval mv_concat(keywordField, keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_sum(numberField)", + "query": "from a_index | eval var = mv_concat(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sum(numberField)", - "error": [], + "query": "from a_index | eval mv_concat(booleanField, booleanField)", + "error": [ + "Argument of [mv_concat] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [mv_concat] must be [keyword], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = mv_sum(to_integer(stringField))", + "query": "from a_index | eval var = mv_concat(keywordField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sum(stringField)", - "error": [ - "Argument of [mv_sum] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval mv_concat(keywordField, textField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sum(numberField, extraArg)", - "error": [ - "Error: [mv_sum] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = mv_concat(textField, keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_sum(*)", - "error": [ - "Using wildcards (*) in mv_sum is not allowed" - ], + "query": "from a_index | eval mv_concat(textField, keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort mv_sum(numberField)", + "query": "from a_index | eval var = mv_concat(textField, textField)", "error": [], "warning": [] }, { - "query": "row var = mv_sum(to_integer(true))", + "query": "from a_index | eval mv_concat(textField, textField)", "error": [], "warning": [] }, { - "query": "row var = mv_sum(true)", + "query": "from a_index | eval mv_concat(keywordField, keywordField, extraArg)", "error": [ - "Argument of [mv_sum] must be [number], found value [true] type [boolean]" + "Error: [mv_concat] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | where mv_sum(booleanField) > 0", - "error": [ - "Argument of [mv_sum] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | sort mv_concat(keywordField, keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_sum(to_integer(booleanField))", + "query": "from a_index | eval mv_concat(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sum(booleanField)", - "error": [ - "Argument of [mv_sum] must be [number], found value [booleanField] type [boolean]" - ], + "query": "row nullVar = null | eval mv_concat(nullVar, nullVar)", + "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sum(null)", + "query": "row var = mv_count(true)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval mv_sum(nullVar)", + "query": "row mv_count(true)", "error": [], "warning": [] }, { - "query": "row var = mv_zip(\"a\", \"a\", \"a\")", + "query": "row var = mv_count(to_boolean(true))", "error": [], "warning": [] }, { - "query": "row var = mv_zip(\"a\", \"a\")", - "error": [], + "query": "row var = mv_count(cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row mv_zip(\"a\", \"a\", \"a\")", - "error": [], + "query": "row mv_count(cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row mv_zip(\"a\", \"a\")", + "query": "row var = mv_count(to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]" + ], + "warning": [] + }, + { + "query": "row var = mv_count(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = mv_zip(to_string(\"a\"), to_string(\"a\"), to_string(\"a\"))", + "query": "row mv_count(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = mv_zip(5, 5, 5)", + "query": "row var = mv_count(to_cartesianshape(cartesianPointField))", "error": [ - "Argument of [mv_zip] must be [string], found value [5] type [number]", - "Argument of [mv_zip] must be [string], found value [5] type [number]", - "Argument of [mv_zip] must be [string], found value [5] type [number]" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | where length(mv_zip(stringField, stringField, stringField)) > 0", + "query": "row var = mv_count(to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | where length(mv_zip(numberField, numberField, numberField)) > 0", - "error": [ - "Argument of [mv_zip] must be [string], found value [numberField] type [number]", - "Argument of [mv_zip] must be [string], found value [numberField] type [number]", - "Argument of [mv_zip] must be [string], found value [numberField] type [number]" - ], + "query": "row mv_count(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_zip(stringField, stringField, stringField)", + "query": "row var = mv_count(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_zip(stringField, stringField)", + "query": "row var = mv_count(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_zip(stringField, stringField, stringField)", + "query": "row mv_count(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_zip(to_string(stringField), to_string(stringField), to_string(stringField))", + "query": "row var = mv_count(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_zip(numberField, numberField, numberField)", + "query": "row var = mv_count(geoPointField)", "error": [ - "Argument of [mv_zip] must be [string], found value [numberField] type [number]", - "Argument of [mv_zip] must be [string], found value [numberField] type [number]", - "Argument of [mv_zip] must be [string], found value [numberField] type [number]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval mv_zip(stringField, stringField, stringField, extraArg)", + "query": "row mv_count(geoPointField)", "error": [ - "Error: [mv_zip] function expects no more than 3 arguments, got 4." + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | sort mv_zip(stringField, stringField, stringField)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_zip(to_string(true), to_string(true), to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_zip(true, true, true)", + "query": "row var = mv_count(to_geopoint(geoPointField))", "error": [ - "Argument of [mv_zip] must be [string], found value [true] type [boolean]", - "Argument of [mv_zip] must be [string], found value [true] type [boolean]", - "Argument of [mv_zip] must be [string], found value [true] type [boolean]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | where length(mv_zip(booleanField, booleanField, booleanField)) > 0", - "error": [ - "Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]", - "Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]", - "Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]" - ], + "query": "row var = mv_count(to_geoshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_zip(to_string(booleanField), to_string(booleanField), to_string(booleanField))", + "query": "row mv_count(to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_zip(booleanField, booleanField, booleanField)", + "query": "row var = mv_count(to_geoshape(geoPointField))", "error": [ - "Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]", - "Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]", - "Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval mv_zip(null, null, null)", + "query": "row var = mv_count(5)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval mv_zip(nullVar, nullVar, nullVar)", + "query": "row mv_count(5)", "error": [], "warning": [] }, { - "query": "row var = mv_zip(to_string(true), to_string(true))", + "query": "row var = mv_count(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | where length(mv_zip(stringField, stringField)) > 0", + "query": "row var = mv_count(to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "from a_index | where length(mv_zip(booleanField, booleanField)) > 0", - "error": [ - "Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]", - "Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]" - ], + "query": "row mv_count(to_ip(\"127.0.0.1\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_zip(stringField, stringField)", + "query": "row var = mv_count(to_ip(to_ip(\"127.0.0.1\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_zip(to_string(booleanField), to_string(booleanField))", + "query": "row var = mv_count(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_zip(booleanField, booleanField)", - "error": [ - "Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]", - "Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]" - ], + "query": "row mv_count(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | sort mv_zip(stringField, stringField)", + "query": "row var = mv_count(to_string(true))", "error": [], "warning": [] }, { - "query": "row var = now()", + "query": "row var = mv_count(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "row now()", + "query": "row mv_count(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = now()", + "query": "row var = mv_count(to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval now()", + "query": "from a_index | where mv_count(booleanField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval now(extraArg)", + "query": "from a_index | where mv_count(counterDoubleField) > 0", "error": [ - "Error: [now] function expects exactly 0 arguments, got 1." + "Argument of [mv_count] must be [boolean], found value [counterDoubleField] type [counter_double]" ], "warning": [] }, { - "query": "from a_index | sort now()", + "query": "from a_index | where mv_count(cartesianPointField) > 0", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval now()", + "query": "from a_index | where mv_count(cartesianShapeField) > 0", "error": [], "warning": [] }, { - "query": "row var = pi()", + "query": "from a_index | where mv_count(dateField) > 0", "error": [], "warning": [] }, { - "query": "row pi()", + "query": "from a_index | where mv_count(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where pi() > 0", + "query": "from a_index | where mv_count(geoPointField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = pi()", + "query": "from a_index | where mv_count(geoShapeField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval pi()", + "query": "from a_index | where mv_count(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval pi(extraArg)", - "error": [ - "Error: [pi] function expects exactly 0 arguments, got 1." - ], - "warning": [] - }, - { - "query": "from a_index | sort pi()", + "query": "from a_index | where mv_count(ipField) > 0", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval pi()", + "query": "from a_index | where mv_count(keywordField) > 0", "error": [], "warning": [] }, { - "query": "row var = pow(5, 5)", + "query": "from a_index | where mv_count(longField) > 0", "error": [], "warning": [] }, { - "query": "row pow(5, 5)", + "query": "from a_index | where mv_count(textField) > 0", "error": [], "warning": [] }, { - "query": "row var = pow(to_integer(\"a\"), to_integer(\"a\"))", + "query": "from a_index | where mv_count(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = pow(\"a\", \"a\")", - "error": [ - "Argument of [pow] must be [number], found value [\"a\"] type [string]", - "Argument of [pow] must be [number], found value [\"a\"] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | where pow(numberField, numberField) > 0", + "query": "from a_index | where mv_count(versionField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where pow(stringField, stringField) > 0", - "error": [ - "Argument of [pow] must be [number], found value [stringField] type [string]", - "Argument of [pow] must be [number], found value [stringField] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(numberField, numberField)", + "query": "from a_index | eval var = mv_count(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval pow(numberField, numberField)", + "query": "from a_index | eval mv_count(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = pow(to_integer(stringField), to_integer(stringField))", + "query": "from a_index | eval var = mv_count(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval pow(stringField, stringField)", + "query": "from a_index | eval mv_count(counterDoubleField)", "error": [ - "Argument of [pow] must be [number], found value [stringField] type [string]", - "Argument of [pow] must be [number], found value [stringField] type [string]" + "Argument of [mv_count] must be [boolean], found value [counterDoubleField] type [counter_double]" ], "warning": [] }, { - "query": "from a_index | eval pow(numberField, numberField, extraArg)", + "query": "from a_index | eval var = mv_count(*)", "error": [ - "Error: [pow] function expects exactly 2 arguments, got 3." + "Using wildcards (*) in mv_count is not allowed" ], "warning": [] }, { - "query": "from a_index | sort pow(numberField, numberField)", + "query": "from a_index | eval var = mv_count(cartesianPointField)", "error": [], "warning": [] }, { - "query": "row var = pow(to_integer(true), to_integer(true))", + "query": "from a_index | eval mv_count(cartesianPointField)", "error": [], "warning": [] }, { - "query": "row var = pow(true, true)", - "error": [ - "Argument of [pow] must be [number], found value [true] type [boolean]", - "Argument of [pow] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | eval var = mv_count(to_cartesianpoint(cartesianPointField))", + "error": [], "warning": [] }, { - "query": "from a_index | where pow(booleanField, booleanField) > 0", - "error": [ - "Argument of [pow] must be [number], found value [booleanField] type [boolean]", - "Argument of [pow] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_count(cartesianShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = pow(to_integer(booleanField), to_integer(booleanField))", + "query": "from a_index | eval mv_count(cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval pow(booleanField, booleanField)", - "error": [ - "Argument of [pow] must be [number], found value [booleanField] type [boolean]", - "Argument of [pow] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_count(to_cartesianshape(cartesianPointField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval pow(null, null)", + "query": "from a_index | eval var = mv_count(dateField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval pow(nullVar, nullVar)", + "query": "from a_index | eval mv_count(dateField)", "error": [], "warning": [] }, { - "query": "row var = replace(\"a\", \"a\", \"a\")", + "query": "from a_index | eval var = mv_count(to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "row replace(\"a\", \"a\", \"a\")", + "query": "from a_index | eval var = mv_count(doubleField)", "error": [], "warning": [] }, { - "query": "row var = replace(to_string(\"a\"), to_string(\"a\"), to_string(\"a\"))", + "query": "from a_index | eval mv_count(doubleField)", "error": [], "warning": [] }, { - "query": "row var = replace(5, 5, 5)", - "error": [ - "Argument of [replace] must be [string], found value [5] type [number]", - "Argument of [replace] must be [string], found value [5] type [number]", - "Argument of [replace] must be [string], found value [5] type [number]" - ], + "query": "from a_index | eval var = mv_count(to_double(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | where length(replace(stringField, stringField, stringField)) > 0", + "query": "from a_index | eval var = mv_count(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(replace(numberField, numberField, numberField)) > 0", - "error": [ - "Argument of [replace] must be [string], found value [numberField] type [number]", - "Argument of [replace] must be [string], found value [numberField] type [number]", - "Argument of [replace] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval mv_count(geoPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = replace(stringField, stringField, stringField)", + "query": "from a_index | eval var = mv_count(to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval replace(stringField, stringField, stringField)", + "query": "from a_index | eval var = mv_count(geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = replace(to_string(stringField), to_string(stringField), to_string(stringField))", + "query": "from a_index | eval mv_count(geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval replace(numberField, numberField, numberField)", - "error": [ - "Argument of [replace] must be [string], found value [numberField] type [number]", - "Argument of [replace] must be [string], found value [numberField] type [number]", - "Argument of [replace] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval var = mv_count(to_geoshape(geoPointField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval replace(stringField, stringField, stringField, extraArg)", - "error": [ - "Error: [replace] function expects exactly 3 arguments, got 4." - ], + "query": "from a_index | eval var = mv_count(integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort replace(stringField, stringField, stringField)", + "query": "from a_index | eval mv_count(integerField)", "error": [], "warning": [] }, { - "query": "row var = replace(to_string(true), to_string(true), to_string(true))", + "query": "from a_index | eval var = mv_count(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = replace(true, true, true)", - "error": [ - "Argument of [replace] must be [string], found value [true] type [boolean]", - "Argument of [replace] must be [string], found value [true] type [boolean]", - "Argument of [replace] must be [string], found value [true] type [boolean]" - ], + "query": "from a_index | eval var = mv_count(ipField)", + "error": [], "warning": [] }, { - "query": "from a_index | where length(replace(booleanField, booleanField, booleanField)) > 0", - "error": [ - "Argument of [replace] must be [string], found value [booleanField] type [boolean]", - "Argument of [replace] must be [string], found value [booleanField] type [boolean]", - "Argument of [replace] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval mv_count(ipField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = replace(to_string(booleanField), to_string(booleanField), to_string(booleanField))", + "query": "from a_index | eval var = mv_count(to_ip(ipField))", "error": [], "warning": [] }, { - "query": "from a_index | eval replace(booleanField, booleanField, booleanField)", - "error": [ - "Argument of [replace] must be [string], found value [booleanField] type [boolean]", - "Argument of [replace] must be [string], found value [booleanField] type [boolean]", - "Argument of [replace] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_count(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval replace(null, null, null)", + "query": "from a_index | eval mv_count(keywordField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval replace(nullVar, nullVar, nullVar)", + "query": "from a_index | eval var = mv_count(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row var = right(\"a\", 5)", + "query": "from a_index | eval var = mv_count(longField)", "error": [], "warning": [] }, { - "query": "row right(\"a\", 5)", + "query": "from a_index | eval mv_count(longField)", "error": [], "warning": [] }, { - "query": "row var = right(to_string(\"a\"), to_integer(\"a\"))", + "query": "from a_index | eval var = mv_count(textField)", "error": [], "warning": [] }, { - "query": "row var = right(5, \"a\")", - "error": [ - "Argument of [right] must be [string], found value [5] type [number]", - "Argument of [right] must be [number], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval mv_count(textField)", + "error": [], "warning": [] }, { - "query": "from a_index | where length(right(stringField, numberField)) > 0", + "query": "from a_index | eval var = mv_count(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(right(numberField, stringField)) > 0", - "error": [ - "Argument of [right] must be [string], found value [numberField] type [number]", - "Argument of [right] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval mv_count(unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = right(stringField, numberField)", + "query": "from a_index | eval var = mv_count(versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval right(stringField, numberField)", + "query": "from a_index | eval mv_count(versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = right(to_string(stringField), to_integer(stringField))", + "query": "from a_index | eval var = mv_count(to_version(keywordField))", "error": [], "warning": [] }, { - "query": "from a_index | eval right(numberField, stringField)", + "query": "from a_index | eval mv_count(booleanField, extraArg)", "error": [ - "Argument of [right] must be [string], found value [numberField] type [number]", - "Argument of [right] must be [number], found value [stringField] type [string]" + "Error: [mv_count] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval right(stringField, numberField, extraArg)", - "error": [ - "Error: [right] function expects exactly 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | sort right(stringField, numberField)", + "query": "from a_index | sort mv_count(booleanField)", "error": [], "warning": [] }, { - "query": "row var = right(to_string(true), to_integer(true))", + "query": "from a_index | eval mv_count(null)", "error": [], "warning": [] }, { - "query": "row var = right(true, true)", - "error": [ - "Argument of [right] must be [string], found value [true] type [boolean]", - "Argument of [right] must be [number], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where length(right(booleanField, booleanField)) > 0", - "error": [ - "Argument of [right] must be [string], found value [booleanField] type [boolean]", - "Argument of [right] must be [number], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = right(to_string(booleanField), to_integer(booleanField))", + "query": "row nullVar = null | eval mv_count(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval right(booleanField, booleanField)", - "error": [ - "Argument of [right] must be [string], found value [booleanField] type [boolean]", - "Argument of [right] must be [number], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval right(null, null)", + "query": "from a_index | eval mv_count(\"2022\")", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval right(nullVar, nullVar)", + "query": "from a_index | eval mv_count(concat(\"20\", \"22\"))", "error": [], "warning": [] }, { - "query": "row var = round(5, 5)", + "query": "row var = mv_dedupe(true)", "error": [], "warning": [] }, { - "query": "row round(5, 5)", + "query": "row mv_dedupe(true)", "error": [], "warning": [] }, { - "query": "row var = round(to_integer(\"a\"), to_integer(\"a\"))", + "query": "row var = mv_dedupe(to_boolean(true))", "error": [], "warning": [] }, { - "query": "row var = round(\"a\", \"a\")", + "query": "row var = mv_dedupe(cartesianPointField)", "error": [ - "Argument of [round] must be [number], found value [\"a\"] type [string]", - "Argument of [round] must be [number], found value [\"a\"] type [string]" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | where round(numberField, numberField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where round(stringField, stringField) > 0", + "query": "row mv_dedupe(cartesianPointField)", "error": [ - "Argument of [round] must be [number], found value [stringField] type [string]", - "Argument of [round] must be [number], found value [stringField] type [string]" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = round(numberField, numberField)", - "error": [], + "query": "row var = mv_dedupe(to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval round(numberField, numberField)", + "query": "row var = mv_dedupe(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = round(to_integer(stringField), to_integer(stringField))", + "query": "row mv_dedupe(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval round(stringField, stringField)", + "query": "row var = mv_dedupe(to_cartesianshape(cartesianPointField))", "error": [ - "Argument of [round] must be [number], found value [stringField] type [string]", - "Argument of [round] must be [number], found value [stringField] type [string]" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval round(numberField, numberField, extraArg)", - "error": [ - "Error: [round] function expects no more than 2 arguments, got 3." - ], + "query": "row var = mv_dedupe(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], "warning": [] }, { - "query": "from a_index | sort round(numberField, numberField)", + "query": "row mv_dedupe(to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "row var = round(5)", + "query": "row var = mv_dedupe(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", "error": [], "warning": [] }, { - "query": "row round(5)", + "query": "row var = mv_dedupe(5.5)", "error": [], "warning": [] }, { - "query": "row var = round(to_integer(true))", + "query": "row mv_dedupe(5.5)", "error": [], "warning": [] }, { - "query": "row var = round(to_integer(true), to_integer(true))", + "query": "row var = mv_dedupe(to_double(true))", "error": [], "warning": [] }, { - "query": "row var = round(true, true)", + "query": "row var = mv_dedupe(geoPointField)", "error": [ - "Argument of [round] must be [number], found value [true] type [boolean]", - "Argument of [round] must be [number], found value [true] type [boolean]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | where round(numberField) > 0", - "error": [], + "query": "row mv_dedupe(geoPointField)", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | where round(booleanField) > 0", + "query": "row var = mv_dedupe(to_geopoint(geoPointField))", "error": [ - "Argument of [round] must be [number], found value [booleanField] type [boolean]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | where round(booleanField, booleanField) > 0", + "query": "row var = mv_dedupe(to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row mv_dedupe(to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = mv_dedupe(to_geoshape(geoPointField))", "error": [ - "Argument of [round] must be [number], found value [booleanField] type [boolean]", - "Argument of [round] must be [number], found value [booleanField] type [boolean]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = round(numberField)", + "query": "row var = mv_dedupe(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval round(numberField)", + "query": "row mv_dedupe(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = round(to_integer(booleanField))", + "query": "row var = mv_dedupe(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval round(booleanField)", - "error": [ - "Argument of [round] must be [number], found value [booleanField] type [boolean]" - ], + "query": "row var = mv_dedupe(to_ip(\"127.0.0.1\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = round(*)", - "error": [ - "Using wildcards (*) in round is not allowed" - ], + "query": "row mv_dedupe(to_ip(\"127.0.0.1\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = round(to_integer(booleanField), to_integer(booleanField))", + "query": "row var = mv_dedupe(to_ip(to_ip(\"127.0.0.1\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval round(booleanField, booleanField)", - "error": [ - "Argument of [round] must be [number], found value [booleanField] type [boolean]", - "Argument of [round] must be [number], found value [booleanField] type [boolean]" - ], + "query": "row var = mv_dedupe(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | sort round(numberField)", + "query": "row mv_dedupe(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval round(null, null)", + "query": "row var = mv_dedupe(to_string(true))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval round(nullVar, nullVar)", + "query": "row var = mv_dedupe(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "row var = rtrim(\"a\")", + "query": "row mv_dedupe(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "row rtrim(\"a\")", + "query": "row var = mv_dedupe(to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "row var = rtrim(to_string(\"a\"))", + "query": "from a_index | where mv_dedupe(doubleField) > 0", "error": [], "warning": [] }, { - "query": "row var = rtrim(5)", + "query": "from a_index | where mv_dedupe(counterDoubleField) > 0", "error": [ - "Argument of [rtrim] must be [string], found value [5] type [number]" + "Argument of [mv_dedupe] must be [boolean], found value [counterDoubleField] type [counter_double]" ], "warning": [] }, { - "query": "from a_index | where length(rtrim(stringField)) > 0", + "query": "from a_index | where mv_dedupe(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where length(rtrim(numberField)) > 0", - "error": [ - "Argument of [rtrim] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | where mv_dedupe(longField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = rtrim(stringField)", + "query": "from a_index | eval var = mv_dedupe(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval rtrim(stringField)", + "query": "from a_index | eval mv_dedupe(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = rtrim(to_string(stringField))", + "query": "from a_index | eval var = mv_dedupe(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval rtrim(numberField)", + "query": "from a_index | eval mv_dedupe(counterDoubleField)", "error": [ - "Argument of [rtrim] must be [string], found value [numberField] type [number]" + "Argument of [mv_dedupe] must be [boolean], found value [counterDoubleField] type [counter_double]" ], "warning": [] }, { - "query": "from a_index | eval rtrim(stringField, extraArg)", + "query": "from a_index | eval var = mv_dedupe(*)", "error": [ - "Error: [rtrim] function expects exactly one argument, got 2." + "Using wildcards (*) in mv_dedupe is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = rtrim(*)", - "error": [ - "Using wildcards (*) in rtrim is not allowed" - ], + "query": "from a_index | eval var = mv_dedupe(cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort rtrim(stringField)", + "query": "from a_index | eval mv_dedupe(cartesianPointField)", "error": [], "warning": [] }, { - "query": "row var = rtrim(to_string(true))", + "query": "from a_index | eval var = mv_dedupe(to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "row var = rtrim(true)", - "error": [ - "Argument of [rtrim] must be [string], found value [true] type [boolean]" - ], + "query": "from a_index | eval var = mv_dedupe(cartesianShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | where length(rtrim(booleanField)) > 0", - "error": [ - "Argument of [rtrim] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval mv_dedupe(cartesianShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = rtrim(to_string(booleanField))", + "query": "from a_index | eval var = mv_dedupe(to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval rtrim(booleanField)", - "error": [ - "Argument of [rtrim] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_dedupe(dateField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval rtrim(null)", + "query": "from a_index | eval mv_dedupe(dateField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval rtrim(nullVar)", + "query": "from a_index | eval var = mv_dedupe(to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "row var = signum(5)", + "query": "from a_index | eval var = mv_dedupe(doubleField)", "error": [], "warning": [] }, { - "query": "row signum(5)", + "query": "from a_index | eval mv_dedupe(doubleField)", "error": [], "warning": [] }, { - "query": "row var = signum(to_integer(\"a\"))", + "query": "from a_index | eval var = mv_dedupe(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = signum(\"a\")", - "error": [ - "Argument of [signum] must be [number], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval var = mv_dedupe(geoPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | where signum(numberField) > 0", + "query": "from a_index | eval mv_dedupe(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | where signum(stringField) > 0", - "error": [ - "Argument of [signum] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = mv_dedupe(to_geopoint(geoPointField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = signum(numberField)", + "query": "from a_index | eval var = mv_dedupe(geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval signum(numberField)", + "query": "from a_index | eval mv_dedupe(geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = signum(to_integer(stringField))", + "query": "from a_index | eval var = mv_dedupe(to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval signum(stringField)", - "error": [ - "Argument of [signum] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = mv_dedupe(integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval signum(numberField, extraArg)", - "error": [ - "Error: [signum] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval mv_dedupe(integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = signum(*)", - "error": [ - "Using wildcards (*) in signum is not allowed" - ], + "query": "from a_index | eval var = mv_dedupe(to_integer(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | sort signum(numberField)", + "query": "from a_index | eval var = mv_dedupe(ipField)", "error": [], "warning": [] }, { - "query": "row var = signum(to_integer(true))", + "query": "from a_index | eval mv_dedupe(ipField)", "error": [], "warning": [] }, { - "query": "row var = signum(true)", - "error": [ - "Argument of [signum] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | eval var = mv_dedupe(to_ip(ipField))", + "error": [], "warning": [] }, { - "query": "from a_index | where signum(booleanField) > 0", - "error": [ - "Argument of [signum] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_dedupe(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = signum(to_integer(booleanField))", + "query": "from a_index | eval mv_dedupe(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval signum(booleanField)", - "error": [ - "Argument of [signum] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_dedupe(to_string(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval signum(null)", + "query": "from a_index | eval var = mv_dedupe(longField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval signum(nullVar)", + "query": "from a_index | eval mv_dedupe(longField)", "error": [], "warning": [] }, { - "query": "row var = sin(5)", + "query": "from a_index | eval var = mv_dedupe(textField)", "error": [], "warning": [] }, { - "query": "row sin(5)", + "query": "from a_index | eval mv_dedupe(textField)", "error": [], "warning": [] }, { - "query": "row var = sin(to_integer(\"a\"))", + "query": "from a_index | eval var = mv_dedupe(versionField)", "error": [], "warning": [] }, { - "query": "row var = sin(\"a\")", - "error": [ - "Argument of [sin] must be [number], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval mv_dedupe(versionField)", + "error": [], "warning": [] }, { - "query": "from a_index | where sin(numberField) > 0", + "query": "from a_index | eval var = mv_dedupe(to_version(keywordField))", "error": [], "warning": [] }, { - "query": "from a_index | where sin(stringField) > 0", + "query": "from a_index | eval mv_dedupe(booleanField, extraArg)", "error": [ - "Argument of [sin] must be [number], found value [stringField] type [string]" + "Error: [mv_dedupe] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = sin(numberField)", + "query": "from a_index | sort mv_dedupe(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval sin(numberField)", + "query": "from a_index | eval mv_dedupe(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = sin(to_integer(stringField))", + "query": "row nullVar = null | eval mv_dedupe(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval sin(stringField)", - "error": [ - "Argument of [sin] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval mv_dedupe(\"2022\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval sin(numberField, extraArg)", - "error": [ - "Error: [sin] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval mv_dedupe(concat(\"20\", \"22\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = sin(*)", - "error": [ - "Using wildcards (*) in sin is not allowed" - ], + "query": "row var = mv_first(true)", + "error": [], "warning": [] }, { - "query": "from a_index | sort sin(numberField)", + "query": "row mv_first(true)", "error": [], "warning": [] }, { - "query": "row var = sin(to_integer(true))", + "query": "row var = mv_first(to_boolean(true))", "error": [], "warning": [] }, { - "query": "row var = sin(true)", + "query": "row var = mv_first(cartesianPointField)", "error": [ - "Argument of [sin] must be [number], found value [true] type [boolean]" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | where sin(booleanField) > 0", + "query": "row mv_first(cartesianPointField)", "error": [ - "Argument of [sin] must be [number], found value [booleanField] type [boolean]" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = sin(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval sin(booleanField)", + "query": "row var = mv_first(to_cartesianpoint(cartesianPointField))", "error": [ - "Argument of [sin] must be [number], found value [booleanField] type [boolean]" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval sin(null)", + "query": "row var = mv_first(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval sin(nullVar)", + "query": "row mv_first(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = sinh(5)", - "error": [], + "query": "row var = mv_first(to_cartesianshape(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row sinh(5)", + "query": "row var = mv_first(to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "row var = sinh(to_integer(\"a\"))", + "query": "row mv_first(to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "row var = sinh(\"a\")", - "error": [ - "Argument of [sinh] must be [number], found value [\"a\"] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | where sinh(numberField) > 0", + "query": "row var = mv_first(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", "error": [], "warning": [] }, { - "query": "from a_index | where sinh(stringField) > 0", - "error": [ - "Argument of [sinh] must be [number], found value [stringField] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = sinh(numberField)", + "query": "row var = mv_first(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval sinh(numberField)", + "query": "row mv_first(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = sinh(to_integer(stringField))", + "query": "row var = mv_first(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval sinh(stringField)", + "query": "row var = mv_first(geoPointField)", "error": [ - "Argument of [sinh] must be [number], found value [stringField] type [string]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval sinh(numberField, extraArg)", + "query": "row mv_first(geoPointField)", "error": [ - "Error: [sinh] function expects exactly one argument, got 2." + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = sinh(*)", + "query": "row var = mv_first(to_geopoint(geoPointField))", "error": [ - "Using wildcards (*) in sinh is not allowed" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | sort sinh(numberField)", + "query": "row var = mv_first(to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = sinh(to_integer(true))", + "query": "row mv_first(to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = sinh(true)", + "query": "row var = mv_first(to_geoshape(geoPointField))", "error": [ - "Argument of [sinh] must be [number], found value [true] type [boolean]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | where sinh(booleanField) > 0", - "error": [ - "Argument of [sinh] must be [number], found value [booleanField] type [boolean]" - ], + "query": "row var = mv_first(5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = sinh(to_integer(booleanField))", + "query": "row mv_first(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval sinh(booleanField)", - "error": [ - "Argument of [sinh] must be [number], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval sinh(null)", + "query": "row var = mv_first(to_integer(true))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval sinh(nullVar)", + "query": "row var = mv_first(to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "row var = split(\"a\", \"a\")", + "query": "row mv_first(to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "row split(\"a\", \"a\")", + "query": "row var = mv_first(to_ip(to_ip(\"127.0.0.1\")))", "error": [], "warning": [] }, { - "query": "row var = split(to_string(\"a\"), to_string(\"a\"))", + "query": "row var = mv_first(\"a\")", "error": [], "warning": [] }, { - "query": "row var = split(5, 5)", - "error": [ - "Argument of [split] must be [string], found value [5] type [number]", - "Argument of [split] must be [string], found value [5] type [number]" - ], + "query": "row mv_first(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | where length(split(stringField, stringField)) > 0", + "query": "row var = mv_first(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | where length(split(numberField, numberField)) > 0", - "error": [ - "Argument of [split] must be [string], found value [numberField] type [number]", - "Argument of [split] must be [string], found value [numberField] type [number]" - ], + "query": "row var = mv_first(to_version(\"1.0.0\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = split(stringField, stringField)", + "query": "row mv_first(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval split(stringField, stringField)", + "query": "row var = mv_first(to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = split(to_string(stringField), to_string(stringField))", + "query": "from a_index | where mv_first(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval split(numberField, numberField)", + "query": "from a_index | where mv_first(counterDoubleField) > 0", "error": [ - "Argument of [split] must be [string], found value [numberField] type [number]", - "Argument of [split] must be [string], found value [numberField] type [number]" + "Argument of [mv_first] must be [boolean], found value [counterDoubleField] type [counter_double]" ], "warning": [] }, { - "query": "from a_index | eval split(stringField, stringField, extraArg)", - "error": [ - "Error: [split] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | where mv_first(integerField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | sort split(stringField, stringField)", + "query": "from a_index | where mv_first(longField) > 0", "error": [], "warning": [] }, { - "query": "row var = split(to_string(true), to_string(true))", + "query": "from a_index | where mv_first(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = split(true, true)", - "error": [ - "Argument of [split] must be [string], found value [true] type [boolean]", - "Argument of [split] must be [string], found value [true] type [boolean]" - ], + "query": "from a_index | eval var = mv_first(booleanField)", + "error": [], "warning": [] }, { - "query": "from a_index | where length(split(booleanField, booleanField)) > 0", - "error": [ - "Argument of [split] must be [string], found value [booleanField] type [boolean]", - "Argument of [split] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval mv_first(booleanField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = split(to_string(booleanField), to_string(booleanField))", + "query": "from a_index | eval var = mv_first(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval split(booleanField, booleanField)", + "query": "from a_index | eval mv_first(counterDoubleField)", "error": [ - "Argument of [split] must be [string], found value [booleanField] type [boolean]", - "Argument of [split] must be [string], found value [booleanField] type [boolean]" + "Argument of [mv_first] must be [boolean], found value [counterDoubleField] type [counter_double]" ], "warning": [] }, { - "query": "from a_index | eval split(null, null)", - "error": [], + "query": "from a_index | eval var = mv_first(*)", + "error": [ + "Using wildcards (*) in mv_first is not allowed" + ], "warning": [] }, { - "query": "row nullVar = null | eval split(nullVar, nullVar)", + "query": "from a_index | eval var = mv_first(cartesianPointField)", "error": [], "warning": [] }, { - "query": "row var = sqrt(5)", + "query": "from a_index | eval mv_first(cartesianPointField)", "error": [], "warning": [] }, { - "query": "row sqrt(5)", + "query": "from a_index | eval var = mv_first(to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "row var = sqrt(to_integer(\"a\"))", + "query": "from a_index | eval var = mv_first(cartesianShapeField)", "error": [], "warning": [] }, { - "query": "row var = sqrt(\"a\")", - "error": [ - "Argument of [sqrt] must be [number], found value [\"a\"] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | where sqrt(numberField) > 0", + "query": "from a_index | eval mv_first(cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | where sqrt(stringField) > 0", - "error": [ - "Argument of [sqrt] must be [number], found value [stringField] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = sqrt(numberField)", + "query": "from a_index | eval var = mv_first(to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval sqrt(numberField)", + "query": "from a_index | eval var = mv_first(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = sqrt(to_integer(stringField))", + "query": "from a_index | eval mv_first(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval sqrt(stringField)", - "error": [ - "Argument of [sqrt] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = mv_first(to_datetime(dateField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval sqrt(numberField, extraArg)", - "error": [ - "Error: [sqrt] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = mv_first(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = sqrt(*)", - "error": [ - "Using wildcards (*) in sqrt is not allowed" - ], + "query": "from a_index | eval mv_first(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort sqrt(numberField)", + "query": "from a_index | eval var = mv_first(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = sqrt(to_integer(true))", + "query": "from a_index | eval var = mv_first(geoPointField)", "error": [], "warning": [] }, { - "query": "row var = sqrt(true)", - "error": [ - "Argument of [sqrt] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | eval mv_first(geoPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | where sqrt(booleanField) > 0", - "error": [ - "Argument of [sqrt] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_first(to_geopoint(geoPointField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = sqrt(to_integer(booleanField))", + "query": "from a_index | eval var = mv_first(geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval sqrt(booleanField)", - "error": [ - "Argument of [sqrt] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval mv_first(geoShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval sqrt(null)", + "query": "from a_index | eval var = mv_first(to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval sqrt(nullVar)", + "query": "from a_index | eval var = mv_first(integerField)", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_first(integerField)", "error": [], "warning": [] }, { - "query": "row st_contains(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_first(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geopoint(\"a\"), to_geopoint(\"a\"))", + "query": "from a_index | eval var = mv_first(ipField)", "error": [], "warning": [] }, { - "query": "row var = st_contains(\"a\", \"a\")", - "error": [ - "Argument of [st_contains] must be [cartesian_point], found value [\"a\"] type [string]", - "Argument of [st_contains] must be [cartesian_point], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval mv_first(ipField)", + "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_first(to_ip(ipField))", "error": [], "warning": [] }, { - "query": "row st_contains(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_first(keywordField)", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geopoint(\"a\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_first(keywordField)", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_first(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row st_contains(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_first(longField)", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"a\"))", + "query": "from a_index | eval mv_first(longField)", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_first(textField)", "error": [], "warning": [] }, { - "query": "row st_contains(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_first(textField)", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_first(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_first(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_cartesianpoint(\"a\"), to_cartesianpoint(\"a\"))", + "query": "from a_index | eval var = mv_first(versionField)", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_first(versionField)", "error": [], "warning": [] }, { - "query": "row st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_first(to_version(keywordField))", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_cartesianpoint(\"a\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | eval mv_first(booleanField, extraArg)", + "error": [ + "Error: [mv_first] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "row var = st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | sort mv_first(booleanField)", "error": [], "warning": [] }, { - "query": "row st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_first(null)", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"a\"))", + "query": "row nullVar = null | eval mv_first(nullVar)", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_first(\"2022\")", "error": [], "warning": [] }, { - "query": "row st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_first(concat(\"20\", \"22\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(geoPointField, geoPointField)", + "query": "row var = mv_last(true)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(geoPointField, geoPointField)", + "query": "row mv_last(true)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_geopoint(stringField), to_geopoint(stringField))", + "query": "row var = mv_last(to_boolean(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(stringField, stringField)", + "query": "row var = mv_last(cartesianPointField)", "error": [ - "Argument of [st_contains] must be [cartesian_point], found value [stringField] type [string]", - "Argument of [st_contains] must be [cartesian_point], found value [stringField] type [string]" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval st_contains(geoPointField, geoPointField, extraArg)", + "query": "row mv_last(cartesianPointField)", "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = st_contains(geoPointField, geoShapeField)", - "error": [], + "query": "row var = mv_last(to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval st_contains(geoPointField, geoShapeField)", + "query": "row var = mv_last(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_geopoint(stringField), geoShapeField)", + "query": "row mv_last(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(geoPointField, geoShapeField, extraArg)", + "query": "row var = mv_last(to_cartesianshape(cartesianPointField))", "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = st_contains(geoShapeField, geoPointField)", + "query": "row var = mv_last(to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(geoShapeField, geoPointField)", + "query": "row mv_last(to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(geoShapeField, to_geopoint(stringField))", + "query": "row var = mv_last(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(geoShapeField, geoPointField, extraArg)", - "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." - ], + "query": "row var = mv_last(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(geoShapeField, geoShapeField)", + "query": "row mv_last(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(geoShapeField, geoShapeField)", + "query": "row var = mv_last(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(geoShapeField, geoShapeField, extraArg)", + "query": "row var = mv_last(geoPointField)", "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = st_contains(cartesianPointField, cartesianPointField)", - "error": [], + "query": "row mv_last(geoPointField)", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianPointField, cartesianPointField)", + "query": "row var = mv_last(to_geopoint(geoPointField))", + "error": [ + "Unknown column [geoPointField]" + ], + "warning": [] + }, + { + "query": "row var = mv_last(to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_cartesianpoint(stringField), to_cartesianpoint(stringField))", + "query": "row mv_last(to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianPointField, cartesianPointField, extraArg)", + "query": "row var = mv_last(to_geoshape(geoPointField))", "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = st_contains(cartesianPointField, cartesianShapeField)", + "query": "row var = mv_last(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianPointField, cartesianShapeField)", + "query": "row mv_last(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_cartesianpoint(stringField), cartesianShapeField)", + "query": "row var = mv_last(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianPointField, cartesianShapeField, extraArg)", - "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." - ], + "query": "row var = mv_last(to_ip(\"127.0.0.1\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(cartesianShapeField, cartesianPointField)", + "query": "row mv_last(to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianShapeField, cartesianPointField)", + "query": "row var = mv_last(to_ip(to_ip(\"127.0.0.1\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(cartesianShapeField, to_cartesianpoint(stringField))", + "query": "row var = mv_last(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianShapeField, cartesianPointField, extraArg)", - "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." - ], + "query": "row mv_last(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(cartesianShapeField, cartesianShapeField)", + "query": "row var = mv_last(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianShapeField, cartesianShapeField)", + "query": "row var = mv_last(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianShapeField, cartesianShapeField, extraArg)", - "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." - ], + "query": "row mv_last(to_version(\"1.0.0\"))", + "error": [], "warning": [] }, { - "query": "from a_index | sort st_contains(geoPointField, geoPointField)", + "query": "row var = mv_last(to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | where mv_last(doubleField) > 0", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], + "query": "from a_index | where mv_last(counterDoubleField) > 0", + "error": [ + "Argument of [mv_last] must be [boolean], found value [counterDoubleField] type [counter_double]" + ], "warning": [] }, { - "query": "row var = st_contains(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | where mv_last(integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | where mv_last(longField) > 0", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | where mv_last(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = mv_last(booleanField)", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval mv_last(booleanField)", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = mv_last(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_contains(true, true)", + "query": "from a_index | eval mv_last(counterDoubleField)", "error": [ - "Argument of [st_contains] must be [cartesian_point], found value [true] type [boolean]", - "Argument of [st_contains] must be [cartesian_point], found value [true] type [boolean]" + "Argument of [mv_last] must be [boolean], found value [counterDoubleField] type [counter_double]" ], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_contains(booleanField, booleanField)", + "query": "from a_index | eval var = mv_last(*)", "error": [ - "Argument of [st_contains] must be [cartesian_point], found value [booleanField] type [boolean]", - "Argument of [st_contains] must be [cartesian_point], found value [booleanField] type [boolean]" + "Using wildcards (*) in mv_last is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", + "query": "from a_index | eval var = mv_last(cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "query": "from a_index | eval mv_last(cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "query": "from a_index | eval var = mv_last(to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "query": "from a_index | eval var = mv_last(cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_geopoint(geoPointField), to_geoshape(geoPointField))", + "query": "from a_index | eval mv_last(cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_geoshape(geoPointField), to_geopoint(geoPointField))", + "query": "from a_index | eval var = mv_last(to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_geoshape(geoPointField), to_geoshape(geoPointField))", + "query": "from a_index | eval var = mv_last(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | sort st_contains(cartesianPointField, cartesianPointField)", + "query": "from a_index | eval mv_last(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(null, null)", + "query": "from a_index | eval var = mv_last(to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval st_contains(nullVar, nullVar)", + "query": "from a_index | eval var = mv_last(doubleField)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_last(doubleField)", "error": [], "warning": [] }, { - "query": "row st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_last(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_geopoint(\"a\"), to_geopoint(\"a\"))", + "query": "from a_index | eval var = mv_last(geoPointField)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(\"a\", \"a\")", - "error": [ - "Argument of [st_disjoint] must be [cartesian_point], found value [\"a\"] type [string]", - "Argument of [st_disjoint] must be [cartesian_point], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval mv_last(geoPointField)", + "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_last(to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "row st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_last(geoShapeField)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_geopoint(\"a\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_last(geoShapeField)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_last(to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "row st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_last(integerField)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"a\"))", + "query": "from a_index | eval mv_last(integerField)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_last(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_last(ipField)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_last(ipField)", "error": [], "warning": [] }, { - "query": "row st_disjoint(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_last(to_ip(ipField))", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianpoint(\"a\"), to_cartesianpoint(\"a\"))", + "query": "from a_index | eval var = mv_last(keywordField)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_last(keywordField)", "error": [], "warning": [] }, { - "query": "row st_disjoint(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_last(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianpoint(\"a\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_last(longField)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_last(longField)", "error": [], "warning": [] }, { - "query": "row st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_last(textField)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"a\"))", + "query": "from a_index | eval mv_last(textField)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_last(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_last(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(geoPointField, geoPointField)", + "query": "from a_index | eval var = mv_last(versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoPointField, geoPointField)", + "query": "from a_index | eval mv_last(versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_geopoint(stringField), to_geopoint(stringField))", + "query": "from a_index | eval var = mv_last(to_version(keywordField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(stringField, stringField)", + "query": "from a_index | eval mv_last(booleanField, extraArg)", "error": [ - "Argument of [st_disjoint] must be [cartesian_point], found value [stringField] type [string]", - "Argument of [st_disjoint] must be [cartesian_point], found value [stringField] type [string]" + "Error: [mv_last] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoPointField, geoPointField, extraArg)", - "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." - ], - "warning": [] + "query": "from a_index | sort mv_last(booleanField)", + "error": [], + "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(geoPointField, geoShapeField)", + "query": "from a_index | eval mv_last(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoPointField, geoShapeField)", + "query": "row nullVar = null | eval mv_last(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_geopoint(stringField), geoShapeField)", + "query": "from a_index | eval mv_last(\"2022\")", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoPointField, geoShapeField, extraArg)", - "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | eval mv_last(concat(\"20\", \"22\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(geoShapeField, geoPointField)", + "query": "row var = mv_max(true)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoShapeField, geoPointField)", + "query": "row mv_max(true)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(geoShapeField, to_geopoint(stringField))", + "query": "row var = mv_max(to_boolean(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoShapeField, geoPointField, extraArg)", - "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." - ], + "query": "row var = mv_max(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(geoShapeField, geoShapeField)", + "query": "row mv_max(to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoShapeField, geoShapeField)", + "query": "row var = mv_max(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoShapeField, geoShapeField, extraArg)", - "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." - ], + "query": "row var = mv_max(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(cartesianPointField, cartesianPointField)", + "query": "row mv_max(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianPointField)", + "query": "row var = mv_max(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_cartesianpoint(stringField), to_cartesianpoint(stringField))", + "query": "row var = mv_max(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianPointField, extraArg)", - "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." - ], + "query": "row mv_max(5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(cartesianPointField, cartesianShapeField)", + "query": "row var = mv_max(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianShapeField)", + "query": "row var = mv_max(to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_cartesianpoint(stringField), cartesianShapeField)", + "query": "row mv_max(to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianShapeField, extraArg)", - "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." - ], + "query": "row var = mv_max(to_ip(to_ip(\"127.0.0.1\")))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(cartesianShapeField, cartesianPointField)", + "query": "row var = mv_max(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianPointField)", + "query": "row mv_max(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(cartesianShapeField, to_cartesianpoint(stringField))", + "query": "row var = mv_max(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianPointField, extraArg)", - "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." - ], + "query": "row var = mv_max(to_version(\"1.0.0\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(cartesianShapeField, cartesianShapeField)", + "query": "row mv_max(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianShapeField)", + "query": "row var = mv_max(to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianShapeField, extraArg)", + "query": "row var = mv_max(to_cartesianpoint(\"POINT (30 10)\"))", "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." + "Argument of [mv_max] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" ], "warning": [] }, { - "query": "from a_index | sort st_disjoint(geoPointField, geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | where mv_max(doubleField) > 0", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], + "query": "from a_index | where mv_max(cartesianPointField) > 0", + "error": [ + "Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | where mv_max(integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | where mv_max(longField) > 0", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | where mv_max(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = mv_max(booleanField)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval mv_max(booleanField)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = mv_max(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(true, true)", + "query": "from a_index | eval mv_max(cartesianPointField)", "error": [ - "Argument of [st_disjoint] must be [cartesian_point], found value [true] type [boolean]", - "Argument of [st_disjoint] must be [cartesian_point], found value [true] type [boolean]" + "Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]" ], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_disjoint(booleanField, booleanField)", + "query": "from a_index | eval var = mv_max(*)", "error": [ - "Argument of [st_disjoint] must be [cartesian_point], found value [booleanField] type [boolean]", - "Argument of [st_disjoint] must be [cartesian_point], found value [booleanField] type [boolean]" + "Using wildcards (*) in mv_max is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", + "query": "from a_index | eval var = mv_max(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "query": "from a_index | eval mv_max(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "query": "from a_index | eval var = mv_max(to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "query": "from a_index | eval var = mv_max(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_geopoint(geoPointField), to_geoshape(geoPointField))", + "query": "from a_index | eval mv_max(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_geoshape(geoPointField), to_geopoint(geoPointField))", + "query": "from a_index | eval var = mv_max(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_geoshape(geoPointField), to_geoshape(geoPointField))", + "query": "from a_index | eval var = mv_max(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | sort st_disjoint(cartesianPointField, cartesianPointField)", + "query": "from a_index | eval mv_max(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(null, null)", + "query": "from a_index | eval var = mv_max(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval st_disjoint(nullVar, nullVar)", + "query": "from a_index | eval var = mv_max(ipField)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_max(ipField)", "error": [], "warning": [] }, { - "query": "row st_intersects(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_max(to_ip(ipField))", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_geopoint(\"a\"), to_geopoint(\"a\"))", + "query": "from a_index | eval var = mv_max(keywordField)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(\"a\", \"a\")", - "error": [ - "Argument of [st_intersects] must be [cartesian_point], found value [\"a\"] type [string]", - "Argument of [st_intersects] must be [cartesian_point], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval mv_max(keywordField)", + "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_max(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row st_intersects(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_max(longField)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_geopoint(\"a\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_max(longField)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_max(textField)", "error": [], "warning": [] }, { - "query": "row st_intersects(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_max(textField)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"a\"))", + "query": "from a_index | eval var = mv_max(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_max(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row st_intersects(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_max(versionField)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_max(versionField)", "error": [], "warning": [] }, { - "query": "row st_intersects(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_max(to_version(keywordField))", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianpoint(\"a\"), to_cartesianpoint(\"a\"))", - "error": [], + "query": "from a_index | eval mv_max(booleanField, extraArg)", + "error": [ + "Error: [mv_max] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | sort mv_max(booleanField)", "error": [], "warning": [] }, { - "query": "row st_intersects(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_max(null)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianpoint(\"a\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "row nullVar = null | eval mv_max(nullVar)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_max(\"2022\")", "error": [], "warning": [] }, { - "query": "row st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_max(concat(\"20\", \"22\"))", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"a\"))", + "query": "row var = mv_median(5.5)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "row mv_median(5.5)", "error": [], "warning": [] }, { - "query": "row st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "row var = mv_median(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(geoPointField, geoPointField)", + "query": "row var = mv_median(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(geoPointField, geoPointField)", + "query": "row mv_median(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_geopoint(stringField), to_geopoint(stringField))", + "query": "row var = mv_median(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(stringField, stringField)", + "query": "row var = mv_median(true)", "error": [ - "Argument of [st_intersects] must be [cartesian_point], found value [stringField] type [string]", - "Argument of [st_intersects] must be [cartesian_point], found value [stringField] type [string]" + "Argument of [mv_median] must be [double], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval st_intersects(geoPointField, geoPointField, extraArg)", - "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | where mv_median(doubleField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(geoPointField, geoShapeField)", - "error": [], + "query": "from a_index | where mv_median(booleanField) > 0", + "error": [ + "Argument of [mv_median] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval st_intersects(geoPointField, geoShapeField)", + "query": "from a_index | where mv_median(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_geopoint(stringField), geoShapeField)", + "query": "from a_index | where mv_median(longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(geoPointField, geoShapeField, extraArg)", - "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | where mv_median(unsignedLongField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(geoShapeField, geoPointField)", + "query": "from a_index | eval var = mv_median(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(geoShapeField, geoPointField)", + "query": "from a_index | eval mv_median(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(geoShapeField, to_geopoint(stringField))", + "query": "from a_index | eval var = mv_median(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(geoShapeField, geoPointField, extraArg)", + "query": "from a_index | eval mv_median(booleanField)", "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." + "Argument of [mv_median] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(geoShapeField, geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_intersects(geoShapeField, geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_intersects(geoShapeField, geoShapeField, extraArg)", + "query": "from a_index | eval var = mv_median(*)", "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." + "Using wildcards (*) in mv_median is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(cartesianPointField, cartesianPointField)", + "query": "from a_index | eval var = mv_median(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianPointField, cartesianPointField)", + "query": "from a_index | eval mv_median(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_cartesianpoint(stringField), to_cartesianpoint(stringField))", + "query": "from a_index | eval var = mv_median(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianPointField, cartesianPointField, extraArg)", - "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | eval var = mv_median(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(cartesianPointField, cartesianShapeField)", + "query": "from a_index | eval mv_median(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianPointField, cartesianShapeField)", + "query": "from a_index | eval var = mv_median(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_cartesianpoint(stringField), cartesianShapeField)", + "query": "from a_index | eval mv_median(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianPointField, cartesianShapeField, extraArg)", + "query": "from a_index | eval mv_median(doubleField, extraArg)", "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." + "Error: [mv_median] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(cartesianShapeField, cartesianPointField)", + "query": "from a_index | sort mv_median(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianPointField)", + "query": "from a_index | eval mv_median(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(cartesianShapeField, to_cartesianpoint(stringField))", + "query": "row nullVar = null | eval mv_median(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianPointField, extraArg)", - "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." - ], + "query": "row var = mv_min(true)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(cartesianShapeField, cartesianShapeField)", + "query": "row mv_min(true)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianShapeField)", + "query": "row var = mv_min(to_boolean(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianShapeField, extraArg)", - "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." - ], + "query": "row var = mv_min(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], "warning": [] }, { - "query": "from a_index | sort st_intersects(geoPointField, geoPointField)", + "query": "row mv_min(to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row var = mv_min(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row var = mv_min(5.5)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row mv_min(5.5)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row var = mv_min(to_double(true))", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "row var = mv_min(5)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "row mv_min(5)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "row var = mv_min(to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "row var = mv_min(to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "row var = st_intersects(true, true)", - "error": [ - "Argument of [st_intersects] must be [cartesian_point], found value [true] type [boolean]", - "Argument of [st_intersects] must be [cartesian_point], found value [true] type [boolean]" - ], + "query": "row mv_min(to_ip(\"127.0.0.1\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "query": "row var = mv_min(to_ip(to_ip(\"127.0.0.1\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(booleanField, booleanField)", - "error": [ - "Argument of [st_intersects] must be [cartesian_point], found value [booleanField] type [boolean]", - "Argument of [st_intersects] must be [cartesian_point], found value [booleanField] type [boolean]" - ], + "query": "row var = mv_min(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", + "query": "row mv_min(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "query": "row var = mv_min(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "query": "row var = mv_min(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "query": "row mv_min(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_geopoint(geoPointField), to_geoshape(geoPointField))", + "query": "row var = mv_min(to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_geoshape(geoPointField), to_geopoint(geoPointField))", - "error": [], + "query": "row var = mv_min(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [ + "Argument of [mv_min] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + ], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_geoshape(geoPointField), to_geoshape(geoPointField))", + "query": "from a_index | where mv_min(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | sort st_intersects(cartesianPointField, cartesianPointField)", + "query": "from a_index | where mv_min(cartesianPointField) > 0", + "error": [ + "Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | where mv_min(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(null, null)", + "query": "from a_index | where mv_min(longField) > 0", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval st_intersects(nullVar, nullVar)", + "query": "from a_index | where mv_min(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = st_within(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_min(booleanField)", "error": [], "warning": [] }, { - "query": "row st_within(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_min(booleanField)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_geopoint(\"a\"), to_geopoint(\"a\"))", + "query": "from a_index | eval var = mv_min(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_within(\"a\", \"a\")", + "query": "from a_index | eval mv_min(cartesianPointField)", "error": [ - "Argument of [st_within] must be [cartesian_point], found value [\"a\"] type [string]", - "Argument of [st_within] must be [cartesian_point], found value [\"a\"] type [string]" + "Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]" ], "warning": [] }, { - "query": "row var = st_within(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | eval var = mv_min(*)", + "error": [ + "Using wildcards (*) in mv_min is not allowed" + ], "warning": [] }, { - "query": "row st_within(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_min(dateField)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_geopoint(\"a\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_min(dateField)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_min(to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "row st_within(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_min(doubleField)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"a\"))", + "query": "from a_index | eval mv_min(doubleField)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_min(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row st_within(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_min(integerField)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_min(integerField)", "error": [], "warning": [] }, { - "query": "row st_within(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_min(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianpoint(\"a\"), to_cartesianpoint(\"a\"))", + "query": "from a_index | eval var = mv_min(ipField)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_min(ipField)", "error": [], "warning": [] }, { - "query": "row st_within(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_min(to_ip(ipField))", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianpoint(\"a\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_min(keywordField)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_min(keywordField)", "error": [], "warning": [] }, { - "query": "row st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_min(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"a\"))", + "query": "from a_index | eval var = mv_min(longField)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_min(longField)", "error": [], "warning": [] }, { - "query": "row st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_min(textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(geoPointField, geoPointField)", + "query": "from a_index | eval mv_min(textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(geoPointField, geoPointField)", + "query": "from a_index | eval var = mv_min(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_geopoint(stringField), to_geopoint(stringField))", + "query": "from a_index | eval mv_min(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(stringField, stringField)", - "error": [ - "Argument of [st_within] must be [cartesian_point], found value [stringField] type [string]", - "Argument of [st_within] must be [cartesian_point], found value [stringField] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | eval st_within(geoPointField, geoPointField, extraArg)", - "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | eval var = st_within(geoPointField, geoShapeField)", + "query": "from a_index | eval var = mv_min(versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(geoPointField, geoShapeField)", + "query": "from a_index | eval mv_min(versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_geopoint(stringField), geoShapeField)", + "query": "from a_index | eval var = mv_min(to_version(keywordField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(geoPointField, geoShapeField, extraArg)", + "query": "from a_index | eval mv_min(booleanField, extraArg)", "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." + "Error: [mv_min] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = st_within(geoShapeField, geoPointField)", + "query": "from a_index | sort mv_min(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(geoShapeField, geoPointField)", + "query": "from a_index | eval mv_min(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(geoShapeField, to_geopoint(stringField))", + "query": "row nullVar = null | eval mv_min(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(geoShapeField, geoPointField, extraArg)", - "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | eval var = st_within(geoShapeField, geoShapeField)", + "query": "from a_index | eval mv_min(\"2022\")", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(geoShapeField, geoShapeField)", + "query": "from a_index | eval mv_min(concat(\"20\", \"22\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(geoShapeField, geoShapeField, extraArg)", - "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." - ], + "query": "row var = mv_slice(true, 5, 5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(cartesianPointField, cartesianPointField)", + "query": "row mv_slice(true, 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianPointField, cartesianPointField)", + "query": "row var = mv_slice(to_boolean(true), to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_cartesianpoint(stringField), to_cartesianpoint(stringField))", - "error": [], + "query": "row var = mv_slice(cartesianPointField, 5, 5)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianPointField, cartesianPointField, extraArg)", + "query": "row mv_slice(cartesianPointField, 5, 5)", "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = st_within(cartesianPointField, cartesianShapeField)", - "error": [], + "query": "row var = mv_slice(to_cartesianpoint(cartesianPointField), to_integer(true), to_integer(true))", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianPointField, cartesianShapeField)", + "query": "row var = mv_slice(to_cartesianshape(\"POINT (30 10)\"), 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_cartesianpoint(stringField), cartesianShapeField)", + "query": "row mv_slice(to_cartesianshape(\"POINT (30 10)\"), 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianPointField, cartesianShapeField, extraArg)", + "query": "row var = mv_slice(to_cartesianshape(cartesianPointField), to_integer(true), to_integer(true))", "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = st_within(cartesianShapeField, cartesianPointField)", + "query": "row var = mv_slice(to_datetime(\"2021-01-01T00:00:00Z\"), 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianShapeField, cartesianPointField)", + "query": "row mv_slice(to_datetime(\"2021-01-01T00:00:00Z\"), 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(cartesianShapeField, to_cartesianpoint(stringField))", + "query": "row var = mv_slice(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")), to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianShapeField, cartesianPointField, extraArg)", - "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." - ], + "query": "row var = mv_slice(5.5, 5, 5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(cartesianShapeField, cartesianShapeField)", + "query": "row mv_slice(5.5, 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianShapeField, cartesianShapeField)", + "query": "row var = mv_slice(to_double(true), to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianShapeField, cartesianShapeField, extraArg)", + "query": "row var = mv_slice(geoPointField, 5, 5)", "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | sort st_within(geoPointField, geoPointField)", - "error": [], + "query": "row mv_slice(geoPointField, 5, 5)", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row var = st_within(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], + "query": "row var = mv_slice(to_geopoint(geoPointField), to_integer(true), to_integer(true))", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row var = st_within(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row var = mv_slice(to_geoshape(\"POINT (30 10)\"), 5, 5)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row mv_slice(to_geoshape(\"POINT (30 10)\"), 5, 5)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], + "query": "row var = mv_slice(to_geoshape(geoPointField), to_integer(true), to_integer(true))", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row var = st_within(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "row var = mv_slice(5, 5, 5)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "row mv_slice(5, 5, 5)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "row var = mv_slice(to_integer(true), to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = st_within(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "row var = mv_slice(to_ip(\"127.0.0.1\"), 5, 5)", "error": [], "warning": [] }, { - "query": "row var = st_within(true, true)", - "error": [ - "Argument of [st_within] must be [cartesian_point], found value [true] type [boolean]", - "Argument of [st_within] must be [cartesian_point], found value [true] type [boolean]" - ], + "query": "row mv_slice(to_ip(\"127.0.0.1\"), 5, 5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "query": "row var = mv_slice(to_ip(to_ip(\"127.0.0.1\")), to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(booleanField, booleanField)", - "error": [ - "Argument of [st_within] must be [cartesian_point], found value [booleanField] type [boolean]", - "Argument of [st_within] must be [cartesian_point], found value [booleanField] type [boolean]" - ], + "query": "row var = mv_slice(\"a\", 5, 5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", + "query": "row mv_slice(\"a\", 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "query": "row var = mv_slice(to_string(true), to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "query": "row var = mv_slice(5, to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "query": "row var = mv_slice(to_version(\"1.0.0\"), 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_geopoint(geoPointField), to_geoshape(geoPointField))", + "query": "row mv_slice(to_version(\"1.0.0\"), 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_geoshape(geoPointField), to_geopoint(geoPointField))", + "query": "row var = mv_slice(to_version(\"a\"), to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_geoshape(geoPointField), to_geoshape(geoPointField))", - "error": [], + "query": "row var = mv_slice(5.5, true, true)", + "error": [ + "Argument of [mv_slice] must be [integer], found value [true] type [boolean]", + "Argument of [mv_slice] must be [integer], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | sort st_within(cartesianPointField, cartesianPointField)", + "query": "from a_index | where mv_slice(doubleField, integerField, integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(null, null)", + "query": "from a_index | where mv_slice(counterDoubleField, booleanField, booleanField) > 0", + "error": [ + "Argument of [mv_slice] must be [boolean], found value [counterDoubleField] type [counter_double]", + "Argument of [mv_slice] must be [integer], found value [booleanField] type [boolean]", + "Argument of [mv_slice] must be [integer], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where mv_slice(integerField, integerField, integerField) > 0", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval st_within(nullVar, nullVar)", + "query": "from a_index | where mv_slice(longField, integerField, integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = st_x(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_slice(booleanField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "row st_x(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_slice(booleanField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = st_x(to_geopoint(\"a\"))", + "query": "from a_index | eval var = mv_slice(to_boolean(booleanField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_x(\"a\")", + "query": "from a_index | eval mv_slice(counterDoubleField, booleanField, booleanField)", "error": [ - "Argument of [st_x] must be [cartesian_point], found value [\"a\"] type [string]" + "Argument of [mv_slice] must be [boolean], found value [counterDoubleField] type [counter_double]", + "Argument of [mv_slice] must be [integer], found value [booleanField] type [boolean]", + "Argument of [mv_slice] must be [integer], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "row var = st_x(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_slice(cartesianPointField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "row st_x(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_slice(cartesianPointField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = st_x(to_cartesianpoint(\"a\"))", + "query": "from a_index | eval var = mv_slice(to_cartesianpoint(cartesianPointField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_x(geoPointField)", + "query": "from a_index | eval var = mv_slice(cartesianShapeField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_x(geoPointField)", + "query": "from a_index | eval mv_slice(cartesianShapeField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_x(to_geopoint(stringField))", + "query": "from a_index | eval var = mv_slice(to_cartesianshape(cartesianPointField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_x(stringField)", - "error": [ - "Argument of [st_x] must be [cartesian_point], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = mv_slice(dateField, integerField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_x(geoPointField, extraArg)", - "error": [ - "Error: [st_x] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval mv_slice(dateField, integerField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_x(*)", - "error": [ - "Using wildcards (*) in st_x is not allowed" - ], + "query": "from a_index | eval var = mv_slice(to_datetime(dateField), to_integer(booleanField), to_integer(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_x(cartesianPointField)", + "query": "from a_index | eval var = mv_slice(doubleField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_x(cartesianPointField)", + "query": "from a_index | eval mv_slice(doubleField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_x(to_cartesianpoint(stringField))", + "query": "from a_index | eval var = mv_slice(to_double(booleanField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_x(cartesianPointField, extraArg)", - "error": [ - "Error: [st_x] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = mv_slice(geoPointField, integerField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort st_x(geoPointField)", + "query": "from a_index | eval mv_slice(geoPointField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = st_x(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = mv_slice(to_geopoint(geoPointField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_x(to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = mv_slice(geoShapeField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = st_x(true)", - "error": [ - "Argument of [st_x] must be [cartesian_point], found value [true] type [boolean]" - ], + "query": "from a_index | eval mv_slice(geoShapeField, integerField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_x(to_cartesianpoint(cartesianPointField))", + "query": "from a_index | eval var = mv_slice(to_geoshape(geoPointField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_x(booleanField)", - "error": [ - "Argument of [st_x] must be [cartesian_point], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_slice(integerField, integerField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_x(to_geopoint(geoPointField))", + "query": "from a_index | eval mv_slice(integerField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | sort st_x(cartesianPointField)", + "query": "from a_index | eval var = mv_slice(to_integer(booleanField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_x(null)", + "query": "from a_index | eval var = mv_slice(ipField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval st_x(nullVar)", + "query": "from a_index | eval mv_slice(ipField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = st_y(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_slice(to_ip(ipField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row st_y(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_slice(keywordField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = st_y(to_geopoint(\"a\"))", + "query": "from a_index | eval mv_slice(keywordField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = st_y(\"a\")", - "error": [ - "Argument of [st_y] must be [cartesian_point], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval var = mv_slice(to_string(booleanField), to_integer(booleanField), to_integer(booleanField))", + "error": [], "warning": [] }, { - "query": "row var = st_y(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_slice(longField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "row st_y(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_slice(longField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = st_y(to_cartesianpoint(\"a\"))", + "query": "from a_index | eval var = mv_slice(longField, to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_y(geoPointField)", + "query": "from a_index | eval var = mv_slice(textField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_y(geoPointField)", + "query": "from a_index | eval mv_slice(textField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_y(to_geopoint(stringField))", + "query": "from a_index | eval var = mv_slice(versionField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_y(stringField)", - "error": [ - "Argument of [st_y] must be [cartesian_point], found value [stringField] type [string]" - ], + "query": "from a_index | eval mv_slice(versionField, integerField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_y(geoPointField, extraArg)", - "error": [ - "Error: [st_y] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = mv_slice(to_version(keywordField), to_integer(booleanField), to_integer(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_y(*)", + "query": "from a_index | eval mv_slice(booleanField, integerField, integerField, extraArg)", "error": [ - "Using wildcards (*) in st_y is not allowed" + "Error: [mv_slice] function expects no more than 3 arguments, got 4." ], "warning": [] }, { - "query": "from a_index | eval var = st_y(cartesianPointField)", + "query": "from a_index | sort mv_slice(booleanField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_y(cartesianPointField)", + "query": "from a_index | eval mv_slice(null, null, null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_y(to_cartesianpoint(stringField))", + "query": "row nullVar = null | eval mv_slice(nullVar, nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_y(cartesianPointField, extraArg)", - "error": [ - "Error: [st_y] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort st_y(geoPointField)", + "query": "from a_index | eval mv_slice(\"2022\", integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = st_y(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | eval mv_slice(concat(\"20\", \"22\"), integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = st_y(to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "row var = mv_sort(true, \"asc\")", "error": [], "warning": [] }, { - "query": "row var = st_y(true)", - "error": [ - "Argument of [st_y] must be [cartesian_point], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = st_y(to_cartesianpoint(cartesianPointField))", + "query": "row mv_sort(true, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | eval st_y(booleanField)", - "error": [ - "Argument of [st_y] must be [cartesian_point], found value [booleanField] type [boolean]" - ], + "query": "row var = mv_sort(to_datetime(\"2021-01-01T00:00:00Z\"), \"asc\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_y(to_geopoint(geoPointField))", + "query": "row mv_sort(to_datetime(\"2021-01-01T00:00:00Z\"), \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | sort st_y(cartesianPointField)", + "query": "row var = mv_sort(5.5, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | eval st_y(null)", + "query": "row mv_sort(5.5, \"asc\")", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval st_y(nullVar)", + "query": "row var = mv_sort(5, \"asc\")", "error": [], "warning": [] }, { - "query": "row var = starts_with(\"a\", \"a\")", + "query": "row mv_sort(5, \"asc\")", "error": [], "warning": [] }, { - "query": "row starts_with(\"a\", \"a\")", + "query": "row var = mv_sort(to_ip(\"127.0.0.1\"), \"asc\")", "error": [], "warning": [] }, { - "query": "row var = starts_with(to_string(\"a\"), to_string(\"a\"))", + "query": "row mv_sort(to_ip(\"127.0.0.1\"), \"asc\")", "error": [], "warning": [] }, { - "query": "row var = starts_with(5, 5)", - "error": [ - "Argument of [starts_with] must be [string], found value [5] type [number]", - "Argument of [starts_with] must be [string], found value [5] type [number]" - ], + "query": "row var = mv_sort(\"a\", \"asc\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = starts_with(stringField, stringField)", + "query": "row mv_sort(\"a\", \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | eval starts_with(stringField, stringField)", + "query": "row var = mv_sort(to_version(\"1.0.0\"), \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = starts_with(to_string(stringField), to_string(stringField))", + "query": "row mv_sort(to_version(\"1.0.0\"), \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | eval starts_with(numberField, numberField)", + "query": "row var = mv_sort(to_cartesianpoint(\"POINT (30 10)\"), true)", "error": [ - "Argument of [starts_with] must be [string], found value [numberField] type [number]", - "Argument of [starts_with] must be [string], found value [numberField] type [number]" + "Argument of [mv_sort] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]", + "Argument of [mv_sort] must be [keyword], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval starts_with(stringField, stringField, extraArg)", - "error": [ - "Error: [starts_with] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | eval var = mv_sort(booleanField, \"asc\")", + "error": [], "warning": [] }, { - "query": "from a_index | sort starts_with(stringField, stringField)", + "query": "from a_index | eval mv_sort(booleanField, \"asc\")", "error": [], "warning": [] }, { - "query": "row var = starts_with(to_string(true), to_string(true))", + "query": "from a_index | eval var = mv_sort(dateField, \"asc\")", "error": [], "warning": [] }, { - "query": "row var = starts_with(true, true)", - "error": [ - "Argument of [starts_with] must be [string], found value [true] type [boolean]", - "Argument of [starts_with] must be [string], found value [true] type [boolean]" - ], + "query": "from a_index | eval mv_sort(dateField, \"asc\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = starts_with(to_string(booleanField), to_string(booleanField))", + "query": "from a_index | eval var = mv_sort(doubleField, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | eval starts_with(booleanField, booleanField)", - "error": [ - "Argument of [starts_with] must be [string], found value [booleanField] type [boolean]", - "Argument of [starts_with] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval mv_sort(doubleField, \"asc\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval starts_with(null, null)", + "query": "from a_index | eval var = mv_sort(integerField, \"asc\")", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval starts_with(nullVar, nullVar)", + "query": "from a_index | eval mv_sort(integerField, \"asc\")", "error": [], "warning": [] }, { - "query": "row var = substring(\"a\", 5, 5)", + "query": "from a_index | eval var = mv_sort(ipField, \"asc\")", "error": [], "warning": [] }, { - "query": "row var = substring(\"a\", 5)", + "query": "from a_index | eval mv_sort(ipField, \"asc\")", "error": [], "warning": [] }, { - "query": "row substring(\"a\", 5, 5)", + "query": "from a_index | eval var = mv_sort(keywordField, \"asc\")", "error": [], "warning": [] }, { - "query": "row substring(\"a\", 5)", + "query": "from a_index | eval mv_sort(keywordField, \"asc\")", "error": [], "warning": [] }, { - "query": "row var = substring(to_string(\"a\"), to_integer(\"a\"), to_integer(\"a\"))", + "query": "from a_index | eval var = mv_sort(longField, \"asc\")", "error": [], "warning": [] }, { - "query": "row var = substring(5, \"a\", \"a\")", - "error": [ - "Argument of [substring] must be [string], found value [5] type [number]", - "Argument of [substring] must be [number], found value [\"a\"] type [string]", - "Argument of [substring] must be [number], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval mv_sort(longField, \"asc\")", + "error": [], "warning": [] }, { - "query": "from a_index | where length(substring(stringField, numberField, numberField)) > 0", + "query": "from a_index | eval var = mv_sort(textField, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | where length(substring(numberField, stringField, stringField)) > 0", - "error": [ - "Argument of [substring] must be [string], found value [numberField] type [number]", - "Argument of [substring] must be [number], found value [stringField] type [string]", - "Argument of [substring] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval mv_sort(textField, \"asc\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = substring(stringField, numberField, numberField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval substring(stringField, numberField, numberField)", + "query": "from a_index | eval var = mv_sort(versionField, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = substring(to_string(stringField), to_integer(stringField), to_integer(stringField))", + "query": "from a_index | eval mv_sort(versionField, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | eval substring(numberField, stringField, stringField)", + "query": "from a_index | eval mv_sort(booleanField, \"asc\", extraArg)", "error": [ - "Argument of [substring] must be [string], found value [numberField] type [number]", - "Argument of [substring] must be [number], found value [stringField] type [string]", - "Argument of [substring] must be [number], found value [stringField] type [string]" + "Error: [mv_sort] function expects no more than 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval substring(stringField, numberField, numberField, extraArg)", - "error": [ - "Error: [substring] function expects no more than 3 arguments, got 4." - ], + "query": "from a_index | sort mv_sort(booleanField, \"asc\")", + "error": [], "warning": [] }, { - "query": "from a_index | sort substring(stringField, numberField, numberField)", + "query": "from a_index | eval mv_sort(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | sort substring(stringField, numberField)", + "query": "row nullVar = null | eval mv_sort(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "row var = substring(to_string(true), to_integer(true), to_integer(true))", + "query": "from a_index | eval mv_sort(\"2022\", \"asc\")", "error": [], "warning": [] }, { - "query": "row var = substring(true, true, true)", - "error": [ - "Argument of [substring] must be [string], found value [true] type [boolean]", - "Argument of [substring] must be [number], found value [true] type [boolean]", - "Argument of [substring] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | eval mv_sort(concat(\"20\", \"22\"), \"asc\")", + "error": [], "warning": [] }, { - "query": "from a_index | where length(substring(booleanField, booleanField, booleanField)) > 0", - "error": [ - "Argument of [substring] must be [string], found value [booleanField] type [boolean]", - "Argument of [substring] must be [number], found value [booleanField] type [boolean]", - "Argument of [substring] must be [number], found value [booleanField] type [boolean]" - ], + "query": "row var = mv_sum(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = substring(to_string(booleanField), to_integer(booleanField), to_integer(booleanField))", + "query": "row mv_sum(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval substring(booleanField, booleanField, booleanField)", - "error": [ - "Argument of [substring] must be [string], found value [booleanField] type [boolean]", - "Argument of [substring] must be [number], found value [booleanField] type [boolean]", - "Argument of [substring] must be [number], found value [booleanField] type [boolean]" - ], + "query": "row var = mv_sum(to_double(true))", + "error": [], "warning": [] }, { - "query": "from a_index | eval substring(null, null, null)", + "query": "row var = mv_sum(5)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval substring(nullVar, nullVar, nullVar)", + "query": "row mv_sum(5)", "error": [], "warning": [] }, { - "query": "row var = tan(5)", + "query": "row var = mv_sum(to_integer(true))", "error": [], "warning": [] }, { - "query": "row tan(5)", - "error": [], + "query": "row var = mv_sum(true)", + "error": [ + "Argument of [mv_sum] must be [double], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row var = tan(to_integer(\"a\"))", + "query": "from a_index | where mv_sum(doubleField) > 0", "error": [], "warning": [] }, { - "query": "row var = tan(\"a\")", + "query": "from a_index | where mv_sum(booleanField) > 0", "error": [ - "Argument of [tan] must be [number], found value [\"a\"] type [string]" + "Argument of [mv_sum] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where tan(numberField) > 0", + "query": "from a_index | where mv_sum(integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where tan(stringField) > 0", - "error": [ - "Argument of [tan] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | where mv_sum(longField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = tan(numberField)", + "query": "from a_index | where mv_sum(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval tan(numberField)", + "query": "from a_index | eval var = mv_sum(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = tan(to_integer(stringField))", + "query": "from a_index | eval mv_sum(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval tan(stringField)", - "error": [ - "Argument of [tan] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = mv_sum(to_double(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval tan(numberField, extraArg)", + "query": "from a_index | eval mv_sum(booleanField)", "error": [ - "Error: [tan] function expects exactly one argument, got 2." + "Argument of [mv_sum] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = tan(*)", + "query": "from a_index | eval var = mv_sum(*)", "error": [ - "Using wildcards (*) in tan is not allowed" + "Using wildcards (*) in mv_sum is not allowed" ], "warning": [] }, { - "query": "from a_index | sort tan(numberField)", + "query": "from a_index | eval var = mv_sum(integerField)", "error": [], "warning": [] }, { - "query": "row var = tan(to_integer(true))", + "query": "from a_index | eval mv_sum(integerField)", "error": [], "warning": [] }, { - "query": "row var = tan(true)", - "error": [ - "Argument of [tan] must be [number], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where tan(booleanField) > 0", - "error": [ - "Argument of [tan] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_sum(to_integer(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = tan(to_integer(booleanField))", + "query": "from a_index | eval var = mv_sum(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval tan(booleanField)", - "error": [ - "Argument of [tan] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval mv_sum(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval tan(null)", + "query": "from a_index | eval var = mv_sum(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval tan(nullVar)", + "query": "from a_index | eval mv_sum(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = tanh(5)", - "error": [], + "query": "from a_index | eval mv_sum(doubleField, extraArg)", + "error": [ + "Error: [mv_sum] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "row tanh(5)", + "query": "from a_index | sort mv_sum(doubleField)", "error": [], "warning": [] }, { - "query": "row var = tanh(to_integer(\"a\"))", + "query": "from a_index | eval mv_sum(null)", "error": [], "warning": [] }, { - "query": "row var = tanh(\"a\")", - "error": [ - "Argument of [tanh] must be [number], found value [\"a\"] type [string]" - ], + "query": "row nullVar = null | eval mv_sum(nullVar)", + "error": [], "warning": [] }, { - "query": "from a_index | where tanh(numberField) > 0", + "query": "row var = mv_zip(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | where tanh(stringField) > 0", - "error": [ - "Argument of [tanh] must be [number], found value [stringField] type [string]" - ], + "query": "row mv_zip(\"a\", \"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = tanh(numberField)", + "query": "row var = mv_zip(to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval tanh(numberField)", + "query": "row var = mv_zip(\"a\", \"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = tanh(to_integer(stringField))", + "query": "row mv_zip(\"a\", \"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval tanh(stringField)", - "error": [ - "Argument of [tanh] must be [number], found value [stringField] type [string]" - ], + "query": "row var = mv_zip(to_string(true), to_string(true), to_string(true))", + "error": [], "warning": [] }, { - "query": "from a_index | eval tanh(numberField, extraArg)", + "query": "row var = mv_zip(true, true, true)", "error": [ - "Error: [tanh] function expects exactly one argument, got 2." + "Argument of [mv_zip] must be [keyword], found value [true] type [boolean]", + "Argument of [mv_zip] must be [keyword], found value [true] type [boolean]", + "Argument of [mv_zip] must be [keyword], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = tanh(*)", - "error": [ - "Using wildcards (*) in tanh is not allowed" - ], + "query": "from a_index | eval var = mv_zip(keywordField, keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort tanh(numberField)", + "query": "from a_index | eval mv_zip(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = tanh(to_integer(true))", + "query": "from a_index | eval var = mv_zip(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row var = tanh(true)", + "query": "from a_index | eval mv_zip(booleanField, booleanField)", "error": [ - "Argument of [tanh] must be [number], found value [true] type [boolean]" + "Argument of [mv_zip] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [mv_zip] must be [keyword], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where tanh(booleanField) > 0", - "error": [ - "Argument of [tanh] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = mv_zip(keywordField, keywordField, keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = tanh(to_integer(booleanField))", + "query": "from a_index | eval mv_zip(keywordField, keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval tanh(booleanField)", + "query": "from a_index | eval var = mv_zip(to_string(booleanField), to_string(booleanField), to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval mv_zip(booleanField, booleanField, booleanField)", "error": [ - "Argument of [tanh] must be [number], found value [booleanField] type [boolean]" + "Argument of [mv_zip] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [mv_zip] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [mv_zip] must be [keyword], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval tanh(null)", + "query": "from a_index | eval var = mv_zip(keywordField, keywordField, textField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval tanh(nullVar)", + "query": "from a_index | eval mv_zip(keywordField, keywordField, textField)", "error": [], "warning": [] }, { - "query": "row var = tau()", + "query": "from a_index | eval var = mv_zip(keywordField, textField)", "error": [], "warning": [] }, { - "query": "row tau()", + "query": "from a_index | eval mv_zip(keywordField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | where tau() > 0", + "query": "from a_index | eval var = mv_zip(keywordField, textField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = tau()", + "query": "from a_index | eval mv_zip(keywordField, textField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval tau()", + "query": "from a_index | eval var = mv_zip(keywordField, textField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval tau(extraArg)", - "error": [ - "Error: [tau] function expects exactly 0 arguments, got 1." - ], + "query": "from a_index | eval mv_zip(keywordField, textField, textField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort tau()", + "query": "from a_index | eval var = mv_zip(textField, keywordField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval tau()", + "query": "from a_index | eval mv_zip(textField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = to_boolean(\"a\")", + "query": "from a_index | eval var = mv_zip(textField, keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row to_boolean(\"a\")", + "query": "from a_index | eval mv_zip(textField, keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = to_bool(\"a\")", + "query": "from a_index | eval var = mv_zip(textField, keywordField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_boolean(stringField)", + "query": "from a_index | eval mv_zip(textField, keywordField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_boolean(stringField)", + "query": "from a_index | eval var = mv_zip(textField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_bool(stringField)", + "query": "from a_index | eval mv_zip(textField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_boolean(*)", - "error": [ - "Using wildcards (*) in to_boolean is not allowed" - ], + "query": "from a_index | eval var = mv_zip(textField, textField, keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_boolean(stringField)", + "query": "from a_index | eval mv_zip(textField, textField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = to_boolean(true)", + "query": "from a_index | eval var = mv_zip(textField, textField, textField)", "error": [], "warning": [] }, { - "query": "row to_boolean(true)", + "query": "from a_index | eval mv_zip(textField, textField, textField)", "error": [], "warning": [] }, { - "query": "row var = to_bool(true)", + "query": "from a_index | eval mv_zip(keywordField, keywordField, keywordField, extraArg)", + "error": [ + "Error: [mv_zip] function expects no more than 3 arguments, got 4." + ], + "warning": [] + }, + { + "query": "from a_index | sort mv_zip(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = to_boolean(to_boolean(true))", + "query": "from a_index | eval mv_zip(null, null, null)", "error": [], "warning": [] }, { - "query": "row var = to_boolean(5)", + "query": "row nullVar = null | eval mv_zip(nullVar, nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "row to_boolean(5)", + "query": "row var = now()", "error": [], "warning": [] }, { - "query": "row var = to_bool(5)", + "query": "row now()", "error": [], "warning": [] }, { - "query": "row var = to_boolean(to_integer(true))", + "query": "from a_index | eval var = now()", "error": [], "warning": [] }, { - "query": "row var = to_boolean(to_string(true))", + "query": "from a_index | eval now()", "error": [], "warning": [] }, { - "query": "row var = to_boolean(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval now(extraArg)", "error": [ - "Argument of [to_boolean] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + "Error: [now] function expects exactly 0 arguments, got 1." ], "warning": [] }, { - "query": "from a_index | eval var = to_boolean(booleanField)", + "query": "from a_index | sort now()", "error": [], "warning": [] }, { - "query": "from a_index | eval to_boolean(booleanField)", + "query": "row nullVar = null | eval now()", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_bool(booleanField)", + "query": "row var = pi()", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_boolean(to_boolean(booleanField))", + "query": "row pi()", "error": [], "warning": [] }, { - "query": "from a_index | eval to_boolean(cartesianPointField)", - "error": [ - "Argument of [to_boolean] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "from a_index | where pi() > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_boolean(numberField)", + "query": "from a_index | eval var = pi()", "error": [], "warning": [] }, { - "query": "from a_index | eval to_boolean(numberField)", + "query": "from a_index | eval pi()", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_bool(numberField)", - "error": [], + "query": "from a_index | eval pi(extraArg)", + "error": [ + "Error: [pi] function expects exactly 0 arguments, got 1." + ], "warning": [] }, { - "query": "from a_index | eval var = to_boolean(to_integer(booleanField))", + "query": "from a_index | sort pi()", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_boolean(to_string(booleanField))", + "query": "row nullVar = null | eval pi()", "error": [], "warning": [] }, { - "query": "from a_index | eval to_boolean(booleanField, extraArg)", - "error": [ - "Error: [to_boolean] function expects exactly one argument, got 2." - ], + "query": "row var = pow(5.5, 5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_boolean(booleanField)", + "query": "row pow(5.5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_boolean(null)", + "query": "row var = pow(to_double(true), to_double(true))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_boolean(nullVar)", + "query": "row var = pow(5.5, 5)", "error": [], "warning": [] }, { - "query": "row var = to_cartesianpoint(\"a\")", + "query": "row pow(5.5, 5)", "error": [], "warning": [] }, { - "query": "row to_cartesianpoint(\"a\")", + "query": "row var = pow(to_double(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianpoint(stringField)", + "query": "row var = pow(to_double(true), 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_cartesianpoint(stringField)", + "query": "row var = pow(5, 5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianpoint(*)", - "error": [ - "Using wildcards (*) in to_cartesianpoint is not allowed" - ], + "query": "row pow(5, 5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_cartesianpoint(stringField)", + "query": "row var = pow(to_integer(true), to_double(true))", "error": [], "warning": [] }, { - "query": "row var = to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row var = pow(5, 5)", "error": [], "warning": [] }, { - "query": "row to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row pow(5, 5)", "error": [], "warning": [] }, { - "query": "row var = to_cartesianpoint(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row var = pow(to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = to_cartesianpoint(to_string(true))", + "query": "row var = pow(to_integer(true), 5)", "error": [], "warning": [] }, { - "query": "row var = to_cartesianpoint(true)", - "error": [ - "Argument of [to_cartesianpoint] must be [cartesian_point], found value [true] type [boolean]" - ], + "query": "row var = pow(5, to_double(true))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianpoint(cartesianPointField)", + "query": "row var = pow(5, to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_cartesianpoint(cartesianPointField)", - "error": [], + "query": "row var = pow(true, true)", + "error": [ + "Argument of [pow] must be [double], found value [true] type [boolean]", + "Argument of [pow] must be [double], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianpoint(to_cartesianpoint(cartesianPointField))", + "query": "from a_index | where pow(doubleField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval to_cartesianpoint(booleanField)", + "query": "from a_index | where pow(booleanField, booleanField) > 0", "error": [ - "Argument of [to_cartesianpoint] must be [cartesian_point], found value [booleanField] type [boolean]" + "Argument of [pow] must be [double], found value [booleanField] type [boolean]", + "Argument of [pow] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianpoint(to_string(booleanField))", + "query": "from a_index | where pow(doubleField, integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval to_cartesianpoint(cartesianPointField, extraArg)", - "error": [ - "Error: [to_cartesianpoint] function expects exactly one argument, got 2." - ], + "query": "from a_index | where pow(doubleField, longField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_cartesianpoint(cartesianPointField)", + "query": "from a_index | where pow(doubleField, unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval to_cartesianpoint(null)", + "query": "from a_index | where pow(integerField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_cartesianpoint(nullVar)", + "query": "from a_index | where pow(integerField, integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = to_cartesianshape(\"a\")", + "query": "from a_index | where pow(integerField, longField) > 0", "error": [], "warning": [] }, { - "query": "row to_cartesianshape(\"a\")", + "query": "from a_index | where pow(integerField, unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianshape(stringField)", + "query": "from a_index | where pow(longField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval to_cartesianshape(stringField)", + "query": "from a_index | where pow(longField, integerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianshape(*)", - "error": [ - "Using wildcards (*) in to_cartesianshape is not allowed" - ], + "query": "from a_index | where pow(longField, longField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_cartesianshape(stringField)", + "query": "from a_index | where pow(longField, unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | where pow(unsignedLongField, doubleField) > 0", "error": [], "warning": [] }, { - "query": "row to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | where pow(unsignedLongField, integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = to_cartesianshape(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | where pow(unsignedLongField, longField) > 0", "error": [], "warning": [] }, { - "query": "row var = to_cartesianshape(to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | where pow(unsignedLongField, unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row to_cartesianshape(to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = pow(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "row var = to_cartesianshape(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | eval pow(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "row var = to_cartesianshape(to_string(true))", + "query": "from a_index | eval var = pow(to_double(booleanField), to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = to_cartesianshape(true)", + "query": "from a_index | eval pow(booleanField, booleanField)", "error": [ - "Argument of [to_cartesianshape] must be [cartesian_point], found value [true] type [boolean]" + "Argument of [pow] must be [double], found value [booleanField] type [boolean]", + "Argument of [pow] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianshape(cartesianPointField)", + "query": "from a_index | eval var = pow(doubleField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_cartesianshape(cartesianPointField)", + "query": "from a_index | eval pow(doubleField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianshape(to_cartesianpoint(cartesianPointField))", + "query": "from a_index | eval var = pow(to_double(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_cartesianshape(booleanField)", - "error": [ - "Argument of [to_cartesianshape] must be [cartesian_point], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = pow(doubleField, longField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianshape(cartesianShapeField)", + "query": "from a_index | eval pow(doubleField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_cartesianshape(cartesianShapeField)", + "query": "from a_index | eval var = pow(to_double(booleanField), longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianshape(to_cartesianshape(cartesianPointField))", + "query": "from a_index | eval var = pow(doubleField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianshape(to_string(booleanField))", + "query": "from a_index | eval pow(doubleField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_cartesianshape(cartesianPointField, extraArg)", - "error": [ - "Error: [to_cartesianshape] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = pow(to_double(booleanField), unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_cartesianshape(cartesianPointField)", + "query": "from a_index | eval var = pow(integerField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_cartesianshape(null)", + "query": "from a_index | eval pow(integerField, doubleField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_cartesianshape(nullVar)", + "query": "from a_index | eval var = pow(to_integer(booleanField), to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = to_datetime(\"a\")", + "query": "from a_index | eval var = pow(integerField, integerField)", "error": [], "warning": [] }, { - "query": "row to_datetime(\"a\")", + "query": "from a_index | eval pow(integerField, integerField)", "error": [], "warning": [] }, { - "query": "row var = to_dt(\"a\")", + "query": "from a_index | eval var = pow(to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_datetime(stringField)", + "query": "from a_index | eval var = pow(integerField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_datetime(stringField)", + "query": "from a_index | eval pow(integerField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_dt(stringField)", + "query": "from a_index | eval var = pow(to_integer(booleanField), longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_datetime(*)", - "error": [ - "Using wildcards (*) in to_datetime is not allowed" - ], + "query": "from a_index | eval var = pow(integerField, unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_datetime(stringField)", + "query": "from a_index | eval pow(integerField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = to_datetime(now())", + "query": "from a_index | eval var = pow(to_integer(booleanField), unsignedLongField)", "error": [], "warning": [] }, { - "query": "row to_datetime(now())", + "query": "from a_index | eval var = pow(longField, doubleField)", "error": [], "warning": [] }, { - "query": "row var = to_dt(now())", + "query": "from a_index | eval pow(longField, doubleField)", "error": [], "warning": [] }, { - "query": "row var = to_datetime(to_datetime(now()))", + "query": "from a_index | eval var = pow(longField, to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = to_datetime(5)", + "query": "from a_index | eval var = pow(longField, integerField)", "error": [], "warning": [] }, { - "query": "row to_datetime(5)", + "query": "from a_index | eval pow(longField, integerField)", "error": [], "warning": [] }, { - "query": "row var = to_dt(5)", + "query": "from a_index | eval var = pow(longField, to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = to_datetime(to_integer(true))", + "query": "from a_index | eval var = pow(longField, longField)", "error": [], "warning": [] }, { - "query": "row var = to_datetime(to_string(true))", + "query": "from a_index | eval pow(longField, longField)", "error": [], "warning": [] }, { - "query": "row var = to_datetime(true)", - "error": [ - "Argument of [to_datetime] must be [date], found value [true] type [boolean]" - ], + "query": "from a_index | eval var = pow(longField, unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_datetime(dateField)", + "query": "from a_index | eval pow(longField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_datetime(dateField)", + "query": "from a_index | eval var = pow(unsignedLongField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_dt(dateField)", + "query": "from a_index | eval pow(unsignedLongField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_datetime(to_datetime(dateField))", + "query": "from a_index | eval var = pow(unsignedLongField, to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_datetime(booleanField)", - "error": [ - "Argument of [to_datetime] must be [date], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = pow(unsignedLongField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_datetime(numberField)", + "query": "from a_index | eval pow(unsignedLongField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_datetime(numberField)", + "query": "from a_index | eval var = pow(unsignedLongField, to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_dt(numberField)", + "query": "from a_index | eval var = pow(unsignedLongField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_datetime(to_integer(booleanField))", + "query": "from a_index | eval pow(unsignedLongField, longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_datetime(to_string(booleanField))", + "query": "from a_index | eval var = pow(unsignedLongField, unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_datetime(dateField, extraArg)", + "query": "from a_index | eval pow(unsignedLongField, unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval pow(doubleField, doubleField, extraArg)", "error": [ - "Error: [to_datetime] function expects exactly one argument, got 2." + "Error: [pow] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | sort to_datetime(dateField)", + "query": "from a_index | sort pow(doubleField, doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_datetime(null)", + "query": "from a_index | eval pow(null, null)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_datetime(nullVar)", + "query": "row nullVar = null | eval pow(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "row var = to_degrees(5)", + "query": "row var = repeat(\"a\", 5)", "error": [], "warning": [] }, { - "query": "row to_degrees(5)", + "query": "row repeat(\"a\", 5)", "error": [], "warning": [] }, { - "query": "row var = to_degrees(to_integer(\"a\"))", + "query": "row var = repeat(to_string(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = to_degrees(\"a\")", + "query": "row var = repeat(true, true)", "error": [ - "Argument of [to_degrees] must be [number], found value [\"a\"] type [string]" + "Argument of [repeat] must be [keyword], found value [true] type [boolean]", + "Argument of [repeat] must be [integer], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where to_degrees(numberField) > 0", + "query": "from a_index | eval var = repeat(keywordField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | where to_degrees(stringField) > 0", - "error": [ - "Argument of [to_degrees] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval repeat(keywordField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_degrees(numberField)", + "query": "from a_index | eval var = repeat(to_string(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_degrees(numberField)", - "error": [], + "query": "from a_index | eval repeat(booleanField, booleanField)", + "error": [ + "Argument of [repeat] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [repeat] must be [integer], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_degrees(to_integer(stringField))", + "query": "from a_index | eval var = repeat(textField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_degrees(stringField)", - "error": [ - "Argument of [to_degrees] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval repeat(textField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval to_degrees(numberField, extraArg)", + "query": "from a_index | eval repeat(keywordField, integerField, extraArg)", "error": [ - "Error: [to_degrees] function expects exactly one argument, got 2." + "Error: [repeat] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval var = to_degrees(*)", - "error": [ - "Using wildcards (*) in to_degrees is not allowed" - ], + "query": "from a_index | sort repeat(keywordField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_degrees(numberField)", + "query": "from a_index | eval repeat(null, null)", "error": [], "warning": [] }, { - "query": "row var = to_degrees(to_integer(true))", + "query": "row nullVar = null | eval repeat(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "row var = to_degrees(true)", - "error": [ - "Argument of [to_degrees] must be [number], found value [true] type [boolean]" - ], + "query": "row var = replace(\"a\", \"a\", \"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | where to_degrees(booleanField) > 0", - "error": [ - "Argument of [to_degrees] must be [number], found value [booleanField] type [boolean]" - ], + "query": "row replace(\"a\", \"a\", \"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_degrees(to_integer(booleanField))", + "query": "row var = replace(to_string(true), to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_degrees(booleanField)", + "query": "row var = replace(true, true, true)", "error": [ - "Argument of [to_degrees] must be [number], found value [booleanField] type [boolean]" + "Argument of [replace] must be [keyword], found value [true] type [boolean]", + "Argument of [replace] must be [keyword], found value [true] type [boolean]", + "Argument of [replace] must be [keyword], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval to_degrees(null)", + "query": "from a_index | eval var = replace(keywordField, keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_degrees(nullVar)", + "query": "from a_index | eval replace(keywordField, keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = to_double(\"a\")", + "query": "from a_index | eval var = replace(to_string(booleanField), to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row to_double(\"a\")", - "error": [], + "query": "from a_index | eval replace(booleanField, booleanField, booleanField)", + "error": [ + "Argument of [replace] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [replace] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [replace] must be [keyword], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = to_dbl(\"a\")", + "query": "from a_index | eval var = replace(keywordField, keywordField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_double(stringField)", + "query": "from a_index | eval replace(keywordField, keywordField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_double(stringField)", + "query": "from a_index | eval var = replace(keywordField, textField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_dbl(stringField)", + "query": "from a_index | eval replace(keywordField, textField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_double(*)", - "error": [ - "Using wildcards (*) in to_double is not allowed" - ], + "query": "from a_index | eval var = replace(keywordField, textField, textField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_double(stringField)", + "query": "from a_index | eval replace(keywordField, textField, textField)", "error": [], "warning": [] }, { - "query": "row var = to_double(true)", + "query": "from a_index | eval var = replace(textField, keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row to_double(true)", + "query": "from a_index | eval replace(textField, keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = to_dbl(true)", + "query": "from a_index | eval var = replace(textField, keywordField, textField)", "error": [], "warning": [] }, { - "query": "row var = to_double(to_boolean(true))", + "query": "from a_index | eval replace(textField, keywordField, textField)", "error": [], "warning": [] }, { - "query": "row var = to_double(5)", + "query": "from a_index | eval var = replace(textField, textField, keywordField)", "error": [], "warning": [] }, { - "query": "row to_double(5)", + "query": "from a_index | eval replace(textField, textField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = to_dbl(5)", + "query": "from a_index | eval var = replace(textField, textField, textField)", "error": [], "warning": [] }, { - "query": "row var = to_double(to_integer(true))", + "query": "from a_index | eval replace(textField, textField, textField)", "error": [], "warning": [] }, { - "query": "row var = to_double(now())", - "error": [], + "query": "from a_index | eval replace(keywordField, keywordField, keywordField, extraArg)", + "error": [ + "Error: [replace] function expects exactly 3 arguments, got 4." + ], "warning": [] }, { - "query": "row to_double(now())", + "query": "from a_index | sort replace(keywordField, keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = to_dbl(now())", + "query": "from a_index | eval replace(null, null, null)", "error": [], "warning": [] }, { - "query": "row var = to_double(to_datetime(now()))", + "query": "row nullVar = null | eval replace(nullVar, nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "row var = to_double(to_string(true))", + "query": "row var = right(\"a\", 5)", "error": [], "warning": [] }, { - "query": "row var = to_double(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [ - "Argument of [to_double] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" - ], + "query": "row right(\"a\", 5)", + "error": [], "warning": [] }, { - "query": "from a_index | where to_double(booleanField) > 0", + "query": "row var = right(to_string(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | where to_double(cartesianPointField) > 0", + "query": "row var = right(true, true)", "error": [ - "Argument of [to_double] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + "Argument of [right] must be [keyword], found value [true] type [boolean]", + "Argument of [right] must be [integer], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where to_double(numberField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_double(dateField) > 0", + "query": "from a_index | eval var = right(keywordField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | where to_double(stringField) > 0", + "query": "from a_index | eval right(keywordField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_double(booleanField)", + "query": "from a_index | eval var = right(to_string(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_double(booleanField)", - "error": [], + "query": "from a_index | eval right(booleanField, booleanField)", + "error": [ + "Argument of [right] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [right] must be [integer], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_dbl(booleanField)", + "query": "from a_index | eval var = right(textField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_double(to_boolean(booleanField))", + "query": "from a_index | eval right(textField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_double(cartesianPointField)", + "query": "from a_index | eval right(keywordField, integerField, extraArg)", "error": [ - "Argument of [to_double] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + "Error: [right] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval var = to_double(numberField)", + "query": "from a_index | sort right(keywordField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_double(numberField)", + "query": "from a_index | eval right(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_dbl(numberField)", + "query": "row nullVar = null | eval right(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_double(to_integer(booleanField))", + "query": "row var = round(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_double(dateField)", + "query": "row round(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_double(dateField)", + "query": "row var = round(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_dbl(dateField)", + "query": "row var = round(5.5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_double(to_datetime(dateField))", + "query": "row round(5.5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_double(to_string(booleanField))", + "query": "row var = round(to_double(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_double(booleanField, extraArg)", - "error": [ - "Error: [to_double] function expects exactly one argument, got 2." - ], + "query": "row var = round(5)", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_double(booleanField)", + "query": "row round(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_double(null)", + "query": "row var = round(to_integer(true))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_double(nullVar)", + "query": "row var = round(5, 5)", "error": [], "warning": [] }, { - "query": "row var = to_geopoint(\"a\")", + "query": "row round(5, 5)", "error": [], "warning": [] }, { - "query": "row to_geopoint(\"a\")", + "query": "row var = round(to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_geopoint(stringField)", + "query": "row var = round(5, to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_geopoint(stringField)", + "query": "row var = round(true, true)", + "error": [ + "Argument of [round] must be [double], found value [true] type [boolean]", + "Argument of [round] must be [integer], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where round(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_geopoint(*)", + "query": "from a_index | where round(booleanField) > 0", "error": [ - "Using wildcards (*) in to_geopoint is not allowed" + "Argument of [round] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort to_geopoint(stringField)", + "query": "from a_index | where round(doubleField, integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = to_geopoint(to_geopoint(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | where round(booleanField, booleanField) > 0", + "error": [ + "Argument of [round] must be [double], found value [booleanField] type [boolean]", + "Argument of [round] must be [integer], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row to_geopoint(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | where round(integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = to_geopoint(to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | where round(integerField, integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = to_geopoint(to_string(true))", + "query": "from a_index | where round(longField) > 0", "error": [], "warning": [] }, { - "query": "row var = to_geopoint(true)", - "error": [ - "Argument of [to_geopoint] must be [geo_point], found value [true] type [boolean]" - ], + "query": "from a_index | where round(longField, integerField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_geopoint(geoPointField)", + "query": "from a_index | where round(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval to_geopoint(geoPointField)", + "query": "from a_index | eval var = round(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_geopoint(to_geopoint(geoPointField))", + "query": "from a_index | eval round(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_geopoint(booleanField)", - "error": [ - "Argument of [to_geopoint] must be [geo_point], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = round(to_double(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_geopoint(to_string(booleanField))", - "error": [], + "query": "from a_index | eval round(booleanField)", + "error": [ + "Argument of [round] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval to_geopoint(geoPointField, extraArg)", + "query": "from a_index | eval var = round(*)", "error": [ - "Error: [to_geopoint] function expects exactly one argument, got 2." + "Using wildcards (*) in round is not allowed" ], "warning": [] }, { - "query": "from a_index | sort to_geopoint(geoPointField)", + "query": "from a_index | eval var = round(doubleField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_geopoint(null)", + "query": "from a_index | eval round(doubleField, integerField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_geopoint(nullVar)", + "query": "from a_index | eval var = round(to_double(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = to_geoshape(\"a\")", + "query": "from a_index | eval round(booleanField, booleanField)", + "error": [ + "Argument of [round] must be [double], found value [booleanField] type [boolean]", + "Argument of [round] must be [integer], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = round(integerField)", "error": [], "warning": [] }, { - "query": "row to_geoshape(\"a\")", + "query": "from a_index | eval round(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_geoshape(stringField)", + "query": "from a_index | eval var = round(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_geoshape(stringField)", + "query": "from a_index | eval var = round(integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_geoshape(*)", - "error": [ - "Using wildcards (*) in to_geoshape is not allowed" - ], + "query": "from a_index | eval round(integerField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_geoshape(stringField)", + "query": "from a_index | eval var = round(to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = to_geoshape(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = round(longField)", "error": [], "warning": [] }, { - "query": "row to_geoshape(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval round(longField)", "error": [], "warning": [] }, { - "query": "row var = to_geoshape(to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = round(longField, integerField)", "error": [], "warning": [] }, { - "query": "row var = to_geoshape(to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval round(longField, integerField)", "error": [], "warning": [] }, { - "query": "row to_geoshape(to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = round(longField, to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = to_geoshape(to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = round(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = to_geoshape(to_string(true))", + "query": "from a_index | eval round(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = to_geoshape(true)", + "query": "from a_index | eval round(doubleField, integerField, extraArg)", "error": [ - "Argument of [to_geoshape] must be [geo_point], found value [true] type [boolean]" + "Error: [round] function expects no more than 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval var = to_geoshape(geoPointField)", + "query": "from a_index | sort round(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_geoshape(geoPointField)", + "query": "from a_index | eval round(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_geoshape(to_geopoint(geoPointField))", + "query": "row nullVar = null | eval round(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_geoshape(booleanField)", - "error": [ - "Argument of [to_geoshape] must be [geo_point], found value [booleanField] type [boolean]" - ], + "query": "row var = rtrim(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_geoshape(geoShapeField)", + "query": "row rtrim(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval to_geoshape(geoShapeField)", + "query": "row var = rtrim(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_geoshape(to_geoshape(geoPointField))", - "error": [], + "query": "row var = rtrim(true)", + "error": [ + "Argument of [rtrim] must be [keyword], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_geoshape(to_string(booleanField))", + "query": "from a_index | eval var = rtrim(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_geoshape(geoPointField, extraArg)", - "error": [ - "Error: [to_geoshape] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval rtrim(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_geoshape(geoPointField)", + "query": "from a_index | eval var = rtrim(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_geoshape(null)", - "error": [], + "query": "from a_index | eval rtrim(booleanField)", + "error": [ + "Argument of [rtrim] must be [keyword], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row nullVar = null | eval to_geoshape(nullVar)", - "error": [], + "query": "from a_index | eval var = rtrim(*)", + "error": [ + "Using wildcards (*) in rtrim is not allowed" + ], "warning": [] }, { - "query": "row var = to_integer(\"a\")", + "query": "from a_index | eval var = rtrim(textField)", "error": [], "warning": [] }, { - "query": "row to_integer(\"a\")", + "query": "from a_index | eval rtrim(textField)", "error": [], "warning": [] }, { - "query": "row var = to_int(\"a\")", - "error": [], + "query": "from a_index | eval rtrim(keywordField, extraArg)", + "error": [ + "Error: [rtrim] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "from a_index | eval var = to_integer(stringField)", + "query": "from a_index | sort rtrim(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_integer(stringField)", + "query": "from a_index | eval rtrim(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_int(stringField)", + "query": "row nullVar = null | eval rtrim(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_integer(*)", - "error": [ - "Using wildcards (*) in to_integer is not allowed" - ], + "query": "row var = signum(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_integer(stringField)", + "query": "row signum(5.5)", "error": [], "warning": [] }, { - "query": "row var = to_integer(true)", + "query": "row var = signum(to_double(true))", "error": [], "warning": [] }, { - "query": "row to_integer(true)", + "query": "row var = signum(5)", "error": [], "warning": [] }, { - "query": "row var = to_int(true)", + "query": "row signum(5)", "error": [], "warning": [] }, { - "query": "row var = to_integer(to_boolean(true))", + "query": "row var = signum(to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = to_integer(5)", - "error": [], + "query": "row var = signum(true)", + "error": [ + "Argument of [signum] must be [double], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row to_integer(5)", + "query": "from a_index | where signum(doubleField) > 0", "error": [], "warning": [] }, { - "query": "row var = to_int(5)", - "error": [], + "query": "from a_index | where signum(booleanField) > 0", + "error": [ + "Argument of [signum] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = to_integer(to_integer(true))", + "query": "from a_index | where signum(integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = to_integer(now())", + "query": "from a_index | where signum(longField) > 0", "error": [], "warning": [] }, { - "query": "row to_integer(now())", + "query": "from a_index | where signum(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = to_int(now())", + "query": "from a_index | eval var = signum(doubleField)", "error": [], "warning": [] }, { - "query": "row var = to_integer(to_datetime(now()))", + "query": "from a_index | eval signum(doubleField)", "error": [], "warning": [] }, { - "query": "row var = to_integer(to_string(true))", + "query": "from a_index | eval var = signum(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = to_integer(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval signum(booleanField)", "error": [ - "Argument of [to_integer] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + "Argument of [signum] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where to_integer(booleanField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_integer(cartesianPointField) > 0", + "query": "from a_index | eval var = signum(*)", "error": [ - "Argument of [to_integer] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + "Using wildcards (*) in signum is not allowed" ], "warning": [] }, { - "query": "from a_index | where to_integer(numberField) > 0", + "query": "from a_index | eval var = signum(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | where to_integer(dateField) > 0", + "query": "from a_index | eval signum(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | where to_integer(stringField) > 0", + "query": "from a_index | eval var = signum(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_integer(booleanField)", + "query": "from a_index | eval var = signum(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_integer(booleanField)", + "query": "from a_index | eval signum(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_int(booleanField)", + "query": "from a_index | eval var = signum(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_integer(to_boolean(booleanField))", + "query": "from a_index | eval signum(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_integer(cartesianPointField)", + "query": "from a_index | eval signum(doubleField, extraArg)", "error": [ - "Argument of [to_integer] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + "Error: [signum] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = to_integer(numberField)", + "query": "from a_index | sort signum(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_integer(numberField)", + "query": "from a_index | eval signum(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_int(numberField)", + "query": "row nullVar = null | eval signum(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_integer(to_integer(booleanField))", + "query": "row var = sin(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_integer(dateField)", + "query": "row sin(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_integer(dateField)", + "query": "row var = sin(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_int(dateField)", + "query": "row var = sin(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_integer(to_datetime(dateField))", + "query": "row sin(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_integer(to_string(booleanField))", + "query": "row var = sin(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_integer(booleanField, extraArg)", + "query": "row var = sin(true)", "error": [ - "Error: [to_integer] function expects exactly one argument, got 2." + "Argument of [sin] must be [double], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort to_integer(booleanField)", + "query": "from a_index | where sin(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval to_integer(null)", + "query": "from a_index | where sin(booleanField) > 0", + "error": [ + "Argument of [sin] must be [double], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where sin(integerField) > 0", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_integer(nullVar)", + "query": "from a_index | where sin(longField) > 0", "error": [], "warning": [] }, { - "query": "row var = to_ip(\"a\")", + "query": "from a_index | where sin(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row to_ip(\"a\")", + "query": "from a_index | eval var = sin(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_ip(stringField)", + "query": "from a_index | eval sin(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_ip(stringField)", + "query": "from a_index | eval var = sin(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_ip(*)", + "query": "from a_index | eval sin(booleanField)", "error": [ - "Using wildcards (*) in to_ip is not allowed" + "Argument of [sin] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort to_ip(stringField)", - "error": [], + "query": "from a_index | eval var = sin(*)", + "error": [ + "Using wildcards (*) in sin is not allowed" + ], "warning": [] }, { - "query": "row var = to_ip(to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval var = sin(integerField)", "error": [], "warning": [] }, { - "query": "row to_ip(to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval sin(integerField)", "error": [], "warning": [] }, { - "query": "row var = to_ip(to_ip(to_ip(\"127.0.0.1\")))", + "query": "from a_index | eval var = sin(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = to_ip(to_string(true))", + "query": "from a_index | eval var = sin(longField)", "error": [], "warning": [] }, { - "query": "row var = to_ip(true)", - "error": [ - "Argument of [to_ip] must be [ip], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_ip(ipField)", + "query": "from a_index | eval sin(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_ip(ipField)", + "query": "from a_index | eval var = sin(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_ip(to_ip(ipField))", + "query": "from a_index | eval sin(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_ip(booleanField)", + "query": "from a_index | eval sin(doubleField, extraArg)", "error": [ - "Argument of [to_ip] must be [ip], found value [booleanField] type [boolean]" + "Error: [sin] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = to_ip(to_string(booleanField))", + "query": "from a_index | sort sin(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_ip(ipField, extraArg)", - "error": [ - "Error: [to_ip] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval sin(null)", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_ip(ipField)", + "query": "row nullVar = null | eval sin(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_ip(null)", + "query": "row var = sinh(5.5)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_ip(nullVar)", + "query": "row sinh(5.5)", "error": [], "warning": [] }, { - "query": "row var = to_long(\"a\")", + "query": "row var = sinh(to_double(true))", "error": [], "warning": [] }, { - "query": "row to_long(\"a\")", + "query": "row var = sinh(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_long(stringField)", + "query": "row sinh(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_long(stringField)", + "query": "row var = sinh(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_long(*)", + "query": "row var = sinh(true)", "error": [ - "Using wildcards (*) in to_long is not allowed" + "Argument of [sinh] must be [double], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort to_long(stringField)", + "query": "from a_index | where sinh(doubleField) > 0", "error": [], "warning": [] }, { - "query": "row var = to_long(true)", - "error": [], + "query": "from a_index | where sinh(booleanField) > 0", + "error": [ + "Argument of [sinh] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row to_long(true)", + "query": "from a_index | where sinh(integerField) > 0", "error": [], "warning": [] }, { - "query": "row var = to_long(to_boolean(true))", + "query": "from a_index | where sinh(longField) > 0", "error": [], "warning": [] }, { - "query": "row var = to_long(5)", + "query": "from a_index | where sinh(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row to_long(5)", + "query": "from a_index | eval var = sinh(doubleField)", "error": [], "warning": [] }, { - "query": "row var = to_long(to_integer(true))", + "query": "from a_index | eval sinh(doubleField)", "error": [], "warning": [] }, { - "query": "row var = to_long(now())", + "query": "from a_index | eval var = sinh(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row to_long(now())", - "error": [], + "query": "from a_index | eval sinh(booleanField)", + "error": [ + "Argument of [sinh] must be [double], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = to_long(to_datetime(now()))", - "error": [], + "query": "from a_index | eval var = sinh(*)", + "error": [ + "Using wildcards (*) in sinh is not allowed" + ], "warning": [] }, { - "query": "row var = to_long(to_string(true))", + "query": "from a_index | eval var = sinh(integerField)", "error": [], "warning": [] }, { - "query": "row var = to_long(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [ - "Argument of [to_long] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" - ], + "query": "from a_index | eval sinh(integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | where to_long(booleanField) > 0", + "query": "from a_index | eval var = sinh(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | where to_long(cartesianPointField) > 0", - "error": [ - "Argument of [to_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "from a_index | eval var = sinh(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | where to_long(numberField) > 0", + "query": "from a_index | eval sinh(longField)", "error": [], "warning": [] }, { - "query": "from a_index | where to_long(dateField) > 0", + "query": "from a_index | eval var = sinh(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | where to_long(stringField) > 0", + "query": "from a_index | eval sinh(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_long(booleanField)", - "error": [], + "query": "from a_index | eval sinh(doubleField, extraArg)", + "error": [ + "Error: [sinh] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "from a_index | eval to_long(booleanField)", + "query": "from a_index | sort sinh(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_long(to_boolean(booleanField))", + "query": "from a_index | eval sinh(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_long(cartesianPointField)", - "error": [ - "Argument of [to_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "row nullVar = null | eval sinh(nullVar)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_long(numberField)", + "query": "row var = split(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval to_long(numberField)", + "query": "row split(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_long(to_integer(booleanField))", + "query": "row var = split(to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_long(dateField)", - "error": [], + "query": "row var = split(true, true)", + "error": [ + "Argument of [split] must be [keyword], found value [true] type [boolean]", + "Argument of [split] must be [keyword], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval to_long(dateField)", + "query": "from a_index | eval var = split(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_long(to_datetime(dateField))", + "query": "from a_index | eval split(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_long(to_string(booleanField))", + "query": "from a_index | eval var = split(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_long(booleanField, extraArg)", + "query": "from a_index | eval split(booleanField, booleanField)", "error": [ - "Error: [to_long] function expects exactly one argument, got 2." + "Argument of [split] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [split] must be [keyword], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort to_long(booleanField)", + "query": "from a_index | eval var = split(keywordField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_long(null)", + "query": "from a_index | eval split(keywordField, textField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_long(nullVar)", + "query": "from a_index | eval var = split(textField, keywordField)", "error": [], "warning": [] }, { - "query": "row var = to_lower(\"a\")", + "query": "from a_index | eval split(textField, keywordField)", "error": [], "warning": [] }, { - "query": "row to_lower(\"a\")", + "query": "from a_index | eval var = split(textField, textField)", "error": [], "warning": [] }, { - "query": "row var = to_lower(to_string(\"a\"))", + "query": "from a_index | eval split(textField, textField)", "error": [], "warning": [] }, { - "query": "row var = to_lower(5)", + "query": "from a_index | eval split(keywordField, keywordField, extraArg)", "error": [ - "Argument of [to_lower] must be [string], found value [5] type [number]" + "Error: [split] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | where length(to_lower(stringField)) > 0", + "query": "from a_index | sort split(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(to_lower(numberField)) > 0", - "error": [ - "Argument of [to_lower] must be [string], found value [numberField] type [number]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_lower(stringField)", + "query": "from a_index | eval split(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_lower(stringField)", + "query": "row nullVar = null | eval split(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_lower(to_string(stringField))", + "query": "row var = sqrt(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_lower(numberField)", - "error": [ - "Argument of [to_lower] must be [string], found value [numberField] type [number]" - ], - "warning": [] - }, - { - "query": "from a_index | eval to_lower(stringField, extraArg)", - "error": [ - "Error: [to_lower] function expects exactly one argument, got 2." - ], + "query": "row sqrt(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_lower(*)", - "error": [ - "Using wildcards (*) in to_lower is not allowed" - ], + "query": "row var = sqrt(to_double(true))", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_lower(stringField)", + "query": "row var = sqrt(5)", "error": [], "warning": [] }, { - "query": "row var = to_lower(to_string(true))", + "query": "row sqrt(5)", "error": [], "warning": [] }, { - "query": "row var = to_lower(true)", - "error": [ - "Argument of [to_lower] must be [string], found value [true] type [boolean]" - ], + "query": "row var = sqrt(to_integer(true))", + "error": [], "warning": [] }, { - "query": "from a_index | where length(to_lower(booleanField)) > 0", + "query": "row var = sqrt(true)", "error": [ - "Argument of [to_lower] must be [string], found value [booleanField] type [boolean]" + "Argument of [sqrt] must be [double], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = to_lower(to_string(booleanField))", + "query": "from a_index | where sqrt(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval to_lower(booleanField)", + "query": "from a_index | where sqrt(booleanField) > 0", "error": [ - "Argument of [to_lower] must be [string], found value [booleanField] type [boolean]" + "Argument of [sqrt] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval to_lower(null)", + "query": "from a_index | where sqrt(integerField) > 0", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_lower(nullVar)", + "query": "from a_index | where sqrt(longField) > 0", "error": [], "warning": [] }, { - "query": "row var = to_radians(5)", + "query": "from a_index | where sqrt(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row to_radians(5)", + "query": "from a_index | eval var = sqrt(doubleField)", "error": [], "warning": [] }, { - "query": "row var = to_radians(to_integer(\"a\"))", + "query": "from a_index | eval sqrt(doubleField)", "error": [], "warning": [] }, { - "query": "row var = to_radians(\"a\")", - "error": [ - "Argument of [to_radians] must be [number], found value [\"a\"] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | where to_radians(numberField) > 0", + "query": "from a_index | eval var = sqrt(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | where to_radians(stringField) > 0", + "query": "from a_index | eval sqrt(booleanField)", "error": [ - "Argument of [to_radians] must be [number], found value [stringField] type [string]" + "Argument of [sqrt] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = to_radians(numberField)", - "error": [], + "query": "from a_index | eval var = sqrt(*)", + "error": [ + "Using wildcards (*) in sqrt is not allowed" + ], "warning": [] }, { - "query": "from a_index | eval to_radians(numberField)", + "query": "from a_index | eval var = sqrt(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_radians(to_integer(stringField))", + "query": "from a_index | eval sqrt(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_radians(stringField)", - "error": [ - "Argument of [to_radians] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = sqrt(to_integer(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval to_radians(numberField, extraArg)", - "error": [ - "Error: [to_radians] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = sqrt(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_radians(*)", + "query": "from a_index | eval sqrt(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = sqrt(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval sqrt(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval sqrt(doubleField, extraArg)", "error": [ - "Using wildcards (*) in to_radians is not allowed" + "Error: [sqrt] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | sort to_radians(numberField)", + "query": "from a_index | sort sqrt(doubleField)", "error": [], "warning": [] }, { - "query": "row var = to_radians(to_integer(true))", + "query": "from a_index | eval sqrt(null)", "error": [], "warning": [] }, { - "query": "row var = to_radians(true)", + "query": "row nullVar = null | eval sqrt(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "row var = st_contains(cartesianPointField, cartesianPointField)", "error": [ - "Argument of [to_radians] must be [number], found value [true] type [boolean]" + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | where to_radians(booleanField) > 0", + "query": "row st_contains(cartesianPointField, cartesianPointField)", "error": [ - "Argument of [to_radians] must be [number], found value [booleanField] type [boolean]" + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = to_radians(to_integer(booleanField))", - "error": [], + "query": "row var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval to_radians(booleanField)", + "query": "row var = st_contains(cartesianPointField, to_cartesianshape(\"POINT (30 10)\"))", "error": [ - "Argument of [to_radians] must be [number], found value [booleanField] type [boolean]" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval to_radians(null)", - "error": [], + "query": "row st_contains(cartesianPointField, to_cartesianshape(\"POINT (30 10)\"))", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row nullVar = null | eval to_radians(nullVar)", - "error": [], + "query": "row var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row var = to_string(\"a\")", - "error": [], + "query": "row var = st_contains(to_cartesianshape(\"POINT (30 10)\"), cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row to_string(\"a\")", - "error": [], + "query": "row st_contains(to_cartesianshape(\"POINT (30 10)\"), cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row var = to_str(\"a\")", - "error": [], + "query": "row var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_string(stringField)", + "query": "row var = st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_string(stringField)", + "query": "row st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_str(stringField)", - "error": [], + "query": "row var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_string(*)", + "query": "row var = st_contains(geoPointField, geoPointField)", "error": [ - "Using wildcards (*) in to_string is not allowed" + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | sort to_string(stringField)", - "error": [], + "query": "row st_contains(geoPointField, geoPointField)", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row var = to_string(true)", - "error": [], + "query": "row var = st_contains(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row to_string(true)", - "error": [], + "query": "row var = st_contains(geoPointField, to_geoshape(\"POINT (30 10)\"))", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row var = to_str(true)", - "error": [], + "query": "row st_contains(geoPointField, to_geoshape(\"POINT (30 10)\"))", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row var = to_string(to_boolean(true))", - "error": [], + "query": "row var = st_contains(to_geopoint(geoPointField), to_geoshape(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row var = to_string(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], + "query": "row var = st_contains(to_geoshape(\"POINT (30 10)\"), geoPointField)", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row to_string(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], + "query": "row st_contains(to_geoshape(\"POINT (30 10)\"), geoPointField)", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row var = to_str(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], + "query": "row var = st_contains(to_geoshape(geoPointField), to_geopoint(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row var = to_string(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "row var = st_contains(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = to_string(to_cartesianshape(\"POINT (30 10)\"))", + "query": "row st_contains(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row to_string(to_cartesianshape(\"POINT (30 10)\"))", - "error": [], + "query": "row var = st_contains(to_geoshape(geoPointField), to_geoshape(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row var = to_str(to_cartesianshape(\"POINT (30 10)\"))", - "error": [], + "query": "row var = st_contains(true, true)", + "error": [ + "Argument of [st_contains] must be [cartesian_point], found value [true] type [boolean]", + "Argument of [st_contains] must be [cartesian_point], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row var = to_string(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = st_contains(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "row var = to_string(now())", + "query": "from a_index | eval st_contains(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "row to_string(now())", + "query": "from a_index | eval var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "row var = to_str(now())", - "error": [], + "query": "from a_index | eval st_contains(booleanField, booleanField)", + "error": [ + "Argument of [st_contains] must be [cartesian_point], found value [booleanField] type [boolean]", + "Argument of [st_contains] must be [cartesian_point], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = to_string(to_datetime(now()))", + "query": "from a_index | eval var = st_contains(cartesianPointField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "row var = to_string(5)", + "query": "from a_index | eval st_contains(cartesianPointField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "row to_string(5)", + "query": "from a_index | eval var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "row var = to_str(5)", + "query": "from a_index | eval var = st_contains(cartesianShapeField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "row var = to_string(to_integer(true))", + "query": "from a_index | eval st_contains(cartesianShapeField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "row var = to_string(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "row to_string(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = st_contains(cartesianShapeField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "row var = to_str(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval st_contains(cartesianShapeField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "row var = to_string(to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "row var = to_string(to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = st_contains(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "row to_string(to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval st_contains(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "row var = to_str(to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = st_contains(to_geopoint(geoPointField), to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "row var = to_string(to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = st_contains(geoPointField, geoShapeField)", "error": [], "warning": [] }, { - "query": "row var = to_string(to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval st_contains(geoPointField, geoShapeField)", "error": [], "warning": [] }, { - "query": "row to_string(to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval var = st_contains(to_geopoint(geoPointField), to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "row var = to_str(to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval var = st_contains(geoShapeField, geoPointField)", "error": [], "warning": [] }, { - "query": "row var = to_string(to_ip(to_ip(\"127.0.0.1\")))", + "query": "from a_index | eval st_contains(geoShapeField, geoPointField)", "error": [], "warning": [] }, { - "query": "row var = to_string(to_string(true))", + "query": "from a_index | eval var = st_contains(to_geoshape(geoPointField), to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "row var = to_string(to_version(\"1.0.0\"))", + "query": "from a_index | eval var = st_contains(geoShapeField, geoShapeField)", "error": [], "warning": [] }, { - "query": "row to_string(to_version(\"1.0.0\"))", + "query": "from a_index | eval st_contains(geoShapeField, geoShapeField)", "error": [], "warning": [] }, { - "query": "row var = to_str(to_version(\"1.0.0\"))", + "query": "from a_index | eval var = st_contains(to_geoshape(geoPointField), to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "row var = to_string(to_version(\"a\"))", - "error": [], + "query": "from a_index | eval st_contains(cartesianPointField, cartesianPointField, extraArg)", + "error": [ + "Error: [st_contains] function expects exactly 2 arguments, got 3." + ], "warning": [] }, { - "query": "from a_index | where length(to_string(booleanField)) > 0", + "query": "from a_index | sort st_contains(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(to_string(cartesianPointField)) > 0", + "query": "from a_index | eval st_contains(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | where length(to_string(cartesianShapeField)) > 0", + "query": "row nullVar = null | eval st_contains(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | where length(to_string(dateField)) > 0", - "error": [], + "query": "row var = st_disjoint(cartesianPointField, cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | where length(to_string(numberField)) > 0", - "error": [], + "query": "row st_disjoint(cartesianPointField, cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | where length(to_string(geoPointField)) > 0", - "error": [], + "query": "row var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | where length(to_string(geoShapeField)) > 0", - "error": [], + "query": "row var = st_disjoint(cartesianPointField, to_cartesianshape(\"POINT (30 10)\"))", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | where length(to_string(ipField)) > 0", - "error": [], + "query": "row st_disjoint(cartesianPointField, to_cartesianshape(\"POINT (30 10)\"))", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | where length(to_string(stringField)) > 0", - "error": [], + "query": "row var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | where length(to_string(versionField)) > 0", - "error": [], + "query": "row var = st_disjoint(to_cartesianshape(\"POINT (30 10)\"), cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_string(booleanField)", - "error": [], + "query": "row st_disjoint(to_cartesianshape(\"POINT (30 10)\"), cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval to_string(booleanField)", - "error": [], + "query": "row var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_str(booleanField)", + "query": "row var = st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(to_boolean(booleanField))", + "query": "row st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(cartesianPointField)", - "error": [], + "query": "row var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval to_string(cartesianPointField)", - "error": [], + "query": "row var = st_disjoint(geoPointField, geoPointField)", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_str(cartesianPointField)", - "error": [], + "query": "row st_disjoint(geoPointField, geoPointField)", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_string(to_cartesianpoint(cartesianPointField))", - "error": [], + "query": "row var = st_disjoint(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_string(cartesianShapeField)", - "error": [], + "query": "row var = st_disjoint(geoPointField, to_geoshape(\"POINT (30 10)\"))", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval to_string(cartesianShapeField)", - "error": [], + "query": "row st_disjoint(geoPointField, to_geoshape(\"POINT (30 10)\"))", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_str(cartesianShapeField)", - "error": [], + "query": "row var = st_disjoint(to_geopoint(geoPointField), to_geoshape(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_string(to_cartesianshape(cartesianPointField))", - "error": [], + "query": "row var = st_disjoint(to_geoshape(\"POINT (30 10)\"), geoPointField)", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_string(dateField)", - "error": [], + "query": "row st_disjoint(to_geoshape(\"POINT (30 10)\"), geoPointField)", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval to_string(dateField)", - "error": [], + "query": "row var = st_disjoint(to_geoshape(geoPointField), to_geopoint(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_str(dateField)", + "query": "row var = st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(to_datetime(dateField))", + "query": "row st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(numberField)", - "error": [], + "query": "row var = st_disjoint(to_geoshape(geoPointField), to_geoshape(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval to_string(numberField)", - "error": [], + "query": "row var = st_disjoint(true, true)", + "error": [ + "Argument of [st_disjoint] must be [cartesian_point], found value [true] type [boolean]", + "Argument of [st_disjoint] must be [cartesian_point], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_str(numberField)", + "query": "from a_index | eval var = st_disjoint(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(to_integer(booleanField))", + "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(geoPointField)", + "query": "from a_index | eval var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_string(geoPointField)", - "error": [], + "query": "from a_index | eval st_disjoint(booleanField, booleanField)", + "error": [ + "Argument of [st_disjoint] must be [cartesian_point], found value [booleanField] type [boolean]", + "Argument of [st_disjoint] must be [cartesian_point], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_str(geoPointField)", + "query": "from a_index | eval var = st_disjoint(cartesianPointField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(to_geopoint(geoPointField))", + "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(geoShapeField)", + "query": "from a_index | eval var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_string(geoShapeField)", + "query": "from a_index | eval var = st_disjoint(cartesianShapeField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_str(geoShapeField)", + "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(to_geoshape(geoPointField))", + "query": "from a_index | eval var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(ipField)", + "query": "from a_index | eval var = st_disjoint(cartesianShapeField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_string(ipField)", + "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_str(ipField)", + "query": "from a_index | eval var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(to_ip(ipField))", + "query": "from a_index | eval var = st_disjoint(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(to_string(booleanField))", + "query": "from a_index | eval st_disjoint(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(versionField)", + "query": "from a_index | eval var = st_disjoint(to_geopoint(geoPointField), to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_string(versionField)", + "query": "from a_index | eval var = st_disjoint(geoPointField, geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_str(versionField)", + "query": "from a_index | eval st_disjoint(geoPointField, geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(to_version(stringField))", + "query": "from a_index | eval var = st_disjoint(to_geopoint(geoPointField), to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_string(booleanField, extraArg)", - "error": [ - "Error: [to_string] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort to_string(booleanField)", + "query": "from a_index | eval var = st_disjoint(geoShapeField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_string(null)", + "query": "from a_index | eval st_disjoint(geoShapeField, geoPointField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_string(nullVar)", + "query": "from a_index | eval var = st_disjoint(to_geoshape(geoPointField), to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "row var = to_unsigned_long(\"a\")", + "query": "from a_index | eval var = st_disjoint(geoShapeField, geoShapeField)", "error": [], "warning": [] }, { - "query": "row to_unsigned_long(\"a\")", + "query": "from a_index | eval st_disjoint(geoShapeField, geoShapeField)", "error": [], "warning": [] }, { - "query": "row var = to_ul(\"a\")", + "query": "from a_index | eval var = st_disjoint(to_geoshape(geoPointField), to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "row var = to_ulong(\"a\")", - "error": [], + "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianPointField, extraArg)", + "error": [ + "Error: [st_disjoint] function expects exactly 2 arguments, got 3." + ], "warning": [] }, { - "query": "from a_index | eval var = to_unsigned_long(stringField)", + "query": "from a_index | sort st_disjoint(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_unsigned_long(stringField)", + "query": "from a_index | eval st_disjoint(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_ul(stringField)", + "query": "row nullVar = null | eval st_disjoint(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_ulong(stringField)", - "error": [], + "query": "row var = st_distance(cartesianPointField, cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_unsigned_long(*)", + "query": "row st_distance(cartesianPointField, cartesianPointField)", "error": [ - "Using wildcards (*) in to_unsigned_long is not allowed" + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | sort to_unsigned_long(stringField)", - "error": [], + "query": "row var = st_distance(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row var = to_unsigned_long(true)", - "error": [], + "query": "row var = st_distance(geoPointField, geoPointField)", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row to_unsigned_long(true)", - "error": [], + "query": "row st_distance(geoPointField, geoPointField)", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row var = to_ul(true)", - "error": [], + "query": "row var = st_distance(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row var = to_ulong(true)", - "error": [], + "query": "row var = st_distance(true, true)", + "error": [ + "Argument of [st_distance] must be [cartesian_point], found value [true] type [boolean]", + "Argument of [st_distance] must be [cartesian_point], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row var = to_unsigned_long(to_boolean(true))", + "query": "from a_index | eval var = st_distance(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "row var = to_unsigned_long(now())", + "query": "from a_index | eval st_distance(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "row to_unsigned_long(now())", + "query": "from a_index | eval var = st_distance(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "row var = to_ul(now())", - "error": [], + "query": "from a_index | eval st_distance(booleanField, booleanField)", + "error": [ + "Argument of [st_distance] must be [cartesian_point], found value [booleanField] type [boolean]", + "Argument of [st_distance] must be [cartesian_point], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = to_ulong(now())", + "query": "from a_index | eval var = st_distance(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "row var = to_unsigned_long(to_datetime(now()))", + "query": "from a_index | eval st_distance(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "row var = to_unsigned_long(5)", + "query": "from a_index | eval var = st_distance(to_geopoint(geoPointField), to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "row to_unsigned_long(5)", - "error": [], + "query": "from a_index | eval st_distance(cartesianPointField, cartesianPointField, extraArg)", + "error": [ + "Error: [st_distance] function expects exactly 2 arguments, got 3." + ], "warning": [] }, { - "query": "row var = to_ul(5)", + "query": "from a_index | sort st_distance(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "row var = to_ulong(5)", + "query": "from a_index | eval st_distance(null, null)", "error": [], "warning": [] }, { - "query": "row var = to_unsigned_long(to_integer(true))", + "query": "row nullVar = null | eval st_distance(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "row var = to_unsigned_long(to_string(true))", - "error": [], + "query": "row var = st_intersects(cartesianPointField, cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row var = to_unsigned_long(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row st_intersects(cartesianPointField, cartesianPointField)", "error": [ - "Argument of [to_unsigned_long] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | where to_unsigned_long(booleanField) > 0", - "error": [], + "query": "row var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | where to_unsigned_long(cartesianPointField) > 0", + "query": "row var = st_intersects(cartesianPointField, to_cartesianshape(\"POINT (30 10)\"))", "error": [ - "Argument of [to_unsigned_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | where to_unsigned_long(dateField) > 0", - "error": [], + "query": "row st_intersects(cartesianPointField, to_cartesianshape(\"POINT (30 10)\"))", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | where to_unsigned_long(numberField) > 0", - "error": [], + "query": "row var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | where to_unsigned_long(stringField) > 0", - "error": [], + "query": "row var = st_intersects(to_cartesianshape(\"POINT (30 10)\"), cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_unsigned_long(booleanField)", - "error": [], + "query": "row st_intersects(to_cartesianshape(\"POINT (30 10)\"), cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval to_unsigned_long(booleanField)", - "error": [], + "query": "row var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_ul(booleanField)", + "query": "row var = st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_ulong(booleanField)", + "query": "row st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_unsigned_long(to_boolean(booleanField))", - "error": [], + "query": "row var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval to_unsigned_long(cartesianPointField)", + "query": "row var = st_intersects(geoPointField, geoPointField)", "error": [ - "Argument of [to_unsigned_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = to_unsigned_long(dateField)", - "error": [], + "query": "row st_intersects(geoPointField, geoPointField)", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval to_unsigned_long(dateField)", - "error": [], + "query": "row var = st_intersects(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_ul(dateField)", - "error": [], + "query": "row var = st_intersects(geoPointField, to_geoshape(\"POINT (30 10)\"))", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_ulong(dateField)", - "error": [], + "query": "row st_intersects(geoPointField, to_geoshape(\"POINT (30 10)\"))", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_unsigned_long(to_datetime(dateField))", - "error": [], + "query": "row var = st_intersects(to_geopoint(geoPointField), to_geoshape(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_unsigned_long(numberField)", - "error": [], + "query": "row var = st_intersects(to_geoshape(\"POINT (30 10)\"), geoPointField)", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval to_unsigned_long(numberField)", - "error": [], + "query": "row st_intersects(to_geoshape(\"POINT (30 10)\"), geoPointField)", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_ul(numberField)", - "error": [], + "query": "row var = st_intersects(to_geoshape(geoPointField), to_geopoint(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_ulong(numberField)", + "query": "row var = st_intersects(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_unsigned_long(to_integer(booleanField))", + "query": "row st_intersects(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_unsigned_long(to_string(booleanField))", - "error": [], + "query": "row var = st_intersects(to_geoshape(geoPointField), to_geoshape(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval to_unsigned_long(booleanField, extraArg)", + "query": "row var = st_intersects(true, true)", "error": [ - "Error: [to_unsigned_long] function expects exactly one argument, got 2." + "Argument of [st_intersects] must be [cartesian_point], found value [true] type [boolean]", + "Argument of [st_intersects] must be [cartesian_point], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort to_unsigned_long(booleanField)", + "query": "from a_index | eval var = st_intersects(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_unsigned_long(null)", + "query": "from a_index | eval st_intersects(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_unsigned_long(nullVar)", + "query": "from a_index | eval var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "row var = to_upper(\"a\")", - "error": [], + "query": "from a_index | eval st_intersects(booleanField, booleanField)", + "error": [ + "Argument of [st_intersects] must be [cartesian_point], found value [booleanField] type [boolean]", + "Argument of [st_intersects] must be [cartesian_point], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row to_upper(\"a\")", + "query": "from a_index | eval var = st_intersects(cartesianPointField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "row var = to_upper(to_string(\"a\"))", + "query": "from a_index | eval st_intersects(cartesianPointField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "row var = to_upper(5)", - "error": [ - "Argument of [to_upper] must be [string], found value [5] type [number]" - ], + "query": "from a_index | eval var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [], "warning": [] }, { - "query": "from a_index | where length(to_upper(stringField)) > 0", + "query": "from a_index | eval var = st_intersects(cartesianShapeField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(to_upper(numberField)) > 0", - "error": [ - "Argument of [to_upper] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_upper(stringField)", + "query": "from a_index | eval var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_upper(stringField)", + "query": "from a_index | eval var = st_intersects(cartesianShapeField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_upper(to_string(stringField))", + "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_upper(numberField)", - "error": [ - "Argument of [to_upper] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval to_upper(stringField, extraArg)", - "error": [ - "Error: [to_upper] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = st_intersects(geoPointField, geoPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_upper(*)", - "error": [ - "Using wildcards (*) in to_upper is not allowed" - ], + "query": "from a_index | eval st_intersects(geoPointField, geoPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_upper(stringField)", + "query": "from a_index | eval var = st_intersects(to_geopoint(geoPointField), to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "row var = to_upper(to_string(true))", + "query": "from a_index | eval var = st_intersects(geoPointField, geoShapeField)", "error": [], "warning": [] }, { - "query": "row var = to_upper(true)", - "error": [ - "Argument of [to_upper] must be [string], found value [true] type [boolean]" - ], + "query": "from a_index | eval st_intersects(geoPointField, geoShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | where length(to_upper(booleanField)) > 0", - "error": [ - "Argument of [to_upper] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = st_intersects(to_geopoint(geoPointField), to_geoshape(geoPointField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_upper(to_string(booleanField))", + "query": "from a_index | eval var = st_intersects(geoShapeField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_upper(booleanField)", - "error": [ - "Argument of [to_upper] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval st_intersects(geoShapeField, geoPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval to_upper(null)", + "query": "from a_index | eval var = st_intersects(to_geoshape(geoPointField), to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_upper(nullVar)", + "query": "from a_index | eval var = st_intersects(geoShapeField, geoShapeField)", "error": [], "warning": [] }, { - "query": "row var = to_version(\"a\")", + "query": "from a_index | eval st_intersects(geoShapeField, geoShapeField)", "error": [], "warning": [] }, { - "query": "row to_version(\"a\")", + "query": "from a_index | eval var = st_intersects(to_geoshape(geoPointField), to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "row var = to_ver(\"a\")", - "error": [], + "query": "from a_index | eval st_intersects(cartesianPointField, cartesianPointField, extraArg)", + "error": [ + "Error: [st_intersects] function expects exactly 2 arguments, got 3." + ], "warning": [] }, { - "query": "from a_index | eval var = to_version(stringField)", + "query": "from a_index | sort st_intersects(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_version(stringField)", + "query": "from a_index | eval st_intersects(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_ver(stringField)", + "query": "row nullVar = null | eval st_intersects(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_version(*)", + "query": "row var = st_within(cartesianPointField, cartesianPointField)", "error": [ - "Using wildcards (*) in to_version is not allowed" + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | sort to_version(stringField)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_version(to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row to_version(to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_ver(to_version(\"1.0.0\"))", - "error": [], + "query": "row st_within(cartesianPointField, cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row var = to_version(true)", + "query": "row var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", "error": [ - "Argument of [to_version] must be [string], found value [true] type [boolean]" + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = to_version(versionField)", - "error": [], + "query": "row var = st_within(cartesianPointField, to_cartesianshape(\"POINT (30 10)\"))", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval to_version(versionField)", - "error": [], + "query": "row st_within(cartesianPointField, to_cartesianshape(\"POINT (30 10)\"))", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_ver(versionField)", - "error": [], + "query": "row var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval to_version(stringField, extraArg)", + "query": "row var = st_within(to_cartesianshape(\"POINT (30 10)\"), cartesianPointField)", "error": [ - "Error: [to_version] function expects exactly one argument, got 2." + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval to_version(null)", - "error": [], + "query": "row st_within(to_cartesianshape(\"POINT (30 10)\"), cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row nullVar = null | eval to_version(nullVar)", - "error": [], + "query": "row var = st_within(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row var = trim(\"a\")", + "query": "row var = st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row trim(\"a\")", + "query": "row st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = trim(to_string(\"a\"))", - "error": [], + "query": "row var = st_within(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]", + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "row var = trim(5)", + "query": "row var = st_within(geoPointField, geoPointField)", "error": [ - "Argument of [trim] must be [string], found value [5] type [number]" + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | where length(trim(stringField)) > 0", - "error": [], + "query": "row st_within(geoPointField, geoPointField)", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | where length(trim(numberField)) > 0", + "query": "row var = st_within(to_geopoint(geoPointField), to_geopoint(geoPointField))", "error": [ - "Argument of [trim] must be [string], found value [numberField] type [number]" + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = trim(stringField)", - "error": [], + "query": "row var = st_within(geoPointField, to_geoshape(\"POINT (30 10)\"))", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval trim(stringField)", - "error": [], + "query": "row st_within(geoPointField, to_geoshape(\"POINT (30 10)\"))", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval var = trim(to_string(stringField))", - "error": [], + "query": "row var = st_within(to_geopoint(geoPointField), to_geoshape(geoPointField))", + "error": [ + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval trim(numberField)", + "query": "row var = st_within(to_geoshape(\"POINT (30 10)\"), geoPointField)", "error": [ - "Argument of [trim] must be [string], found value [numberField] type [number]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval trim(stringField, extraArg)", + "query": "row st_within(to_geoshape(\"POINT (30 10)\"), geoPointField)", "error": [ - "Error: [trim] function expects exactly one argument, got 2." + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = trim(*)", + "query": "row var = st_within(to_geoshape(geoPointField), to_geopoint(geoPointField))", "error": [ - "Using wildcards (*) in trim is not allowed" + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | sort trim(stringField)", + "query": "row var = st_within(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = trim(to_string(true))", + "query": "row st_within(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = trim(true)", + "query": "row var = st_within(to_geoshape(geoPointField), to_geoshape(geoPointField))", "error": [ - "Argument of [trim] must be [string], found value [true] type [boolean]" + "Unknown column [geoPointField]", + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | where length(trim(booleanField)) > 0", + "query": "row var = st_within(true, true)", "error": [ - "Argument of [trim] must be [string], found value [booleanField] type [boolean]" + "Argument of [st_within] must be [cartesian_point], found value [true] type [boolean]", + "Argument of [st_within] must be [cartesian_point], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = trim(to_string(booleanField))", + "query": "from a_index | eval var = st_within(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval trim(booleanField)", + "query": "from a_index | eval st_within(cartesianPointField, cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_within(booleanField, booleanField)", "error": [ - "Argument of [trim] must be [string], found value [booleanField] type [boolean]" + "Argument of [st_within] must be [cartesian_point], found value [booleanField] type [boolean]", + "Argument of [st_within] must be [cartesian_point], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval trim(null)", + "query": "from a_index | eval var = st_within(cartesianPointField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval trim(nullVar)", + "query": "from a_index | eval st_within(cartesianPointField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = avg(numberField)", + "query": "from a_index | eval var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField)", + "query": "from a_index | eval var = st_within(cartesianShapeField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(avg(numberField))", + "query": "from a_index | eval st_within(cartesianShapeField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(avg(numberField))", + "query": "from a_index | eval var = st_within(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(avg(numberField)) + avg(numberField)", + "query": "from a_index | eval var = st_within(cartesianShapeField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(avg(numberField)) + avg(numberField)", + "query": "from a_index | eval st_within(cartesianShapeField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField / 2)", + "query": "from a_index | eval var = st_within(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = avg(numberField / 2)", + "query": "from a_index | eval var = st_within(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), avg(numberField / 2)", + "query": "from a_index | eval st_within(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = avg(numberField / 2)", + "query": "from a_index | eval var = st_within(to_geopoint(geoPointField), to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = avg(numberField)", + "query": "from a_index | eval var = st_within(geoPointField, geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), avg(numberField)", + "query": "from a_index | eval st_within(geoPointField, geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = avg(numberField)", + "query": "from a_index | eval var = st_within(to_geopoint(geoPointField), to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField) by round(numberField / 2)", + "query": "from a_index | eval var = st_within(geoShapeField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = avg(numberField) by var1 = round(numberField / 2)", + "query": "from a_index | eval st_within(geoShapeField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), avg(numberField) by round(numberField / 2), ipField", + "query": "from a_index | eval var = st_within(to_geoshape(geoPointField), to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = avg(numberField) by var1 = round(numberField / 2), ipField", + "query": "from a_index | eval var = st_within(geoShapeField, geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), avg(numberField) by round(numberField / 2), numberField / 2", + "query": "from a_index | eval st_within(geoShapeField, geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = avg(numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "from a_index | eval var = st_within(to_geoshape(geoPointField), to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = avg(avg(numberField))", + "query": "from a_index | eval st_within(cartesianPointField, cartesianPointField, extraArg)", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "Error: [st_within] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | stats avg(avg(numberField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "from a_index | sort st_within(cartesianPointField, cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats avg(stringField)", - "error": [ - "Argument of [avg] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval st_within(null, null)", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = avg(*)", - "error": [ - "Using wildcards (*) in avg is not allowed" - ], + "query": "row nullVar = null | eval st_within(nullVar, nullVar)", + "error": [], "warning": [] }, { - "query": "from a_index | sort avg(numberField)", + "query": "row var = st_x(cartesianPointField)", "error": [ - "SORT does not support function avg" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | where avg(numberField)", + "query": "row st_x(cartesianPointField)", "error": [ - "WHERE does not support function avg" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | where avg(numberField) > 0", + "query": "row var = st_x(to_cartesianpoint(cartesianPointField))", "error": [ - "WHERE does not support function avg" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = avg(numberField)", + "query": "row var = st_x(geoPointField)", "error": [ - "EVAL does not support function avg" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = avg(numberField) > 0", + "query": "row st_x(geoPointField)", "error": [ - "EVAL does not support function avg" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval avg(numberField)", + "query": "row var = st_x(to_geopoint(geoPointField))", "error": [ - "EVAL does not support function avg" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval avg(numberField) > 0", + "query": "row var = st_x(true)", "error": [ - "EVAL does not support function avg" + "Argument of [st_x] must be [cartesian_point], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats avg(booleanField)", - "error": [ - "Argument of [avg] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = st_x(cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats avg(null)", + "query": "from a_index | eval st_x(cartesianPointField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | stats avg(nullVar)", + "query": "from a_index | eval var = st_x(to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = sum(numberField)", - "error": [], + "query": "from a_index | eval st_x(booleanField)", + "error": [ + "Argument of [st_x] must be [cartesian_point], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | stats sum(numberField)", - "error": [], + "query": "from a_index | eval var = st_x(*)", + "error": [ + "Using wildcards (*) in st_x is not allowed" + ], "warning": [] }, { - "query": "from a_index | stats var = round(sum(numberField))", + "query": "from a_index | eval var = st_x(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(sum(numberField))", + "query": "from a_index | eval st_x(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(sum(numberField)) + sum(numberField)", + "query": "from a_index | eval var = st_x(to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | stats round(sum(numberField)) + sum(numberField)", - "error": [], + "query": "from a_index | eval st_x(cartesianPointField, extraArg)", + "error": [ + "Error: [st_x] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "from a_index | stats sum(numberField / 2)", + "query": "from a_index | sort st_x(cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = sum(numberField / 2)", + "query": "from a_index | eval st_x(null)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), sum(numberField / 2)", + "query": "row nullVar = null | eval st_x(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = sum(numberField / 2)", - "error": [], + "query": "row var = st_y(cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | stats var0 = sum(numberField)", - "error": [], + "query": "row st_y(cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), sum(numberField)", - "error": [], + "query": "row var = st_y(to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = sum(numberField)", - "error": [], + "query": "row var = st_y(geoPointField)", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | stats sum(numberField) by round(numberField / 2)", - "error": [], + "query": "row st_y(geoPointField)", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | stats var0 = sum(numberField) by var1 = round(numberField / 2)", - "error": [], + "query": "row var = st_y(to_geopoint(geoPointField))", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), sum(numberField) by round(numberField / 2), ipField", - "error": [], + "query": "row var = st_y(true)", + "error": [ + "Argument of [st_y] must be [cartesian_point], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = sum(numberField) by var1 = round(numberField / 2), ipField", + "query": "from a_index | eval var = st_y(cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), sum(numberField) by round(numberField / 2), numberField / 2", + "query": "from a_index | eval st_y(cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = sum(numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "from a_index | eval var = st_y(to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = sum(avg(numberField))", + "query": "from a_index | eval st_y(booleanField)", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "Argument of [st_y] must be [cartesian_point], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats sum(avg(numberField))", + "query": "from a_index | eval var = st_y(*)", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "Using wildcards (*) in st_y is not allowed" ], "warning": [] }, { - "query": "from a_index | stats sum(stringField)", - "error": [ - "Argument of [sum] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = st_y(geoPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = sum(*)", - "error": [ - "Using wildcards (*) in sum is not allowed" - ], + "query": "from a_index | eval st_y(geoPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort sum(numberField)", - "error": [ - "SORT does not support function sum" - ], + "query": "from a_index | eval var = st_y(to_geopoint(geoPointField))", + "error": [], "warning": [] }, { - "query": "from a_index | where sum(numberField)", + "query": "from a_index | eval st_y(cartesianPointField, extraArg)", "error": [ - "WHERE does not support function sum" + "Error: [st_y] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | where sum(numberField) > 0", - "error": [ - "WHERE does not support function sum" - ], + "query": "from a_index | sort st_y(cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = sum(numberField)", - "error": [ - "EVAL does not support function sum" - ], + "query": "from a_index | eval st_y(null)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = sum(numberField) > 0", - "error": [ - "EVAL does not support function sum" - ], + "query": "row nullVar = null | eval st_y(nullVar)", + "error": [], "warning": [] }, { - "query": "from a_index | eval sum(numberField)", - "error": [ - "EVAL does not support function sum" - ], + "query": "row var = starts_with(\"a\", \"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval sum(numberField) > 0", - "error": [ - "EVAL does not support function sum" - ], + "query": "row starts_with(\"a\", \"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | stats sum(booleanField)", - "error": [ - "Argument of [sum] must be [number], found value [booleanField] type [boolean]" - ], + "query": "row var = starts_with(to_string(true), to_string(true))", + "error": [], "warning": [] }, { - "query": "from a_index | stats sum(null)", - "error": [], + "query": "row var = starts_with(true, true)", + "error": [ + "Argument of [starts_with] must be [keyword], found value [true] type [boolean]", + "Argument of [starts_with] must be [keyword], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row nullVar = null | stats sum(nullVar)", + "query": "from a_index | eval var = starts_with(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = median(numberField)", + "query": "from a_index | eval starts_with(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | stats median(numberField)", + "query": "from a_index | eval var = starts_with(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(median(numberField))", - "error": [], + "query": "from a_index | eval starts_with(booleanField, booleanField)", + "error": [ + "Argument of [starts_with] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [starts_with] must be [keyword], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | stats round(median(numberField))", + "query": "from a_index | eval var = starts_with(textField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(median(numberField)) + median(numberField)", + "query": "from a_index | eval starts_with(textField, textField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(median(numberField)) + median(numberField)", - "error": [], + "query": "from a_index | eval starts_with(keywordField, keywordField, extraArg)", + "error": [ + "Error: [starts_with] function expects exactly 2 arguments, got 3." + ], "warning": [] }, { - "query": "from a_index | stats median(numberField / 2)", + "query": "from a_index | sort starts_with(keywordField, keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = median(numberField / 2)", + "query": "from a_index | eval starts_with(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median(numberField / 2)", + "query": "row nullVar = null | eval starts_with(nullVar, nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median(numberField / 2)", + "query": "row var = substring(\"a\", 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = median(numberField)", + "query": "row substring(\"a\", 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median(numberField)", + "query": "row var = substring(to_string(true), to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median(numberField)", - "error": [], + "query": "row var = substring(true, true, true)", + "error": [ + "Argument of [substring] must be [keyword], found value [true] type [boolean]", + "Argument of [substring] must be [integer], found value [true] type [boolean]", + "Argument of [substring] must be [integer], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | stats median(numberField) by round(numberField / 2)", + "query": "from a_index | eval var = substring(keywordField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = median(numberField) by var1 = round(numberField / 2)", + "query": "from a_index | eval substring(keywordField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median(numberField) by round(numberField / 2), ipField", + "query": "from a_index | eval var = substring(to_string(booleanField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median(numberField) by var1 = round(numberField / 2), ipField", - "error": [], + "query": "from a_index | eval substring(booleanField, booleanField, booleanField)", + "error": [ + "Argument of [substring] must be [keyword], found value [booleanField] type [boolean]", + "Argument of [substring] must be [integer], found value [booleanField] type [boolean]", + "Argument of [substring] must be [integer], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median(numberField) by round(numberField / 2), numberField / 2", + "query": "from a_index | eval var = substring(textField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median(numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "from a_index | eval substring(textField, integerField, integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = median(avg(numberField))", + "query": "from a_index | eval substring(keywordField, integerField, integerField, extraArg)", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "Error: [substring] function expects no more than 3 arguments, got 4." ], "warning": [] }, { - "query": "from a_index | stats median(avg(numberField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "from a_index | sort substring(keywordField, integerField, integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats median(stringField)", - "error": [ - "Argument of [median] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval substring(null, null, null)", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = median(*)", - "error": [ - "Using wildcards (*) in median is not allowed" - ], + "query": "row nullVar = null | eval substring(nullVar, nullVar, nullVar)", + "error": [], "warning": [] }, { - "query": "from a_index | sort median(numberField)", - "error": [ - "SORT does not support function median" - ], + "query": "row var = tan(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | where median(numberField)", - "error": [ - "WHERE does not support function median" - ], + "query": "row tan(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | where median(numberField) > 0", - "error": [ - "WHERE does not support function median" - ], + "query": "row var = tan(to_double(true))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = median(numberField)", - "error": [ - "EVAL does not support function median" - ], + "query": "row var = tan(5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = median(numberField) > 0", - "error": [ - "EVAL does not support function median" - ], + "query": "row tan(5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval median(numberField)", - "error": [ - "EVAL does not support function median" - ], + "query": "row var = tan(to_integer(true))", + "error": [], "warning": [] }, { - "query": "from a_index | eval median(numberField) > 0", + "query": "row var = tan(true)", "error": [ - "EVAL does not support function median" + "Argument of [tan] must be [double], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats median(booleanField)", + "query": "from a_index | where tan(doubleField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where tan(booleanField) > 0", "error": [ - "Argument of [median] must be [number], found value [booleanField] type [boolean]" + "Argument of [tan] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats median(null)", + "query": "from a_index | where tan(integerField) > 0", "error": [], "warning": [] }, { - "query": "row nullVar = null | stats median(nullVar)", + "query": "from a_index | where tan(longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats var = median_absolute_deviation(numberField)", + "query": "from a_index | where tan(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(numberField)", + "query": "from a_index | eval var = tan(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(median_absolute_deviation(numberField))", + "query": "from a_index | eval tan(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(median_absolute_deviation(numberField))", + "query": "from a_index | eval var = tan(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(median_absolute_deviation(numberField)) + median_absolute_deviation(numberField)", - "error": [], + "query": "from a_index | eval tan(booleanField)", + "error": [ + "Argument of [tan] must be [double], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = tan(*)", + "error": [ + "Using wildcards (*) in tan is not allowed" + ], "warning": [] }, { - "query": "from a_index | stats round(median_absolute_deviation(numberField)) + median_absolute_deviation(numberField)", + "query": "from a_index | eval var = tan(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(numberField / 2)", + "query": "from a_index | eval tan(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = median_absolute_deviation(numberField / 2)", + "query": "from a_index | eval var = tan(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField / 2)", + "query": "from a_index | eval var = tan(longField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField / 2)", + "query": "from a_index | eval tan(longField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = median_absolute_deviation(numberField)", + "query": "from a_index | eval var = tan(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField)", + "query": "from a_index | eval tan(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField)", + "query": "from a_index | eval tan(doubleField, extraArg)", + "error": [ + "Error: [tan] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort tan(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(numberField) by round(numberField / 2)", + "query": "from a_index | eval tan(null)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2)", + "query": "row nullVar = null | eval tan(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField) by round(numberField / 2), ipField", + "query": "row var = tanh(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2), ipField", + "query": "row tanh(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField) by round(numberField / 2), numberField / 2", + "query": "row var = tanh(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "row var = tanh(5)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = median_absolute_deviation(avg(numberField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "row tanh(5)", + "error": [], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(avg(numberField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "row var = tanh(to_integer(true))", + "error": [], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(stringField)", + "query": "row var = tanh(true)", "error": [ - "Argument of [median_absolute_deviation] must be [number], found value [stringField] type [string]" + "Argument of [tanh] must be [double], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats var = median_absolute_deviation(*)", - "error": [ - "Using wildcards (*) in median_absolute_deviation is not allowed" - ], + "query": "from a_index | where tanh(doubleField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | sort median_absolute_deviation(numberField)", + "query": "from a_index | where tanh(booleanField) > 0", "error": [ - "SORT does not support function median_absolute_deviation" + "Argument of [tanh] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where median_absolute_deviation(numberField)", - "error": [ - "WHERE does not support function median_absolute_deviation" - ], + "query": "from a_index | where tanh(integerField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | where median_absolute_deviation(numberField) > 0", - "error": [ - "WHERE does not support function median_absolute_deviation" - ], + "query": "from a_index | where tanh(longField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = median_absolute_deviation(numberField)", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], + "query": "from a_index | where tanh(unsignedLongField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = median_absolute_deviation(numberField) > 0", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], + "query": "from a_index | eval var = tanh(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval median_absolute_deviation(numberField)", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], + "query": "from a_index | eval tanh(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval median_absolute_deviation(numberField) > 0", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], + "query": "from a_index | eval var = tanh(to_double(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(booleanField)", + "query": "from a_index | eval tanh(booleanField)", "error": [ - "Argument of [median_absolute_deviation] must be [number], found value [booleanField] type [boolean]" + "Argument of [tanh] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(null)", - "error": [], + "query": "from a_index | eval var = tanh(*)", + "error": [ + "Using wildcards (*) in tanh is not allowed" + ], "warning": [] }, { - "query": "row nullVar = null | stats median_absolute_deviation(nullVar)", + "query": "from a_index | eval var = tanh(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = percentile(numberField, 5)", + "query": "from a_index | eval tanh(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats percentile(numberField, 5)", + "query": "from a_index | eval var = tanh(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(percentile(numberField, 5))", + "query": "from a_index | eval var = tanh(longField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(percentile(numberField, 5))", + "query": "from a_index | eval tanh(longField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(percentile(numberField, 5)) + percentile(numberField, 5)", + "query": "from a_index | eval var = tanh(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(percentile(numberField, 5)) + percentile(numberField, 5)", + "query": "from a_index | eval tanh(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | stats percentile(numberField, numberField)", + "query": "from a_index | eval tanh(doubleField, extraArg)", "error": [ - "Argument of [percentile] must be a constant, received [numberField]" + "Error: [tanh] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | stats percentile(numberField / 2, 5)", + "query": "from a_index | sort tanh(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = percentile(numberField / 2, 5)", + "query": "from a_index | eval tanh(null)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), percentile(numberField / 2, 5)", + "query": "row nullVar = null | eval tanh(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = percentile(numberField / 2, 5)", + "query": "row var = tau()", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = percentile(numberField, 5)", + "query": "row tau()", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), percentile(numberField, 5)", + "query": "from a_index | where tau() > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = percentile(numberField, 5)", + "query": "from a_index | eval var = tau()", "error": [], "warning": [] }, { - "query": "from a_index | stats percentile(numberField, 5) by round(numberField / 2)", + "query": "from a_index | eval tau()", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = percentile(numberField, 5) by var1 = round(numberField / 2)", - "error": [], + "query": "from a_index | eval tau(extraArg)", + "error": [ + "Error: [tau] function expects exactly 0 arguments, got 1." + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), percentile(numberField, 5) by round(numberField / 2), ipField", + "query": "from a_index | sort tau()", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = percentile(numberField, 5) by var1 = round(numberField / 2), ipField", + "query": "row nullVar = null | eval tau()", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), percentile(numberField, 5) by round(numberField / 2), numberField / 2", + "query": "row var = to_base64(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = percentile(numberField, 5) by var1 = round(numberField / 2), numberField / 2", + "query": "row to_base64(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats var = percentile(avg(numberField), 5)", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "row var = to_base64(to_string(true))", + "error": [], "warning": [] }, { - "query": "from a_index | stats percentile(avg(numberField), 5)", + "query": "row var = to_base64(true)", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "Argument of [to_base64] must be [keyword], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats percentile(stringField, 5)", - "error": [ - "Argument of [percentile] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = to_base64(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort percentile(numberField, 5)", - "error": [ - "SORT does not support function percentile" - ], + "query": "from a_index | eval to_base64(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | where percentile(numberField, 5)", - "error": [ - "WHERE does not support function percentile" - ], + "query": "from a_index | eval var = to_base64(to_string(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | where percentile(numberField, 5) > 0", + "query": "from a_index | eval to_base64(booleanField)", "error": [ - "WHERE does not support function percentile" + "Argument of [to_base64] must be [keyword], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = percentile(numberField, 5)", + "query": "from a_index | eval var = to_base64(*)", "error": [ - "EVAL does not support function percentile" + "Using wildcards (*) in to_base64 is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = percentile(numberField, 5) > 0", - "error": [ - "EVAL does not support function percentile" - ], + "query": "from a_index | eval var = to_base64(textField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval percentile(numberField, 5)", - "error": [ - "EVAL does not support function percentile" - ], + "query": "from a_index | eval to_base64(textField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval percentile(numberField, 5) > 0", + "query": "from a_index | eval to_base64(keywordField, extraArg)", "error": [ - "EVAL does not support function percentile" + "Error: [to_base64] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | stats percentile(booleanField, 5)", - "error": [ - "Argument of [percentile] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | sort to_base64(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats percentile(null, null)", + "query": "from a_index | eval to_base64(null)", "error": [], "warning": [] }, { - "query": "row nullVar = null | stats percentile(nullVar, nullVar)", - "error": [ - "Argument of [percentile] must be a constant, received [nullVar]" - ], + "query": "row nullVar = null | eval to_base64(nullVar)", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = max(numberField)", + "query": "row var = to_boolean(true)", "error": [], "warning": [] }, { - "query": "from a_index | stats max(numberField)", + "query": "row to_boolean(true)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(max(numberField))", + "query": "row var = to_bool(true)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(max(numberField))", + "query": "row var = to_boolean(to_boolean(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(max(numberField)) + max(numberField)", + "query": "row var = to_boolean(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(max(numberField)) + max(numberField)", + "query": "row to_boolean(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | stats max(numberField / 2)", + "query": "row var = to_bool(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = max(numberField / 2)", + "query": "row var = to_boolean(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), max(numberField / 2)", + "query": "row var = to_boolean(5)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = max(numberField / 2)", + "query": "row to_boolean(5)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = max(numberField)", + "query": "row var = to_bool(5)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), max(numberField)", + "query": "row var = to_boolean(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = max(numberField)", + "query": "row var = to_boolean(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats max(numberField) by round(numberField / 2)", + "query": "row to_boolean(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = max(numberField) by var1 = round(numberField / 2)", + "query": "row var = to_bool(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), max(numberField) by round(numberField / 2), ipField", + "query": "row var = to_boolean(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = max(numberField) by var1 = round(numberField / 2), ipField", + "query": "row var = to_boolean(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [ + "Argument of [to_boolean] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_boolean(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), max(numberField) by round(numberField / 2), numberField / 2", + "query": "from a_index | eval to_boolean(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = max(numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "from a_index | eval var = to_bool(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = max(avg(numberField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "from a_index | eval var = to_boolean(to_boolean(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | stats max(avg(numberField))", + "query": "from a_index | eval to_boolean(cartesianPointField)", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "Argument of [to_boolean] must be [boolean], found value [cartesianPointField] type [cartesian_point]" ], "warning": [] }, { - "query": "from a_index | stats max(stringField)", + "query": "from a_index | eval var = to_boolean(*)", "error": [ - "Argument of [max] must be [number], found value [stringField] type [string]" + "Using wildcards (*) in to_boolean is not allowed" ], "warning": [] }, { - "query": "from a_index | stats var = max(*)", - "error": [ - "Using wildcards (*) in max is not allowed" - ], + "query": "from a_index | eval var = to_boolean(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = max(dateField)", + "query": "from a_index | eval to_boolean(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | stats max(dateField)", + "query": "from a_index | eval var = to_bool(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(max(dateField))", + "query": "from a_index | eval var = to_boolean(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats round(max(dateField))", + "query": "from a_index | eval var = to_boolean(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(max(dateField)) + max(dateField)", + "query": "from a_index | eval to_boolean(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(max(dateField)) + max(dateField)", + "query": "from a_index | eval var = to_bool(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | sort max(numberField)", - "error": [ - "SORT does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | where max(numberField)", - "error": [ - "WHERE does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | where max(numberField) > 0", - "error": [ - "WHERE does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | where max(dateField)", - "error": [ - "WHERE does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | where max(dateField) > 0", - "error": [ - "WHERE does not support function max" - ], + "query": "from a_index | eval var = to_boolean(to_integer(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = max(numberField)", - "error": [ - "EVAL does not support function max" - ], + "query": "from a_index | eval var = to_boolean(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = max(numberField) > 0", - "error": [ - "EVAL does not support function max" - ], + "query": "from a_index | eval to_boolean(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval max(numberField)", - "error": [ - "EVAL does not support function max" - ], + "query": "from a_index | eval var = to_bool(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval max(numberField) > 0", - "error": [ - "EVAL does not support function max" - ], + "query": "from a_index | eval var = to_boolean(to_string(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = max(dateField)", - "error": [ - "EVAL does not support function max" - ], + "query": "from a_index | eval var = to_boolean(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = max(dateField) > 0", - "error": [ - "EVAL does not support function max" - ], + "query": "from a_index | eval to_boolean(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval max(dateField)", - "error": [ - "EVAL does not support function max" - ], + "query": "from a_index | eval var = to_bool(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval max(dateField) > 0", - "error": [ - "EVAL does not support function max" - ], + "query": "from a_index | eval var = to_boolean(textField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats max(booleanField)", + "query": "from a_index | eval to_boolean(textField)", "error": [], "warning": [] }, { - "query": "from a_index | stats max(null)", + "query": "from a_index | eval var = to_bool(textField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | stats max(nullVar)", + "query": "from a_index | eval var = to_boolean(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | stats max(\"2022\")", + "query": "from a_index | eval to_boolean(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | stats max(concat(\"20\", \"22\"))", - "error": [ - "Argument of [max] must be [number], found value [concat(\"20\",\"22\")] type [string]" - ], + "query": "from a_index | eval var = to_bool(unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats max(cartesianPointField)", + "query": "from a_index | eval to_boolean(booleanField, extraArg)", "error": [ - "Argument of [max] must be [number], found value [cartesianPointField] type [cartesian_point]" + "Error: [to_boolean] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | stats var = max(booleanField)", + "query": "from a_index | sort to_boolean(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | where max(booleanField)", - "error": [ - "WHERE does not support function max" - ], + "query": "from a_index | eval to_boolean(null)", + "error": [], "warning": [] }, { - "query": "from a_index | where max(booleanField) > 0", - "error": [ - "WHERE does not support function max" - ], + "query": "row nullVar = null | eval to_boolean(nullVar)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = max(booleanField)", + "query": "row var = to_cartesianpoint(cartesianPointField)", "error": [ - "EVAL does not support function max" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = max(booleanField) > 0", + "query": "row to_cartesianpoint(cartesianPointField)", "error": [ - "EVAL does not support function max" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval max(booleanField)", + "query": "row var = to_cartesianpoint(to_cartesianpoint(cartesianPointField))", "error": [ - "EVAL does not support function max" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval max(booleanField) > 0", - "error": [ - "EVAL does not support function max" - ], + "query": "row var = to_cartesianpoint(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = max(ipField)", + "query": "row to_cartesianpoint(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats max(ipField)", + "query": "row var = to_cartesianpoint(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | where max(ipField)", + "query": "row var = to_cartesianpoint(true)", "error": [ - "WHERE does not support function max" + "Argument of [to_cartesianpoint] must be [cartesian_point], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where max(ipField) > 0", - "error": [ - "WHERE does not support function max" - ], + "query": "from a_index | eval var = to_cartesianpoint(cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = max(ipField)", - "error": [ - "EVAL does not support function max" - ], + "query": "from a_index | eval to_cartesianpoint(cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = max(ipField) > 0", - "error": [ - "EVAL does not support function max" - ], + "query": "from a_index | eval var = to_cartesianpoint(to_cartesianpoint(cartesianPointField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval max(ipField)", + "query": "from a_index | eval to_cartesianpoint(booleanField)", "error": [ - "EVAL does not support function max" + "Argument of [to_cartesianpoint] must be [cartesian_point], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval max(ipField) > 0", + "query": "from a_index | eval var = to_cartesianpoint(*)", "error": [ - "EVAL does not support function max" + "Using wildcards (*) in to_cartesianpoint is not allowed" ], "warning": [] }, { - "query": "from a_index | stats var = min(numberField)", + "query": "from a_index | eval var = to_cartesianpoint(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | stats min(numberField)", + "query": "from a_index | eval to_cartesianpoint(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(min(numberField))", + "query": "from a_index | eval var = to_cartesianpoint(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats round(min(numberField))", + "query": "from a_index | eval var = to_cartesianpoint(textField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(min(numberField)) + min(numberField)", + "query": "from a_index | eval to_cartesianpoint(textField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(min(numberField)) + min(numberField)", - "error": [], + "query": "from a_index | eval to_cartesianpoint(cartesianPointField, extraArg)", + "error": [ + "Error: [to_cartesianpoint] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "from a_index | stats min(numberField / 2)", + "query": "from a_index | sort to_cartesianpoint(cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = min(numberField / 2)", + "query": "from a_index | eval to_cartesianpoint(null)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), min(numberField / 2)", + "query": "row nullVar = null | eval to_cartesianpoint(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = min(numberField / 2)", - "error": [], + "query": "row var = to_cartesianshape(cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | stats var0 = min(numberField)", - "error": [], + "query": "row to_cartesianshape(cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), min(numberField)", - "error": [], + "query": "row var = to_cartesianshape(to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = min(numberField)", + "query": "row var = to_cartesianshape(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | stats min(numberField) by round(numberField / 2)", + "query": "row to_cartesianshape(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = min(numberField) by var1 = round(numberField / 2)", - "error": [], + "query": "row var = to_cartesianshape(to_cartesianshape(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), min(numberField) by round(numberField / 2), ipField", + "query": "row var = to_cartesianshape(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = min(numberField) by var1 = round(numberField / 2), ipField", + "query": "row to_cartesianshape(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), min(numberField) by round(numberField / 2), numberField / 2", + "query": "row var = to_cartesianshape(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = min(numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "row var = to_cartesianshape(true)", + "error": [ + "Argument of [to_cartesianshape] must be [cartesian_point], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_cartesianshape(cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = min(avg(numberField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "from a_index | eval to_cartesianshape(cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats min(avg(numberField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "from a_index | eval var = to_cartesianshape(to_cartesianpoint(cartesianPointField))", + "error": [], "warning": [] }, { - "query": "from a_index | stats min(stringField)", + "query": "from a_index | eval to_cartesianshape(booleanField)", "error": [ - "Argument of [min] must be [number], found value [stringField] type [string]" + "Argument of [to_cartesianshape] must be [cartesian_point], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats var = min(*)", + "query": "from a_index | eval var = to_cartesianshape(*)", "error": [ - "Using wildcards (*) in min is not allowed" + "Using wildcards (*) in to_cartesianshape is not allowed" ], "warning": [] }, { - "query": "from a_index | stats var = min(dateField)", + "query": "from a_index | eval var = to_cartesianshape(cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | stats min(dateField)", + "query": "from a_index | eval to_cartesianshape(cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(min(dateField))", + "query": "from a_index | eval var = to_cartesianshape(to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | stats round(min(dateField))", + "query": "from a_index | eval var = to_cartesianshape(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(min(dateField)) + min(dateField)", + "query": "from a_index | eval to_cartesianshape(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(min(dateField)) + min(dateField)", + "query": "from a_index | eval var = to_cartesianshape(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | sort min(numberField)", - "error": [ - "SORT does not support function min" - ], + "query": "from a_index | eval var = to_cartesianshape(textField)", + "error": [], "warning": [] }, { - "query": "from a_index | where min(numberField)", - "error": [ - "WHERE does not support function min" - ], + "query": "from a_index | eval to_cartesianshape(textField)", + "error": [], "warning": [] }, { - "query": "from a_index | where min(numberField) > 0", + "query": "from a_index | eval to_cartesianshape(cartesianPointField, extraArg)", "error": [ - "WHERE does not support function min" + "Error: [to_cartesianshape] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | where min(dateField)", - "error": [ - "WHERE does not support function min" - ], + "query": "from a_index | sort to_cartesianshape(cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | where min(dateField) > 0", - "error": [ - "WHERE does not support function min" - ], + "query": "from a_index | eval to_cartesianshape(null)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = min(numberField)", - "error": [ - "EVAL does not support function min" - ], + "query": "row nullVar = null | eval to_cartesianshape(nullVar)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = min(numberField) > 0", - "error": [ - "EVAL does not support function min" - ], + "query": "row var = to_datetime(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval min(numberField)", - "error": [ - "EVAL does not support function min" - ], + "query": "row to_datetime(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval min(numberField) > 0", - "error": [ - "EVAL does not support function min" - ], + "query": "row var = to_dt(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = min(dateField)", - "error": [ - "EVAL does not support function min" - ], + "query": "row var = to_datetime(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = min(dateField) > 0", - "error": [ - "EVAL does not support function min" - ], + "query": "row var = to_datetime(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval min(dateField)", - "error": [ - "EVAL does not support function min" - ], + "query": "row to_datetime(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval min(dateField) > 0", - "error": [ - "EVAL does not support function min" - ], + "query": "row var = to_dt(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | stats min(booleanField)", + "query": "row var = to_datetime(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats min(null)", + "query": "row var = to_datetime(5)", "error": [], "warning": [] }, { - "query": "row nullVar = null | stats min(nullVar)", + "query": "row to_datetime(5)", "error": [], "warning": [] }, { - "query": "from a_index | stats min(\"2022\")", + "query": "row var = to_dt(5)", "error": [], "warning": [] }, { - "query": "from a_index | stats min(concat(\"20\", \"22\"))", - "error": [ - "Argument of [min] must be [number], found value [concat(\"20\",\"22\")] type [string]" - ], + "query": "row var = to_datetime(to_integer(true))", + "error": [], "warning": [] }, { - "query": "from a_index | stats min(cartesianPointField)", - "error": [ - "Argument of [min] must be [number], found value [cartesianPointField] type [cartesian_point]" - ], + "query": "row var = to_datetime(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = min(booleanField)", + "query": "row to_datetime(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | where min(booleanField)", - "error": [ - "WHERE does not support function min" - ], + "query": "row var = to_dt(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | where min(booleanField) > 0", - "error": [ - "WHERE does not support function min" - ], + "query": "row var = to_datetime(to_string(true))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = min(booleanField)", + "query": "row var = to_datetime(true)", "error": [ - "EVAL does not support function min" + "Argument of [to_datetime] must be [date], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = min(booleanField) > 0", - "error": [ - "EVAL does not support function min" - ], + "query": "from a_index | eval var = to_datetime(dateField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval min(booleanField)", + "query": "from a_index | eval to_datetime(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_dt(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_datetime(to_datetime(dateField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_datetime(booleanField)", "error": [ - "EVAL does not support function min" + "Argument of [to_datetime] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval min(booleanField) > 0", + "query": "from a_index | eval var = to_datetime(*)", "error": [ - "EVAL does not support function min" + "Using wildcards (*) in to_datetime is not allowed" ], "warning": [] }, { - "query": "from a_index | stats var = min(ipField)", + "query": "from a_index | eval var = to_datetime(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | stats min(ipField)", + "query": "from a_index | eval to_datetime(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | where min(ipField)", - "error": [ - "WHERE does not support function min" - ], + "query": "from a_index | eval var = to_dt(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | where min(ipField) > 0", - "error": [ - "WHERE does not support function min" - ], + "query": "from a_index | eval var = to_datetime(to_double(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = min(ipField)", - "error": [ - "EVAL does not support function min" - ], + "query": "from a_index | eval var = to_datetime(integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = min(ipField) > 0", - "error": [ - "EVAL does not support function min" - ], + "query": "from a_index | eval to_datetime(integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval min(ipField)", - "error": [ - "EVAL does not support function min" - ], + "query": "from a_index | eval var = to_dt(integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval min(ipField) > 0", - "error": [ - "EVAL does not support function min" - ], + "query": "from a_index | eval var = to_datetime(to_integer(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = count(stringField)", + "query": "from a_index | eval var = to_datetime(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | stats count(stringField)", + "query": "from a_index | eval to_datetime(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(count(stringField))", + "query": "from a_index | eval var = to_dt(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(count(stringField))", + "query": "from a_index | eval var = to_datetime(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(count(stringField)) + count(stringField)", + "query": "from a_index | eval var = to_datetime(longField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(count(stringField)) + count(stringField)", + "query": "from a_index | eval to_datetime(longField)", "error": [], "warning": [] }, { - "query": "from a_index | sort count(stringField)", - "error": [ - "SORT does not support function count" - ], + "query": "from a_index | eval var = to_dt(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | where count(stringField)", - "error": [ - "WHERE does not support function count" - ], + "query": "from a_index | eval var = to_datetime(textField)", + "error": [], "warning": [] }, { - "query": "from a_index | where count(stringField) > 0", - "error": [ - "WHERE does not support function count" - ], + "query": "from a_index | eval to_datetime(textField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = count(stringField)", - "error": [ - "EVAL does not support function count" - ], + "query": "from a_index | eval var = to_dt(textField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = count(stringField) > 0", - "error": [ - "EVAL does not support function count" - ], + "query": "from a_index | eval var = to_datetime(unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval count(stringField)", - "error": [ - "EVAL does not support function count" - ], + "query": "from a_index | eval to_datetime(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_dt(unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval count(stringField) > 0", + "query": "from a_index | eval to_datetime(dateField, extraArg)", "error": [ - "EVAL does not support function count" + "Error: [to_datetime] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | stats count(null)", + "query": "from a_index | sort to_datetime(dateField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | stats count(nullVar)", + "query": "from a_index | eval to_datetime(null)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = count_distinct(stringField, numberField)", + "query": "row nullVar = null | eval to_datetime(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | stats count_distinct(stringField, numberField)", + "query": "from a_index | eval to_datetime(\"2022\")", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(count_distinct(stringField, numberField))", + "query": "from a_index | eval to_datetime(concat(\"20\", \"22\"))", "error": [], "warning": [] }, { - "query": "from a_index | stats round(count_distinct(stringField, numberField))", + "query": "row var = to_degrees(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(count_distinct(stringField, numberField)) + count_distinct(stringField, numberField)", + "query": "row to_degrees(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(count_distinct(stringField, numberField)) + count_distinct(stringField, numberField)", + "query": "row var = to_degrees(to_double(true))", "error": [], "warning": [] }, { - "query": "from a_index | sort count_distinct(stringField, numberField)", - "error": [ - "SORT does not support function count_distinct" - ], + "query": "row var = to_degrees(5)", + "error": [], "warning": [] }, { - "query": "from a_index | where count_distinct(stringField, numberField)", - "error": [ - "WHERE does not support function count_distinct" - ], + "query": "row to_degrees(5)", + "error": [], "warning": [] }, { - "query": "from a_index | where count_distinct(stringField, numberField) > 0", - "error": [ - "WHERE does not support function count_distinct" - ], + "query": "row var = to_degrees(to_integer(true))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = count_distinct(stringField, numberField)", + "query": "row var = to_degrees(true)", "error": [ - "EVAL does not support function count_distinct" + "Argument of [to_degrees] must be [double], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = count_distinct(stringField, numberField) > 0", - "error": [ - "EVAL does not support function count_distinct" - ], + "query": "from a_index | where to_degrees(doubleField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval count_distinct(stringField, numberField)", + "query": "from a_index | where to_degrees(booleanField) > 0", "error": [ - "EVAL does not support function count_distinct" + "Argument of [to_degrees] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval count_distinct(stringField, numberField) > 0", - "error": [ - "EVAL does not support function count_distinct" - ], + "query": "from a_index | where to_degrees(integerField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | stats count_distinct(null, null)", + "query": "from a_index | where to_degrees(longField) > 0", "error": [], "warning": [] }, { - "query": "row nullVar = null | stats count_distinct(nullVar, nullVar)", + "query": "from a_index | where to_degrees(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats var = st_centroid_agg(cartesianPointField)", + "query": "from a_index | eval var = to_degrees(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | stats st_centroid_agg(cartesianPointField)", + "query": "from a_index | eval to_degrees(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = st_centroid_agg(avg(numberField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "from a_index | eval var = to_degrees(to_double(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | stats st_centroid_agg(avg(numberField))", + "query": "from a_index | eval to_degrees(booleanField)", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "Argument of [to_degrees] must be [double], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats st_centroid_agg(stringField)", + "query": "from a_index | eval var = to_degrees(*)", "error": [ - "Argument of [st_centroid_agg] must be [cartesian_point], found value [stringField] type [string]" + "Using wildcards (*) in to_degrees is not allowed" ], "warning": [] }, { - "query": "from a_index | stats var = st_centroid_agg(*)", - "error": [ - "Using wildcards (*) in st_centroid_agg is not allowed" - ], + "query": "from a_index | eval var = to_degrees(integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = st_centroid_agg(geoPointField)", + "query": "from a_index | eval to_degrees(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats st_centroid_agg(geoPointField)", + "query": "from a_index | eval var = to_degrees(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | sort st_centroid_agg(cartesianPointField)", - "error": [ - "SORT does not support function st_centroid_agg" - ], + "query": "from a_index | eval var = to_degrees(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | where st_centroid_agg(cartesianPointField)", - "error": [ - "WHERE does not support function st_centroid_agg" - ], + "query": "from a_index | eval to_degrees(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | where st_centroid_agg(cartesianPointField) > 0", - "error": [ - "WHERE does not support function st_centroid_agg" - ], + "query": "from a_index | eval var = to_degrees(unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | where st_centroid_agg(geoPointField)", - "error": [ - "WHERE does not support function st_centroid_agg" - ], + "query": "from a_index | eval to_degrees(unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | where st_centroid_agg(geoPointField) > 0", + "query": "from a_index | eval to_degrees(doubleField, extraArg)", "error": [ - "WHERE does not support function st_centroid_agg" + "Error: [to_degrees] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = st_centroid_agg(cartesianPointField)", - "error": [ - "EVAL does not support function st_centroid_agg" - ], + "query": "from a_index | sort to_degrees(doubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_centroid_agg(cartesianPointField) > 0", - "error": [ - "EVAL does not support function st_centroid_agg" - ], + "query": "from a_index | eval to_degrees(null)", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_centroid_agg(cartesianPointField)", - "error": [ - "EVAL does not support function st_centroid_agg" - ], + "query": "row nullVar = null | eval to_degrees(nullVar)", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_centroid_agg(cartesianPointField) > 0", - "error": [ - "EVAL does not support function st_centroid_agg" - ], + "query": "row var = to_double(true)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_centroid_agg(geoPointField)", - "error": [ - "EVAL does not support function st_centroid_agg" - ], + "query": "row to_double(true)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_centroid_agg(geoPointField) > 0", - "error": [ - "EVAL does not support function st_centroid_agg" - ], + "query": "row var = to_dbl(true)", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_centroid_agg(geoPointField)", - "error": [ - "EVAL does not support function st_centroid_agg" - ], + "query": "row var = to_double(to_boolean(true))", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_centroid_agg(geoPointField) > 0", - "error": [ - "EVAL does not support function st_centroid_agg" - ], + "query": "row var = to_double(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | stats st_centroid_agg(booleanField)", - "error": [ - "Argument of [st_centroid_agg] must be [cartesian_point], found value [booleanField] type [boolean]" - ], + "query": "row to_double(5.5)", + "error": [], "warning": [] }, { - "query": "from a_index | stats st_centroid_agg(null)", + "query": "row var = to_dbl(5.5)", "error": [], "warning": [] }, { - "query": "row nullVar = null | stats st_centroid_agg(nullVar)", + "query": "row var = to_double(5)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = values(stringField)", + "query": "row to_double(5)", "error": [], "warning": [] }, { - "query": "from a_index | stats values(stringField)", + "query": "row var = to_dbl(5)", "error": [], "warning": [] }, { - "query": "from a_index | sort values(stringField)", - "error": [ - "SORT does not support function values" - ], + "query": "row var = to_double(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], "warning": [] }, { - "query": "from a_index | where values(stringField)", - "error": [ - "WHERE does not support function values" - ], + "query": "row to_double(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], "warning": [] }, { - "query": "from a_index | where values(stringField) > 0", - "error": [ - "WHERE does not support function values" - ], + "query": "row var = to_dbl(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = values(stringField)", - "error": [ - "EVAL does not support function values" - ], + "query": "row var = to_double(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = values(stringField) > 0", - "error": [ - "EVAL does not support function values" - ], + "query": "row var = to_double(to_double(true))", + "error": [], "warning": [] }, { - "query": "from a_index | eval values(stringField)", - "error": [ - "EVAL does not support function values" - ], + "query": "row var = to_double(to_integer(true))", + "error": [], "warning": [] }, { - "query": "from a_index | eval values(stringField) > 0", - "error": [ - "EVAL does not support function values" - ], + "query": "row var = to_double(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | stats values(null)", + "query": "row to_double(\"a\")", "error": [], "warning": [] }, { - "query": "row nullVar = null | stats values(nullVar)", + "query": "row var = to_dbl(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, 1 year)", + "query": "row var = to_double(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats by bin(dateField, 1 year)", - "error": [], + "query": "row var = to_double(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [ + "Argument of [to_double] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + ], "warning": [] }, { - "query": "from a_index | stats by bucket(numberField, 5)", + "query": "from a_index | where to_double(booleanField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(numberField, numberField)", + "query": "from a_index | where to_double(cartesianPointField) > 0", "error": [ - "Argument of [bucket] must be a constant, received [numberField]" + "Argument of [to_double] must be [boolean], found value [cartesianPointField] type [cartesian_point]" ], "warning": [] }, { - "query": "from a_index | stats by bin(numberField, 5)", + "query": "from a_index | where to_double(counterDoubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, 5, \"a\", \"a\")", + "query": "from a_index | where to_double(counterIntegerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, numberField, stringField, stringField)", - "error": [ - "Argument of [bucket] must be a constant, received [numberField]", - "Argument of [bucket] must be a constant, received [stringField]", - "Argument of [bucket] must be a constant, received [stringField]" - ], + "query": "from a_index | where to_double(counterLongField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | stats by bin(dateField, 5, \"a\", \"a\")", + "query": "from a_index | where to_double(dateField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, 5, now(), now())", + "query": "from a_index | where to_double(doubleField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, numberField, dateField, dateField)", - "error": [ - "Argument of [bucket] must be a constant, received [numberField]", - "Argument of [bucket] must be a constant, received [dateField]", - "Argument of [bucket] must be a constant, received [dateField]" - ], + "query": "from a_index | where to_double(integerField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | stats by bin(dateField, 5, now(), now())", + "query": "from a_index | where to_double(keywordField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, 5, \"a\", now())", + "query": "from a_index | where to_double(longField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, numberField, stringField, dateField)", - "error": [ - "Argument of [bucket] must be a constant, received [numberField]", - "Argument of [bucket] must be a constant, received [stringField]", - "Argument of [bucket] must be a constant, received [dateField]" - ], + "query": "from a_index | where to_double(textField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | stats by bin(dateField, 5, \"a\", now())", + "query": "from a_index | where to_double(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, 5, now(), \"a\")", + "query": "from a_index | eval var = to_double(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, numberField, dateField, stringField)", - "error": [ - "Argument of [bucket] must be a constant, received [numberField]", - "Argument of [bucket] must be a constant, received [dateField]", - "Argument of [bucket] must be a constant, received [stringField]" - ], + "query": "from a_index | eval to_double(booleanField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats by bin(dateField, 5, now(), \"a\")", + "query": "from a_index | eval var = to_dbl(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(numberField, 5, 5, 5)", + "query": "from a_index | eval var = to_double(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(numberField, numberField, numberField, numberField)", + "query": "from a_index | eval to_double(cartesianPointField)", "error": [ - "Argument of [bucket] must be a constant, received [numberField]", - "Argument of [bucket] must be a constant, received [numberField]", - "Argument of [bucket] must be a constant, received [numberField]" + "Argument of [to_double] must be [boolean], found value [cartesianPointField] type [cartesian_point]" ], "warning": [] }, { - "query": "from a_index | stats by bin(numberField, 5, 5, 5)", - "error": [], + "query": "from a_index | eval var = to_double(*)", + "error": [ + "Using wildcards (*) in to_double is not allowed" + ], "warning": [] }, { - "query": "from a_index | sort bucket(dateField, 1 year)", - "error": [ - "SORT does not support function bucket" - ], + "query": "from a_index | eval var = to_double(counterDoubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats bucket(null, null, null, null)", + "query": "from a_index | eval to_double(counterDoubleField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | stats bucket(nullVar, nullVar, nullVar, nullVar)", - "error": [ - "Argument of [bucket] must be a constant, received [nullVar]", - "Argument of [bucket] must be a constant, received [nullVar]", - "Argument of [bucket] must be a constant, received [nullVar]" - ], + "query": "from a_index | eval var = to_dbl(counterDoubleField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats bucket(\"2022\", 1 year)", + "query": "from a_index | eval var = to_double(counterIntegerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats bucket(concat(\"20\", \"22\"), 1 year)", - "error": [ - "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [string]" - ], + "query": "from a_index | eval to_double(counterIntegerField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(concat(\"20\", \"22\"), 1 year)", - "error": [ - "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [string]" - ], + "query": "from a_index | eval var = to_dbl(counterIntegerField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats bucket(\"2022\", 5, \"a\", \"a\")", + "query": "from a_index | eval var = to_double(counterLongField)", "error": [], "warning": [] }, { - "query": "from a_index | stats bucket(concat(\"20\", \"22\"), 5, \"a\", \"a\")", - "error": [ - "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [string]" - ], + "query": "from a_index | eval to_double(counterLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats bucket(\"2022\", 5, \"2022\", \"2022\")", + "query": "from a_index | eval var = to_dbl(counterLongField)", "error": [], "warning": [] }, { - "query": "from a_index | stats bucket(concat(\"20\", \"22\"), 5, concat(\"20\", \"22\"), concat(\"20\", \"22\"))", - "error": [ - "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [string]" - ], + "query": "from a_index | eval var = to_double(dateField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats bucket(\"2022\", 5, \"a\", \"2022\")", + "query": "from a_index | eval to_double(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | stats bucket(concat(\"20\", \"22\"), 5, \"a\", concat(\"20\", \"22\"))", - "error": [ - "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [string]" - ], + "query": "from a_index | eval var = to_dbl(dateField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats bucket(\"2022\", 5, \"2022\", \"a\")", + "query": "from a_index | eval var = to_double(to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "from a_index | stats bucket(concat(\"20\", \"22\"), 5, concat(\"20\", \"22\"), \"a\")", - "error": [ - "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [string]" - ], + "query": "from a_index | eval var = to_double(doubleField)", + "error": [], "warning": [] }, { - "query": "row var = cbrt(5)", + "query": "from a_index | eval to_double(doubleField)", "error": [], "warning": [] }, { - "query": "row cbrt(5)", + "query": "from a_index | eval var = to_dbl(doubleField)", "error": [], "warning": [] }, { - "query": "row var = cbrt(to_integer(true))", + "query": "from a_index | eval var = to_double(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = cbrt(true)", - "error": [ - "Argument of [cbrt] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | eval var = to_double(integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | where cbrt(numberField) > 0", + "query": "from a_index | eval to_double(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | where cbrt(booleanField) > 0", - "error": [ - "Argument of [cbrt] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = to_dbl(integerField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = cbrt(numberField)", + "query": "from a_index | eval var = to_double(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval cbrt(numberField)", + "query": "from a_index | eval var = to_double(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = cbrt(to_integer(booleanField))", + "query": "from a_index | eval to_double(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval cbrt(booleanField)", - "error": [ - "Argument of [cbrt] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = to_dbl(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = cbrt(*)", - "error": [ - "Using wildcards (*) in cbrt is not allowed" - ], + "query": "from a_index | eval var = to_double(to_string(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval cbrt(numberField, extraArg)", - "error": [ - "Error: [cbrt] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = to_double(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort cbrt(numberField)", + "query": "from a_index | eval to_double(longField)", "error": [], "warning": [] }, { - "query": "from a_index | eval cbrt(null)", + "query": "from a_index | eval var = to_dbl(longField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval cbrt(nullVar)", + "query": "from a_index | eval var = to_double(textField)", "error": [], "warning": [] }, { - "query": "row var = from_base64(\"a\")", + "query": "from a_index | eval to_double(textField)", "error": [], "warning": [] }, { - "query": "row from_base64(\"a\")", + "query": "from a_index | eval var = to_dbl(textField)", "error": [], "warning": [] }, { - "query": "row var = from_base64(to_string(true))", + "query": "from a_index | eval var = to_double(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = from_base64(true)", - "error": [ - "Argument of [from_base64] must be [string], found value [true] type [boolean]" - ], + "query": "from a_index | eval to_double(unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | where length(from_base64(stringField)) > 0", + "query": "from a_index | eval var = to_dbl(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(from_base64(booleanField)) > 0", + "query": "from a_index | eval to_double(booleanField, extraArg)", "error": [ - "Argument of [from_base64] must be [string], found value [booleanField] type [boolean]" + "Error: [to_double] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = from_base64(stringField)", + "query": "from a_index | sort to_double(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval from_base64(stringField)", + "query": "from a_index | eval to_double(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = from_base64(to_string(booleanField))", + "query": "row nullVar = null | eval to_double(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval from_base64(booleanField)", - "error": [ - "Argument of [from_base64] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval to_double(\"2022\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = from_base64(*)", - "error": [ - "Using wildcards (*) in from_base64 is not allowed" - ], + "query": "from a_index | eval to_double(concat(\"20\", \"22\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval from_base64(stringField, extraArg)", + "query": "row var = to_geopoint(geoPointField)", "error": [ - "Error: [from_base64] function expects exactly one argument, got 2." + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | sort from_base64(stringField)", - "error": [], + "query": "row to_geopoint(geoPointField)", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval from_base64(null)", - "error": [], + "query": "row var = to_geopoint(to_geopoint(geoPointField))", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row nullVar = null | eval from_base64(nullVar)", + "query": "row var = to_geopoint(\"a\")", "error": [], "warning": [] }, { - "query": "row var = locate(\"a\", \"a\")", + "query": "row to_geopoint(\"a\")", "error": [], "warning": [] }, { - "query": "row locate(\"a\", \"a\")", + "query": "row var = to_geopoint(to_string(true))", "error": [], "warning": [] }, { - "query": "row var = locate(to_string(true), to_string(true))", - "error": [], + "query": "row var = to_geopoint(true)", + "error": [ + "Argument of [to_geopoint] must be [geo_point], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row var = locate(\"a\", \"a\", 5)", + "query": "from a_index | eval var = to_geopoint(geoPointField)", "error": [], "warning": [] }, { - "query": "row locate(\"a\", \"a\", 5)", + "query": "from a_index | eval to_geopoint(geoPointField)", "error": [], "warning": [] }, { - "query": "row var = locate(to_string(true), to_string(true), to_integer(true))", + "query": "from a_index | eval var = to_geopoint(to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "row var = locate(true, true, true)", + "query": "from a_index | eval to_geopoint(booleanField)", "error": [ - "Argument of [locate] must be [string], found value [true] type [boolean]", - "Argument of [locate] must be [string], found value [true] type [boolean]", - "Argument of [locate] must be [number], found value [true] type [boolean]" + "Argument of [to_geopoint] must be [geo_point], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where locate(stringField, stringField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where locate(booleanField, booleanField) > 0", + "query": "from a_index | eval var = to_geopoint(*)", "error": [ - "Argument of [locate] must be [string], found value [booleanField] type [boolean]", - "Argument of [locate] must be [string], found value [booleanField] type [boolean]" + "Using wildcards (*) in to_geopoint is not allowed" ], "warning": [] }, { - "query": "from a_index | where locate(stringField, stringField, numberField) > 0", + "query": "from a_index | eval var = to_geopoint(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | where locate(booleanField, booleanField, booleanField) > 0", - "error": [ - "Argument of [locate] must be [string], found value [booleanField] type [boolean]", - "Argument of [locate] must be [string], found value [booleanField] type [boolean]", - "Argument of [locate] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval to_geopoint(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = locate(stringField, stringField)", + "query": "from a_index | eval var = to_geopoint(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval locate(stringField, stringField)", + "query": "from a_index | eval var = to_geopoint(textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = locate(to_string(booleanField), to_string(booleanField))", + "query": "from a_index | eval to_geopoint(textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval locate(booleanField, booleanField)", + "query": "from a_index | eval to_geopoint(geoPointField, extraArg)", "error": [ - "Argument of [locate] must be [string], found value [booleanField] type [boolean]", - "Argument of [locate] must be [string], found value [booleanField] type [boolean]" + "Error: [to_geopoint] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = locate(stringField, stringField, numberField)", + "query": "from a_index | sort to_geopoint(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval locate(stringField, stringField, numberField)", + "query": "from a_index | eval to_geopoint(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = locate(to_string(booleanField), to_string(booleanField), to_integer(booleanField))", + "query": "row nullVar = null | eval to_geopoint(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval locate(booleanField, booleanField, booleanField)", + "query": "row var = to_geoshape(geoPointField)", "error": [ - "Argument of [locate] must be [string], found value [booleanField] type [boolean]", - "Argument of [locate] must be [string], found value [booleanField] type [boolean]", - "Argument of [locate] must be [number], found value [booleanField] type [boolean]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval locate(stringField, stringField, numberField, extraArg)", + "query": "row to_geoshape(geoPointField)", "error": [ - "Error: [locate] function expects no more than 3 arguments, got 4." + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | sort locate(stringField, stringField)", - "error": [], + "query": "row var = to_geoshape(to_geopoint(geoPointField))", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "from a_index | eval locate(null, null, null)", + "query": "row var = to_geoshape(to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval locate(nullVar, nullVar, nullVar)", + "query": "row to_geoshape(to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = to_base64(\"a\")", - "error": [], + "query": "row var = to_geoshape(to_geoshape(geoPointField))", + "error": [ + "Unknown column [geoPointField]" + ], "warning": [] }, { - "query": "row to_base64(\"a\")", + "query": "row var = to_geoshape(\"a\")", "error": [], "warning": [] }, { - "query": "row var = to_base64(to_string(true))", + "query": "row to_geoshape(\"a\")", "error": [], "warning": [] }, { - "query": "row var = to_base64(true)", - "error": [ - "Argument of [to_base64] must be [string], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where length(to_base64(stringField)) > 0", + "query": "row var = to_geoshape(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | where length(to_base64(booleanField)) > 0", + "query": "row var = to_geoshape(true)", "error": [ - "Argument of [to_base64] must be [string], found value [booleanField] type [boolean]" + "Argument of [to_geoshape] must be [geo_point], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = to_base64(stringField)", + "query": "from a_index | eval var = to_geoshape(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_base64(stringField)", + "query": "from a_index | eval to_geoshape(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_base64(to_string(booleanField))", + "query": "from a_index | eval var = to_geoshape(to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_base64(booleanField)", + "query": "from a_index | eval to_geoshape(booleanField)", "error": [ - "Argument of [to_base64] must be [string], found value [booleanField] type [boolean]" + "Argument of [to_geoshape] must be [geo_point], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = to_base64(*)", + "query": "from a_index | eval var = to_geoshape(*)", "error": [ - "Using wildcards (*) in to_base64 is not allowed" + "Using wildcards (*) in to_geoshape is not allowed" ], "warning": [] }, { - "query": "from a_index | eval to_base64(stringField, extraArg)", - "error": [ - "Error: [to_base64] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = to_geoshape(geoShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_geoshape(geoShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_base64(stringField)", + "query": "from a_index | eval var = to_geoshape(to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_base64(null)", + "query": "from a_index | eval var = to_geoshape(keywordField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval to_base64(nullVar)", + "query": "from a_index | eval to_geoshape(keywordField)", "error": [], "warning": [] }, { - "query": "row var = ip_prefix(to_ip(\"127.0.0.1\"), 5, 5)", + "query": "from a_index | eval var = to_geoshape(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row ip_prefix(to_ip(\"127.0.0.1\"), 5, 5)", + "query": "from a_index | eval var = to_geoshape(textField)", "error": [], "warning": [] }, { - "query": "row var = ip_prefix(to_ip(to_ip(\"127.0.0.1\")), to_integer(true), to_integer(true))", + "query": "from a_index | eval to_geoshape(textField)", "error": [], "warning": [] }, { - "query": "row var = ip_prefix(true, true, true)", + "query": "from a_index | eval to_geoshape(geoPointField, extraArg)", "error": [ - "Argument of [ip_prefix] must be [ip], found value [true] type [boolean]", - "Argument of [ip_prefix] must be [number], found value [true] type [boolean]", - "Argument of [ip_prefix] must be [number], found value [true] type [boolean]" + "Error: [to_geoshape] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = ip_prefix(ipField, numberField, numberField)", + "query": "from a_index | sort to_geoshape(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval ip_prefix(ipField, numberField, numberField)", + "query": "from a_index | eval to_geoshape(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = ip_prefix(to_ip(ipField), to_integer(booleanField), to_integer(booleanField))", + "query": "row nullVar = null | eval to_geoshape(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval ip_prefix(booleanField, booleanField, booleanField)", + "query": "row var = to_integer(true)", + "error": [], + "warning": [] + }, + { + "query": "row to_integer(true)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_int(true)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_integer(to_boolean(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_integer(5)", + "error": [], + "warning": [] + }, + { + "query": "row to_integer(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_int(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_integer(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], + "warning": [] + }, + { + "query": "row to_integer(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_int(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_integer(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_integer(5.5)", + "error": [], + "warning": [] + }, + { + "query": "row to_integer(5.5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_int(5.5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_integer(to_double(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_integer(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_integer(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row to_integer(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_int(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_integer(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_integer(to_cartesianpoint(\"POINT (30 10)\"))", "error": [ - "Argument of [ip_prefix] must be [ip], found value [booleanField] type [boolean]", - "Argument of [ip_prefix] must be [number], found value [booleanField] type [boolean]", - "Argument of [ip_prefix] must be [number], found value [booleanField] type [boolean]" + "Argument of [to_integer] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" ], "warning": [] }, { - "query": "from a_index | eval ip_prefix(ipField, numberField, numberField, extraArg)", + "query": "from a_index | where to_integer(booleanField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_integer(cartesianPointField) > 0", "error": [ - "Error: [ip_prefix] function expects exactly 3 arguments, got 4." + "Argument of [to_integer] must be [boolean], found value [cartesianPointField] type [cartesian_point]" ], "warning": [] }, { - "query": "from a_index | sort ip_prefix(ipField, numberField, numberField)", + "query": "from a_index | where to_integer(counterIntegerField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval ip_prefix(null, null, null)", + "query": "from a_index | where to_integer(dateField) > 0", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval ip_prefix(nullVar, nullVar, nullVar)", + "query": "from a_index | where to_integer(doubleField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_append(true, true)", + "query": "from a_index | where to_integer(integerField) > 0", "error": [], "warning": [] }, { - "query": "row mv_append(true, true)", + "query": "from a_index | where to_integer(keywordField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_boolean(true), to_boolean(true))", + "query": "from a_index | where to_integer(longField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | where to_integer(textField) > 0", "error": [], "warning": [] }, { - "query": "row mv_append(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | where to_integer(unsignedLongField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = to_integer(booleanField)", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval to_integer(booleanField)", "error": [], "warning": [] }, { - "query": "row mv_append(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = to_int(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_integer(to_boolean(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_integer(cartesianPointField)", + "error": [ + "Argument of [to_integer] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_integer(*)", + "error": [ + "Using wildcards (*) in to_integer is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_integer(counterIntegerField)", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | eval to_integer(counterIntegerField)", "error": [], "warning": [] }, { - "query": "row var = mv_append(now(), now())", + "query": "from a_index | eval var = to_int(counterIntegerField)", "error": [], "warning": [] }, { - "query": "row mv_append(now(), now())", + "query": "from a_index | eval var = to_integer(dateField)", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_datetime(now()), to_datetime(now()))", + "query": "from a_index | eval to_integer(dateField)", "error": [], "warning": [] }, { - "query": "row var = mv_append(5, 5)", + "query": "from a_index | eval var = to_int(dateField)", "error": [], "warning": [] }, { - "query": "row mv_append(5, 5)", + "query": "from a_index | eval var = to_integer(to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_integer(true), to_integer(true))", + "query": "from a_index | eval var = to_integer(doubleField)", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval to_integer(doubleField)", "error": [], "warning": [] }, { - "query": "row mv_append(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = to_int(doubleField)", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = to_integer(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = to_integer(integerField)", "error": [], "warning": [] }, { - "query": "row mv_append(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval to_integer(integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = to_int(integerField)", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval var = to_integer(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row mv_append(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", + "query": "from a_index | eval var = to_integer(keywordField)", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_ip(to_ip(\"127.0.0.1\")), to_ip(to_ip(\"127.0.0.1\")))", + "query": "from a_index | eval to_integer(keywordField)", "error": [], "warning": [] }, { - "query": "row var = mv_append(\"a\", \"a\")", + "query": "from a_index | eval var = to_int(keywordField)", "error": [], "warning": [] }, { - "query": "row mv_append(\"a\", \"a\")", + "query": "from a_index | eval var = to_integer(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_string(true), to_string(true))", + "query": "from a_index | eval var = to_integer(longField)", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", + "query": "from a_index | eval to_integer(longField)", "error": [], "warning": [] }, { - "query": "row mv_append(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", + "query": "from a_index | eval var = to_int(longField)", "error": [], "warning": [] }, { - "query": "row var = mv_append(to_version(\"a\"), to_version(\"a\"))", + "query": "from a_index | eval var = to_integer(textField)", "error": [], "warning": [] }, { - "query": "from a_index | where mv_append(numberField, numberField) > 0", + "query": "from a_index | eval to_integer(textField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(mv_append(stringField, stringField)) > 0", + "query": "from a_index | eval var = to_int(textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(booleanField, booleanField)", + "query": "from a_index | eval var = to_integer(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_append(booleanField, booleanField)", + "query": "from a_index | eval to_integer(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(to_boolean(booleanField), to_boolean(booleanField))", + "query": "from a_index | eval var = to_int(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(cartesianPointField, cartesianPointField)", + "query": "from a_index | eval to_integer(booleanField, extraArg)", + "error": [ + "Error: [to_integer] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_integer(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_append(cartesianPointField, cartesianPointField)", + "query": "from a_index | eval to_integer(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "query": "row nullVar = null | eval to_integer(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(cartesianShapeField, cartesianShapeField)", + "query": "from a_index | eval to_integer(\"2022\")", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_append(cartesianShapeField, cartesianShapeField)", + "query": "from a_index | eval to_integer(concat(\"20\", \"22\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "query": "row var = to_ip(to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(dateField, dateField)", + "query": "row to_ip(to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_append(dateField, dateField)", + "query": "row var = to_ip(to_ip(to_ip(\"127.0.0.1\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(to_datetime(dateField), to_datetime(dateField))", + "query": "row var = to_ip(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(numberField, numberField)", + "query": "row to_ip(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_append(numberField, numberField)", + "query": "row var = to_ip(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(to_integer(booleanField), to_integer(booleanField))", + "query": "row var = to_ip(true)", + "error": [ + "Argument of [to_ip] must be [ip], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ip(ipField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(geoPointField, geoPointField)", + "query": "from a_index | eval to_ip(ipField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_append(geoPointField, geoPointField)", + "query": "from a_index | eval var = to_ip(to_ip(ipField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "query": "from a_index | eval to_ip(booleanField)", + "error": [ + "Argument of [to_ip] must be [ip], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ip(*)", + "error": [ + "Using wildcards (*) in to_ip is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ip(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(geoShapeField, geoShapeField)", + "query": "from a_index | eval to_ip(keywordField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_append(geoShapeField, geoShapeField)", + "query": "from a_index | eval var = to_ip(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(to_geoshape(geoPointField), to_geoshape(geoPointField))", + "query": "from a_index | eval var = to_ip(textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(ipField, ipField)", + "query": "from a_index | eval to_ip(textField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_append(ipField, ipField)", + "query": "from a_index | eval to_ip(ipField, extraArg)", + "error": [ + "Error: [to_ip] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_ip(ipField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(to_ip(ipField), to_ip(ipField))", + "query": "from a_index | eval to_ip(null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(stringField, stringField)", + "query": "row nullVar = null | eval to_ip(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_append(stringField, stringField)", + "query": "row var = to_long(true)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(to_string(booleanField), to_string(booleanField))", + "query": "row to_long(true)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(versionField, versionField)", + "query": "row var = to_long(to_boolean(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_append(versionField, versionField)", + "query": "row var = to_long(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_append(to_version(stringField), to_version(stringField))", + "query": "row to_long(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_append(booleanField, booleanField, extraArg)", - "error": [ - "Error: [mv_append] function expects exactly 2 arguments, got 3." + "query": "row var = to_long(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], + "warning": [] + }, + { + "query": "row to_long(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_long(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_long(5.5)", + "error": [], + "warning": [] + }, + { + "query": "row to_long(5.5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_long(to_double(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_long(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_long(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row to_long(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_long(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_long(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [ + "Argument of [to_long] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_long(booleanField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_long(cartesianPointField) > 0", + "error": [ + "Argument of [to_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_long(counterIntegerField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_long(counterLongField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_long(dateField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_long(doubleField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_long(integerField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_long(keywordField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_long(longField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_long(textField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_long(unsignedLongField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(to_boolean(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(cartesianPointField)", + "error": [ + "Argument of [to_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(*)", + "error": [ + "Using wildcards (*) in to_long is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(to_datetime(dateField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(to_double(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(booleanField, extraArg)", + "error": [ + "Error: [to_long] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_long(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | eval to_long(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(\"2022\")", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(concat(\"20\", \"22\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_lower(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row to_lower(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_lower(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_lower(true)", + "error": [ + "Argument of [to_lower] must be [keyword], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_lower(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_lower(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_lower(to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_lower(booleanField)", + "error": [ + "Argument of [to_lower] must be [keyword], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_lower(*)", + "error": [ + "Using wildcards (*) in to_lower is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_lower(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_lower(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_lower(keywordField, extraArg)", + "error": [ + "Error: [to_lower] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_lower(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_lower(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | eval to_lower(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_radians(5.5)", + "error": [], + "warning": [] + }, + { + "query": "row to_radians(5.5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_radians(to_double(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_radians(5)", + "error": [], + "warning": [] + }, + { + "query": "row to_radians(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_radians(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_radians(true)", + "error": [ + "Argument of [to_radians] must be [double], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_radians(doubleField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_radians(booleanField) > 0", + "error": [ + "Argument of [to_radians] must be [double], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_radians(integerField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_radians(longField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_radians(unsignedLongField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_radians(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_radians(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_radians(to_double(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_radians(booleanField)", + "error": [ + "Argument of [to_radians] must be [double], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_radians(*)", + "error": [ + "Using wildcards (*) in to_radians is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_radians(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_radians(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_radians(to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_radians(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_radians(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_radians(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_radians(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_radians(doubleField, extraArg)", + "error": [ + "Error: [to_radians] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_radians(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_radians(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | eval to_radians(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(true)", + "error": [], + "warning": [] + }, + { + "query": "row to_unsigned_long(true)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ul(true)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ulong(true)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(to_boolean(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], + "warning": [] + }, + { + "query": "row to_unsigned_long(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ul(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ulong(to_datetime(\"2021-01-01T00:00:00Z\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(5.5)", + "error": [], + "warning": [] + }, + { + "query": "row to_unsigned_long(5.5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ul(5.5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ulong(5.5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(to_double(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(5)", + "error": [], + "warning": [] + }, + { + "query": "row to_unsigned_long(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ul(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ulong(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row to_unsigned_long(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ul(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ulong(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [ + "Argument of [to_unsigned_long] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_unsigned_long(booleanField) > 0", + "error": [ + "Argument of [>] must be [double], found value [to_unsigned_long(booleanField)] type [unsigned_long]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_unsigned_long(cartesianPointField) > 0", + "error": [ + "Argument of [to_unsigned_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]", + "Argument of [>] must be [double], found value [to_unsigned_long(cartesianPointField)] type [unsigned_long]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_unsigned_long(dateField) > 0", + "error": [ + "Argument of [>] must be [double], found value [to_unsigned_long(dateField)] type [unsigned_long]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_unsigned_long(doubleField) > 0", + "error": [ + "Argument of [>] must be [double], found value [to_unsigned_long(doubleField)] type [unsigned_long]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_unsigned_long(integerField) > 0", + "error": [ + "Argument of [>] must be [double], found value [to_unsigned_long(integerField)] type [unsigned_long]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_unsigned_long(keywordField) > 0", + "error": [ + "Argument of [>] must be [double], found value [to_unsigned_long(keywordField)] type [unsigned_long]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_unsigned_long(longField) > 0", + "error": [ + "Argument of [>] must be [double], found value [to_unsigned_long(longField)] type [unsigned_long]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_unsigned_long(textField) > 0", + "error": [ + "Argument of [>] must be [double], found value [to_unsigned_long(textField)] type [unsigned_long]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_unsigned_long(unsignedLongField) > 0", + "error": [ + "Argument of [>] must be [double], found value [to_unsigned_long(unsignedLongField)] type [unsigned_long]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ul(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ulong(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(to_boolean(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(cartesianPointField)", + "error": [ + "Argument of [to_unsigned_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(*)", + "error": [ + "Using wildcards (*) in to_unsigned_long is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ul(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ulong(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(to_datetime(dateField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ul(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ulong(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(to_double(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ul(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ulong(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ul(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ulong(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ul(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ulong(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ul(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ulong(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ul(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ulong(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(booleanField, extraArg)", + "error": [ + "Error: [to_unsigned_long] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_unsigned_long(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | eval to_unsigned_long(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(\"2022\")", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(concat(\"20\", \"22\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_upper(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row to_upper(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_upper(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_upper(true)", + "error": [ + "Argument of [to_upper] must be [keyword], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_upper(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_upper(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_upper(to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_upper(booleanField)", + "error": [ + "Argument of [to_upper] must be [keyword], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_upper(*)", + "error": [ + "Using wildcards (*) in to_upper is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_upper(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_upper(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_upper(keywordField, extraArg)", + "error": [ + "Error: [to_upper] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_upper(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_upper(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | eval to_upper(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_version(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row to_version(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ver(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_version(to_version(\"1.0.0\"))", + "error": [], + "warning": [] + }, + { + "query": "row to_version(to_version(\"1.0.0\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ver(to_version(\"1.0.0\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_version(true)", + "error": [ + "Argument of [to_version] must be [keyword], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_version(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_version(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ver(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_version(*)", + "error": [ + "Using wildcards (*) in to_version is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_version(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_version(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ver(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_version(versionField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_version(versionField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ver(versionField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_version(keywordField, extraArg)", + "error": [ + "Error: [to_version] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_version(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_version(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | eval to_version(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "row var = trim(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row trim(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = trim(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = trim(true)", + "error": [ + "Argument of [trim] must be [keyword], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = trim(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval trim(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = trim(to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval trim(booleanField)", + "error": [ + "Argument of [trim] must be [keyword], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = trim(*)", + "error": [ + "Using wildcards (*) in trim is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = trim(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval trim(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval trim(keywordField, extraArg)", + "error": [ + "Error: [trim] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort trim(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval trim(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | eval trim(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "row var = case(true, \"a\")", + "error": [], + "warning": [] + }, + { + "query": "row case(true, \"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = case(to_cartesianpoint(\"POINT (30 10)\"), true)", + "error": [ + "Argument of [case] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = case(booleanField, textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval case(booleanField, textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort case(booleanField, textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval case(null, null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | eval case(nullVar, nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = avg(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(integerField)) + avg(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(integerField)) + avg(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(integerField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(integerField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(integerField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(integerField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(integerField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(integerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = avg(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(booleanField)", + "error": [ + "Argument of [avg] must be [integer], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = avg(*)", + "error": [ + "Using wildcards (*) in avg is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = avg(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(counterIntegerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(counterIntegerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(counterIntegerField)) + avg(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(counterIntegerField)) + avg(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(counterIntegerField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(counterIntegerField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(counterIntegerField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(counterIntegerField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(counterIntegerField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(counterIntegerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = avg(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(doubleField)) + avg(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(doubleField)) + avg(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(doubleField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(doubleField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(doubleField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(doubleField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(doubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = avg(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(unsignedLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(unsignedLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(unsignedLongField)) + avg(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(unsignedLongField)) + avg(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(unsignedLongField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(unsignedLongField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(unsignedLongField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(unsignedLongField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(unsignedLongField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(unsignedLongField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = avg(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(longField)) + avg(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(longField)) + avg(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(longField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(longField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(longField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(longField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(longField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(longField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = avg(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(counterLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(counterLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(counterLongField)) + avg(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(counterLongField)) + avg(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(counterLongField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(counterLongField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(counterLongField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(counterLongField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(counterLongField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(counterLongField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = avg(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(counterDoubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(counterDoubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(counterDoubleField)) + avg(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(counterDoubleField)) + avg(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(counterDoubleField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(counterDoubleField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(counterDoubleField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(counterDoubleField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), avg(counterDoubleField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = avg(counterDoubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort avg(integerField)", + "error": [ + "SORT does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(integerField)", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(integerField) > 0", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(counterIntegerField)", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(counterIntegerField) > 0", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(doubleField)", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(doubleField) > 0", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(unsignedLongField)", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(unsignedLongField) > 0", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(longField)", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(longField) > 0", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(counterLongField)", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(counterLongField) > 0", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(counterDoubleField)", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(counterDoubleField) > 0", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(integerField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(integerField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(integerField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(integerField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(counterIntegerField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(counterIntegerField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(counterIntegerField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(counterIntegerField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(doubleField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(doubleField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(doubleField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(doubleField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(unsignedLongField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(unsignedLongField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(unsignedLongField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(unsignedLongField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(longField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(longField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(longField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(longField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(counterLongField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(counterLongField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(counterLongField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(counterLongField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(counterDoubleField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(counterDoubleField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(counterDoubleField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(counterDoubleField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | stats avg(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = sum(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(integerField)) + sum(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(integerField)) + sum(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(integerField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(integerField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(integerField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(integerField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(integerField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(integerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = sum(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats sum(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats sum(booleanField)", + "error": [ + "Argument of [sum] must be [integer], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = sum(*)", + "error": [ + "Using wildcards (*) in sum is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = sum(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(counterIntegerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(counterIntegerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(counterIntegerField)) + sum(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(counterIntegerField)) + sum(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(counterIntegerField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(counterIntegerField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(counterIntegerField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(counterIntegerField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(counterIntegerField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(counterIntegerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = sum(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(doubleField)) + sum(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(doubleField)) + sum(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(doubleField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(doubleField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(doubleField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(doubleField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(doubleField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(doubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = sum(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(unsignedLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(unsignedLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(unsignedLongField)) + sum(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(unsignedLongField)) + sum(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(unsignedLongField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(unsignedLongField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(unsignedLongField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(unsignedLongField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(unsignedLongField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(unsignedLongField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = sum(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(longField)) + sum(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(longField)) + sum(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(longField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(longField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(longField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(longField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(longField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(longField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = sum(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(counterLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(counterLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(counterLongField)) + sum(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(counterLongField)) + sum(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(counterLongField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(counterLongField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(counterLongField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(counterLongField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(counterLongField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(counterLongField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = sum(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(counterDoubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(counterDoubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(counterDoubleField)) + sum(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(counterDoubleField)) + sum(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(counterDoubleField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(counterDoubleField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(counterDoubleField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(counterDoubleField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), sum(counterDoubleField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = sum(counterDoubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort sum(integerField)", + "error": [ + "SORT does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(integerField)", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(integerField) > 0", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(counterIntegerField)", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(counterIntegerField) > 0", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(doubleField)", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(doubleField) > 0", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(unsignedLongField)", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(unsignedLongField) > 0", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(longField)", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(longField) > 0", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(counterLongField)", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(counterLongField) > 0", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(counterDoubleField)", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(counterDoubleField) > 0", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(integerField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(integerField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(integerField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(integerField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(counterIntegerField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(counterIntegerField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(counterIntegerField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(counterIntegerField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(doubleField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(doubleField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(doubleField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(doubleField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(unsignedLongField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(unsignedLongField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(unsignedLongField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(unsignedLongField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(longField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(longField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(longField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(longField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(counterLongField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(counterLongField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(counterLongField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(counterLongField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(counterDoubleField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(counterDoubleField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(counterDoubleField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(counterDoubleField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | stats sum(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | stats sum(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(integerField)) + median(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(integerField)) + median(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(integerField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(integerField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(integerField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(integerField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(integerField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(integerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats median(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats median(booleanField)", + "error": [ + "Argument of [median] must be [integer], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = median(*)", + "error": [ + "Using wildcards (*) in median is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = median(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(counterIntegerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(counterIntegerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(counterIntegerField)) + median(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(counterIntegerField)) + median(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(counterIntegerField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(counterIntegerField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(counterIntegerField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(counterIntegerField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(counterIntegerField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(counterIntegerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(doubleField)) + median(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(doubleField)) + median(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(doubleField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(doubleField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(doubleField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(doubleField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(doubleField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(doubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(unsignedLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(unsignedLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(unsignedLongField)) + median(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(unsignedLongField)) + median(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(unsignedLongField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(unsignedLongField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(unsignedLongField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(unsignedLongField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(unsignedLongField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(unsignedLongField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(longField)) + median(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(longField)) + median(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(longField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(longField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(longField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(longField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(longField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(longField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(counterLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(counterLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(counterLongField)) + median(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(counterLongField)) + median(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(counterLongField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(counterLongField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(counterLongField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(counterLongField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(counterLongField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(counterLongField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(counterDoubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(counterDoubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(counterDoubleField)) + median(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(counterDoubleField)) + median(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(counterDoubleField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(counterDoubleField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(counterDoubleField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(counterDoubleField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median(counterDoubleField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median(counterDoubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort median(integerField)", + "error": [ + "SORT does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(integerField)", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(integerField) > 0", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(counterIntegerField)", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(counterIntegerField) > 0", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(doubleField)", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(doubleField) > 0", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(unsignedLongField)", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(unsignedLongField) > 0", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(longField)", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(longField) > 0", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(counterLongField)", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(counterLongField) > 0", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(counterDoubleField)", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(counterDoubleField) > 0", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(integerField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(integerField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(integerField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(integerField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(counterIntegerField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(counterIntegerField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(counterIntegerField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(counterIntegerField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(doubleField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(doubleField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(doubleField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(doubleField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(unsignedLongField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(unsignedLongField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(unsignedLongField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(unsignedLongField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(longField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(longField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(longField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(longField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(counterLongField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(counterLongField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(counterLongField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(counterLongField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(counterDoubleField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(counterDoubleField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(counterDoubleField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(counterDoubleField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | stats median(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | stats median(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median_absolute_deviation(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(integerField)) + median_absolute_deviation(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(integerField)) + median_absolute_deviation(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(integerField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(integerField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(integerField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(integerField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(integerField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(integerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median_absolute_deviation(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(booleanField)", + "error": [ + "Argument of [median_absolute_deviation] must be [integer], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = median_absolute_deviation(*)", + "error": [ + "Using wildcards (*) in median_absolute_deviation is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = median_absolute_deviation(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(counterIntegerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(counterIntegerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(counterIntegerField)) + median_absolute_deviation(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(counterIntegerField)) + median_absolute_deviation(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterIntegerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(counterIntegerField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(counterIntegerField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(counterIntegerField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterIntegerField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(counterIntegerField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterIntegerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median_absolute_deviation(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(doubleField)) + median_absolute_deviation(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(doubleField)) + median_absolute_deviation(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(doubleField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(doubleField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(doubleField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(doubleField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(doubleField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(doubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median_absolute_deviation(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(unsignedLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(unsignedLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(unsignedLongField)) + median_absolute_deviation(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(unsignedLongField)) + median_absolute_deviation(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(unsignedLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(unsignedLongField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(unsignedLongField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(unsignedLongField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(unsignedLongField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(unsignedLongField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(unsignedLongField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median_absolute_deviation(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(longField)) + median_absolute_deviation(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(longField)) + median_absolute_deviation(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(longField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(longField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(longField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(longField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(longField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(longField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median_absolute_deviation(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(counterLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(counterLongField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(counterLongField)) + median_absolute_deviation(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(counterLongField)) + median_absolute_deviation(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterLongField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(counterLongField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(counterLongField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(counterLongField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterLongField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(counterLongField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterLongField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median_absolute_deviation(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(counterDoubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(counterDoubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(counterDoubleField)) + median_absolute_deviation(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(counterDoubleField)) + median_absolute_deviation(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterDoubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(counterDoubleField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(counterDoubleField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(counterDoubleField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterDoubleField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), median_absolute_deviation(counterDoubleField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterDoubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort median_absolute_deviation(integerField)", + "error": [ + "SORT does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(integerField)", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(integerField) > 0", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(counterIntegerField)", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(counterIntegerField) > 0", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(doubleField)", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(doubleField) > 0", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(unsignedLongField)", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(unsignedLongField) > 0", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(longField)", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(longField) > 0", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(counterLongField)", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(counterLongField) > 0", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(counterDoubleField)", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(counterDoubleField) > 0", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(integerField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(integerField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(integerField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(integerField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(counterIntegerField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(counterIntegerField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(counterIntegerField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(counterIntegerField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(doubleField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(doubleField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(doubleField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(doubleField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(unsignedLongField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(unsignedLongField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(unsignedLongField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(unsignedLongField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(longField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(longField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(longField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(longField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(counterLongField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(counterLongField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(counterLongField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(counterLongField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(counterDoubleField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(counterDoubleField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(counterDoubleField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(counterDoubleField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | stats median_absolute_deviation(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = max(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(max(doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(max(doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(max(doubleField)) + max(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(max(doubleField)) + max(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = max(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), max(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = max(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = max(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), max(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = max(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(doubleField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = max(doubleField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), max(doubleField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = max(doubleField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), max(doubleField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = max(doubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = max(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats max(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats max(cartesianPointField)", + "error": [ + "Argument of [max] must be [double], found value [cartesianPointField] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = max(*)", + "error": [ + "Using wildcards (*) in max is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = max(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(max(longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(max(longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(max(longField)) + max(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(max(longField)) + max(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = max(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), max(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = max(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(longField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = max(longField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), max(longField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = max(longField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), max(longField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = max(longField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = max(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(max(integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(max(integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(max(integerField)) + max(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(max(integerField)) + max(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = max(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), max(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = max(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(integerField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = max(integerField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), max(integerField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = max(integerField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), max(integerField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = max(integerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = max(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = max(datePeriodField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(datePeriodField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = max(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = max(ipField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(ipField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort max(doubleField)", + "error": [ + "SORT does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(doubleField)", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(doubleField) > 0", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(longField)", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(longField) > 0", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(integerField)", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(integerField) > 0", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(dateField)", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(dateField) > 0", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(datePeriodField)", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(datePeriodField) > 0", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(booleanField)", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(booleanField) > 0", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(ipField)", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(ipField) > 0", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(doubleField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(doubleField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(doubleField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(doubleField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(longField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(longField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(longField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(longField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(integerField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(integerField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(integerField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(integerField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(dateField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(dateField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(dateField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(dateField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(datePeriodField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(datePeriodField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(datePeriodField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(datePeriodField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(booleanField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(booleanField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(booleanField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(booleanField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(ipField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(ipField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(ipField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(ipField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | stats max(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | stats max(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(\"2022\")", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(concat(\"20\", \"22\"))", + "error": [ + "Argument of [max] must be [double], found value [concat(\"20\",\"22\")] type [keyword]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = min(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(min(doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(min(doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(min(doubleField)) + min(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(min(doubleField)) + min(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = min(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), min(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = min(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = min(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), min(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = min(doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(doubleField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = min(doubleField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), min(doubleField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = min(doubleField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), min(doubleField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = min(doubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = min(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats min(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats min(cartesianPointField)", + "error": [ + "Argument of [min] must be [double], found value [cartesianPointField] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = min(*)", + "error": [ + "Using wildcards (*) in min is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = min(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(min(longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(min(longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(min(longField)) + min(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(min(longField)) + min(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = min(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), min(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = min(longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(longField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = min(longField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), min(longField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = min(longField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), min(longField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = min(longField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = min(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(min(integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(min(integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(min(integerField)) + min(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(min(integerField)) + min(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = min(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), min(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = min(integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(integerField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = min(integerField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), min(integerField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = min(integerField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), min(integerField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = min(integerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = min(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = min(datePeriodField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(datePeriodField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = min(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = min(ipField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(ipField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort min(doubleField)", + "error": [ + "SORT does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(doubleField)", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(doubleField) > 0", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(longField)", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(longField) > 0", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(integerField)", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(integerField) > 0", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(dateField)", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(dateField) > 0", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(datePeriodField)", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(datePeriodField) > 0", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(booleanField)", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(booleanField) > 0", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(ipField)", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(ipField) > 0", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(doubleField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(doubleField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(doubleField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(doubleField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(longField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(longField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(longField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(longField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(integerField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(integerField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(integerField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(integerField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(dateField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(dateField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(dateField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(dateField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(datePeriodField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(datePeriodField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(datePeriodField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(datePeriodField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(booleanField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(booleanField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(booleanField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(booleanField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(ipField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(ipField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(ipField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(ipField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | stats min(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | stats min(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(\"2022\")", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(concat(\"20\", \"22\"))", + "error": [ + "Argument of [min] must be [double], found value [concat(\"20\",\"22\")] type [keyword]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = count(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats count(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(count(textField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(count(textField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(count(textField)) + count(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(count(textField)) + count(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort count(textField)", + "error": [ + "SORT does not support function count" + ], + "warning": [] + }, + { + "query": "from a_index | where count(textField)", + "error": [ + "WHERE does not support function count" + ], + "warning": [] + }, + { + "query": "from a_index | where count(textField) > 0", + "error": [ + "WHERE does not support function count" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = count(textField)", + "error": [ + "EVAL does not support function count" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = count(textField) > 0", + "error": [ + "EVAL does not support function count" + ], + "warning": [] + }, + { + "query": "from a_index | eval count(textField)", + "error": [ + "EVAL does not support function count" + ], + "warning": [] + }, + { + "query": "from a_index | eval count(textField) > 0", + "error": [ + "EVAL does not support function count" + ], + "warning": [] + }, + { + "query": "from a_index | stats count(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | stats count(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats count_distinct(null, null, null, null, null, null, null, null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | stats count_distinct(nullVar, nullVar, nullVar, nullVar, nullVar, nullVar, nullVar, nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = st_centroid_agg(cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats st_centroid_agg(cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = st_centroid_agg(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats st_centroid_agg(avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats st_centroid_agg(booleanField)", + "error": [ + "Argument of [st_centroid_agg] must be [cartesian_point], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = st_centroid_agg(*)", + "error": [ + "Using wildcards (*) in st_centroid_agg is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = st_centroid_agg(geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats st_centroid_agg(geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort st_centroid_agg(cartesianPointField)", + "error": [ + "SORT does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | where st_centroid_agg(cartesianPointField)", + "error": [ + "WHERE does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | where st_centroid_agg(cartesianPointField) > 0", + "error": [ + "WHERE does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | where st_centroid_agg(geoPointField)", + "error": [ + "WHERE does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | where st_centroid_agg(geoPointField) > 0", + "error": [ + "WHERE does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_centroid_agg(cartesianPointField)", + "error": [ + "EVAL does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_centroid_agg(cartesianPointField) > 0", + "error": [ + "EVAL does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | eval st_centroid_agg(cartesianPointField)", + "error": [ + "EVAL does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | eval st_centroid_agg(cartesianPointField) > 0", + "error": [ + "EVAL does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_centroid_agg(geoPointField)", + "error": [ + "EVAL does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_centroid_agg(geoPointField) > 0", + "error": [ + "EVAL does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | eval st_centroid_agg(geoPointField)", + "error": [ + "EVAL does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | eval st_centroid_agg(geoPointField) > 0", + "error": [ + "EVAL does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | stats st_centroid_agg(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | stats st_centroid_agg(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = values(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats values(textField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort values(textField)", + "error": [ + "SORT does not support function values" + ], + "warning": [] + }, + { + "query": "from a_index | where values(textField)", + "error": [ + "WHERE does not support function values" + ], + "warning": [] + }, + { + "query": "from a_index | where values(textField) > 0", + "error": [ + "WHERE does not support function values" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = values(textField)", + "error": [ + "EVAL does not support function values" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = values(textField) > 0", + "error": [ + "EVAL does not support function values" + ], + "warning": [] + }, + { + "query": "from a_index | eval values(textField)", + "error": [ + "EVAL does not support function values" + ], + "warning": [] + }, + { + "query": "from a_index | eval values(textField) > 0", + "error": [ + "EVAL does not support function values" + ], + "warning": [] + }, + { + "query": "from a_index | stats values(null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | stats values(nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = top(textField, integerField, textField)", + "error": [ + "Argument of [=] must be a constant, received [top(textField,integerField,textField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats top(textField, integerField, textField)", + "error": [ + "Argument of [top] must be a constant, received [integerField]", + "Argument of [top] must be a constant, received [textField]" + ], + "warning": [] + }, + { + "query": "from a_index | sort top(textField, integerField, textField)", + "error": [ + "SORT does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | where top(textField, integerField, textField)", + "error": [ + "WHERE does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | where top(textField, integerField, textField) > 0", + "error": [ + "WHERE does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = top(textField, integerField, textField)", + "error": [ + "EVAL does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = top(textField, integerField, textField) > 0", + "error": [ + "EVAL does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | eval top(textField, integerField, textField)", + "error": [ + "EVAL does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | eval top(textField, integerField, textField) > 0", + "error": [ + "EVAL does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | stats top(null, null, null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | stats top(nullVar, nullVar, nullVar)", + "error": [ + "Argument of [top] must be a constant, received [nullVar]", + "Argument of [top] must be a constant, received [nullVar]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = top(textField, integerField, \"asc\")", + "error": [ + "Argument of [=] must be a constant, received [top(textField,integerField,\"asc\")]" + ], + "warning": [] + }, + { + "query": "from a_index | stats top(textField, integerField, \"asc\")", + "error": [ + "Argument of [top] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | sort top(textField, integerField, \"asc\")", + "error": [ + "SORT does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | where top(textField, integerField, \"asc\")", + "error": [ + "WHERE does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | where top(textField, integerField, \"asc\") > 0", + "error": [ + "WHERE does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = top(textField, integerField, \"asc\")", + "error": [ + "EVAL does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = top(textField, integerField, \"asc\") > 0", + "error": [ + "EVAL does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | eval top(textField, integerField, \"asc\")", + "error": [ + "EVAL does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | eval top(textField, integerField, \"asc\") > 0", + "error": [ + "EVAL does not support function top" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = weighted_avg(doubleField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(doubleField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(doubleField, doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(doubleField, doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(doubleField, doubleField)) + weighted_avg(doubleField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(doubleField, doubleField)) + weighted_avg(doubleField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(doubleField / 2, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(doubleField / 2, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField / 2, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField / 2, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(doubleField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(doubleField, doubleField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(doubleField, doubleField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField, doubleField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, doubleField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField, doubleField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, doubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = weighted_avg(avg(integerField), avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(avg(integerField), avg(integerField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(booleanField, booleanField)", + "error": [ + "Argument of [weighted_avg] must be [double], found value [booleanField] type [boolean]", + "Argument of [weighted_avg] must be [double], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | sort weighted_avg(doubleField, doubleField)", + "error": [ + "SORT does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(doubleField, doubleField)", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(doubleField, doubleField) > 0", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(doubleField, doubleField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(doubleField, doubleField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(doubleField, doubleField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(doubleField, doubleField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(null, null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | stats weighted_avg(nullVar, nullVar)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = weighted_avg(doubleField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(doubleField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(doubleField, longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(doubleField, longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(doubleField, longField)) + weighted_avg(doubleField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(doubleField, longField)) + weighted_avg(doubleField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(doubleField / 2, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(doubleField / 2, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField / 2, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField / 2, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(doubleField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(doubleField, longField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(doubleField, longField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField, longField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, longField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField, longField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, longField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = weighted_avg(doubleField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(doubleField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(doubleField, integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(doubleField, integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(doubleField, integerField)) + weighted_avg(doubleField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(doubleField, integerField)) + weighted_avg(doubleField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(doubleField / 2, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(doubleField / 2, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField / 2, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField / 2, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(doubleField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(doubleField, integerField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(doubleField, integerField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField, integerField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, integerField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField, integerField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, integerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = weighted_avg(longField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(longField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(longField, doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(longField, doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(longField, doubleField)) + weighted_avg(longField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(longField, doubleField)) + weighted_avg(longField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(longField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(longField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(longField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(longField, doubleField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(longField, doubleField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(longField, doubleField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(longField, doubleField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(longField, doubleField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(longField, doubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = weighted_avg(longField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(longField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(longField, longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(longField, longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(longField, longField)) + weighted_avg(longField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(longField, longField)) + weighted_avg(longField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(longField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(longField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(longField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(longField, longField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(longField, longField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(longField, longField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(longField, longField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(longField, longField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(longField, longField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = weighted_avg(longField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(longField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(longField, integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(longField, integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(longField, integerField)) + weighted_avg(longField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(longField, integerField)) + weighted_avg(longField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(longField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(longField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(longField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(longField, integerField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(longField, integerField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(longField, integerField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(longField, integerField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(longField, integerField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(longField, integerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = weighted_avg(integerField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(integerField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(integerField, doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(integerField, doubleField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(integerField, doubleField)) + weighted_avg(integerField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(integerField, doubleField)) + weighted_avg(integerField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(integerField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(integerField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, doubleField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(integerField, doubleField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(integerField, doubleField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(integerField, doubleField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, doubleField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(integerField, doubleField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, doubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = weighted_avg(integerField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(integerField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(integerField, longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(integerField, longField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(integerField, longField)) + weighted_avg(integerField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(integerField, longField)) + weighted_avg(integerField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(integerField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(integerField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, longField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(integerField, longField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(integerField, longField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(integerField, longField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, longField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(integerField, longField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, longField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = weighted_avg(integerField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(integerField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(integerField, integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(integerField, integerField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(weighted_avg(integerField, integerField)) + weighted_avg(integerField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(weighted_avg(integerField, integerField)) + weighted_avg(integerField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(integerField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(integerField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, integerField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats weighted_avg(integerField, integerField) by round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = weighted_avg(integerField, integerField) by var1 = round(doubleField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(integerField, integerField) by round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, integerField) by var1 = round(doubleField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), weighted_avg(integerField, integerField) by round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, integerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(doubleField, longField)", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(doubleField, longField) > 0", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(doubleField, integerField)", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(doubleField, integerField) > 0", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(longField, doubleField)", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(longField, doubleField) > 0", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(longField, longField)", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(longField, longField) > 0", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(longField, integerField)", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(longField, integerField) > 0", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(integerField, doubleField)", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(integerField, doubleField) > 0", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(integerField, longField)", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(integerField, longField) > 0", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(integerField, integerField)", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | where weighted_avg(integerField, integerField) > 0", + "error": [ + "WHERE does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(doubleField, longField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(doubleField, longField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(doubleField, longField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(doubleField, longField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(doubleField, integerField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(doubleField, integerField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(doubleField, integerField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(doubleField, integerField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(longField, doubleField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(longField, doubleField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(longField, doubleField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(longField, doubleField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(longField, longField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(longField, longField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(longField, longField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(longField, longField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(longField, integerField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(longField, integerField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(longField, integerField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(longField, integerField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(integerField, doubleField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(integerField, doubleField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(integerField, doubleField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(integerField, doubleField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(integerField, longField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(integerField, longField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(integerField, longField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(integerField, longField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(integerField, integerField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = weighted_avg(integerField, integerField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(integerField, integerField)", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval weighted_avg(integerField, integerField) > 0", + "error": [ + "EVAL does not support function weighted_avg" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bucket(dateField, 1 year)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats by bin(dateField, 1 year)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats by bucket(integerField, integerField)", + "error": [ + "Argument of [bucket] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bin(integerField, integerField)", + "error": [ + "Argument of [bin] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bucket(dateField, integerField, textField, textField)", + "error": [ + "Argument of [bucket] must be a constant, received [integerField]", + "Argument of [bucket] must be a constant, received [textField]", + "Argument of [bucket] must be a constant, received [textField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bin(dateField, integerField, textField, textField)", + "error": [ + "Argument of [bin] must be a constant, received [integerField]", + "Argument of [bin] must be a constant, received [textField]", + "Argument of [bin] must be a constant, received [textField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bucket(dateField, integerField, dateField, dateField)", + "error": [ + "Argument of [bucket] must be a constant, received [integerField]", + "Argument of [bucket] must be a constant, received [dateField]", + "Argument of [bucket] must be a constant, received [dateField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bin(dateField, integerField, dateField, dateField)", + "error": [ + "Argument of [bin] must be a constant, received [integerField]", + "Argument of [bin] must be a constant, received [dateField]", + "Argument of [bin] must be a constant, received [dateField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bucket(dateField, integerField, textField, dateField)", + "error": [ + "Argument of [bucket] must be a constant, received [integerField]", + "Argument of [bucket] must be a constant, received [textField]", + "Argument of [bucket] must be a constant, received [dateField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bin(dateField, integerField, textField, dateField)", + "error": [ + "Argument of [bin] must be a constant, received [integerField]", + "Argument of [bin] must be a constant, received [textField]", + "Argument of [bin] must be a constant, received [dateField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bucket(dateField, integerField, dateField, textField)", + "error": [ + "Argument of [bucket] must be a constant, received [integerField]", + "Argument of [bucket] must be a constant, received [dateField]", + "Argument of [bucket] must be a constant, received [textField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bin(dateField, integerField, dateField, textField)", + "error": [ + "Argument of [bin] must be a constant, received [integerField]", + "Argument of [bin] must be a constant, received [dateField]", + "Argument of [bin] must be a constant, received [textField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bucket(integerField, integerField, integerField, integerField)", + "error": [ + "Argument of [bucket] must be a constant, received [integerField]", + "Argument of [bucket] must be a constant, received [integerField]", + "Argument of [bucket] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bin(integerField, integerField, integerField, integerField)", + "error": [ + "Argument of [bin] must be a constant, received [integerField]", + "Argument of [bin] must be a constant, received [integerField]", + "Argument of [bin] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | sort bucket(dateField, 1 year)", + "error": [ + "SORT does not support function bucket" + ], + "warning": [] + }, + { + "query": "from a_index | stats bucket(null, null, null, null)", + "error": [], + "warning": [] + }, + { + "query": "row nullVar = null | stats bucket(nullVar, nullVar, nullVar, nullVar)", + "error": [ + "Argument of [bucket] must be a constant, received [nullVar]", + "Argument of [bucket] must be a constant, received [nullVar]", + "Argument of [bucket] must be a constant, received [nullVar]" + ], + "warning": [] + }, + { + "query": "from a_index | stats bucket(\"2022\", 1 year)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats bucket(concat(\"20\", \"22\"), 1 year)", + "error": [ + "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" + ], + "warning": [] + }, + { + "query": "from a_index | stats bucket(\"2022\", integerField, textField, textField)", + "error": [ + "Argument of [bucket] must be a constant, received [integerField]", + "Argument of [bucket] must be a constant, received [textField]", + "Argument of [bucket] must be a constant, received [textField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats bucket(concat(\"20\", \"22\"), integerField, textField, textField)", + "error": [ + "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]", + "Argument of [bucket] must be a constant, received [integerField]", + "Argument of [bucket] must be a constant, received [textField]", + "Argument of [bucket] must be a constant, received [textField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats bucket(\"2022\", integerField, \"2022\", \"2022\")", + "error": [ + "Argument of [bucket] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats bucket(concat(\"20\", \"22\"), integerField, concat(\"20\", \"22\"), concat(\"20\", \"22\"))", + "error": [ + "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]", + "Argument of [bucket] must be a constant, received [integerField]", + "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]", + "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" + ], + "warning": [] + }, + { + "query": "from a_index | stats bucket(\"2022\", integerField, textField, \"2022\")", + "error": [ + "Argument of [bucket] must be a constant, received [integerField]", + "Argument of [bucket] must be a constant, received [textField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats bucket(concat(\"20\", \"22\"), integerField, textField, concat(\"20\", \"22\"))", + "error": [ + "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]", + "Argument of [bucket] must be a constant, received [integerField]", + "Argument of [bucket] must be a constant, received [textField]", + "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" + ], + "warning": [] + }, + { + "query": "from a_index | stats bucket(\"2022\", integerField, \"2022\", textField)", + "error": [ + "Argument of [bucket] must be a constant, received [integerField]", + "Argument of [bucket] must be a constant, received [textField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats bucket(concat(\"20\", \"22\"), integerField, concat(\"20\", \"22\"), textField)", + "error": [ + "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]", + "Argument of [bucket] must be a constant, received [integerField]", + "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]", + "Argument of [bucket] must be a constant, received [textField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = percentile(doubleField, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(doubleField, doubleField)", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(doubleField, doubleField))", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(doubleField,doubleField))]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(doubleField, doubleField))", + "error": [ + "Argument of [round] must be a constant, received [percentile(doubleField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(doubleField, doubleField)) + percentile(doubleField, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(doubleField,doubleField))+percentile(doubleField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(doubleField, doubleField)) + percentile(doubleField, doubleField)", + "error": [ + "Argument of [+] must be a constant, received [round(percentile(doubleField,doubleField))]", + "Argument of [+] must be a constant, received [percentile(doubleField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(doubleField / 2, doubleField)", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(doubleField / 2, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField/2,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(doubleField / 2, doubleField)", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField / 2, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField/2,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(doubleField, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(doubleField, doubleField)", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(doubleField, doubleField) by round(doubleField / 2)", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(doubleField, doubleField) by var1 = round(doubleField / 2)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(doubleField, doubleField) by round(doubleField / 2), ipField", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField, doubleField) by var1 = round(doubleField / 2), ipField", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(doubleField, doubleField) by round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField, doubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = percentile(avg(integerField), avg(integerField))", + "error": [ + "Argument of [=] must be a constant, received [percentile(avg(integerField),avg(integerField))]", + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(avg(integerField), avg(integerField))", + "error": [ + "Argument of [percentile] must be a constant, received [avg(integerField)]", + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(booleanField, )", + "error": [ + "SyntaxError: no viable alternative at input 'percentile(booleanField, )'", + "SyntaxError: mismatched input ')' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + "At least one aggregation or grouping expression required in [STATS]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = percentile(doubleField, longField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(doubleField, longField)", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(doubleField, longField))", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(doubleField,longField))]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(doubleField, longField))", + "error": [ + "Argument of [round] must be a constant, received [percentile(doubleField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(doubleField, longField)) + percentile(doubleField, longField)", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(doubleField,longField))+percentile(doubleField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(doubleField, longField)) + percentile(doubleField, longField)", + "error": [ + "Argument of [+] must be a constant, received [round(percentile(doubleField,longField))]", + "Argument of [+] must be a constant, received [percentile(doubleField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(doubleField / 2, longField)", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(doubleField / 2, longField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField/2,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(doubleField / 2, longField)", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField / 2, longField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField/2,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(doubleField, longField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(doubleField, longField)", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField, longField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(doubleField, longField) by round(doubleField / 2)", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(doubleField, longField) by var1 = round(doubleField / 2)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(doubleField, longField) by round(doubleField / 2), ipField", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField, longField) by var1 = round(doubleField / 2), ipField", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(doubleField, longField) by round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField, longField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = percentile(doubleField, integerField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(doubleField, integerField)", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(doubleField, integerField))", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(doubleField,integerField))]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(doubleField, integerField))", + "error": [ + "Argument of [round] must be a constant, received [percentile(doubleField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(doubleField, integerField)) + percentile(doubleField, integerField)", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(doubleField,integerField))+percentile(doubleField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(doubleField, integerField)) + percentile(doubleField, integerField)", + "error": [ + "Argument of [+] must be a constant, received [round(percentile(doubleField,integerField))]", + "Argument of [+] must be a constant, received [percentile(doubleField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(doubleField / 2, integerField)", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(doubleField / 2, integerField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField/2,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(doubleField / 2, integerField)", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField / 2, integerField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField/2,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(doubleField, integerField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(doubleField, integerField)", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField, integerField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(doubleField, integerField) by round(doubleField / 2)", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(doubleField, integerField) by var1 = round(doubleField / 2)", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(doubleField, integerField) by round(doubleField / 2), ipField", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField, integerField) by var1 = round(doubleField / 2), ipField", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(doubleField, integerField) by round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField, integerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [=] must be a constant, received [percentile(doubleField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = percentile(longField, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(longField, doubleField)", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(longField, doubleField))", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(longField,doubleField))]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(longField, doubleField))", + "error": [ + "Argument of [round] must be a constant, received [percentile(longField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(longField, doubleField)) + percentile(longField, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(longField,doubleField))+percentile(longField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(longField, doubleField)) + percentile(longField, doubleField)", + "error": [ + "Argument of [+] must be a constant, received [round(percentile(longField,doubleField))]", + "Argument of [+] must be a constant, received [percentile(longField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(longField, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(longField, doubleField)", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(longField, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(longField, doubleField) by round(doubleField / 2)", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(longField, doubleField) by var1 = round(doubleField / 2)", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(longField, doubleField) by round(doubleField / 2), ipField", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(longField, doubleField) by var1 = round(doubleField / 2), ipField", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(longField, doubleField) by round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(longField, doubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = percentile(longField, longField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(longField, longField)", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(longField, longField))", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(longField,longField))]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(longField, longField))", + "error": [ + "Argument of [round] must be a constant, received [percentile(longField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(longField, longField)) + percentile(longField, longField)", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(longField,longField))+percentile(longField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(longField, longField)) + percentile(longField, longField)", + "error": [ + "Argument of [+] must be a constant, received [round(percentile(longField,longField))]", + "Argument of [+] must be a constant, received [percentile(longField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(longField, longField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(longField, longField)", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(longField, longField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(longField, longField) by round(doubleField / 2)", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(longField, longField) by var1 = round(doubleField / 2)", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(longField, longField) by round(doubleField / 2), ipField", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(longField, longField) by var1 = round(doubleField / 2), ipField", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(longField, longField) by round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(longField, longField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = percentile(longField, integerField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(longField, integerField)", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(longField, integerField))", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(longField,integerField))]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(longField, integerField))", + "error": [ + "Argument of [round] must be a constant, received [percentile(longField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(longField, integerField)) + percentile(longField, integerField)", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(longField,integerField))+percentile(longField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(longField, integerField)) + percentile(longField, integerField)", + "error": [ + "Argument of [+] must be a constant, received [round(percentile(longField,integerField))]", + "Argument of [+] must be a constant, received [percentile(longField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(longField, integerField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(longField, integerField)", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(longField, integerField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(longField, integerField) by round(doubleField / 2)", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(longField, integerField) by var1 = round(doubleField / 2)", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(longField, integerField) by round(doubleField / 2), ipField", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(longField, integerField) by var1 = round(doubleField / 2), ipField", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(longField, integerField) by round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(longField, integerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [=] must be a constant, received [percentile(longField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = percentile(integerField, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(integerField, doubleField)", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(integerField, doubleField))", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(integerField,doubleField))]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(integerField, doubleField))", + "error": [ + "Argument of [round] must be a constant, received [percentile(integerField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(integerField, doubleField)) + percentile(integerField, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(integerField,doubleField))+percentile(integerField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(integerField, doubleField)) + percentile(integerField, doubleField)", + "error": [ + "Argument of [+] must be a constant, received [round(percentile(integerField,doubleField))]", + "Argument of [+] must be a constant, received [percentile(integerField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(integerField, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(integerField, doubleField)", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(integerField, doubleField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(integerField, doubleField) by round(doubleField / 2)", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(integerField, doubleField) by var1 = round(doubleField / 2)", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(integerField, doubleField) by round(doubleField / 2), ipField", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(integerField, doubleField) by var1 = round(doubleField / 2), ipField", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(integerField, doubleField) by round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [percentile] must be a constant, received [doubleField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(integerField, doubleField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,doubleField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = percentile(integerField, longField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(integerField, longField)", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(integerField, longField))", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(integerField,longField))]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(integerField, longField))", + "error": [ + "Argument of [round] must be a constant, received [percentile(integerField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(integerField, longField)) + percentile(integerField, longField)", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(integerField,longField))+percentile(integerField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(integerField, longField)) + percentile(integerField, longField)", + "error": [ + "Argument of [+] must be a constant, received [round(percentile(integerField,longField))]", + "Argument of [+] must be a constant, received [percentile(integerField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(integerField, longField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(integerField, longField)", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(integerField, longField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(integerField, longField) by round(doubleField / 2)", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(integerField, longField) by var1 = round(doubleField / 2)", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(integerField, longField) by round(doubleField / 2), ipField", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(integerField, longField) by var1 = round(doubleField / 2), ipField", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(integerField, longField) by round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [percentile] must be a constant, received [longField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(integerField, longField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,longField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = percentile(integerField, integerField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(integerField, integerField)", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(integerField, integerField))", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(integerField,integerField))]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(integerField, integerField))", + "error": [ + "Argument of [round] must be a constant, received [percentile(integerField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(integerField, integerField)) + percentile(integerField, integerField)", + "error": [ + "Argument of [=] must be a constant, received [round(percentile(integerField,integerField))+percentile(integerField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(integerField, integerField)) + percentile(integerField, integerField)", + "error": [ + "Argument of [+] must be a constant, received [round(percentile(integerField,integerField))]", + "Argument of [+] must be a constant, received [percentile(integerField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(integerField, integerField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(integerField, integerField)", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(integerField, integerField)", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(integerField, integerField) by round(doubleField / 2)", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(integerField, integerField) by var1 = round(doubleField / 2)", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(integerField, integerField) by round(doubleField / 2), ipField", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(integerField, integerField) by var1 = round(doubleField / 2), ipField", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), percentile(integerField, integerField) by round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [percentile] must be a constant, received [integerField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(doubleField), var0 = percentile(integerField, integerField) by var1 = round(doubleField / 2), doubleField / 2", + "error": [ + "Argument of [=] must be a constant, received [percentile(integerField,integerField)]" + ], + "warning": [] + }, + { + "query": "from a_index | sort percentile(doubleField, doubleField)", + "error": [ + "SORT does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(doubleField, doubleField)", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(doubleField, doubleField) > 0", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(doubleField, longField)", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(doubleField, longField) > 0", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(doubleField, integerField)", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(doubleField, integerField) > 0", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(longField, doubleField)", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(longField, doubleField) > 0", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(longField, longField)", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(longField, longField) > 0", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(longField, integerField)", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(longField, integerField) > 0", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(integerField, doubleField)", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(integerField, doubleField) > 0", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(integerField, longField)", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(integerField, longField) > 0", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(integerField, integerField)", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(integerField, integerField) > 0", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(doubleField, doubleField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(doubleField, doubleField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(doubleField, doubleField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(doubleField, doubleField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(doubleField, longField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(doubleField, longField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(doubleField, longField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(doubleField, longField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(doubleField, integerField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(doubleField, integerField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(doubleField, integerField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(doubleField, integerField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(longField, doubleField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(longField, doubleField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(longField, doubleField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(longField, doubleField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(longField, longField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(longField, longField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(longField, longField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(longField, longField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(longField, integerField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(longField, integerField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(longField, integerField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(longField, integerField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(integerField, doubleField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(integerField, doubleField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(integerField, doubleField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(integerField, doubleField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(integerField, longField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(integerField, longField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(integerField, longField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(integerField, longField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(integerField, integerField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(integerField, integerField) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(integerField, integerField)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(integerField, integerField) > 0", + "error": [ + "EVAL does not support function percentile" ], "warning": [] }, { - "query": "from a_index | sort mv_append(booleanField, booleanField)", + "query": "from a_index | stats percentile(null, null)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_append(null, null)", - "error": [], + "query": "row nullVar = null | stats percentile(nullVar, nullVar)", + "error": [ + "Argument of [percentile] must be a constant, received [nullVar]" + ], "warning": [] }, { - "query": "row nullVar = null | eval mv_append(nullVar, nullVar)", + "query": "row var = to_string(true)", "error": [], "warning": [] }, { - "query": "row var = repeat(\"a\", 5)", + "query": "row to_string(true)", "error": [], "warning": [] }, { - "query": "row repeat(\"a\", 5)", + "query": "row var = to_str(true)", "error": [], "warning": [] }, { - "query": "row var = repeat(to_string(true), to_integer(true))", + "query": "row var = to_string(to_boolean(true))", "error": [], "warning": [] }, { - "query": "row var = repeat(true, true)", + "query": "row var = to_string(cartesianPointField)", "error": [ - "Argument of [repeat] must be [string], found value [true] type [boolean]", - "Argument of [repeat] must be [number], found value [true] type [boolean]" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | where length(repeat(stringField, numberField)) > 0", - "error": [], + "query": "row to_string(cartesianPointField)", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | where length(repeat(booleanField, booleanField)) > 0", + "query": "row var = to_str(cartesianPointField)", "error": [ - "Argument of [repeat] must be [string], found value [booleanField] type [boolean]", - "Argument of [repeat] must be [number], found value [booleanField] type [boolean]" + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | eval var = repeat(stringField, numberField)", - "error": [], + "query": "row var = to_string(to_cartesianpoint(cartesianPointField))", + "error": [ + "Unknown column [cartesianPointField]" + ], "warning": [] }, { - "query": "from a_index | eval repeat(stringField, numberField)", + "query": "row var = to_string(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = repeat(to_string(booleanField), to_integer(booleanField))", + "query": "row to_string(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval repeat(booleanField, booleanField)", - "error": [ - "Argument of [repeat] must be [string], found value [booleanField] type [boolean]", - "Argument of [repeat] must be [number], found value [booleanField] type [boolean]" - ], + "query": "row var = to_str(to_cartesianshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval repeat(stringField, numberField, extraArg)", + "query": "row var = to_string(to_cartesianshape(cartesianPointField))", "error": [ - "Error: [repeat] function expects exactly 2 arguments, got 3." + "Unknown column [cartesianPointField]" ], "warning": [] }, { - "query": "from a_index | sort repeat(stringField, numberField)", + "query": "row var = to_string(to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval repeat(null, null)", + "query": "row to_string(to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval repeat(nullVar, nullVar)", + "query": "row var = to_str(to_datetime(\"2021-01-01T00:00:00Z\"))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = top(stringField, 3, \"asc\")", + "query": "row var = to_string(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", "error": [], "warning": [] }, { - "query": "from a_index | stats top(stringField, 1, \"desc\")", + "query": "row var = to_string(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = top(stringField, 5, \"asc\")", + "query": "row to_string(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | stats top(stringField, 5, \"asc\")", + "query": "row var = to_str(5.5)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = top(stringField, 3)", - "error": [ - "Error: [top] function expects exactly 3 arguments, got 2." - ], + "query": "row var = to_string(to_double(true))", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = top(stringField)", + "query": "row var = to_string(geoPointField)", "error": [ - "Error: [top] function expects exactly 3 arguments, got 1." + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | stats var = top(stringField, numberField, \"asc\")", + "query": "row to_string(geoPointField)", "error": [ - "Argument of [=] must be a constant, received [top(stringField,numberField,\"asc\")]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | stats var = top(stringField, 100 + numberField, \"asc\")", + "query": "row var = to_str(geoPointField)", "error": [ - "Argument of [=] must be a constant, received [top(stringField,100+numberField,\"asc\")]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | stats var = top(stringField, 1, stringField)", + "query": "row var = to_string(to_geopoint(geoPointField))", "error": [ - "Argument of [=] must be a constant, received [top(stringField,1,stringField)]" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | stats var = top(stringField, 1, \"asdf\")", + "query": "row var = to_string(to_geoshape(\"POINT (30 10)\"))", "error": [], - "warning": [ - "Invalid option [\"asdf\"] for top. Supported options: [\"asc\", \"desc\"]." - ] - }, - { - "query": "from a_index | sort top(stringField, numberField, \"asc\")", - "error": [ - "SORT does not support function top" - ], - "warning": [] - }, - { - "query": "from a_index | where top(stringField, numberField, \"asc\")", - "error": [ - "WHERE does not support function top" - ], "warning": [] }, { - "query": "from a_index | where top(stringField, numberField, \"asc\") > 0", - "error": [ - "WHERE does not support function top" - ], + "query": "row to_string(to_geoshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = top(stringField, numberField, \"asc\")", - "error": [ - "EVAL does not support function top" - ], + "query": "row var = to_str(to_geoshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = top(stringField, numberField, \"asc\") > 0", + "query": "row var = to_string(to_geoshape(geoPointField))", "error": [ - "EVAL does not support function top" + "Unknown column [geoPointField]" ], "warning": [] }, { - "query": "from a_index | eval top(stringField, numberField, \"asc\")", - "error": [ - "EVAL does not support function top" - ], + "query": "row var = to_string(5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval top(stringField, numberField, \"asc\") > 0", - "error": [ - "EVAL does not support function top" - ], + "query": "row to_string(5)", + "error": [], "warning": [] }, { - "query": "from a_index | sort top(stringField, 5, \"asc\")", - "error": [ - "SORT does not support function top" - ], + "query": "row var = to_str(5)", + "error": [], "warning": [] }, { - "query": "from a_index | where top(stringField, 5, \"asc\")", - "error": [ - "WHERE does not support function top" - ], + "query": "row var = to_string(to_integer(true))", + "error": [], "warning": [] }, { - "query": "from a_index | where top(stringField, 5, \"asc\") > 0", - "error": [ - "WHERE does not support function top" - ], + "query": "row var = to_string(to_ip(\"127.0.0.1\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = top(stringField, 5, \"asc\")", - "error": [ - "EVAL does not support function top" - ], + "query": "row to_string(to_ip(\"127.0.0.1\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = top(stringField, 5, \"asc\") > 0", - "error": [ - "EVAL does not support function top" - ], + "query": "row var = to_str(to_ip(\"127.0.0.1\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval top(stringField, 5, \"asc\")", - "error": [ - "EVAL does not support function top" - ], + "query": "row var = to_string(to_ip(to_ip(\"127.0.0.1\")))", + "error": [], "warning": [] }, { - "query": "from a_index | eval top(stringField, 5, \"asc\") > 0", - "error": [ - "EVAL does not support function top" - ], + "query": "row var = to_string(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = top(stringField, 5, \"asc\")", + "query": "row to_string(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats top(stringField, 5, \"asc\")", + "query": "row var = to_str(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats top(stringField, numberField, \"asc\")", - "error": [ - "Argument of [top] must be a constant, received [numberField]" - ], + "query": "row var = to_string(to_string(true))", + "error": [], "warning": [] }, { - "query": "from a_index | stats top(null, null, null)", + "query": "row var = to_string(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "row nullVar = null | stats top(nullVar, nullVar, nullVar)", - "error": [ - "Argument of [top] must be a constant, received [nullVar]", - "Argument of [top] must be a constant, received [nullVar]" - ], + "query": "row to_string(to_version(\"1.0.0\"))", + "error": [], "warning": [] }, { - "query": "row var = st_distance(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row var = to_str(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "row st_distance(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row var = to_string(to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "row var = st_distance(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = to_string(booleanField)", "error": [], "warning": [] }, { - "query": "row var = st_distance(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval to_string(booleanField)", "error": [], "warning": [] }, { - "query": "row st_distance(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = to_str(booleanField)", "error": [], "warning": [] }, { - "query": "row var = st_distance(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "query": "from a_index | eval var = to_string(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_distance(true, true)", + "query": "from a_index | eval to_string(counterDoubleField)", "error": [ - "Argument of [st_distance] must be [cartesian_point], found value [true] type [boolean]", - "Argument of [st_distance] must be [cartesian_point], found value [true] type [boolean]" + "Argument of [to_string] must be [boolean], found value [counterDoubleField] type [counter_double]" ], "warning": [] }, { - "query": "from a_index | eval var = st_distance(cartesianPointField, cartesianPointField)", - "error": [], + "query": "from a_index | eval var = to_string(*)", + "error": [ + "Using wildcards (*) in to_string is not allowed" + ], "warning": [] }, { - "query": "from a_index | eval st_distance(cartesianPointField, cartesianPointField)", + "query": "from a_index | eval var = to_string(cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_distance(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "query": "from a_index | eval to_string(cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_distance(booleanField, booleanField)", - "error": [ - "Argument of [st_distance] must be [cartesian_point], found value [booleanField] type [boolean]", - "Argument of [st_distance] must be [cartesian_point], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = st_distance(geoPointField, geoPointField)", + "query": "from a_index | eval var = to_str(cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_distance(geoPointField, geoPointField)", + "query": "from a_index | eval var = to_string(to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_distance(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "query": "from a_index | eval var = to_string(cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_distance(cartesianPointField, cartesianPointField, extraArg)", - "error": [ - "Error: [st_distance] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | eval to_string(cartesianShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort st_distance(cartesianPointField, cartesianPointField)", + "query": "from a_index | eval var = to_str(cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_distance(null, null)", + "query": "from a_index | eval var = to_string(to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval st_distance(nullVar, nullVar)", + "query": "from a_index | eval var = to_string(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = weighted_avg(numberField, numberField)", + "query": "from a_index | eval to_string(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | stats weighted_avg(numberField, numberField)", + "query": "from a_index | eval var = to_str(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(weighted_avg(numberField, numberField))", + "query": "from a_index | eval var = to_string(to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "from a_index | stats round(weighted_avg(numberField, numberField))", + "query": "from a_index | eval var = to_string(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(weighted_avg(numberField, numberField)) + weighted_avg(numberField, numberField)", + "query": "from a_index | eval to_string(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(weighted_avg(numberField, numberField)) + weighted_avg(numberField, numberField)", + "query": "from a_index | eval var = to_str(doubleField)", "error": [], "warning": [] }, { - "query": "from a_index | stats weighted_avg(numberField / 2, numberField)", + "query": "from a_index | eval var = to_string(to_double(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = weighted_avg(numberField / 2, numberField)", + "query": "from a_index | eval var = to_string(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), weighted_avg(numberField / 2, numberField)", + "query": "from a_index | eval to_string(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = weighted_avg(numberField / 2, numberField)", + "query": "from a_index | eval var = to_str(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = weighted_avg(numberField, numberField)", + "query": "from a_index | eval var = to_string(to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), weighted_avg(numberField, numberField)", + "query": "from a_index | eval var = to_string(geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = weighted_avg(numberField, numberField)", + "query": "from a_index | eval to_string(geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | stats weighted_avg(numberField, numberField) by round(numberField / 2)", + "query": "from a_index | eval var = to_str(geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = weighted_avg(numberField, numberField) by var1 = round(numberField / 2)", + "query": "from a_index | eval var = to_string(to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), weighted_avg(numberField, numberField) by round(numberField / 2), ipField", + "query": "from a_index | eval var = to_string(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = weighted_avg(numberField, numberField) by var1 = round(numberField / 2), ipField", + "query": "from a_index | eval to_string(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), weighted_avg(numberField, numberField) by round(numberField / 2), numberField / 2", + "query": "from a_index | eval var = to_str(integerField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = weighted_avg(numberField, numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "from a_index | eval var = to_string(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = weighted_avg(avg(numberField), avg(numberField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "from a_index | eval var = to_string(ipField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats weighted_avg(avg(numberField), avg(numberField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "from a_index | eval to_string(ipField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats weighted_avg(booleanField, booleanField)", - "error": [ - "Argument of [weighted_avg] must be [number], found value [booleanField] type [boolean]", - "Argument of [weighted_avg] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = to_str(ipField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort weighted_avg(numberField, numberField)", - "error": [ - "SORT does not support function weighted_avg" - ], + "query": "from a_index | eval var = to_string(to_ip(ipField))", + "error": [], "warning": [] }, { - "query": "from a_index | where weighted_avg(numberField, numberField)", - "error": [ - "WHERE does not support function weighted_avg" - ], + "query": "from a_index | eval var = to_string(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | where weighted_avg(numberField, numberField) > 0", - "error": [ - "WHERE does not support function weighted_avg" - ], + "query": "from a_index | eval to_string(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = weighted_avg(numberField, numberField)", - "error": [ - "EVAL does not support function weighted_avg" - ], + "query": "from a_index | eval var = to_str(keywordField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = weighted_avg(numberField, numberField) > 0", - "error": [ - "EVAL does not support function weighted_avg" - ], + "query": "from a_index | eval var = to_string(to_string(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval weighted_avg(numberField, numberField)", - "error": [ - "EVAL does not support function weighted_avg" - ], + "query": "from a_index | eval var = to_string(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval weighted_avg(numberField, numberField) > 0", - "error": [ - "EVAL does not support function weighted_avg" - ], + "query": "from a_index | eval to_string(longField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats weighted_avg(null, null)", + "query": "from a_index | eval var = to_str(longField)", "error": [], "warning": [] }, { - "query": "row nullVar = null | stats weighted_avg(nullVar, nullVar)", + "query": "from a_index | eval var = to_string(textField)", "error": [], "warning": [] }, { - "query": "row var = exp(5)", + "query": "from a_index | eval to_string(textField)", "error": [], "warning": [] }, { - "query": "row exp(5)", + "query": "from a_index | eval var = to_str(textField)", "error": [], "warning": [] }, { - "query": "row var = exp(to_integer(true))", + "query": "from a_index | eval var = to_string(unsignedLongField)", "error": [], "warning": [] }, { - "query": "row var = exp(true)", - "error": [ - "Argument of [exp] must be [number], found value [true] type [boolean]" - ], + "query": "from a_index | eval to_string(unsignedLongField)", + "error": [], "warning": [] }, { - "query": "from a_index | where exp(numberField) > 0", + "query": "from a_index | eval var = to_str(unsignedLongField)", "error": [], "warning": [] }, { - "query": "from a_index | where exp(booleanField) > 0", - "error": [ - "Argument of [exp] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval var = to_string(versionField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = exp(numberField)", + "query": "from a_index | eval to_string(versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval exp(numberField)", + "query": "from a_index | eval var = to_str(versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = exp(to_integer(booleanField))", + "query": "from a_index | eval var = to_string(to_version(keywordField))", "error": [], "warning": [] }, { - "query": "from a_index | eval exp(booleanField)", + "query": "from a_index | eval to_string(booleanField, extraArg)", "error": [ - "Argument of [exp] must be [number], found value [booleanField] type [boolean]" + "Error: [to_string] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = exp(*)", - "error": [ - "Using wildcards (*) in exp is not allowed" - ], + "query": "from a_index | sort to_string(booleanField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval exp(numberField, extraArg)", - "error": [ - "Error: [exp] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval to_string(null)", + "error": [], "warning": [] }, { - "query": "from a_index | sort exp(numberField)", + "query": "row nullVar = null | eval to_string(nullVar)", "error": [], "warning": [] }, { - "query": "from a_index | eval exp(null)", + "query": "from a_index | eval to_string(\"2022\")", "error": [], "warning": [] }, { - "query": "row nullVar = null | eval exp(nullVar)", + "query": "from a_index | eval to_string(concat(\"20\", \"22\"))", "error": [], "warning": [] }, diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts b/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts index daeff58923f5c..f4c75ae1e63a0 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts @@ -35,26 +35,38 @@ const NESTED_DEPTHS = Array(NESTING_LEVELS) .fill(0) .map((_, i) => i + 1); +const toAvgSignature = statsAggregationFunctionDefinitions.find(({ name }) => name === 'avg')!; const toInteger = evalFunctionDefinitions.find(({ name }) => name === 'to_integer')!; +const toDoubleSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_double')!; const toStringSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_string')!; const toDateSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_datetime')!; const toBooleanSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_boolean')!; const toIpSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_ip')!; const toGeoPointSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_geopoint')!; +const toGeoShapeSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_geoshape')!; const toCartesianPointSignature = evalFunctionDefinitions.find( ({ name }) => name === 'to_cartesianpoint' )!; - -const toAvgSignature = statsAggregationFunctionDefinitions.find(({ name }) => name === 'avg')!; +const toCartesianShapeSignature = evalFunctionDefinitions.find( + ({ name }) => name === 'to_cartesianshape' +)!; +const toVersionSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_version')!; const nestedFunctions = { - number: prepareNestedFunction(toInteger), + double: prepareNestedFunction(toDoubleSignature), + integer: prepareNestedFunction(toInteger), string: prepareNestedFunction(toStringSignature), + text: prepareNestedFunction(toStringSignature), + keyword: prepareNestedFunction(toStringSignature), date: prepareNestedFunction(toDateSignature), boolean: prepareNestedFunction(toBooleanSignature), ip: prepareNestedFunction(toIpSignature), + version: prepareNestedFunction(toVersionSignature), geo_point: prepareNestedFunction(toGeoPointSignature), + geo_shape: prepareNestedFunction(toGeoShapeSignature), cartesian_point: prepareNestedFunction(toCartesianPointSignature), + cartesian_shape: prepareNestedFunction(toCartesianShapeSignature), + datetime: prepareNestedFunction(toDateSignature), }; const literals = { @@ -152,7 +164,7 @@ function getFieldMapping( ...rest, }; } - return { name: 'stringField', type, ...rest }; + return { name: 'textField', type, ...rest }; }); } @@ -351,7 +363,7 @@ describe('validation logic', () => { for (const op of ['>', '>=', '<', '<=', '==', '!=']) { testErrorsAndWarnings(`row var = 5 ${op} 0`, []); testErrorsAndWarnings(`row var = NOT 5 ${op} 0`, []); - testErrorsAndWarnings(`row var = (numberField ${op} 0)`, ['Unknown column [numberField]']); + testErrorsAndWarnings(`row var = (doubleField ${op} 0)`, ['Unknown column [doubleField]']); testErrorsAndWarnings(`row var = (NOT (5 ${op} 0))`, []); testErrorsAndWarnings(`row var = to_ip("127.0.0.1") ${op} to_ip("127.0.0.1")`, []); testErrorsAndWarnings(`row var = now() ${op} now()`, []); @@ -360,8 +372,8 @@ describe('validation logic', () => { ['==', '!='].includes(op) ? [] : [ - `Argument of [${op}] must be [number], found value [false] type [boolean]`, - `Argument of [${op}] must be [number], found value [false] type [boolean]`, + `Argument of [${op}] must be [date], found value [false] type [boolean]`, + `Argument of [${op}] must be [date], found value [false] type [boolean]`, ] ); for (const [valueTypeA, valueTypeB] of [['now()', '"2022"']]) { @@ -375,10 +387,10 @@ describe('validation logic', () => { testErrorsAndWarnings( `row var = now() ${op} now()`, ['+', '-'].includes(op) - ? [`Argument of [${op}] must be [time_literal], found value [now()] type [date]`] + ? [`Argument of [${op}] must be [date_period], found value [now()] type [date]`] : [ - `Argument of [${op}] must be [number], found value [now()] type [date]`, - `Argument of [${op}] must be [number], found value [now()] type [date]`, + `Argument of [${op}] must be [double], found value [now()] type [date]`, + `Argument of [${op}] must be [double], found value [now()] type [date]`, ] ); } @@ -389,16 +401,16 @@ describe('validation logic', () => { testErrorsAndWarnings(`row var = NOT "a" ${op} "?a"`, []); testErrorsAndWarnings(`row var = NOT "a" NOT ${op} "?a"`, []); testErrorsAndWarnings(`row var = 5 ${op} "?a"`, [ - `Argument of [${op}] must be [string], found value [5] type [number]`, + `Argument of [${op}] must be [text], found value [5] type [integer]`, ]); testErrorsAndWarnings(`row var = 5 NOT ${op} "?a"`, [ - `Argument of [not_${op}] must be [string], found value [5] type [number]`, + `Argument of [not_${op}] must be [text], found value [5] type [integer]`, ]); testErrorsAndWarnings(`row var = NOT 5 ${op} "?a"`, [ - `Argument of [${op}] must be [string], found value [5] type [number]`, + `Argument of [${op}] must be [text], found value [5] type [integer]`, ]); testErrorsAndWarnings(`row var = NOT 5 NOT ${op} "?a"`, [ - `Argument of [not_${op}] must be [string], found value [5] type [number]`, + `Argument of [not_${op}] must be [text], found value [5] type [integer]`, ]); } @@ -438,8 +450,8 @@ describe('validation logic', () => { ]); for (const op of ['*', '/', '%']) { testErrorsAndWarnings(`row var = now() ${op} 1 ${timeLiteral.name}`, [ - `Argument of [${op}] must be [number], found value [now()] type [date]`, - `Argument of [${op}] must be [number], found value [1 ${timeLiteral.name}] type [duration]`, + `Argument of [${op}] must be [double], found value [now()] type [date]`, + `Argument of [${op}] must be [double], found value [1 ${timeLiteral.name}] type [duration]`, ]); } } @@ -449,13 +461,13 @@ describe('validation logic', () => { describe('show', () => { testErrorsAndWarnings('show', ["SyntaxError: missing 'info' at ''"]); testErrorsAndWarnings('show info', []); - testErrorsAndWarnings('show numberField', [ - "SyntaxError: token recognition error at: 'n'", + testErrorsAndWarnings('show doubleField', [ + "SyntaxError: token recognition error at: 'd'", + "SyntaxError: token recognition error at: 'o'", "SyntaxError: token recognition error at: 'u'", - "SyntaxError: token recognition error at: 'm'", "SyntaxError: token recognition error at: 'b'", + "SyntaxError: token recognition error at: 'l'", "SyntaxError: token recognition error at: 'e'", - "SyntaxError: token recognition error at: 'r'", "SyntaxError: token recognition error at: 'F'", "SyntaxError: token recognition error at: 'ie'", "SyntaxError: token recognition error at: 'l'", @@ -475,11 +487,11 @@ describe('validation logic', () => { testErrorsAndWarnings('from index | limit a', [ "SyntaxError: mismatched input 'a' expecting INTEGER_LITERAL", ]); - testErrorsAndWarnings('from index | limit numberField', [ - "SyntaxError: mismatched input 'numberField' expecting INTEGER_LITERAL", + testErrorsAndWarnings('from index | limit doubleField', [ + "SyntaxError: mismatched input 'doubleField' expecting INTEGER_LITERAL", ]); - testErrorsAndWarnings('from index | limit stringField', [ - "SyntaxError: mismatched input 'stringField' expecting INTEGER_LITERAL", + testErrorsAndWarnings('from index | limit textField', [ + "SyntaxError: mismatched input 'textField' expecting INTEGER_LITERAL", ]); testErrorsAndWarnings('from index | limit 4', []); }); @@ -490,8 +502,14 @@ describe('validation logic', () => { describe('keep', () => { testErrorsAndWarnings('from index | keep ', ["SyntaxError: missing ID_PATTERN at ''"]); - testErrorsAndWarnings('from index | keep stringField, numberField, dateField', []); - testErrorsAndWarnings('from index | keep `stringField`, `numberField`, `dateField`', []); + testErrorsAndWarnings( + 'from index | keep keywordField, doubleField, integerField, dateField', + [] + ); + testErrorsAndWarnings( + 'from index | keep `keywordField`, `doubleField`, `integerField`, `dateField`', + [] + ); testErrorsAndWarnings('from index | keep 4.5', [ "SyntaxError: token recognition error at: '4'", "SyntaxError: token recognition error at: '5'", @@ -499,27 +517,27 @@ describe('validation logic', () => { "SyntaxError: missing ID_PATTERN at ''", ]); testErrorsAndWarnings('from index | keep `4.5`', ['Unknown column [4.5]']); - testErrorsAndWarnings('from index | keep missingField, numberField, dateField', [ + testErrorsAndWarnings('from index | keep missingField, doubleField, dateField', [ 'Unknown column [missingField]', ]); testErrorsAndWarnings('from index | keep `any#Char$Field`', []); testErrorsAndWarnings('from index | project ', [ "SyntaxError: mismatched input 'project' expecting {'dissect', 'drop', 'enrich', 'eval', 'grok', 'inlinestats', 'keep', 'limit', 'lookup', 'mv_expand', 'rename', 'sort', 'stats', 'where'}", ]); - testErrorsAndWarnings('from index | project stringField, numberField, dateField', [ + testErrorsAndWarnings('from index | project textField, doubleField, dateField', [ "SyntaxError: mismatched input 'project' expecting {'dissect', 'drop', 'enrich', 'eval', 'grok', 'inlinestats', 'keep', 'limit', 'lookup', 'mv_expand', 'rename', 'sort', 'stats', 'where'}", ]); - testErrorsAndWarnings('from index | PROJECT stringField, numberField, dateField', [ + testErrorsAndWarnings('from index | PROJECT textField, doubleField, dateField', [ "SyntaxError: mismatched input 'PROJECT' expecting {'dissect', 'drop', 'enrich', 'eval', 'grok', 'inlinestats', 'keep', 'limit', 'lookup', 'mv_expand', 'rename', 'sort', 'stats', 'where'}", ]); - testErrorsAndWarnings('from index | project missingField, numberField, dateField', [ + testErrorsAndWarnings('from index | project missingField, doubleField, dateField', [ "SyntaxError: mismatched input 'project' expecting {'dissect', 'drop', 'enrich', 'eval', 'grok', 'inlinestats', 'keep', 'limit', 'lookup', 'mv_expand', 'rename', 'sort', 'stats', 'where'}", ]); - testErrorsAndWarnings('from index | keep s*', []); + testErrorsAndWarnings('from index | keep k*', []); testErrorsAndWarnings('from index | keep *Field', []); - testErrorsAndWarnings('from index | keep s*Field', []); - testErrorsAndWarnings('from index | keep string*Field', []); - testErrorsAndWarnings('from index | keep s*, n*', []); + testErrorsAndWarnings('from index | keep k*Field', []); + testErrorsAndWarnings('from index | keep key*Field', []); + testErrorsAndWarnings('from index | keep k*, i*', []); testErrorsAndWarnings('from index | keep m*', ['Unknown column [m*]']); testErrorsAndWarnings('from index | keep *m', ['Unknown column [*m]']); testErrorsAndWarnings('from index | keep d*m', ['Unknown column [d*m]']); @@ -532,41 +550,41 @@ describe('validation logic', () => { ); testErrorsAndWarnings( - `FROM index | STATS ROUND(AVG(numberField * 1.5)), COUNT(*), MIN(numberField * 10) | KEEP \`MIN(numberField * 10)\``, + `FROM index | STATS ROUND(AVG(doubleField * 1.5)), COUNT(*), MIN(doubleField * 10) | KEEP \`MIN(doubleField * 10)\``, [] ); testErrorsAndWarnings( - `FROM index | STATS COUNT(*), MIN(numberField * 10), MAX(numberField)| KEEP \`COUNT(*)\``, + `FROM index | STATS COUNT(*), MIN(doubleField * 10), MAX(doubleField)| KEEP \`COUNT(*)\``, [] ); }); describe('drop', () => { testErrorsAndWarnings('from index | drop ', ["SyntaxError: missing ID_PATTERN at ''"]); - testErrorsAndWarnings('from index | drop stringField, numberField, dateField', []); + testErrorsAndWarnings('from index | drop textField, doubleField, dateField', []); testErrorsAndWarnings('from index | drop 4.5', [ "SyntaxError: token recognition error at: '4'", "SyntaxError: token recognition error at: '5'", "SyntaxError: missing ID_PATTERN at '.'", "SyntaxError: missing ID_PATTERN at ''", ]); - testErrorsAndWarnings('from index | drop missingField, numberField, dateField', [ + testErrorsAndWarnings('from index | drop missingField, doubleField, dateField', [ 'Unknown column [missingField]', ]); testErrorsAndWarnings('from index | drop `any#Char$Field`', []); - testErrorsAndWarnings('from index | drop s*', []); - testErrorsAndWarnings('from index | drop s**Field', []); + testErrorsAndWarnings('from index | drop t*', []); + testErrorsAndWarnings('from index | drop t**Field', []); testErrorsAndWarnings('from index | drop *Field*', []); - testErrorsAndWarnings('from index | drop s*F*d', []); + testErrorsAndWarnings('from index | drop t*F*d', []); testErrorsAndWarnings('from index | drop *Field', []); - testErrorsAndWarnings('from index | drop s*Field', []); - testErrorsAndWarnings('from index | drop string*Field', []); - testErrorsAndWarnings('from index | drop s*, n*', []); + testErrorsAndWarnings('from index | drop t*Field', []); + testErrorsAndWarnings('from index | drop textField', []); + testErrorsAndWarnings('from index | drop s*, d*', ['Unknown column [s*]']); testErrorsAndWarnings('from index | drop m*', ['Unknown column [m*]']); testErrorsAndWarnings('from index | drop *m', ['Unknown column [*m]']); testErrorsAndWarnings('from index | drop d*m', ['Unknown column [d*m]']); testErrorsAndWarnings('from index | drop *', ['Removing all fields is not allowed [*]']); - testErrorsAndWarnings('from index | drop stringField, *', [ + testErrorsAndWarnings('from index | drop textField, *', [ 'Removing all fields is not allowed [*]', ]); testErrorsAndWarnings( @@ -575,16 +593,16 @@ describe('validation logic', () => { ['Drop [@timestamp] will remove all time filters to the search results'] ); testErrorsAndWarnings( - 'from index | drop stringField, @timestamp', + 'from index | drop textField, @timestamp', [], ['Drop [@timestamp] will remove all time filters to the search results'] ); testErrorsAndWarnings( - `FROM index | STATS ROUND(AVG(numberField * 1.5)), COUNT(*), MIN(numberField * 10) | DROP \`MIN(numberField * 10)\``, + `FROM index | STATS ROUND(AVG(doubleField * 1.5)), COUNT(*), MIN(doubleField * 10) | DROP \`MIN(doubleField * 10)\``, [] ); testErrorsAndWarnings( - `FROM index | STATS COUNT(*), MIN(numberField * 10), MAX(numberField)| DROP \`COUNT(*)\``, + `FROM index | STATS COUNT(*), MIN(doubleField * 10), MAX(doubleField)| DROP \`COUNT(*)\``, [] ); }); @@ -593,11 +611,11 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | mv_expand ', [ "SyntaxError: missing {UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER} at ''", ]); - for (const type of ['string', 'number', 'date', 'boolean', 'ip']) { + for (const type of ['text', 'integer', 'date', 'boolean', 'ip']) { testErrorsAndWarnings(`from a_index | mv_expand ${type}Field`, []); } - testErrorsAndWarnings('from a_index | mv_expand numberField, b', [ + testErrorsAndWarnings('from a_index | mv_expand doubleField, b', [ "SyntaxError: token recognition error at: ','", "SyntaxError: extraneous input 'b' expecting ", ]); @@ -612,24 +630,24 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | rename', [ "SyntaxError: mismatched input '' expecting ID_PATTERN", ]); - testErrorsAndWarnings('from a_index | rename stringField', [ + testErrorsAndWarnings('from a_index | rename textField', [ "SyntaxError: mismatched input '' expecting 'as'", ]); testErrorsAndWarnings('from a_index | rename a', [ "SyntaxError: mismatched input '' expecting 'as'", 'Unknown column [a]', ]); - testErrorsAndWarnings('from a_index | rename stringField as', [ + testErrorsAndWarnings('from a_index | rename textField as', [ "SyntaxError: missing ID_PATTERN at ''", ]); testErrorsAndWarnings('from a_index | rename missingField as', [ "SyntaxError: missing ID_PATTERN at ''", 'Unknown column [missingField]', ]); - testErrorsAndWarnings('from a_index | rename stringField as b', []); - testErrorsAndWarnings('from a_index | rename stringField AS b', []); - testErrorsAndWarnings('from a_index | rename stringField As b', []); - testErrorsAndWarnings('from a_index | rename stringField As b, b AS c', []); + testErrorsAndWarnings('from a_index | rename textField as b', []); + testErrorsAndWarnings('from a_index | rename textField AS b', []); + testErrorsAndWarnings('from a_index | rename textField As b', []); + testErrorsAndWarnings('from a_index | rename textField As b, b AS c', []); testErrorsAndWarnings('from a_index | rename fn() as a', [ "SyntaxError: token recognition error at: '('", "SyntaxError: token recognition error at: ')'", @@ -637,18 +655,22 @@ describe('validation logic', () => { 'Unknown column [a]', ]); testErrorsAndWarnings( - 'from a_index | eval numberField + 1 | rename `numberField + 1` as a', + 'from a_index | eval doubleField + 1 | rename `doubleField + 1` as a', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField) | rename `avg(numberField)` as avg0', + 'from a_index | stats avg(doubleField) | rename `avg(doubleField)` as avg0', [] ); - testErrorsAndWarnings('from a_index |eval numberField + 1 | rename `numberField + 1` as ', [ + testErrorsAndWarnings('from a_index |eval doubleField + 1 | rename `doubleField + 1` as ', [ "SyntaxError: missing ID_PATTERN at ''", ]); + testErrorsAndWarnings('from a_index | rename key* as keywords', [ + 'Using wildcards (*) in RENAME is not allowed [key*]', + 'Unknown column [keywords]', + ]); testErrorsAndWarnings('from a_index | rename s* as strings', [ - 'Using wildcards (*) in RENAME is not allowed [s*]', + 'Unknown column [s*]', 'Unknown column [strings]', ]); testErrorsAndWarnings('row a = 10 | rename a as `this``is fine`', []); @@ -661,51 +683,48 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | dissect', [ "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); - testErrorsAndWarnings('from a_index | dissect stringField', [ + testErrorsAndWarnings('from a_index | dissect textField', [ "SyntaxError: missing QUOTED_STRING at ''", ]); - testErrorsAndWarnings('from a_index | dissect stringField 2', [ + testErrorsAndWarnings('from a_index | dissect textField 2', [ "SyntaxError: mismatched input '2' expecting QUOTED_STRING", ]); - testErrorsAndWarnings('from a_index | dissect stringField .', [ + testErrorsAndWarnings('from a_index | dissect textField .', [ "SyntaxError: mismatched input '' expecting {UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", - 'Unknown column [stringField.]', + 'Unknown column [textField.]', ]); - testErrorsAndWarnings('from a_index | dissect stringField %a', [ + testErrorsAndWarnings('from a_index | dissect textField %a', [ "SyntaxError: mismatched input '%' expecting QUOTED_STRING", "SyntaxError: mismatched input '' expecting '='", ]); // Do not try to validate the dissect pattern string - testErrorsAndWarnings('from a_index | dissect stringField "%{firstWord}"', []); - testErrorsAndWarnings('from a_index | dissect numberField "%{firstWord}"', [ - 'DISSECT only supports string type values, found [numberField] of type [number]', + testErrorsAndWarnings('from a_index | dissect textField "%{firstWord}"', []); + testErrorsAndWarnings('from a_index | dissect doubleField "%{firstWord}"', [ + 'DISSECT only supports string type values, found [doubleField] of type [double]', ]); - testErrorsAndWarnings('from a_index | dissect stringField "%{firstWord}" option ', [ + testErrorsAndWarnings('from a_index | dissect textField "%{firstWord}" option ', [ "SyntaxError: mismatched input '' expecting '='", ]); - testErrorsAndWarnings('from a_index | dissect stringField "%{firstWord}" option = ', [ + testErrorsAndWarnings('from a_index | dissect textField "%{firstWord}" option = ', [ "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET}", 'Invalid option for DISSECT: [option]', ]); - testErrorsAndWarnings('from a_index | dissect stringField "%{firstWord}" option = 1', [ + testErrorsAndWarnings('from a_index | dissect textField "%{firstWord}" option = 1', [ 'Invalid option for DISSECT: [option]', ]); testErrorsAndWarnings( - 'from a_index | dissect stringField "%{firstWord}" append_separator = "-"', + 'from a_index | dissect textField "%{firstWord}" append_separator = "-"', [] ); testErrorsAndWarnings( - 'from a_index | dissect stringField "%{firstWord}" ignore_missing = true', + 'from a_index | dissect textField "%{firstWord}" ignore_missing = true', ['Invalid option for DISSECT: [ignore_missing]'] ); testErrorsAndWarnings( - 'from a_index | dissect stringField "%{firstWord}" append_separator = true', + 'from a_index | dissect textField "%{firstWord}" append_separator = true', ['Invalid value for DISSECT append_separator: expected a string, but was [true]'] ); - testErrorsAndWarnings( - 'from a_index | dissect stringField "%{firstWord}" | keep firstWord', - [] - ); + testErrorsAndWarnings('from a_index | dissect textField "%{firstWord}" | keep firstWord', []); // testErrorsAndWarnings('from a_index | dissect s* "%{a}"', [ // 'Using wildcards (*) in dissect is not allowed [s*]', // ]); @@ -715,25 +734,26 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | grok', [ "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); - testErrorsAndWarnings('from a_index | grok stringField', [ + testErrorsAndWarnings('from a_index | grok textField', [ "SyntaxError: missing QUOTED_STRING at ''", ]); - testErrorsAndWarnings('from a_index | grok stringField 2', [ + testErrorsAndWarnings('from a_index | grok textField 2', [ "SyntaxError: mismatched input '2' expecting QUOTED_STRING", ]); - testErrorsAndWarnings('from a_index | grok stringField .', [ + testErrorsAndWarnings('from a_index | grok textField .', [ "SyntaxError: mismatched input '' expecting {UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", - 'Unknown column [stringField.]', + 'Unknown column [textField.]', ]); - testErrorsAndWarnings('from a_index | grok stringField %a', [ + testErrorsAndWarnings('from a_index | grok textField %a', [ "SyntaxError: mismatched input '%' expecting QUOTED_STRING", ]); + // @TODO: investigate // Do not try to validate the grok pattern string - testErrorsAndWarnings('from a_index | grok stringField "%{firstWord}"', []); - testErrorsAndWarnings('from a_index | grok numberField "%{firstWord}"', [ - 'GROK only supports string type values, found [numberField] of type [number]', + testErrorsAndWarnings('from a_index | grok textField "%{firstWord}"', []); + testErrorsAndWarnings('from a_index | grok doubleField "%{firstWord}"', [ + 'GROK only supports string type values, found [doubleField] of type [double]', ]); - testErrorsAndWarnings('from a_index | grok stringField "%{firstWord}" | keep firstWord', []); + testErrorsAndWarnings('from a_index | grok textField "%{firstWord}" | keep firstWord', []); // testErrorsAndWarnings('from a_index | grok s* "%{a}"', [ // 'Using wildcards (*) in grok is not allowed [s*]', // ]); @@ -750,20 +770,20 @@ describe('validation logic', () => { testErrorsAndWarnings(`from a_index | where NOT ${nValue} > 0`, []); } for (const op of ['>', '>=', '<', '<=', '==', '!=']) { - testErrorsAndWarnings(`from a_index | where numberField ${op} 0`, []); - testErrorsAndWarnings(`from a_index | where NOT numberField ${op} 0`, []); - testErrorsAndWarnings(`from a_index | where (numberField ${op} 0)`, []); - testErrorsAndWarnings(`from a_index | where (NOT (numberField ${op} 0))`, []); + testErrorsAndWarnings(`from a_index | where doubleField ${op} 0`, []); + testErrorsAndWarnings(`from a_index | where NOT doubleField ${op} 0`, []); + testErrorsAndWarnings(`from a_index | where (doubleField ${op} 0)`, []); + testErrorsAndWarnings(`from a_index | where (NOT (doubleField ${op} 0))`, []); testErrorsAndWarnings(`from a_index | where 1 ${op} 0`, []); - for (const type of ['string', 'number', 'date', 'boolean', 'ip']) { + for (const type of ['text', 'double', 'date', 'boolean', 'ip']) { testErrorsAndWarnings( `from a_index | where ${type}Field ${op} ${type}Field`, type !== 'boolean' || ['==', '!='].includes(op) ? [] : [ - `Argument of [${op}] must be [number], found value [${type}Field] type [${type}]`, - `Argument of [${op}] must be [number], found value [${type}Field] type [${type}]`, + `Argument of [${op}] must be [date], found value [${type}Field] type [${type}]`, + `Argument of [${op}] must be [date], found value [${type}Field] type [${type}]`, ] ); } @@ -778,17 +798,17 @@ describe('validation logic', () => { .fill('- ') .map((_, i) => (i % 2 ? oddOp : evenOp)) .join(''); - testErrorsAndWarnings(`from a_index | where ${unaryCombination} numberField > 0`, []); + testErrorsAndWarnings(`from a_index | where ${unaryCombination} doubleField > 0`, []); testErrorsAndWarnings( - `from a_index | where ${unaryCombination} round(numberField) > 0`, + `from a_index | where ${unaryCombination} round(doubleField) > 0`, [] ); testErrorsAndWarnings( - `from a_index | where 1 + ${unaryCombination} numberField > 0`, + `from a_index | where 1 + ${unaryCombination} doubleField > 0`, [] ); // still valid - testErrorsAndWarnings(`from a_index | where 1 ${unaryCombination} numberField > 0`, []); + testErrorsAndWarnings(`from a_index | where 1 ${unaryCombination} doubleField > 0`, []); } } testErrorsAndWarnings( @@ -797,52 +817,52 @@ describe('validation logic', () => { ); } for (const wrongOp of ['*', '/', '%']) { - testErrorsAndWarnings(`from a_index | where ${wrongOp}+ numberField`, [ + testErrorsAndWarnings(`from a_index | where ${wrongOp}+ doubleField`, [ `SyntaxError: extraneous input '${wrongOp}' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}`, ]); } // Skip these tests until the insensitive case equality gets restored back - testErrorsAndWarnings.skip(`from a_index | where numberField =~ 0`, [ - 'Argument of [=~] must be [string], found value [numberField] type [number]', - 'Argument of [=~] must be [string], found value [0] type [number]', + testErrorsAndWarnings.skip(`from a_index | where doubleField =~ 0`, [ + 'Argument of [=~] must be [text], found value [doubleField] type [double]', + 'Argument of [=~] must be [text], found value [0] type [number]', ]); - testErrorsAndWarnings.skip(`from a_index | where NOT numberField =~ 0`, [ - 'Argument of [=~] must be [string], found value [numberField] type [number]', - 'Argument of [=~] must be [string], found value [0] type [number]', + testErrorsAndWarnings.skip(`from a_index | where NOT doubleField =~ 0`, [ + 'Argument of [=~] must be [text], found value [doubleField] type [double]', + 'Argument of [=~] must be [text], found value [0] type [number]', ]); - testErrorsAndWarnings.skip(`from a_index | where (numberField =~ 0)`, [ - 'Argument of [=~] must be [string], found value [numberField] type [number]', - 'Argument of [=~] must be [string], found value [0] type [number]', + testErrorsAndWarnings.skip(`from a_index | where (doubleField =~ 0)`, [ + 'Argument of [=~] must be [text], found value [doubleField] type [double]', + 'Argument of [=~] must be [text], found value [0] type [number]', ]); - testErrorsAndWarnings.skip(`from a_index | where (NOT (numberField =~ 0))`, [ - 'Argument of [=~] must be [string], found value [numberField] type [number]', - 'Argument of [=~] must be [string], found value [0] type [number]', + testErrorsAndWarnings.skip(`from a_index | where (NOT (doubleField =~ 0))`, [ + 'Argument of [=~] must be [text], found value [doubleField] type [double]', + 'Argument of [=~] must be [text], found value [0] type [number]', ]); testErrorsAndWarnings.skip(`from a_index | where 1 =~ 0`, [ - 'Argument of [=~] must be [string], found value [1] type [number]', - 'Argument of [=~] must be [string], found value [0] type [number]', + 'Argument of [=~] must be [text], found value [1] type [number]', + 'Argument of [=~] must be [text], found value [0] type [number]', ]); - testErrorsAndWarnings.skip(`from a_index | eval stringField =~ 0`, [ - `Argument of [=~] must be [string], found value [0] type [number]`, + testErrorsAndWarnings.skip(`from a_index | eval textField =~ 0`, [ + `Argument of [=~] must be [text], found value [0] type [number]`, ]); for (const op of ['like', 'rlike']) { - testErrorsAndWarnings(`from a_index | where stringField ${op} "?a"`, []); - testErrorsAndWarnings(`from a_index | where stringField NOT ${op} "?a"`, []); - testErrorsAndWarnings(`from a_index | where NOT stringField ${op} "?a"`, []); - testErrorsAndWarnings(`from a_index | where NOT stringField NOT ${op} "?a"`, []); - testErrorsAndWarnings(`from a_index | where numberField ${op} "?a"`, [ - `Argument of [${op}] must be [string], found value [numberField] type [number]`, + testErrorsAndWarnings(`from a_index | where textField ${op} "?a"`, []); + testErrorsAndWarnings(`from a_index | where textField NOT ${op} "?a"`, []); + testErrorsAndWarnings(`from a_index | where NOT textField ${op} "?a"`, []); + testErrorsAndWarnings(`from a_index | where NOT textField NOT ${op} "?a"`, []); + testErrorsAndWarnings(`from a_index | where doubleField ${op} "?a"`, [ + `Argument of [${op}] must be [text], found value [doubleField] type [double]`, ]); - testErrorsAndWarnings(`from a_index | where numberField NOT ${op} "?a"`, [ - `Argument of [not_${op}] must be [string], found value [numberField] type [number]`, + testErrorsAndWarnings(`from a_index | where doubleField NOT ${op} "?a"`, [ + `Argument of [not_${op}] must be [text], found value [doubleField] type [double]`, ]); - testErrorsAndWarnings(`from a_index | where NOT numberField ${op} "?a"`, [ - `Argument of [${op}] must be [string], found value [numberField] type [number]`, + testErrorsAndWarnings(`from a_index | where NOT doubleField ${op} "?a"`, [ + `Argument of [${op}] must be [text], found value [doubleField] type [double]`, ]); - testErrorsAndWarnings(`from a_index | where NOT numberField NOT ${op} "?a"`, [ - `Argument of [not_${op}] must be [string], found value [numberField] type [number]`, + testErrorsAndWarnings(`from a_index | where NOT doubleField NOT ${op} "?a"`, [ + `Argument of [not_${op}] must be [text], found value [doubleField] type [double]`, ]); } @@ -866,21 +886,21 @@ describe('validation logic', () => { } // this is a scenario that was failing because "or" didn't accept "null" - testErrorsAndWarnings('from a_index | where stringField == "a" or null', []); + testErrorsAndWarnings('from a_index | where textField == "a" or null', []); }); describe('eval', () => { testErrorsAndWarnings('from a_index | eval ', [ "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); - testErrorsAndWarnings('from a_index | eval stringField ', []); - testErrorsAndWarnings('from a_index | eval b = stringField', []); - testErrorsAndWarnings('from a_index | eval numberField + 1', []); - testErrorsAndWarnings('from a_index | eval numberField + ', [ - "SyntaxError: no viable alternative at input 'numberField + '", + testErrorsAndWarnings('from a_index | eval textField ', []); + testErrorsAndWarnings('from a_index | eval b = textField', []); + testErrorsAndWarnings('from a_index | eval doubleField + 1', []); + testErrorsAndWarnings('from a_index | eval doubleField + ', [ + "SyntaxError: no viable alternative at input 'doubleField + '", ]); - testErrorsAndWarnings('from a_index | eval stringField + 1', [ - 'Argument of [+] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | eval textField + 1', [ + 'Argument of [+] must be [double], found value [textField] type [text]', ]); testErrorsAndWarnings('from a_index | eval a=b', ['Unknown column [b]']); testErrorsAndWarnings('from a_index | eval a=b, ', [ @@ -891,24 +911,24 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | eval a=round(', [ "SyntaxError: no viable alternative at input 'round('", ]); - testErrorsAndWarnings('from a_index | eval a=round(numberField) ', []); - testErrorsAndWarnings('from a_index | eval a=round(numberField), ', [ + testErrorsAndWarnings('from a_index | eval a=round(doubleField) ', []); + testErrorsAndWarnings('from a_index | eval a=round(doubleField), ', [ "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); - testErrorsAndWarnings('from a_index | eval a=round(numberField) + round(numberField) ', []); - testErrorsAndWarnings('from a_index | eval a=round(numberField) + round(stringField) ', [ - 'Argument of [round] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | eval a=round(doubleField) + round(doubleField) ', []); + testErrorsAndWarnings('from a_index | eval a=round(doubleField) + round(textField) ', [ + 'Argument of [round] must be [double], found value [textField] type [text]', ]); testErrorsAndWarnings( - 'from a_index | eval a=round(numberField) + round(stringField), numberField ', - ['Argument of [round] must be [number], found value [stringField] type [string]'] + 'from a_index | eval a=round(doubleField) + round(textField), doubleField ', + ['Argument of [round] must be [double], found value [textField] type [text]'] ); testErrorsAndWarnings( - 'from a_index | eval a=round(numberField) + round(numberField), numberField ', + 'from a_index | eval a=round(doubleField) + round(doubleField), doubleField ', [] ); testErrorsAndWarnings( - 'from a_index | eval a=round(numberField) + round(numberField), b = numberField ', + 'from a_index | eval a=round(doubleField) + round(doubleField), b = doubleField ', [] ); @@ -936,15 +956,15 @@ describe('validation logic', () => { .fill('- ') .map((_, i) => (i % 2 ? oddOp : evenOp)) .join(''); - testErrorsAndWarnings(`from a_index | eval ${unaryCombination} numberField`, []); - testErrorsAndWarnings(`from a_index | eval a=${unaryCombination} numberField`, []); + testErrorsAndWarnings(`from a_index | eval ${unaryCombination} doubleField`, []); + testErrorsAndWarnings(`from a_index | eval a=${unaryCombination} doubleField`, []); testErrorsAndWarnings( - `from a_index | eval a=${unaryCombination} round(numberField)`, + `from a_index | eval a=${unaryCombination} round(doubleField)`, [] ); - testErrorsAndWarnings(`from a_index | eval 1 + ${unaryCombination} numberField`, []); + testErrorsAndWarnings(`from a_index | eval 1 + ${unaryCombination} doubleField`, []); // still valid - testErrorsAndWarnings(`from a_index | eval 1 ${unaryCombination} numberField`, []); + testErrorsAndWarnings(`from a_index | eval 1 ${unaryCombination} doubleField`, []); } } @@ -955,7 +975,7 @@ describe('validation logic', () => { } for (const wrongOp of ['*', '/', '%']) { - testErrorsAndWarnings(`from a_index | eval ${wrongOp}+ numberField`, [ + testErrorsAndWarnings(`from a_index | eval ${wrongOp}+ doubleField`, [ `SyntaxError: extraneous input '${wrongOp}' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}`, ]); } @@ -991,46 +1011,58 @@ describe('validation logic', () => { ] ); for (const op of ['>', '>=', '<', '<=', '==', '!=']) { - testErrorsAndWarnings(`from a_index | eval numberField ${op} 0`, []); - testErrorsAndWarnings(`from a_index | eval NOT numberField ${op} 0`, []); - testErrorsAndWarnings(`from a_index | eval (numberField ${op} 0)`, []); - testErrorsAndWarnings(`from a_index | eval (NOT (numberField ${op} 0))`, []); + testErrorsAndWarnings(`from a_index | eval doubleField ${op} 0`, []); + testErrorsAndWarnings(`from a_index | eval NOT doubleField ${op} 0`, []); + testErrorsAndWarnings(`from a_index | eval (doubleField ${op} 0)`, []); + testErrorsAndWarnings(`from a_index | eval (NOT (doubleField ${op} 0))`, []); testErrorsAndWarnings(`from a_index | eval 1 ${op} 0`, []); - for (const type of ['string', 'number', 'date', 'boolean', 'ip']) { - testErrorsAndWarnings( - `from a_index | eval ${type}Field ${op} ${type}Field`, - type !== 'boolean' || ['==', '!='].includes(op) - ? [] - : [ - `Argument of [${op}] must be [number], found value [${type}Field] type [${type}]`, - `Argument of [${op}] must be [number], found value [${type}Field] type [${type}]`, - ] - ); + for (const type of ['text', 'double', 'date', 'boolean', 'ip']) { + if (type === 'boolean') { + testErrorsAndWarnings( + `from a_index | eval ${type}Field ${op} ${type}Field`, + type !== 'boolean' || ['==', '!='].includes(op) + ? [] + : [ + `Argument of [${op}] must be [date], found value [${type}Field] type [${type}]`, + `Argument of [${op}] must be [date], found value [${type}Field] type [${type}]`, + ] + ); + } else { + testErrorsAndWarnings( + `from a_index | eval ${type}Field ${op} ${type}Field`, + type !== 'boolean' || ['==', '!='].includes(op) + ? [] + : [ + `Argument of [${op}] must be [double], found value [${type}Field] type [${type}]`, + `Argument of [${op}] must be [double], found value [${type}Field] type [${type}]`, + ] + ); + } } // Implicit casting of literal values tests - testErrorsAndWarnings(`from a_index | eval numberField ${op} stringField`, [ - `Argument of [${op}] must be [number], found value [stringField] type [string]`, + testErrorsAndWarnings(`from a_index | eval doubleField ${op} textField`, [ + `Argument of [${op}] must be [double], found value [textField] type [text]`, ]); - testErrorsAndWarnings(`from a_index | eval stringField ${op} numberField`, [ - `Argument of [${op}] must be [number], found value [stringField] type [string]`, + testErrorsAndWarnings(`from a_index | eval keywordField ${op} doubleField`, [ + `Argument of [${op}] must be [double], found value [keywordField] type [keyword]`, ]); - testErrorsAndWarnings(`from a_index | eval numberField ${op} "2022"`, [ - `Argument of [${op}] must be [number], found value ["2022"] type [string]`, + testErrorsAndWarnings(`from a_index | eval doubleField ${op} "2022"`, [ + `Argument of [${op}] must be [date], found value [doubleField] type [double]`, ]); - testErrorsAndWarnings(`from a_index | eval dateField ${op} stringField`, [ - `Argument of [${op}] must be [string], found value [dateField] type [date]`, + testErrorsAndWarnings(`from a_index | eval dateField ${op} keywordField`, [ + `Argument of [${op}] must be [date], found value [keywordField] type [keyword]`, ]); - testErrorsAndWarnings(`from a_index | eval stringField ${op} dateField`, [ - `Argument of [${op}] must be [string], found value [dateField] type [date]`, + testErrorsAndWarnings(`from a_index | eval keywordField ${op} dateField`, [ + `Argument of [${op}] must be [date], found value [keywordField] type [keyword]`, ]); // Check that the implicit cast doesn't apply for fields - testErrorsAndWarnings(`from a_index | eval stringField ${op} 0`, [ - `Argument of [${op}] must be [number], found value [stringField] type [string]`, + testErrorsAndWarnings(`from a_index | eval textField ${op} 0`, [ + `Argument of [${op}] must be [double], found value [textField] type [text]`, ]); - testErrorsAndWarnings(`from a_index | eval stringField ${op} now()`, [ - `Argument of [${op}] must be [string], found value [now()] type [date]`, + testErrorsAndWarnings(`from a_index | eval textField ${op} now()`, [ + `Argument of [${op}] must be [date], found value [textField] type [text]`, ]); testErrorsAndWarnings(`from a_index | eval dateField ${op} "2022"`, []); @@ -1043,13 +1075,13 @@ describe('validation logic', () => { `from a_index | eval booleanField ${op} "true"`, ['==', '!='].includes(op) ? [] - : [`Argument of [${op}] must be [string], found value [booleanField] type [boolean]`] + : [`Argument of [${op}] must be [date], found value [booleanField] type [boolean]`] ); testErrorsAndWarnings( `from a_index | eval "true" ${op} booleanField`, ['==', '!='].includes(op) ? [] - : [`Argument of [${op}] must be [string], found value [booleanField] type [boolean]`] + : [`Argument of [${op}] must be [date], found value [booleanField] type [boolean]`] ); testErrorsAndWarnings(`from a_index | eval ipField ${op} "136.36.3.205"`, []); @@ -1072,25 +1104,31 @@ describe('validation logic', () => { ); for (const op of ['+', '-', '*', '/', '%']) { - testErrorsAndWarnings(`from a_index | eval numberField ${op} 1`, []); - testErrorsAndWarnings(`from a_index | eval (numberField ${op} 1)`, []); + testErrorsAndWarnings(`from a_index | eval doubleField ${op} 1`, []); + testErrorsAndWarnings(`from a_index | eval (doubleField ${op} 1)`, []); testErrorsAndWarnings(`from a_index | eval 1 ${op} 1`, []); testErrorsAndWarnings( `from a_index | eval now() ${op} now()`, ['+', '-'].includes(op) - ? [`Argument of [${op}] must be [time_literal], found value [now()] type [date]`] + ? [`Argument of [${op}] must be [date_period], found value [now()] type [date]`] : [ - `Argument of [${op}] must be [number], found value [now()] type [date]`, - `Argument of [${op}] must be [number], found value [now()] type [date]`, + `Argument of [${op}] must be [double], found value [now()] type [date]`, + `Argument of [${op}] must be [double], found value [now()] type [date]`, ] ); - testErrorsAndWarnings(`from a_index | eval 1 ${op} "1"`, [ - `Argument of [${op}] must be [number], found value [\"1\"] type [string]`, - ]); - testErrorsAndWarnings(`from a_index | eval "1" ${op} 1`, [ - `Argument of [${op}] must be [number], found value [\"1\"] type [string]`, - ]); + testErrorsAndWarnings( + `from a_index | eval 1 ${op} "1"`, + ['+', '-'].includes(op) + ? [`Argument of [${op}] must be [date_period], found value [1] type [integer]`] + : [`Argument of [${op}] must be [double], found value [\"1\"] type [string]`] + ); + testErrorsAndWarnings( + `from a_index | eval "1" ${op} 1`, + ['+', '-'].includes(op) + ? [`Argument of [${op}] must be [date_period], found value [1] type [integer]`] + : [`Argument of [${op}] must be [double], found value [\"1\"] type [string]`] + ); // TODO: enable when https://github.com/elastic/elasticsearch/issues/108432 is complete // testErrorsAndWarnings(`from a_index | eval "2022" ${op} 1 day`, []); } @@ -1109,54 +1147,51 @@ describe('validation logic', () => { ); } for (const op of ['like', 'rlike']) { - testErrorsAndWarnings(`from a_index | eval stringField ${op} "?a"`, []); - testErrorsAndWarnings(`from a_index | eval stringField NOT ${op} "?a"`, []); - testErrorsAndWarnings(`from a_index | eval NOT stringField ${op} "?a"`, []); - testErrorsAndWarnings(`from a_index | eval NOT stringField NOT ${op} "?a"`, []); - testErrorsAndWarnings(`from a_index | eval numberField ${op} "?a"`, [ - `Argument of [${op}] must be [string], found value [numberField] type [number]`, + testErrorsAndWarnings(`from a_index | eval textField ${op} "?a"`, []); + testErrorsAndWarnings(`from a_index | eval textField NOT ${op} "?a"`, []); + testErrorsAndWarnings(`from a_index | eval NOT textField ${op} "?a"`, []); + testErrorsAndWarnings(`from a_index | eval NOT textField NOT ${op} "?a"`, []); + testErrorsAndWarnings(`from a_index | eval doubleField ${op} "?a"`, [ + `Argument of [${op}] must be [text], found value [doubleField] type [double]`, ]); - testErrorsAndWarnings(`from a_index | eval numberField NOT ${op} "?a"`, [ - `Argument of [not_${op}] must be [string], found value [numberField] type [number]`, + testErrorsAndWarnings(`from a_index | eval doubleField NOT ${op} "?a"`, [ + `Argument of [not_${op}] must be [text], found value [doubleField] type [double]`, ]); - testErrorsAndWarnings(`from a_index | eval NOT numberField ${op} "?a"`, [ - `Argument of [${op}] must be [string], found value [numberField] type [number]`, + testErrorsAndWarnings(`from a_index | eval NOT doubleField ${op} "?a"`, [ + `Argument of [${op}] must be [text], found value [doubleField] type [double]`, ]); - testErrorsAndWarnings(`from a_index | eval NOT numberField NOT ${op} "?a"`, [ - `Argument of [not_${op}] must be [string], found value [numberField] type [number]`, + testErrorsAndWarnings(`from a_index | eval NOT doubleField NOT ${op} "?a"`, [ + `Argument of [not_${op}] must be [text], found value [doubleField] type [double]`, ]); } // test lists testErrorsAndWarnings('from a_index | eval 1 in (1, 2, 3)', []); - testErrorsAndWarnings('from a_index | eval numberField in (1, 2, 3)', []); - testErrorsAndWarnings('from a_index | eval numberField not in (1, 2, 3)', []); - testErrorsAndWarnings('from a_index | eval numberField not in (1, 2, 3, numberField)', []); - testErrorsAndWarnings('from a_index | eval 1 in (1, 2, 3, round(numberField))', []); + testErrorsAndWarnings('from a_index | eval doubleField in (1, 2, 3)', []); + testErrorsAndWarnings('from a_index | eval doubleField not in (1, 2, 3)', []); + testErrorsAndWarnings('from a_index | eval doubleField not in (1, 2, 3, doubleField)', []); + testErrorsAndWarnings('from a_index | eval 1 in (1, 2, 3, round(doubleField))', []); testErrorsAndWarnings('from a_index | eval "a" in ("a", "b", "c")', []); - testErrorsAndWarnings('from a_index | eval stringField in ("a", "b", "c")', []); - testErrorsAndWarnings('from a_index | eval stringField not in ("a", "b", "c")', []); - testErrorsAndWarnings( - 'from a_index | eval stringField not in ("a", "b", "c", stringField)', - [] - ); + testErrorsAndWarnings('from a_index | eval textField in ("a", "b", "c")', []); + testErrorsAndWarnings('from a_index | eval textField not in ("a", "b", "c")', []); + testErrorsAndWarnings('from a_index | eval textField not in ("a", "b", "c", textField)', []); testErrorsAndWarnings('from a_index | eval 1 in ("a", "b", "c")', [ // 'Argument of [in] must be [number[]], found value [("a", "b", "c")] type [(string, string, string)]', ]); - testErrorsAndWarnings('from a_index | eval numberField in ("a", "b", "c")', [ + testErrorsAndWarnings('from a_index | eval doubleField in ("a", "b", "c")', [ // 'Argument of [in] must be [number[]], found value [("a", "b", "c")] type [(string, string, string)]', ]); - testErrorsAndWarnings('from a_index | eval numberField not in ("a", "b", "c")', [ + testErrorsAndWarnings('from a_index | eval doubleField not in ("a", "b", "c")', [ // 'Argument of [not_in] must be [number[]], found value [("a", "b", "c")] type [(string, string, string)]', ]); - testErrorsAndWarnings('from a_index | eval numberField not in (1, 2, 3, stringField)', [ - // 'Argument of [not_in] must be [number[]], found value [(1, 2, 3, stringField)] type [(number, number, number, string)]', + testErrorsAndWarnings('from a_index | eval doubleField not in (1, 2, 3, textField)', [ + // 'Argument of [not_in] must be [number[]], found value [(1, 2, 3, textField)] type [(number, number, number, string)]', ]); - testErrorsAndWarnings('from a_index | eval avg(numberField)', [ + testErrorsAndWarnings('from a_index | eval avg(doubleField)', [ 'EVAL does not support function avg', ]); testErrorsAndWarnings( - 'from a_index | stats avg(numberField) | eval `avg(numberField)` + 1', + 'from a_index | stats avg(doubleField) | eval `avg(doubleField)` + 1', [] ); testErrorsAndWarnings('from a_index | eval not', [ @@ -1167,17 +1202,17 @@ describe('validation logic', () => { "SyntaxError: mismatched input 'in' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); - testErrorsAndWarnings('from a_index | eval stringField in stringField', [ - "SyntaxError: missing '(' at 'stringField'", + testErrorsAndWarnings('from a_index | eval textField in textField', [ + "SyntaxError: missing '(' at 'textField'", "SyntaxError: mismatched input '' expecting {',', ')'}", ]); - testErrorsAndWarnings('from a_index | eval stringField in stringField)', [ - "SyntaxError: missing '(' at 'stringField'", + testErrorsAndWarnings('from a_index | eval textField in textField)', [ + "SyntaxError: missing '(' at 'textField'", 'Error: [in] function expects exactly 2 arguments, got 1.', ]); - testErrorsAndWarnings('from a_index | eval stringField not in stringField', [ - "SyntaxError: missing '(' at 'stringField'", + testErrorsAndWarnings('from a_index | eval textField not in textField', [ + "SyntaxError: missing '(' at 'textField'", "SyntaxError: mismatched input '' expecting {',', ')'}", ]); @@ -1236,8 +1271,8 @@ describe('validation logic', () => { ]); for (const op of ['*', '/', '%']) { testErrorsAndWarnings(`from a_index | eval var = now() ${op} 1 ${unit}`, [ - `Argument of [${op}] must be [number], found value [now()] type [date]`, - `Argument of [${op}] must be [number], found value [1 ${unit}] type [duration]`, + `Argument of [${op}] must be [double], found value [now()] type [date]`, + `Argument of [${op}] must be [double], found value [1 ${unit}] type [duration]`, ]); } } @@ -1250,26 +1285,26 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort "field" ', []); testErrorsAndWarnings('from a_index | sort wrongField ', ['Unknown column [wrongField]']); - testErrorsAndWarnings('from a_index | sort numberField, ', [ + testErrorsAndWarnings('from a_index | sort doubleField, ', [ "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); - testErrorsAndWarnings('from a_index | sort numberField, stringField', []); + testErrorsAndWarnings('from a_index | sort doubleField, textField', []); for (const dir of ['desc', 'asc']) { testErrorsAndWarnings(`from a_index | sort "field" ${dir} `, []); - testErrorsAndWarnings(`from a_index | sort numberField ${dir} `, []); - testErrorsAndWarnings(`from a_index | sort numberField ${dir} nulls `, [ + testErrorsAndWarnings(`from a_index | sort doubleField ${dir} `, []); + testErrorsAndWarnings(`from a_index | sort doubleField ${dir} nulls `, [ "SyntaxError: missing {'first', 'last'} at ''", ]); for (const nullDir of ['first', 'last']) { - testErrorsAndWarnings(`from a_index | sort numberField ${dir} nulls ${nullDir}`, []); - testErrorsAndWarnings(`from a_index | sort numberField ${dir} ${nullDir}`, [ + testErrorsAndWarnings(`from a_index | sort doubleField ${dir} nulls ${nullDir}`, []); + testErrorsAndWarnings(`from a_index | sort doubleField ${dir} ${nullDir}`, [ `SyntaxError: extraneous input '${nullDir}' expecting `, ]); } } for (const nullDir of ['first', 'last']) { - testErrorsAndWarnings(`from a_index | sort numberField nulls ${nullDir}`, []); - testErrorsAndWarnings(`from a_index | sort numberField ${nullDir}`, [ + testErrorsAndWarnings(`from a_index | sort doubleField nulls ${nullDir}`, []); + testErrorsAndWarnings(`from a_index | sort doubleField ${nullDir}`, [ `SyntaxError: extraneous input '${nullDir}' expecting `, ]); } @@ -1279,18 +1314,18 @@ describe('validation logic', () => { describe('sorting by expressions', () => { // SORT accepts complex expressions testErrorsAndWarnings( - 'from a_index | sort abs(numberField) - to_long(stringField) desc nulls first', + 'from a_index | sort abs(doubleField) - to_long(textField) desc nulls first', [] ); // Expression parts are also validated - testErrorsAndWarnings('from a_index | sort sin(stringField)', [ - 'Argument of [sin] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | sort sin(textField)', [ + 'Argument of [sin] must be [double], found value [textField] type [text]', ]); // Expression parts are also validated - testErrorsAndWarnings('from a_index | sort numberField + stringField', [ - 'Argument of [+] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | sort doubleField + textField', [ + 'Argument of [+] must be [double], found value [textField] type [text]', ]); }); }); @@ -1364,52 +1399,52 @@ describe('validation logic', () => { "SyntaxError: mismatched input 'is' expecting ", 'Unknown column [this]', ]); - testErrorsAndWarnings(`from a_index | enrich policy on stringField with `, [ + testErrorsAndWarnings(`from a_index | enrich policy on textField with `, [ "SyntaxError: mismatched input '' expecting ID_PATTERN", ]); - testErrorsAndWarnings(`from a_index | enrich policy on stringField with var0 `, [ + testErrorsAndWarnings(`from a_index | enrich policy on textField with var0 `, [ 'Unknown column [var0]', ]); - testErrorsAndWarnings(`from a_index |enrich policy on numberField with var0 = `, [ + testErrorsAndWarnings(`from a_index |enrich policy on doubleField with var0 = `, [ "SyntaxError: missing ID_PATTERN at ''", 'Unknown column [var0]', ]); - testErrorsAndWarnings(`from a_index | enrich policy on stringField with var0 = c `, [ + testErrorsAndWarnings(`from a_index | enrich policy on textField with var0 = c `, [ 'Unknown column [var0]', `Unknown column [c]`, ]); // need to re-enable once the fields/variables become location aware - // testErrorsAndWarnings(`from a_index | enrich policy on stringField with var0 = stringField `, [ - // `Unknown column [stringField]`, + // testErrorsAndWarnings(`from a_index | enrich policy on textField with var0 = textField `, [ + // `Unknown column [textField]`, // ]); - testErrorsAndWarnings(`from a_index |enrich policy on numberField with var0 = , `, [ + testErrorsAndWarnings(`from a_index |enrich policy on doubleField with var0 = , `, [ "SyntaxError: missing ID_PATTERN at ','", "SyntaxError: mismatched input '' expecting ID_PATTERN", 'Unknown column [var0]', ]); testErrorsAndWarnings( - `from a_index | enrich policy on stringField with var0 = otherField, var1 `, + `from a_index | enrich policy on textField with var0 = otherField, var1 `, ['Unknown column [var1]'] ); testErrorsAndWarnings( - `from a_index | enrich policy on stringField with var0 = otherField `, + `from a_index | enrich policy on textField with var0 = otherField `, [] ); testErrorsAndWarnings( - `from a_index | enrich policy on stringField with var0 = otherField, yetAnotherField `, + `from a_index | enrich policy on textField with var0 = otherField, yetAnotherField `, [] ); testErrorsAndWarnings( - `from a_index |enrich policy on numberField with var0 = otherField, var1 = `, + `from a_index |enrich policy on doubleField with var0 = otherField, var1 = `, ["SyntaxError: missing ID_PATTERN at ''", 'Unknown column [var1]'] ); testErrorsAndWarnings( - `from a_index | enrich policy on stringField with var0 = otherField, var1 = yetAnotherField`, + `from a_index | enrich policy on textField with var0 = otherField, var1 = yetAnotherField`, [] ); testErrorsAndWarnings( - 'from a_index | enrich policy on stringField with var0 = otherField, `this``is fine` = yetAnotherField', + 'from a_index | enrich policy on textField with var0 = otherField, `this``is fine` = yetAnotherField', [] ); testErrorsAndWarnings(`from a_index | enrich policy with `, [ @@ -1425,14 +1460,14 @@ describe('validation logic', () => { describe('shadowing', () => { testErrorsAndWarnings( - 'from a_index | eval stringField = 5', + 'from a_index | eval textField = 5', [], - ['Column [stringField] of type string has been overwritten as new type: number'] + ['Column [textField] of type text has been overwritten as new type: integer'] ); testErrorsAndWarnings( - 'from a_index | eval numberField = "5"', + 'from a_index | eval doubleField = "5"', [], - ['Column [numberField] of type number has been overwritten as new type: string'] + ['Column [doubleField] of type double has been overwritten as new type: string'] ); }); @@ -1469,7 +1504,7 @@ describe('validation logic', () => { for (const nesting of NESTED_DEPTHS) { // start with a quotable expression - const expr = 'round(numberField) + 1'; + const expr = 'round(doubleField) + 1'; const startingQuery = `from a_index | eval ${expr}`; // now pipe for each nesting level a new eval command that appends a +1 to the previous quoted expression const finalQuery = `${startingQuery} | ${Array(nesting) @@ -1554,7 +1589,7 @@ describe('validation logic', () => { it(`should not crash if no callbacks are available`, async () => { try { await validateQuery( - `from a_index | eval b = a | enrich policy | dissect stringField "%{firstWord}"`, + `from a_index | eval b = a | enrich policy | dissect textField "%{firstWord}"`, getAstAndSyntaxErrors, undefined, { @@ -1571,7 +1606,7 @@ describe('validation logic', () => { it(`should not crash if no callbacks are passed`, async () => { try { await validateQuery( - `from a_index | eval b = a | enrich policy | dissect stringField "%{firstWord}"`, + `from a_index | eval b = a | enrich policy | dissect textField "%{firstWord}"`, getAstAndSyntaxErrors ); } catch { @@ -1582,40 +1617,47 @@ describe('validation logic', () => { describe('inline casting', () => { // accepts casting - testErrorsAndWarnings('from a_index | eval 1::string', []); + testErrorsAndWarnings('from a_index | eval 1::keyword', []); // errors if the cast type is invalid // testErrorsAndWarnings('from a_index | eval 1::foo', ['Invalid type [foo] for casting']); // accepts casting with multiple types - testErrorsAndWarnings('from a_index | eval 1::string::long::double', []); + testErrorsAndWarnings('from a_index | eval 1::keyword::long::double', []); // takes into account casting in function arguments testErrorsAndWarnings('from a_index | eval trim("23"::double)', [ - 'Argument of [trim] must be [string], found value ["23"::double] type [double]', + 'Argument of [trim] must be [keyword], found value ["23"::double] type [double]', ]); - testErrorsAndWarnings('from a_index | eval trim(23::string)', []); + testErrorsAndWarnings('from a_index | eval trim(23::keyword)', []); testErrorsAndWarnings('from a_index | eval 1 + "2"::long', []); + testErrorsAndWarnings('from a_index | eval 1 + "2"::LONG', []); + testErrorsAndWarnings('from a_index | eval 1 + "2"::Long', []); + testErrorsAndWarnings('from a_index | eval 1 + "2"::LoNg', []); + testErrorsAndWarnings('from a_index | eval 1 + "2"', [ // just a counter-case to make sure the previous test is meaningful - 'Argument of [+] must be [number], found value ["2"] type [string]', + 'Argument of [+] must be [date_period], found value [1] type [integer]', ]); testErrorsAndWarnings( - 'from a_index | eval trim(to_double("23")::string::double::long::string::double)', + 'from a_index | eval trim(to_double("23")::keyword::double::long::keyword::double)', [ - 'Argument of [trim] must be [string], found value [to_double("23")::string::double::long::string::double] type [double]', + 'Argument of [trim] must be [keyword], found value [to_double("23")::keyword::double::long::keyword::double] type [double]', ] ); - // accepts elasticsearch subtypes and type aliases like int and keyword - // (once https://github.com/elastic/kibana/issues/174710 is done this won't be a special case anymore) testErrorsAndWarnings('from a_index | eval CEIL(23::long)', []); testErrorsAndWarnings('from a_index | eval CEIL(23::unsigned_long)', []); testErrorsAndWarnings('from a_index | eval CEIL(23::int)', []); testErrorsAndWarnings('from a_index | eval CEIL(23::integer)', []); + testErrorsAndWarnings('from a_index | eval CEIL(23::Integer)', []); testErrorsAndWarnings('from a_index | eval CEIL(23::double)', []); + testErrorsAndWarnings('from a_index | eval CEIL(23::DOUBLE)', []); + testErrorsAndWarnings('from a_index | eval CEIL(23::doubla)', [ + 'Argument of [ceil] must be [double], found value [23::doubla] type [doubla]', + ]); - testErrorsAndWarnings('from a_index | eval TRIM(23::string)', []); + testErrorsAndWarnings('from a_index | eval TRIM(23::keyword)', []); testErrorsAndWarnings('from a_index | eval TRIM(23::text)', []); testErrorsAndWarnings('from a_index | eval TRIM(23::keyword)', []); @@ -1630,439 +1672,501 @@ describe('validation logic', () => { // testErrorsAndWarnings('from a_index | eval 23::cartesian_point', ['wrong type!']); // still validates nested functions when they are casted - testErrorsAndWarnings('from a_index | eval to_lower(trim(numberField)::string)', [ - 'Argument of [trim] must be [string], found value [numberField] type [number]', + testErrorsAndWarnings('from a_index | eval to_lower(trim(doubleField)::keyword)', [ + 'Argument of [trim] must be [keyword], found value [doubleField] type [double]', ]); testErrorsAndWarnings( - 'from a_index | eval to_upper(trim(numberField)::string::string::string::string)', - ['Argument of [trim] must be [string], found value [numberField] type [number]'] + 'from a_index | eval to_upper(trim(doubleField)::keyword::keyword::keyword::keyword)', + ['Argument of [trim] must be [keyword], found value [doubleField] type [double]'] ); testErrorsAndWarnings( - 'from a_index | eval to_lower(to_upper(trim(numberField)::string)::string)', - ['Argument of [trim] must be [string], found value [numberField] type [number]'] + 'from a_index | eval to_lower(to_upper(trim(doubleField)::keyword)::keyword)', + ['Argument of [trim] must be [keyword], found value [doubleField] type [double]'] ); }); describe(FUNCTION_DESCRIBE_BLOCK_NAME, () => { - describe('date_diff', () => { - testErrorsAndWarnings( - `row var = date_diff("month", "2023-12-02T11:00:00.000Z", "2023-12-02T11:00:00.000Z")`, - [] - ); - - testErrorsAndWarnings( - `row var = date_diff("mm", "2023-12-02T11:00:00.000Z", "2023-12-02T11:00:00.000Z")`, - [] - ); - - testErrorsAndWarnings( - `row var = date_diff("bogus", "2023-12-02T11:00:00.000Z", "2023-12-02T11:00:00.000Z")`, - [], - [ - 'Invalid option ["bogus"] for date_diff. Supported options: ["year", "years", "yy", "yyyy", "quarter", "quarters", "qq", "q", "month", "months", "mm", "m", "dayofyear", "dy", "y", "day", "days", "dd", "d", "week", "weeks", "wk", "ww", "weekday", "weekdays", "dw", "hour", "hours", "hh", "minute", "minutes", "mi", "n", "second", "seconds", "ss", "s", "millisecond", "milliseconds", "ms", "microsecond", "microseconds", "mcs", "nanosecond", "nanoseconds", "ns"].', - ] - ); - - testErrorsAndWarnings( - `from a_index | eval date_diff(stringField, "2023-12-02T11:00:00.000Z", "2023-12-02T11:00:00.000Z")`, - [] - ); - - testErrorsAndWarnings( - `from a_index | eval date_diff("month", dateField, "2023-12-02T11:00:00.000Z")`, - [] - ); - - testErrorsAndWarnings( - `from a_index | eval date_diff("month", "2023-12-02T11:00:00.000Z", dateField)`, - [] - ); - - testErrorsAndWarnings(`from a_index | eval date_diff("month", stringField, dateField)`, [ - 'Argument of [date_diff] must be [date], found value [stringField] type [string]', - ]); - - testErrorsAndWarnings(`from a_index | eval date_diff("month", dateField, stringField)`, [ - 'Argument of [date_diff] must be [date], found value [stringField] type [string]', - ]); - testErrorsAndWarnings( - 'from a_index | eval var = date_diff("year", dateField, dateField)', - [] - ); - testErrorsAndWarnings('from a_index | eval date_diff("year", dateField, dateField)', []); - - testErrorsAndWarnings( - 'from a_index | eval var = date_diff("year", to_datetime(stringField), to_datetime(stringField))', - [] - ); - - testErrorsAndWarnings( - 'from a_index | eval date_diff(numberField, stringField, stringField)', - [ - 'Argument of [date_diff] must be [string], found value [numberField] type [number]', - 'Argument of [date_diff] must be [date], found value [stringField] type [string]', - 'Argument of [date_diff] must be [date], found value [stringField] type [string]', - ] - ); - - testErrorsAndWarnings( - 'from a_index | eval date_diff("year", dateField, dateField, extraArg)', - ['Error: [date_diff] function expects exactly 3 arguments, got 4.'] - ); - - testErrorsAndWarnings('from a_index | sort date_diff("year", dateField, dateField)', []); - - testErrorsAndWarnings( - 'from a_index | eval var = date_diff("year", to_datetime(dateField), to_datetime(dateField))', - [] - ); - - testErrorsAndWarnings( - 'from a_index | eval date_diff(booleanField, booleanField, booleanField)', - [ - 'Argument of [date_diff] must be [string], found value [booleanField] type [boolean]', - 'Argument of [date_diff] must be [date], found value [booleanField] type [boolean]', - 'Argument of [date_diff] must be [date], found value [booleanField] type [boolean]', - ] - ); - testErrorsAndWarnings('from a_index | eval date_diff(null, null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval date_diff(nullVar, nullVar, nullVar)', []); - - testErrorsAndWarnings('from a_index | eval date_diff("year", "2022", "2022")', []); - testErrorsAndWarnings( - 'from a_index | eval date_diff("year", concat("20", "22"), concat("20", "22"))', - [ - 'Argument of [date_diff] must be [date], found value [concat("20","22")] type [string]', - 'Argument of [date_diff] must be [date], found value [concat("20","22")] type [string]', - ] - ); - }); - describe('abs', () => { + testErrorsAndWarnings('row var = abs(5.5)', []); + testErrorsAndWarnings('row abs(5.5)', []); + testErrorsAndWarnings('row var = abs(to_double(true))', []); testErrorsAndWarnings('row var = abs(5)', []); testErrorsAndWarnings('row abs(5)', []); - testErrorsAndWarnings('row var = abs(to_integer("a"))', []); + testErrorsAndWarnings('row var = abs(to_integer(true))', []); - testErrorsAndWarnings('row var = abs("a")', [ - 'Argument of [abs] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('row var = abs(true)', [ + 'Argument of [abs] must be [double], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where abs(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where abs(doubleField) > 0', []); - testErrorsAndWarnings('from a_index | where abs(stringField) > 0', [ - 'Argument of [abs] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | where abs(booleanField) > 0', [ + 'Argument of [abs] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval var = abs(numberField)', []); - testErrorsAndWarnings('from a_index | eval abs(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = abs(to_integer(stringField))', []); - - testErrorsAndWarnings('from a_index | eval abs(stringField)', [ - 'Argument of [abs] must be [number], found value [stringField] type [string]', - ]); + testErrorsAndWarnings('from a_index | where abs(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where abs(longField) > 0', []); + testErrorsAndWarnings('from a_index | where abs(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = abs(doubleField)', []); + testErrorsAndWarnings('from a_index | eval abs(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = abs(to_double(booleanField))', []); - testErrorsAndWarnings('from a_index | eval abs(numberField, extraArg)', [ - 'Error: [abs] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval abs(booleanField)', [ + 'Argument of [abs] must be [double], found value [booleanField] type [boolean]', ]); testErrorsAndWarnings('from a_index | eval var = abs(*)', [ 'Using wildcards (*) in abs is not allowed', ]); - testErrorsAndWarnings('from a_index | sort abs(numberField)', []); - testErrorsAndWarnings('row var = abs(to_integer(true))', []); - - testErrorsAndWarnings('row var = abs(true)', [ - 'Argument of [abs] must be [number], found value [true] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | where abs(booleanField) > 0', [ - 'Argument of [abs] must be [number], found value [booleanField] type [boolean]', - ]); - + testErrorsAndWarnings('from a_index | eval var = abs(integerField)', []); + testErrorsAndWarnings('from a_index | eval abs(integerField)', []); testErrorsAndWarnings('from a_index | eval var = abs(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = abs(longField)', []); + testErrorsAndWarnings('from a_index | eval abs(longField)', []); + testErrorsAndWarnings('from a_index | eval var = abs(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval abs(unsignedLongField)', []); - testErrorsAndWarnings('from a_index | eval abs(booleanField)', [ - 'Argument of [abs] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval abs(doubleField, extraArg)', [ + 'Error: [abs] function expects exactly one argument, got 2.', ]); + + testErrorsAndWarnings('from a_index | sort abs(doubleField)', []); testErrorsAndWarnings('from a_index | eval abs(null)', []); testErrorsAndWarnings('row nullVar = null | eval abs(nullVar)', []); }); describe('acos', () => { + testErrorsAndWarnings('row var = acos(5.5)', []); + testErrorsAndWarnings('row acos(5.5)', []); + testErrorsAndWarnings('row var = acos(to_double(true))', []); testErrorsAndWarnings('row var = acos(5)', []); testErrorsAndWarnings('row acos(5)', []); - testErrorsAndWarnings('row var = acos(to_integer("a"))', []); + testErrorsAndWarnings('row var = acos(to_integer(true))', []); - testErrorsAndWarnings('row var = acos("a")', [ - 'Argument of [acos] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('row var = acos(true)', [ + 'Argument of [acos] must be [double], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where acos(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where acos(doubleField) > 0', []); - testErrorsAndWarnings('from a_index | where acos(stringField) > 0', [ - 'Argument of [acos] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | where acos(booleanField) > 0', [ + 'Argument of [acos] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval var = acos(numberField)', []); - testErrorsAndWarnings('from a_index | eval acos(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = acos(to_integer(stringField))', []); - - testErrorsAndWarnings('from a_index | eval acos(stringField)', [ - 'Argument of [acos] must be [number], found value [stringField] type [string]', - ]); + testErrorsAndWarnings('from a_index | where acos(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where acos(longField) > 0', []); + testErrorsAndWarnings('from a_index | where acos(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = acos(doubleField)', []); + testErrorsAndWarnings('from a_index | eval acos(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = acos(to_double(booleanField))', []); - testErrorsAndWarnings('from a_index | eval acos(numberField, extraArg)', [ - 'Error: [acos] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval acos(booleanField)', [ + 'Argument of [acos] must be [double], found value [booleanField] type [boolean]', ]); testErrorsAndWarnings('from a_index | eval var = acos(*)', [ 'Using wildcards (*) in acos is not allowed', ]); - testErrorsAndWarnings('from a_index | sort acos(numberField)', []); - testErrorsAndWarnings('row var = acos(to_integer(true))', []); - - testErrorsAndWarnings('row var = acos(true)', [ - 'Argument of [acos] must be [number], found value [true] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | where acos(booleanField) > 0', [ - 'Argument of [acos] must be [number], found value [booleanField] type [boolean]', - ]); - + testErrorsAndWarnings('from a_index | eval var = acos(integerField)', []); + testErrorsAndWarnings('from a_index | eval acos(integerField)', []); testErrorsAndWarnings('from a_index | eval var = acos(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = acos(longField)', []); + testErrorsAndWarnings('from a_index | eval acos(longField)', []); + testErrorsAndWarnings('from a_index | eval var = acos(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval acos(unsignedLongField)', []); - testErrorsAndWarnings('from a_index | eval acos(booleanField)', [ - 'Argument of [acos] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval acos(doubleField, extraArg)', [ + 'Error: [acos] function expects exactly one argument, got 2.', ]); + + testErrorsAndWarnings('from a_index | sort acos(doubleField)', []); testErrorsAndWarnings('from a_index | eval acos(null)', []); testErrorsAndWarnings('row nullVar = null | eval acos(nullVar)', []); }); describe('asin', () => { + testErrorsAndWarnings('row var = asin(5.5)', []); + testErrorsAndWarnings('row asin(5.5)', []); + testErrorsAndWarnings('row var = asin(to_double(true))', []); testErrorsAndWarnings('row var = asin(5)', []); testErrorsAndWarnings('row asin(5)', []); - testErrorsAndWarnings('row var = asin(to_integer("a"))', []); + testErrorsAndWarnings('row var = asin(to_integer(true))', []); - testErrorsAndWarnings('row var = asin("a")', [ - 'Argument of [asin] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('row var = asin(true)', [ + 'Argument of [asin] must be [double], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where asin(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where asin(doubleField) > 0', []); - testErrorsAndWarnings('from a_index | where asin(stringField) > 0', [ - 'Argument of [asin] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | where asin(booleanField) > 0', [ + 'Argument of [asin] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval var = asin(numberField)', []); - testErrorsAndWarnings('from a_index | eval asin(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = asin(to_integer(stringField))', []); - - testErrorsAndWarnings('from a_index | eval asin(stringField)', [ - 'Argument of [asin] must be [number], found value [stringField] type [string]', - ]); + testErrorsAndWarnings('from a_index | where asin(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where asin(longField) > 0', []); + testErrorsAndWarnings('from a_index | where asin(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = asin(doubleField)', []); + testErrorsAndWarnings('from a_index | eval asin(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = asin(to_double(booleanField))', []); - testErrorsAndWarnings('from a_index | eval asin(numberField, extraArg)', [ - 'Error: [asin] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval asin(booleanField)', [ + 'Argument of [asin] must be [double], found value [booleanField] type [boolean]', ]); testErrorsAndWarnings('from a_index | eval var = asin(*)', [ 'Using wildcards (*) in asin is not allowed', ]); - testErrorsAndWarnings('from a_index | sort asin(numberField)', []); - testErrorsAndWarnings('row var = asin(to_integer(true))', []); - - testErrorsAndWarnings('row var = asin(true)', [ - 'Argument of [asin] must be [number], found value [true] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | where asin(booleanField) > 0', [ - 'Argument of [asin] must be [number], found value [booleanField] type [boolean]', - ]); - + testErrorsAndWarnings('from a_index | eval var = asin(integerField)', []); + testErrorsAndWarnings('from a_index | eval asin(integerField)', []); testErrorsAndWarnings('from a_index | eval var = asin(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = asin(longField)', []); + testErrorsAndWarnings('from a_index | eval asin(longField)', []); + testErrorsAndWarnings('from a_index | eval var = asin(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval asin(unsignedLongField)', []); - testErrorsAndWarnings('from a_index | eval asin(booleanField)', [ - 'Argument of [asin] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval asin(doubleField, extraArg)', [ + 'Error: [asin] function expects exactly one argument, got 2.', ]); + + testErrorsAndWarnings('from a_index | sort asin(doubleField)', []); testErrorsAndWarnings('from a_index | eval asin(null)', []); testErrorsAndWarnings('row nullVar = null | eval asin(nullVar)', []); }); describe('atan', () => { + testErrorsAndWarnings('row var = atan(5.5)', []); + testErrorsAndWarnings('row atan(5.5)', []); + testErrorsAndWarnings('row var = atan(to_double(true))', []); testErrorsAndWarnings('row var = atan(5)', []); testErrorsAndWarnings('row atan(5)', []); - testErrorsAndWarnings('row var = atan(to_integer("a"))', []); + testErrorsAndWarnings('row var = atan(to_integer(true))', []); - testErrorsAndWarnings('row var = atan("a")', [ - 'Argument of [atan] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('row var = atan(true)', [ + 'Argument of [atan] must be [double], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where atan(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where atan(doubleField) > 0', []); - testErrorsAndWarnings('from a_index | where atan(stringField) > 0', [ - 'Argument of [atan] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | where atan(booleanField) > 0', [ + 'Argument of [atan] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval var = atan(numberField)', []); - testErrorsAndWarnings('from a_index | eval atan(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = atan(to_integer(stringField))', []); - - testErrorsAndWarnings('from a_index | eval atan(stringField)', [ - 'Argument of [atan] must be [number], found value [stringField] type [string]', - ]); + testErrorsAndWarnings('from a_index | where atan(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where atan(longField) > 0', []); + testErrorsAndWarnings('from a_index | where atan(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = atan(doubleField)', []); + testErrorsAndWarnings('from a_index | eval atan(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = atan(to_double(booleanField))', []); - testErrorsAndWarnings('from a_index | eval atan(numberField, extraArg)', [ - 'Error: [atan] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval atan(booleanField)', [ + 'Argument of [atan] must be [double], found value [booleanField] type [boolean]', ]); testErrorsAndWarnings('from a_index | eval var = atan(*)', [ 'Using wildcards (*) in atan is not allowed', ]); - testErrorsAndWarnings('from a_index | sort atan(numberField)', []); - testErrorsAndWarnings('row var = atan(to_integer(true))', []); - - testErrorsAndWarnings('row var = atan(true)', [ - 'Argument of [atan] must be [number], found value [true] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | where atan(booleanField) > 0', [ - 'Argument of [atan] must be [number], found value [booleanField] type [boolean]', - ]); - + testErrorsAndWarnings('from a_index | eval var = atan(integerField)', []); + testErrorsAndWarnings('from a_index | eval atan(integerField)', []); testErrorsAndWarnings('from a_index | eval var = atan(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = atan(longField)', []); + testErrorsAndWarnings('from a_index | eval atan(longField)', []); + testErrorsAndWarnings('from a_index | eval var = atan(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval atan(unsignedLongField)', []); - testErrorsAndWarnings('from a_index | eval atan(booleanField)', [ - 'Argument of [atan] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval atan(doubleField, extraArg)', [ + 'Error: [atan] function expects exactly one argument, got 2.', ]); + + testErrorsAndWarnings('from a_index | sort atan(doubleField)', []); testErrorsAndWarnings('from a_index | eval atan(null)', []); testErrorsAndWarnings('row nullVar = null | eval atan(nullVar)', []); }); describe('atan2', () => { + testErrorsAndWarnings('row var = atan2(5.5, 5.5)', []); + testErrorsAndWarnings('row atan2(5.5, 5.5)', []); + testErrorsAndWarnings('row var = atan2(to_double(true), to_double(true))', []); + testErrorsAndWarnings('row var = atan2(5.5, 5)', []); + testErrorsAndWarnings('row atan2(5.5, 5)', []); + testErrorsAndWarnings('row var = atan2(to_double(true), to_integer(true))', []); + testErrorsAndWarnings('row var = atan2(to_double(true), 5)', []); + testErrorsAndWarnings('row var = atan2(5, 5.5)', []); + testErrorsAndWarnings('row atan2(5, 5.5)', []); + testErrorsAndWarnings('row var = atan2(to_integer(true), to_double(true))', []); testErrorsAndWarnings('row var = atan2(5, 5)', []); testErrorsAndWarnings('row atan2(5, 5)', []); - testErrorsAndWarnings('row var = atan2(to_integer("a"), to_integer("a"))', []); + testErrorsAndWarnings('row var = atan2(to_integer(true), to_integer(true))', []); + testErrorsAndWarnings('row var = atan2(to_integer(true), 5)', []); + testErrorsAndWarnings('row var = atan2(5, to_double(true))', []); + testErrorsAndWarnings('row var = atan2(5, to_integer(true))', []); - testErrorsAndWarnings('row var = atan2("a", "a")', [ - 'Argument of [atan2] must be [number], found value ["a"] type [string]', - 'Argument of [atan2] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('row var = atan2(true, true)', [ + 'Argument of [atan2] must be [double], found value [true] type [boolean]', + 'Argument of [atan2] must be [double], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where atan2(numberField, numberField) > 0', []); + testErrorsAndWarnings('from a_index | where atan2(doubleField, doubleField) > 0', []); - testErrorsAndWarnings('from a_index | where atan2(stringField, stringField) > 0', [ - 'Argument of [atan2] must be [number], found value [stringField] type [string]', - 'Argument of [atan2] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | where atan2(booleanField, booleanField) > 0', [ + 'Argument of [atan2] must be [double], found value [booleanField] type [boolean]', + 'Argument of [atan2] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval var = atan2(numberField, numberField)', []); - testErrorsAndWarnings('from a_index | eval atan2(numberField, numberField)', []); - + testErrorsAndWarnings('from a_index | where atan2(doubleField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where atan2(doubleField, longField) > 0', []); + testErrorsAndWarnings('from a_index | where atan2(doubleField, unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | where atan2(integerField, doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where atan2(integerField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where atan2(integerField, longField) > 0', []); testErrorsAndWarnings( - 'from a_index | eval var = atan2(to_integer(stringField), to_integer(stringField))', + 'from a_index | where atan2(integerField, unsignedLongField) > 0', [] ); + testErrorsAndWarnings('from a_index | where atan2(longField, doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where atan2(longField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where atan2(longField, longField) > 0', []); + testErrorsAndWarnings('from a_index | where atan2(longField, unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | where atan2(unsignedLongField, doubleField) > 0', []); + testErrorsAndWarnings( + 'from a_index | where atan2(unsignedLongField, integerField) > 0', + [] + ); + testErrorsAndWarnings('from a_index | where atan2(unsignedLongField, longField) > 0', []); + testErrorsAndWarnings( + 'from a_index | where atan2(unsignedLongField, unsignedLongField) > 0', + [] + ); + testErrorsAndWarnings('from a_index | eval var = atan2(doubleField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval atan2(doubleField, doubleField)', []); - testErrorsAndWarnings('from a_index | eval atan2(stringField, stringField)', [ - 'Argument of [atan2] must be [number], found value [stringField] type [string]', - 'Argument of [atan2] must be [number], found value [stringField] type [string]', - ]); - - testErrorsAndWarnings('from a_index | eval atan2(numberField, numberField, extraArg)', [ - 'Error: [atan2] function expects exactly 2 arguments, got 3.', - ]); - - testErrorsAndWarnings('from a_index | sort atan2(numberField, numberField)', []); - testErrorsAndWarnings('row var = atan2(to_integer(true), to_integer(true))', []); + testErrorsAndWarnings( + 'from a_index | eval var = atan2(to_double(booleanField), to_double(booleanField))', + [] + ); - testErrorsAndWarnings('row var = atan2(true, true)', [ - 'Argument of [atan2] must be [number], found value [true] type [boolean]', - 'Argument of [atan2] must be [number], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | eval atan2(booleanField, booleanField)', [ + 'Argument of [atan2] must be [double], found value [booleanField] type [boolean]', + 'Argument of [atan2] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where atan2(booleanField, booleanField) > 0', [ - 'Argument of [atan2] must be [number], found value [booleanField] type [boolean]', - 'Argument of [atan2] must be [number], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings('from a_index | eval var = atan2(doubleField, integerField)', []); + testErrorsAndWarnings('from a_index | eval atan2(doubleField, integerField)', []); testErrorsAndWarnings( - 'from a_index | eval var = atan2(to_integer(booleanField), to_integer(booleanField))', + 'from a_index | eval var = atan2(to_double(booleanField), to_integer(booleanField))', [] ); - testErrorsAndWarnings('from a_index | eval atan2(booleanField, booleanField)', [ - 'Argument of [atan2] must be [number], found value [booleanField] type [boolean]', - 'Argument of [atan2] must be [number], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | eval atan2(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval atan2(nullVar, nullVar)', []); - }); + testErrorsAndWarnings('from a_index | eval var = atan2(doubleField, longField)', []); + testErrorsAndWarnings('from a_index | eval atan2(doubleField, longField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = atan2(to_double(booleanField), longField)', + [] + ); + testErrorsAndWarnings( + 'from a_index | eval var = atan2(doubleField, unsignedLongField)', + [] + ); + testErrorsAndWarnings('from a_index | eval atan2(doubleField, unsignedLongField)', []); - describe('case', () => { - testErrorsAndWarnings('row var = case(true, "a")', []); - testErrorsAndWarnings('row case(true, "a")', []); - testErrorsAndWarnings('from a_index | eval var = case(booleanField, stringField)', []); - testErrorsAndWarnings('from a_index | eval case(booleanField, stringField)', []); - testErrorsAndWarnings('from a_index | sort case(booleanField, stringField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = atan2(to_double(booleanField), unsignedLongField)', + [] + ); - testErrorsAndWarnings('row var = case(to_cartesianpoint("POINT (30 10)"), true)', [ - 'Argument of [case] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', - ]); - testErrorsAndWarnings('from a_index | eval case(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval case(nullVar, nullVar)', []); - }); + testErrorsAndWarnings('from a_index | eval var = atan2(integerField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval atan2(integerField, doubleField)', []); - describe('ceil', () => { - testErrorsAndWarnings('row var = ceil(5)', []); - testErrorsAndWarnings('row ceil(5)', []); - testErrorsAndWarnings('row var = ceil(to_integer("a"))', []); + testErrorsAndWarnings( + 'from a_index | eval var = atan2(to_integer(booleanField), to_double(booleanField))', + [] + ); - testErrorsAndWarnings('row var = ceil("a")', [ - 'Argument of [ceil] must be [number], found value ["a"] type [string]', - ]); + testErrorsAndWarnings('from a_index | eval var = atan2(integerField, integerField)', []); + testErrorsAndWarnings('from a_index | eval atan2(integerField, integerField)', []); - testErrorsAndWarnings('from a_index | where ceil(numberField) > 0', []); + testErrorsAndWarnings( + 'from a_index | eval var = atan2(to_integer(booleanField), to_integer(booleanField))', + [] + ); - testErrorsAndWarnings('from a_index | where ceil(stringField) > 0', [ - 'Argument of [ceil] must be [number], found value [stringField] type [string]', - ]); + testErrorsAndWarnings('from a_index | eval var = atan2(integerField, longField)', []); + testErrorsAndWarnings('from a_index | eval atan2(integerField, longField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = atan2(to_integer(booleanField), longField)', + [] + ); + testErrorsAndWarnings( + 'from a_index | eval var = atan2(integerField, unsignedLongField)', + [] + ); + testErrorsAndWarnings('from a_index | eval atan2(integerField, unsignedLongField)', []); - testErrorsAndWarnings('from a_index | eval var = ceil(numberField)', []); - testErrorsAndWarnings('from a_index | eval ceil(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = ceil(to_integer(stringField))', []); + testErrorsAndWarnings( + 'from a_index | eval var = atan2(to_integer(booleanField), unsignedLongField)', + [] + ); - testErrorsAndWarnings('from a_index | eval ceil(stringField)', [ - 'Argument of [ceil] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | eval var = atan2(longField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval atan2(longField, doubleField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = atan2(longField, to_double(booleanField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = atan2(longField, integerField)', []); + testErrorsAndWarnings('from a_index | eval atan2(longField, integerField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = atan2(longField, to_integer(booleanField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = atan2(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval atan2(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval var = atan2(longField, unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval atan2(longField, unsignedLongField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = atan2(unsignedLongField, doubleField)', + [] + ); + testErrorsAndWarnings('from a_index | eval atan2(unsignedLongField, doubleField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = atan2(unsignedLongField, to_double(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = atan2(unsignedLongField, integerField)', + [] + ); + testErrorsAndWarnings('from a_index | eval atan2(unsignedLongField, integerField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = atan2(unsignedLongField, to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = atan2(unsignedLongField, longField)', []); + testErrorsAndWarnings('from a_index | eval atan2(unsignedLongField, longField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = atan2(unsignedLongField, unsignedLongField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval atan2(unsignedLongField, unsignedLongField)', + [] + ); + + testErrorsAndWarnings('from a_index | eval atan2(doubleField, doubleField, extraArg)', [ + 'Error: [atan2] function expects exactly 2 arguments, got 3.', ]); - testErrorsAndWarnings('from a_index | eval ceil(numberField, extraArg)', [ - 'Error: [ceil] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | sort atan2(doubleField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval atan2(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval atan2(nullVar, nullVar)', []); + }); + + describe('cbrt', () => { + testErrorsAndWarnings('row var = cbrt(5.5)', []); + testErrorsAndWarnings('row cbrt(5.5)', []); + testErrorsAndWarnings('row var = cbrt(to_double(true))', []); + testErrorsAndWarnings('row var = cbrt(5)', []); + testErrorsAndWarnings('row cbrt(5)', []); + testErrorsAndWarnings('row var = cbrt(to_integer(true))', []); + + testErrorsAndWarnings('row var = cbrt(true)', [ + 'Argument of [cbrt] must be [double], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval var = ceil(*)', [ - 'Using wildcards (*) in ceil is not allowed', + testErrorsAndWarnings('from a_index | where cbrt(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where cbrt(booleanField) > 0', [ + 'Argument of [cbrt] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where cbrt(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where cbrt(longField) > 0', []); + testErrorsAndWarnings('from a_index | where cbrt(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = cbrt(doubleField)', []); + testErrorsAndWarnings('from a_index | eval cbrt(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = cbrt(to_double(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval cbrt(booleanField)', [ + 'Argument of [cbrt] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = cbrt(*)', [ + 'Using wildcards (*) in cbrt is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = cbrt(integerField)', []); + testErrorsAndWarnings('from a_index | eval cbrt(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = cbrt(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = cbrt(longField)', []); + testErrorsAndWarnings('from a_index | eval cbrt(longField)', []); + testErrorsAndWarnings('from a_index | eval var = cbrt(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval cbrt(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval cbrt(doubleField, extraArg)', [ + 'Error: [cbrt] function expects exactly one argument, got 2.', ]); - testErrorsAndWarnings('from a_index | sort ceil(numberField)', []); + testErrorsAndWarnings('from a_index | sort cbrt(doubleField)', []); + testErrorsAndWarnings('from a_index | eval cbrt(null)', []); + testErrorsAndWarnings('row nullVar = null | eval cbrt(nullVar)', []); + }); + + describe('ceil', () => { + testErrorsAndWarnings('row var = ceil(5.5)', []); + testErrorsAndWarnings('row ceil(5.5)', []); + testErrorsAndWarnings('row var = ceil(to_double(true))', []); + testErrorsAndWarnings('row var = ceil(5)', []); + testErrorsAndWarnings('row ceil(5)', []); testErrorsAndWarnings('row var = ceil(to_integer(true))', []); testErrorsAndWarnings('row var = ceil(true)', [ - 'Argument of [ceil] must be [number], found value [true] type [boolean]', + 'Argument of [ceil] must be [double], found value [true] type [boolean]', ]); + testErrorsAndWarnings('from a_index | where ceil(doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where ceil(booleanField) > 0', [ - 'Argument of [ceil] must be [number], found value [booleanField] type [boolean]', + 'Argument of [ceil] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval var = ceil(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | where ceil(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where ceil(longField) > 0', []); + testErrorsAndWarnings('from a_index | where ceil(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = ceil(doubleField)', []); + testErrorsAndWarnings('from a_index | eval ceil(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = ceil(to_double(booleanField))', []); testErrorsAndWarnings('from a_index | eval ceil(booleanField)', [ - 'Argument of [ceil] must be [number], found value [booleanField] type [boolean]', + 'Argument of [ceil] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = ceil(*)', [ + 'Using wildcards (*) in ceil is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = ceil(integerField)', []); + testErrorsAndWarnings('from a_index | eval ceil(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = ceil(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = ceil(longField)', []); + testErrorsAndWarnings('from a_index | eval ceil(longField)', []); + testErrorsAndWarnings('from a_index | eval var = ceil(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval ceil(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval ceil(doubleField, extraArg)', [ + 'Error: [ceil] function expects exactly one argument, got 2.', ]); + + testErrorsAndWarnings('from a_index | sort ceil(doubleField)', []); testErrorsAndWarnings('from a_index | eval ceil(null)', []); testErrorsAndWarnings('row nullVar = null | eval ceil(nullVar)', []); }); @@ -2070,27 +2174,6 @@ describe('validation logic', () => { describe('cidr_match', () => { testErrorsAndWarnings('row var = cidr_match(to_ip("127.0.0.1"), "a")', []); testErrorsAndWarnings('row cidr_match(to_ip("127.0.0.1"), "a")', []); - testErrorsAndWarnings('row var = cidr_match(to_ip("a"), to_string("a"))', []); - - testErrorsAndWarnings('row var = cidr_match("a", 5)', [ - 'Argument of [cidr_match] must be [ip], found value ["a"] type [string]', - 'Argument of [cidr_match] must be [string], found value [5] type [number]', - ]); - - testErrorsAndWarnings('from a_index | eval var = cidr_match(ipField, stringField)', []); - testErrorsAndWarnings('from a_index | eval cidr_match(ipField, stringField)', []); - - testErrorsAndWarnings( - 'from a_index | eval var = cidr_match(to_ip(stringField), to_string(stringField))', - [] - ); - - testErrorsAndWarnings('from a_index | eval cidr_match(stringField, numberField)', [ - 'Argument of [cidr_match] must be [ip], found value [stringField] type [string]', - 'Argument of [cidr_match] must be [string], found value [numberField] type [number]', - ]); - - testErrorsAndWarnings('from a_index | sort cidr_match(ipField, stringField)', []); testErrorsAndWarnings( 'row var = cidr_match(to_ip(to_ip("127.0.0.1")), to_string(true))', [] @@ -2098,9 +2181,12 @@ describe('validation logic', () => { testErrorsAndWarnings('row var = cidr_match(true, true)', [ 'Argument of [cidr_match] must be [ip], found value [true] type [boolean]', - 'Argument of [cidr_match] must be [string], found value [true] type [boolean]', + 'Argument of [cidr_match] must be [keyword], found value [true] type [boolean]', ]); + testErrorsAndWarnings('from a_index | eval var = cidr_match(ipField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval cidr_match(ipField, keywordField)', []); + testErrorsAndWarnings( 'from a_index | eval var = cidr_match(to_ip(ipField), to_string(booleanField))', [] @@ -2108,181 +2194,146 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | eval cidr_match(booleanField, booleanField)', [ 'Argument of [cidr_match] must be [ip], found value [booleanField] type [boolean]', - 'Argument of [cidr_match] must be [string], found value [booleanField] type [boolean]', + 'Argument of [cidr_match] must be [keyword], found value [booleanField] type [boolean]', ]); + + testErrorsAndWarnings('from a_index | eval var = cidr_match(ipField, textField)', []); + testErrorsAndWarnings('from a_index | eval cidr_match(ipField, textField)', []); + testErrorsAndWarnings('from a_index | sort cidr_match(ipField, keywordField)', []); testErrorsAndWarnings('from a_index | eval cidr_match(null, null)', []); testErrorsAndWarnings('row nullVar = null | eval cidr_match(nullVar, nullVar)', []); }); describe('coalesce', () => { - testErrorsAndWarnings('row var = coalesce(5)', []); - testErrorsAndWarnings('row coalesce(5)', []); - testErrorsAndWarnings('row var = coalesce(to_integer(true))', []); - testErrorsAndWarnings('row var = coalesce(5, 5)', []); - testErrorsAndWarnings('row coalesce(5, 5)', []); - testErrorsAndWarnings('row var = coalesce(to_integer(true), to_integer(true))', []); - testErrorsAndWarnings('row var = coalesce(now())', []); - testErrorsAndWarnings('row coalesce(now())', []); - testErrorsAndWarnings('row var = coalesce(to_datetime(now()))', []); - testErrorsAndWarnings('row var = coalesce(now(), now())', []); - testErrorsAndWarnings('row coalesce(now(), now())', []); - testErrorsAndWarnings('row var = coalesce(to_datetime(now()), to_datetime(now()))', []); - testErrorsAndWarnings('row var = coalesce("a")', []); - testErrorsAndWarnings('row coalesce("a")', []); - testErrorsAndWarnings('row var = coalesce(to_string(true))', []); - testErrorsAndWarnings('row var = coalesce("a", "a")', []); - testErrorsAndWarnings('row coalesce("a", "a")', []); - testErrorsAndWarnings('row var = coalesce(to_string(true), to_string(true))', []); testErrorsAndWarnings('row var = coalesce(true)', []); testErrorsAndWarnings('row coalesce(true)', []); testErrorsAndWarnings('row var = coalesce(to_boolean(true))', []); testErrorsAndWarnings('row var = coalesce(true, true)', []); testErrorsAndWarnings('row coalesce(true, true)', []); testErrorsAndWarnings('row var = coalesce(to_boolean(true), to_boolean(true))', []); - testErrorsAndWarnings('row var = coalesce(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row coalesce(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row var = coalesce(to_ip(to_ip("127.0.0.1")))', []); - testErrorsAndWarnings('row var = coalesce(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row coalesce(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); - - testErrorsAndWarnings( - 'row var = coalesce(to_ip(to_ip("127.0.0.1")), to_ip(to_ip("127.0.0.1")))', - [] - ); - - testErrorsAndWarnings('row var = coalesce(to_cartesianpoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row coalesce(to_cartesianpoint("POINT (30 10)"))', []); - - testErrorsAndWarnings( - 'row var = coalesce(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', - [] - ); - - testErrorsAndWarnings( - 'row var = coalesce(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', - [] - ); + testErrorsAndWarnings('row var = coalesce(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row coalesce(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', + ]); testErrorsAndWarnings( - 'row coalesce(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', - [] + 'row var = coalesce(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] ); testErrorsAndWarnings( - 'row var = coalesce(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'row var = coalesce(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', [] ); - testErrorsAndWarnings('row var = coalesce(to_cartesianshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row coalesce(to_cartesianshape("POINT (30 10)"))', []); - testErrorsAndWarnings( - 'row var = coalesce(to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'row coalesce(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', [] ); testErrorsAndWarnings( - 'row var = coalesce(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', - [] + 'row var = coalesce(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] ); testErrorsAndWarnings( - 'row coalesce(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'row var = coalesce(to_datetime("2021-01-01T00:00:00Z"), to_datetime("2021-01-01T00:00:00Z"))', [] ); testErrorsAndWarnings( - 'row var = coalesce(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'row coalesce(to_datetime("2021-01-01T00:00:00Z"), to_datetime("2021-01-01T00:00:00Z"))', [] ); - testErrorsAndWarnings('row var = coalesce(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row coalesce(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = coalesce(to_geopoint(to_geopoint("POINT (30 10)")))', []); - testErrorsAndWarnings( - 'row var = coalesce(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'row var = coalesce(to_datetime(to_datetime("2021-01-01T00:00:00Z")), to_datetime(to_datetime("2021-01-01T00:00:00Z")))', [] ); + testErrorsAndWarnings('row var = coalesce(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row coalesce(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', + ]); testErrorsAndWarnings( - 'row coalesce(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', - [] + 'row var = coalesce(to_geopoint(geoPointField), to_geopoint(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] ); testErrorsAndWarnings( - 'row var = coalesce(to_geopoint(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', + 'row var = coalesce(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', [] ); - testErrorsAndWarnings('row var = coalesce(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row coalesce(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = coalesce(to_geoshape(to_geopoint("POINT (30 10)")))', []); - testErrorsAndWarnings( - 'row var = coalesce(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'row coalesce(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', [] ); testErrorsAndWarnings( - 'row coalesce(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', - [] + 'row var = coalesce(to_geoshape(geoPointField), to_geoshape(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] ); + testErrorsAndWarnings('row var = coalesce(5)', []); + testErrorsAndWarnings('row coalesce(5)', []); + testErrorsAndWarnings('row var = coalesce(to_integer(true))', []); + testErrorsAndWarnings('row var = coalesce(5, 5)', []); + testErrorsAndWarnings('row coalesce(5, 5)', []); + testErrorsAndWarnings('row var = coalesce(to_integer(true), to_integer(true))', []); + testErrorsAndWarnings('row var = coalesce(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row coalesce(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); testErrorsAndWarnings( - 'row var = coalesce(to_geoshape(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', + 'row var = coalesce(to_ip(to_ip("127.0.0.1")), to_ip(to_ip("127.0.0.1")))', [] ); - testErrorsAndWarnings('row var = coalesce(to_version("1.0.0"))', []); - testErrorsAndWarnings('row coalesce(to_version("1.0.0"))', []); - testErrorsAndWarnings('row var = coalesce(to_version("a"))', []); + testErrorsAndWarnings('row var = coalesce("a")', []); + testErrorsAndWarnings('row coalesce("a")', []); + testErrorsAndWarnings('row var = coalesce(to_string(true))', []); + testErrorsAndWarnings('row var = coalesce("a", "a")', []); + testErrorsAndWarnings('row coalesce("a", "a")', []); + testErrorsAndWarnings('row var = coalesce(to_string(true), to_string(true))', []); testErrorsAndWarnings('row var = coalesce(to_version("1.0.0"), to_version("1.0.0"))', []); testErrorsAndWarnings('row coalesce(to_version("1.0.0"), to_version("1.0.0"))', []); testErrorsAndWarnings('row var = coalesce(to_version("a"), to_version("a"))', []); - testErrorsAndWarnings('from a_index | where coalesce(numberField) > 0', []); - testErrorsAndWarnings('from a_index | where coalesce(numberField, numberField) > 0', []); - testErrorsAndWarnings('from a_index | where length(coalesce(stringField)) > 0', []); - testErrorsAndWarnings( - 'from a_index | where length(coalesce(stringField, stringField)) > 0', - [] - ); - testErrorsAndWarnings('from a_index | eval var = coalesce(numberField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = coalesce(to_integer(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = coalesce(numberField, numberField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(numberField, numberField)', []); - testErrorsAndWarnings( - 'from a_index | eval var = coalesce(to_integer(booleanField), to_integer(booleanField))', - [] - ); + testErrorsAndWarnings('row var = coalesce(5.5, 5.5)', []); - testErrorsAndWarnings('from a_index | eval var = coalesce(dateField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = coalesce(to_datetime(dateField))', []); - testErrorsAndWarnings('from a_index | eval var = coalesce(dateField, dateField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(dateField, dateField)', []); + testErrorsAndWarnings('from a_index | where coalesce(integerField) > 0', []); - testErrorsAndWarnings( - 'from a_index | eval var = coalesce(to_datetime(dateField), to_datetime(dateField))', - [] - ); + testErrorsAndWarnings('from a_index | where coalesce(counterDoubleField) > 0', [ + 'Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]', + ]); - testErrorsAndWarnings('from a_index | eval var = coalesce(stringField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(stringField)', []); - testErrorsAndWarnings('from a_index | eval var = coalesce(to_string(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = coalesce(stringField, stringField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(stringField, stringField)', []); + testErrorsAndWarnings('from a_index | where coalesce(integerField, integerField) > 0', []); testErrorsAndWarnings( - 'from a_index | eval var = coalesce(to_string(booleanField), to_string(booleanField))', - [] + 'from a_index | where coalesce(counterDoubleField, counterDoubleField) > 0', + [ + 'Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]', + 'Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]', + ] ); + testErrorsAndWarnings('from a_index | where coalesce(longField) > 0', []); + testErrorsAndWarnings('from a_index | where coalesce(longField, longField) > 0', []); testErrorsAndWarnings('from a_index | eval var = coalesce(booleanField)', []); testErrorsAndWarnings('from a_index | eval coalesce(booleanField)', []); testErrorsAndWarnings('from a_index | eval var = coalesce(to_boolean(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval coalesce(counterDoubleField)', [ + 'Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]', + ]); + testErrorsAndWarnings('from a_index | eval var = coalesce(booleanField, booleanField)', []); testErrorsAndWarnings('from a_index | eval coalesce(booleanField, booleanField)', []); @@ -2291,21 +2342,12 @@ describe('validation logic', () => { [] ); - testErrorsAndWarnings('from a_index | eval var = coalesce(ipField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(ipField)', []); - testErrorsAndWarnings('from a_index | eval var = coalesce(to_ip(ipField))', []); - testErrorsAndWarnings('from a_index | eval var = coalesce(ipField, ipField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(ipField, ipField)', []); - testErrorsAndWarnings( - 'from a_index | eval var = coalesce(to_ip(ipField), to_ip(ipField))', - [] - ); - testErrorsAndWarnings('from a_index | eval var = coalesce(cartesianPointField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(cartesianPointField)', []); - testErrorsAndWarnings( - 'from a_index | eval var = coalesce(to_cartesianpoint(cartesianPointField))', - [] + 'from a_index | eval coalesce(counterDoubleField, counterDoubleField)', + [ + 'Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]', + 'Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]', + ] ); testErrorsAndWarnings( @@ -2323,32 +2365,29 @@ describe('validation logic', () => { [] ); - testErrorsAndWarnings('from a_index | eval var = coalesce(cartesianShapeField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(cartesianShapeField)', []); - testErrorsAndWarnings( - 'from a_index | eval var = coalesce(to_cartesianshape(cartesianPointField))', + 'from a_index | eval var = coalesce(cartesianShapeField, cartesianShapeField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = coalesce(cartesianShapeField, cartesianShapeField)', + 'from a_index | eval coalesce(cartesianShapeField, cartesianShapeField)', [] ); testErrorsAndWarnings( - 'from a_index | eval coalesce(cartesianShapeField, cartesianShapeField)', + 'from a_index | eval var = coalesce(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', [] ); + testErrorsAndWarnings('from a_index | eval var = coalesce(dateField, dateField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(dateField, dateField)', []); + testErrorsAndWarnings( - 'from a_index | eval var = coalesce(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + 'from a_index | eval var = coalesce(to_datetime(dateField), to_datetime(dateField))', [] ); - testErrorsAndWarnings('from a_index | eval var = coalesce(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval var = coalesce(to_geopoint(geoPointField))', []); testErrorsAndWarnings( 'from a_index | eval var = coalesce(geoPointField, geoPointField)', [] @@ -2360,9 +2399,6 @@ describe('validation logic', () => { [] ); - testErrorsAndWarnings('from a_index | eval var = coalesce(geoShapeField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(geoShapeField)', []); - testErrorsAndWarnings('from a_index | eval var = coalesce(to_geoshape(geoPointField))', []); testErrorsAndWarnings( 'from a_index | eval var = coalesce(geoShapeField, geoShapeField)', [] @@ -2374,71 +2410,73 @@ describe('validation logic', () => { [] ); - testErrorsAndWarnings('from a_index | eval var = coalesce(versionField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(versionField)', []); - testErrorsAndWarnings('from a_index | eval var = coalesce(to_version(stringField))', []); - testErrorsAndWarnings('from a_index | eval var = coalesce(versionField, versionField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(versionField, versionField)', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(integerField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(integerField, integerField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(integerField, integerField)', []); testErrorsAndWarnings( - 'from a_index | eval var = coalesce(to_version(stringField), to_version(stringField))', + 'from a_index | eval var = coalesce(to_integer(booleanField), to_integer(booleanField))', [] ); - testErrorsAndWarnings('from a_index | sort coalesce(numberField)', []); - testErrorsAndWarnings('from a_index | eval coalesce(null)', []); - testErrorsAndWarnings('row nullVar = null | eval coalesce(nullVar)', []); - testErrorsAndWarnings('from a_index | sort coalesce(booleanField)', []); - }); + testErrorsAndWarnings('from a_index | eval var = coalesce(ipField, ipField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(ipField, ipField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = coalesce(to_ip(ipField), to_ip(ipField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = coalesce(keywordField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(keywordField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(keywordField, keywordField)', []); - describe('concat', () => { - testErrorsAndWarnings('row var = concat("a", "a")', []); - testErrorsAndWarnings('row concat("a", "a")', []); - testErrorsAndWarnings('row var = concat(to_string("a"), to_string("a"))', []); + testErrorsAndWarnings( + 'from a_index | eval var = coalesce(to_string(booleanField), to_string(booleanField))', + [] + ); - testErrorsAndWarnings('row var = concat(5, 5)', [ - 'Argument of [concat] must be [string], found value [5] type [number]', - 'Argument of [concat] must be [string], found value [5] type [number]', - ]); + testErrorsAndWarnings('from a_index | eval var = coalesce(longField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(longField)', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(textField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(textField)', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(textField, textField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(textField, textField)', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(versionField, versionField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(versionField, versionField)', []); testErrorsAndWarnings( - 'from a_index | where length(concat(stringField, stringField)) > 0', + 'from a_index | eval var = coalesce(to_version(keywordField), to_version(keywordField))', [] ); - testErrorsAndWarnings('from a_index | where length(concat(numberField, numberField)) > 0', [ - 'Argument of [concat] must be [string], found value [numberField] type [number]', - 'Argument of [concat] must be [string], found value [numberField] type [number]', - ]); - - testErrorsAndWarnings('from a_index | eval var = concat(stringField, stringField)', []); - testErrorsAndWarnings('from a_index | eval concat(stringField, stringField)', []); + testErrorsAndWarnings('from a_index | sort coalesce(booleanField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(null)', []); + testErrorsAndWarnings('row nullVar = null | eval coalesce(nullVar)', []); + testErrorsAndWarnings('from a_index | eval coalesce("2022", "2022")', []); testErrorsAndWarnings( - 'from a_index | eval var = concat(to_string(stringField), to_string(stringField))', + 'from a_index | eval coalesce(concat("20", "22"), concat("20", "22"))', [] ); + }); - testErrorsAndWarnings('from a_index | eval concat(numberField, numberField)', [ - 'Argument of [concat] must be [string], found value [numberField] type [number]', - 'Argument of [concat] must be [string], found value [numberField] type [number]', - ]); - - testErrorsAndWarnings('from a_index | sort concat(stringField, stringField)', []); + describe('concat', () => { + testErrorsAndWarnings('row var = concat("a", "a")', []); + testErrorsAndWarnings('row concat("a", "a")', []); testErrorsAndWarnings('row var = concat(to_string(true), to_string(true))', []); testErrorsAndWarnings('row var = concat(true, true)', [ - 'Argument of [concat] must be [string], found value [true] type [boolean]', - 'Argument of [concat] must be [string], found value [true] type [boolean]', + 'Argument of [concat] must be [keyword], found value [true] type [boolean]', + 'Argument of [concat] must be [keyword], found value [true] type [boolean]', ]); - testErrorsAndWarnings( - 'from a_index | where length(concat(booleanField, booleanField)) > 0', - [ - 'Argument of [concat] must be [string], found value [booleanField] type [boolean]', - 'Argument of [concat] must be [string], found value [booleanField] type [boolean]', - ] - ); + testErrorsAndWarnings('from a_index | eval var = concat(keywordField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval concat(keywordField, keywordField)', []); testErrorsAndWarnings( 'from a_index | eval var = concat(to_string(booleanField), to_string(booleanField))', @@ -2446,169 +2484,245 @@ describe('validation logic', () => { ); testErrorsAndWarnings('from a_index | eval concat(booleanField, booleanField)', [ - 'Argument of [concat] must be [string], found value [booleanField] type [boolean]', - 'Argument of [concat] must be [string], found value [booleanField] type [boolean]', + 'Argument of [concat] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [concat] must be [keyword], found value [booleanField] type [boolean]', ]); + + testErrorsAndWarnings('from a_index | eval var = concat(keywordField, textField)', []); + testErrorsAndWarnings('from a_index | eval concat(keywordField, textField)', []); + testErrorsAndWarnings('from a_index | eval var = concat(textField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval concat(textField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = concat(textField, textField)', []); + testErrorsAndWarnings('from a_index | eval concat(textField, textField)', []); + testErrorsAndWarnings('from a_index | sort concat(keywordField, keywordField)', []); testErrorsAndWarnings('from a_index | eval concat(null, null)', []); testErrorsAndWarnings('row nullVar = null | eval concat(nullVar, nullVar)', []); }); describe('cos', () => { + testErrorsAndWarnings('row var = cos(5.5)', []); + testErrorsAndWarnings('row cos(5.5)', []); + testErrorsAndWarnings('row var = cos(to_double(true))', []); testErrorsAndWarnings('row var = cos(5)', []); testErrorsAndWarnings('row cos(5)', []); - testErrorsAndWarnings('row var = cos(to_integer("a"))', []); + testErrorsAndWarnings('row var = cos(to_integer(true))', []); - testErrorsAndWarnings('row var = cos("a")', [ - 'Argument of [cos] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('row var = cos(true)', [ + 'Argument of [cos] must be [double], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where cos(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where cos(doubleField) > 0', []); - testErrorsAndWarnings('from a_index | where cos(stringField) > 0', [ - 'Argument of [cos] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | where cos(booleanField) > 0', [ + 'Argument of [cos] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval var = cos(numberField)', []); - testErrorsAndWarnings('from a_index | eval cos(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = cos(to_integer(stringField))', []); - - testErrorsAndWarnings('from a_index | eval cos(stringField)', [ - 'Argument of [cos] must be [number], found value [stringField] type [string]', - ]); + testErrorsAndWarnings('from a_index | where cos(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where cos(longField) > 0', []); + testErrorsAndWarnings('from a_index | where cos(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = cos(doubleField)', []); + testErrorsAndWarnings('from a_index | eval cos(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = cos(to_double(booleanField))', []); - testErrorsAndWarnings('from a_index | eval cos(numberField, extraArg)', [ - 'Error: [cos] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval cos(booleanField)', [ + 'Argument of [cos] must be [double], found value [booleanField] type [boolean]', ]); testErrorsAndWarnings('from a_index | eval var = cos(*)', [ 'Using wildcards (*) in cos is not allowed', ]); - testErrorsAndWarnings('from a_index | sort cos(numberField)', []); - testErrorsAndWarnings('row var = cos(to_integer(true))', []); - - testErrorsAndWarnings('row var = cos(true)', [ - 'Argument of [cos] must be [number], found value [true] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | where cos(booleanField) > 0', [ - 'Argument of [cos] must be [number], found value [booleanField] type [boolean]', - ]); - + testErrorsAndWarnings('from a_index | eval var = cos(integerField)', []); + testErrorsAndWarnings('from a_index | eval cos(integerField)', []); testErrorsAndWarnings('from a_index | eval var = cos(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = cos(longField)', []); + testErrorsAndWarnings('from a_index | eval cos(longField)', []); + testErrorsAndWarnings('from a_index | eval var = cos(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval cos(unsignedLongField)', []); - testErrorsAndWarnings('from a_index | eval cos(booleanField)', [ - 'Argument of [cos] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval cos(doubleField, extraArg)', [ + 'Error: [cos] function expects exactly one argument, got 2.', ]); + + testErrorsAndWarnings('from a_index | sort cos(doubleField)', []); testErrorsAndWarnings('from a_index | eval cos(null)', []); testErrorsAndWarnings('row nullVar = null | eval cos(nullVar)', []); }); describe('cosh', () => { + testErrorsAndWarnings('row var = cosh(5.5)', []); + testErrorsAndWarnings('row cosh(5.5)', []); + testErrorsAndWarnings('row var = cosh(to_double(true))', []); testErrorsAndWarnings('row var = cosh(5)', []); testErrorsAndWarnings('row cosh(5)', []); - testErrorsAndWarnings('row var = cosh(to_integer("a"))', []); + testErrorsAndWarnings('row var = cosh(to_integer(true))', []); - testErrorsAndWarnings('row var = cosh("a")', [ - 'Argument of [cosh] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('row var = cosh(true)', [ + 'Argument of [cosh] must be [double], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where cosh(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where cosh(doubleField) > 0', []); - testErrorsAndWarnings('from a_index | where cosh(stringField) > 0', [ - 'Argument of [cosh] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | where cosh(booleanField) > 0', [ + 'Argument of [cosh] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval var = cosh(numberField)', []); - testErrorsAndWarnings('from a_index | eval cosh(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = cosh(to_integer(stringField))', []); - - testErrorsAndWarnings('from a_index | eval cosh(stringField)', [ - 'Argument of [cosh] must be [number], found value [stringField] type [string]', - ]); + testErrorsAndWarnings('from a_index | where cosh(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where cosh(longField) > 0', []); + testErrorsAndWarnings('from a_index | where cosh(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = cosh(doubleField)', []); + testErrorsAndWarnings('from a_index | eval cosh(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = cosh(to_double(booleanField))', []); - testErrorsAndWarnings('from a_index | eval cosh(numberField, extraArg)', [ - 'Error: [cosh] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval cosh(booleanField)', [ + 'Argument of [cosh] must be [double], found value [booleanField] type [boolean]', ]); testErrorsAndWarnings('from a_index | eval var = cosh(*)', [ 'Using wildcards (*) in cosh is not allowed', ]); - testErrorsAndWarnings('from a_index | sort cosh(numberField)', []); - testErrorsAndWarnings('row var = cosh(to_integer(true))', []); - - testErrorsAndWarnings('row var = cosh(true)', [ - 'Argument of [cosh] must be [number], found value [true] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | where cosh(booleanField) > 0', [ - 'Argument of [cosh] must be [number], found value [booleanField] type [boolean]', - ]); - + testErrorsAndWarnings('from a_index | eval var = cosh(integerField)', []); + testErrorsAndWarnings('from a_index | eval cosh(integerField)', []); testErrorsAndWarnings('from a_index | eval var = cosh(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = cosh(longField)', []); + testErrorsAndWarnings('from a_index | eval cosh(longField)', []); + testErrorsAndWarnings('from a_index | eval var = cosh(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval cosh(unsignedLongField)', []); - testErrorsAndWarnings('from a_index | eval cosh(booleanField)', [ - 'Argument of [cosh] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval cosh(doubleField, extraArg)', [ + 'Error: [cosh] function expects exactly one argument, got 2.', ]); + + testErrorsAndWarnings('from a_index | sort cosh(doubleField)', []); testErrorsAndWarnings('from a_index | eval cosh(null)', []); testErrorsAndWarnings('row nullVar = null | eval cosh(nullVar)', []); }); - describe('date_extract', () => { - testErrorsAndWarnings('row var = date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", now())', []); - testErrorsAndWarnings('row date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", now())', []); + describe('date_diff', () => { testErrorsAndWarnings( - 'from a_index | eval date_extract("SOME_RANDOM_STRING", now())', - [], + 'from a_index | eval var = date_diff("year", dateField, dateField)', + [] + ); + + testErrorsAndWarnings('from a_index | eval date_diff("year", dateField, dateField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = date_diff("year", to_datetime(dateField), to_datetime(dateField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval date_diff(booleanField, booleanField, booleanField)', [ - 'Invalid option ["SOME_RANDOM_STRING"] for date_extract. Supported options: ["ALIGNED_DAY_OF_WEEK_IN_MONTH", "ALIGNED_DAY_OF_WEEK_IN_YEAR", "ALIGNED_WEEK_OF_MONTH", "ALIGNED_WEEK_OF_YEAR", "AMPM_OF_DAY", "CLOCK_HOUR_OF_AMPM", "CLOCK_HOUR_OF_DAY", "DAY_OF_MONTH", "DAY_OF_WEEK", "DAY_OF_YEAR", "EPOCH_DAY", "ERA", "HOUR_OF_AMPM", "HOUR_OF_DAY", "INSTANT_SECONDS", "MICRO_OF_DAY", "MICRO_OF_SECOND", "MILLI_OF_DAY", "MILLI_OF_SECOND", "MINUTE_OF_DAY", "MINUTE_OF_HOUR", "MONTH_OF_YEAR", "NANO_OF_DAY", "NANO_OF_SECOND", "OFFSET_SECONDS", "PROLEPTIC_MONTH", "SECOND_OF_DAY", "SECOND_OF_MINUTE", "YEAR", "YEAR_OF_ERA"].', + 'Argument of [date_diff] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [date_diff] must be [date], found value [booleanField] type [boolean]', + 'Argument of [date_diff] must be [date], found value [booleanField] type [boolean]', ] ); testErrorsAndWarnings( - 'from a_index | eval var = date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", dateField)', + 'from a_index | eval var = date_diff(textField, dateField, dateField)', [] ); + testErrorsAndWarnings('from a_index | eval date_diff(textField, dateField, dateField)', []); + testErrorsAndWarnings( - 'from a_index | eval date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", dateField)', + 'from a_index | eval var = date_diff(to_string(booleanField), to_datetime(dateField), to_datetime(dateField))', [] ); testErrorsAndWarnings( - 'from a_index | eval var = date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", to_datetime(stringField))', - [] + 'from a_index | eval date_diff("year", dateField, dateField, extraArg)', + ['Error: [date_diff] function expects exactly 3 arguments, got 4.'] ); - testErrorsAndWarnings('from a_index | eval date_extract(stringField, stringField)', [ - 'Argument of [date_extract] must be [date], found value [stringField] type [string]', - ]); + testErrorsAndWarnings('from a_index | sort date_diff("year", dateField, dateField)', []); + + testErrorsAndWarnings('from a_index | eval date_diff(null, null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval date_diff(nullVar, nullVar, nullVar)', []); + testErrorsAndWarnings('from a_index | eval date_diff("year", "2022", "2022")', []); testErrorsAndWarnings( - 'from a_index | eval date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", dateField, extraArg)', - ['Error: [date_extract] function expects exactly 2 arguments, got 3.'] + 'from a_index | eval date_diff("year", concat("20", "22"), concat("20", "22"))', + [ + 'Argument of [date_diff] must be [date], found value [concat("20","22")] type [keyword]', + 'Argument of [date_diff] must be [date], found value [concat("20","22")] type [keyword]', + ] ); + testErrorsAndWarnings('from a_index | eval date_diff(textField, "2022", "2022")', []); + testErrorsAndWarnings( - 'from a_index | sort date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", dateField)', + 'from a_index | eval date_diff(textField, concat("20", "22"), concat("20", "22"))', + [ + 'Argument of [date_diff] must be [date], found value [concat("20","22")] type [keyword]', + 'Argument of [date_diff] must be [date], found value [concat("20","22")] type [keyword]', + ] + ); + }); + + describe('date_extract', () => { + testErrorsAndWarnings( + 'row var = date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", to_datetime("2021-01-01T00:00:00Z"))', + [] + ); + + testErrorsAndWarnings( + 'row date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", to_datetime("2021-01-01T00:00:00Z"))', + [] + ); + + testErrorsAndWarnings( + 'row var = date_extract("a", to_datetime("2021-01-01T00:00:00Z"))', [] ); + testErrorsAndWarnings('row date_extract("a", to_datetime("2021-01-01T00:00:00Z"))', []); testErrorsAndWarnings('row var = date_extract(true, true)', [ - 'Argument of [date_extract] must be [string], found value [true] type [boolean]', + 'Argument of [date_extract] must be [keyword], found value [true] type [boolean]', 'Argument of [date_extract] must be [date], found value [true] type [boolean]', ]); + testErrorsAndWarnings( + 'from a_index | eval var = date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", dateField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", dateField)', + [] + ); + testErrorsAndWarnings( 'from a_index | eval var = date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", to_datetime(dateField))', [] ); testErrorsAndWarnings('from a_index | eval date_extract(booleanField, booleanField)', [ - 'Argument of [date_extract] must be [string], found value [booleanField] type [boolean]', + 'Argument of [date_extract] must be [keyword], found value [booleanField] type [boolean]', 'Argument of [date_extract] must be [date], found value [booleanField] type [boolean]', ]); + + testErrorsAndWarnings('from a_index | eval var = date_extract(textField, dateField)', []); + testErrorsAndWarnings('from a_index | eval date_extract(textField, dateField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = date_extract(to_string(booleanField), to_datetime(dateField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", dateField, extraArg)', + ['Error: [date_extract] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | sort date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", dateField)', + [] + ); + testErrorsAndWarnings('from a_index | eval date_extract(null, null)', []); testErrorsAndWarnings('row nullVar = null | eval date_extract(nullVar, nullVar)', []); @@ -2620,134 +2734,128 @@ describe('validation logic', () => { testErrorsAndWarnings( 'from a_index | eval date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", concat("20", "22"))', [ - 'Argument of [date_extract] must be [date], found value [concat("20","22")] type [string]', + 'Argument of [date_extract] must be [date], found value [concat("20","22")] type [keyword]', ] ); + + testErrorsAndWarnings('from a_index | eval date_extract(textField, "2022")', []); + testErrorsAndWarnings('from a_index | eval date_extract(textField, concat("20", "22"))', [ + 'Argument of [date_extract] must be [date], found value [concat("20","22")] type [keyword]', + ]); }); describe('date_format', () => { - testErrorsAndWarnings('row var = date_format("a", now())', []); - testErrorsAndWarnings('row date_format("a", now())', []); - testErrorsAndWarnings('from a_index | eval var = date_format(stringField, dateField)', []); - testErrorsAndWarnings('from a_index | eval date_format(stringField, dateField)', []); - testErrorsAndWarnings( - 'from a_index | eval var = date_format(to_string(stringField), to_datetime(stringField))', + 'row var = date_format("a", to_datetime("2021-01-01T00:00:00Z"))', [] ); - - testErrorsAndWarnings('from a_index | eval date_format(stringField, numberField)', [ - 'Argument of [date_format] must be [date], found value [numberField] type [number]', - ]); - - testErrorsAndWarnings('from a_index | eval date_format(stringField, dateField, extraArg)', [ - 'Error: [date_format] function expects no more than 2 arguments, got 3.', - ]); - - testErrorsAndWarnings('from a_index | sort date_format(stringField, dateField)', []); + testErrorsAndWarnings('row date_format("a", to_datetime("2021-01-01T00:00:00Z"))', []); testErrorsAndWarnings('row var = date_format(true, true)', [ - 'Argument of [date_format] must be [string], found value [true] type [boolean]', + 'Argument of [date_format] must be [keyword], found value [true] type [boolean]', 'Argument of [date_format] must be [date], found value [true] type [boolean]', ]); + testErrorsAndWarnings('from a_index | eval var = date_format(keywordField, dateField)', []); + testErrorsAndWarnings('from a_index | eval date_format(keywordField, dateField)', []); + testErrorsAndWarnings( 'from a_index | eval var = date_format(to_string(booleanField), to_datetime(dateField))', [] ); testErrorsAndWarnings('from a_index | eval date_format(booleanField, booleanField)', [ - 'Argument of [date_format] must be [string], found value [booleanField] type [boolean]', + 'Argument of [date_format] must be [keyword], found value [booleanField] type [boolean]', 'Argument of [date_format] must be [date], found value [booleanField] type [boolean]', ]); + + testErrorsAndWarnings('from a_index | eval var = date_format(textField, dateField)', []); + testErrorsAndWarnings('from a_index | eval date_format(textField, dateField)', []); + + testErrorsAndWarnings( + 'from a_index | eval date_format(keywordField, dateField, extraArg)', + ['Error: [date_format] function expects no more than 2 arguments, got 3.'] + ); + + testErrorsAndWarnings('from a_index | sort date_format(keywordField, dateField)', []); testErrorsAndWarnings('from a_index | eval date_format(null, null)', []); testErrorsAndWarnings('row nullVar = null | eval date_format(nullVar, nullVar)', []); - testErrorsAndWarnings('from a_index | eval date_format(stringField, "2022")', []); - testErrorsAndWarnings('from a_index | eval date_format(stringField, concat("20", "22"))', [ - 'Argument of [date_format] must be [date], found value [concat("20","22")] type [string]', + testErrorsAndWarnings('from a_index | eval date_format(keywordField, "2022")', []); + + testErrorsAndWarnings('from a_index | eval date_format(keywordField, concat("20", "22"))', [ + 'Argument of [date_format] must be [date], found value [concat("20","22")] type [keyword]', + ]); + + testErrorsAndWarnings('from a_index | eval date_format(textField, "2022")', []); + testErrorsAndWarnings('from a_index | eval date_format(textField, concat("20", "22"))', [ + 'Argument of [date_format] must be [date], found value [concat("20","22")] type [keyword]', ]); }); describe('date_parse', () => { testErrorsAndWarnings('row var = date_parse("a", "a")', []); - testErrorsAndWarnings('row var = date_parse("a")', []); testErrorsAndWarnings('row date_parse("a", "a")', []); - testErrorsAndWarnings('row var = date_parse(to_string("a"), to_string("a"))', []); + testErrorsAndWarnings('row var = date_parse(to_string(true), to_string(true))', []); - testErrorsAndWarnings('row var = date_parse(5, 5)', [ - 'Argument of [date_parse] must be [string], found value [5] type [number]', - 'Argument of [date_parse] must be [string], found value [5] type [number]', + testErrorsAndWarnings('row var = date_parse(true, true)', [ + 'Argument of [date_parse] must be [keyword], found value [true] type [boolean]', + 'Argument of [date_parse] must be [keyword], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval var = date_parse(stringField)', []); - testErrorsAndWarnings('from a_index | eval var = date_parse(stringField, stringField)', []); - testErrorsAndWarnings('from a_index | eval date_parse(stringField, stringField)', []); - testErrorsAndWarnings( - 'from a_index | eval var = date_parse(to_string(stringField), to_string(stringField))', + 'from a_index | eval var = date_parse(keywordField, keywordField)', [] ); - - testErrorsAndWarnings('from a_index | eval date_parse(numberField, numberField)', [ - 'Argument of [date_parse] must be [string], found value [numberField] type [number]', - 'Argument of [date_parse] must be [string], found value [numberField] type [number]', - ]); + testErrorsAndWarnings('from a_index | eval date_parse(keywordField, keywordField)', []); testErrorsAndWarnings( - 'from a_index | eval date_parse(stringField, stringField, extraArg)', - ['Error: [date_parse] function expects no more than 2 arguments, got 3.'] + 'from a_index | eval var = date_parse(to_string(booleanField), to_string(booleanField))', + [] ); - testErrorsAndWarnings('from a_index | sort date_parse(stringField, stringField)', []); - testErrorsAndWarnings('row var = date_parse(to_string(true), to_string(true))', []); - - testErrorsAndWarnings('row var = date_parse(true, true)', [ - 'Argument of [date_parse] must be [string], found value [true] type [boolean]', - 'Argument of [date_parse] must be [string], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | eval date_parse(booleanField, booleanField)', [ + 'Argument of [date_parse] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [date_parse] must be [keyword], found value [booleanField] type [boolean]', ]); + testErrorsAndWarnings('from a_index | eval var = date_parse(keywordField, textField)', []); + testErrorsAndWarnings('from a_index | eval date_parse(keywordField, textField)', []); + testErrorsAndWarnings('from a_index | eval var = date_parse(textField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval date_parse(textField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = date_parse(textField, textField)', []); + testErrorsAndWarnings('from a_index | eval date_parse(textField, textField)', []); + testErrorsAndWarnings( - 'from a_index | eval var = date_parse(to_string(booleanField), to_string(booleanField))', - [] + 'from a_index | eval date_parse(keywordField, keywordField, extraArg)', + ['Error: [date_parse] function expects no more than 2 arguments, got 3.'] ); - testErrorsAndWarnings('from a_index | eval date_parse(booleanField, booleanField)', [ - 'Argument of [date_parse] must be [string], found value [booleanField] type [boolean]', - 'Argument of [date_parse] must be [string], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings('from a_index | sort date_parse(keywordField, keywordField)', []); testErrorsAndWarnings('from a_index | eval date_parse(null, null)', []); testErrorsAndWarnings('row nullVar = null | eval date_parse(nullVar, nullVar)', []); }); describe('date_trunc', () => { - testErrorsAndWarnings('row var = date_trunc(1 year, now())', []); - testErrorsAndWarnings('row date_trunc(1 year, now())', []); - testErrorsAndWarnings('from a_index | eval var = date_trunc(1 year, dateField)', []); - testErrorsAndWarnings('from a_index | eval date_trunc(1 year, dateField)', []); - testErrorsAndWarnings( - 'from a_index | eval var = date_trunc(1 year, to_datetime(stringField))', + 'row var = date_trunc(1 year, to_datetime("2021-01-01T00:00:00Z"))', [] ); - - testErrorsAndWarnings('from a_index | eval date_trunc(stringField, stringField)', [ - 'Argument of [date_trunc] must be [time_literal], found value [stringField] type [string]', - 'Argument of [date_trunc] must be [date], found value [stringField] type [string]', + testErrorsAndWarnings('row date_trunc(1 year, to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row var = date_trunc("a", to_datetime("2021-01-01T00:00:00Z"))', [ + 'Argument of [date_trunc] must be [time_literal], found value ["a"] type [string]', ]); - - testErrorsAndWarnings('from a_index | eval date_trunc(1 year, dateField, extraArg)', [ - 'Error: [date_trunc] function expects exactly 2 arguments, got 3.', + testErrorsAndWarnings('row date_trunc("a", to_datetime("2021-01-01T00:00:00Z"))', [ + 'Argument of [date_trunc] must be [time_literal], found value ["a"] type [string]', ]); - testErrorsAndWarnings('from a_index | sort date_trunc(1 year, dateField)', []); - testErrorsAndWarnings('row var = date_trunc(now(), now())', []); - testErrorsAndWarnings('row date_trunc(now(), now())', []); - testErrorsAndWarnings('row var = date_trunc(true, true)', [ 'Argument of [date_trunc] must be [time_literal], found value [true] type [boolean]', 'Argument of [date_trunc] must be [date], found value [true] type [boolean]', ]); + testErrorsAndWarnings('from a_index | eval var = date_trunc(1 year, dateField)', []); + testErrorsAndWarnings('from a_index | eval date_trunc(1 year, dateField)', []); + testErrorsAndWarnings( 'from a_index | eval var = date_trunc(1 year, to_datetime(dateField))', [] @@ -2758,28 +2866,36 @@ describe('validation logic', () => { 'Argument of [date_trunc] must be [date], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval var = date_trunc(dateField, dateField)', []); - testErrorsAndWarnings('from a_index | eval date_trunc(dateField, dateField)', []); + testErrorsAndWarnings('from a_index | eval var = date_trunc(textField, dateField)', [ + 'Argument of [date_trunc] must be [time_literal], found value [textField] type [text]', + ]); + testErrorsAndWarnings('from a_index | eval date_trunc(textField, dateField)', [ + 'Argument of [date_trunc] must be [time_literal], found value [textField] type [text]', + ]); testErrorsAndWarnings( - 'from a_index | eval var = date_trunc(to_datetime(dateField), to_datetime(dateField))', - [] + 'from a_index | eval var = date_trunc(textField, to_datetime(dateField))', + ['Argument of [date_trunc] must be [time_literal], found value [textField] type [text]'] ); + + testErrorsAndWarnings('from a_index | eval date_trunc(1 year, dateField, extraArg)', [ + 'Error: [date_trunc] function expects exactly 2 arguments, got 3.', + ]); + + testErrorsAndWarnings('from a_index | sort date_trunc(1 year, dateField)', []); testErrorsAndWarnings('from a_index | eval date_trunc(null, null)', []); testErrorsAndWarnings('row nullVar = null | eval date_trunc(nullVar, nullVar)', []); testErrorsAndWarnings('from a_index | eval date_trunc(1 year, "2022")', []); testErrorsAndWarnings('from a_index | eval date_trunc(1 year, concat("20", "22"))', [ - 'Argument of [date_trunc] must be [date], found value [concat("20","22")] type [string]', + 'Argument of [date_trunc] must be [date], found value [concat("20","22")] type [keyword]', + ]); + testErrorsAndWarnings('from a_index | eval date_trunc(textField, "2022")', [ + 'Argument of [date_trunc] must be [time_literal], found value [textField] type [text]', + ]); + testErrorsAndWarnings('from a_index | eval date_trunc(textField, concat("20", "22"))', [ + 'Argument of [date_trunc] must be [time_literal], found value [textField] type [text]', + 'Argument of [date_trunc] must be [date], found value [concat("20","22")] type [keyword]', ]); - testErrorsAndWarnings('from a_index | eval date_trunc("2022", "2022")', []); - - testErrorsAndWarnings( - 'from a_index | eval date_trunc(concat("20", "22"), concat("20", "22"))', - [ - 'Argument of [date_trunc] must be [time_literal], found value [concat("20","22")] type [string]', - 'Argument of [date_trunc] must be [date], found value [concat("20","22")] type [string]', - ] - ); }); describe('e', () => { @@ -2800,37 +2916,18 @@ describe('validation logic', () => { describe('ends_with', () => { testErrorsAndWarnings('row var = ends_with("a", "a")', []); testErrorsAndWarnings('row ends_with("a", "a")', []); - testErrorsAndWarnings('row var = ends_with(to_string("a"), to_string("a"))', []); + testErrorsAndWarnings('row var = ends_with(to_string(true), to_string(true))', []); - testErrorsAndWarnings('row var = ends_with(5, 5)', [ - 'Argument of [ends_with] must be [string], found value [5] type [number]', - 'Argument of [ends_with] must be [string], found value [5] type [number]', + testErrorsAndWarnings('row var = ends_with(true, true)', [ + 'Argument of [ends_with] must be [keyword], found value [true] type [boolean]', + 'Argument of [ends_with] must be [keyword], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval var = ends_with(stringField, stringField)', []); - testErrorsAndWarnings('from a_index | eval ends_with(stringField, stringField)', []); - testErrorsAndWarnings( - 'from a_index | eval var = ends_with(to_string(stringField), to_string(stringField))', + 'from a_index | eval var = ends_with(keywordField, keywordField)', [] ); - - testErrorsAndWarnings('from a_index | eval ends_with(numberField, numberField)', [ - 'Argument of [ends_with] must be [string], found value [numberField] type [number]', - 'Argument of [ends_with] must be [string], found value [numberField] type [number]', - ]); - - testErrorsAndWarnings('from a_index | eval ends_with(stringField, stringField, extraArg)', [ - 'Error: [ends_with] function expects exactly 2 arguments, got 3.', - ]); - - testErrorsAndWarnings('from a_index | sort ends_with(stringField, stringField)', []); - testErrorsAndWarnings('row var = ends_with(to_string(true), to_string(true))', []); - - testErrorsAndWarnings('row var = ends_with(true, true)', [ - 'Argument of [ends_with] must be [string], found value [true] type [boolean]', - 'Argument of [ends_with] must be [string], found value [true] type [boolean]', - ]); + testErrorsAndWarnings('from a_index | eval ends_with(keywordField, keywordField)', []); testErrorsAndWarnings( 'from a_index | eval var = ends_with(to_string(booleanField), to_string(booleanField))', @@ -2838,82 +2935,172 @@ describe('validation logic', () => { ); testErrorsAndWarnings('from a_index | eval ends_with(booleanField, booleanField)', [ - 'Argument of [ends_with] must be [string], found value [booleanField] type [boolean]', - 'Argument of [ends_with] must be [string], found value [booleanField] type [boolean]', + 'Argument of [ends_with] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [ends_with] must be [keyword], found value [booleanField] type [boolean]', ]); + + testErrorsAndWarnings('from a_index | eval var = ends_with(textField, textField)', []); + testErrorsAndWarnings('from a_index | eval ends_with(textField, textField)', []); + + testErrorsAndWarnings( + 'from a_index | eval ends_with(keywordField, keywordField, extraArg)', + ['Error: [ends_with] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings('from a_index | sort ends_with(keywordField, keywordField)', []); testErrorsAndWarnings('from a_index | eval ends_with(null, null)', []); testErrorsAndWarnings('row nullVar = null | eval ends_with(nullVar, nullVar)', []); }); - describe('floor', () => { - testErrorsAndWarnings('row var = floor(5)', []); - testErrorsAndWarnings('row floor(5)', []); - testErrorsAndWarnings('row var = floor(to_integer("a"))', []); + describe('exp', () => { + testErrorsAndWarnings('row var = exp(5.5)', []); + testErrorsAndWarnings('row exp(5.5)', []); + testErrorsAndWarnings('row var = exp(to_double(true))', []); + testErrorsAndWarnings('row var = exp(5)', []); + testErrorsAndWarnings('row exp(5)', []); + testErrorsAndWarnings('row var = exp(to_integer(true))', []); - testErrorsAndWarnings('row var = floor("a")', [ - 'Argument of [floor] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('row var = exp(true)', [ + 'Argument of [exp] must be [double], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where floor(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where exp(doubleField) > 0', []); - testErrorsAndWarnings('from a_index | where floor(stringField) > 0', [ - 'Argument of [floor] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | where exp(booleanField) > 0', [ + 'Argument of [exp] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval var = floor(numberField)', []); - testErrorsAndWarnings('from a_index | eval floor(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = floor(to_integer(stringField))', []); + testErrorsAndWarnings('from a_index | where exp(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where exp(longField) > 0', []); + testErrorsAndWarnings('from a_index | where exp(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = exp(doubleField)', []); + testErrorsAndWarnings('from a_index | eval exp(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = exp(to_double(booleanField))', []); - testErrorsAndWarnings('from a_index | eval floor(stringField)', [ - 'Argument of [floor] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | eval exp(booleanField)', [ + 'Argument of [exp] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval floor(numberField, extraArg)', [ - 'Error: [floor] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval var = exp(*)', [ + 'Using wildcards (*) in exp is not allowed', ]); - testErrorsAndWarnings('from a_index | eval var = floor(*)', [ - 'Using wildcards (*) in floor is not allowed', + testErrorsAndWarnings('from a_index | eval var = exp(integerField)', []); + testErrorsAndWarnings('from a_index | eval exp(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = exp(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = exp(longField)', []); + testErrorsAndWarnings('from a_index | eval exp(longField)', []); + testErrorsAndWarnings('from a_index | eval var = exp(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval exp(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval exp(doubleField, extraArg)', [ + 'Error: [exp] function expects exactly one argument, got 2.', ]); - testErrorsAndWarnings('from a_index | sort floor(numberField)', []); + testErrorsAndWarnings('from a_index | sort exp(doubleField)', []); + testErrorsAndWarnings('from a_index | eval exp(null)', []); + testErrorsAndWarnings('row nullVar = null | eval exp(nullVar)', []); + }); + + describe('floor', () => { + testErrorsAndWarnings('row var = floor(5.5)', []); + testErrorsAndWarnings('row floor(5.5)', []); + testErrorsAndWarnings('row var = floor(to_double(true))', []); + testErrorsAndWarnings('row var = floor(5)', []); + testErrorsAndWarnings('row floor(5)', []); testErrorsAndWarnings('row var = floor(to_integer(true))', []); testErrorsAndWarnings('row var = floor(true)', [ - 'Argument of [floor] must be [number], found value [true] type [boolean]', + 'Argument of [floor] must be [double], found value [true] type [boolean]', ]); + testErrorsAndWarnings('from a_index | where floor(doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where floor(booleanField) > 0', [ - 'Argument of [floor] must be [number], found value [booleanField] type [boolean]', + 'Argument of [floor] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval var = floor(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | where floor(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where floor(longField) > 0', []); + testErrorsAndWarnings('from a_index | where floor(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = floor(doubleField)', []); + testErrorsAndWarnings('from a_index | eval floor(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = floor(to_double(booleanField))', []); testErrorsAndWarnings('from a_index | eval floor(booleanField)', [ - 'Argument of [floor] must be [number], found value [booleanField] type [boolean]', + 'Argument of [floor] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = floor(*)', [ + 'Using wildcards (*) in floor is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = floor(integerField)', []); + testErrorsAndWarnings('from a_index | eval floor(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = floor(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = floor(longField)', []); + testErrorsAndWarnings('from a_index | eval floor(longField)', []); + testErrorsAndWarnings('from a_index | eval var = floor(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval floor(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval floor(doubleField, extraArg)', [ + 'Error: [floor] function expects exactly one argument, got 2.', ]); + + testErrorsAndWarnings('from a_index | sort floor(doubleField)', []); testErrorsAndWarnings('from a_index | eval floor(null)', []); testErrorsAndWarnings('row nullVar = null | eval floor(nullVar)', []); }); + describe('from_base64', () => { + testErrorsAndWarnings('row var = from_base64("a")', []); + testErrorsAndWarnings('row from_base64("a")', []); + testErrorsAndWarnings('row var = from_base64(to_string(true))', []); + + testErrorsAndWarnings('row var = from_base64(true)', [ + 'Argument of [from_base64] must be [keyword], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = from_base64(keywordField)', []); + testErrorsAndWarnings('from a_index | eval from_base64(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = from_base64(to_string(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval from_base64(booleanField)', [ + 'Argument of [from_base64] must be [keyword], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = from_base64(*)', [ + 'Using wildcards (*) in from_base64 is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = from_base64(textField)', []); + testErrorsAndWarnings('from a_index | eval from_base64(textField)', []); + + testErrorsAndWarnings('from a_index | eval from_base64(keywordField, extraArg)', [ + 'Error: [from_base64] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort from_base64(keywordField)', []); + testErrorsAndWarnings('from a_index | eval from_base64(null)', []); + testErrorsAndWarnings('row nullVar = null | eval from_base64(nullVar)', []); + }); + describe('greatest', () => { - testErrorsAndWarnings('row var = greatest("a")', []); - testErrorsAndWarnings('row greatest("a")', []); - testErrorsAndWarnings('from a_index | eval var = greatest(stringField)', []); - testErrorsAndWarnings('from a_index | eval greatest(stringField)', []); - testErrorsAndWarnings('from a_index | sort greatest(stringField)', []); testErrorsAndWarnings('row var = greatest(true)', []); testErrorsAndWarnings('row greatest(true)', []); testErrorsAndWarnings('row var = greatest(to_boolean(true))', []); testErrorsAndWarnings('row var = greatest(true, true)', []); testErrorsAndWarnings('row greatest(true, true)', []); testErrorsAndWarnings('row var = greatest(to_boolean(true), to_boolean(true))', []); - testErrorsAndWarnings('row var = greatest(5, 5)', []); - testErrorsAndWarnings('row greatest(5, 5)', []); - testErrorsAndWarnings('row var = greatest(to_integer(true), to_integer(true))', []); + testErrorsAndWarnings('row var = greatest(5.5, 5.5)', []); + testErrorsAndWarnings('row greatest(5.5, 5.5)', []); + testErrorsAndWarnings('row var = greatest(to_double(true), to_double(true))', []); testErrorsAndWarnings('row var = greatest(5)', []); testErrorsAndWarnings('row greatest(5)', []); testErrorsAndWarnings('row var = greatest(to_integer(true))', []); + testErrorsAndWarnings('row var = greatest(5, 5)', []); + testErrorsAndWarnings('row greatest(5, 5)', []); + testErrorsAndWarnings('row var = greatest(to_integer(true), to_integer(true))', []); testErrorsAndWarnings('row var = greatest(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); testErrorsAndWarnings('row greatest(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); @@ -2922,6 +3109,8 @@ describe('validation logic', () => { [] ); + testErrorsAndWarnings('row var = greatest("a")', []); + testErrorsAndWarnings('row greatest("a")', []); testErrorsAndWarnings('row var = greatest(to_string(true))', []); testErrorsAndWarnings('row var = greatest("a", "a")', []); testErrorsAndWarnings('row greatest("a", "a")', []); @@ -2938,41 +3127,17 @@ describe('validation logic', () => { ] ); - testErrorsAndWarnings('from a_index | where greatest(numberField, numberField) > 0', []); + testErrorsAndWarnings('from a_index | where greatest(doubleField, doubleField) > 0', []); - testErrorsAndWarnings( - 'from a_index | where greatest(cartesianPointField, cartesianPointField) > 0', - [ - 'Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]', - 'Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]', - ] - ); - - testErrorsAndWarnings('from a_index | where greatest(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where greatest(integerField) > 0', []); testErrorsAndWarnings('from a_index | where greatest(cartesianPointField) > 0', [ 'Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]', ]); - testErrorsAndWarnings('from a_index | where length(greatest(stringField)) > 0', []); - - testErrorsAndWarnings('from a_index | where length(greatest(cartesianPointField)) > 0', [ - 'Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]', - ]); - - testErrorsAndWarnings( - 'from a_index | where length(greatest(stringField, stringField)) > 0', - [] - ); - - testErrorsAndWarnings( - 'from a_index | where length(greatest(cartesianPointField, cartesianPointField)) > 0', - [ - 'Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]', - 'Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]', - ] - ); - + testErrorsAndWarnings('from a_index | where greatest(integerField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where greatest(longField) > 0', []); + testErrorsAndWarnings('from a_index | where greatest(longField, longField) > 0', []); testErrorsAndWarnings('from a_index | eval var = greatest(booleanField)', []); testErrorsAndWarnings('from a_index | eval greatest(booleanField)', []); testErrorsAndWarnings('from a_index | eval var = greatest(to_boolean(booleanField))', []); @@ -2997,37 +3162,55 @@ describe('validation logic', () => { ] ); - testErrorsAndWarnings('from a_index | eval var = greatest(numberField, numberField)', []); - testErrorsAndWarnings('from a_index | eval greatest(numberField, numberField)', []); + testErrorsAndWarnings('from a_index | eval var = greatest(doubleField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval greatest(doubleField, doubleField)', []); testErrorsAndWarnings( - 'from a_index | eval var = greatest(to_integer(booleanField), to_integer(booleanField))', + 'from a_index | eval var = greatest(to_double(booleanField), to_double(booleanField))', [] ); - testErrorsAndWarnings('from a_index | eval var = greatest(numberField)', []); - testErrorsAndWarnings('from a_index | eval greatest(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = greatest(integerField)', []); + testErrorsAndWarnings('from a_index | eval greatest(integerField)', []); testErrorsAndWarnings('from a_index | eval var = greatest(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = greatest(integerField, integerField)', []); + testErrorsAndWarnings('from a_index | eval greatest(integerField, integerField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = greatest(to_integer(booleanField), to_integer(booleanField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = greatest(ipField, ipField)', []); testErrorsAndWarnings('from a_index | eval greatest(ipField, ipField)', []); testErrorsAndWarnings( 'from a_index | eval var = greatest(to_ip(ipField), to_ip(ipField))', [] ); + testErrorsAndWarnings('from a_index | eval var = greatest(keywordField)', []); + testErrorsAndWarnings('from a_index | eval greatest(keywordField)', []); testErrorsAndWarnings('from a_index | eval var = greatest(to_string(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = greatest(stringField, stringField)', []); - testErrorsAndWarnings('from a_index | eval greatest(stringField, stringField)', []); + testErrorsAndWarnings('from a_index | eval var = greatest(keywordField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval greatest(keywordField, keywordField)', []); testErrorsAndWarnings( 'from a_index | eval var = greatest(to_string(booleanField), to_string(booleanField))', [] ); + testErrorsAndWarnings('from a_index | eval var = greatest(longField)', []); + testErrorsAndWarnings('from a_index | eval greatest(longField)', []); + testErrorsAndWarnings('from a_index | eval var = greatest(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval greatest(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval var = greatest(textField)', []); + testErrorsAndWarnings('from a_index | eval greatest(textField)', []); + testErrorsAndWarnings('from a_index | eval var = greatest(textField, textField)', []); + testErrorsAndWarnings('from a_index | eval greatest(textField, textField)', []); testErrorsAndWarnings('from a_index | eval var = greatest(versionField, versionField)', []); testErrorsAndWarnings('from a_index | eval greatest(versionField, versionField)', []); testErrorsAndWarnings( - 'from a_index | eval var = greatest(to_version(stringField), to_version(stringField))', + 'from a_index | eval var = greatest(to_version(keywordField), to_version(keywordField))', [] ); @@ -3036,24 +3219,74 @@ describe('validation logic', () => { testErrorsAndWarnings('row nullVar = null | eval greatest(nullVar)', []); }); + describe('ip_prefix', () => { + testErrorsAndWarnings('row var = ip_prefix(to_ip("127.0.0.1"), 5, 5)', []); + testErrorsAndWarnings('row ip_prefix(to_ip("127.0.0.1"), 5, 5)', []); + + testErrorsAndWarnings( + 'row var = ip_prefix(to_ip(to_ip("127.0.0.1")), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = ip_prefix(true, true, true)', [ + 'Argument of [ip_prefix] must be [ip], found value [true] type [boolean]', + 'Argument of [ip_prefix] must be [integer], found value [true] type [boolean]', + 'Argument of [ip_prefix] must be [integer], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = ip_prefix(ipField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval ip_prefix(ipField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = ip_prefix(to_ip(ipField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval ip_prefix(booleanField, booleanField, booleanField)', + [ + 'Argument of [ip_prefix] must be [ip], found value [booleanField] type [boolean]', + 'Argument of [ip_prefix] must be [integer], found value [booleanField] type [boolean]', + 'Argument of [ip_prefix] must be [integer], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval ip_prefix(ipField, integerField, integerField, extraArg)', + ['Error: [ip_prefix] function expects exactly 3 arguments, got 4.'] + ); + + testErrorsAndWarnings( + 'from a_index | sort ip_prefix(ipField, integerField, integerField)', + [] + ); + testErrorsAndWarnings('from a_index | eval ip_prefix(null, null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval ip_prefix(nullVar, nullVar, nullVar)', []); + }); + describe('least', () => { - testErrorsAndWarnings('row var = least("a")', []); - testErrorsAndWarnings('row least("a")', []); - testErrorsAndWarnings('from a_index | eval var = least(stringField)', []); - testErrorsAndWarnings('from a_index | eval least(stringField)', []); - testErrorsAndWarnings('from a_index | sort least(stringField)', []); testErrorsAndWarnings('row var = least(true)', []); testErrorsAndWarnings('row least(true)', []); testErrorsAndWarnings('row var = least(to_boolean(true))', []); testErrorsAndWarnings('row var = least(true, true)', []); testErrorsAndWarnings('row least(true, true)', []); testErrorsAndWarnings('row var = least(to_boolean(true), to_boolean(true))', []); - testErrorsAndWarnings('row var = least(5, 5)', []); - testErrorsAndWarnings('row least(5, 5)', []); - testErrorsAndWarnings('row var = least(to_integer(true), to_integer(true))', []); + testErrorsAndWarnings('row var = least(5.5, 5.5)', []); + testErrorsAndWarnings('row least(5.5, 5.5)', []); + testErrorsAndWarnings('row var = least(to_double(true), to_double(true))', []); testErrorsAndWarnings('row var = least(5)', []); testErrorsAndWarnings('row least(5)', []); testErrorsAndWarnings('row var = least(to_integer(true))', []); + testErrorsAndWarnings('row var = least(5, 5)', []); + testErrorsAndWarnings('row least(5, 5)', []); + testErrorsAndWarnings('row var = least(to_integer(true), to_integer(true))', []); testErrorsAndWarnings('row var = least(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); testErrorsAndWarnings('row least(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); @@ -3062,6 +3295,8 @@ describe('validation logic', () => { [] ); + testErrorsAndWarnings('row var = least("a")', []); + testErrorsAndWarnings('row least("a")', []); testErrorsAndWarnings('row var = least(to_string(true))', []); testErrorsAndWarnings('row var = least("a", "a")', []); testErrorsAndWarnings('row least("a", "a")', []); @@ -3078,7 +3313,7 @@ describe('validation logic', () => { ] ); - testErrorsAndWarnings('from a_index | where least(numberField, numberField) > 0', []); + testErrorsAndWarnings('from a_index | where least(doubleField, doubleField) > 0', []); testErrorsAndWarnings( 'from a_index | where least(cartesianPointField, cartesianPointField) > 0', @@ -3088,31 +3323,15 @@ describe('validation logic', () => { ] ); - testErrorsAndWarnings('from a_index | where least(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where least(integerField) > 0', []); testErrorsAndWarnings('from a_index | where least(cartesianPointField) > 0', [ 'Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]', ]); - testErrorsAndWarnings('from a_index | where length(least(stringField)) > 0', []); - - testErrorsAndWarnings('from a_index | where length(least(cartesianPointField)) > 0', [ - 'Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]', - ]); - - testErrorsAndWarnings( - 'from a_index | where length(least(stringField, stringField)) > 0', - [] - ); - - testErrorsAndWarnings( - 'from a_index | where length(least(cartesianPointField, cartesianPointField)) > 0', - [ - 'Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]', - 'Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]', - ] - ); - + testErrorsAndWarnings('from a_index | where least(integerField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where least(longField) > 0', []); + testErrorsAndWarnings('from a_index | where least(longField, longField) > 0', []); testErrorsAndWarnings('from a_index | eval var = least(booleanField)', []); testErrorsAndWarnings('from a_index | eval least(booleanField)', []); testErrorsAndWarnings('from a_index | eval var = least(to_boolean(booleanField))', []); @@ -3137,37 +3356,55 @@ describe('validation logic', () => { ] ); - testErrorsAndWarnings('from a_index | eval var = least(numberField, numberField)', []); - testErrorsAndWarnings('from a_index | eval least(numberField, numberField)', []); + testErrorsAndWarnings('from a_index | eval var = least(doubleField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval least(doubleField, doubleField)', []); testErrorsAndWarnings( - 'from a_index | eval var = least(to_integer(booleanField), to_integer(booleanField))', + 'from a_index | eval var = least(to_double(booleanField), to_double(booleanField))', [] ); - testErrorsAndWarnings('from a_index | eval var = least(numberField)', []); - testErrorsAndWarnings('from a_index | eval least(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = least(integerField)', []); + testErrorsAndWarnings('from a_index | eval least(integerField)', []); testErrorsAndWarnings('from a_index | eval var = least(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = least(integerField, integerField)', []); + testErrorsAndWarnings('from a_index | eval least(integerField, integerField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = least(to_integer(booleanField), to_integer(booleanField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = least(ipField, ipField)', []); testErrorsAndWarnings('from a_index | eval least(ipField, ipField)', []); testErrorsAndWarnings( 'from a_index | eval var = least(to_ip(ipField), to_ip(ipField))', [] ); + testErrorsAndWarnings('from a_index | eval var = least(keywordField)', []); + testErrorsAndWarnings('from a_index | eval least(keywordField)', []); testErrorsAndWarnings('from a_index | eval var = least(to_string(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = least(stringField, stringField)', []); - testErrorsAndWarnings('from a_index | eval least(stringField, stringField)', []); + testErrorsAndWarnings('from a_index | eval var = least(keywordField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval least(keywordField, keywordField)', []); testErrorsAndWarnings( 'from a_index | eval var = least(to_string(booleanField), to_string(booleanField))', [] ); + testErrorsAndWarnings('from a_index | eval var = least(longField)', []); + testErrorsAndWarnings('from a_index | eval least(longField)', []); + testErrorsAndWarnings('from a_index | eval var = least(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval least(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval var = least(textField)', []); + testErrorsAndWarnings('from a_index | eval least(textField)', []); + testErrorsAndWarnings('from a_index | eval var = least(textField, textField)', []); + testErrorsAndWarnings('from a_index | eval least(textField, textField)', []); testErrorsAndWarnings('from a_index | eval var = least(versionField, versionField)', []); testErrorsAndWarnings('from a_index | eval least(versionField, versionField)', []); testErrorsAndWarnings( - 'from a_index | eval var = least(to_version(stringField), to_version(stringField))', + 'from a_index | eval var = least(to_version(keywordField), to_version(keywordField))', [] ); @@ -3179,52 +3416,15 @@ describe('validation logic', () => { describe('left', () => { testErrorsAndWarnings('row var = left("a", 5)', []); testErrorsAndWarnings('row left("a", 5)', []); - testErrorsAndWarnings('row var = left(to_string("a"), to_integer("a"))', []); - - testErrorsAndWarnings('row var = left(5, "a")', [ - 'Argument of [left] must be [string], found value [5] type [number]', - 'Argument of [left] must be [number], found value ["a"] type [string]', - ]); - - testErrorsAndWarnings( - 'from a_index | where length(left(stringField, numberField)) > 0', - [] - ); - - testErrorsAndWarnings('from a_index | where length(left(numberField, stringField)) > 0', [ - 'Argument of [left] must be [string], found value [numberField] type [number]', - 'Argument of [left] must be [number], found value [stringField] type [string]', - ]); - - testErrorsAndWarnings('from a_index | eval var = left(stringField, numberField)', []); - testErrorsAndWarnings('from a_index | eval left(stringField, numberField)', []); - - testErrorsAndWarnings( - 'from a_index | eval var = left(to_string(stringField), to_integer(stringField))', - [] - ); - - testErrorsAndWarnings('from a_index | eval left(numberField, stringField)', [ - 'Argument of [left] must be [string], found value [numberField] type [number]', - 'Argument of [left] must be [number], found value [stringField] type [string]', - ]); - - testErrorsAndWarnings('from a_index | eval left(stringField, numberField, extraArg)', [ - 'Error: [left] function expects exactly 2 arguments, got 3.', - ]); - - testErrorsAndWarnings('from a_index | sort left(stringField, numberField)', []); testErrorsAndWarnings('row var = left(to_string(true), to_integer(true))', []); testErrorsAndWarnings('row var = left(true, true)', [ - 'Argument of [left] must be [string], found value [true] type [boolean]', - 'Argument of [left] must be [number], found value [true] type [boolean]', + 'Argument of [left] must be [keyword], found value [true] type [boolean]', + 'Argument of [left] must be [integer], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where length(left(booleanField, booleanField)) > 0', [ - 'Argument of [left] must be [string], found value [booleanField] type [boolean]', - 'Argument of [left] must be [number], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings('from a_index | eval var = left(keywordField, integerField)', []); + testErrorsAndWarnings('from a_index | eval left(keywordField, integerField)', []); testErrorsAndWarnings( 'from a_index | eval var = left(to_string(booleanField), to_integer(booleanField))', @@ -3232,9 +3432,18 @@ describe('validation logic', () => { ); testErrorsAndWarnings('from a_index | eval left(booleanField, booleanField)', [ - 'Argument of [left] must be [string], found value [booleanField] type [boolean]', - 'Argument of [left] must be [number], found value [booleanField] type [boolean]', + 'Argument of [left] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [left] must be [integer], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = left(textField, integerField)', []); + testErrorsAndWarnings('from a_index | eval left(textField, integerField)', []); + + testErrorsAndWarnings('from a_index | eval left(keywordField, integerField, extraArg)', [ + 'Error: [left] function expects exactly 2 arguments, got 3.', ]); + + testErrorsAndWarnings('from a_index | sort left(keywordField, integerField)', []); testErrorsAndWarnings('from a_index | eval left(null, null)', []); testErrorsAndWarnings('row nullVar = null | eval left(nullVar, nullVar)', []); }); @@ -3242,7355 +3451,11003 @@ describe('validation logic', () => { describe('length', () => { testErrorsAndWarnings('row var = length("a")', []); testErrorsAndWarnings('row length("a")', []); - testErrorsAndWarnings('row var = length(to_string("a"))', []); - - testErrorsAndWarnings('row var = length(5)', [ - 'Argument of [length] must be [string], found value [5] type [number]', - ]); - - testErrorsAndWarnings('from a_index | where length(stringField) > 0', []); + testErrorsAndWarnings('row var = length(to_string(true))', []); - testErrorsAndWarnings('from a_index | where length(numberField) > 0', [ - 'Argument of [length] must be [string], found value [numberField] type [number]', + testErrorsAndWarnings('row var = length(true)', [ + 'Argument of [length] must be [keyword], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval var = length(stringField)', []); - testErrorsAndWarnings('from a_index | eval length(stringField)', []); - testErrorsAndWarnings('from a_index | eval var = length(to_string(stringField))', []); - - testErrorsAndWarnings('from a_index | eval length(numberField)', [ - 'Argument of [length] must be [string], found value [numberField] type [number]', - ]); + testErrorsAndWarnings('from a_index | eval var = length(keywordField)', []); + testErrorsAndWarnings('from a_index | eval length(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = length(to_string(booleanField))', []); - testErrorsAndWarnings('from a_index | eval length(stringField, extraArg)', [ - 'Error: [length] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval length(booleanField)', [ + 'Argument of [length] must be [keyword], found value [booleanField] type [boolean]', ]); testErrorsAndWarnings('from a_index | eval var = length(*)', [ 'Using wildcards (*) in length is not allowed', ]); - testErrorsAndWarnings('from a_index | sort length(stringField)', []); - testErrorsAndWarnings('row var = length(to_string(true))', []); - - testErrorsAndWarnings('row var = length(true)', [ - 'Argument of [length] must be [string], found value [true] type [boolean]', - ]); + testErrorsAndWarnings('from a_index | eval var = length(textField)', []); + testErrorsAndWarnings('from a_index | eval length(textField)', []); - testErrorsAndWarnings('from a_index | where length(booleanField) > 0', [ - 'Argument of [length] must be [string], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval length(keywordField, extraArg)', [ + 'Error: [length] function expects exactly one argument, got 2.', ]); - testErrorsAndWarnings('from a_index | eval var = length(to_string(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval length(booleanField)', [ - 'Argument of [length] must be [string], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings('from a_index | sort length(keywordField)', []); testErrorsAndWarnings('from a_index | eval length(null)', []); testErrorsAndWarnings('row nullVar = null | eval length(nullVar)', []); }); - describe('log', () => { - testErrorsAndWarnings('row var = log(5, 5)', []); - testErrorsAndWarnings('row log(5, 5)', []); - testErrorsAndWarnings('row var = log(to_integer("a"), to_integer("a"))', []); + describe('locate', () => { + testErrorsAndWarnings('row var = locate("a", "a")', []); + testErrorsAndWarnings('row locate("a", "a")', []); + testErrorsAndWarnings('row var = locate(to_string(true), to_string(true))', []); + testErrorsAndWarnings('row var = locate("a", "a", 5)', []); + testErrorsAndWarnings('row locate("a", "a", 5)', []); + testErrorsAndWarnings( + 'row var = locate(to_string(true), to_string(true), to_integer(true))', + [] + ); - testErrorsAndWarnings('row var = log("a", "a")', [ - 'Argument of [log] must be [number], found value ["a"] type [string]', - 'Argument of [log] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('row var = locate(true, true, true)', [ + 'Argument of [locate] must be [keyword], found value [true] type [boolean]', + 'Argument of [locate] must be [keyword], found value [true] type [boolean]', + 'Argument of [locate] must be [integer], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where log(numberField, numberField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = locate(keywordField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval locate(keywordField, keywordField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = locate(to_string(booleanField), to_string(booleanField))', + [] + ); - testErrorsAndWarnings('from a_index | where log(stringField, stringField) > 0', [ - 'Argument of [log] must be [number], found value [stringField] type [string]', - 'Argument of [log] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | eval locate(booleanField, booleanField)', [ + 'Argument of [locate] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [locate] must be [keyword], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval var = log(numberField, numberField)', []); - testErrorsAndWarnings('from a_index | eval log(numberField, numberField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = locate(keywordField, keywordField, integerField)', + [] + ); testErrorsAndWarnings( - 'from a_index | eval var = log(to_integer(stringField), to_integer(stringField))', + 'from a_index | eval locate(keywordField, keywordField, integerField)', [] ); - testErrorsAndWarnings('from a_index | eval log(stringField, stringField)', [ - 'Argument of [log] must be [number], found value [stringField] type [string]', - 'Argument of [log] must be [number], found value [stringField] type [string]', - ]); + testErrorsAndWarnings( + 'from a_index | eval var = locate(to_string(booleanField), to_string(booleanField), to_integer(booleanField))', + [] + ); - testErrorsAndWarnings('from a_index | eval log(numberField, numberField, extraArg)', [ - 'Error: [log] function expects no more than 2 arguments, got 3.', - ]); + testErrorsAndWarnings( + 'from a_index | eval locate(booleanField, booleanField, booleanField)', + [ + 'Argument of [locate] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [locate] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [locate] must be [integer], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings('from a_index | eval var = locate(keywordField, textField)', []); + testErrorsAndWarnings('from a_index | eval locate(keywordField, textField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = locate(keywordField, textField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval locate(keywordField, textField, integerField)', + [] + ); + testErrorsAndWarnings('from a_index | eval var = locate(textField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval locate(textField, keywordField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = locate(textField, keywordField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval locate(textField, keywordField, integerField)', + [] + ); + testErrorsAndWarnings('from a_index | eval var = locate(textField, textField)', []); + testErrorsAndWarnings('from a_index | eval locate(textField, textField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = locate(textField, textField, integerField)', + [] + ); + testErrorsAndWarnings('from a_index | eval locate(textField, textField, integerField)', []); + + testErrorsAndWarnings( + 'from a_index | eval locate(keywordField, keywordField, integerField, extraArg)', + ['Error: [locate] function expects no more than 3 arguments, got 4.'] + ); - testErrorsAndWarnings('from a_index | sort log(numberField, numberField)', []); + testErrorsAndWarnings('from a_index | sort locate(keywordField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval locate(null, null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval locate(nullVar, nullVar, nullVar)', []); + }); + + describe('log', () => { + testErrorsAndWarnings('row var = log(5.5)', []); + testErrorsAndWarnings('row log(5.5)', []); + testErrorsAndWarnings('row var = log(to_double(true))', []); + testErrorsAndWarnings('row var = log(5.5, 5.5)', []); + testErrorsAndWarnings('row log(5.5, 5.5)', []); + testErrorsAndWarnings('row var = log(to_double(true), to_double(true))', []); + testErrorsAndWarnings('row var = log(5.5, 5)', []); + testErrorsAndWarnings('row log(5.5, 5)', []); + testErrorsAndWarnings('row var = log(to_double(true), to_integer(true))', []); + testErrorsAndWarnings('row var = log(to_double(true), 5)', []); testErrorsAndWarnings('row var = log(5)', []); testErrorsAndWarnings('row log(5)', []); testErrorsAndWarnings('row var = log(to_integer(true))', []); + testErrorsAndWarnings('row var = log(5, 5.5)', []); + testErrorsAndWarnings('row log(5, 5.5)', []); + testErrorsAndWarnings('row var = log(to_integer(true), to_double(true))', []); + testErrorsAndWarnings('row var = log(5, 5)', []); + testErrorsAndWarnings('row log(5, 5)', []); testErrorsAndWarnings('row var = log(to_integer(true), to_integer(true))', []); + testErrorsAndWarnings('row var = log(to_integer(true), 5)', []); + testErrorsAndWarnings('row var = log(5, to_double(true))', []); + testErrorsAndWarnings('row var = log(5, to_integer(true))', []); testErrorsAndWarnings('row var = log(true, true)', [ - 'Argument of [log] must be [number], found value [true] type [boolean]', - 'Argument of [log] must be [number], found value [true] type [boolean]', + 'Argument of [log] must be [double], found value [true] type [boolean]', + 'Argument of [log] must be [double], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where log(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where log(doubleField) > 0', []); testErrorsAndWarnings('from a_index | where log(booleanField) > 0', [ - 'Argument of [log] must be [number], found value [booleanField] type [boolean]', + 'Argument of [log] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where log(booleanField, booleanField) > 0', [ - 'Argument of [log] must be [number], found value [booleanField] type [boolean]', - 'Argument of [log] must be [number], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings('from a_index | where log(doubleField, doubleField) > 0', []); - testErrorsAndWarnings('from a_index | eval var = log(numberField)', []); - testErrorsAndWarnings('from a_index | eval log(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = log(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | where log(booleanField, booleanField) > 0', [ + 'Argument of [log] must be [double], found value [booleanField] type [boolean]', + 'Argument of [log] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where log(doubleField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where log(doubleField, longField) > 0', []); + testErrorsAndWarnings('from a_index | where log(doubleField, unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | where log(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where log(integerField, doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where log(integerField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where log(integerField, longField) > 0', []); + testErrorsAndWarnings('from a_index | where log(integerField, unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | where log(longField) > 0', []); + testErrorsAndWarnings('from a_index | where log(longField, doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where log(longField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where log(longField, longField) > 0', []); + testErrorsAndWarnings('from a_index | where log(longField, unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | where log(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | where log(unsignedLongField, doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where log(unsignedLongField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where log(unsignedLongField, longField) > 0', []); + testErrorsAndWarnings( + 'from a_index | where log(unsignedLongField, unsignedLongField) > 0', + [] + ); + testErrorsAndWarnings('from a_index | eval var = log(doubleField)', []); + testErrorsAndWarnings('from a_index | eval log(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = log(to_double(booleanField))', []); testErrorsAndWarnings('from a_index | eval log(booleanField)', [ - 'Argument of [log] must be [number], found value [booleanField] type [boolean]', + 'Argument of [log] must be [double], found value [booleanField] type [boolean]', ]); testErrorsAndWarnings('from a_index | eval var = log(*)', [ 'Using wildcards (*) in log is not allowed', ]); + testErrorsAndWarnings('from a_index | eval var = log(doubleField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval log(doubleField, doubleField)', []); + testErrorsAndWarnings( - 'from a_index | eval var = log(to_integer(booleanField), to_integer(booleanField))', + 'from a_index | eval var = log(to_double(booleanField), to_double(booleanField))', [] ); testErrorsAndWarnings('from a_index | eval log(booleanField, booleanField)', [ - 'Argument of [log] must be [number], found value [booleanField] type [boolean]', - 'Argument of [log] must be [number], found value [booleanField] type [boolean]', + 'Argument of [log] must be [double], found value [booleanField] type [boolean]', + 'Argument of [log] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | sort log(numberField)', []); - testErrorsAndWarnings('from a_index | eval log(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval log(nullVar, nullVar)', []); - }); - - describe('log10', () => { - testErrorsAndWarnings('row var = log10(5)', []); - testErrorsAndWarnings('row log10(5)', []); - testErrorsAndWarnings('row var = log10(to_integer("a"))', []); + testErrorsAndWarnings('from a_index | eval var = log(doubleField, integerField)', []); + testErrorsAndWarnings('from a_index | eval log(doubleField, integerField)', []); - testErrorsAndWarnings('row var = log10("a")', [ - 'Argument of [log10] must be [number], found value ["a"] type [string]', - ]); + testErrorsAndWarnings( + 'from a_index | eval var = log(to_double(booleanField), to_integer(booleanField))', + [] + ); - testErrorsAndWarnings('from a_index | where log10(numberField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = log(doubleField, longField)', []); + testErrorsAndWarnings('from a_index | eval log(doubleField, longField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = log(to_double(booleanField), longField)', + [] + ); + testErrorsAndWarnings('from a_index | eval var = log(doubleField, unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval log(doubleField, unsignedLongField)', []); - testErrorsAndWarnings('from a_index | where log10(stringField) > 0', [ - 'Argument of [log10] must be [number], found value [stringField] type [string]', - ]); + testErrorsAndWarnings( + 'from a_index | eval var = log(to_double(booleanField), unsignedLongField)', + [] + ); - testErrorsAndWarnings('from a_index | eval var = log10(numberField)', []); - testErrorsAndWarnings('from a_index | eval log10(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = log10(to_integer(stringField))', []); + testErrorsAndWarnings('from a_index | eval var = log(integerField)', []); + testErrorsAndWarnings('from a_index | eval log(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = log(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = log(integerField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval log(integerField, doubleField)', []); - testErrorsAndWarnings('from a_index | eval log10(stringField)', [ - 'Argument of [log10] must be [number], found value [stringField] type [string]', - ]); + testErrorsAndWarnings( + 'from a_index | eval var = log(to_integer(booleanField), to_double(booleanField))', + [] + ); - testErrorsAndWarnings('from a_index | eval log10(numberField, extraArg)', [ - 'Error: [log10] function expects exactly one argument, got 2.', - ]); + testErrorsAndWarnings('from a_index | eval var = log(integerField, integerField)', []); + testErrorsAndWarnings('from a_index | eval log(integerField, integerField)', []); - testErrorsAndWarnings('from a_index | eval var = log10(*)', [ - 'Using wildcards (*) in log10 is not allowed', - ]); + testErrorsAndWarnings( + 'from a_index | eval var = log(to_integer(booleanField), to_integer(booleanField))', + [] + ); - testErrorsAndWarnings('from a_index | sort log10(numberField)', []); - testErrorsAndWarnings('row var = log10(to_integer(true))', []); + testErrorsAndWarnings('from a_index | eval var = log(integerField, longField)', []); + testErrorsAndWarnings('from a_index | eval log(integerField, longField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = log(to_integer(booleanField), longField)', + [] + ); + testErrorsAndWarnings('from a_index | eval var = log(integerField, unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval log(integerField, unsignedLongField)', []); - testErrorsAndWarnings('row var = log10(true)', [ - 'Argument of [log10] must be [number], found value [true] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | eval var = log(to_integer(booleanField), unsignedLongField)', + [] + ); - testErrorsAndWarnings('from a_index | where log10(booleanField) > 0', [ - 'Argument of [log10] must be [number], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings('from a_index | eval var = log(longField)', []); + testErrorsAndWarnings('from a_index | eval log(longField)', []); + testErrorsAndWarnings('from a_index | eval var = log(longField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval log(longField, doubleField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = log(longField, to_double(booleanField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = log(longField, integerField)', []); + testErrorsAndWarnings('from a_index | eval log(longField, integerField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = log(longField, to_integer(booleanField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = log(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval log(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval var = log(longField, unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval log(longField, unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = log(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval log(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = log(unsignedLongField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval log(unsignedLongField, doubleField)', []); - testErrorsAndWarnings('from a_index | eval var = log10(to_integer(booleanField))', []); + testErrorsAndWarnings( + 'from a_index | eval var = log(unsignedLongField, to_double(booleanField))', + [] + ); - testErrorsAndWarnings('from a_index | eval log10(booleanField)', [ - 'Argument of [log10] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval var = log(unsignedLongField, integerField)', []); + testErrorsAndWarnings('from a_index | eval log(unsignedLongField, integerField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = log(unsignedLongField, to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = log(unsignedLongField, longField)', []); + testErrorsAndWarnings('from a_index | eval log(unsignedLongField, longField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = log(unsignedLongField, unsignedLongField)', + [] + ); + testErrorsAndWarnings('from a_index | eval log(unsignedLongField, unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval log(doubleField, doubleField, extraArg)', [ + 'Error: [log] function expects no more than 2 arguments, got 3.', ]); - testErrorsAndWarnings('from a_index | eval log10(null)', []); - testErrorsAndWarnings('row nullVar = null | eval log10(nullVar)', []); + + testErrorsAndWarnings('from a_index | sort log(doubleField)', []); + testErrorsAndWarnings('from a_index | eval log(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval log(nullVar, nullVar)', []); }); - describe('ltrim', () => { - testErrorsAndWarnings('row var = ltrim("a")', []); - testErrorsAndWarnings('row ltrim("a")', []); - testErrorsAndWarnings('row var = ltrim(to_string("a"))', []); + describe('log10', () => { + testErrorsAndWarnings('row var = log10(5.5)', []); + testErrorsAndWarnings('row log10(5.5)', []); + testErrorsAndWarnings('row var = log10(to_double(true))', []); + testErrorsAndWarnings('row var = log10(5)', []); + testErrorsAndWarnings('row log10(5)', []); + testErrorsAndWarnings('row var = log10(to_integer(true))', []); - testErrorsAndWarnings('row var = ltrim(5)', [ - 'Argument of [ltrim] must be [string], found value [5] type [number]', + testErrorsAndWarnings('row var = log10(true)', [ + 'Argument of [log10] must be [double], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where length(ltrim(stringField)) > 0', []); + testErrorsAndWarnings('from a_index | where log10(doubleField) > 0', []); - testErrorsAndWarnings('from a_index | where length(ltrim(numberField)) > 0', [ - 'Argument of [ltrim] must be [string], found value [numberField] type [number]', + testErrorsAndWarnings('from a_index | where log10(booleanField) > 0', [ + 'Argument of [log10] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval var = ltrim(stringField)', []); - testErrorsAndWarnings('from a_index | eval ltrim(stringField)', []); - testErrorsAndWarnings('from a_index | eval var = ltrim(to_string(stringField))', []); + testErrorsAndWarnings('from a_index | where log10(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where log10(longField) > 0', []); + testErrorsAndWarnings('from a_index | where log10(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = log10(doubleField)', []); + testErrorsAndWarnings('from a_index | eval log10(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = log10(to_double(booleanField))', []); - testErrorsAndWarnings('from a_index | eval ltrim(numberField)', [ - 'Argument of [ltrim] must be [string], found value [numberField] type [number]', + testErrorsAndWarnings('from a_index | eval log10(booleanField)', [ + 'Argument of [log10] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval ltrim(stringField, extraArg)', [ - 'Error: [ltrim] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval var = log10(*)', [ + 'Using wildcards (*) in log10 is not allowed', ]); - testErrorsAndWarnings('from a_index | eval var = ltrim(*)', [ - 'Using wildcards (*) in ltrim is not allowed', + testErrorsAndWarnings('from a_index | eval var = log10(integerField)', []); + testErrorsAndWarnings('from a_index | eval log10(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = log10(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = log10(longField)', []); + testErrorsAndWarnings('from a_index | eval log10(longField)', []); + testErrorsAndWarnings('from a_index | eval var = log10(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval log10(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval log10(doubleField, extraArg)', [ + 'Error: [log10] function expects exactly one argument, got 2.', ]); - testErrorsAndWarnings('from a_index | sort ltrim(stringField)', []); + testErrorsAndWarnings('from a_index | sort log10(doubleField)', []); + testErrorsAndWarnings('from a_index | eval log10(null)', []); + testErrorsAndWarnings('row nullVar = null | eval log10(nullVar)', []); + }); + + describe('ltrim', () => { + testErrorsAndWarnings('row var = ltrim("a")', []); + testErrorsAndWarnings('row ltrim("a")', []); testErrorsAndWarnings('row var = ltrim(to_string(true))', []); testErrorsAndWarnings('row var = ltrim(true)', [ - 'Argument of [ltrim] must be [string], found value [true] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | where length(ltrim(booleanField)) > 0', [ - 'Argument of [ltrim] must be [string], found value [booleanField] type [boolean]', + 'Argument of [ltrim] must be [keyword], found value [true] type [boolean]', ]); + testErrorsAndWarnings('from a_index | eval var = ltrim(keywordField)', []); + testErrorsAndWarnings('from a_index | eval ltrim(keywordField)', []); testErrorsAndWarnings('from a_index | eval var = ltrim(to_string(booleanField))', []); testErrorsAndWarnings('from a_index | eval ltrim(booleanField)', [ - 'Argument of [ltrim] must be [string], found value [booleanField] type [boolean]', + 'Argument of [ltrim] must be [keyword], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval ltrim(null)', []); - testErrorsAndWarnings('row nullVar = null | eval ltrim(nullVar)', []); - }); - describe('mv_avg', () => { - testErrorsAndWarnings('row var = mv_avg(5)', []); - testErrorsAndWarnings('row mv_avg(5)', []); - testErrorsAndWarnings('row var = mv_avg(to_integer("a"))', []); - - testErrorsAndWarnings('row var = mv_avg("a")', [ - 'Argument of [mv_avg] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('from a_index | eval var = ltrim(*)', [ + 'Using wildcards (*) in ltrim is not allowed', ]); - testErrorsAndWarnings('from a_index | where mv_avg(numberField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = ltrim(textField)', []); + testErrorsAndWarnings('from a_index | eval ltrim(textField)', []); - testErrorsAndWarnings('from a_index | where mv_avg(stringField) > 0', [ - 'Argument of [mv_avg] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | eval ltrim(keywordField, extraArg)', [ + 'Error: [ltrim] function expects exactly one argument, got 2.', ]); - testErrorsAndWarnings('from a_index | eval var = mv_avg(numberField)', []); - testErrorsAndWarnings('from a_index | eval mv_avg(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_avg(to_integer(stringField))', []); + testErrorsAndWarnings('from a_index | sort ltrim(keywordField)', []); + testErrorsAndWarnings('from a_index | eval ltrim(null)', []); + testErrorsAndWarnings('row nullVar = null | eval ltrim(nullVar)', []); + }); - testErrorsAndWarnings('from a_index | eval mv_avg(stringField)', [ - 'Argument of [mv_avg] must be [number], found value [stringField] type [string]', + describe('mv_append', () => { + testErrorsAndWarnings('row var = mv_append(true, true)', []); + testErrorsAndWarnings('row mv_append(true, true)', []); + testErrorsAndWarnings('row var = mv_append(to_boolean(true), to_boolean(true))', []); + testErrorsAndWarnings('row var = mv_append(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', ]); - - testErrorsAndWarnings('from a_index | eval mv_avg(numberField, extraArg)', [ - 'Error: [mv_avg] function expects exactly one argument, got 2.', + testErrorsAndWarnings('row mv_append(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', ]); - testErrorsAndWarnings('from a_index | eval var = mv_avg(*)', [ - 'Using wildcards (*) in mv_avg is not allowed', - ]); + testErrorsAndWarnings( + 'row var = mv_append(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); - testErrorsAndWarnings('from a_index | sort mv_avg(numberField)', []); - testErrorsAndWarnings('row var = mv_avg(to_integer(true))', []); + testErrorsAndWarnings( + 'row var = mv_append(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); - testErrorsAndWarnings('row var = mv_avg(true)', [ - 'Argument of [mv_avg] must be [number], found value [true] type [boolean]', - ]); + testErrorsAndWarnings( + 'row mv_append(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); - testErrorsAndWarnings('from a_index | where mv_avg(booleanField) > 0', [ - 'Argument of [mv_avg] must be [number], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings( + 'row var = mv_append(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); - testErrorsAndWarnings('from a_index | eval var = mv_avg(to_integer(booleanField))', []); + testErrorsAndWarnings( + 'row var = mv_append(to_datetime("2021-01-01T00:00:00Z"), to_datetime("2021-01-01T00:00:00Z"))', + [] + ); - testErrorsAndWarnings('from a_index | eval mv_avg(booleanField)', [ - 'Argument of [mv_avg] must be [number], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | eval mv_avg(null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_avg(nullVar)', []); - }); + testErrorsAndWarnings( + 'row mv_append(to_datetime("2021-01-01T00:00:00Z"), to_datetime("2021-01-01T00:00:00Z"))', + [] + ); - describe('mv_concat', () => { - testErrorsAndWarnings('row var = mv_concat("a", "a")', []); - testErrorsAndWarnings('row mv_concat("a", "a")', []); - testErrorsAndWarnings('row var = mv_concat(to_string("a"), to_string("a"))', []); + testErrorsAndWarnings( + 'row var = mv_append(to_datetime(to_datetime("2021-01-01T00:00:00Z")), to_datetime(to_datetime("2021-01-01T00:00:00Z")))', + [] + ); - testErrorsAndWarnings('row var = mv_concat(5, 5)', [ - 'Argument of [mv_concat] must be [string], found value [5] type [number]', - 'Argument of [mv_concat] must be [string], found value [5] type [number]', + testErrorsAndWarnings('row var = mv_append(5.5, 5.5)', []); + + testErrorsAndWarnings('row mv_append(5.5, 5.5)', []); + testErrorsAndWarnings('row var = mv_append(to_double(true), to_double(true))', []); + testErrorsAndWarnings('row var = mv_append(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row mv_append(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', ]); + testErrorsAndWarnings( + 'row var = mv_append(to_geopoint(geoPointField), to_geopoint(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); testErrorsAndWarnings( - 'from a_index | where length(mv_concat(stringField, stringField)) > 0', + 'row var = mv_append(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', [] ); testErrorsAndWarnings( - 'from a_index | where length(mv_concat(numberField, numberField)) > 0', - [ - 'Argument of [mv_concat] must be [string], found value [numberField] type [number]', - 'Argument of [mv_concat] must be [string], found value [numberField] type [number]', - ] + 'row mv_append(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + [] ); - testErrorsAndWarnings('from a_index | eval var = mv_concat(stringField, stringField)', []); - testErrorsAndWarnings('from a_index | eval mv_concat(stringField, stringField)', []); + testErrorsAndWarnings( + 'row var = mv_append(to_geoshape(geoPointField), to_geoshape(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + testErrorsAndWarnings('row var = mv_append(5, 5)', []); + testErrorsAndWarnings('row mv_append(5, 5)', []); + testErrorsAndWarnings('row var = mv_append(to_integer(true), to_integer(true))', []); + testErrorsAndWarnings('row var = mv_append(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row mv_append(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_concat(to_string(stringField), to_string(stringField))', + 'row var = mv_append(to_ip(to_ip("127.0.0.1")), to_ip(to_ip("127.0.0.1")))', [] ); - testErrorsAndWarnings('from a_index | eval mv_concat(numberField, numberField)', [ - 'Argument of [mv_concat] must be [string], found value [numberField] type [number]', - 'Argument of [mv_concat] must be [string], found value [numberField] type [number]', - ]); + testErrorsAndWarnings('row var = mv_append("a", "a")', []); + testErrorsAndWarnings('row mv_append("a", "a")', []); + testErrorsAndWarnings('row var = mv_append(to_string(true), to_string(true))', []); + testErrorsAndWarnings('row var = mv_append(to_version("1.0.0"), to_version("1.0.0"))', []); + testErrorsAndWarnings('row mv_append(to_version("1.0.0"), to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = mv_append(to_version("a"), to_version("a"))', []); + testErrorsAndWarnings('from a_index | where mv_append(doubleField, doubleField) > 0', []); - testErrorsAndWarnings('from a_index | eval mv_concat(stringField, stringField, extraArg)', [ - 'Error: [mv_concat] function expects exactly 2 arguments, got 3.', - ]); + testErrorsAndWarnings( + 'from a_index | where mv_append(counterDoubleField, counterDoubleField) > 0', + [ + 'Argument of [mv_append] must be [boolean], found value [counterDoubleField] type [counter_double]', + 'Argument of [mv_append] must be [boolean], found value [counterDoubleField] type [counter_double]', + ] + ); - testErrorsAndWarnings('from a_index | sort mv_concat(stringField, stringField)', []); - testErrorsAndWarnings('row var = mv_concat(to_string(true), to_string(true))', []); + testErrorsAndWarnings('from a_index | where mv_append(integerField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_append(longField, longField) > 0', []); + testErrorsAndWarnings( + 'from a_index | eval var = mv_append(booleanField, booleanField)', + [] + ); + testErrorsAndWarnings('from a_index | eval mv_append(booleanField, booleanField)', []); - testErrorsAndWarnings('row var = mv_concat(true, true)', [ - 'Argument of [mv_concat] must be [string], found value [true] type [boolean]', - 'Argument of [mv_concat] must be [string], found value [true] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | eval var = mv_append(to_boolean(booleanField), to_boolean(booleanField))', + [] + ); testErrorsAndWarnings( - 'from a_index | where length(mv_concat(booleanField, booleanField)) > 0', + 'from a_index | eval mv_append(counterDoubleField, counterDoubleField)', [ - 'Argument of [mv_concat] must be [string], found value [booleanField] type [boolean]', - 'Argument of [mv_concat] must be [string], found value [booleanField] type [boolean]', + 'Argument of [mv_append] must be [boolean], found value [counterDoubleField] type [counter_double]', + 'Argument of [mv_append] must be [boolean], found value [counterDoubleField] type [counter_double]', ] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_concat(to_string(booleanField), to_string(booleanField))', + 'from a_index | eval var = mv_append(cartesianPointField, cartesianPointField)', [] ); - testErrorsAndWarnings('from a_index | eval mv_concat(booleanField, booleanField)', [ - 'Argument of [mv_concat] must be [string], found value [booleanField] type [boolean]', - 'Argument of [mv_concat] must be [string], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | eval mv_concat(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_concat(nullVar, nullVar)', []); - }); + testErrorsAndWarnings( + 'from a_index | eval mv_append(cartesianPointField, cartesianPointField)', + [] + ); - describe('mv_count', () => { - testErrorsAndWarnings('row var = mv_count("a")', []); - testErrorsAndWarnings('row mv_count("a")', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(stringField)', []); - testErrorsAndWarnings('from a_index | eval mv_count(stringField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = mv_append(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + [] + ); - testErrorsAndWarnings('from a_index | eval var = mv_count(*)', [ - 'Using wildcards (*) in mv_count is not allowed', - ]); + testErrorsAndWarnings( + 'from a_index | eval var = mv_append(cartesianShapeField, cartesianShapeField)', + [] + ); - testErrorsAndWarnings('from a_index | sort mv_count(stringField)', []); - testErrorsAndWarnings('row var = mv_count(true)', []); - testErrorsAndWarnings('row mv_count(true)', []); - testErrorsAndWarnings('row var = mv_count(to_boolean(true))', []); - testErrorsAndWarnings('row var = mv_count(to_cartesianpoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_count(to_cartesianpoint("POINT (30 10)"))', []); + testErrorsAndWarnings( + 'from a_index | eval mv_append(cartesianShapeField, cartesianShapeField)', + [] + ); testErrorsAndWarnings( - 'row var = mv_count(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | eval var = mv_append(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', [] ); - testErrorsAndWarnings('row var = mv_count(to_cartesianshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_count(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('from a_index | eval var = mv_append(dateField, dateField)', []); + testErrorsAndWarnings('from a_index | eval mv_append(dateField, dateField)', []); testErrorsAndWarnings( - 'row var = mv_count(to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | eval var = mv_append(to_datetime(dateField), to_datetime(dateField))', [] ); - testErrorsAndWarnings('row var = mv_count(now())', []); - testErrorsAndWarnings('row mv_count(now())', []); - testErrorsAndWarnings('row var = mv_count(to_datetime(now()))', []); - testErrorsAndWarnings('row var = mv_count(5)', []); - testErrorsAndWarnings('row mv_count(5)', []); - testErrorsAndWarnings('row var = mv_count(to_integer(true))', []); - testErrorsAndWarnings('row var = mv_count(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_count(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = mv_count(to_geopoint(to_geopoint("POINT (30 10)")))', []); - testErrorsAndWarnings('row var = mv_count(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_count(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = mv_count(to_geoshape(to_geopoint("POINT (30 10)")))', []); - testErrorsAndWarnings('row var = mv_count(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row mv_count(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row var = mv_count(to_ip(to_ip("127.0.0.1")))', []); - testErrorsAndWarnings('row var = mv_count(to_string(true))', []); - testErrorsAndWarnings('row var = mv_count(to_version("1.0.0"))', []); - testErrorsAndWarnings('row mv_count(to_version("1.0.0"))', []); - testErrorsAndWarnings('row var = mv_count(to_version("a"))', []); - testErrorsAndWarnings('from a_index | where mv_count(booleanField) > 0', []); - testErrorsAndWarnings('from a_index | where mv_count(cartesianPointField) > 0', []); - testErrorsAndWarnings('from a_index | where mv_count(cartesianShapeField) > 0', []); - testErrorsAndWarnings('from a_index | where mv_count(dateField) > 0', []); - testErrorsAndWarnings('from a_index | where mv_count(numberField) > 0', []); - testErrorsAndWarnings('from a_index | where mv_count(geoPointField) > 0', []); - testErrorsAndWarnings('from a_index | where mv_count(geoShapeField) > 0', []); - testErrorsAndWarnings('from a_index | where mv_count(ipField) > 0', []); - testErrorsAndWarnings('from a_index | where mv_count(stringField) > 0', []); - testErrorsAndWarnings('from a_index | where mv_count(versionField) > 0', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(booleanField)', []); - testErrorsAndWarnings('from a_index | eval mv_count(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(to_boolean(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(cartesianPointField)', []); - testErrorsAndWarnings('from a_index | eval mv_count(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_append(doubleField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval mv_append(doubleField, doubleField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_count(to_cartesianpoint(cartesianPointField))', + 'from a_index | eval var = mv_append(to_double(booleanField), to_double(booleanField))', [] ); - testErrorsAndWarnings('from a_index | eval var = mv_count(cartesianShapeField)', []); - testErrorsAndWarnings('from a_index | eval mv_count(cartesianShapeField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = mv_append(geoPointField, geoPointField)', + [] + ); + testErrorsAndWarnings('from a_index | eval mv_append(geoPointField, geoPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_count(to_cartesianshape(cartesianPointField))', + 'from a_index | eval var = mv_append(to_geopoint(geoPointField), to_geopoint(geoPointField))', [] ); - testErrorsAndWarnings('from a_index | eval var = mv_count(dateField)', []); - testErrorsAndWarnings('from a_index | eval mv_count(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(to_datetime(dateField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(numberField)', []); - testErrorsAndWarnings('from a_index | eval mv_count(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(to_integer(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval mv_count(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(to_geopoint(geoPointField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(geoShapeField)', []); - testErrorsAndWarnings('from a_index | eval mv_count(geoShapeField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(to_geoshape(geoPointField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(ipField)', []); - testErrorsAndWarnings('from a_index | eval mv_count(ipField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(to_ip(ipField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(to_string(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(versionField)', []); - testErrorsAndWarnings('from a_index | eval mv_count(versionField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_count(to_version(stringField))', []); + testErrorsAndWarnings( + 'from a_index | eval var = mv_append(geoShapeField, geoShapeField)', + [] + ); + testErrorsAndWarnings('from a_index | eval mv_append(geoShapeField, geoShapeField)', []); - testErrorsAndWarnings('from a_index | eval mv_count(booleanField, extraArg)', [ - 'Error: [mv_count] function expects exactly one argument, got 2.', - ]); - - testErrorsAndWarnings('from a_index | sort mv_count(booleanField)', []); - testErrorsAndWarnings('from a_index | eval mv_count(null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_count(nullVar)', []); - }); - - describe('mv_dedupe', () => { - testErrorsAndWarnings('row var = mv_dedupe("a")', []); - testErrorsAndWarnings('row mv_dedupe("a")', []); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(stringField)', []); - testErrorsAndWarnings('from a_index | eval mv_dedupe(stringField)', []); - - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(*)', [ - 'Using wildcards (*) in mv_dedupe is not allowed', - ]); - - testErrorsAndWarnings('from a_index | sort mv_dedupe(stringField)', []); - testErrorsAndWarnings('row var = mv_dedupe(true)', []); - testErrorsAndWarnings('row mv_dedupe(true)', []); - testErrorsAndWarnings('row var = mv_dedupe(to_boolean(true))', []); - testErrorsAndWarnings('row var = mv_dedupe(now())', []); - testErrorsAndWarnings('row mv_dedupe(now())', []); - testErrorsAndWarnings('row var = mv_dedupe(to_datetime(now()))', []); - testErrorsAndWarnings('row var = mv_dedupe(5)', []); - testErrorsAndWarnings('row mv_dedupe(5)', []); - testErrorsAndWarnings('row var = mv_dedupe(to_integer(true))', []); - testErrorsAndWarnings('row var = mv_dedupe(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row mv_dedupe(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row var = mv_dedupe(to_ip(to_ip("127.0.0.1")))', []); - testErrorsAndWarnings('row var = mv_dedupe(to_string(true))', []); - testErrorsAndWarnings('row var = mv_dedupe(to_version("1.0.0"))', []); - testErrorsAndWarnings('row mv_dedupe(to_version("1.0.0"))', []); - testErrorsAndWarnings('row var = mv_dedupe(to_version("a"))', []); - - testErrorsAndWarnings('from a_index | where mv_dedupe(numberField) > 0', []); - - testErrorsAndWarnings('from a_index | where length(mv_dedupe(stringField)) > 0', []); - - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(booleanField)', []); - testErrorsAndWarnings('from a_index | eval mv_dedupe(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_boolean(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(dateField)', []); - testErrorsAndWarnings('from a_index | eval mv_dedupe(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_datetime(dateField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(numberField)', []); - testErrorsAndWarnings('from a_index | eval mv_dedupe(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_integer(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(ipField)', []); - testErrorsAndWarnings('from a_index | eval mv_dedupe(ipField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_ip(ipField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_string(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(versionField)', []); - testErrorsAndWarnings('from a_index | eval mv_dedupe(versionField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_version(stringField))', []); - - testErrorsAndWarnings('from a_index | eval mv_dedupe(booleanField, extraArg)', [ - 'Error: [mv_dedupe] function expects exactly one argument, got 2.', - ]); - - testErrorsAndWarnings('from a_index | sort mv_dedupe(booleanField)', []); - testErrorsAndWarnings('row mv_dedupe(to_cartesianpoint("POINT (30 10)"))', []); + testErrorsAndWarnings( + 'from a_index | eval var = mv_append(to_geoshape(geoPointField), to_geoshape(geoPointField))', + [] + ); testErrorsAndWarnings( - 'row var = mv_dedupe(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | eval var = mv_append(integerField, integerField)', [] ); - - testErrorsAndWarnings('row var = mv_dedupe(to_cartesianshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_dedupe(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('from a_index | eval mv_append(integerField, integerField)', []); testErrorsAndWarnings( - 'row var = mv_dedupe(to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | eval var = mv_append(to_integer(booleanField), to_integer(booleanField))', [] ); - testErrorsAndWarnings('row var = mv_dedupe(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_dedupe(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = mv_dedupe(to_geopoint(to_geopoint("POINT (30 10)")))', []); - testErrorsAndWarnings('row var = mv_dedupe(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_dedupe(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = mv_dedupe(to_geoshape(to_geopoint("POINT (30 10)")))', []); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(cartesianPointField)', []); - + testErrorsAndWarnings('from a_index | eval var = mv_append(ipField, ipField)', []); + testErrorsAndWarnings('from a_index | eval mv_append(ipField, ipField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_dedupe(to_cartesianpoint(cartesianPointField))', + 'from a_index | eval var = mv_append(to_ip(ipField), to_ip(ipField))', + [] + ); + testErrorsAndWarnings( + 'from a_index | eval var = mv_append(keywordField, keywordField)', [] ); + testErrorsAndWarnings('from a_index | eval mv_append(keywordField, keywordField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(cartesianShapeField)', []); - testErrorsAndWarnings('from a_index | eval mv_dedupe(cartesianShapeField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = mv_append(to_string(booleanField), to_string(booleanField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = mv_append(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval mv_append(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_append(textField, textField)', []); + testErrorsAndWarnings('from a_index | eval mv_append(textField, textField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_dedupe(to_cartesianshape(cartesianPointField))', + 'from a_index | eval var = mv_append(versionField, versionField)', [] ); + testErrorsAndWarnings('from a_index | eval mv_append(versionField, versionField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval mv_dedupe(geoPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_dedupe(to_geopoint(geoPointField))', + 'from a_index | eval var = mv_append(to_version(keywordField), to_version(keywordField))', [] ); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(geoShapeField)', []); - testErrorsAndWarnings('from a_index | eval mv_dedupe(geoShapeField)', []); + testErrorsAndWarnings( - 'from a_index | eval var = mv_dedupe(to_geoshape(geoPointField))', + 'from a_index | eval mv_append(booleanField, booleanField, extraArg)', + ['Error: [mv_append] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings('from a_index | sort mv_append(booleanField, booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_append(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_append(nullVar, nullVar)', []); + testErrorsAndWarnings('from a_index | eval mv_append("2022", "2022")', []); + + testErrorsAndWarnings( + 'from a_index | eval mv_append(concat("20", "22"), concat("20", "22"))', [] ); + }); - testErrorsAndWarnings('from a_index | eval mv_dedupe(numberField, extraArg)', [ - 'Error: [mv_dedupe] function expects exactly one argument, got 2.', + describe('mv_avg', () => { + testErrorsAndWarnings('row var = mv_avg(5.5)', []); + testErrorsAndWarnings('row mv_avg(5.5)', []); + testErrorsAndWarnings('row var = mv_avg(to_double(true))', []); + testErrorsAndWarnings('row var = mv_avg(5)', []); + testErrorsAndWarnings('row mv_avg(5)', []); + testErrorsAndWarnings('row var = mv_avg(to_integer(true))', []); + + testErrorsAndWarnings('row var = mv_avg(true)', [ + 'Argument of [mv_avg] must be [double], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | sort mv_dedupe(numberField)', []); - testErrorsAndWarnings('row var = mv_dedupe(to_cartesianpoint("POINT (30 10)"))', []); - testErrorsAndWarnings('from a_index | eval mv_dedupe(cartesianPointField)', []); - testErrorsAndWarnings('from a_index | eval mv_dedupe(null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_dedupe(nullVar)', []); - }); + testErrorsAndWarnings('from a_index | where mv_avg(doubleField) > 0', []); - describe('mv_first', () => { - testErrorsAndWarnings('row var = mv_first("a")', []); - testErrorsAndWarnings('row mv_first("a")', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(stringField)', []); - testErrorsAndWarnings('from a_index | eval mv_first(stringField)', []); + testErrorsAndWarnings('from a_index | where mv_avg(booleanField) > 0', [ + 'Argument of [mv_avg] must be [double], found value [booleanField] type [boolean]', + ]); - testErrorsAndWarnings('from a_index | eval var = mv_first(*)', [ - 'Using wildcards (*) in mv_first is not allowed', + testErrorsAndWarnings('from a_index | where mv_avg(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_avg(longField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_avg(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = mv_avg(doubleField)', []); + testErrorsAndWarnings('from a_index | eval mv_avg(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_avg(to_double(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval mv_avg(booleanField)', [ + 'Argument of [mv_avg] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | sort mv_first(stringField)', []); - testErrorsAndWarnings('row var = mv_first(true)', []); - testErrorsAndWarnings('row mv_first(true)', []); - testErrorsAndWarnings('row var = mv_first(to_boolean(true))', []); - testErrorsAndWarnings('row var = mv_first(to_cartesianpoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_first(to_cartesianpoint("POINT (30 10)"))', []); + testErrorsAndWarnings('from a_index | eval var = mv_avg(*)', [ + 'Using wildcards (*) in mv_avg is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_avg(integerField)', []); + testErrorsAndWarnings('from a_index | eval mv_avg(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_avg(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_avg(longField)', []); + testErrorsAndWarnings('from a_index | eval mv_avg(longField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_avg(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval mv_avg(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval mv_avg(doubleField, extraArg)', [ + 'Error: [mv_avg] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_avg(doubleField)', []); + testErrorsAndWarnings('from a_index | eval mv_avg(null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_avg(nullVar)', []); + }); + + describe('mv_concat', () => { + testErrorsAndWarnings('row var = mv_concat("a", "a")', []); + testErrorsAndWarnings('row mv_concat("a", "a")', []); + testErrorsAndWarnings('row var = mv_concat(to_string(true), to_string(true))', []); + + testErrorsAndWarnings('row var = mv_concat(true, true)', [ + 'Argument of [mv_concat] must be [keyword], found value [true] type [boolean]', + 'Argument of [mv_concat] must be [keyword], found value [true] type [boolean]', + ]); testErrorsAndWarnings( - 'row var = mv_first(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | eval var = mv_concat(keywordField, keywordField)', [] ); - - testErrorsAndWarnings('row var = mv_first(to_cartesianshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_first(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('from a_index | eval mv_concat(keywordField, keywordField)', []); testErrorsAndWarnings( - 'row var = mv_first(to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | eval var = mv_concat(to_string(booleanField), to_string(booleanField))', [] ); - testErrorsAndWarnings('row var = mv_first(now())', []); - testErrorsAndWarnings('row mv_first(now())', []); - testErrorsAndWarnings('row var = mv_first(to_datetime(now()))', []); - testErrorsAndWarnings('row var = mv_first(5)', []); - testErrorsAndWarnings('row mv_first(5)', []); - testErrorsAndWarnings('row var = mv_first(to_integer(true))', []); - testErrorsAndWarnings('row var = mv_first(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_first(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = mv_first(to_geopoint(to_geopoint("POINT (30 10)")))', []); - testErrorsAndWarnings('row var = mv_first(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_first(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = mv_first(to_geoshape(to_geopoint("POINT (30 10)")))', []); - testErrorsAndWarnings('row var = mv_first(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row mv_first(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row var = mv_first(to_ip(to_ip("127.0.0.1")))', []); - testErrorsAndWarnings('row var = mv_first(to_string(true))', []); - testErrorsAndWarnings('row var = mv_first(to_version("1.0.0"))', []); - testErrorsAndWarnings('row mv_first(to_version("1.0.0"))', []); - testErrorsAndWarnings('row var = mv_first(to_version("a"))', []); - testErrorsAndWarnings('from a_index | where mv_first(numberField) > 0', []); - testErrorsAndWarnings('from a_index | where length(mv_first(stringField)) > 0', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(booleanField)', []); - testErrorsAndWarnings('from a_index | eval mv_first(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(to_boolean(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(cartesianPointField)', []); - testErrorsAndWarnings('from a_index | eval mv_first(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval mv_concat(booleanField, booleanField)', [ + 'Argument of [mv_concat] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [mv_concat] must be [keyword], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_concat(keywordField, textField)', []); + testErrorsAndWarnings('from a_index | eval mv_concat(keywordField, textField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_concat(textField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval mv_concat(textField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_concat(textField, textField)', []); + testErrorsAndWarnings('from a_index | eval mv_concat(textField, textField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_first(to_cartesianpoint(cartesianPointField))', - [] + 'from a_index | eval mv_concat(keywordField, keywordField, extraArg)', + ['Error: [mv_concat] function expects exactly 2 arguments, got 3.'] ); - testErrorsAndWarnings('from a_index | eval var = mv_first(cartesianShapeField)', []); - testErrorsAndWarnings('from a_index | eval mv_first(cartesianShapeField)', []); + testErrorsAndWarnings('from a_index | sort mv_concat(keywordField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval mv_concat(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_concat(nullVar, nullVar)', []); + }); + + describe('mv_count', () => { + testErrorsAndWarnings('row var = mv_count(true)', []); + testErrorsAndWarnings('row mv_count(true)', []); + testErrorsAndWarnings('row var = mv_count(to_boolean(true))', []); + testErrorsAndWarnings('row var = mv_count(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row mv_count(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = mv_count(to_cartesianpoint(cartesianPointField))', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = mv_count(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_count(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = mv_count(to_cartesianshape(cartesianPointField))', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = mv_count(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row mv_count(to_datetime("2021-01-01T00:00:00Z"))', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_first(to_cartesianshape(cartesianPointField))', + 'row var = mv_count(to_datetime(to_datetime("2021-01-01T00:00:00Z")))', [] ); - testErrorsAndWarnings('from a_index | eval var = mv_first(dateField)', []); - testErrorsAndWarnings('from a_index | eval mv_first(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(to_datetime(dateField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(numberField)', []); - testErrorsAndWarnings('from a_index | eval mv_first(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(to_integer(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval mv_first(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(to_geopoint(geoPointField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(geoShapeField)', []); - testErrorsAndWarnings('from a_index | eval mv_first(geoShapeField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(to_geoshape(geoPointField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(ipField)', []); - testErrorsAndWarnings('from a_index | eval mv_first(ipField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(to_ip(ipField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(to_string(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(versionField)', []); - testErrorsAndWarnings('from a_index | eval mv_first(versionField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_first(to_version(stringField))', []); + testErrorsAndWarnings('row var = mv_count(5.5)', []); - testErrorsAndWarnings('from a_index | eval mv_first(booleanField, extraArg)', [ - 'Error: [mv_first] function expects exactly one argument, got 2.', + testErrorsAndWarnings('row mv_count(5.5)', []); + testErrorsAndWarnings('row var = mv_count(to_double(true))', []); + testErrorsAndWarnings('row var = mv_count(geoPointField)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row mv_count(geoPointField)', ['Unknown column [geoPointField]']); + testErrorsAndWarnings('row var = mv_count(to_geopoint(geoPointField))', [ + 'Unknown column [geoPointField]', ]); + testErrorsAndWarnings('row var = mv_count(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_count(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = mv_count(to_geoshape(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row var = mv_count(5)', []); + testErrorsAndWarnings('row mv_count(5)', []); + testErrorsAndWarnings('row var = mv_count(to_integer(true))', []); + testErrorsAndWarnings('row var = mv_count(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row mv_count(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = mv_count(to_ip(to_ip("127.0.0.1")))', []); + testErrorsAndWarnings('row var = mv_count("a")', []); + testErrorsAndWarnings('row mv_count("a")', []); + testErrorsAndWarnings('row var = mv_count(to_string(true))', []); + testErrorsAndWarnings('row var = mv_count(to_version("1.0.0"))', []); + testErrorsAndWarnings('row mv_count(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = mv_count(to_version("a"))', []); + testErrorsAndWarnings('from a_index | where mv_count(booleanField) > 0', []); - testErrorsAndWarnings('from a_index | sort mv_first(booleanField)', []); - testErrorsAndWarnings('from a_index | eval mv_first(null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_first(nullVar)', []); - }); + testErrorsAndWarnings('from a_index | where mv_count(counterDoubleField) > 0', [ + 'Argument of [mv_count] must be [boolean], found value [counterDoubleField] type [counter_double]', + ]); - describe('mv_last', () => { - testErrorsAndWarnings('row var = mv_last("a")', []); - testErrorsAndWarnings('row mv_last("a")', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(stringField)', []); - testErrorsAndWarnings('from a_index | eval mv_last(stringField)', []); + testErrorsAndWarnings('from a_index | where mv_count(cartesianPointField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(cartesianShapeField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(dateField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(geoPointField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(geoShapeField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(ipField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(keywordField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(longField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(textField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(versionField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(to_boolean(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(*)', [ - 'Using wildcards (*) in mv_last is not allowed', + testErrorsAndWarnings('from a_index | eval mv_count(counterDoubleField)', [ + 'Argument of [mv_count] must be [boolean], found value [counterDoubleField] type [counter_double]', ]); - testErrorsAndWarnings('from a_index | sort mv_last(stringField)', []); - testErrorsAndWarnings('row var = mv_last(true)', []); - testErrorsAndWarnings('row mv_last(true)', []); - testErrorsAndWarnings('row var = mv_last(to_boolean(true))', []); - testErrorsAndWarnings('row var = mv_last(to_cartesianpoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_last(to_cartesianpoint("POINT (30 10)"))', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(*)', [ + 'Using wildcards (*) in mv_count is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_count(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(cartesianPointField)', []); testErrorsAndWarnings( - 'row var = mv_last(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | eval var = mv_count(to_cartesianpoint(cartesianPointField))', [] ); - testErrorsAndWarnings('row var = mv_last(to_cartesianshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_last(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(cartesianShapeField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(cartesianShapeField)', []); testErrorsAndWarnings( - 'row var = mv_last(to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | eval var = mv_count(to_cartesianshape(cartesianPointField))', [] ); - testErrorsAndWarnings('row var = mv_last(now())', []); - testErrorsAndWarnings('row mv_last(now())', []); - testErrorsAndWarnings('row var = mv_last(to_datetime(now()))', []); - testErrorsAndWarnings('row var = mv_last(5)', []); - testErrorsAndWarnings('row mv_last(5)', []); - testErrorsAndWarnings('row var = mv_last(to_integer(true))', []); - testErrorsAndWarnings('row var = mv_last(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_last(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = mv_last(to_geopoint(to_geopoint("POINT (30 10)")))', []); - testErrorsAndWarnings('row var = mv_last(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row mv_last(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = mv_last(to_geoshape(to_geopoint("POINT (30 10)")))', []); - testErrorsAndWarnings('row var = mv_last(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row mv_last(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row var = mv_last(to_ip(to_ip("127.0.0.1")))', []); - testErrorsAndWarnings('row var = mv_last(to_string(true))', []); - testErrorsAndWarnings('row var = mv_last(to_version("1.0.0"))', []); - testErrorsAndWarnings('row mv_last(to_version("1.0.0"))', []); - testErrorsAndWarnings('row var = mv_last(to_version("a"))', []); - testErrorsAndWarnings('from a_index | where mv_last(numberField) > 0', []); - testErrorsAndWarnings('from a_index | where length(mv_last(stringField)) > 0', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(dateField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(doubleField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(to_double(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(to_geopoint(geoPointField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(to_geoshape(geoPointField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(integerField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(ipField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(to_ip(ipField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(keywordField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(longField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(longField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(textField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(textField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(versionField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(to_version(keywordField))', []); + + testErrorsAndWarnings('from a_index | eval mv_count(booleanField, extraArg)', [ + 'Error: [mv_count] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_count(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_count(nullVar)', []); + testErrorsAndWarnings('from a_index | eval mv_count("2022")', []); + testErrorsAndWarnings('from a_index | eval mv_count(concat("20", "22"))', []); + }); + + describe('mv_dedupe', () => { + testErrorsAndWarnings('row var = mv_dedupe(true)', []); + testErrorsAndWarnings('row mv_dedupe(true)', []); + testErrorsAndWarnings('row var = mv_dedupe(to_boolean(true))', []); + testErrorsAndWarnings('row var = mv_dedupe(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row mv_dedupe(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = mv_dedupe(to_cartesianpoint(cartesianPointField))', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = mv_dedupe(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_dedupe(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = mv_dedupe(to_cartesianshape(cartesianPointField))', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = mv_dedupe(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row mv_dedupe(to_datetime("2021-01-01T00:00:00Z"))', []); + + testErrorsAndWarnings( + 'row var = mv_dedupe(to_datetime(to_datetime("2021-01-01T00:00:00Z")))', + [] + ); + + testErrorsAndWarnings('row var = mv_dedupe(5.5)', []); + + testErrorsAndWarnings('row mv_dedupe(5.5)', []); + testErrorsAndWarnings('row var = mv_dedupe(to_double(true))', []); + testErrorsAndWarnings('row var = mv_dedupe(geoPointField)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row mv_dedupe(geoPointField)', ['Unknown column [geoPointField]']); + testErrorsAndWarnings('row var = mv_dedupe(to_geopoint(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row var = mv_dedupe(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_dedupe(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = mv_dedupe(to_geoshape(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row var = mv_dedupe(5)', []); + testErrorsAndWarnings('row mv_dedupe(5)', []); + testErrorsAndWarnings('row var = mv_dedupe(to_integer(true))', []); + testErrorsAndWarnings('row var = mv_dedupe(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row mv_dedupe(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = mv_dedupe(to_ip(to_ip("127.0.0.1")))', []); + testErrorsAndWarnings('row var = mv_dedupe("a")', []); + testErrorsAndWarnings('row mv_dedupe("a")', []); + testErrorsAndWarnings('row var = mv_dedupe(to_string(true))', []); + testErrorsAndWarnings('row var = mv_dedupe(to_version("1.0.0"))', []); + testErrorsAndWarnings('row mv_dedupe(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = mv_dedupe(to_version("a"))', []); + testErrorsAndWarnings('from a_index | where mv_dedupe(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where mv_dedupe(counterDoubleField) > 0', [ + 'Argument of [mv_dedupe] must be [boolean], found value [counterDoubleField] type [counter_double]', + ]); + + testErrorsAndWarnings('from a_index | where mv_dedupe(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_dedupe(longField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_boolean(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval mv_dedupe(counterDoubleField)', [ + 'Argument of [mv_dedupe] must be [boolean], found value [counterDoubleField] type [counter_double]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(*)', [ + 'Using wildcards (*) in mv_dedupe is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(cartesianPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_dedupe(to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(cartesianShapeField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(cartesianShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_dedupe(to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(dateField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(doubleField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_double(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(geoPointField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = mv_dedupe(to_geopoint(geoPointField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(geoShapeField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = mv_dedupe(to_geoshape(geoPointField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(integerField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(ipField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_ip(ipField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(keywordField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(longField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(longField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(textField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(textField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(versionField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_version(keywordField))', []); + + testErrorsAndWarnings('from a_index | eval mv_dedupe(booleanField, extraArg)', [ + 'Error: [mv_dedupe] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_dedupe(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_dedupe(nullVar)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe("2022")', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(concat("20", "22"))', []); + }); + + describe('mv_first', () => { + testErrorsAndWarnings('row var = mv_first(true)', []); + testErrorsAndWarnings('row mv_first(true)', []); + testErrorsAndWarnings('row var = mv_first(to_boolean(true))', []); + testErrorsAndWarnings('row var = mv_first(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row mv_first(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = mv_first(to_cartesianpoint(cartesianPointField))', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = mv_first(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_first(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = mv_first(to_cartesianshape(cartesianPointField))', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = mv_first(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row mv_first(to_datetime("2021-01-01T00:00:00Z"))', []); + + testErrorsAndWarnings( + 'row var = mv_first(to_datetime(to_datetime("2021-01-01T00:00:00Z")))', + [] + ); + + testErrorsAndWarnings('row var = mv_first(5.5)', []); + + testErrorsAndWarnings('row mv_first(5.5)', []); + testErrorsAndWarnings('row var = mv_first(to_double(true))', []); + testErrorsAndWarnings('row var = mv_first(geoPointField)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row mv_first(geoPointField)', ['Unknown column [geoPointField]']); + testErrorsAndWarnings('row var = mv_first(to_geopoint(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row var = mv_first(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_first(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = mv_first(to_geoshape(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row var = mv_first(5)', []); + testErrorsAndWarnings('row mv_first(5)', []); + testErrorsAndWarnings('row var = mv_first(to_integer(true))', []); + testErrorsAndWarnings('row var = mv_first(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row mv_first(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = mv_first(to_ip(to_ip("127.0.0.1")))', []); + testErrorsAndWarnings('row var = mv_first("a")', []); + testErrorsAndWarnings('row mv_first("a")', []); + testErrorsAndWarnings('row var = mv_first(to_string(true))', []); + testErrorsAndWarnings('row var = mv_first(to_version("1.0.0"))', []); + testErrorsAndWarnings('row mv_first(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = mv_first(to_version("a"))', []); + testErrorsAndWarnings('from a_index | where mv_first(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where mv_first(counterDoubleField) > 0', [ + 'Argument of [mv_first] must be [boolean], found value [counterDoubleField] type [counter_double]', + ]); + + testErrorsAndWarnings('from a_index | where mv_first(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_first(longField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_first(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(to_boolean(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval mv_first(counterDoubleField)', [ + 'Argument of [mv_first] must be [boolean], found value [counterDoubleField] type [counter_double]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_first(*)', [ + 'Using wildcards (*) in mv_first is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_first(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(cartesianPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_first(to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = mv_first(cartesianShapeField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(cartesianShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_first(to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = mv_first(dateField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(doubleField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(to_double(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(to_geopoint(geoPointField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(to_geoshape(geoPointField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(integerField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(ipField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(to_ip(ipField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(keywordField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(longField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(longField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(textField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(textField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(versionField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(to_version(keywordField))', []); + + testErrorsAndWarnings('from a_index | eval mv_first(booleanField, extraArg)', [ + 'Error: [mv_first] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_first(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_first(nullVar)', []); + testErrorsAndWarnings('from a_index | eval mv_first("2022")', []); + testErrorsAndWarnings('from a_index | eval mv_first(concat("20", "22"))', []); + }); + + describe('mv_last', () => { + testErrorsAndWarnings('row var = mv_last(true)', []); + testErrorsAndWarnings('row mv_last(true)', []); + testErrorsAndWarnings('row var = mv_last(to_boolean(true))', []); + testErrorsAndWarnings('row var = mv_last(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row mv_last(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = mv_last(to_cartesianpoint(cartesianPointField))', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = mv_last(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_last(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = mv_last(to_cartesianshape(cartesianPointField))', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = mv_last(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row mv_last(to_datetime("2021-01-01T00:00:00Z"))', []); + + testErrorsAndWarnings( + 'row var = mv_last(to_datetime(to_datetime("2021-01-01T00:00:00Z")))', + [] + ); + + testErrorsAndWarnings('row var = mv_last(5.5)', []); + + testErrorsAndWarnings('row mv_last(5.5)', []); + testErrorsAndWarnings('row var = mv_last(to_double(true))', []); + testErrorsAndWarnings('row var = mv_last(geoPointField)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row mv_last(geoPointField)', ['Unknown column [geoPointField]']); + testErrorsAndWarnings('row var = mv_last(to_geopoint(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row var = mv_last(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_last(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = mv_last(to_geoshape(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row var = mv_last(5)', []); + testErrorsAndWarnings('row mv_last(5)', []); + testErrorsAndWarnings('row var = mv_last(to_integer(true))', []); + testErrorsAndWarnings('row var = mv_last(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row mv_last(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = mv_last(to_ip(to_ip("127.0.0.1")))', []); + testErrorsAndWarnings('row var = mv_last("a")', []); + testErrorsAndWarnings('row mv_last("a")', []); + testErrorsAndWarnings('row var = mv_last(to_string(true))', []); + testErrorsAndWarnings('row var = mv_last(to_version("1.0.0"))', []); + testErrorsAndWarnings('row mv_last(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = mv_last(to_version("a"))', []); + testErrorsAndWarnings('from a_index | where mv_last(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where mv_last(counterDoubleField) > 0', [ + 'Argument of [mv_last] must be [boolean], found value [counterDoubleField] type [counter_double]', + ]); + + testErrorsAndWarnings('from a_index | where mv_last(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_last(longField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_last(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(booleanField)', []); testErrorsAndWarnings('from a_index | eval mv_last(booleanField)', []); testErrorsAndWarnings('from a_index | eval var = mv_last(to_boolean(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval mv_last(counterDoubleField)', [ + 'Argument of [mv_last] must be [boolean], found value [counterDoubleField] type [counter_double]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_last(*)', [ + 'Using wildcards (*) in mv_last is not allowed', + ]); + testErrorsAndWarnings('from a_index | eval var = mv_last(cartesianPointField)', []); testErrorsAndWarnings('from a_index | eval mv_last(cartesianPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_last(to_cartesianpoint(cartesianPointField))', + 'from a_index | eval var = mv_last(to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = mv_last(cartesianShapeField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(cartesianShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_last(to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = mv_last(dateField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(doubleField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(to_double(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(to_geopoint(geoPointField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(to_geoshape(geoPointField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(integerField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(ipField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(to_ip(ipField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(keywordField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(longField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(longField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(textField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(textField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(versionField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(to_version(keywordField))', []); + + testErrorsAndWarnings('from a_index | eval mv_last(booleanField, extraArg)', [ + 'Error: [mv_last] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_last(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_last(nullVar)', []); + testErrorsAndWarnings('from a_index | eval mv_last("2022")', []); + testErrorsAndWarnings('from a_index | eval mv_last(concat("20", "22"))', []); + }); + + describe('mv_max', () => { + testErrorsAndWarnings('row var = mv_max(true)', []); + testErrorsAndWarnings('row mv_max(true)', []); + testErrorsAndWarnings('row var = mv_max(to_boolean(true))', []); + testErrorsAndWarnings('row var = mv_max(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row mv_max(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings( + 'row var = mv_max(to_datetime(to_datetime("2021-01-01T00:00:00Z")))', + [] + ); + testErrorsAndWarnings('row var = mv_max(5.5)', []); + testErrorsAndWarnings('row mv_max(5.5)', []); + testErrorsAndWarnings('row var = mv_max(to_double(true))', []); + testErrorsAndWarnings('row var = mv_max(5)', []); + testErrorsAndWarnings('row mv_max(5)', []); + testErrorsAndWarnings('row var = mv_max(to_integer(true))', []); + testErrorsAndWarnings('row var = mv_max(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row mv_max(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = mv_max(to_ip(to_ip("127.0.0.1")))', []); + testErrorsAndWarnings('row var = mv_max("a")', []); + testErrorsAndWarnings('row mv_max("a")', []); + testErrorsAndWarnings('row var = mv_max(to_string(true))', []); + testErrorsAndWarnings('row var = mv_max(to_version("1.0.0"))', []); + testErrorsAndWarnings('row mv_max(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = mv_max(to_version("a"))', []); + + testErrorsAndWarnings('row var = mv_max(to_cartesianpoint("POINT (30 10)"))', [ + 'Argument of [mv_max] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | where mv_max(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where mv_max(cartesianPointField) > 0', [ + 'Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | where mv_max(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_max(longField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_max(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(to_boolean(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval mv_max(cartesianPointField)', [ + 'Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_max(*)', [ + 'Using wildcards (*) in mv_max is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_max(dateField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(doubleField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(to_double(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(integerField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(ipField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(to_ip(ipField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(keywordField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(longField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(longField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(textField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(textField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(versionField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(to_version(keywordField))', []); + + testErrorsAndWarnings('from a_index | eval mv_max(booleanField, extraArg)', [ + 'Error: [mv_max] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_max(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_max(nullVar)', []); + testErrorsAndWarnings('from a_index | eval mv_max("2022")', []); + testErrorsAndWarnings('from a_index | eval mv_max(concat("20", "22"))', []); + }); + + describe('mv_median', () => { + testErrorsAndWarnings('row var = mv_median(5.5)', []); + testErrorsAndWarnings('row mv_median(5.5)', []); + testErrorsAndWarnings('row var = mv_median(to_double(true))', []); + testErrorsAndWarnings('row var = mv_median(5)', []); + testErrorsAndWarnings('row mv_median(5)', []); + testErrorsAndWarnings('row var = mv_median(to_integer(true))', []); + + testErrorsAndWarnings('row var = mv_median(true)', [ + 'Argument of [mv_median] must be [double], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where mv_median(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where mv_median(booleanField) > 0', [ + 'Argument of [mv_median] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where mv_median(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_median(longField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_median(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = mv_median(doubleField)', []); + testErrorsAndWarnings('from a_index | eval mv_median(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_median(to_double(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval mv_median(booleanField)', [ + 'Argument of [mv_median] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_median(*)', [ + 'Using wildcards (*) in mv_median is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_median(integerField)', []); + testErrorsAndWarnings('from a_index | eval mv_median(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_median(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_median(longField)', []); + testErrorsAndWarnings('from a_index | eval mv_median(longField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_median(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval mv_median(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval mv_median(doubleField, extraArg)', [ + 'Error: [mv_median] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_median(doubleField)', []); + testErrorsAndWarnings('from a_index | eval mv_median(null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_median(nullVar)', []); + }); + + describe('mv_min', () => { + testErrorsAndWarnings('row var = mv_min(true)', []); + testErrorsAndWarnings('row mv_min(true)', []); + testErrorsAndWarnings('row var = mv_min(to_boolean(true))', []); + testErrorsAndWarnings('row var = mv_min(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row mv_min(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings( + 'row var = mv_min(to_datetime(to_datetime("2021-01-01T00:00:00Z")))', + [] + ); + testErrorsAndWarnings('row var = mv_min(5.5)', []); + testErrorsAndWarnings('row mv_min(5.5)', []); + testErrorsAndWarnings('row var = mv_min(to_double(true))', []); + testErrorsAndWarnings('row var = mv_min(5)', []); + testErrorsAndWarnings('row mv_min(5)', []); + testErrorsAndWarnings('row var = mv_min(to_integer(true))', []); + testErrorsAndWarnings('row var = mv_min(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row mv_min(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = mv_min(to_ip(to_ip("127.0.0.1")))', []); + testErrorsAndWarnings('row var = mv_min("a")', []); + testErrorsAndWarnings('row mv_min("a")', []); + testErrorsAndWarnings('row var = mv_min(to_string(true))', []); + testErrorsAndWarnings('row var = mv_min(to_version("1.0.0"))', []); + testErrorsAndWarnings('row mv_min(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = mv_min(to_version("a"))', []); + + testErrorsAndWarnings('row var = mv_min(to_cartesianpoint("POINT (30 10)"))', [ + 'Argument of [mv_min] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | where mv_min(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where mv_min(cartesianPointField) > 0', [ + 'Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | where mv_min(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_min(longField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_min(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(to_boolean(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval mv_min(cartesianPointField)', [ + 'Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_min(*)', [ + 'Using wildcards (*) in mv_min is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_min(dateField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(doubleField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(to_double(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(integerField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(ipField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(to_ip(ipField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(keywordField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(longField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(longField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(textField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(textField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(versionField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(to_version(keywordField))', []); + + testErrorsAndWarnings('from a_index | eval mv_min(booleanField, extraArg)', [ + 'Error: [mv_min] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_min(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_min(nullVar)', []); + testErrorsAndWarnings('from a_index | eval mv_min("2022")', []); + testErrorsAndWarnings('from a_index | eval mv_min(concat("20", "22"))', []); + }); + + describe('mv_slice', () => { + testErrorsAndWarnings('row var = mv_slice(true, 5, 5)', []); + testErrorsAndWarnings('row mv_slice(true, 5, 5)', []); + + testErrorsAndWarnings( + 'row var = mv_slice(to_boolean(true), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = mv_slice(cartesianPointField, 5, 5)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row mv_slice(cartesianPointField, 5, 5)', [ + 'Unknown column [cartesianPointField]', + ]); + + testErrorsAndWarnings( + 'row var = mv_slice(to_cartesianpoint(cartesianPointField), to_integer(true), to_integer(true))', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings('row var = mv_slice(to_cartesianshape("POINT (30 10)"), 5, 5)', []); + testErrorsAndWarnings('row mv_slice(to_cartesianshape("POINT (30 10)"), 5, 5)', []); + + testErrorsAndWarnings( + 'row var = mv_slice(to_cartesianshape(cartesianPointField), to_integer(true), to_integer(true))', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings('row var = mv_slice(to_datetime("2021-01-01T00:00:00Z"), 5, 5)', []); + testErrorsAndWarnings('row mv_slice(to_datetime("2021-01-01T00:00:00Z"), 5, 5)', []); + + testErrorsAndWarnings( + 'row var = mv_slice(to_datetime(to_datetime("2021-01-01T00:00:00Z")), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = mv_slice(5.5, 5, 5)', []); + testErrorsAndWarnings('row mv_slice(5.5, 5, 5)', []); + + testErrorsAndWarnings( + 'row var = mv_slice(to_double(true), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = mv_slice(geoPointField, 5, 5)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row mv_slice(geoPointField, 5, 5)', [ + 'Unknown column [geoPointField]', + ]); + + testErrorsAndWarnings( + 'row var = mv_slice(to_geopoint(geoPointField), to_integer(true), to_integer(true))', + ['Unknown column [geoPointField]'] + ); + + testErrorsAndWarnings('row var = mv_slice(to_geoshape("POINT (30 10)"), 5, 5)', []); + testErrorsAndWarnings('row mv_slice(to_geoshape("POINT (30 10)"), 5, 5)', []); + + testErrorsAndWarnings( + 'row var = mv_slice(to_geoshape(geoPointField), to_integer(true), to_integer(true))', + ['Unknown column [geoPointField]'] + ); + + testErrorsAndWarnings('row var = mv_slice(5, 5, 5)', []); + testErrorsAndWarnings('row mv_slice(5, 5, 5)', []); + + testErrorsAndWarnings( + 'row var = mv_slice(to_integer(true), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = mv_slice(to_ip("127.0.0.1"), 5, 5)', []); + testErrorsAndWarnings('row mv_slice(to_ip("127.0.0.1"), 5, 5)', []); + + testErrorsAndWarnings( + 'row var = mv_slice(to_ip(to_ip("127.0.0.1")), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = mv_slice("a", 5, 5)', []); + testErrorsAndWarnings('row mv_slice("a", 5, 5)', []); + + testErrorsAndWarnings( + 'row var = mv_slice(to_string(true), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = mv_slice(5, to_integer(true), to_integer(true))', []); + testErrorsAndWarnings('row var = mv_slice(to_version("1.0.0"), 5, 5)', []); + testErrorsAndWarnings('row mv_slice(to_version("1.0.0"), 5, 5)', []); + + testErrorsAndWarnings( + 'row var = mv_slice(to_version("a"), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = mv_slice(5.5, true, true)', [ + 'Argument of [mv_slice] must be [integer], found value [true] type [boolean]', + 'Argument of [mv_slice] must be [integer], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | where mv_slice(doubleField, integerField, integerField) > 0', + [] + ); + + testErrorsAndWarnings( + 'from a_index | where mv_slice(counterDoubleField, booleanField, booleanField) > 0', + [ + 'Argument of [mv_slice] must be [boolean], found value [counterDoubleField] type [counter_double]', + 'Argument of [mv_slice] must be [integer], found value [booleanField] type [boolean]', + 'Argument of [mv_slice] must be [integer], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | where mv_slice(integerField, integerField, integerField) > 0', + [] + ); + + testErrorsAndWarnings( + 'from a_index | where mv_slice(longField, integerField, integerField) > 0', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(booleanField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(booleanField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_boolean(booleanField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(counterDoubleField, booleanField, booleanField)', + [ + 'Argument of [mv_slice] must be [boolean], found value [counterDoubleField] type [counter_double]', + 'Argument of [mv_slice] must be [integer], found value [booleanField] type [boolean]', + 'Argument of [mv_slice] must be [integer], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(cartesianPointField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(cartesianPointField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_cartesianpoint(cartesianPointField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(cartesianShapeField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(cartesianShapeField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_cartesianshape(cartesianPointField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(dateField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(dateField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_datetime(dateField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(doubleField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(doubleField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_double(booleanField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(geoPointField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(geoPointField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_geopoint(geoPointField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(geoShapeField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(geoShapeField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_geoshape(geoPointField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(integerField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(integerField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_integer(booleanField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(ipField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(ipField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_ip(ipField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(keywordField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(keywordField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_string(booleanField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(longField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(longField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(longField, to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(textField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(textField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(versionField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(versionField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_version(keywordField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(booleanField, integerField, integerField, extraArg)', + ['Error: [mv_slice] function expects no more than 3 arguments, got 4.'] + ); + + testErrorsAndWarnings( + 'from a_index | sort mv_slice(booleanField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings('from a_index | eval mv_slice(null, null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_slice(nullVar, nullVar, nullVar)', []); + testErrorsAndWarnings( + 'from a_index | eval mv_slice("2022", integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(concat("20", "22"), integerField, integerField)', + [] + ); + }); + + describe('mv_sort', () => { + testErrorsAndWarnings('row var = mv_sort(true, "asc")', []); + testErrorsAndWarnings('row mv_sort(true, "asc")', []); + testErrorsAndWarnings('row var = mv_sort(to_datetime("2021-01-01T00:00:00Z"), "asc")', []); + testErrorsAndWarnings('row mv_sort(to_datetime("2021-01-01T00:00:00Z"), "asc")', []); + testErrorsAndWarnings('row var = mv_sort(5.5, "asc")', []); + testErrorsAndWarnings('row mv_sort(5.5, "asc")', []); + testErrorsAndWarnings('row var = mv_sort(5, "asc")', []); + testErrorsAndWarnings('row mv_sort(5, "asc")', []); + testErrorsAndWarnings('row var = mv_sort(to_ip("127.0.0.1"), "asc")', []); + testErrorsAndWarnings('row mv_sort(to_ip("127.0.0.1"), "asc")', []); + testErrorsAndWarnings('row var = mv_sort("a", "asc")', []); + testErrorsAndWarnings('row mv_sort("a", "asc")', []); + testErrorsAndWarnings('row var = mv_sort(to_version("1.0.0"), "asc")', []); + testErrorsAndWarnings('row mv_sort(to_version("1.0.0"), "asc")', []); + + testErrorsAndWarnings('row var = mv_sort(to_cartesianpoint("POINT (30 10)"), true)', [ + 'Argument of [mv_sort] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + 'Argument of [mv_sort] must be [keyword], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_sort(booleanField, "asc")', []); + testErrorsAndWarnings('from a_index | eval mv_sort(booleanField, "asc")', []); + testErrorsAndWarnings('from a_index | eval var = mv_sort(dateField, "asc")', []); + testErrorsAndWarnings('from a_index | eval mv_sort(dateField, "asc")', []); + testErrorsAndWarnings('from a_index | eval var = mv_sort(doubleField, "asc")', []); + testErrorsAndWarnings('from a_index | eval mv_sort(doubleField, "asc")', []); + testErrorsAndWarnings('from a_index | eval var = mv_sort(integerField, "asc")', []); + testErrorsAndWarnings('from a_index | eval mv_sort(integerField, "asc")', []); + testErrorsAndWarnings('from a_index | eval var = mv_sort(ipField, "asc")', []); + testErrorsAndWarnings('from a_index | eval mv_sort(ipField, "asc")', []); + testErrorsAndWarnings('from a_index | eval var = mv_sort(keywordField, "asc")', []); + testErrorsAndWarnings('from a_index | eval mv_sort(keywordField, "asc")', []); + testErrorsAndWarnings('from a_index | eval var = mv_sort(longField, "asc")', []); + testErrorsAndWarnings('from a_index | eval mv_sort(longField, "asc")', []); + testErrorsAndWarnings('from a_index | eval var = mv_sort(textField, "asc")', []); + testErrorsAndWarnings('from a_index | eval mv_sort(textField, "asc")', []); + testErrorsAndWarnings('from a_index | eval var = mv_sort(versionField, "asc")', []); + testErrorsAndWarnings('from a_index | eval mv_sort(versionField, "asc")', []); + + testErrorsAndWarnings('from a_index | eval mv_sort(booleanField, "asc", extraArg)', [ + 'Error: [mv_sort] function expects no more than 2 arguments, got 3.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_sort(booleanField, "asc")', []); + testErrorsAndWarnings('from a_index | eval mv_sort(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_sort(nullVar, nullVar)', []); + testErrorsAndWarnings('from a_index | eval mv_sort("2022", "asc")', []); + testErrorsAndWarnings('from a_index | eval mv_sort(concat("20", "22"), "asc")', []); + }); + + describe('mv_sum', () => { + testErrorsAndWarnings('row var = mv_sum(5.5)', []); + testErrorsAndWarnings('row mv_sum(5.5)', []); + testErrorsAndWarnings('row var = mv_sum(to_double(true))', []); + testErrorsAndWarnings('row var = mv_sum(5)', []); + testErrorsAndWarnings('row mv_sum(5)', []); + testErrorsAndWarnings('row var = mv_sum(to_integer(true))', []); + + testErrorsAndWarnings('row var = mv_sum(true)', [ + 'Argument of [mv_sum] must be [double], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where mv_sum(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where mv_sum(booleanField) > 0', [ + 'Argument of [mv_sum] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where mv_sum(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_sum(longField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_sum(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = mv_sum(doubleField)', []); + testErrorsAndWarnings('from a_index | eval mv_sum(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_sum(to_double(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval mv_sum(booleanField)', [ + 'Argument of [mv_sum] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_sum(*)', [ + 'Using wildcards (*) in mv_sum is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_sum(integerField)', []); + testErrorsAndWarnings('from a_index | eval mv_sum(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_sum(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_sum(longField)', []); + testErrorsAndWarnings('from a_index | eval mv_sum(longField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_sum(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval mv_sum(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval mv_sum(doubleField, extraArg)', [ + 'Error: [mv_sum] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_sum(doubleField)', []); + testErrorsAndWarnings('from a_index | eval mv_sum(null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_sum(nullVar)', []); + }); + + describe('mv_zip', () => { + testErrorsAndWarnings('row var = mv_zip("a", "a")', []); + testErrorsAndWarnings('row mv_zip("a", "a")', []); + testErrorsAndWarnings('row var = mv_zip(to_string(true), to_string(true))', []); + testErrorsAndWarnings('row var = mv_zip("a", "a", "a")', []); + testErrorsAndWarnings('row mv_zip("a", "a", "a")', []); + testErrorsAndWarnings( + 'row var = mv_zip(to_string(true), to_string(true), to_string(true))', + [] + ); + + testErrorsAndWarnings('row var = mv_zip(true, true, true)', [ + 'Argument of [mv_zip] must be [keyword], found value [true] type [boolean]', + 'Argument of [mv_zip] must be [keyword], found value [true] type [boolean]', + 'Argument of [mv_zip] must be [keyword], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_zip(keywordField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval mv_zip(keywordField, keywordField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_zip(to_string(booleanField), to_string(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval mv_zip(booleanField, booleanField)', [ + 'Argument of [mv_zip] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [mv_zip] must be [keyword], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_zip(keywordField, keywordField, keywordField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_zip(keywordField, keywordField, keywordField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_zip(to_string(booleanField), to_string(booleanField), to_string(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_zip(booleanField, booleanField, booleanField)', + [ + 'Argument of [mv_zip] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [mv_zip] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [mv_zip] must be [keyword], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_zip(keywordField, keywordField, textField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_zip(keywordField, keywordField, textField)', + [] + ); + testErrorsAndWarnings('from a_index | eval var = mv_zip(keywordField, textField)', []); + testErrorsAndWarnings('from a_index | eval mv_zip(keywordField, textField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_zip(keywordField, textField, keywordField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_zip(keywordField, textField, keywordField)', + [] + ); + testErrorsAndWarnings( + 'from a_index | eval var = mv_zip(keywordField, textField, textField)', + [] + ); + testErrorsAndWarnings('from a_index | eval mv_zip(keywordField, textField, textField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_zip(textField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval mv_zip(textField, keywordField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_zip(textField, keywordField, keywordField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_zip(textField, keywordField, keywordField)', + [] + ); + testErrorsAndWarnings( + 'from a_index | eval var = mv_zip(textField, keywordField, textField)', + [] + ); + testErrorsAndWarnings('from a_index | eval mv_zip(textField, keywordField, textField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_zip(textField, textField)', []); + testErrorsAndWarnings('from a_index | eval mv_zip(textField, textField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = mv_zip(textField, textField, keywordField)', + [] + ); + testErrorsAndWarnings('from a_index | eval mv_zip(textField, textField, keywordField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = mv_zip(textField, textField, textField)', + [] + ); + testErrorsAndWarnings('from a_index | eval mv_zip(textField, textField, textField)', []); + + testErrorsAndWarnings( + 'from a_index | eval mv_zip(keywordField, keywordField, keywordField, extraArg)', + ['Error: [mv_zip] function expects no more than 3 arguments, got 4.'] + ); + + testErrorsAndWarnings('from a_index | sort mv_zip(keywordField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval mv_zip(null, null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval mv_zip(nullVar, nullVar, nullVar)', []); + }); + + describe('now', () => { + testErrorsAndWarnings('row var = now()', []); + testErrorsAndWarnings('row now()', []); + testErrorsAndWarnings('from a_index | eval var = now()', []); + testErrorsAndWarnings('from a_index | eval now()', []); + + testErrorsAndWarnings('from a_index | eval now(extraArg)', [ + 'Error: [now] function expects exactly 0 arguments, got 1.', + ]); + + testErrorsAndWarnings('from a_index | sort now()', []); + testErrorsAndWarnings('row nullVar = null | eval now()', []); + }); + + describe('pi', () => { + testErrorsAndWarnings('row var = pi()', []); + testErrorsAndWarnings('row pi()', []); + testErrorsAndWarnings('from a_index | where pi() > 0', []); + testErrorsAndWarnings('from a_index | eval var = pi()', []); + testErrorsAndWarnings('from a_index | eval pi()', []); + + testErrorsAndWarnings('from a_index | eval pi(extraArg)', [ + 'Error: [pi] function expects exactly 0 arguments, got 1.', + ]); + + testErrorsAndWarnings('from a_index | sort pi()', []); + testErrorsAndWarnings('row nullVar = null | eval pi()', []); + }); + + describe('pow', () => { + testErrorsAndWarnings('row var = pow(5.5, 5.5)', []); + testErrorsAndWarnings('row pow(5.5, 5.5)', []); + testErrorsAndWarnings('row var = pow(to_double(true), to_double(true))', []); + testErrorsAndWarnings('row var = pow(5.5, 5)', []); + testErrorsAndWarnings('row pow(5.5, 5)', []); + testErrorsAndWarnings('row var = pow(to_double(true), to_integer(true))', []); + testErrorsAndWarnings('row var = pow(to_double(true), 5)', []); + testErrorsAndWarnings('row var = pow(5, 5.5)', []); + testErrorsAndWarnings('row pow(5, 5.5)', []); + testErrorsAndWarnings('row var = pow(to_integer(true), to_double(true))', []); + testErrorsAndWarnings('row var = pow(5, 5)', []); + testErrorsAndWarnings('row pow(5, 5)', []); + testErrorsAndWarnings('row var = pow(to_integer(true), to_integer(true))', []); + testErrorsAndWarnings('row var = pow(to_integer(true), 5)', []); + testErrorsAndWarnings('row var = pow(5, to_double(true))', []); + testErrorsAndWarnings('row var = pow(5, to_integer(true))', []); + + testErrorsAndWarnings('row var = pow(true, true)', [ + 'Argument of [pow] must be [double], found value [true] type [boolean]', + 'Argument of [pow] must be [double], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where pow(doubleField, doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where pow(booleanField, booleanField) > 0', [ + 'Argument of [pow] must be [double], found value [booleanField] type [boolean]', + 'Argument of [pow] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where pow(doubleField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where pow(doubleField, longField) > 0', []); + testErrorsAndWarnings('from a_index | where pow(doubleField, unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | where pow(integerField, doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where pow(integerField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where pow(integerField, longField) > 0', []); + testErrorsAndWarnings('from a_index | where pow(integerField, unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | where pow(longField, doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where pow(longField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where pow(longField, longField) > 0', []); + testErrorsAndWarnings('from a_index | where pow(longField, unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | where pow(unsignedLongField, doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where pow(unsignedLongField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where pow(unsignedLongField, longField) > 0', []); + testErrorsAndWarnings( + 'from a_index | where pow(unsignedLongField, unsignedLongField) > 0', + [] + ); + testErrorsAndWarnings('from a_index | eval var = pow(doubleField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval pow(doubleField, doubleField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = pow(to_double(booleanField), to_double(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval pow(booleanField, booleanField)', [ + 'Argument of [pow] must be [double], found value [booleanField] type [boolean]', + 'Argument of [pow] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = pow(doubleField, integerField)', []); + testErrorsAndWarnings('from a_index | eval pow(doubleField, integerField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = pow(to_double(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = pow(doubleField, longField)', []); + testErrorsAndWarnings('from a_index | eval pow(doubleField, longField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = pow(to_double(booleanField), longField)', + [] + ); + testErrorsAndWarnings('from a_index | eval var = pow(doubleField, unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval pow(doubleField, unsignedLongField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = pow(to_double(booleanField), unsignedLongField)', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = pow(integerField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval pow(integerField, doubleField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = pow(to_integer(booleanField), to_double(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = pow(integerField, integerField)', []); + testErrorsAndWarnings('from a_index | eval pow(integerField, integerField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = pow(to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = pow(integerField, longField)', []); + testErrorsAndWarnings('from a_index | eval pow(integerField, longField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = pow(to_integer(booleanField), longField)', + [] + ); + testErrorsAndWarnings('from a_index | eval var = pow(integerField, unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval pow(integerField, unsignedLongField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = pow(to_integer(booleanField), unsignedLongField)', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = pow(longField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval pow(longField, doubleField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = pow(longField, to_double(booleanField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = pow(longField, integerField)', []); + testErrorsAndWarnings('from a_index | eval pow(longField, integerField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = pow(longField, to_integer(booleanField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = pow(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval pow(longField, longField)', []); + testErrorsAndWarnings('from a_index | eval var = pow(longField, unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval pow(longField, unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = pow(unsignedLongField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval pow(unsignedLongField, doubleField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = pow(unsignedLongField, to_double(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = pow(unsignedLongField, integerField)', []); + testErrorsAndWarnings('from a_index | eval pow(unsignedLongField, integerField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = pow(unsignedLongField, to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = pow(unsignedLongField, longField)', []); + testErrorsAndWarnings('from a_index | eval pow(unsignedLongField, longField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = pow(unsignedLongField, unsignedLongField)', + [] + ); + testErrorsAndWarnings('from a_index | eval pow(unsignedLongField, unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval pow(doubleField, doubleField, extraArg)', [ + 'Error: [pow] function expects exactly 2 arguments, got 3.', + ]); + + testErrorsAndWarnings('from a_index | sort pow(doubleField, doubleField)', []); + testErrorsAndWarnings('from a_index | eval pow(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval pow(nullVar, nullVar)', []); + }); + + describe('repeat', () => { + testErrorsAndWarnings('row var = repeat("a", 5)', []); + testErrorsAndWarnings('row repeat("a", 5)', []); + testErrorsAndWarnings('row var = repeat(to_string(true), to_integer(true))', []); + + testErrorsAndWarnings('row var = repeat(true, true)', [ + 'Argument of [repeat] must be [keyword], found value [true] type [boolean]', + 'Argument of [repeat] must be [integer], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = repeat(keywordField, integerField)', []); + testErrorsAndWarnings('from a_index | eval repeat(keywordField, integerField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = repeat(to_string(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval repeat(booleanField, booleanField)', [ + 'Argument of [repeat] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [repeat] must be [integer], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = repeat(textField, integerField)', []); + testErrorsAndWarnings('from a_index | eval repeat(textField, integerField)', []); + + testErrorsAndWarnings('from a_index | eval repeat(keywordField, integerField, extraArg)', [ + 'Error: [repeat] function expects exactly 2 arguments, got 3.', + ]); + + testErrorsAndWarnings('from a_index | sort repeat(keywordField, integerField)', []); + testErrorsAndWarnings('from a_index | eval repeat(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval repeat(nullVar, nullVar)', []); + }); + + describe('replace', () => { + testErrorsAndWarnings('row var = replace("a", "a", "a")', []); + testErrorsAndWarnings('row replace("a", "a", "a")', []); + testErrorsAndWarnings( + 'row var = replace(to_string(true), to_string(true), to_string(true))', + [] + ); + + testErrorsAndWarnings('row var = replace(true, true, true)', [ + 'Argument of [replace] must be [keyword], found value [true] type [boolean]', + 'Argument of [replace] must be [keyword], found value [true] type [boolean]', + 'Argument of [replace] must be [keyword], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = replace(keywordField, keywordField, keywordField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval replace(keywordField, keywordField, keywordField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = replace(to_string(booleanField), to_string(booleanField), to_string(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval replace(booleanField, booleanField, booleanField)', + [ + 'Argument of [replace] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [replace] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [replace] must be [keyword], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = replace(keywordField, keywordField, textField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval replace(keywordField, keywordField, textField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = replace(keywordField, textField, keywordField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval replace(keywordField, textField, keywordField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = replace(keywordField, textField, textField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval replace(keywordField, textField, textField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = replace(textField, keywordField, keywordField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval replace(textField, keywordField, keywordField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = replace(textField, keywordField, textField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval replace(textField, keywordField, textField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = replace(textField, textField, keywordField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval replace(textField, textField, keywordField)', + [] + ); + testErrorsAndWarnings( + 'from a_index | eval var = replace(textField, textField, textField)', + [] + ); + testErrorsAndWarnings('from a_index | eval replace(textField, textField, textField)', []); + + testErrorsAndWarnings( + 'from a_index | eval replace(keywordField, keywordField, keywordField, extraArg)', + ['Error: [replace] function expects exactly 3 arguments, got 4.'] + ); + + testErrorsAndWarnings( + 'from a_index | sort replace(keywordField, keywordField, keywordField)', + [] + ); + + testErrorsAndWarnings('from a_index | eval replace(null, null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval replace(nullVar, nullVar, nullVar)', []); + }); + + describe('right', () => { + testErrorsAndWarnings('row var = right("a", 5)', []); + testErrorsAndWarnings('row right("a", 5)', []); + testErrorsAndWarnings('row var = right(to_string(true), to_integer(true))', []); + + testErrorsAndWarnings('row var = right(true, true)', [ + 'Argument of [right] must be [keyword], found value [true] type [boolean]', + 'Argument of [right] must be [integer], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = right(keywordField, integerField)', []); + testErrorsAndWarnings('from a_index | eval right(keywordField, integerField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = right(to_string(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval right(booleanField, booleanField)', [ + 'Argument of [right] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [right] must be [integer], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = right(textField, integerField)', []); + testErrorsAndWarnings('from a_index | eval right(textField, integerField)', []); + + testErrorsAndWarnings('from a_index | eval right(keywordField, integerField, extraArg)', [ + 'Error: [right] function expects exactly 2 arguments, got 3.', + ]); + + testErrorsAndWarnings('from a_index | sort right(keywordField, integerField)', []); + testErrorsAndWarnings('from a_index | eval right(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval right(nullVar, nullVar)', []); + }); + + describe('round', () => { + testErrorsAndWarnings('row var = round(5.5)', []); + testErrorsAndWarnings('row round(5.5)', []); + testErrorsAndWarnings('row var = round(to_double(true))', []); + testErrorsAndWarnings('row var = round(5.5, 5)', []); + testErrorsAndWarnings('row round(5.5, 5)', []); + testErrorsAndWarnings('row var = round(to_double(true), to_integer(true))', []); + testErrorsAndWarnings('row var = round(5)', []); + testErrorsAndWarnings('row round(5)', []); + testErrorsAndWarnings('row var = round(to_integer(true))', []); + testErrorsAndWarnings('row var = round(5, 5)', []); + testErrorsAndWarnings('row round(5, 5)', []); + testErrorsAndWarnings('row var = round(to_integer(true), to_integer(true))', []); + testErrorsAndWarnings('row var = round(5, to_integer(true))', []); + + testErrorsAndWarnings('row var = round(true, true)', [ + 'Argument of [round] must be [double], found value [true] type [boolean]', + 'Argument of [round] must be [integer], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where round(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where round(booleanField) > 0', [ + 'Argument of [round] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where round(doubleField, integerField) > 0', []); + + testErrorsAndWarnings('from a_index | where round(booleanField, booleanField) > 0', [ + 'Argument of [round] must be [double], found value [booleanField] type [boolean]', + 'Argument of [round] must be [integer], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where round(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where round(integerField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where round(longField) > 0', []); + testErrorsAndWarnings('from a_index | where round(longField, integerField) > 0', []); + testErrorsAndWarnings('from a_index | where round(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = round(doubleField)', []); + testErrorsAndWarnings('from a_index | eval round(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = round(to_double(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval round(booleanField)', [ + 'Argument of [round] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = round(*)', [ + 'Using wildcards (*) in round is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = round(doubleField, integerField)', []); + testErrorsAndWarnings('from a_index | eval round(doubleField, integerField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = round(to_double(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval round(booleanField, booleanField)', [ + 'Argument of [round] must be [double], found value [booleanField] type [boolean]', + 'Argument of [round] must be [integer], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = round(integerField)', []); + testErrorsAndWarnings('from a_index | eval round(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = round(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = round(integerField, integerField)', []); + testErrorsAndWarnings('from a_index | eval round(integerField, integerField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = round(to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = round(longField)', []); + testErrorsAndWarnings('from a_index | eval round(longField)', []); + testErrorsAndWarnings('from a_index | eval var = round(longField, integerField)', []); + testErrorsAndWarnings('from a_index | eval round(longField, integerField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = round(longField, to_integer(booleanField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = round(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval round(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval round(doubleField, integerField, extraArg)', [ + 'Error: [round] function expects no more than 2 arguments, got 3.', + ]); + + testErrorsAndWarnings('from a_index | sort round(doubleField)', []); + testErrorsAndWarnings('from a_index | eval round(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval round(nullVar, nullVar)', []); + }); + + describe('rtrim', () => { + testErrorsAndWarnings('row var = rtrim("a")', []); + testErrorsAndWarnings('row rtrim("a")', []); + testErrorsAndWarnings('row var = rtrim(to_string(true))', []); + + testErrorsAndWarnings('row var = rtrim(true)', [ + 'Argument of [rtrim] must be [keyword], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = rtrim(keywordField)', []); + testErrorsAndWarnings('from a_index | eval rtrim(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = rtrim(to_string(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval rtrim(booleanField)', [ + 'Argument of [rtrim] must be [keyword], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = rtrim(*)', [ + 'Using wildcards (*) in rtrim is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = rtrim(textField)', []); + testErrorsAndWarnings('from a_index | eval rtrim(textField)', []); + + testErrorsAndWarnings('from a_index | eval rtrim(keywordField, extraArg)', [ + 'Error: [rtrim] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort rtrim(keywordField)', []); + testErrorsAndWarnings('from a_index | eval rtrim(null)', []); + testErrorsAndWarnings('row nullVar = null | eval rtrim(nullVar)', []); + }); + + describe('signum', () => { + testErrorsAndWarnings('row var = signum(5.5)', []); + testErrorsAndWarnings('row signum(5.5)', []); + testErrorsAndWarnings('row var = signum(to_double(true))', []); + testErrorsAndWarnings('row var = signum(5)', []); + testErrorsAndWarnings('row signum(5)', []); + testErrorsAndWarnings('row var = signum(to_integer(true))', []); + + testErrorsAndWarnings('row var = signum(true)', [ + 'Argument of [signum] must be [double], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where signum(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where signum(booleanField) > 0', [ + 'Argument of [signum] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where signum(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where signum(longField) > 0', []); + testErrorsAndWarnings('from a_index | where signum(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = signum(doubleField)', []); + testErrorsAndWarnings('from a_index | eval signum(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = signum(to_double(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval signum(booleanField)', [ + 'Argument of [signum] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = signum(*)', [ + 'Using wildcards (*) in signum is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = signum(integerField)', []); + testErrorsAndWarnings('from a_index | eval signum(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = signum(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = signum(longField)', []); + testErrorsAndWarnings('from a_index | eval signum(longField)', []); + testErrorsAndWarnings('from a_index | eval var = signum(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval signum(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval signum(doubleField, extraArg)', [ + 'Error: [signum] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort signum(doubleField)', []); + testErrorsAndWarnings('from a_index | eval signum(null)', []); + testErrorsAndWarnings('row nullVar = null | eval signum(nullVar)', []); + }); + + describe('sin', () => { + testErrorsAndWarnings('row var = sin(5.5)', []); + testErrorsAndWarnings('row sin(5.5)', []); + testErrorsAndWarnings('row var = sin(to_double(true))', []); + testErrorsAndWarnings('row var = sin(5)', []); + testErrorsAndWarnings('row sin(5)', []); + testErrorsAndWarnings('row var = sin(to_integer(true))', []); + + testErrorsAndWarnings('row var = sin(true)', [ + 'Argument of [sin] must be [double], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where sin(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where sin(booleanField) > 0', [ + 'Argument of [sin] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where sin(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where sin(longField) > 0', []); + testErrorsAndWarnings('from a_index | where sin(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = sin(doubleField)', []); + testErrorsAndWarnings('from a_index | eval sin(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = sin(to_double(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval sin(booleanField)', [ + 'Argument of [sin] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = sin(*)', [ + 'Using wildcards (*) in sin is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = sin(integerField)', []); + testErrorsAndWarnings('from a_index | eval sin(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = sin(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = sin(longField)', []); + testErrorsAndWarnings('from a_index | eval sin(longField)', []); + testErrorsAndWarnings('from a_index | eval var = sin(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval sin(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval sin(doubleField, extraArg)', [ + 'Error: [sin] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort sin(doubleField)', []); + testErrorsAndWarnings('from a_index | eval sin(null)', []); + testErrorsAndWarnings('row nullVar = null | eval sin(nullVar)', []); + }); + + describe('sinh', () => { + testErrorsAndWarnings('row var = sinh(5.5)', []); + testErrorsAndWarnings('row sinh(5.5)', []); + testErrorsAndWarnings('row var = sinh(to_double(true))', []); + testErrorsAndWarnings('row var = sinh(5)', []); + testErrorsAndWarnings('row sinh(5)', []); + testErrorsAndWarnings('row var = sinh(to_integer(true))', []); + + testErrorsAndWarnings('row var = sinh(true)', [ + 'Argument of [sinh] must be [double], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where sinh(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where sinh(booleanField) > 0', [ + 'Argument of [sinh] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where sinh(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where sinh(longField) > 0', []); + testErrorsAndWarnings('from a_index | where sinh(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = sinh(doubleField)', []); + testErrorsAndWarnings('from a_index | eval sinh(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = sinh(to_double(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval sinh(booleanField)', [ + 'Argument of [sinh] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = sinh(*)', [ + 'Using wildcards (*) in sinh is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = sinh(integerField)', []); + testErrorsAndWarnings('from a_index | eval sinh(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = sinh(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = sinh(longField)', []); + testErrorsAndWarnings('from a_index | eval sinh(longField)', []); + testErrorsAndWarnings('from a_index | eval var = sinh(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval sinh(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval sinh(doubleField, extraArg)', [ + 'Error: [sinh] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort sinh(doubleField)', []); + testErrorsAndWarnings('from a_index | eval sinh(null)', []); + testErrorsAndWarnings('row nullVar = null | eval sinh(nullVar)', []); + }); + + describe('split', () => { + testErrorsAndWarnings('row var = split("a", "a")', []); + testErrorsAndWarnings('row split("a", "a")', []); + testErrorsAndWarnings('row var = split(to_string(true), to_string(true))', []); + + testErrorsAndWarnings('row var = split(true, true)', [ + 'Argument of [split] must be [keyword], found value [true] type [boolean]', + 'Argument of [split] must be [keyword], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = split(keywordField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval split(keywordField, keywordField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = split(to_string(booleanField), to_string(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval split(booleanField, booleanField)', [ + 'Argument of [split] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [split] must be [keyword], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = split(keywordField, textField)', []); + testErrorsAndWarnings('from a_index | eval split(keywordField, textField)', []); + testErrorsAndWarnings('from a_index | eval var = split(textField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval split(textField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = split(textField, textField)', []); + testErrorsAndWarnings('from a_index | eval split(textField, textField)', []); + + testErrorsAndWarnings('from a_index | eval split(keywordField, keywordField, extraArg)', [ + 'Error: [split] function expects exactly 2 arguments, got 3.', + ]); + + testErrorsAndWarnings('from a_index | sort split(keywordField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval split(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval split(nullVar, nullVar)', []); + }); + + describe('sqrt', () => { + testErrorsAndWarnings('row var = sqrt(5.5)', []); + testErrorsAndWarnings('row sqrt(5.5)', []); + testErrorsAndWarnings('row var = sqrt(to_double(true))', []); + testErrorsAndWarnings('row var = sqrt(5)', []); + testErrorsAndWarnings('row sqrt(5)', []); + testErrorsAndWarnings('row var = sqrt(to_integer(true))', []); + + testErrorsAndWarnings('row var = sqrt(true)', [ + 'Argument of [sqrt] must be [double], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where sqrt(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where sqrt(booleanField) > 0', [ + 'Argument of [sqrt] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where sqrt(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where sqrt(longField) > 0', []); + testErrorsAndWarnings('from a_index | where sqrt(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = sqrt(doubleField)', []); + testErrorsAndWarnings('from a_index | eval sqrt(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = sqrt(to_double(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval sqrt(booleanField)', [ + 'Argument of [sqrt] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = sqrt(*)', [ + 'Using wildcards (*) in sqrt is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = sqrt(integerField)', []); + testErrorsAndWarnings('from a_index | eval sqrt(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = sqrt(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = sqrt(longField)', []); + testErrorsAndWarnings('from a_index | eval sqrt(longField)', []); + testErrorsAndWarnings('from a_index | eval var = sqrt(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval sqrt(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval sqrt(doubleField, extraArg)', [ + 'Error: [sqrt] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort sqrt(doubleField)', []); + testErrorsAndWarnings('from a_index | eval sqrt(null)', []); + testErrorsAndWarnings('row nullVar = null | eval sqrt(nullVar)', []); + }); + + describe('st_contains', () => { + testErrorsAndWarnings('row var = st_contains(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row st_contains(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', + ]); + + testErrorsAndWarnings( + 'row var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_contains(cartesianPointField, to_cartesianshape("POINT (30 10)"))', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row st_contains(cartesianPointField, to_cartesianshape("POINT (30 10)"))', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_contains(to_cartesianshape("POINT (30 10)"), cartesianPointField)', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row st_contains(to_cartesianshape("POINT (30 10)"), cartesianPointField)', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_contains(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_contains(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings('row var = st_contains(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row st_contains(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings( + 'row var = st_contains(to_geopoint(geoPointField), to_geopoint(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + testErrorsAndWarnings( + 'row var = st_contains(geoPointField, to_geoshape("POINT (30 10)"))', + ['Unknown column [geoPointField]'] + ); + testErrorsAndWarnings('row st_contains(geoPointField, to_geoshape("POINT (30 10)"))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings( + 'row var = st_contains(to_geopoint(geoPointField), to_geoshape(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + testErrorsAndWarnings( + 'row var = st_contains(to_geoshape("POINT (30 10)"), geoPointField)', + ['Unknown column [geoPointField]'] + ); + testErrorsAndWarnings('row st_contains(to_geoshape("POINT (30 10)"), geoPointField)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings( + 'row var = st_contains(to_geoshape(geoPointField), to_geopoint(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_contains(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_contains(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_contains(to_geoshape(geoPointField), to_geoshape(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + + testErrorsAndWarnings('row var = st_contains(true, true)', [ + 'Argument of [st_contains] must be [cartesian_point], found value [true] type [boolean]', + 'Argument of [st_contains] must be [cartesian_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_contains(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_contains(booleanField, booleanField)', [ + 'Argument of [st_contains] must be [cartesian_point], found value [booleanField] type [boolean]', + 'Argument of [st_contains] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(cartesianPointField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_contains(cartesianPointField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(cartesianShapeField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_contains(cartesianShapeField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(cartesianShapeField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_contains(cartesianShapeField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(geoPointField, geoPointField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_contains(geoPointField, geoPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(to_geopoint(geoPointField), to_geopoint(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(geoPointField, geoShapeField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_contains(geoPointField, geoShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(to_geopoint(geoPointField), to_geoshape(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(geoShapeField, geoPointField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_contains(geoShapeField, geoPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(to_geoshape(geoPointField), to_geopoint(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(geoShapeField, geoShapeField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_contains(geoShapeField, geoShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(to_geoshape(geoPointField), to_geoshape(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_contains(cartesianPointField, cartesianPointField, extraArg)', + ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | sort st_contains(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_contains(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval st_contains(nullVar, nullVar)', []); + }); + + describe('st_disjoint', () => { + testErrorsAndWarnings('row var = st_disjoint(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row st_disjoint(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', + ]); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(cartesianPointField, to_cartesianshape("POINT (30 10)"))', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row st_disjoint(cartesianPointField, to_cartesianshape("POINT (30 10)"))', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_cartesianshape("POINT (30 10)"), cartesianPointField)', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row st_disjoint(to_cartesianshape("POINT (30 10)"), cartesianPointField)', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_disjoint(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings('row var = st_disjoint(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row st_disjoint(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings( + 'row var = st_disjoint(to_geopoint(geoPointField), to_geopoint(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + testErrorsAndWarnings( + 'row var = st_disjoint(geoPointField, to_geoshape("POINT (30 10)"))', + ['Unknown column [geoPointField]'] + ); + testErrorsAndWarnings('row st_disjoint(geoPointField, to_geoshape("POINT (30 10)"))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings( + 'row var = st_disjoint(to_geopoint(geoPointField), to_geoshape(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + testErrorsAndWarnings( + 'row var = st_disjoint(to_geoshape("POINT (30 10)"), geoPointField)', + ['Unknown column [geoPointField]'] + ); + testErrorsAndWarnings('row st_disjoint(to_geoshape("POINT (30 10)"), geoPointField)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings( + 'row var = st_disjoint(to_geoshape(geoPointField), to_geopoint(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_disjoint(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_geoshape(geoPointField), to_geoshape(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + + testErrorsAndWarnings('row var = st_disjoint(true, true)', [ + 'Argument of [st_disjoint] must be [cartesian_point], found value [true] type [boolean]', + 'Argument of [st_disjoint] must be [cartesian_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_disjoint(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_disjoint(booleanField, booleanField)', [ + 'Argument of [st_disjoint] must be [cartesian_point], found value [booleanField] type [boolean]', + 'Argument of [st_disjoint] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(cartesianPointField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_disjoint(cartesianPointField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(cartesianShapeField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_disjoint(cartesianShapeField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(cartesianShapeField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_disjoint(cartesianShapeField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(geoPointField, geoPointField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_disjoint(geoPointField, geoPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(to_geopoint(geoPointField), to_geopoint(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(geoPointField, geoShapeField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_disjoint(geoPointField, geoShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(to_geopoint(geoPointField), to_geoshape(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(geoShapeField, geoPointField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_disjoint(geoShapeField, geoPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(to_geoshape(geoPointField), to_geopoint(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(geoShapeField, geoShapeField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_disjoint(geoShapeField, geoShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(to_geoshape(geoPointField), to_geoshape(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_disjoint(cartesianPointField, cartesianPointField, extraArg)', + ['Error: [st_disjoint] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | sort st_disjoint(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_disjoint(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval st_disjoint(nullVar, nullVar)', []); + }); + + describe('st_distance', () => { + testErrorsAndWarnings('row var = st_distance(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row st_distance(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', + ]); + + testErrorsAndWarnings( + 'row var = st_distance(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings('row var = st_distance(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row st_distance(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings( + 'row var = st_distance(to_geopoint(geoPointField), to_geopoint(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + + testErrorsAndWarnings('row var = st_distance(true, true)', [ + 'Argument of [st_distance] must be [cartesian_point], found value [true] type [boolean]', + 'Argument of [st_distance] must be [cartesian_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = st_distance(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_distance(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_distance(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_distance(booleanField, booleanField)', [ + 'Argument of [st_distance] must be [cartesian_point], found value [booleanField] type [boolean]', + 'Argument of [st_distance] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = st_distance(geoPointField, geoPointField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_distance(geoPointField, geoPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_distance(to_geopoint(geoPointField), to_geopoint(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_distance(cartesianPointField, cartesianPointField, extraArg)', + ['Error: [st_distance] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | sort st_distance(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_distance(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval st_distance(nullVar, nullVar)', []); + }); + + describe('st_intersects', () => { + testErrorsAndWarnings('row var = st_intersects(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row st_intersects(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', + ]); + + testErrorsAndWarnings( + 'row var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(cartesianPointField, to_cartesianshape("POINT (30 10)"))', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row st_intersects(cartesianPointField, to_cartesianshape("POINT (30 10)"))', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_cartesianshape("POINT (30 10)"), cartesianPointField)', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row st_intersects(to_cartesianshape("POINT (30 10)"), cartesianPointField)', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_intersects(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings('row var = st_intersects(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row st_intersects(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings( + 'row var = st_intersects(to_geopoint(geoPointField), to_geopoint(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + testErrorsAndWarnings( + 'row var = st_intersects(geoPointField, to_geoshape("POINT (30 10)"))', + ['Unknown column [geoPointField]'] + ); + testErrorsAndWarnings('row st_intersects(geoPointField, to_geoshape("POINT (30 10)"))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings( + 'row var = st_intersects(to_geopoint(geoPointField), to_geoshape(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + testErrorsAndWarnings( + 'row var = st_intersects(to_geoshape("POINT (30 10)"), geoPointField)', + ['Unknown column [geoPointField]'] + ); + testErrorsAndWarnings('row st_intersects(to_geoshape("POINT (30 10)"), geoPointField)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings( + 'row var = st_intersects(to_geoshape(geoPointField), to_geopoint(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_intersects(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_geoshape(geoPointField), to_geoshape(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + + testErrorsAndWarnings('row var = st_intersects(true, true)', [ + 'Argument of [st_intersects] must be [cartesian_point], found value [true] type [boolean]', + 'Argument of [st_intersects] must be [cartesian_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_intersects(booleanField, booleanField)', [ + 'Argument of [st_intersects] must be [cartesian_point], found value [booleanField] type [boolean]', + 'Argument of [st_intersects] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(cartesianPointField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(cartesianPointField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(cartesianShapeField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(cartesianShapeField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(cartesianShapeField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(cartesianShapeField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(geoPointField, geoPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(geoPointField, geoPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(to_geopoint(geoPointField), to_geopoint(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(geoPointField, geoShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(geoPointField, geoShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(to_geopoint(geoPointField), to_geoshape(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(geoShapeField, geoPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(geoShapeField, geoPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(to_geoshape(geoPointField), to_geopoint(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(geoShapeField, geoShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(geoShapeField, geoShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(to_geoshape(geoPointField), to_geoshape(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(cartesianPointField, cartesianPointField, extraArg)', + ['Error: [st_intersects] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | sort st_intersects(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_intersects(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval st_intersects(nullVar, nullVar)', []); + }); + + describe('st_within', () => { + testErrorsAndWarnings('row var = st_within(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row st_within(cartesianPointField, cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + 'Unknown column [cartesianPointField]', + ]); + + testErrorsAndWarnings( + 'row var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_within(cartesianPointField, to_cartesianshape("POINT (30 10)"))', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row st_within(cartesianPointField, to_cartesianshape("POINT (30 10)"))', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_within(to_cartesianshape("POINT (30 10)"), cartesianPointField)', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row st_within(to_cartesianshape("POINT (30 10)"), cartesianPointField)', + ['Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_within(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_within(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_within(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_within(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + ['Unknown column [cartesianPointField]', 'Unknown column [cartesianPointField]'] + ); + + testErrorsAndWarnings('row var = st_within(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row st_within(geoPointField, geoPointField)', [ + 'Unknown column [geoPointField]', + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings( + 'row var = st_within(to_geopoint(geoPointField), to_geopoint(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + testErrorsAndWarnings('row var = st_within(geoPointField, to_geoshape("POINT (30 10)"))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row st_within(geoPointField, to_geoshape("POINT (30 10)"))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings( + 'row var = st_within(to_geopoint(geoPointField), to_geoshape(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + testErrorsAndWarnings('row var = st_within(to_geoshape("POINT (30 10)"), geoPointField)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row st_within(to_geoshape("POINT (30 10)"), geoPointField)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings( + 'row var = st_within(to_geoshape(geoPointField), to_geopoint(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + + testErrorsAndWarnings( + 'row var = st_within(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_within(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_within(to_geoshape(geoPointField), to_geoshape(geoPointField))', + ['Unknown column [geoPointField]', 'Unknown column [geoPointField]'] + ); + + testErrorsAndWarnings('row var = st_within(true, true)', [ + 'Argument of [st_within] must be [cartesian_point], found value [true] type [boolean]', + 'Argument of [st_within] must be [cartesian_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_within(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_within(booleanField, booleanField)', [ + 'Argument of [st_within] must be [cartesian_point], found value [booleanField] type [boolean]', + 'Argument of [st_within] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(cartesianPointField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_within(cartesianPointField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(cartesianShapeField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_within(cartesianShapeField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(cartesianShapeField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_within(cartesianShapeField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(geoPointField, geoPointField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_within(geoPointField, geoPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(to_geopoint(geoPointField), to_geopoint(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(geoPointField, geoShapeField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_within(geoPointField, geoShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(to_geopoint(geoPointField), to_geoshape(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(geoShapeField, geoPointField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_within(geoShapeField, geoPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(to_geoshape(geoPointField), to_geopoint(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(geoShapeField, geoShapeField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_within(geoShapeField, geoShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(to_geoshape(geoPointField), to_geoshape(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_within(cartesianPointField, cartesianPointField, extraArg)', + ['Error: [st_within] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | sort st_within(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_within(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval st_within(nullVar, nullVar)', []); + }); + + describe('st_x', () => { + testErrorsAndWarnings('row var = st_x(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row st_x(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = st_x(to_cartesianpoint(cartesianPointField))', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = st_x(geoPointField)', ['Unknown column [geoPointField]']); + testErrorsAndWarnings('row st_x(geoPointField)', ['Unknown column [geoPointField]']); + testErrorsAndWarnings('row var = st_x(to_geopoint(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + + testErrorsAndWarnings('row var = st_x(true)', [ + 'Argument of [st_x] must be [cartesian_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = st_x(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval st_x(cartesianPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_x(to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_x(booleanField)', [ + 'Argument of [st_x] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = st_x(*)', [ + 'Using wildcards (*) in st_x is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = st_x(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval st_x(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval var = st_x(to_geopoint(geoPointField))', []); + + testErrorsAndWarnings('from a_index | eval st_x(cartesianPointField, extraArg)', [ + 'Error: [st_x] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort st_x(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval st_x(null)', []); + testErrorsAndWarnings('row nullVar = null | eval st_x(nullVar)', []); + }); + + describe('st_y', () => { + testErrorsAndWarnings('row var = st_y(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row st_y(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = st_y(to_cartesianpoint(cartesianPointField))', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = st_y(geoPointField)', ['Unknown column [geoPointField]']); + testErrorsAndWarnings('row st_y(geoPointField)', ['Unknown column [geoPointField]']); + testErrorsAndWarnings('row var = st_y(to_geopoint(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + + testErrorsAndWarnings('row var = st_y(true)', [ + 'Argument of [st_y] must be [cartesian_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = st_y(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval st_y(cartesianPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_y(to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_y(booleanField)', [ + 'Argument of [st_y] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = st_y(*)', [ + 'Using wildcards (*) in st_y is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = st_y(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval st_y(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval var = st_y(to_geopoint(geoPointField))', []); + + testErrorsAndWarnings('from a_index | eval st_y(cartesianPointField, extraArg)', [ + 'Error: [st_y] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort st_y(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval st_y(null)', []); + testErrorsAndWarnings('row nullVar = null | eval st_y(nullVar)', []); + }); + + describe('starts_with', () => { + testErrorsAndWarnings('row var = starts_with("a", "a")', []); + testErrorsAndWarnings('row starts_with("a", "a")', []); + testErrorsAndWarnings('row var = starts_with(to_string(true), to_string(true))', []); + + testErrorsAndWarnings('row var = starts_with(true, true)', [ + 'Argument of [starts_with] must be [keyword], found value [true] type [boolean]', + 'Argument of [starts_with] must be [keyword], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = starts_with(keywordField, keywordField)', + [] + ); + testErrorsAndWarnings('from a_index | eval starts_with(keywordField, keywordField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = starts_with(to_string(booleanField), to_string(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval starts_with(booleanField, booleanField)', [ + 'Argument of [starts_with] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [starts_with] must be [keyword], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = starts_with(textField, textField)', []); + testErrorsAndWarnings('from a_index | eval starts_with(textField, textField)', []); + + testErrorsAndWarnings( + 'from a_index | eval starts_with(keywordField, keywordField, extraArg)', + ['Error: [starts_with] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings('from a_index | sort starts_with(keywordField, keywordField)', []); + testErrorsAndWarnings('from a_index | eval starts_with(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval starts_with(nullVar, nullVar)', []); + }); + + describe('substring', () => { + testErrorsAndWarnings('row var = substring("a", 5, 5)', []); + testErrorsAndWarnings('row substring("a", 5, 5)', []); + + testErrorsAndWarnings( + 'row var = substring(to_string(true), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = substring(true, true, true)', [ + 'Argument of [substring] must be [keyword], found value [true] type [boolean]', + 'Argument of [substring] must be [integer], found value [true] type [boolean]', + 'Argument of [substring] must be [integer], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = substring(keywordField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval substring(keywordField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = substring(to_string(booleanField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval substring(booleanField, booleanField, booleanField)', + [ + 'Argument of [substring] must be [keyword], found value [booleanField] type [boolean]', + 'Argument of [substring] must be [integer], found value [booleanField] type [boolean]', + 'Argument of [substring] must be [integer], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = substring(textField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval substring(textField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval substring(keywordField, integerField, integerField, extraArg)', + ['Error: [substring] function expects no more than 3 arguments, got 4.'] + ); + + testErrorsAndWarnings( + 'from a_index | sort substring(keywordField, integerField, integerField)', + [] + ); + + testErrorsAndWarnings('from a_index | eval substring(null, null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval substring(nullVar, nullVar, nullVar)', []); + }); + + describe('tan', () => { + testErrorsAndWarnings('row var = tan(5.5)', []); + testErrorsAndWarnings('row tan(5.5)', []); + testErrorsAndWarnings('row var = tan(to_double(true))', []); + testErrorsAndWarnings('row var = tan(5)', []); + testErrorsAndWarnings('row tan(5)', []); + testErrorsAndWarnings('row var = tan(to_integer(true))', []); + + testErrorsAndWarnings('row var = tan(true)', [ + 'Argument of [tan] must be [double], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where tan(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where tan(booleanField) > 0', [ + 'Argument of [tan] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where tan(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where tan(longField) > 0', []); + testErrorsAndWarnings('from a_index | where tan(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = tan(doubleField)', []); + testErrorsAndWarnings('from a_index | eval tan(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = tan(to_double(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval tan(booleanField)', [ + 'Argument of [tan] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = tan(*)', [ + 'Using wildcards (*) in tan is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = tan(integerField)', []); + testErrorsAndWarnings('from a_index | eval tan(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = tan(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = tan(longField)', []); + testErrorsAndWarnings('from a_index | eval tan(longField)', []); + testErrorsAndWarnings('from a_index | eval var = tan(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval tan(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval tan(doubleField, extraArg)', [ + 'Error: [tan] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort tan(doubleField)', []); + testErrorsAndWarnings('from a_index | eval tan(null)', []); + testErrorsAndWarnings('row nullVar = null | eval tan(nullVar)', []); + }); + + describe('tanh', () => { + testErrorsAndWarnings('row var = tanh(5.5)', []); + testErrorsAndWarnings('row tanh(5.5)', []); + testErrorsAndWarnings('row var = tanh(to_double(true))', []); + testErrorsAndWarnings('row var = tanh(5)', []); + testErrorsAndWarnings('row tanh(5)', []); + testErrorsAndWarnings('row var = tanh(to_integer(true))', []); + + testErrorsAndWarnings('row var = tanh(true)', [ + 'Argument of [tanh] must be [double], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where tanh(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where tanh(booleanField) > 0', [ + 'Argument of [tanh] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where tanh(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where tanh(longField) > 0', []); + testErrorsAndWarnings('from a_index | where tanh(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = tanh(doubleField)', []); + testErrorsAndWarnings('from a_index | eval tanh(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = tanh(to_double(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval tanh(booleanField)', [ + 'Argument of [tanh] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = tanh(*)', [ + 'Using wildcards (*) in tanh is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = tanh(integerField)', []); + testErrorsAndWarnings('from a_index | eval tanh(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = tanh(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = tanh(longField)', []); + testErrorsAndWarnings('from a_index | eval tanh(longField)', []); + testErrorsAndWarnings('from a_index | eval var = tanh(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval tanh(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval tanh(doubleField, extraArg)', [ + 'Error: [tanh] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort tanh(doubleField)', []); + testErrorsAndWarnings('from a_index | eval tanh(null)', []); + testErrorsAndWarnings('row nullVar = null | eval tanh(nullVar)', []); + }); + + describe('tau', () => { + testErrorsAndWarnings('row var = tau()', []); + testErrorsAndWarnings('row tau()', []); + testErrorsAndWarnings('from a_index | where tau() > 0', []); + testErrorsAndWarnings('from a_index | eval var = tau()', []); + testErrorsAndWarnings('from a_index | eval tau()', []); + + testErrorsAndWarnings('from a_index | eval tau(extraArg)', [ + 'Error: [tau] function expects exactly 0 arguments, got 1.', + ]); + + testErrorsAndWarnings('from a_index | sort tau()', []); + testErrorsAndWarnings('row nullVar = null | eval tau()', []); + }); + + describe('to_base64', () => { + testErrorsAndWarnings('row var = to_base64("a")', []); + testErrorsAndWarnings('row to_base64("a")', []); + testErrorsAndWarnings('row var = to_base64(to_string(true))', []); + + testErrorsAndWarnings('row var = to_base64(true)', [ + 'Argument of [to_base64] must be [keyword], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_base64(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_base64(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_base64(to_string(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval to_base64(booleanField)', [ + 'Argument of [to_base64] must be [keyword], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_base64(*)', [ + 'Using wildcards (*) in to_base64 is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_base64(textField)', []); + testErrorsAndWarnings('from a_index | eval to_base64(textField)', []); + + testErrorsAndWarnings('from a_index | eval to_base64(keywordField, extraArg)', [ + 'Error: [to_base64] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort to_base64(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_base64(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_base64(nullVar)', []); + }); + + describe('to_boolean', () => { + testErrorsAndWarnings('row var = to_boolean(true)', []); + testErrorsAndWarnings('row to_boolean(true)', []); + testErrorsAndWarnings('row var = to_bool(true)', []); + testErrorsAndWarnings('row var = to_boolean(to_boolean(true))', []); + testErrorsAndWarnings('row var = to_boolean(5.5)', []); + testErrorsAndWarnings('row to_boolean(5.5)', []); + testErrorsAndWarnings('row var = to_bool(5.5)', []); + testErrorsAndWarnings('row var = to_boolean(to_double(true))', []); + testErrorsAndWarnings('row var = to_boolean(5)', []); + testErrorsAndWarnings('row to_boolean(5)', []); + testErrorsAndWarnings('row var = to_bool(5)', []); + testErrorsAndWarnings('row var = to_boolean(to_integer(true))', []); + testErrorsAndWarnings('row var = to_boolean("a")', []); + testErrorsAndWarnings('row to_boolean("a")', []); + testErrorsAndWarnings('row var = to_bool("a")', []); + testErrorsAndWarnings('row var = to_boolean(to_string(true))', []); + + testErrorsAndWarnings('row var = to_boolean(to_cartesianpoint("POINT (30 10)"))', [ + 'Argument of [to_boolean] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_boolean(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_boolean(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_bool(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_boolean(to_boolean(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval to_boolean(cartesianPointField)', [ + 'Argument of [to_boolean] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_boolean(*)', [ + 'Using wildcards (*) in to_boolean is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_boolean(doubleField)', []); + testErrorsAndWarnings('from a_index | eval to_boolean(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_bool(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_boolean(to_double(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_boolean(integerField)', []); + testErrorsAndWarnings('from a_index | eval to_boolean(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_bool(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_boolean(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_boolean(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_boolean(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_bool(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_boolean(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_boolean(longField)', []); + testErrorsAndWarnings('from a_index | eval to_boolean(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_bool(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_boolean(textField)', []); + testErrorsAndWarnings('from a_index | eval to_boolean(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_bool(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_boolean(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval to_boolean(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = to_bool(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval to_boolean(booleanField, extraArg)', [ + 'Error: [to_boolean] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort to_boolean(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_boolean(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_boolean(nullVar)', []); + }); + + describe('to_cartesianpoint', () => { + testErrorsAndWarnings('row var = to_cartesianpoint(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row to_cartesianpoint(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings( + 'row var = to_cartesianpoint(to_cartesianpoint(cartesianPointField))', + ['Unknown column [cartesianPointField]'] + ); + testErrorsAndWarnings('row var = to_cartesianpoint("a")', []); + testErrorsAndWarnings('row to_cartesianpoint("a")', []); + testErrorsAndWarnings('row var = to_cartesianpoint(to_string(true))', []); + + testErrorsAndWarnings('row var = to_cartesianpoint(true)', [ + 'Argument of [to_cartesianpoint] must be [cartesian_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = to_cartesianpoint(cartesianPointField)', + [] + ); + testErrorsAndWarnings('from a_index | eval to_cartesianpoint(cartesianPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = to_cartesianpoint(to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval to_cartesianpoint(booleanField)', [ + 'Argument of [to_cartesianpoint] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_cartesianpoint(*)', [ + 'Using wildcards (*) in to_cartesianpoint is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_cartesianpoint(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_cartesianpoint(keywordField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = to_cartesianpoint(to_string(booleanField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = to_cartesianpoint(textField)', []); + testErrorsAndWarnings('from a_index | eval to_cartesianpoint(textField)', []); + + testErrorsAndWarnings( + 'from a_index | eval to_cartesianpoint(cartesianPointField, extraArg)', + ['Error: [to_cartesianpoint] function expects exactly one argument, got 2.'] + ); + + testErrorsAndWarnings('from a_index | sort to_cartesianpoint(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval to_cartesianpoint(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_cartesianpoint(nullVar)', []); + }); + + describe('to_cartesianshape', () => { + testErrorsAndWarnings('row var = to_cartesianshape(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row to_cartesianshape(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings( + 'row var = to_cartesianshape(to_cartesianpoint(cartesianPointField))', + ['Unknown column [cartesianPointField]'] + ); + testErrorsAndWarnings( + 'row var = to_cartesianshape(to_cartesianshape("POINT (30 10)"))', + [] + ); + testErrorsAndWarnings('row to_cartesianshape(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings( + 'row var = to_cartesianshape(to_cartesianshape(cartesianPointField))', + ['Unknown column [cartesianPointField]'] + ); + testErrorsAndWarnings('row var = to_cartesianshape("a")', []); + testErrorsAndWarnings('row to_cartesianshape("a")', []); + testErrorsAndWarnings('row var = to_cartesianshape(to_string(true))', []); + + testErrorsAndWarnings('row var = to_cartesianshape(true)', [ + 'Argument of [to_cartesianshape] must be [cartesian_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = to_cartesianshape(cartesianPointField)', + [] + ); + testErrorsAndWarnings('from a_index | eval to_cartesianshape(cartesianPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = to_cartesianshape(to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval to_cartesianshape(booleanField)', [ + 'Argument of [to_cartesianshape] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_cartesianshape(*)', [ + 'Using wildcards (*) in to_cartesianshape is not allowed', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = to_cartesianshape(cartesianShapeField)', + [] + ); + testErrorsAndWarnings('from a_index | eval to_cartesianshape(cartesianShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = to_cartesianshape(to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = to_cartesianshape(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_cartesianshape(keywordField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = to_cartesianshape(to_string(booleanField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = to_cartesianshape(textField)', []); + testErrorsAndWarnings('from a_index | eval to_cartesianshape(textField)', []); + + testErrorsAndWarnings( + 'from a_index | eval to_cartesianshape(cartesianPointField, extraArg)', + ['Error: [to_cartesianshape] function expects exactly one argument, got 2.'] + ); + + testErrorsAndWarnings('from a_index | sort to_cartesianshape(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval to_cartesianshape(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_cartesianshape(nullVar)', []); + }); + + describe('to_datetime', () => { + testErrorsAndWarnings('row var = to_datetime(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row to_datetime(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row var = to_dt(to_datetime("2021-01-01T00:00:00Z"))', []); + + testErrorsAndWarnings( + 'row var = to_datetime(to_datetime(to_datetime("2021-01-01T00:00:00Z")))', + [] + ); + + testErrorsAndWarnings('row var = to_datetime(5.5)', []); + testErrorsAndWarnings('row to_datetime(5.5)', []); + testErrorsAndWarnings('row var = to_dt(5.5)', []); + testErrorsAndWarnings('row var = to_datetime(to_double(true))', []); + testErrorsAndWarnings('row var = to_datetime(5)', []); + testErrorsAndWarnings('row to_datetime(5)', []); + testErrorsAndWarnings('row var = to_dt(5)', []); + testErrorsAndWarnings('row var = to_datetime(to_integer(true))', []); + testErrorsAndWarnings('row var = to_datetime("a")', []); + testErrorsAndWarnings('row to_datetime("a")', []); + testErrorsAndWarnings('row var = to_dt("a")', []); + testErrorsAndWarnings('row var = to_datetime(to_string(true))', []); + + testErrorsAndWarnings('row var = to_datetime(true)', [ + 'Argument of [to_datetime] must be [date], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_datetime(dateField)', []); + testErrorsAndWarnings('from a_index | eval to_datetime(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dt(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_datetime(to_datetime(dateField))', []); + + testErrorsAndWarnings('from a_index | eval to_datetime(booleanField)', [ + 'Argument of [to_datetime] must be [date], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_datetime(*)', [ + 'Using wildcards (*) in to_datetime is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_datetime(doubleField)', []); + testErrorsAndWarnings('from a_index | eval to_datetime(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dt(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_datetime(to_double(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_datetime(integerField)', []); + testErrorsAndWarnings('from a_index | eval to_datetime(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dt(integerField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = to_datetime(to_integer(booleanField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = to_datetime(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_datetime(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dt(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_datetime(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_datetime(longField)', []); + testErrorsAndWarnings('from a_index | eval to_datetime(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dt(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_datetime(textField)', []); + testErrorsAndWarnings('from a_index | eval to_datetime(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dt(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_datetime(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval to_datetime(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dt(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval to_datetime(dateField, extraArg)', [ + 'Error: [to_datetime] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort to_datetime(dateField)', []); + testErrorsAndWarnings('from a_index | eval to_datetime(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_datetime(nullVar)', []); + testErrorsAndWarnings('from a_index | eval to_datetime("2022")', []); + testErrorsAndWarnings('from a_index | eval to_datetime(concat("20", "22"))', []); + }); + + describe('to_degrees', () => { + testErrorsAndWarnings('row var = to_degrees(5.5)', []); + testErrorsAndWarnings('row to_degrees(5.5)', []); + testErrorsAndWarnings('row var = to_degrees(to_double(true))', []); + testErrorsAndWarnings('row var = to_degrees(5)', []); + testErrorsAndWarnings('row to_degrees(5)', []); + testErrorsAndWarnings('row var = to_degrees(to_integer(true))', []); + + testErrorsAndWarnings('row var = to_degrees(true)', [ + 'Argument of [to_degrees] must be [double], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where to_degrees(doubleField) > 0', []); + + testErrorsAndWarnings('from a_index | where to_degrees(booleanField) > 0', [ + 'Argument of [to_degrees] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where to_degrees(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where to_degrees(longField) > 0', []); + testErrorsAndWarnings('from a_index | where to_degrees(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = to_degrees(doubleField)', []); + testErrorsAndWarnings('from a_index | eval to_degrees(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_degrees(to_double(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval to_degrees(booleanField)', [ + 'Argument of [to_degrees] must be [double], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_degrees(*)', [ + 'Using wildcards (*) in to_degrees is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_degrees(integerField)', []); + testErrorsAndWarnings('from a_index | eval to_degrees(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_degrees(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_degrees(longField)', []); + testErrorsAndWarnings('from a_index | eval to_degrees(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_degrees(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval to_degrees(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval to_degrees(doubleField, extraArg)', [ + 'Error: [to_degrees] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort to_degrees(doubleField)', []); + testErrorsAndWarnings('from a_index | eval to_degrees(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_degrees(nullVar)', []); + }); + + describe('to_double', () => { + testErrorsAndWarnings('row var = to_double(true)', []); + testErrorsAndWarnings('row to_double(true)', []); + testErrorsAndWarnings('row var = to_dbl(true)', []); + testErrorsAndWarnings('row var = to_double(to_boolean(true))', []); + testErrorsAndWarnings('row var = to_double(5.5)', []); + testErrorsAndWarnings('row to_double(5.5)', []); + testErrorsAndWarnings('row var = to_dbl(5.5)', []); + testErrorsAndWarnings('row var = to_double(5)', []); + testErrorsAndWarnings('row to_double(5)', []); + testErrorsAndWarnings('row var = to_dbl(5)', []); + testErrorsAndWarnings('row var = to_double(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row to_double(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row var = to_dbl(to_datetime("2021-01-01T00:00:00Z"))', []); + + testErrorsAndWarnings( + 'row var = to_double(to_datetime(to_datetime("2021-01-01T00:00:00Z")))', + [] + ); + + testErrorsAndWarnings('row var = to_double(to_double(true))', []); + testErrorsAndWarnings('row var = to_double(to_integer(true))', []); + testErrorsAndWarnings('row var = to_double("a")', []); + testErrorsAndWarnings('row to_double("a")', []); + testErrorsAndWarnings('row var = to_dbl("a")', []); + testErrorsAndWarnings('row var = to_double(to_string(true))', []); + + testErrorsAndWarnings('row var = to_double(to_cartesianpoint("POINT (30 10)"))', [ + 'Argument of [to_double] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | where to_double(booleanField) > 0', []); + + testErrorsAndWarnings('from a_index | where to_double(cartesianPointField) > 0', [ + 'Argument of [to_double] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | where to_double(counterDoubleField) > 0', []); + testErrorsAndWarnings('from a_index | where to_double(counterIntegerField) > 0', []); + testErrorsAndWarnings('from a_index | where to_double(counterLongField) > 0', []); + testErrorsAndWarnings('from a_index | where to_double(dateField) > 0', []); + testErrorsAndWarnings('from a_index | where to_double(doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where to_double(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where to_double(keywordField) > 0', []); + testErrorsAndWarnings('from a_index | where to_double(longField) > 0', []); + testErrorsAndWarnings('from a_index | where to_double(textField) > 0', []); + testErrorsAndWarnings('from a_index | where to_double(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = to_double(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_double(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dbl(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_double(to_boolean(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval to_double(cartesianPointField)', [ + 'Argument of [to_double] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_double(*)', [ + 'Using wildcards (*) in to_double is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_double(counterDoubleField)', []); + testErrorsAndWarnings('from a_index | eval to_double(counterDoubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dbl(counterDoubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_double(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | eval to_double(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dbl(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_double(counterLongField)', []); + testErrorsAndWarnings('from a_index | eval to_double(counterLongField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dbl(counterLongField)', []); + testErrorsAndWarnings('from a_index | eval var = to_double(dateField)', []); + testErrorsAndWarnings('from a_index | eval to_double(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dbl(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_double(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = to_double(doubleField)', []); + testErrorsAndWarnings('from a_index | eval to_double(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dbl(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_double(to_double(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_double(integerField)', []); + testErrorsAndWarnings('from a_index | eval to_double(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dbl(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_double(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_double(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_double(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dbl(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_double(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_double(longField)', []); + testErrorsAndWarnings('from a_index | eval to_double(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dbl(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_double(textField)', []); + testErrorsAndWarnings('from a_index | eval to_double(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dbl(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_double(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval to_double(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dbl(unsignedLongField)', []); + + testErrorsAndWarnings('from a_index | eval to_double(booleanField, extraArg)', [ + 'Error: [to_double] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort to_double(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_double(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_double(nullVar)', []); + testErrorsAndWarnings('from a_index | eval to_double("2022")', []); + testErrorsAndWarnings('from a_index | eval to_double(concat("20", "22"))', []); + }); + + describe('to_geopoint', () => { + testErrorsAndWarnings('row var = to_geopoint(geoPointField)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row to_geopoint(geoPointField)', ['Unknown column [geoPointField]']); + testErrorsAndWarnings('row var = to_geopoint(to_geopoint(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row var = to_geopoint("a")', []); + testErrorsAndWarnings('row to_geopoint("a")', []); + testErrorsAndWarnings('row var = to_geopoint(to_string(true))', []); + + testErrorsAndWarnings('row var = to_geopoint(true)', [ + 'Argument of [to_geopoint] must be [geo_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_geopoint(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval to_geopoint(geoPointField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = to_geopoint(to_geopoint(geoPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval to_geopoint(booleanField)', [ + 'Argument of [to_geopoint] must be [geo_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_geopoint(*)', [ + 'Using wildcards (*) in to_geopoint is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_geopoint(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_geopoint(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_geopoint(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_geopoint(textField)', []); + testErrorsAndWarnings('from a_index | eval to_geopoint(textField)', []); + + testErrorsAndWarnings('from a_index | eval to_geopoint(geoPointField, extraArg)', [ + 'Error: [to_geopoint] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort to_geopoint(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval to_geopoint(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_geopoint(nullVar)', []); + }); + + describe('to_geoshape', () => { + testErrorsAndWarnings('row var = to_geoshape(geoPointField)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row to_geoshape(geoPointField)', ['Unknown column [geoPointField]']); + testErrorsAndWarnings('row var = to_geoshape(to_geopoint(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row var = to_geoshape(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row to_geoshape(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = to_geoshape(to_geoshape(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row var = to_geoshape("a")', []); + testErrorsAndWarnings('row to_geoshape("a")', []); + testErrorsAndWarnings('row var = to_geoshape(to_string(true))', []); + + testErrorsAndWarnings('row var = to_geoshape(true)', [ + 'Argument of [to_geoshape] must be [geo_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_geoshape(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval to_geoshape(geoPointField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = to_geoshape(to_geopoint(geoPointField))', [] ); - testErrorsAndWarnings('from a_index | eval var = mv_last(cartesianShapeField)', []); - testErrorsAndWarnings('from a_index | eval mv_last(cartesianShapeField)', []); + testErrorsAndWarnings('from a_index | eval to_geoshape(booleanField)', [ + 'Argument of [to_geoshape] must be [geo_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_geoshape(*)', [ + 'Using wildcards (*) in to_geoshape is not allowed', + ]); + testErrorsAndWarnings('from a_index | eval var = to_geoshape(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval to_geoshape(geoShapeField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_last(to_cartesianshape(cartesianPointField))', + 'from a_index | eval var = to_geoshape(to_geoshape(geoPointField))', [] ); + testErrorsAndWarnings('from a_index | eval var = to_geoshape(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_geoshape(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_geoshape(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_geoshape(textField)', []); + testErrorsAndWarnings('from a_index | eval to_geoshape(textField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(dateField)', []); - testErrorsAndWarnings('from a_index | eval mv_last(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(to_datetime(dateField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(numberField)', []); - testErrorsAndWarnings('from a_index | eval mv_last(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(to_integer(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval mv_last(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(to_geopoint(geoPointField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(geoShapeField)', []); - testErrorsAndWarnings('from a_index | eval mv_last(geoShapeField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(to_geoshape(geoPointField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(ipField)', []); - testErrorsAndWarnings('from a_index | eval mv_last(ipField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(to_ip(ipField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(to_string(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(versionField)', []); - testErrorsAndWarnings('from a_index | eval mv_last(versionField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_last(to_version(stringField))', []); - - testErrorsAndWarnings('from a_index | eval mv_last(booleanField, extraArg)', [ - 'Error: [mv_last] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval to_geoshape(geoPointField, extraArg)', [ + 'Error: [to_geoshape] function expects exactly one argument, got 2.', ]); - testErrorsAndWarnings('from a_index | sort mv_last(booleanField)', []); - testErrorsAndWarnings('from a_index | eval mv_last(null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_last(nullVar)', []); + testErrorsAndWarnings('from a_index | sort to_geoshape(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval to_geoshape(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_geoshape(nullVar)', []); }); - describe('mv_max', () => { - testErrorsAndWarnings('row var = mv_max("a")', []); - testErrorsAndWarnings('row mv_max("a")', []); - testErrorsAndWarnings('from a_index | eval var = mv_max(stringField)', []); - testErrorsAndWarnings('from a_index | eval mv_max(stringField)', []); + describe('to_integer', () => { + testErrorsAndWarnings('row var = to_integer(true)', []); + testErrorsAndWarnings('row to_integer(true)', []); + testErrorsAndWarnings('row var = to_int(true)', []); + testErrorsAndWarnings('row var = to_integer(to_boolean(true))', []); + testErrorsAndWarnings('row var = to_integer(5)', []); + testErrorsAndWarnings('row to_integer(5)', []); + testErrorsAndWarnings('row var = to_int(5)', []); + testErrorsAndWarnings('row var = to_integer(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row to_integer(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row var = to_int(to_datetime("2021-01-01T00:00:00Z"))', []); - testErrorsAndWarnings('from a_index | eval var = mv_max(*)', [ - 'Using wildcards (*) in mv_max is not allowed', - ]); + testErrorsAndWarnings( + 'row var = to_integer(to_datetime(to_datetime("2021-01-01T00:00:00Z")))', + [] + ); - testErrorsAndWarnings('from a_index | sort mv_max(stringField)', []); - testErrorsAndWarnings('row var = mv_max(true)', []); - testErrorsAndWarnings('row mv_max(true)', []); - testErrorsAndWarnings('row var = mv_max(to_boolean(true))', []); - testErrorsAndWarnings('row var = mv_max(now())', []); - testErrorsAndWarnings('row mv_max(now())', []); - testErrorsAndWarnings('row var = mv_max(to_datetime(now()))', []); - testErrorsAndWarnings('row var = mv_max(5)', []); - testErrorsAndWarnings('row mv_max(5)', []); - testErrorsAndWarnings('row var = mv_max(to_integer(true))', []); - testErrorsAndWarnings('row var = mv_max(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row mv_max(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row var = mv_max(to_ip(to_ip("127.0.0.1")))', []); - testErrorsAndWarnings('row var = mv_max(to_string(true))', []); - testErrorsAndWarnings('row var = mv_max(to_version("1.0.0"))', []); - testErrorsAndWarnings('row mv_max(to_version("1.0.0"))', []); - testErrorsAndWarnings('row var = mv_max(to_version("a"))', []); + testErrorsAndWarnings('row var = to_integer(5.5)', []); + testErrorsAndWarnings('row to_integer(5.5)', []); + testErrorsAndWarnings('row var = to_int(5.5)', []); + testErrorsAndWarnings('row var = to_integer(to_double(true))', []); + testErrorsAndWarnings('row var = to_integer(to_integer(true))', []); + testErrorsAndWarnings('row var = to_integer("a")', []); + testErrorsAndWarnings('row to_integer("a")', []); + testErrorsAndWarnings('row var = to_int("a")', []); + testErrorsAndWarnings('row var = to_integer(to_string(true))', []); - testErrorsAndWarnings('row var = mv_max(to_cartesianpoint("POINT (30 10)"))', [ - 'Argument of [mv_max] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + testErrorsAndWarnings('row var = to_integer(to_cartesianpoint("POINT (30 10)"))', [ + 'Argument of [to_integer] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', ]); - testErrorsAndWarnings('from a_index | where mv_max(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where to_integer(booleanField) > 0', []); - testErrorsAndWarnings('from a_index | where mv_max(cartesianPointField) > 0', [ - 'Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | where to_integer(cartesianPointField) > 0', [ + 'Argument of [to_integer] must be [boolean], found value [cartesianPointField] type [cartesian_point]', ]); - testErrorsAndWarnings('from a_index | where length(mv_max(stringField)) > 0', []); + testErrorsAndWarnings('from a_index | where to_integer(counterIntegerField) > 0', []); + testErrorsAndWarnings('from a_index | where to_integer(dateField) > 0', []); + testErrorsAndWarnings('from a_index | where to_integer(doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where to_integer(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where to_integer(keywordField) > 0', []); + testErrorsAndWarnings('from a_index | where to_integer(longField) > 0', []); + testErrorsAndWarnings('from a_index | where to_integer(textField) > 0', []); + testErrorsAndWarnings('from a_index | where to_integer(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_integer(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_int(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(to_boolean(booleanField))', []); - testErrorsAndWarnings('from a_index | where length(mv_max(cartesianPointField)) > 0', [ - 'Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | eval to_integer(cartesianPointField)', [ + 'Argument of [to_integer] must be [boolean], found value [cartesianPointField] type [cartesian_point]', ]); - testErrorsAndWarnings('from a_index | eval var = mv_max(booleanField)', []); - testErrorsAndWarnings('from a_index | eval mv_max(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_max(to_boolean(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval mv_max(cartesianPointField)', [ - 'Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | eval var = to_integer(*)', [ + 'Using wildcards (*) in to_integer is not allowed', ]); - testErrorsAndWarnings('from a_index | eval var = mv_max(dateField)', []); - testErrorsAndWarnings('from a_index | eval mv_max(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_max(to_datetime(dateField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_max(numberField)', []); - testErrorsAndWarnings('from a_index | eval mv_max(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_max(to_integer(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_max(ipField)', []); - testErrorsAndWarnings('from a_index | eval mv_max(ipField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_max(to_ip(ipField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_max(to_string(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_max(versionField)', []); - testErrorsAndWarnings('from a_index | eval mv_max(versionField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_max(to_version(stringField))', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | eval to_integer(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_int(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(dateField)', []); + testErrorsAndWarnings('from a_index | eval to_integer(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_int(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(doubleField)', []); + testErrorsAndWarnings('from a_index | eval to_integer(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_int(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(to_double(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(integerField)', []); + testErrorsAndWarnings('from a_index | eval to_integer(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_int(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_integer(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_int(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(longField)', []); + testErrorsAndWarnings('from a_index | eval to_integer(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_int(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(textField)', []); + testErrorsAndWarnings('from a_index | eval to_integer(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_int(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval to_integer(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = to_int(unsignedLongField)', []); - testErrorsAndWarnings('from a_index | eval mv_max(booleanField, extraArg)', [ - 'Error: [mv_max] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval to_integer(booleanField, extraArg)', [ + 'Error: [to_integer] function expects exactly one argument, got 2.', ]); - testErrorsAndWarnings('from a_index | sort mv_max(booleanField)', []); - testErrorsAndWarnings('from a_index | eval mv_max(null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_max(nullVar)', []); + testErrorsAndWarnings('from a_index | sort to_integer(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_integer(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_integer(nullVar)', []); + testErrorsAndWarnings('from a_index | eval to_integer("2022")', []); + testErrorsAndWarnings('from a_index | eval to_integer(concat("20", "22"))', []); }); - describe('mv_median', () => { - testErrorsAndWarnings('row var = mv_median(5)', []); - testErrorsAndWarnings('row mv_median(5)', []); - testErrorsAndWarnings('row var = mv_median(to_integer("a"))', []); + describe('to_ip', () => { + testErrorsAndWarnings('row var = to_ip(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row to_ip(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = to_ip(to_ip(to_ip("127.0.0.1")))', []); + testErrorsAndWarnings('row var = to_ip("a")', []); + testErrorsAndWarnings('row to_ip("a")', []); + testErrorsAndWarnings('row var = to_ip(to_string(true))', []); - testErrorsAndWarnings('row var = mv_median("a")', [ - 'Argument of [mv_median] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('row var = to_ip(true)', [ + 'Argument of [to_ip] must be [ip], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where mv_median(numberField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = to_ip(ipField)', []); + testErrorsAndWarnings('from a_index | eval to_ip(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ip(to_ip(ipField))', []); + + testErrorsAndWarnings('from a_index | eval to_ip(booleanField)', [ + 'Argument of [to_ip] must be [ip], found value [booleanField] type [boolean]', + ]); - testErrorsAndWarnings('from a_index | where mv_median(stringField) > 0', [ - 'Argument of [mv_median] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | eval var = to_ip(*)', [ + 'Using wildcards (*) in to_ip is not allowed', ]); - testErrorsAndWarnings('from a_index | eval var = mv_median(numberField)', []); - testErrorsAndWarnings('from a_index | eval mv_median(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_median(to_integer(stringField))', []); + testErrorsAndWarnings('from a_index | eval var = to_ip(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_ip(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ip(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_ip(textField)', []); + testErrorsAndWarnings('from a_index | eval to_ip(textField)', []); - testErrorsAndWarnings('from a_index | eval mv_median(stringField)', [ - 'Argument of [mv_median] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | eval to_ip(ipField, extraArg)', [ + 'Error: [to_ip] function expects exactly one argument, got 2.', ]); - testErrorsAndWarnings('from a_index | eval mv_median(numberField, extraArg)', [ - 'Error: [mv_median] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | sort to_ip(ipField)', []); + testErrorsAndWarnings('from a_index | eval to_ip(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_ip(nullVar)', []); + }); + + describe('to_long', () => { + testErrorsAndWarnings('row var = to_long(true)', []); + testErrorsAndWarnings('row to_long(true)', []); + testErrorsAndWarnings('row var = to_long(to_boolean(true))', []); + testErrorsAndWarnings('row var = to_long(5)', []); + testErrorsAndWarnings('row to_long(5)', []); + testErrorsAndWarnings('row var = to_long(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row to_long(to_datetime("2021-01-01T00:00:00Z"))', []); + + testErrorsAndWarnings( + 'row var = to_long(to_datetime(to_datetime("2021-01-01T00:00:00Z")))', + [] + ); + + testErrorsAndWarnings('row var = to_long(5.5)', []); + testErrorsAndWarnings('row to_long(5.5)', []); + testErrorsAndWarnings('row var = to_long(to_double(true))', []); + testErrorsAndWarnings('row var = to_long(to_integer(true))', []); + testErrorsAndWarnings('row var = to_long("a")', []); + testErrorsAndWarnings('row to_long("a")', []); + testErrorsAndWarnings('row var = to_long(to_string(true))', []); + + testErrorsAndWarnings('row var = to_long(to_cartesianpoint("POINT (30 10)"))', [ + 'Argument of [to_long] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', ]); - testErrorsAndWarnings('from a_index | eval var = mv_median(*)', [ - 'Using wildcards (*) in mv_median is not allowed', + testErrorsAndWarnings('from a_index | where to_long(booleanField) > 0', []); + + testErrorsAndWarnings('from a_index | where to_long(cartesianPointField) > 0', [ + 'Argument of [to_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]', ]); - testErrorsAndWarnings('from a_index | sort mv_median(numberField)', []); - testErrorsAndWarnings('row var = mv_median(to_integer(true))', []); + testErrorsAndWarnings('from a_index | where to_long(counterIntegerField) > 0', []); + testErrorsAndWarnings('from a_index | where to_long(counterLongField) > 0', []); + testErrorsAndWarnings('from a_index | where to_long(dateField) > 0', []); + testErrorsAndWarnings('from a_index | where to_long(doubleField) > 0', []); + testErrorsAndWarnings('from a_index | where to_long(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where to_long(keywordField) > 0', []); + testErrorsAndWarnings('from a_index | where to_long(longField) > 0', []); + testErrorsAndWarnings('from a_index | where to_long(textField) > 0', []); + testErrorsAndWarnings('from a_index | where to_long(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = to_long(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_long(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_long(to_boolean(booleanField))', []); - testErrorsAndWarnings('row var = mv_median(true)', [ - 'Argument of [mv_median] must be [number], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | eval to_long(cartesianPointField)', [ + 'Argument of [to_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]', ]); - testErrorsAndWarnings('from a_index | where mv_median(booleanField) > 0', [ - 'Argument of [mv_median] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval var = to_long(*)', [ + 'Using wildcards (*) in to_long is not allowed', ]); - testErrorsAndWarnings('from a_index | eval var = mv_median(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_long(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | eval to_long(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_long(counterLongField)', []); + testErrorsAndWarnings('from a_index | eval to_long(counterLongField)', []); + testErrorsAndWarnings('from a_index | eval var = to_long(dateField)', []); + testErrorsAndWarnings('from a_index | eval to_long(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_long(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = to_long(doubleField)', []); + testErrorsAndWarnings('from a_index | eval to_long(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_long(to_double(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_long(integerField)', []); + testErrorsAndWarnings('from a_index | eval to_long(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_long(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_long(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_long(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_long(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_long(longField)', []); + testErrorsAndWarnings('from a_index | eval to_long(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_long(textField)', []); + testErrorsAndWarnings('from a_index | eval to_long(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_long(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval to_long(unsignedLongField)', []); - testErrorsAndWarnings('from a_index | eval mv_median(booleanField)', [ - 'Argument of [mv_median] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval to_long(booleanField, extraArg)', [ + 'Error: [to_long] function expects exactly one argument, got 2.', ]); - testErrorsAndWarnings('from a_index | eval mv_median(null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_median(nullVar)', []); + + testErrorsAndWarnings('from a_index | sort to_long(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_long(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_long(nullVar)', []); + testErrorsAndWarnings('from a_index | eval to_long("2022")', []); + testErrorsAndWarnings('from a_index | eval to_long(concat("20", "22"))', []); }); - describe('mv_min', () => { - testErrorsAndWarnings('row var = mv_min("a")', []); - testErrorsAndWarnings('row mv_min("a")', []); - testErrorsAndWarnings('from a_index | eval var = mv_min(stringField)', []); - testErrorsAndWarnings('from a_index | eval mv_min(stringField)', []); + describe('to_lower', () => { + testErrorsAndWarnings('row var = to_lower("a")', []); + testErrorsAndWarnings('row to_lower("a")', []); + testErrorsAndWarnings('row var = to_lower(to_string(true))', []); - testErrorsAndWarnings('from a_index | eval var = mv_min(*)', [ - 'Using wildcards (*) in mv_min is not allowed', + testErrorsAndWarnings('row var = to_lower(true)', [ + 'Argument of [to_lower] must be [keyword], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | sort mv_min(stringField)', []); - testErrorsAndWarnings('row var = mv_min(true)', []); - testErrorsAndWarnings('row mv_min(true)', []); - testErrorsAndWarnings('row var = mv_min(to_boolean(true))', []); - testErrorsAndWarnings('row var = mv_min(now())', []); - testErrorsAndWarnings('row mv_min(now())', []); - testErrorsAndWarnings('row var = mv_min(to_datetime(now()))', []); - testErrorsAndWarnings('row var = mv_min(5)', []); - testErrorsAndWarnings('row mv_min(5)', []); - testErrorsAndWarnings('row var = mv_min(to_integer(true))', []); - testErrorsAndWarnings('row var = mv_min(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row mv_min(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row var = mv_min(to_ip(to_ip("127.0.0.1")))', []); - testErrorsAndWarnings('row var = mv_min(to_string(true))', []); - testErrorsAndWarnings('row var = mv_min(to_version("1.0.0"))', []); - testErrorsAndWarnings('row mv_min(to_version("1.0.0"))', []); - testErrorsAndWarnings('row var = mv_min(to_version("a"))', []); + testErrorsAndWarnings('from a_index | eval var = to_lower(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_lower(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_lower(to_string(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval to_lower(booleanField)', [ + 'Argument of [to_lower] must be [keyword], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_lower(*)', [ + 'Using wildcards (*) in to_lower is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_lower(textField)', []); + testErrorsAndWarnings('from a_index | eval to_lower(textField)', []); + + testErrorsAndWarnings('from a_index | eval to_lower(keywordField, extraArg)', [ + 'Error: [to_lower] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort to_lower(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_lower(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_lower(nullVar)', []); + }); + + describe('to_radians', () => { + testErrorsAndWarnings('row var = to_radians(5.5)', []); + testErrorsAndWarnings('row to_radians(5.5)', []); + testErrorsAndWarnings('row var = to_radians(to_double(true))', []); + testErrorsAndWarnings('row var = to_radians(5)', []); + testErrorsAndWarnings('row to_radians(5)', []); + testErrorsAndWarnings('row var = to_radians(to_integer(true))', []); - testErrorsAndWarnings('row var = mv_min(to_cartesianpoint("POINT (30 10)"))', [ - 'Argument of [mv_min] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + testErrorsAndWarnings('row var = to_radians(true)', [ + 'Argument of [to_radians] must be [double], found value [true] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where mv_min(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where to_radians(doubleField) > 0', []); - testErrorsAndWarnings('from a_index | where mv_min(cartesianPointField) > 0', [ - 'Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | where to_radians(booleanField) > 0', [ + 'Argument of [to_radians] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | where length(mv_min(stringField)) > 0', []); + testErrorsAndWarnings('from a_index | where to_radians(integerField) > 0', []); + testErrorsAndWarnings('from a_index | where to_radians(longField) > 0', []); + testErrorsAndWarnings('from a_index | where to_radians(unsignedLongField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = to_radians(doubleField)', []); + testErrorsAndWarnings('from a_index | eval to_radians(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_radians(to_double(booleanField))', []); - testErrorsAndWarnings('from a_index | where length(mv_min(cartesianPointField)) > 0', [ - 'Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | eval to_radians(booleanField)', [ + 'Argument of [to_radians] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval var = mv_min(booleanField)', []); - testErrorsAndWarnings('from a_index | eval mv_min(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_min(to_boolean(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval mv_min(cartesianPointField)', [ - 'Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | eval var = to_radians(*)', [ + 'Using wildcards (*) in to_radians is not allowed', ]); - testErrorsAndWarnings('from a_index | eval var = mv_min(dateField)', []); - testErrorsAndWarnings('from a_index | eval mv_min(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_min(to_datetime(dateField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_min(numberField)', []); - testErrorsAndWarnings('from a_index | eval mv_min(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_min(to_integer(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_min(ipField)', []); - testErrorsAndWarnings('from a_index | eval mv_min(ipField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_min(to_ip(ipField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_min(to_string(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = mv_min(versionField)', []); - testErrorsAndWarnings('from a_index | eval mv_min(versionField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_min(to_version(stringField))', []); + testErrorsAndWarnings('from a_index | eval var = to_radians(integerField)', []); + testErrorsAndWarnings('from a_index | eval to_radians(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_radians(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_radians(longField)', []); + testErrorsAndWarnings('from a_index | eval to_radians(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_radians(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval to_radians(unsignedLongField)', []); - testErrorsAndWarnings('from a_index | eval mv_min(booleanField, extraArg)', [ - 'Error: [mv_min] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval to_radians(doubleField, extraArg)', [ + 'Error: [to_radians] function expects exactly one argument, got 2.', ]); - testErrorsAndWarnings('from a_index | sort mv_min(booleanField)', []); - testErrorsAndWarnings('from a_index | eval mv_min(null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_min(nullVar)', []); + testErrorsAndWarnings('from a_index | sort to_radians(doubleField)', []); + testErrorsAndWarnings('from a_index | eval to_radians(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_radians(nullVar)', []); }); - describe('mv_slice', () => { - testErrorsAndWarnings('row var = mv_slice("a", 5, 5)', []); - testErrorsAndWarnings('row mv_slice("a", 5, 5)', []); - + describe('to_unsigned_long', () => { + testErrorsAndWarnings('row var = to_unsigned_long(true)', []); + testErrorsAndWarnings('row to_unsigned_long(true)', []); + testErrorsAndWarnings('row var = to_ul(true)', []); + testErrorsAndWarnings('row var = to_ulong(true)', []); + testErrorsAndWarnings('row var = to_unsigned_long(to_boolean(true))', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(stringField, numberField, numberField)', + 'row var = to_unsigned_long(to_datetime("2021-01-01T00:00:00Z"))', [] ); + testErrorsAndWarnings('row to_unsigned_long(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row var = to_ul(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row var = to_ulong(to_datetime("2021-01-01T00:00:00Z"))', []); testErrorsAndWarnings( - 'from a_index | eval mv_slice(stringField, numberField, numberField)', - [] - ); - testErrorsAndWarnings( - 'from a_index | sort mv_slice(stringField, numberField, numberField)', + 'row var = to_unsigned_long(to_datetime(to_datetime("2021-01-01T00:00:00Z")))', [] ); - testErrorsAndWarnings('row var = mv_slice(true, 5, 5)', []); - testErrorsAndWarnings('row mv_slice(true, 5, 5)', []); - testErrorsAndWarnings( - 'row var = mv_slice(to_boolean(true), to_integer(true), to_integer(true))', - [] - ); + testErrorsAndWarnings('row var = to_unsigned_long(5.5)', []); + testErrorsAndWarnings('row to_unsigned_long(5.5)', []); + testErrorsAndWarnings('row var = to_ul(5.5)', []); + testErrorsAndWarnings('row var = to_ulong(5.5)', []); + testErrorsAndWarnings('row var = to_unsigned_long(to_double(true))', []); + testErrorsAndWarnings('row var = to_unsigned_long(5)', []); + testErrorsAndWarnings('row to_unsigned_long(5)', []); + testErrorsAndWarnings('row var = to_ul(5)', []); + testErrorsAndWarnings('row var = to_ulong(5)', []); + testErrorsAndWarnings('row var = to_unsigned_long(to_integer(true))', []); + testErrorsAndWarnings('row var = to_unsigned_long("a")', []); + testErrorsAndWarnings('row to_unsigned_long("a")', []); + testErrorsAndWarnings('row var = to_ul("a")', []); + testErrorsAndWarnings('row var = to_ulong("a")', []); + testErrorsAndWarnings('row var = to_unsigned_long(to_string(true))', []); - testErrorsAndWarnings('row var = mv_slice(to_cartesianpoint("POINT (30 10)"), 5, 5)', []); - testErrorsAndWarnings('row mv_slice(to_cartesianpoint("POINT (30 10)"), 5, 5)', []); + testErrorsAndWarnings('row var = to_unsigned_long(to_cartesianpoint("POINT (30 10)"))', [ + 'Argument of [to_unsigned_long] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + ]); - testErrorsAndWarnings( - 'row var = mv_slice(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_integer(true), to_integer(true))', - [] - ); + testErrorsAndWarnings('from a_index | where to_unsigned_long(booleanField) > 0', [ + 'Argument of [>] must be [double], found value [to_unsigned_long(booleanField)] type [unsigned_long]', + ]); - testErrorsAndWarnings('row var = mv_slice(to_cartesianshape("POINT (30 10)"), 5, 5)', []); - testErrorsAndWarnings('row mv_slice(to_cartesianshape("POINT (30 10)"), 5, 5)', []); + testErrorsAndWarnings('from a_index | where to_unsigned_long(cartesianPointField) > 0', [ + 'Argument of [to_unsigned_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + 'Argument of [>] must be [double], found value [to_unsigned_long(cartesianPointField)] type [unsigned_long]', + ]); + testErrorsAndWarnings('from a_index | where to_unsigned_long(dateField) > 0', [ + 'Argument of [>] must be [double], found value [to_unsigned_long(dateField)] type [unsigned_long]', + ]); + testErrorsAndWarnings('from a_index | where to_unsigned_long(doubleField) > 0', [ + 'Argument of [>] must be [double], found value [to_unsigned_long(doubleField)] type [unsigned_long]', + ]); + testErrorsAndWarnings('from a_index | where to_unsigned_long(integerField) > 0', [ + 'Argument of [>] must be [double], found value [to_unsigned_long(integerField)] type [unsigned_long]', + ]); + testErrorsAndWarnings('from a_index | where to_unsigned_long(keywordField) > 0', [ + 'Argument of [>] must be [double], found value [to_unsigned_long(keywordField)] type [unsigned_long]', + ]); + testErrorsAndWarnings('from a_index | where to_unsigned_long(longField) > 0', [ + 'Argument of [>] must be [double], found value [to_unsigned_long(longField)] type [unsigned_long]', + ]); + testErrorsAndWarnings('from a_index | where to_unsigned_long(textField) > 0', [ + 'Argument of [>] must be [double], found value [to_unsigned_long(textField)] type [unsigned_long]', + ]); + testErrorsAndWarnings('from a_index | where to_unsigned_long(unsignedLongField) > 0', [ + 'Argument of [>] must be [double], found value [to_unsigned_long(unsignedLongField)] type [unsigned_long]', + ]); + testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ul(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ulong(booleanField)', []); testErrorsAndWarnings( - 'row var = mv_slice(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_integer(true), to_integer(true))', + 'from a_index | eval var = to_unsigned_long(to_boolean(booleanField))', [] ); - testErrorsAndWarnings('row var = mv_slice(now(), 5, 5)', []); - testErrorsAndWarnings('row mv_slice(now(), 5, 5)', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(cartesianPointField)', [ + 'Argument of [to_unsigned_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); - testErrorsAndWarnings( - 'row var = mv_slice(to_datetime(now()), to_integer(true), to_integer(true))', - [] - ); + testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(*)', [ + 'Using wildcards (*) in to_unsigned_long is not allowed', + ]); - testErrorsAndWarnings('row var = mv_slice(5, 5, 5)', []); - testErrorsAndWarnings('row mv_slice(5, 5, 5)', []); + testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(dateField)', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ul(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ulong(dateField)', []); testErrorsAndWarnings( - 'row var = mv_slice(to_integer(true), to_integer(true), to_integer(true))', + 'from a_index | eval var = to_unsigned_long(to_datetime(dateField))', [] ); - testErrorsAndWarnings('row var = mv_slice(to_geopoint("POINT (30 10)"), 5, 5)', []); - testErrorsAndWarnings('row mv_slice(to_geopoint("POINT (30 10)"), 5, 5)', []); - + testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(doubleField)', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ul(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ulong(doubleField)', []); testErrorsAndWarnings( - 'row var = mv_slice(to_geopoint(to_geopoint("POINT (30 10)")), to_integer(true), to_integer(true))', + 'from a_index | eval var = to_unsigned_long(to_double(booleanField))', [] ); - - testErrorsAndWarnings('row var = mv_slice(to_geoshape("POINT (30 10)"), 5, 5)', []); - testErrorsAndWarnings('row mv_slice(to_geoshape("POINT (30 10)"), 5, 5)', []); - + testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(integerField)', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ul(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ulong(integerField)', []); testErrorsAndWarnings( - 'row var = mv_slice(to_geoshape(to_geopoint("POINT (30 10)")), to_integer(true), to_integer(true))', + 'from a_index | eval var = to_unsigned_long(to_integer(booleanField))', [] ); - - testErrorsAndWarnings('row var = mv_slice(to_ip("127.0.0.1"), 5, 5)', []); - testErrorsAndWarnings('row mv_slice(to_ip("127.0.0.1"), 5, 5)', []); - + testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ul(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ulong(keywordField)', []); testErrorsAndWarnings( - 'row var = mv_slice(to_ip(to_ip("127.0.0.1")), to_integer(true), to_integer(true))', + 'from a_index | eval var = to_unsigned_long(to_string(booleanField))', [] ); + testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(longField)', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ul(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ulong(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(textField)', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ul(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ulong(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ul(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ulong(unsignedLongField)', []); - testErrorsAndWarnings( - 'row var = mv_slice(to_string(true), to_integer(true), to_integer(true))', - [] - ); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(booleanField, extraArg)', [ + 'Error: [to_unsigned_long] function expects exactly one argument, got 2.', + ]); - testErrorsAndWarnings('row var = mv_slice(to_version("1.0.0"), 5, 5)', []); - testErrorsAndWarnings('row mv_slice(to_version("1.0.0"), 5, 5)', []); + testErrorsAndWarnings('from a_index | sort to_unsigned_long(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_unsigned_long(nullVar)', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long("2022")', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(concat("20", "22"))', []); + }); - testErrorsAndWarnings( - 'row var = mv_slice(to_version("a"), to_integer(true), to_integer(true))', - [] - ); + describe('to_upper', () => { + testErrorsAndWarnings('row var = to_upper("a")', []); + testErrorsAndWarnings('row to_upper("a")', []); + testErrorsAndWarnings('row var = to_upper(to_string(true))', []); - testErrorsAndWarnings('row var = mv_slice(to_version("1.0.0"), true, true)', [ - 'Argument of [mv_slice] must be [number], found value [true] type [boolean]', - 'Argument of [mv_slice] must be [number], found value [true] type [boolean]', + testErrorsAndWarnings('row var = to_upper(true)', [ + 'Argument of [to_upper] must be [keyword], found value [true] type [boolean]', ]); - testErrorsAndWarnings( - 'from a_index | where mv_slice(numberField, numberField, numberField) > 0', - [] - ); + testErrorsAndWarnings('from a_index | eval var = to_upper(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_upper(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_upper(to_string(booleanField))', []); - testErrorsAndWarnings( - 'from a_index | where mv_slice(numberField, booleanField, booleanField) > 0', - [ - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - ] - ); + testErrorsAndWarnings('from a_index | eval to_upper(booleanField)', [ + 'Argument of [to_upper] must be [keyword], found value [booleanField] type [boolean]', + ]); - testErrorsAndWarnings( - 'from a_index | where length(mv_slice(stringField, numberField, numberField)) > 0', - [] - ); + testErrorsAndWarnings('from a_index | eval var = to_upper(*)', [ + 'Using wildcards (*) in to_upper is not allowed', + ]); - testErrorsAndWarnings( - 'from a_index | where length(mv_slice(stringField, booleanField, booleanField)) > 0', - [ - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - ] - ); + testErrorsAndWarnings('from a_index | eval var = to_upper(textField)', []); + testErrorsAndWarnings('from a_index | eval to_upper(textField)', []); - testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(booleanField, numberField, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | eval to_upper(keywordField, extraArg)', [ + 'Error: [to_upper] function expects exactly one argument, got 2.', + ]); - testErrorsAndWarnings( - 'from a_index | eval mv_slice(booleanField, numberField, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | sort to_upper(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_upper(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_upper(nullVar)', []); + }); - testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(to_boolean(booleanField), to_integer(booleanField), to_integer(booleanField))', - [] - ); + describe('to_version', () => { + testErrorsAndWarnings('row var = to_version("a")', []); + testErrorsAndWarnings('row to_version("a")', []); + testErrorsAndWarnings('row var = to_ver("a")', []); + testErrorsAndWarnings('row var = to_version(to_version("1.0.0"))', []); + testErrorsAndWarnings('row to_version(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = to_ver(to_version("1.0.0"))', []); - testErrorsAndWarnings( - 'from a_index | eval mv_slice(booleanField, booleanField, booleanField)', - [ - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - ] - ); + testErrorsAndWarnings('row var = to_version(true)', [ + 'Argument of [to_version] must be [keyword], found value [true] type [boolean]', + ]); - testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(cartesianPointField, numberField, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | eval var = to_version(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_version(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ver(keywordField)', []); - testErrorsAndWarnings( - 'from a_index | eval mv_slice(cartesianPointField, numberField, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | eval var = to_version(*)', [ + 'Using wildcards (*) in to_version is not allowed', + ]); - testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(to_cartesianpoint(cartesianPointField), to_integer(booleanField), to_integer(booleanField))', - [] - ); + testErrorsAndWarnings('from a_index | eval var = to_version(textField)', []); + testErrorsAndWarnings('from a_index | eval to_version(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ver(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_version(versionField)', []); + testErrorsAndWarnings('from a_index | eval to_version(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ver(versionField)', []); - testErrorsAndWarnings( - 'from a_index | eval mv_slice(cartesianPointField, booleanField, booleanField)', - [ - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - ] - ); + testErrorsAndWarnings('from a_index | eval to_version(keywordField, extraArg)', [ + 'Error: [to_version] function expects exactly one argument, got 2.', + ]); - testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(cartesianShapeField, numberField, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | sort to_version(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_version(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_version(nullVar)', []); + }); - testErrorsAndWarnings( - 'from a_index | eval mv_slice(cartesianShapeField, numberField, numberField)', - [] - ); + describe('trim', () => { + testErrorsAndWarnings('row var = trim("a")', []); + testErrorsAndWarnings('row trim("a")', []); + testErrorsAndWarnings('row var = trim(to_string(true))', []); - testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(to_cartesianshape(cartesianPointField), to_integer(booleanField), to_integer(booleanField))', - [] - ); + testErrorsAndWarnings('row var = trim(true)', [ + 'Argument of [trim] must be [keyword], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = trim(keywordField)', []); + testErrorsAndWarnings('from a_index | eval trim(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = trim(to_string(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval trim(booleanField)', [ + 'Argument of [trim] must be [keyword], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = trim(*)', [ + 'Using wildcards (*) in trim is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = trim(textField)', []); + testErrorsAndWarnings('from a_index | eval trim(textField)', []); + + testErrorsAndWarnings('from a_index | eval trim(keywordField, extraArg)', [ + 'Error: [trim] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort trim(keywordField)', []); + testErrorsAndWarnings('from a_index | eval trim(null)', []); + testErrorsAndWarnings('row nullVar = null | eval trim(nullVar)', []); + }); + + describe('case', () => { + testErrorsAndWarnings('row var = case(true, "a")', []); + testErrorsAndWarnings('row case(true, "a")', []); + + testErrorsAndWarnings('row var = case(to_cartesianpoint("POINT (30 10)"), true)', [ + 'Argument of [case] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | eval var = case(booleanField, textField)', []); + testErrorsAndWarnings('from a_index | eval case(booleanField, textField)', []); + testErrorsAndWarnings('from a_index | sort case(booleanField, textField)', []); + testErrorsAndWarnings('from a_index | eval case(null, null)', []); + testErrorsAndWarnings('row nullVar = null | eval case(nullVar, nullVar)', []); + }); - testErrorsAndWarnings( - 'from a_index | eval mv_slice(cartesianShapeField, booleanField, booleanField)', - [ - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - ] - ); + describe('avg', () => { + testErrorsAndWarnings('from a_index | stats var = avg(integerField)', []); + testErrorsAndWarnings('from a_index | stats avg(integerField)', []); + testErrorsAndWarnings('from a_index | stats var = round(avg(integerField))', []); + testErrorsAndWarnings('from a_index | stats round(avg(integerField))', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(dateField, numberField, numberField)', + 'from a_index | stats var = round(avg(integerField)) + avg(integerField)', [] ); testErrorsAndWarnings( - 'from a_index | eval mv_slice(dateField, numberField, numberField)', + 'from a_index | stats round(avg(integerField)) + avg(integerField)', [] ); - + testErrorsAndWarnings('from a_index | stats avg(doubleField / 2)', []); + testErrorsAndWarnings('from a_index | stats var0 = avg(doubleField / 2)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), avg(doubleField / 2)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(to_datetime(dateField), to_integer(booleanField), to_integer(booleanField))', + 'from a_index | stats avg(doubleField), var0 = avg(doubleField / 2)', [] ); - - testErrorsAndWarnings( - 'from a_index | eval mv_slice(dateField, booleanField, booleanField)', - [ - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - ] - ); - + testErrorsAndWarnings('from a_index | stats var0 = avg(integerField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), avg(integerField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(numberField, numberField, numberField)', + 'from a_index | stats avg(doubleField), var0 = avg(integerField)', [] ); - testErrorsAndWarnings( - 'from a_index | eval mv_slice(numberField, numberField, numberField)', + 'from a_index | stats avg(integerField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(to_integer(booleanField), to_integer(booleanField), to_integer(booleanField))', + 'from a_index | stats var0 = avg(integerField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval mv_slice(numberField, booleanField, booleanField)', - [ - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - ] + 'from a_index | stats avg(doubleField), avg(integerField) by round(doubleField / 2), ipField', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(geoPointField, numberField, numberField)', + 'from a_index | stats avg(doubleField), var0 = avg(integerField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval mv_slice(geoPointField, numberField, numberField)', + 'from a_index | stats avg(doubleField), avg(integerField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(to_geopoint(geoPointField), to_integer(booleanField), to_integer(booleanField))', + 'from a_index | stats avg(doubleField), var0 = avg(integerField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings( - 'from a_index | eval mv_slice(geoPointField, booleanField, booleanField)', - [ - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - ] - ); + testErrorsAndWarnings('from a_index | stats var = avg(avg(integerField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + ]); - testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(geoShapeField, numberField, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | stats avg(avg(integerField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + ]); - testErrorsAndWarnings( - 'from a_index | eval mv_slice(geoShapeField, numberField, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | stats avg(booleanField)', [ + 'Argument of [avg] must be [integer], found value [booleanField] type [boolean]', + ]); - testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(to_geoshape(geoPointField), to_integer(booleanField), to_integer(booleanField))', - [] - ); + testErrorsAndWarnings('from a_index | stats var = avg(*)', [ + 'Using wildcards (*) in avg is not allowed', + ]); - testErrorsAndWarnings( - 'from a_index | eval mv_slice(geoShapeField, booleanField, booleanField)', - [ - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - ] - ); + testErrorsAndWarnings('from a_index | stats var = avg(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | stats avg(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | stats var = round(avg(counterIntegerField))', []); + testErrorsAndWarnings('from a_index | stats round(avg(counterIntegerField))', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(ipField, numberField, numberField)', + 'from a_index | stats var = round(avg(counterIntegerField)) + avg(counterIntegerField)', [] ); testErrorsAndWarnings( - 'from a_index | eval mv_slice(ipField, numberField, numberField)', + 'from a_index | stats round(avg(counterIntegerField)) + avg(counterIntegerField)', [] ); + testErrorsAndWarnings('from a_index | stats var0 = avg(counterIntegerField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(to_ip(ipField), to_integer(booleanField), to_integer(booleanField))', + 'from a_index | stats avg(doubleField), avg(counterIntegerField)', [] ); - testErrorsAndWarnings('from a_index | eval mv_slice(ipField, booleanField, booleanField)', [ - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(to_string(booleanField), to_integer(booleanField), to_integer(booleanField))', + 'from a_index | stats avg(doubleField), var0 = avg(counterIntegerField)', [] ); testErrorsAndWarnings( - 'from a_index | eval mv_slice(stringField, booleanField, booleanField)', - [ - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - ] - ); - - testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(versionField, numberField, numberField)', + 'from a_index | stats avg(counterIntegerField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval mv_slice(versionField, numberField, numberField)', + 'from a_index | stats var0 = avg(counterIntegerField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(to_version(stringField), to_integer(booleanField), to_integer(booleanField))', + 'from a_index | stats avg(doubleField), avg(counterIntegerField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval mv_slice(versionField, booleanField, booleanField)', - [ - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', - ] + 'from a_index | stats avg(doubleField), var0 = avg(counterIntegerField) by var1 = round(doubleField / 2), ipField', + [] ); testErrorsAndWarnings( - 'from a_index | eval mv_slice(booleanField, numberField, numberField, extraArg)', - ['Error: [mv_slice] function expects no more than 3 arguments, got 4.'] + 'from a_index | stats avg(doubleField), avg(counterIntegerField) by round(doubleField / 2), doubleField / 2', + [] ); testErrorsAndWarnings( - 'from a_index | sort mv_slice(booleanField, numberField, numberField)', + 'from a_index | stats avg(doubleField), var0 = avg(counterIntegerField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('from a_index | eval mv_slice(null, null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_slice(nullVar, nullVar, nullVar)', []); - }); - - describe('mv_sort', () => { - testErrorsAndWarnings('row var = mv_sort("a", "asc")', []); - testErrorsAndWarnings('row mv_sort("a", "asc")', []); - testErrorsAndWarnings('from a_index | eval var = mv_sort(stringField, "asc")', []); - testErrorsAndWarnings('from a_index | eval mv_sort(stringField, "asc")', []); - testErrorsAndWarnings('from a_index | sort mv_sort(stringField, "asc")', []); - testErrorsAndWarnings('row var = mv_sort(true, "asc")', []); - testErrorsAndWarnings('row mv_sort(true, "asc")', []); - testErrorsAndWarnings('row var = mv_sort(now(), "asc")', []); - testErrorsAndWarnings('row mv_sort(now(), "asc")', []); - testErrorsAndWarnings('row var = mv_sort(5, "asc")', []); - testErrorsAndWarnings('row mv_sort(5, "asc")', []); - testErrorsAndWarnings('row var = mv_sort(to_ip("127.0.0.1"), "asc")', []); - testErrorsAndWarnings('row mv_sort(to_ip("127.0.0.1"), "asc")', []); - testErrorsAndWarnings('row var = mv_sort(to_version("1.0.0"), "asc")', []); - testErrorsAndWarnings('row mv_sort(to_version("1.0.0"), "asc")', []); - - testErrorsAndWarnings('row var = mv_sort(to_cartesianpoint("POINT (30 10)"), true)', [ - 'Argument of [mv_sort] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', - 'Argument of [mv_sort] must be [string], found value [true] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | where mv_sort(numberField, "asc") > 0', []); + testErrorsAndWarnings('from a_index | stats var = avg(doubleField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField)', []); + testErrorsAndWarnings('from a_index | stats var = round(avg(doubleField))', []); + testErrorsAndWarnings('from a_index | stats round(avg(doubleField))', []); testErrorsAndWarnings( - 'from a_index | where mv_sort(cartesianPointField, booleanField) > 0', - [ - 'Argument of [mv_sort] must be [boolean], found value [cartesianPointField] type [cartesian_point]', - 'Argument of [mv_sort] must be [string], found value [booleanField] type [boolean]', - ] + 'from a_index | stats var = round(avg(doubleField)) + avg(doubleField)', + [] ); - testErrorsAndWarnings('from a_index | where length(mv_sort(stringField, "asc")) > 0', []); - testErrorsAndWarnings( - 'from a_index | where length(mv_sort(cartesianPointField, booleanField)) > 0', - [ - 'Argument of [mv_sort] must be [boolean], found value [cartesianPointField] type [cartesian_point]', - 'Argument of [mv_sort] must be [string], found value [booleanField] type [boolean]', - ] + 'from a_index | stats round(avg(doubleField)) + avg(doubleField)', + [] ); - - testErrorsAndWarnings('from a_index | eval var = mv_sort(booleanField, "asc")', []); - testErrorsAndWarnings('from a_index | eval mv_sort(booleanField, "asc")', []); - testErrorsAndWarnings('from a_index | eval var = mv_sort(dateField, "asc")', []); - testErrorsAndWarnings('from a_index | eval mv_sort(dateField, "asc")', []); - testErrorsAndWarnings('from a_index | eval var = mv_sort(numberField, "asc")', []); - testErrorsAndWarnings('from a_index | eval mv_sort(numberField, "asc")', []); - testErrorsAndWarnings('from a_index | eval var = mv_sort(ipField, "asc")', []); - testErrorsAndWarnings('from a_index | eval mv_sort(ipField, "asc")', []); - testErrorsAndWarnings('from a_index | eval var = mv_sort(versionField, "asc")', []); - testErrorsAndWarnings('from a_index | eval mv_sort(versionField, "asc")', []); - - testErrorsAndWarnings('from a_index | eval mv_sort(booleanField, "asc", extraArg)', [ - 'Error: [mv_sort] function expects no more than 2 arguments, got 3.', - ]); - - testErrorsAndWarnings('from a_index | sort mv_sort(booleanField, "asc")', []); - testErrorsAndWarnings('from a_index | eval mv_sort(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_sort(nullVar, nullVar)', []); - }); - - describe('mv_sum', () => { - testErrorsAndWarnings('row var = mv_sum(5)', []); - testErrorsAndWarnings('row mv_sum(5)', []); - testErrorsAndWarnings('row var = mv_sum(to_integer("a"))', []); - - testErrorsAndWarnings('row var = mv_sum("a")', [ - 'Argument of [mv_sum] must be [number], found value ["a"] type [string]', - ]); - - testErrorsAndWarnings('from a_index | where mv_sum(numberField) > 0', []); - - testErrorsAndWarnings('from a_index | where mv_sum(stringField) > 0', [ - 'Argument of [mv_sum] must be [number], found value [stringField] type [string]', - ]); - - testErrorsAndWarnings('from a_index | eval var = mv_sum(numberField)', []); - testErrorsAndWarnings('from a_index | eval mv_sum(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = mv_sum(to_integer(stringField))', []); - - testErrorsAndWarnings('from a_index | eval mv_sum(stringField)', [ - 'Argument of [mv_sum] must be [number], found value [stringField] type [string]', - ]); - - testErrorsAndWarnings('from a_index | eval mv_sum(numberField, extraArg)', [ - 'Error: [mv_sum] function expects exactly one argument, got 2.', - ]); - - testErrorsAndWarnings('from a_index | eval var = mv_sum(*)', [ - 'Using wildcards (*) in mv_sum is not allowed', - ]); - - testErrorsAndWarnings('from a_index | sort mv_sum(numberField)', []); - testErrorsAndWarnings('row var = mv_sum(to_integer(true))', []); - - testErrorsAndWarnings('row var = mv_sum(true)', [ - 'Argument of [mv_sum] must be [number], found value [true] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | where mv_sum(booleanField) > 0', [ - 'Argument of [mv_sum] must be [number], found value [booleanField] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | eval var = mv_sum(to_integer(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval mv_sum(booleanField)', [ - 'Argument of [mv_sum] must be [number], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | eval mv_sum(null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_sum(nullVar)', []); - }); - - describe('mv_zip', () => { - testErrorsAndWarnings('row var = mv_zip("a", "a", "a")', []); - testErrorsAndWarnings('row var = mv_zip("a", "a")', []); - testErrorsAndWarnings('row mv_zip("a", "a", "a")', []); - testErrorsAndWarnings('row mv_zip("a", "a")', []); - + testErrorsAndWarnings('from a_index | stats var0 = avg(doubleField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), avg(doubleField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), var0 = avg(doubleField)', []); testErrorsAndWarnings( - 'row var = mv_zip(to_string("a"), to_string("a"), to_string("a"))', + 'from a_index | stats avg(doubleField) by round(doubleField / 2)', [] ); - testErrorsAndWarnings('row var = mv_zip(5, 5, 5)', [ - 'Argument of [mv_zip] must be [string], found value [5] type [number]', - 'Argument of [mv_zip] must be [string], found value [5] type [number]', - 'Argument of [mv_zip] must be [string], found value [5] type [number]', - ]); - testErrorsAndWarnings( - 'from a_index | where length(mv_zip(stringField, stringField, stringField)) > 0', + 'from a_index | stats var0 = avg(doubleField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | where length(mv_zip(numberField, numberField, numberField)) > 0', - [ - 'Argument of [mv_zip] must be [string], found value [numberField] type [number]', - 'Argument of [mv_zip] must be [string], found value [numberField] type [number]', - 'Argument of [mv_zip] must be [string], found value [numberField] type [number]', - ] + 'from a_index | stats avg(doubleField), avg(doubleField) by round(doubleField / 2), ipField', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_zip(stringField, stringField, stringField)', + 'from a_index | stats avg(doubleField), var0 = avg(doubleField) by var1 = round(doubleField / 2), ipField', [] ); - testErrorsAndWarnings('from a_index | eval mv_zip(stringField, stringField)', []); - testErrorsAndWarnings( - 'from a_index | eval mv_zip(stringField, stringField, stringField)', + 'from a_index | stats avg(doubleField), avg(doubleField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_zip(to_string(stringField), to_string(stringField), to_string(stringField))', + 'from a_index | stats avg(doubleField), var0 = avg(doubleField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('from a_index | eval mv_zip(numberField, numberField, numberField)', [ - 'Argument of [mv_zip] must be [string], found value [numberField] type [number]', - 'Argument of [mv_zip] must be [string], found value [numberField] type [number]', - 'Argument of [mv_zip] must be [string], found value [numberField] type [number]', - ]); + testErrorsAndWarnings('from a_index | stats var = avg(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | stats avg(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | stats var = round(avg(unsignedLongField))', []); + testErrorsAndWarnings('from a_index | stats round(avg(unsignedLongField))', []); testErrorsAndWarnings( - 'from a_index | eval mv_zip(stringField, stringField, stringField, extraArg)', - ['Error: [mv_zip] function expects no more than 3 arguments, got 4.'] + 'from a_index | stats var = round(avg(unsignedLongField)) + avg(unsignedLongField)', + [] ); testErrorsAndWarnings( - 'from a_index | sort mv_zip(stringField, stringField, stringField)', + 'from a_index | stats round(avg(unsignedLongField)) + avg(unsignedLongField)', [] ); + + testErrorsAndWarnings('from a_index | stats var0 = avg(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), avg(unsignedLongField)', []); testErrorsAndWarnings( - 'row var = mv_zip(to_string(true), to_string(true), to_string(true))', + 'from a_index | stats avg(doubleField), var0 = avg(unsignedLongField)', [] ); - testErrorsAndWarnings('row var = mv_zip(true, true, true)', [ - 'Argument of [mv_zip] must be [string], found value [true] type [boolean]', - 'Argument of [mv_zip] must be [string], found value [true] type [boolean]', - 'Argument of [mv_zip] must be [string], found value [true] type [boolean]', - ]); - testErrorsAndWarnings( - 'from a_index | where length(mv_zip(booleanField, booleanField, booleanField)) > 0', - [ - 'Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]', - 'Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]', - 'Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]', - ] + 'from a_index | stats avg(unsignedLongField) by round(doubleField / 2)', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_zip(to_string(booleanField), to_string(booleanField), to_string(booleanField))', + 'from a_index | stats var0 = avg(unsignedLongField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval mv_zip(booleanField, booleanField, booleanField)', - [ - 'Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]', - 'Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]', - 'Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]', - ] + 'from a_index | stats avg(doubleField), avg(unsignedLongField) by round(doubleField / 2), ipField', + [] ); - testErrorsAndWarnings('from a_index | eval mv_zip(null, null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_zip(nullVar, nullVar, nullVar)', []); - testErrorsAndWarnings('row var = mv_zip(to_string(true), to_string(true))', []); + testErrorsAndWarnings( - 'from a_index | where length(mv_zip(stringField, stringField)) > 0', + 'from a_index | stats avg(doubleField), var0 = avg(unsignedLongField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | where length(mv_zip(booleanField, booleanField)) > 0', - [ - 'Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]', - 'Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]', - ] + 'from a_index | stats avg(doubleField), avg(unsignedLongField) by round(doubleField / 2), doubleField / 2', + [] ); - testErrorsAndWarnings('from a_index | eval var = mv_zip(stringField, stringField)', []); - testErrorsAndWarnings( - 'from a_index | eval var = mv_zip(to_string(booleanField), to_string(booleanField))', + 'from a_index | stats avg(doubleField), var0 = avg(unsignedLongField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('from a_index | eval mv_zip(booleanField, booleanField)', [ - 'Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]', - 'Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | sort mv_zip(stringField, stringField)', []); - }); - - describe('now', () => { - testErrorsAndWarnings('row var = now()', []); - testErrorsAndWarnings('row now()', []); - testErrorsAndWarnings('from a_index | eval var = now()', []); - testErrorsAndWarnings('from a_index | eval now()', []); - - testErrorsAndWarnings('from a_index | eval now(extraArg)', [ - 'Error: [now] function expects exactly 0 arguments, got 1.', - ]); - - testErrorsAndWarnings('from a_index | sort now()', []); - testErrorsAndWarnings('row nullVar = null | eval now()', []); - }); - - describe('pi', () => { - testErrorsAndWarnings('row var = pi()', []); - testErrorsAndWarnings('row pi()', []); - testErrorsAndWarnings('from a_index | where pi() > 0', []); - testErrorsAndWarnings('from a_index | eval var = pi()', []); - testErrorsAndWarnings('from a_index | eval pi()', []); - - testErrorsAndWarnings('from a_index | eval pi(extraArg)', [ - 'Error: [pi] function expects exactly 0 arguments, got 1.', - ]); - - testErrorsAndWarnings('from a_index | sort pi()', []); - testErrorsAndWarnings('row nullVar = null | eval pi()', []); - }); - - describe('pow', () => { - testErrorsAndWarnings('row var = pow(5, 5)', []); - testErrorsAndWarnings('row pow(5, 5)', []); - testErrorsAndWarnings('row var = pow(to_integer("a"), to_integer("a"))', []); - - testErrorsAndWarnings('row var = pow("a", "a")', [ - 'Argument of [pow] must be [number], found value ["a"] type [string]', - 'Argument of [pow] must be [number], found value ["a"] type [string]', - ]); - - testErrorsAndWarnings('from a_index | where pow(numberField, numberField) > 0', []); - - testErrorsAndWarnings('from a_index | where pow(stringField, stringField) > 0', [ - 'Argument of [pow] must be [number], found value [stringField] type [string]', - 'Argument of [pow] must be [number], found value [stringField] type [string]', - ]); - - testErrorsAndWarnings('from a_index | eval var = pow(numberField, numberField)', []); - testErrorsAndWarnings('from a_index | eval pow(numberField, numberField)', []); - + testErrorsAndWarnings('from a_index | stats var = avg(longField)', []); + testErrorsAndWarnings('from a_index | stats avg(longField)', []); + testErrorsAndWarnings('from a_index | stats var = round(avg(longField))', []); + testErrorsAndWarnings('from a_index | stats round(avg(longField))', []); testErrorsAndWarnings( - 'from a_index | eval var = pow(to_integer(stringField), to_integer(stringField))', + 'from a_index | stats var = round(avg(longField)) + avg(longField)', [] ); - - testErrorsAndWarnings('from a_index | eval pow(stringField, stringField)', [ - 'Argument of [pow] must be [number], found value [stringField] type [string]', - 'Argument of [pow] must be [number], found value [stringField] type [string]', - ]); - - testErrorsAndWarnings('from a_index | eval pow(numberField, numberField, extraArg)', [ - 'Error: [pow] function expects exactly 2 arguments, got 3.', - ]); - - testErrorsAndWarnings('from a_index | sort pow(numberField, numberField)', []); - testErrorsAndWarnings('row var = pow(to_integer(true), to_integer(true))', []); - - testErrorsAndWarnings('row var = pow(true, true)', [ - 'Argument of [pow] must be [number], found value [true] type [boolean]', - 'Argument of [pow] must be [number], found value [true] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | where pow(booleanField, booleanField) > 0', [ - 'Argument of [pow] must be [number], found value [booleanField] type [boolean]', - 'Argument of [pow] must be [number], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings('from a_index | stats round(avg(longField)) + avg(longField)', []); + testErrorsAndWarnings('from a_index | stats var0 = avg(longField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), avg(longField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), var0 = avg(longField)', []); + testErrorsAndWarnings('from a_index | stats avg(longField) by round(doubleField / 2)', []); testErrorsAndWarnings( - 'from a_index | eval var = pow(to_integer(booleanField), to_integer(booleanField))', + 'from a_index | stats var0 = avg(longField) by var1 = round(doubleField / 2)', [] ); - testErrorsAndWarnings('from a_index | eval pow(booleanField, booleanField)', [ - 'Argument of [pow] must be [number], found value [booleanField] type [boolean]', - 'Argument of [pow] must be [number], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | eval pow(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval pow(nullVar, nullVar)', []); - }); - - describe('replace', () => { - testErrorsAndWarnings('row var = replace("a", "a", "a")', []); - testErrorsAndWarnings('row replace("a", "a", "a")', []); - testErrorsAndWarnings( - 'row var = replace(to_string("a"), to_string("a"), to_string("a"))', + 'from a_index | stats avg(doubleField), avg(longField) by round(doubleField / 2), ipField', [] ); - testErrorsAndWarnings('row var = replace(5, 5, 5)', [ - 'Argument of [replace] must be [string], found value [5] type [number]', - 'Argument of [replace] must be [string], found value [5] type [number]', - 'Argument of [replace] must be [string], found value [5] type [number]', - ]); - testErrorsAndWarnings( - 'from a_index | where length(replace(stringField, stringField, stringField)) > 0', + 'from a_index | stats avg(doubleField), var0 = avg(longField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | where length(replace(numberField, numberField, numberField)) > 0', - [ - 'Argument of [replace] must be [string], found value [numberField] type [number]', - 'Argument of [replace] must be [string], found value [numberField] type [number]', - 'Argument of [replace] must be [string], found value [numberField] type [number]', - ] + 'from a_index | stats avg(doubleField), avg(longField) by round(doubleField / 2), doubleField / 2', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = replace(stringField, stringField, stringField)', + 'from a_index | stats avg(doubleField), var0 = avg(longField) by var1 = round(doubleField / 2), doubleField / 2', [] ); + testErrorsAndWarnings('from a_index | stats var = avg(counterLongField)', []); + testErrorsAndWarnings('from a_index | stats avg(counterLongField)', []); + testErrorsAndWarnings('from a_index | stats var = round(avg(counterLongField))', []); + testErrorsAndWarnings('from a_index | stats round(avg(counterLongField))', []); + testErrorsAndWarnings( - 'from a_index | eval replace(stringField, stringField, stringField)', + 'from a_index | stats var = round(avg(counterLongField)) + avg(counterLongField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = replace(to_string(stringField), to_string(stringField), to_string(stringField))', + 'from a_index | stats round(avg(counterLongField)) + avg(counterLongField)', [] ); + testErrorsAndWarnings('from a_index | stats var0 = avg(counterLongField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), avg(counterLongField)', []); testErrorsAndWarnings( - 'from a_index | eval replace(numberField, numberField, numberField)', - [ - 'Argument of [replace] must be [string], found value [numberField] type [number]', - 'Argument of [replace] must be [string], found value [numberField] type [number]', - 'Argument of [replace] must be [string], found value [numberField] type [number]', - ] + 'from a_index | stats avg(doubleField), var0 = avg(counterLongField)', + [] ); - testErrorsAndWarnings( - 'from a_index | eval replace(stringField, stringField, stringField, extraArg)', - ['Error: [replace] function expects exactly 3 arguments, got 4.'] + 'from a_index | stats avg(counterLongField) by round(doubleField / 2)', + [] ); testErrorsAndWarnings( - 'from a_index | sort replace(stringField, stringField, stringField)', + 'from a_index | stats var0 = avg(counterLongField) by var1 = round(doubleField / 2)', [] ); + testErrorsAndWarnings( - 'row var = replace(to_string(true), to_string(true), to_string(true))', + 'from a_index | stats avg(doubleField), avg(counterLongField) by round(doubleField / 2), ipField', [] ); - testErrorsAndWarnings('row var = replace(true, true, true)', [ - 'Argument of [replace] must be [string], found value [true] type [boolean]', - 'Argument of [replace] must be [string], found value [true] type [boolean]', - 'Argument of [replace] must be [string], found value [true] type [boolean]', - ]); - testErrorsAndWarnings( - 'from a_index | where length(replace(booleanField, booleanField, booleanField)) > 0', - [ - 'Argument of [replace] must be [string], found value [booleanField] type [boolean]', - 'Argument of [replace] must be [string], found value [booleanField] type [boolean]', - 'Argument of [replace] must be [string], found value [booleanField] type [boolean]', - ] + 'from a_index | stats avg(doubleField), var0 = avg(counterLongField) by var1 = round(doubleField / 2), ipField', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = replace(to_string(booleanField), to_string(booleanField), to_string(booleanField))', + 'from a_index | stats avg(doubleField), avg(counterLongField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval replace(booleanField, booleanField, booleanField)', - [ - 'Argument of [replace] must be [string], found value [booleanField] type [boolean]', - 'Argument of [replace] must be [string], found value [booleanField] type [boolean]', - 'Argument of [replace] must be [string], found value [booleanField] type [boolean]', - ] + 'from a_index | stats avg(doubleField), var0 = avg(counterLongField) by var1 = round(doubleField / 2), doubleField / 2', + [] ); - testErrorsAndWarnings('from a_index | eval replace(null, null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval replace(nullVar, nullVar, nullVar)', []); - }); - describe('right', () => { - testErrorsAndWarnings('row var = right("a", 5)', []); - testErrorsAndWarnings('row right("a", 5)', []); - testErrorsAndWarnings('row var = right(to_string("a"), to_integer("a"))', []); - - testErrorsAndWarnings('row var = right(5, "a")', [ - 'Argument of [right] must be [string], found value [5] type [number]', - 'Argument of [right] must be [number], found value ["a"] type [string]', - ]); + testErrorsAndWarnings('from a_index | stats var = avg(counterDoubleField)', []); + testErrorsAndWarnings('from a_index | stats avg(counterDoubleField)', []); + testErrorsAndWarnings('from a_index | stats var = round(avg(counterDoubleField))', []); + testErrorsAndWarnings('from a_index | stats round(avg(counterDoubleField))', []); testErrorsAndWarnings( - 'from a_index | where length(right(stringField, numberField)) > 0', + 'from a_index | stats var = round(avg(counterDoubleField)) + avg(counterDoubleField)', [] ); - testErrorsAndWarnings('from a_index | where length(right(numberField, stringField)) > 0', [ - 'Argument of [right] must be [string], found value [numberField] type [number]', - 'Argument of [right] must be [number], found value [stringField] type [string]', - ]); - - testErrorsAndWarnings('from a_index | eval var = right(stringField, numberField)', []); - testErrorsAndWarnings('from a_index | eval right(stringField, numberField)', []); - testErrorsAndWarnings( - 'from a_index | eval var = right(to_string(stringField), to_integer(stringField))', + 'from a_index | stats round(avg(counterDoubleField)) + avg(counterDoubleField)', [] ); - testErrorsAndWarnings('from a_index | eval right(numberField, stringField)', [ - 'Argument of [right] must be [string], found value [numberField] type [number]', - 'Argument of [right] must be [number], found value [stringField] type [string]', - ]); - - testErrorsAndWarnings('from a_index | eval right(stringField, numberField, extraArg)', [ - 'Error: [right] function expects exactly 2 arguments, got 3.', - ]); - - testErrorsAndWarnings('from a_index | sort right(stringField, numberField)', []); - testErrorsAndWarnings('row var = right(to_string(true), to_integer(true))', []); - - testErrorsAndWarnings('row var = right(true, true)', [ - 'Argument of [right] must be [string], found value [true] type [boolean]', - 'Argument of [right] must be [number], found value [true] type [boolean]', - ]); + testErrorsAndWarnings('from a_index | stats var0 = avg(counterDoubleField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), avg(counterDoubleField)', []); testErrorsAndWarnings( - 'from a_index | where length(right(booleanField, booleanField)) > 0', - [ - 'Argument of [right] must be [string], found value [booleanField] type [boolean]', - 'Argument of [right] must be [number], found value [booleanField] type [boolean]', - ] + 'from a_index | stats avg(doubleField), var0 = avg(counterDoubleField)', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = right(to_string(booleanField), to_integer(booleanField))', + 'from a_index | stats avg(counterDoubleField) by round(doubleField / 2)', [] ); - testErrorsAndWarnings('from a_index | eval right(booleanField, booleanField)', [ - 'Argument of [right] must be [string], found value [booleanField] type [boolean]', - 'Argument of [right] must be [number], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | eval right(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval right(nullVar, nullVar)', []); - }); - - describe('round', () => { - testErrorsAndWarnings('row var = round(5, 5)', []); - testErrorsAndWarnings('row round(5, 5)', []); - testErrorsAndWarnings('row var = round(to_integer("a"), to_integer("a"))', []); - - testErrorsAndWarnings('row var = round("a", "a")', [ - 'Argument of [round] must be [number], found value ["a"] type [string]', - 'Argument of [round] must be [number], found value ["a"] type [string]', - ]); - - testErrorsAndWarnings('from a_index | where round(numberField, numberField) > 0', []); - - testErrorsAndWarnings('from a_index | where round(stringField, stringField) > 0', [ - 'Argument of [round] must be [number], found value [stringField] type [string]', - 'Argument of [round] must be [number], found value [stringField] type [string]', - ]); - - testErrorsAndWarnings('from a_index | eval var = round(numberField, numberField)', []); - testErrorsAndWarnings('from a_index | eval round(numberField, numberField)', []); - testErrorsAndWarnings( - 'from a_index | eval var = round(to_integer(stringField), to_integer(stringField))', + 'from a_index | stats var0 = avg(counterDoubleField) by var1 = round(doubleField / 2)', [] ); - testErrorsAndWarnings('from a_index | eval round(stringField, stringField)', [ - 'Argument of [round] must be [number], found value [stringField] type [string]', - 'Argument of [round] must be [number], found value [stringField] type [string]', - ]); - - testErrorsAndWarnings('from a_index | eval round(numberField, numberField, extraArg)', [ - 'Error: [round] function expects no more than 2 arguments, got 3.', - ]); - - testErrorsAndWarnings('from a_index | sort round(numberField, numberField)', []); - testErrorsAndWarnings('row var = round(5)', []); - testErrorsAndWarnings('row round(5)', []); - testErrorsAndWarnings('row var = round(to_integer(true))', []); - testErrorsAndWarnings('row var = round(to_integer(true), to_integer(true))', []); - - testErrorsAndWarnings('row var = round(true, true)', [ - 'Argument of [round] must be [number], found value [true] type [boolean]', - 'Argument of [round] must be [number], found value [true] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | where round(numberField) > 0', []); - - testErrorsAndWarnings('from a_index | where round(booleanField) > 0', [ - 'Argument of [round] must be [number], found value [booleanField] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | where round(booleanField, booleanField) > 0', [ - 'Argument of [round] must be [number], found value [booleanField] type [boolean]', - 'Argument of [round] must be [number], found value [booleanField] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | eval var = round(numberField)', []); - testErrorsAndWarnings('from a_index | eval round(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = round(to_integer(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval round(booleanField)', [ - 'Argument of [round] must be [number], found value [booleanField] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | eval var = round(*)', [ - 'Using wildcards (*) in round is not allowed', - ]); - testErrorsAndWarnings( - 'from a_index | eval var = round(to_integer(booleanField), to_integer(booleanField))', + 'from a_index | stats avg(doubleField), avg(counterDoubleField) by round(doubleField / 2), ipField', [] ); - testErrorsAndWarnings('from a_index | eval round(booleanField, booleanField)', [ - 'Argument of [round] must be [number], found value [booleanField] type [boolean]', - 'Argument of [round] must be [number], found value [booleanField] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | sort round(numberField)', []); - testErrorsAndWarnings('from a_index | eval round(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval round(nullVar, nullVar)', []); - }); - - describe('rtrim', () => { - testErrorsAndWarnings('row var = rtrim("a")', []); - testErrorsAndWarnings('row rtrim("a")', []); - testErrorsAndWarnings('row var = rtrim(to_string("a"))', []); - - testErrorsAndWarnings('row var = rtrim(5)', [ - 'Argument of [rtrim] must be [string], found value [5] type [number]', - ]); - - testErrorsAndWarnings('from a_index | where length(rtrim(stringField)) > 0', []); - - testErrorsAndWarnings('from a_index | where length(rtrim(numberField)) > 0', [ - 'Argument of [rtrim] must be [string], found value [numberField] type [number]', - ]); - - testErrorsAndWarnings('from a_index | eval var = rtrim(stringField)', []); - testErrorsAndWarnings('from a_index | eval rtrim(stringField)', []); - testErrorsAndWarnings('from a_index | eval var = rtrim(to_string(stringField))', []); - - testErrorsAndWarnings('from a_index | eval rtrim(numberField)', [ - 'Argument of [rtrim] must be [string], found value [numberField] type [number]', - ]); - - testErrorsAndWarnings('from a_index | eval rtrim(stringField, extraArg)', [ - 'Error: [rtrim] function expects exactly one argument, got 2.', - ]); - - testErrorsAndWarnings('from a_index | eval var = rtrim(*)', [ - 'Using wildcards (*) in rtrim is not allowed', - ]); - - testErrorsAndWarnings('from a_index | sort rtrim(stringField)', []); - testErrorsAndWarnings('row var = rtrim(to_string(true))', []); - - testErrorsAndWarnings('row var = rtrim(true)', [ - 'Argument of [rtrim] must be [string], found value [true] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | where length(rtrim(booleanField)) > 0', [ - 'Argument of [rtrim] must be [string], found value [booleanField] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | eval var = rtrim(to_string(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval rtrim(booleanField)', [ - 'Argument of [rtrim] must be [string], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | eval rtrim(null)', []); - testErrorsAndWarnings('row nullVar = null | eval rtrim(nullVar)', []); - }); - - describe('signum', () => { - testErrorsAndWarnings('row var = signum(5)', []); - testErrorsAndWarnings('row signum(5)', []); - testErrorsAndWarnings('row var = signum(to_integer("a"))', []); - - testErrorsAndWarnings('row var = signum("a")', [ - 'Argument of [signum] must be [number], found value ["a"] type [string]', - ]); - - testErrorsAndWarnings('from a_index | where signum(numberField) > 0', []); - - testErrorsAndWarnings('from a_index | where signum(stringField) > 0', [ - 'Argument of [signum] must be [number], found value [stringField] type [string]', - ]); - - testErrorsAndWarnings('from a_index | eval var = signum(numberField)', []); - testErrorsAndWarnings('from a_index | eval signum(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = signum(to_integer(stringField))', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = avg(counterDoubleField) by var1 = round(doubleField / 2), ipField', + [] + ); - testErrorsAndWarnings('from a_index | eval signum(stringField)', [ - 'Argument of [signum] must be [number], found value [stringField] type [string]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), avg(counterDoubleField) by round(doubleField / 2), doubleField / 2', + [] + ); - testErrorsAndWarnings('from a_index | eval signum(numberField, extraArg)', [ - 'Error: [signum] function expects exactly one argument, got 2.', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = avg(counterDoubleField) by var1 = round(doubleField / 2), doubleField / 2', + [] + ); - testErrorsAndWarnings('from a_index | eval var = signum(*)', [ - 'Using wildcards (*) in signum is not allowed', + testErrorsAndWarnings('from a_index | sort avg(integerField)', [ + 'SORT does not support function avg', ]); - testErrorsAndWarnings('from a_index | sort signum(numberField)', []); - testErrorsAndWarnings('row var = signum(to_integer(true))', []); - - testErrorsAndWarnings('row var = signum(true)', [ - 'Argument of [signum] must be [number], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | where avg(integerField)', [ + 'WHERE does not support function avg', ]); - testErrorsAndWarnings('from a_index | where signum(booleanField) > 0', [ - 'Argument of [signum] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | where avg(integerField) > 0', [ + 'WHERE does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval var = signum(to_integer(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval signum(booleanField)', [ - 'Argument of [signum] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | where avg(counterIntegerField)', [ + 'WHERE does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval signum(null)', []); - testErrorsAndWarnings('row nullVar = null | eval signum(nullVar)', []); - }); - - describe('sin', () => { - testErrorsAndWarnings('row var = sin(5)', []); - testErrorsAndWarnings('row sin(5)', []); - testErrorsAndWarnings('row var = sin(to_integer("a"))', []); - testErrorsAndWarnings('row var = sin("a")', [ - 'Argument of [sin] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('from a_index | where avg(counterIntegerField) > 0', [ + 'WHERE does not support function avg', ]); - testErrorsAndWarnings('from a_index | where sin(numberField) > 0', []); - - testErrorsAndWarnings('from a_index | where sin(stringField) > 0', [ - 'Argument of [sin] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | where avg(doubleField)', [ + 'WHERE does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval var = sin(numberField)', []); - testErrorsAndWarnings('from a_index | eval sin(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = sin(to_integer(stringField))', []); - - testErrorsAndWarnings('from a_index | eval sin(stringField)', [ - 'Argument of [sin] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | where avg(doubleField) > 0', [ + 'WHERE does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval sin(numberField, extraArg)', [ - 'Error: [sin] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | where avg(unsignedLongField)', [ + 'WHERE does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval var = sin(*)', [ - 'Using wildcards (*) in sin is not allowed', + testErrorsAndWarnings('from a_index | where avg(unsignedLongField) > 0', [ + 'WHERE does not support function avg', ]); - testErrorsAndWarnings('from a_index | sort sin(numberField)', []); - testErrorsAndWarnings('row var = sin(to_integer(true))', []); - - testErrorsAndWarnings('row var = sin(true)', [ - 'Argument of [sin] must be [number], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | where avg(longField)', [ + 'WHERE does not support function avg', ]); - testErrorsAndWarnings('from a_index | where sin(booleanField) > 0', [ - 'Argument of [sin] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | where avg(longField) > 0', [ + 'WHERE does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval var = sin(to_integer(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval sin(booleanField)', [ - 'Argument of [sin] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | where avg(counterLongField)', [ + 'WHERE does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval sin(null)', []); - testErrorsAndWarnings('row nullVar = null | eval sin(nullVar)', []); - }); - - describe('sinh', () => { - testErrorsAndWarnings('row var = sinh(5)', []); - testErrorsAndWarnings('row sinh(5)', []); - testErrorsAndWarnings('row var = sinh(to_integer("a"))', []); - testErrorsAndWarnings('row var = sinh("a")', [ - 'Argument of [sinh] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('from a_index | where avg(counterLongField) > 0', [ + 'WHERE does not support function avg', ]); - testErrorsAndWarnings('from a_index | where sinh(numberField) > 0', []); - - testErrorsAndWarnings('from a_index | where sinh(stringField) > 0', [ - 'Argument of [sinh] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | where avg(counterDoubleField)', [ + 'WHERE does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval var = sinh(numberField)', []); - testErrorsAndWarnings('from a_index | eval sinh(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = sinh(to_integer(stringField))', []); - - testErrorsAndWarnings('from a_index | eval sinh(stringField)', [ - 'Argument of [sinh] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | where avg(counterDoubleField) > 0', [ + 'WHERE does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval sinh(numberField, extraArg)', [ - 'Error: [sinh] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval var = avg(integerField)', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval var = sinh(*)', [ - 'Using wildcards (*) in sinh is not allowed', + testErrorsAndWarnings('from a_index | eval var = avg(integerField) > 0', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | sort sinh(numberField)', []); - testErrorsAndWarnings('row var = sinh(to_integer(true))', []); - - testErrorsAndWarnings('row var = sinh(true)', [ - 'Argument of [sinh] must be [number], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | eval avg(integerField)', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | where sinh(booleanField) > 0', [ - 'Argument of [sinh] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval avg(integerField) > 0', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval var = sinh(to_integer(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval sinh(booleanField)', [ - 'Argument of [sinh] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval var = avg(counterIntegerField)', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval sinh(null)', []); - testErrorsAndWarnings('row nullVar = null | eval sinh(nullVar)', []); - }); - - describe('split', () => { - testErrorsAndWarnings('row var = split("a", "a")', []); - testErrorsAndWarnings('row split("a", "a")', []); - testErrorsAndWarnings('row var = split(to_string("a"), to_string("a"))', []); - testErrorsAndWarnings('row var = split(5, 5)', [ - 'Argument of [split] must be [string], found value [5] type [number]', - 'Argument of [split] must be [string], found value [5] type [number]', + testErrorsAndWarnings('from a_index | eval var = avg(counterIntegerField) > 0', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings( - 'from a_index | where length(split(stringField, stringField)) > 0', - [] - ); - - testErrorsAndWarnings('from a_index | where length(split(numberField, numberField)) > 0', [ - 'Argument of [split] must be [string], found value [numberField] type [number]', - 'Argument of [split] must be [string], found value [numberField] type [number]', + testErrorsAndWarnings('from a_index | eval avg(counterIntegerField)', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval var = split(stringField, stringField)', []); - testErrorsAndWarnings('from a_index | eval split(stringField, stringField)', []); - - testErrorsAndWarnings( - 'from a_index | eval var = split(to_string(stringField), to_string(stringField))', - [] - ); - - testErrorsAndWarnings('from a_index | eval split(numberField, numberField)', [ - 'Argument of [split] must be [string], found value [numberField] type [number]', - 'Argument of [split] must be [string], found value [numberField] type [number]', + testErrorsAndWarnings('from a_index | eval avg(counterIntegerField) > 0', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval split(stringField, stringField, extraArg)', [ - 'Error: [split] function expects exactly 2 arguments, got 3.', + testErrorsAndWarnings('from a_index | eval var = avg(doubleField)', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | sort split(stringField, stringField)', []); - testErrorsAndWarnings('row var = split(to_string(true), to_string(true))', []); - - testErrorsAndWarnings('row var = split(true, true)', [ - 'Argument of [split] must be [string], found value [true] type [boolean]', - 'Argument of [split] must be [string], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | eval var = avg(doubleField) > 0', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings( - 'from a_index | where length(split(booleanField, booleanField)) > 0', - [ - 'Argument of [split] must be [string], found value [booleanField] type [boolean]', - 'Argument of [split] must be [string], found value [booleanField] type [boolean]', - ] - ); - - testErrorsAndWarnings( - 'from a_index | eval var = split(to_string(booleanField), to_string(booleanField))', - [] - ); - - testErrorsAndWarnings('from a_index | eval split(booleanField, booleanField)', [ - 'Argument of [split] must be [string], found value [booleanField] type [boolean]', - 'Argument of [split] must be [string], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval avg(doubleField)', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval split(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval split(nullVar, nullVar)', []); - }); - describe('sqrt', () => { - testErrorsAndWarnings('row var = sqrt(5)', []); - testErrorsAndWarnings('row sqrt(5)', []); - testErrorsAndWarnings('row var = sqrt(to_integer("a"))', []); + testErrorsAndWarnings('from a_index | eval avg(doubleField) > 0', [ + 'EVAL does not support function avg', + ]); - testErrorsAndWarnings('row var = sqrt("a")', [ - 'Argument of [sqrt] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('from a_index | eval var = avg(unsignedLongField)', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | where sqrt(numberField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = avg(unsignedLongField) > 0', [ + 'EVAL does not support function avg', + ]); - testErrorsAndWarnings('from a_index | where sqrt(stringField) > 0', [ - 'Argument of [sqrt] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | eval avg(unsignedLongField)', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval var = sqrt(numberField)', []); - testErrorsAndWarnings('from a_index | eval sqrt(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = sqrt(to_integer(stringField))', []); + testErrorsAndWarnings('from a_index | eval avg(unsignedLongField) > 0', [ + 'EVAL does not support function avg', + ]); - testErrorsAndWarnings('from a_index | eval sqrt(stringField)', [ - 'Argument of [sqrt] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | eval var = avg(longField)', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval sqrt(numberField, extraArg)', [ - 'Error: [sqrt] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval var = avg(longField) > 0', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval var = sqrt(*)', [ - 'Using wildcards (*) in sqrt is not allowed', + testErrorsAndWarnings('from a_index | eval avg(longField)', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | sort sqrt(numberField)', []); - testErrorsAndWarnings('row var = sqrt(to_integer(true))', []); + testErrorsAndWarnings('from a_index | eval avg(longField) > 0', [ + 'EVAL does not support function avg', + ]); - testErrorsAndWarnings('row var = sqrt(true)', [ - 'Argument of [sqrt] must be [number], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | eval var = avg(counterLongField)', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | where sqrt(booleanField) > 0', [ - 'Argument of [sqrt] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval var = avg(counterLongField) > 0', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval var = sqrt(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval avg(counterLongField)', [ + 'EVAL does not support function avg', + ]); - testErrorsAndWarnings('from a_index | eval sqrt(booleanField)', [ - 'Argument of [sqrt] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval avg(counterLongField) > 0', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings('from a_index | eval sqrt(null)', []); - testErrorsAndWarnings('row nullVar = null | eval sqrt(nullVar)', []); - }); - describe('st_contains', () => { - testErrorsAndWarnings( - 'row var = st_contains(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', - [] - ); + testErrorsAndWarnings('from a_index | eval var = avg(counterDoubleField)', [ + 'EVAL does not support function avg', + ]); - testErrorsAndWarnings( - 'row st_contains(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', - [] - ); + testErrorsAndWarnings('from a_index | eval var = avg(counterDoubleField) > 0', [ + 'EVAL does not support function avg', + ]); - testErrorsAndWarnings('row var = st_contains(to_geopoint("a"), to_geopoint("a"))', []); + testErrorsAndWarnings('from a_index | eval avg(counterDoubleField)', [ + 'EVAL does not support function avg', + ]); - testErrorsAndWarnings('row var = st_contains("a", "a")', [ - 'Argument of [st_contains] must be [cartesian_point], found value ["a"] type [string]', - 'Argument of [st_contains] must be [cartesian_point], found value ["a"] type [string]', + testErrorsAndWarnings('from a_index | eval avg(counterDoubleField) > 0', [ + 'EVAL does not support function avg', ]); - testErrorsAndWarnings( - 'row var = st_contains(to_geopoint("POINT (30 10)"), to_geoshape("POINT (30 10)"))', - [] - ); + testErrorsAndWarnings('from a_index | stats avg(null)', []); + testErrorsAndWarnings('row nullVar = null | stats avg(nullVar)', []); + }); + + describe('sum', () => { + testErrorsAndWarnings('from a_index | stats var = sum(integerField)', []); + testErrorsAndWarnings('from a_index | stats sum(integerField)', []); + testErrorsAndWarnings('from a_index | stats var = round(sum(integerField))', []); + testErrorsAndWarnings('from a_index | stats round(sum(integerField))', []); testErrorsAndWarnings( - 'row st_contains(to_geopoint("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats var = round(sum(integerField)) + sum(integerField)', [] ); testErrorsAndWarnings( - 'row var = st_contains(to_geopoint("a"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats round(sum(integerField)) + sum(integerField)', [] ); - + testErrorsAndWarnings('from a_index | stats sum(doubleField / 2)', []); + testErrorsAndWarnings('from a_index | stats var0 = sum(doubleField / 2)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), sum(doubleField / 2)', []); testErrorsAndWarnings( - 'row var = st_contains(to_geoshape("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = sum(doubleField / 2)', [] ); - + testErrorsAndWarnings('from a_index | stats var0 = sum(integerField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), sum(integerField)', []); testErrorsAndWarnings( - 'row st_contains(to_geoshape("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = sum(integerField)', [] ); - testErrorsAndWarnings( - 'row var = st_contains(to_geoshape("POINT (30 10)"), to_geopoint("a"))', + 'from a_index | stats sum(integerField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_contains(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats var0 = sum(integerField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row st_contains(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), sum(integerField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row var = st_contains(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = sum(integerField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row st_contains(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), sum(integerField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'row var = st_contains(to_cartesianpoint("a"), to_cartesianpoint("a"))', + 'from a_index | stats avg(doubleField), var0 = sum(integerField) by var1 = round(doubleField / 2), doubleField / 2', [] ); + testErrorsAndWarnings('from a_index | stats var = sum(avg(integerField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + ]); + + testErrorsAndWarnings('from a_index | stats sum(avg(integerField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + ]); + + testErrorsAndWarnings('from a_index | stats sum(booleanField)', [ + 'Argument of [sum] must be [integer], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | stats var = sum(*)', [ + 'Using wildcards (*) in sum is not allowed', + ]); + + testErrorsAndWarnings('from a_index | stats var = sum(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | stats sum(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | stats var = round(sum(counterIntegerField))', []); + testErrorsAndWarnings('from a_index | stats round(sum(counterIntegerField))', []); + testErrorsAndWarnings( - 'row var = st_contains(to_cartesianpoint("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats var = round(sum(counterIntegerField)) + sum(counterIntegerField)', [] ); testErrorsAndWarnings( - 'row st_contains(to_cartesianpoint("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats round(sum(counterIntegerField)) + sum(counterIntegerField)', [] ); + testErrorsAndWarnings('from a_index | stats var0 = sum(counterIntegerField)', []); testErrorsAndWarnings( - 'row var = st_contains(to_cartesianpoint("a"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), sum(counterIntegerField)', [] ); testErrorsAndWarnings( - 'row var = st_contains(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = sum(counterIntegerField)', [] ); testErrorsAndWarnings( - 'row st_contains(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats sum(counterIntegerField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_contains(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("a"))', + 'from a_index | stats var0 = sum(counterIntegerField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_contains(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), sum(counterIntegerField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row st_contains(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = sum(counterIntegerField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(geoPointField, geoPointField)', + 'from a_index | stats avg(doubleField), sum(counterIntegerField) by round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('from a_index | eval st_contains(geoPointField, geoPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(to_geopoint(stringField), to_geopoint(stringField))', + 'from a_index | stats avg(doubleField), var0 = sum(counterIntegerField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('from a_index | eval st_contains(stringField, stringField)', [ - 'Argument of [st_contains] must be [cartesian_point], found value [stringField] type [string]', - 'Argument of [st_contains] must be [cartesian_point], found value [stringField] type [string]', - ]); + testErrorsAndWarnings('from a_index | stats var = sum(doubleField)', []); + testErrorsAndWarnings('from a_index | stats sum(doubleField)', []); + testErrorsAndWarnings('from a_index | stats var = round(sum(doubleField))', []); + testErrorsAndWarnings('from a_index | stats round(sum(doubleField))', []); testErrorsAndWarnings( - 'from a_index | eval st_contains(geoPointField, geoPointField, extraArg)', - ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats var = round(sum(doubleField)) + sum(doubleField)', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(geoPointField, geoShapeField)', + 'from a_index | stats round(sum(doubleField)) + sum(doubleField)', [] ); - testErrorsAndWarnings('from a_index | eval st_contains(geoPointField, geoShapeField)', []); - + testErrorsAndWarnings('from a_index | stats var0 = sum(doubleField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), sum(doubleField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), var0 = sum(doubleField)', []); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(to_geopoint(stringField), geoShapeField)', + 'from a_index | stats sum(doubleField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_contains(geoPointField, geoShapeField, extraArg)', - ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats var0 = sum(doubleField) by var1 = round(doubleField / 2)', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(geoShapeField, geoPointField)', + 'from a_index | stats avg(doubleField), sum(doubleField) by round(doubleField / 2), ipField', [] ); - testErrorsAndWarnings('from a_index | eval st_contains(geoShapeField, geoPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(geoShapeField, to_geopoint(stringField))', + 'from a_index | stats avg(doubleField), var0 = sum(doubleField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval st_contains(geoShapeField, geoPointField, extraArg)', - ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), sum(doubleField) by round(doubleField / 2), doubleField / 2', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(geoShapeField, geoShapeField)', + 'from a_index | stats avg(doubleField), var0 = sum(doubleField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('from a_index | eval st_contains(geoShapeField, geoShapeField)', []); - testErrorsAndWarnings( - 'from a_index | eval st_contains(geoShapeField, geoShapeField, extraArg)', - ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] - ); + testErrorsAndWarnings('from a_index | stats var = sum(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | stats sum(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | stats var = round(sum(unsignedLongField))', []); + testErrorsAndWarnings('from a_index | stats round(sum(unsignedLongField))', []); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(cartesianPointField, cartesianPointField)', + 'from a_index | stats var = round(sum(unsignedLongField)) + sum(unsignedLongField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_contains(cartesianPointField, cartesianPointField)', + 'from a_index | stats round(sum(unsignedLongField)) + sum(unsignedLongField)', [] ); + testErrorsAndWarnings('from a_index | stats var0 = sum(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), sum(unsignedLongField)', []); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(to_cartesianpoint(stringField), to_cartesianpoint(stringField))', + 'from a_index | stats avg(doubleField), var0 = sum(unsignedLongField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_contains(cartesianPointField, cartesianPointField, extraArg)', - ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats sum(unsignedLongField) by round(doubleField / 2)', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(cartesianPointField, cartesianShapeField)', + 'from a_index | stats var0 = sum(unsignedLongField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_contains(cartesianPointField, cartesianShapeField)', + 'from a_index | stats avg(doubleField), sum(unsignedLongField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(to_cartesianpoint(stringField), cartesianShapeField)', + 'from a_index | stats avg(doubleField), var0 = sum(unsignedLongField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval st_contains(cartesianPointField, cartesianShapeField, extraArg)', - ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), sum(unsignedLongField) by round(doubleField / 2), doubleField / 2', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(cartesianShapeField, cartesianPointField)', + 'from a_index | stats avg(doubleField), var0 = sum(unsignedLongField) by var1 = round(doubleField / 2), doubleField / 2', [] ); + testErrorsAndWarnings('from a_index | stats var = sum(longField)', []); + testErrorsAndWarnings('from a_index | stats sum(longField)', []); + testErrorsAndWarnings('from a_index | stats var = round(sum(longField))', []); + testErrorsAndWarnings('from a_index | stats round(sum(longField))', []); testErrorsAndWarnings( - 'from a_index | eval st_contains(cartesianShapeField, cartesianPointField)', + 'from a_index | stats var = round(sum(longField)) + sum(longField)', [] ); + testErrorsAndWarnings('from a_index | stats round(sum(longField)) + sum(longField)', []); + testErrorsAndWarnings('from a_index | stats var0 = sum(longField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), sum(longField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), var0 = sum(longField)', []); + testErrorsAndWarnings('from a_index | stats sum(longField) by round(doubleField / 2)', []); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(cartesianShapeField, to_cartesianpoint(stringField))', + 'from a_index | stats var0 = sum(longField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_contains(cartesianShapeField, cartesianPointField, extraArg)', - ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), sum(longField) by round(doubleField / 2), ipField', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(cartesianShapeField, cartesianShapeField)', + 'from a_index | stats avg(doubleField), var0 = sum(longField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval st_contains(cartesianShapeField, cartesianShapeField)', + 'from a_index | stats avg(doubleField), sum(longField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval st_contains(cartesianShapeField, cartesianShapeField, extraArg)', - ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), var0 = sum(longField) by var1 = round(doubleField / 2), doubleField / 2', + [] ); - testErrorsAndWarnings('from a_index | sort st_contains(geoPointField, geoPointField)', []); + testErrorsAndWarnings('from a_index | stats var = sum(counterLongField)', []); + testErrorsAndWarnings('from a_index | stats sum(counterLongField)', []); + testErrorsAndWarnings('from a_index | stats var = round(sum(counterLongField))', []); + testErrorsAndWarnings('from a_index | stats round(sum(counterLongField))', []); testErrorsAndWarnings( - 'row var = st_contains(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats var = round(sum(counterLongField)) + sum(counterLongField)', [] ); testErrorsAndWarnings( - 'row var = st_contains(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats round(sum(counterLongField)) + sum(counterLongField)', [] ); + testErrorsAndWarnings('from a_index | stats var0 = sum(counterLongField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), sum(counterLongField)', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = sum(counterLongField)', + [] + ); testErrorsAndWarnings( - 'row var = st_contains(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats sum(counterLongField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_contains(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats var0 = sum(counterLongField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_contains(to_geopoint(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), sum(counterLongField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row var = st_contains(to_geopoint(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), var0 = sum(counterLongField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row var = st_contains(to_geoshape(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), sum(counterLongField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'row var = st_contains(to_geoshape(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), var0 = sum(counterLongField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('row var = st_contains(true, true)', [ - 'Argument of [st_contains] must be [cartesian_point], found value [true] type [boolean]', - 'Argument of [st_contains] must be [cartesian_point], found value [true] type [boolean]', - ]); + testErrorsAndWarnings('from a_index | stats var = sum(counterDoubleField)', []); + testErrorsAndWarnings('from a_index | stats sum(counterDoubleField)', []); + testErrorsAndWarnings('from a_index | stats var = round(sum(counterDoubleField))', []); + testErrorsAndWarnings('from a_index | stats round(sum(counterDoubleField))', []); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + 'from a_index | stats var = round(sum(counterDoubleField)) + sum(counterDoubleField)', [] ); - testErrorsAndWarnings('from a_index | eval st_contains(booleanField, booleanField)', [ - 'Argument of [st_contains] must be [cartesian_point], found value [booleanField] type [boolean]', - 'Argument of [st_contains] must be [cartesian_point], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings( - 'from a_index | eval var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', + 'from a_index | stats round(sum(counterDoubleField)) + sum(counterDoubleField)', [] ); + testErrorsAndWarnings('from a_index | stats var0 = sum(counterDoubleField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), sum(counterDoubleField)', []); + testErrorsAndWarnings( - 'from a_index | eval var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', + 'from a_index | stats avg(doubleField), var0 = sum(counterDoubleField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + 'from a_index | stats sum(counterDoubleField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(to_geopoint(geoPointField), to_geopoint(geoPointField))', + 'from a_index | stats var0 = sum(counterDoubleField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(to_geopoint(geoPointField), to_geoshape(geoPointField))', + 'from a_index | stats avg(doubleField), sum(counterDoubleField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(to_geoshape(geoPointField), to_geopoint(geoPointField))', + 'from a_index | stats avg(doubleField), var0 = sum(counterDoubleField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(to_geoshape(geoPointField), to_geoshape(geoPointField))', + 'from a_index | stats avg(doubleField), sum(counterDoubleField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | sort st_contains(cartesianPointField, cartesianPointField)', + 'from a_index | stats avg(doubleField), var0 = sum(counterDoubleField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('from a_index | eval st_contains(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval st_contains(nullVar, nullVar)', []); + + testErrorsAndWarnings('from a_index | sort sum(integerField)', [ + 'SORT does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(integerField)', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(integerField) > 0', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(counterIntegerField)', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(counterIntegerField) > 0', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(doubleField)', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(doubleField) > 0', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(unsignedLongField)', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(unsignedLongField) > 0', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(longField)', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(longField) > 0', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(counterLongField)', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(counterLongField) > 0', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(counterDoubleField)', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(counterDoubleField) > 0', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(integerField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(integerField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(integerField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(integerField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(counterIntegerField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(counterIntegerField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(counterIntegerField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(counterIntegerField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(doubleField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(doubleField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(doubleField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(doubleField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(unsignedLongField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(unsignedLongField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(unsignedLongField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(unsignedLongField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(longField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(longField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(longField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(longField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(counterLongField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(counterLongField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(counterLongField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(counterLongField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(counterDoubleField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(counterDoubleField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(counterDoubleField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(counterDoubleField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | stats sum(null)', []); + testErrorsAndWarnings('row nullVar = null | stats sum(nullVar)', []); }); - describe('st_disjoint', () => { + describe('median', () => { + testErrorsAndWarnings('from a_index | stats var = median(integerField)', []); + testErrorsAndWarnings('from a_index | stats median(integerField)', []); + testErrorsAndWarnings('from a_index | stats var = round(median(integerField))', []); + testErrorsAndWarnings('from a_index | stats round(median(integerField))', []); + testErrorsAndWarnings( - 'row var = st_disjoint(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats var = round(median(integerField)) + median(integerField)', [] ); testErrorsAndWarnings( - 'row st_disjoint(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats round(median(integerField)) + median(integerField)', [] ); - testErrorsAndWarnings('row var = st_disjoint(to_geopoint("a"), to_geopoint("a"))', []); - - testErrorsAndWarnings('row var = st_disjoint("a", "a")', [ - 'Argument of [st_disjoint] must be [cartesian_point], found value ["a"] type [string]', - 'Argument of [st_disjoint] must be [cartesian_point], found value ["a"] type [string]', - ]); + testErrorsAndWarnings('from a_index | stats median(doubleField / 2)', []); + testErrorsAndWarnings('from a_index | stats var0 = median(doubleField / 2)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), median(doubleField / 2)', []); testErrorsAndWarnings( - 'row var = st_disjoint(to_geopoint("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = median(doubleField / 2)', [] ); + testErrorsAndWarnings('from a_index | stats var0 = median(integerField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), median(integerField)', []); testErrorsAndWarnings( - 'row st_disjoint(to_geopoint("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = median(integerField)', [] ); - testErrorsAndWarnings( - 'row var = st_disjoint(to_geopoint("a"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats median(integerField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_disjoint(to_geoshape("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats var0 = median(integerField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row st_disjoint(to_geoshape("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), median(integerField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row var = st_disjoint(to_geoshape("POINT (30 10)"), to_geopoint("a"))', + 'from a_index | stats avg(doubleField), var0 = median(integerField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row var = st_disjoint(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), median(integerField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'row st_disjoint(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = median(integerField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings( - 'row var = st_disjoint(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', - [] - ); + testErrorsAndWarnings('from a_index | stats var = median(avg(integerField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + ]); - testErrorsAndWarnings( - 'row st_disjoint(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', - [] - ); + testErrorsAndWarnings('from a_index | stats median(avg(integerField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + ]); - testErrorsAndWarnings( - 'row var = st_disjoint(to_cartesianpoint("a"), to_cartesianpoint("a"))', - [] - ); + testErrorsAndWarnings('from a_index | stats median(booleanField)', [ + 'Argument of [median] must be [integer], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | stats var = median(*)', [ + 'Using wildcards (*) in median is not allowed', + ]); + + testErrorsAndWarnings('from a_index | stats var = median(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | stats median(counterIntegerField)', []); + testErrorsAndWarnings('from a_index | stats var = round(median(counterIntegerField))', []); + testErrorsAndWarnings('from a_index | stats round(median(counterIntegerField))', []); testErrorsAndWarnings( - 'row var = st_disjoint(to_cartesianpoint("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats var = round(median(counterIntegerField)) + median(counterIntegerField)', [] ); testErrorsAndWarnings( - 'row st_disjoint(to_cartesianpoint("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats round(median(counterIntegerField)) + median(counterIntegerField)', [] ); + testErrorsAndWarnings('from a_index | stats var0 = median(counterIntegerField)', []); testErrorsAndWarnings( - 'row var = st_disjoint(to_cartesianpoint("a"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), median(counterIntegerField)', [] ); testErrorsAndWarnings( - 'row var = st_disjoint(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = median(counterIntegerField)', [] ); testErrorsAndWarnings( - 'row st_disjoint(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats median(counterIntegerField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_disjoint(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("a"))', + 'from a_index | stats var0 = median(counterIntegerField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_disjoint(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), median(counterIntegerField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row st_disjoint(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = median(counterIntegerField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(geoPointField, geoPointField)', + 'from a_index | stats avg(doubleField), median(counterIntegerField) by round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('from a_index | eval st_disjoint(geoPointField, geoPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(to_geopoint(stringField), to_geopoint(stringField))', + 'from a_index | stats avg(doubleField), var0 = median(counterIntegerField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('from a_index | eval st_disjoint(stringField, stringField)', [ - 'Argument of [st_disjoint] must be [cartesian_point], found value [stringField] type [string]', - 'Argument of [st_disjoint] must be [cartesian_point], found value [stringField] type [string]', - ]); - - testErrorsAndWarnings( - 'from a_index | eval st_disjoint(geoPointField, geoPointField, extraArg)', - ['Error: [st_disjoint] function expects exactly 2 arguments, got 3.'] - ); + testErrorsAndWarnings('from a_index | stats var = median(doubleField)', []); + testErrorsAndWarnings('from a_index | stats median(doubleField)', []); + testErrorsAndWarnings('from a_index | stats var = round(median(doubleField))', []); + testErrorsAndWarnings('from a_index | stats round(median(doubleField))', []); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(geoPointField, geoShapeField)', + 'from a_index | stats var = round(median(doubleField)) + median(doubleField)', [] ); - testErrorsAndWarnings('from a_index | eval st_disjoint(geoPointField, geoShapeField)', []); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(to_geopoint(stringField), geoShapeField)', + 'from a_index | stats round(median(doubleField)) + median(doubleField)', [] ); + testErrorsAndWarnings('from a_index | stats var0 = median(doubleField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), median(doubleField)', []); testErrorsAndWarnings( - 'from a_index | eval st_disjoint(geoPointField, geoShapeField, extraArg)', - ['Error: [st_disjoint] function expects exactly 2 arguments, got 3.'] - ); - - testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(geoShapeField, geoPointField)', + 'from a_index | stats avg(doubleField), var0 = median(doubleField)', [] ); - testErrorsAndWarnings('from a_index | eval st_disjoint(geoShapeField, geoPointField)', []); - testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(geoShapeField, to_geopoint(stringField))', + 'from a_index | stats median(doubleField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_disjoint(geoShapeField, geoPointField, extraArg)', - ['Error: [st_disjoint] function expects exactly 2 arguments, got 3.'] - ); - - testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(geoShapeField, geoShapeField)', + 'from a_index | stats var0 = median(doubleField) by var1 = round(doubleField / 2)', [] ); - testErrorsAndWarnings('from a_index | eval st_disjoint(geoShapeField, geoShapeField)', []); testErrorsAndWarnings( - 'from a_index | eval st_disjoint(geoShapeField, geoShapeField, extraArg)', - ['Error: [st_disjoint] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), median(doubleField) by round(doubleField / 2), ipField', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(cartesianPointField, cartesianPointField)', + 'from a_index | stats avg(doubleField), var0 = median(doubleField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval st_disjoint(cartesianPointField, cartesianPointField)', + 'from a_index | stats avg(doubleField), median(doubleField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(to_cartesianpoint(stringField), to_cartesianpoint(stringField))', + 'from a_index | stats avg(doubleField), var0 = median(doubleField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings( - 'from a_index | eval st_disjoint(cartesianPointField, cartesianPointField, extraArg)', - ['Error: [st_disjoint] function expects exactly 2 arguments, got 3.'] - ); + testErrorsAndWarnings('from a_index | stats var = median(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | stats median(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | stats var = round(median(unsignedLongField))', []); + testErrorsAndWarnings('from a_index | stats round(median(unsignedLongField))', []); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(cartesianPointField, cartesianShapeField)', + 'from a_index | stats var = round(median(unsignedLongField)) + median(unsignedLongField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_disjoint(cartesianPointField, cartesianShapeField)', + 'from a_index | stats round(median(unsignedLongField)) + median(unsignedLongField)', [] ); + testErrorsAndWarnings('from a_index | stats var0 = median(unsignedLongField)', []); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(to_cartesianpoint(stringField), cartesianShapeField)', + 'from a_index | stats avg(doubleField), median(unsignedLongField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_disjoint(cartesianPointField, cartesianShapeField, extraArg)', - ['Error: [st_disjoint] function expects exactly 2 arguments, got 3.'] - ); - - testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(cartesianShapeField, cartesianPointField)', + 'from a_index | stats avg(doubleField), var0 = median(unsignedLongField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_disjoint(cartesianShapeField, cartesianPointField)', + 'from a_index | stats median(unsignedLongField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(cartesianShapeField, to_cartesianpoint(stringField))', + 'from a_index | stats var0 = median(unsignedLongField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_disjoint(cartesianShapeField, cartesianPointField, extraArg)', - ['Error: [st_disjoint] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), median(unsignedLongField) by round(doubleField / 2), ipField', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(cartesianShapeField, cartesianShapeField)', + 'from a_index | stats avg(doubleField), var0 = median(unsignedLongField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval st_disjoint(cartesianShapeField, cartesianShapeField)', + 'from a_index | stats avg(doubleField), median(unsignedLongField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval st_disjoint(cartesianShapeField, cartesianShapeField, extraArg)', - ['Error: [st_disjoint] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), var0 = median(unsignedLongField) by var1 = round(doubleField / 2), doubleField / 2', + [] ); - testErrorsAndWarnings('from a_index | sort st_disjoint(geoPointField, geoPointField)', []); + testErrorsAndWarnings('from a_index | stats var = median(longField)', []); + testErrorsAndWarnings('from a_index | stats median(longField)', []); + testErrorsAndWarnings('from a_index | stats var = round(median(longField))', []); + testErrorsAndWarnings('from a_index | stats round(median(longField))', []); testErrorsAndWarnings( - 'row var = st_disjoint(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats var = round(median(longField)) + median(longField)', [] ); testErrorsAndWarnings( - 'row var = st_disjoint(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats round(median(longField)) + median(longField)', [] ); - + testErrorsAndWarnings('from a_index | stats var0 = median(longField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), median(longField)', []); testErrorsAndWarnings( - 'row var = st_disjoint(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), var0 = median(longField)', [] ); - testErrorsAndWarnings( - 'row var = st_disjoint(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats median(longField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_disjoint(to_geopoint(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', + 'from a_index | stats var0 = median(longField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_disjoint(to_geopoint(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), median(longField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row var = st_disjoint(to_geoshape(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), var0 = median(longField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row var = st_disjoint(to_geoshape(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), median(longField) by round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('row var = st_disjoint(true, true)', [ - 'Argument of [st_disjoint] must be [cartesian_point], found value [true] type [boolean]', - 'Argument of [st_disjoint] must be [cartesian_point], found value [true] type [boolean]', - ]); - testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + 'from a_index | stats avg(doubleField), var0 = median(longField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('from a_index | eval st_disjoint(booleanField, booleanField)', [ - 'Argument of [st_disjoint] must be [cartesian_point], found value [booleanField] type [boolean]', - 'Argument of [st_disjoint] must be [cartesian_point], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings('from a_index | stats var = median(counterLongField)', []); + testErrorsAndWarnings('from a_index | stats median(counterLongField)', []); + testErrorsAndWarnings('from a_index | stats var = round(median(counterLongField))', []); + testErrorsAndWarnings('from a_index | stats round(median(counterLongField))', []); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', + 'from a_index | stats var = round(median(counterLongField)) + median(counterLongField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', + 'from a_index | stats round(median(counterLongField)) + median(counterLongField)', [] ); + testErrorsAndWarnings('from a_index | stats var0 = median(counterLongField)', []); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + 'from a_index | stats avg(doubleField), median(counterLongField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(to_geopoint(geoPointField), to_geopoint(geoPointField))', + 'from a_index | stats avg(doubleField), var0 = median(counterLongField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(to_geopoint(geoPointField), to_geoshape(geoPointField))', + 'from a_index | stats median(counterLongField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(to_geoshape(geoPointField), to_geopoint(geoPointField))', + 'from a_index | stats var0 = median(counterLongField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_disjoint(to_geoshape(geoPointField), to_geoshape(geoPointField))', + 'from a_index | stats avg(doubleField), median(counterLongField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | sort st_disjoint(cartesianPointField, cartesianPointField)', + 'from a_index | stats avg(doubleField), var0 = median(counterLongField) by var1 = round(doubleField / 2), ipField', [] ); - testErrorsAndWarnings('from a_index | eval st_disjoint(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval st_disjoint(nullVar, nullVar)', []); - }); - describe('st_intersects', () => { testErrorsAndWarnings( - 'row var = st_intersects(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), median(counterLongField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'row st_intersects(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = median(counterLongField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('row var = st_intersects(to_geopoint("a"), to_geopoint("a"))', []); - - testErrorsAndWarnings('row var = st_intersects("a", "a")', [ - 'Argument of [st_intersects] must be [cartesian_point], found value ["a"] type [string]', - 'Argument of [st_intersects] must be [cartesian_point], found value ["a"] type [string]', - ]); + testErrorsAndWarnings('from a_index | stats var = median(counterDoubleField)', []); + testErrorsAndWarnings('from a_index | stats median(counterDoubleField)', []); + testErrorsAndWarnings('from a_index | stats var = round(median(counterDoubleField))', []); + testErrorsAndWarnings('from a_index | stats round(median(counterDoubleField))', []); testErrorsAndWarnings( - 'row var = st_intersects(to_geopoint("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats var = round(median(counterDoubleField)) + median(counterDoubleField)', [] ); testErrorsAndWarnings( - 'row st_intersects(to_geopoint("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats round(median(counterDoubleField)) + median(counterDoubleField)', [] ); + testErrorsAndWarnings('from a_index | stats var0 = median(counterDoubleField)', []); testErrorsAndWarnings( - 'row var = st_intersects(to_geopoint("a"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), median(counterDoubleField)', [] ); testErrorsAndWarnings( - 'row var = st_intersects(to_geoshape("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = median(counterDoubleField)', [] ); testErrorsAndWarnings( - 'row st_intersects(to_geoshape("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats median(counterDoubleField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_intersects(to_geoshape("POINT (30 10)"), to_geopoint("a"))', + 'from a_index | stats var0 = median(counterDoubleField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_intersects(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), median(counterDoubleField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row st_intersects(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = median(counterDoubleField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row var = st_intersects(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), median(counterDoubleField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'row st_intersects(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = median(counterDoubleField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings( - 'row var = st_intersects(to_cartesianpoint("a"), to_cartesianpoint("a"))', - [] - ); + testErrorsAndWarnings('from a_index | sort median(integerField)', [ + 'SORT does not support function median', + ]); - testErrorsAndWarnings( - 'row var = st_intersects(to_cartesianpoint("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', - [] - ); + testErrorsAndWarnings('from a_index | where median(integerField)', [ + 'WHERE does not support function median', + ]); - testErrorsAndWarnings( - 'row st_intersects(to_cartesianpoint("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', - [] - ); + testErrorsAndWarnings('from a_index | where median(integerField) > 0', [ + 'WHERE does not support function median', + ]); - testErrorsAndWarnings( - 'row var = st_intersects(to_cartesianpoint("a"), to_cartesianshape("POINT (30 10)"))', - [] - ); + testErrorsAndWarnings('from a_index | where median(counterIntegerField)', [ + 'WHERE does not support function median', + ]); - testErrorsAndWarnings( - 'row var = st_intersects(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', - [] - ); + testErrorsAndWarnings('from a_index | where median(counterIntegerField) > 0', [ + 'WHERE does not support function median', + ]); + + testErrorsAndWarnings('from a_index | where median(doubleField)', [ + 'WHERE does not support function median', + ]); + + testErrorsAndWarnings('from a_index | where median(doubleField) > 0', [ + 'WHERE does not support function median', + ]); + + testErrorsAndWarnings('from a_index | where median(unsignedLongField)', [ + 'WHERE does not support function median', + ]); + + testErrorsAndWarnings('from a_index | where median(unsignedLongField) > 0', [ + 'WHERE does not support function median', + ]); + + testErrorsAndWarnings('from a_index | where median(longField)', [ + 'WHERE does not support function median', + ]); + + testErrorsAndWarnings('from a_index | where median(longField) > 0', [ + 'WHERE does not support function median', + ]); + + testErrorsAndWarnings('from a_index | where median(counterLongField)', [ + 'WHERE does not support function median', + ]); + + testErrorsAndWarnings('from a_index | where median(counterLongField) > 0', [ + 'WHERE does not support function median', + ]); + + testErrorsAndWarnings('from a_index | where median(counterDoubleField)', [ + 'WHERE does not support function median', + ]); + + testErrorsAndWarnings('from a_index | where median(counterDoubleField) > 0', [ + 'WHERE does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(integerField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(integerField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(integerField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(integerField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(counterIntegerField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(counterIntegerField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(counterIntegerField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(counterIntegerField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(doubleField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(doubleField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(doubleField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(doubleField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(unsignedLongField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(unsignedLongField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(unsignedLongField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(unsignedLongField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(longField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(longField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(longField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(longField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(counterLongField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(counterLongField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(counterLongField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(counterLongField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(counterDoubleField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(counterDoubleField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(counterDoubleField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(counterDoubleField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | stats median(null)', []); + testErrorsAndWarnings('row nullVar = null | stats median(nullVar)', []); + }); + describe('median_absolute_deviation', () => { testErrorsAndWarnings( - 'row st_intersects(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats var = median_absolute_deviation(integerField)', [] ); + testErrorsAndWarnings('from a_index | stats median_absolute_deviation(integerField)', []); testErrorsAndWarnings( - 'row var = st_intersects(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("a"))', + 'from a_index | stats var = round(median_absolute_deviation(integerField))', [] ); testErrorsAndWarnings( - 'row var = st_intersects(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats round(median_absolute_deviation(integerField))', [] ); testErrorsAndWarnings( - 'row st_intersects(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats var = round(median_absolute_deviation(integerField)) + median_absolute_deviation(integerField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(geoPointField, geoPointField)', + 'from a_index | stats round(median_absolute_deviation(integerField)) + median_absolute_deviation(integerField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(geoPointField, geoPointField)', + 'from a_index | stats median_absolute_deviation(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(to_geopoint(stringField), to_geopoint(stringField))', + 'from a_index | stats var0 = median_absolute_deviation(doubleField / 2)', [] ); - testErrorsAndWarnings('from a_index | eval st_intersects(stringField, stringField)', [ - 'Argument of [st_intersects] must be [cartesian_point], found value [stringField] type [string]', - 'Argument of [st_intersects] must be [cartesian_point], found value [stringField] type [string]', - ]); - testErrorsAndWarnings( - 'from a_index | eval st_intersects(geoPointField, geoPointField, extraArg)', - ['Error: [st_intersects] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), median_absolute_deviation(doubleField / 2)', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(geoPointField, geoShapeField)', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(geoPointField, geoShapeField)', + 'from a_index | stats var0 = median_absolute_deviation(integerField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(to_geopoint(stringField), geoShapeField)', + 'from a_index | stats avg(doubleField), median_absolute_deviation(integerField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(geoPointField, geoShapeField, extraArg)', - ['Error: [st_intersects] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(integerField)', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(geoShapeField, geoPointField)', + 'from a_index | stats median_absolute_deviation(integerField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(geoShapeField, geoPointField)', + 'from a_index | stats var0 = median_absolute_deviation(integerField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(geoShapeField, to_geopoint(stringField))', + 'from a_index | stats avg(doubleField), median_absolute_deviation(integerField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(geoShapeField, geoPointField, extraArg)', - ['Error: [st_intersects] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(integerField) by var1 = round(doubleField / 2), ipField', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(geoShapeField, geoShapeField)', + 'from a_index | stats avg(doubleField), median_absolute_deviation(integerField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(geoShapeField, geoShapeField)', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(integerField) by var1 = round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(geoShapeField, geoShapeField, extraArg)', - ['Error: [st_intersects] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats var = median_absolute_deviation(avg(integerField))', + [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + ] ); + testErrorsAndWarnings('from a_index | stats median_absolute_deviation(avg(integerField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + ]); + + testErrorsAndWarnings('from a_index | stats median_absolute_deviation(booleanField)', [ + 'Argument of [median_absolute_deviation] must be [integer], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | stats var = median_absolute_deviation(*)', [ + 'Using wildcards (*) in median_absolute_deviation is not allowed', + ]); + testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(cartesianPointField, cartesianPointField)', + 'from a_index | stats var = median_absolute_deviation(counterIntegerField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(cartesianPointField, cartesianPointField)', + 'from a_index | stats median_absolute_deviation(counterIntegerField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(to_cartesianpoint(stringField), to_cartesianpoint(stringField))', + 'from a_index | stats var = round(median_absolute_deviation(counterIntegerField))', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(cartesianPointField, cartesianPointField, extraArg)', - ['Error: [st_intersects] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats round(median_absolute_deviation(counterIntegerField))', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(cartesianPointField, cartesianShapeField)', + 'from a_index | stats var = round(median_absolute_deviation(counterIntegerField)) + median_absolute_deviation(counterIntegerField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(cartesianPointField, cartesianShapeField)', + 'from a_index | stats round(median_absolute_deviation(counterIntegerField)) + median_absolute_deviation(counterIntegerField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(to_cartesianpoint(stringField), cartesianShapeField)', + 'from a_index | stats var0 = median_absolute_deviation(counterIntegerField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(cartesianPointField, cartesianShapeField, extraArg)', - ['Error: [st_intersects] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), median_absolute_deviation(counterIntegerField)', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(cartesianShapeField, cartesianPointField)', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterIntegerField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(cartesianShapeField, cartesianPointField)', + 'from a_index | stats median_absolute_deviation(counterIntegerField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(cartesianShapeField, to_cartesianpoint(stringField))', + 'from a_index | stats var0 = median_absolute_deviation(counterIntegerField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(cartesianShapeField, cartesianPointField, extraArg)', - ['Error: [st_intersects] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), median_absolute_deviation(counterIntegerField) by round(doubleField / 2), ipField', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(cartesianShapeField, cartesianShapeField)', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterIntegerField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(cartesianShapeField, cartesianShapeField)', + 'from a_index | stats avg(doubleField), median_absolute_deviation(counterIntegerField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval st_intersects(cartesianShapeField, cartesianShapeField, extraArg)', - ['Error: [st_intersects] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterIntegerField) by var1 = round(doubleField / 2), doubleField / 2', + [] ); testErrorsAndWarnings( - 'from a_index | sort st_intersects(geoPointField, geoPointField)', + 'from a_index | stats var = median_absolute_deviation(doubleField)', [] ); + testErrorsAndWarnings('from a_index | stats median_absolute_deviation(doubleField)', []); testErrorsAndWarnings( - 'row var = st_intersects(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats var = round(median_absolute_deviation(doubleField))', [] ); testErrorsAndWarnings( - 'row var = st_intersects(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats round(median_absolute_deviation(doubleField))', [] ); testErrorsAndWarnings( - 'row var = st_intersects(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats var = round(median_absolute_deviation(doubleField)) + median_absolute_deviation(doubleField)', [] ); testErrorsAndWarnings( - 'row var = st_intersects(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats round(median_absolute_deviation(doubleField)) + median_absolute_deviation(doubleField)', [] ); testErrorsAndWarnings( - 'row var = st_intersects(to_geopoint(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', + 'from a_index | stats var0 = median_absolute_deviation(doubleField)', [] ); testErrorsAndWarnings( - 'row var = st_intersects(to_geopoint(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), median_absolute_deviation(doubleField)', [] ); testErrorsAndWarnings( - 'row var = st_intersects(to_geoshape(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(doubleField)', [] ); testErrorsAndWarnings( - 'row var = st_intersects(to_geoshape(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', + 'from a_index | stats median_absolute_deviation(doubleField) by round(doubleField / 2)', [] ); - testErrorsAndWarnings('row var = st_intersects(true, true)', [ - 'Argument of [st_intersects] must be [cartesian_point], found value [true] type [boolean]', - 'Argument of [st_intersects] must be [cartesian_point], found value [true] type [boolean]', - ]); - testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + 'from a_index | stats var0 = median_absolute_deviation(doubleField) by var1 = round(doubleField / 2)', [] ); - testErrorsAndWarnings('from a_index | eval st_intersects(booleanField, booleanField)', [ - 'Argument of [st_intersects] must be [cartesian_point], found value [booleanField] type [boolean]', - 'Argument of [st_intersects] must be [cartesian_point], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', + 'from a_index | stats avg(doubleField), median_absolute_deviation(doubleField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(doubleField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + 'from a_index | stats avg(doubleField), median_absolute_deviation(doubleField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(to_geopoint(geoPointField), to_geopoint(geoPointField))', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(doubleField) by var1 = round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(to_geopoint(geoPointField), to_geoshape(geoPointField))', + 'from a_index | stats var = median_absolute_deviation(unsignedLongField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(to_geoshape(geoPointField), to_geopoint(geoPointField))', + 'from a_index | stats median_absolute_deviation(unsignedLongField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_intersects(to_geoshape(geoPointField), to_geoshape(geoPointField))', + 'from a_index | stats var = round(median_absolute_deviation(unsignedLongField))', [] ); testErrorsAndWarnings( - 'from a_index | sort st_intersects(cartesianPointField, cartesianPointField)', + 'from a_index | stats round(median_absolute_deviation(unsignedLongField))', [] ); - testErrorsAndWarnings('from a_index | eval st_intersects(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval st_intersects(nullVar, nullVar)', []); - }); - describe('st_within', () => { testErrorsAndWarnings( - 'row var = st_within(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats var = round(median_absolute_deviation(unsignedLongField)) + median_absolute_deviation(unsignedLongField)', [] ); testErrorsAndWarnings( - 'row st_within(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats round(median_absolute_deviation(unsignedLongField)) + median_absolute_deviation(unsignedLongField)', [] ); - testErrorsAndWarnings('row var = st_within(to_geopoint("a"), to_geopoint("a"))', []); - - testErrorsAndWarnings('row var = st_within("a", "a")', [ - 'Argument of [st_within] must be [cartesian_point], found value ["a"] type [string]', - 'Argument of [st_within] must be [cartesian_point], found value ["a"] type [string]', - ]); - testErrorsAndWarnings( - 'row var = st_within(to_geopoint("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats var0 = median_absolute_deviation(unsignedLongField)', [] ); testErrorsAndWarnings( - 'row st_within(to_geopoint("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), median_absolute_deviation(unsignedLongField)', [] ); testErrorsAndWarnings( - 'row var = st_within(to_geopoint("a"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(unsignedLongField)', [] ); testErrorsAndWarnings( - 'row var = st_within(to_geoshape("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats median_absolute_deviation(unsignedLongField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row st_within(to_geoshape("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + 'from a_index | stats var0 = median_absolute_deviation(unsignedLongField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_within(to_geoshape("POINT (30 10)"), to_geopoint("a"))', + 'from a_index | stats avg(doubleField), median_absolute_deviation(unsignedLongField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row var = st_within(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(unsignedLongField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row st_within(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), median_absolute_deviation(unsignedLongField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'row var = st_within(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(unsignedLongField) by var1 = round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'row st_within(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats var = median_absolute_deviation(longField)', [] ); + testErrorsAndWarnings('from a_index | stats median_absolute_deviation(longField)', []); testErrorsAndWarnings( - 'row var = st_within(to_cartesianpoint("a"), to_cartesianpoint("a"))', + 'from a_index | stats var = round(median_absolute_deviation(longField))', [] ); testErrorsAndWarnings( - 'row var = st_within(to_cartesianpoint("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats round(median_absolute_deviation(longField))', [] ); testErrorsAndWarnings( - 'row st_within(to_cartesianpoint("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats var = round(median_absolute_deviation(longField)) + median_absolute_deviation(longField)', [] ); testErrorsAndWarnings( - 'row var = st_within(to_cartesianpoint("a"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats round(median_absolute_deviation(longField)) + median_absolute_deviation(longField)', [] ); testErrorsAndWarnings( - 'row var = st_within(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats var0 = median_absolute_deviation(longField)', [] ); testErrorsAndWarnings( - 'row st_within(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), median_absolute_deviation(longField)', [] ); testErrorsAndWarnings( - 'row var = st_within(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("a"))', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(longField)', [] ); testErrorsAndWarnings( - 'row var = st_within(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats median_absolute_deviation(longField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row st_within(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats var0 = median_absolute_deviation(longField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(geoPointField, geoPointField)', + 'from a_index | stats avg(doubleField), median_absolute_deviation(longField) by round(doubleField / 2), ipField', [] ); - testErrorsAndWarnings('from a_index | eval st_within(geoPointField, geoPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = st_within(to_geopoint(stringField), to_geopoint(stringField))', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(longField) by var1 = round(doubleField / 2), ipField', [] ); - testErrorsAndWarnings('from a_index | eval st_within(stringField, stringField)', [ - 'Argument of [st_within] must be [cartesian_point], found value [stringField] type [string]', - 'Argument of [st_within] must be [cartesian_point], found value [stringField] type [string]', - ]); - testErrorsAndWarnings( - 'from a_index | eval st_within(geoPointField, geoPointField, extraArg)', - ['Error: [st_within] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), median_absolute_deviation(longField) by round(doubleField / 2), doubleField / 2', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(geoPointField, geoShapeField)', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(longField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('from a_index | eval st_within(geoPointField, geoShapeField)', []); testErrorsAndWarnings( - 'from a_index | eval var = st_within(to_geopoint(stringField), geoShapeField)', + 'from a_index | stats var = median_absolute_deviation(counterLongField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(geoPointField, geoShapeField, extraArg)', - ['Error: [st_within] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats median_absolute_deviation(counterLongField)', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(geoShapeField, geoPointField)', + 'from a_index | stats var = round(median_absolute_deviation(counterLongField))', [] ); - testErrorsAndWarnings('from a_index | eval st_within(geoShapeField, geoPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = st_within(geoShapeField, to_geopoint(stringField))', + 'from a_index | stats round(median_absolute_deviation(counterLongField))', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(geoShapeField, geoPointField, extraArg)', - ['Error: [st_within] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats var = round(median_absolute_deviation(counterLongField)) + median_absolute_deviation(counterLongField)', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(geoShapeField, geoShapeField)', + 'from a_index | stats round(median_absolute_deviation(counterLongField)) + median_absolute_deviation(counterLongField)', [] ); - testErrorsAndWarnings('from a_index | eval st_within(geoShapeField, geoShapeField)', []); testErrorsAndWarnings( - 'from a_index | eval st_within(geoShapeField, geoShapeField, extraArg)', - ['Error: [st_within] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats var0 = median_absolute_deviation(counterLongField)', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(cartesianPointField, cartesianPointField)', + 'from a_index | stats avg(doubleField), median_absolute_deviation(counterLongField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(cartesianPointField, cartesianPointField)', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterLongField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(to_cartesianpoint(stringField), to_cartesianpoint(stringField))', + 'from a_index | stats median_absolute_deviation(counterLongField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(cartesianPointField, cartesianPointField, extraArg)', - ['Error: [st_within] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats var0 = median_absolute_deviation(counterLongField) by var1 = round(doubleField / 2)', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(cartesianPointField, cartesianShapeField)', + 'from a_index | stats avg(doubleField), median_absolute_deviation(counterLongField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(cartesianPointField, cartesianShapeField)', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterLongField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(to_cartesianpoint(stringField), cartesianShapeField)', + 'from a_index | stats avg(doubleField), median_absolute_deviation(counterLongField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(cartesianPointField, cartesianShapeField, extraArg)', - ['Error: [st_within] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterLongField) by var1 = round(doubleField / 2), doubleField / 2', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(cartesianShapeField, cartesianPointField)', + 'from a_index | stats var = median_absolute_deviation(counterDoubleField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(cartesianShapeField, cartesianPointField)', + 'from a_index | stats median_absolute_deviation(counterDoubleField)', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(cartesianShapeField, to_cartesianpoint(stringField))', + 'from a_index | stats var = round(median_absolute_deviation(counterDoubleField))', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(cartesianShapeField, cartesianPointField, extraArg)', - ['Error: [st_within] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats round(median_absolute_deviation(counterDoubleField))', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(cartesianShapeField, cartesianShapeField)', + 'from a_index | stats var = round(median_absolute_deviation(counterDoubleField)) + median_absolute_deviation(counterDoubleField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(cartesianShapeField, cartesianShapeField)', + 'from a_index | stats round(median_absolute_deviation(counterDoubleField)) + median_absolute_deviation(counterDoubleField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(cartesianShapeField, cartesianShapeField, extraArg)', - ['Error: [st_within] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats var0 = median_absolute_deviation(counterDoubleField)', + [] ); - testErrorsAndWarnings('from a_index | sort st_within(geoPointField, geoPointField)', []); - testErrorsAndWarnings( - 'row var = st_within(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), median_absolute_deviation(counterDoubleField)', [] ); testErrorsAndWarnings( - 'row var = st_within(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterDoubleField)', [] ); testErrorsAndWarnings( - 'row var = st_within(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats median_absolute_deviation(counterDoubleField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_within(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats var0 = median_absolute_deviation(counterDoubleField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = st_within(to_geopoint(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), median_absolute_deviation(counterDoubleField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row var = st_within(to_geopoint(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterDoubleField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'row var = st_within(to_geoshape(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), median_absolute_deviation(counterDoubleField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'row var = st_within(to_geoshape(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterDoubleField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('row var = st_within(true, true)', [ - 'Argument of [st_within] must be [cartesian_point], found value [true] type [boolean]', - 'Argument of [st_within] must be [cartesian_point], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | sort median_absolute_deviation(integerField)', [ + 'SORT does not support function median_absolute_deviation', + ]); + + testErrorsAndWarnings('from a_index | where median_absolute_deviation(integerField)', [ + 'WHERE does not support function median_absolute_deviation', + ]); + + testErrorsAndWarnings('from a_index | where median_absolute_deviation(integerField) > 0', [ + 'WHERE does not support function median_absolute_deviation', ]); testErrorsAndWarnings( - 'from a_index | eval var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', - [] + 'from a_index | where median_absolute_deviation(counterIntegerField)', + ['WHERE does not support function median_absolute_deviation'] ); - testErrorsAndWarnings('from a_index | eval st_within(booleanField, booleanField)', [ - 'Argument of [st_within] must be [cartesian_point], found value [booleanField] type [boolean]', - 'Argument of [st_within] must be [cartesian_point], found value [booleanField] type [boolean]', + testErrorsAndWarnings( + 'from a_index | where median_absolute_deviation(counterIntegerField) > 0', + ['WHERE does not support function median_absolute_deviation'] + ); + + testErrorsAndWarnings('from a_index | where median_absolute_deviation(doubleField)', [ + 'WHERE does not support function median_absolute_deviation', + ]); + + testErrorsAndWarnings('from a_index | where median_absolute_deviation(doubleField) > 0', [ + 'WHERE does not support function median_absolute_deviation', + ]); + + testErrorsAndWarnings('from a_index | where median_absolute_deviation(unsignedLongField)', [ + 'WHERE does not support function median_absolute_deviation', ]); testErrorsAndWarnings( - 'from a_index | eval var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', - [] + 'from a_index | where median_absolute_deviation(unsignedLongField) > 0', + ['WHERE does not support function median_absolute_deviation'] ); + testErrorsAndWarnings('from a_index | where median_absolute_deviation(longField)', [ + 'WHERE does not support function median_absolute_deviation', + ]); + + testErrorsAndWarnings('from a_index | where median_absolute_deviation(longField) > 0', [ + 'WHERE does not support function median_absolute_deviation', + ]); + + testErrorsAndWarnings('from a_index | where median_absolute_deviation(counterLongField)', [ + 'WHERE does not support function median_absolute_deviation', + ]); + testErrorsAndWarnings( - 'from a_index | eval var = st_within(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', - [] + 'from a_index | where median_absolute_deviation(counterLongField) > 0', + ['WHERE does not support function median_absolute_deviation'] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', - [] + 'from a_index | where median_absolute_deviation(counterDoubleField)', + ['WHERE does not support function median_absolute_deviation'] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(to_geopoint(geoPointField), to_geopoint(geoPointField))', - [] + 'from a_index | where median_absolute_deviation(counterDoubleField) > 0', + ['WHERE does not support function median_absolute_deviation'] ); + testErrorsAndWarnings('from a_index | eval var = median_absolute_deviation(integerField)', [ + 'EVAL does not support function median_absolute_deviation', + ]); + testErrorsAndWarnings( - 'from a_index | eval var = st_within(to_geopoint(geoPointField), to_geoshape(geoPointField))', - [] + 'from a_index | eval var = median_absolute_deviation(integerField) > 0', + ['EVAL does not support function median_absolute_deviation'] ); + testErrorsAndWarnings('from a_index | eval median_absolute_deviation(integerField)', [ + 'EVAL does not support function median_absolute_deviation', + ]); + + testErrorsAndWarnings('from a_index | eval median_absolute_deviation(integerField) > 0', [ + 'EVAL does not support function median_absolute_deviation', + ]); + testErrorsAndWarnings( - 'from a_index | eval var = st_within(to_geoshape(geoPointField), to_geopoint(geoPointField))', - [] + 'from a_index | eval var = median_absolute_deviation(counterIntegerField)', + ['EVAL does not support function median_absolute_deviation'] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(to_geoshape(geoPointField), to_geoshape(geoPointField))', - [] + 'from a_index | eval var = median_absolute_deviation(counterIntegerField) > 0', + ['EVAL does not support function median_absolute_deviation'] ); testErrorsAndWarnings( - 'from a_index | sort st_within(cartesianPointField, cartesianPointField)', - [] + 'from a_index | eval median_absolute_deviation(counterIntegerField)', + ['EVAL does not support function median_absolute_deviation'] ); - testErrorsAndWarnings('from a_index | eval st_within(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval st_within(nullVar, nullVar)', []); - }); - describe('st_x', () => { - testErrorsAndWarnings('row var = st_x(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row st_x(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = st_x(to_geopoint("a"))', []); + testErrorsAndWarnings( + 'from a_index | eval median_absolute_deviation(counterIntegerField) > 0', + ['EVAL does not support function median_absolute_deviation'] + ); - testErrorsAndWarnings('row var = st_x("a")', [ - 'Argument of [st_x] must be [cartesian_point], found value ["a"] type [string]', + testErrorsAndWarnings('from a_index | eval var = median_absolute_deviation(doubleField)', [ + 'EVAL does not support function median_absolute_deviation', ]); - testErrorsAndWarnings('row var = st_x(to_cartesianpoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row st_x(to_cartesianpoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = st_x(to_cartesianpoint("a"))', []); - testErrorsAndWarnings('from a_index | eval var = st_x(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval st_x(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval var = st_x(to_geopoint(stringField))', []); + testErrorsAndWarnings( + 'from a_index | eval var = median_absolute_deviation(doubleField) > 0', + ['EVAL does not support function median_absolute_deviation'] + ); - testErrorsAndWarnings('from a_index | eval st_x(stringField)', [ - 'Argument of [st_x] must be [cartesian_point], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | eval median_absolute_deviation(doubleField)', [ + 'EVAL does not support function median_absolute_deviation', ]); - testErrorsAndWarnings('from a_index | eval st_x(geoPointField, extraArg)', [ - 'Error: [st_x] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval median_absolute_deviation(doubleField) > 0', [ + 'EVAL does not support function median_absolute_deviation', ]); - testErrorsAndWarnings('from a_index | eval var = st_x(*)', [ - 'Using wildcards (*) in st_x is not allowed', - ]); + testErrorsAndWarnings( + 'from a_index | eval var = median_absolute_deviation(unsignedLongField)', + ['EVAL does not support function median_absolute_deviation'] + ); - testErrorsAndWarnings('from a_index | eval var = st_x(cartesianPointField)', []); - testErrorsAndWarnings('from a_index | eval st_x(cartesianPointField)', []); - testErrorsAndWarnings('from a_index | eval var = st_x(to_cartesianpoint(stringField))', []); + testErrorsAndWarnings( + 'from a_index | eval var = median_absolute_deviation(unsignedLongField) > 0', + ['EVAL does not support function median_absolute_deviation'] + ); - testErrorsAndWarnings('from a_index | eval st_x(cartesianPointField, extraArg)', [ - 'Error: [st_x] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval median_absolute_deviation(unsignedLongField)', [ + 'EVAL does not support function median_absolute_deviation', ]); - testErrorsAndWarnings('from a_index | sort st_x(geoPointField)', []); - testErrorsAndWarnings( - 'row var = st_x(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', - [] + 'from a_index | eval median_absolute_deviation(unsignedLongField) > 0', + ['EVAL does not support function median_absolute_deviation'] ); - testErrorsAndWarnings('row var = st_x(to_geopoint(to_geopoint("POINT (30 10)")))', []); - - testErrorsAndWarnings('row var = st_x(true)', [ - 'Argument of [st_x] must be [cartesian_point], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | eval var = median_absolute_deviation(longField)', [ + 'EVAL does not support function median_absolute_deviation', ]); testErrorsAndWarnings( - 'from a_index | eval var = st_x(to_cartesianpoint(cartesianPointField))', - [] + 'from a_index | eval var = median_absolute_deviation(longField) > 0', + ['EVAL does not support function median_absolute_deviation'] ); - testErrorsAndWarnings('from a_index | eval st_x(booleanField)', [ - 'Argument of [st_x] must be [cartesian_point], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval median_absolute_deviation(longField)', [ + 'EVAL does not support function median_absolute_deviation', ]); - testErrorsAndWarnings('from a_index | eval var = st_x(to_geopoint(geoPointField))', []); - testErrorsAndWarnings('from a_index | sort st_x(cartesianPointField)', []); - testErrorsAndWarnings('from a_index | eval st_x(null)', []); - testErrorsAndWarnings('row nullVar = null | eval st_x(nullVar)', []); - }); - - describe('st_y', () => { - testErrorsAndWarnings('row var = st_y(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row st_y(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = st_y(to_geopoint("a"))', []); - - testErrorsAndWarnings('row var = st_y("a")', [ - 'Argument of [st_y] must be [cartesian_point], found value ["a"] type [string]', + testErrorsAndWarnings('from a_index | eval median_absolute_deviation(longField) > 0', [ + 'EVAL does not support function median_absolute_deviation', ]); - testErrorsAndWarnings('row var = st_y(to_cartesianpoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row st_y(to_cartesianpoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = st_y(to_cartesianpoint("a"))', []); - testErrorsAndWarnings('from a_index | eval var = st_y(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval st_y(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval var = st_y(to_geopoint(stringField))', []); + testErrorsAndWarnings( + 'from a_index | eval var = median_absolute_deviation(counterLongField)', + ['EVAL does not support function median_absolute_deviation'] + ); - testErrorsAndWarnings('from a_index | eval st_y(stringField)', [ - 'Argument of [st_y] must be [cartesian_point], found value [stringField] type [string]', - ]); + testErrorsAndWarnings( + 'from a_index | eval var = median_absolute_deviation(counterLongField) > 0', + ['EVAL does not support function median_absolute_deviation'] + ); - testErrorsAndWarnings('from a_index | eval st_y(geoPointField, extraArg)', [ - 'Error: [st_y] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval median_absolute_deviation(counterLongField)', [ + 'EVAL does not support function median_absolute_deviation', ]); - testErrorsAndWarnings('from a_index | eval var = st_y(*)', [ - 'Using wildcards (*) in st_y is not allowed', - ]); + testErrorsAndWarnings( + 'from a_index | eval median_absolute_deviation(counterLongField) > 0', + ['EVAL does not support function median_absolute_deviation'] + ); - testErrorsAndWarnings('from a_index | eval var = st_y(cartesianPointField)', []); - testErrorsAndWarnings('from a_index | eval st_y(cartesianPointField)', []); - testErrorsAndWarnings('from a_index | eval var = st_y(to_cartesianpoint(stringField))', []); + testErrorsAndWarnings( + 'from a_index | eval var = median_absolute_deviation(counterDoubleField)', + ['EVAL does not support function median_absolute_deviation'] + ); - testErrorsAndWarnings('from a_index | eval st_y(cartesianPointField, extraArg)', [ - 'Error: [st_y] function expects exactly one argument, got 2.', + testErrorsAndWarnings( + 'from a_index | eval var = median_absolute_deviation(counterDoubleField) > 0', + ['EVAL does not support function median_absolute_deviation'] + ); + + testErrorsAndWarnings('from a_index | eval median_absolute_deviation(counterDoubleField)', [ + 'EVAL does not support function median_absolute_deviation', ]); - testErrorsAndWarnings('from a_index | sort st_y(geoPointField)', []); + testErrorsAndWarnings( + 'from a_index | eval median_absolute_deviation(counterDoubleField) > 0', + ['EVAL does not support function median_absolute_deviation'] + ); + + testErrorsAndWarnings('from a_index | stats median_absolute_deviation(null)', []); + testErrorsAndWarnings('row nullVar = null | stats median_absolute_deviation(nullVar)', []); + }); + describe('max', () => { + testErrorsAndWarnings('from a_index | stats var = max(doubleField)', []); + testErrorsAndWarnings('from a_index | stats max(doubleField)', []); + testErrorsAndWarnings('from a_index | stats var = round(max(doubleField))', []); + testErrorsAndWarnings('from a_index | stats round(max(doubleField))', []); testErrorsAndWarnings( - 'row var = st_y(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats var = round(max(doubleField)) + max(doubleField)', [] ); - testErrorsAndWarnings('row var = st_y(to_geopoint(to_geopoint("POINT (30 10)")))', []); - - testErrorsAndWarnings('row var = st_y(true)', [ - 'Argument of [st_y] must be [cartesian_point], found value [true] type [boolean]', - ]); - testErrorsAndWarnings( - 'from a_index | eval var = st_y(to_cartesianpoint(cartesianPointField))', + 'from a_index | stats round(max(doubleField)) + max(doubleField)', + [] + ); + testErrorsAndWarnings('from a_index | stats max(doubleField / 2)', []); + testErrorsAndWarnings('from a_index | stats var0 = max(doubleField / 2)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), max(doubleField / 2)', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = max(doubleField / 2)', + [] + ); + testErrorsAndWarnings('from a_index | stats var0 = max(doubleField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), max(doubleField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), var0 = max(doubleField)', []); + testErrorsAndWarnings( + 'from a_index | stats max(doubleField) by round(doubleField / 2)', [] ); - testErrorsAndWarnings('from a_index | eval st_y(booleanField)', [ - 'Argument of [st_y] must be [cartesian_point], found value [booleanField] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | eval var = st_y(to_geopoint(geoPointField))', []); - testErrorsAndWarnings('from a_index | sort st_y(cartesianPointField)', []); - testErrorsAndWarnings('from a_index | eval st_y(null)', []); - testErrorsAndWarnings('row nullVar = null | eval st_y(nullVar)', []); - }); + testErrorsAndWarnings( + 'from a_index | stats var0 = max(doubleField) by var1 = round(doubleField / 2)', + [] + ); - describe('starts_with', () => { - testErrorsAndWarnings('row var = starts_with("a", "a")', []); - testErrorsAndWarnings('row starts_with("a", "a")', []); - testErrorsAndWarnings('row var = starts_with(to_string("a"), to_string("a"))', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), max(doubleField) by round(doubleField / 2), ipField', + [] + ); - testErrorsAndWarnings('row var = starts_with(5, 5)', [ - 'Argument of [starts_with] must be [string], found value [5] type [number]', - 'Argument of [starts_with] must be [string], found value [5] type [number]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = max(doubleField) by var1 = round(doubleField / 2), ipField', + [] + ); testErrorsAndWarnings( - 'from a_index | eval var = starts_with(stringField, stringField)', + 'from a_index | stats avg(doubleField), max(doubleField) by round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('from a_index | eval starts_with(stringField, stringField)', []); testErrorsAndWarnings( - 'from a_index | eval var = starts_with(to_string(stringField), to_string(stringField))', + 'from a_index | stats avg(doubleField), var0 = max(doubleField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('from a_index | eval starts_with(numberField, numberField)', [ - 'Argument of [starts_with] must be [string], found value [numberField] type [number]', - 'Argument of [starts_with] must be [string], found value [numberField] type [number]', + testErrorsAndWarnings('from a_index | stats var = max(avg(integerField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", ]); - testErrorsAndWarnings( - 'from a_index | eval starts_with(stringField, stringField, extraArg)', - ['Error: [starts_with] function expects exactly 2 arguments, got 3.'] - ); + testErrorsAndWarnings('from a_index | stats max(avg(integerField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + ]); - testErrorsAndWarnings('from a_index | sort starts_with(stringField, stringField)', []); - testErrorsAndWarnings('row var = starts_with(to_string(true), to_string(true))', []); + testErrorsAndWarnings('from a_index | stats max(cartesianPointField)', [ + 'Argument of [max] must be [double], found value [cartesianPointField] type [cartesian_point]', + ]); - testErrorsAndWarnings('row var = starts_with(true, true)', [ - 'Argument of [starts_with] must be [string], found value [true] type [boolean]', - 'Argument of [starts_with] must be [string], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | stats var = max(*)', [ + 'Using wildcards (*) in max is not allowed', ]); + testErrorsAndWarnings('from a_index | stats var = max(longField)', []); + testErrorsAndWarnings('from a_index | stats max(longField)', []); + testErrorsAndWarnings('from a_index | stats var = round(max(longField))', []); + testErrorsAndWarnings('from a_index | stats round(max(longField))', []); testErrorsAndWarnings( - 'from a_index | eval var = starts_with(to_string(booleanField), to_string(booleanField))', + 'from a_index | stats var = round(max(longField)) + max(longField)', [] ); - - testErrorsAndWarnings('from a_index | eval starts_with(booleanField, booleanField)', [ - 'Argument of [starts_with] must be [string], found value [booleanField] type [boolean]', - 'Argument of [starts_with] must be [string], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | eval starts_with(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval starts_with(nullVar, nullVar)', []); - }); - - describe('substring', () => { - testErrorsAndWarnings('row var = substring("a", 5, 5)', []); - testErrorsAndWarnings('row var = substring("a", 5)', []); - testErrorsAndWarnings('row substring("a", 5, 5)', []); - testErrorsAndWarnings('row substring("a", 5)', []); + testErrorsAndWarnings('from a_index | stats round(max(longField)) + max(longField)', []); + testErrorsAndWarnings('from a_index | stats var0 = max(longField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), max(longField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), var0 = max(longField)', []); + testErrorsAndWarnings('from a_index | stats max(longField) by round(doubleField / 2)', []); testErrorsAndWarnings( - 'row var = substring(to_string("a"), to_integer("a"), to_integer("a"))', + 'from a_index | stats var0 = max(longField) by var1 = round(doubleField / 2)', [] ); - testErrorsAndWarnings('row var = substring(5, "a", "a")', [ - 'Argument of [substring] must be [string], found value [5] type [number]', - 'Argument of [substring] must be [number], found value ["a"] type [string]', - 'Argument of [substring] must be [number], found value ["a"] type [string]', - ]); - testErrorsAndWarnings( - 'from a_index | where length(substring(stringField, numberField, numberField)) > 0', + 'from a_index | stats avg(doubleField), max(longField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | where length(substring(numberField, stringField, stringField)) > 0', - [ - 'Argument of [substring] must be [string], found value [numberField] type [number]', - 'Argument of [substring] must be [number], found value [stringField] type [string]', - 'Argument of [substring] must be [number], found value [stringField] type [string]', - ] + 'from a_index | stats avg(doubleField), var0 = max(longField) by var1 = round(doubleField / 2), ipField', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = substring(stringField, numberField, numberField)', + 'from a_index | stats avg(doubleField), max(longField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval substring(stringField, numberField, numberField)', + 'from a_index | stats avg(doubleField), var0 = max(longField) by var1 = round(doubleField / 2), doubleField / 2', [] ); + testErrorsAndWarnings('from a_index | stats var = max(integerField)', []); + testErrorsAndWarnings('from a_index | stats max(integerField)', []); + testErrorsAndWarnings('from a_index | stats var = round(max(integerField))', []); + testErrorsAndWarnings('from a_index | stats round(max(integerField))', []); + testErrorsAndWarnings( - 'from a_index | eval var = substring(to_string(stringField), to_integer(stringField), to_integer(stringField))', + 'from a_index | stats var = round(max(integerField)) + max(integerField)', [] ); testErrorsAndWarnings( - 'from a_index | eval substring(numberField, stringField, stringField)', - [ - 'Argument of [substring] must be [string], found value [numberField] type [number]', - 'Argument of [substring] must be [number], found value [stringField] type [string]', - 'Argument of [substring] must be [number], found value [stringField] type [string]', - ] + 'from a_index | stats round(max(integerField)) + max(integerField)', + [] ); - + testErrorsAndWarnings('from a_index | stats var0 = max(integerField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), max(integerField)', []); testErrorsAndWarnings( - 'from a_index | eval substring(stringField, numberField, numberField, extraArg)', - ['Error: [substring] function expects no more than 3 arguments, got 4.'] + 'from a_index | stats avg(doubleField), var0 = max(integerField)', + [] ); - testErrorsAndWarnings( - 'from a_index | sort substring(stringField, numberField, numberField)', + 'from a_index | stats max(integerField) by round(doubleField / 2)', [] ); - testErrorsAndWarnings('from a_index | sort substring(stringField, numberField)', []); testErrorsAndWarnings( - 'row var = substring(to_string(true), to_integer(true), to_integer(true))', + 'from a_index | stats var0 = max(integerField) by var1 = round(doubleField / 2)', [] ); - testErrorsAndWarnings('row var = substring(true, true, true)', [ - 'Argument of [substring] must be [string], found value [true] type [boolean]', - 'Argument of [substring] must be [number], found value [true] type [boolean]', - 'Argument of [substring] must be [number], found value [true] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), max(integerField) by round(doubleField / 2), ipField', + [] + ); testErrorsAndWarnings( - 'from a_index | where length(substring(booleanField, booleanField, booleanField)) > 0', - [ - 'Argument of [substring] must be [string], found value [booleanField] type [boolean]', - 'Argument of [substring] must be [number], found value [booleanField] type [boolean]', - 'Argument of [substring] must be [number], found value [booleanField] type [boolean]', - ] + 'from a_index | stats avg(doubleField), var0 = max(integerField) by var1 = round(doubleField / 2), ipField', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = substring(to_string(booleanField), to_integer(booleanField), to_integer(booleanField))', + 'from a_index | stats avg(doubleField), max(integerField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval substring(booleanField, booleanField, booleanField)', - [ - 'Argument of [substring] must be [string], found value [booleanField] type [boolean]', - 'Argument of [substring] must be [number], found value [booleanField] type [boolean]', - 'Argument of [substring] must be [number], found value [booleanField] type [boolean]', - ] + 'from a_index | stats avg(doubleField), var0 = max(integerField) by var1 = round(doubleField / 2), doubleField / 2', + [] ); - testErrorsAndWarnings('from a_index | eval substring(null, null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval substring(nullVar, nullVar, nullVar)', []); - }); - describe('tan', () => { - testErrorsAndWarnings('row var = tan(5)', []); - testErrorsAndWarnings('row tan(5)', []); - testErrorsAndWarnings('row var = tan(to_integer("a"))', []); + testErrorsAndWarnings('from a_index | stats var = max(dateField)', []); + testErrorsAndWarnings('from a_index | stats max(dateField)', []); + testErrorsAndWarnings('from a_index | stats var = max(datePeriodField)', []); + testErrorsAndWarnings('from a_index | stats max(datePeriodField)', []); + testErrorsAndWarnings('from a_index | stats var = max(booleanField)', []); + testErrorsAndWarnings('from a_index | stats max(booleanField)', []); + testErrorsAndWarnings('from a_index | stats var = max(ipField)', []); + testErrorsAndWarnings('from a_index | stats max(ipField)', []); - testErrorsAndWarnings('row var = tan("a")', [ - 'Argument of [tan] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('from a_index | sort max(doubleField)', [ + 'SORT does not support function max', ]); - testErrorsAndWarnings('from a_index | where tan(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where max(doubleField)', [ + 'WHERE does not support function max', + ]); - testErrorsAndWarnings('from a_index | where tan(stringField) > 0', [ - 'Argument of [tan] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | where max(doubleField) > 0', [ + 'WHERE does not support function max', ]); - testErrorsAndWarnings('from a_index | eval var = tan(numberField)', []); - testErrorsAndWarnings('from a_index | eval tan(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = tan(to_integer(stringField))', []); + testErrorsAndWarnings('from a_index | where max(longField)', [ + 'WHERE does not support function max', + ]); - testErrorsAndWarnings('from a_index | eval tan(stringField)', [ - 'Argument of [tan] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | where max(longField) > 0', [ + 'WHERE does not support function max', ]); - testErrorsAndWarnings('from a_index | eval tan(numberField, extraArg)', [ - 'Error: [tan] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | where max(integerField)', [ + 'WHERE does not support function max', ]); - testErrorsAndWarnings('from a_index | eval var = tan(*)', [ - 'Using wildcards (*) in tan is not allowed', + testErrorsAndWarnings('from a_index | where max(integerField) > 0', [ + 'WHERE does not support function max', ]); - testErrorsAndWarnings('from a_index | sort tan(numberField)', []); - testErrorsAndWarnings('row var = tan(to_integer(true))', []); + testErrorsAndWarnings('from a_index | where max(dateField)', [ + 'WHERE does not support function max', + ]); - testErrorsAndWarnings('row var = tan(true)', [ - 'Argument of [tan] must be [number], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | where max(dateField) > 0', [ + 'WHERE does not support function max', ]); - testErrorsAndWarnings('from a_index | where tan(booleanField) > 0', [ - 'Argument of [tan] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | where max(datePeriodField)', [ + 'WHERE does not support function max', ]); - testErrorsAndWarnings('from a_index | eval var = tan(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | where max(datePeriodField) > 0', [ + 'WHERE does not support function max', + ]); - testErrorsAndWarnings('from a_index | eval tan(booleanField)', [ - 'Argument of [tan] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | where max(booleanField)', [ + 'WHERE does not support function max', ]); - testErrorsAndWarnings('from a_index | eval tan(null)', []); - testErrorsAndWarnings('row nullVar = null | eval tan(nullVar)', []); - }); - describe('tanh', () => { - testErrorsAndWarnings('row var = tanh(5)', []); - testErrorsAndWarnings('row tanh(5)', []); - testErrorsAndWarnings('row var = tanh(to_integer("a"))', []); + testErrorsAndWarnings('from a_index | where max(booleanField) > 0', [ + 'WHERE does not support function max', + ]); - testErrorsAndWarnings('row var = tanh("a")', [ - 'Argument of [tanh] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('from a_index | where max(ipField)', [ + 'WHERE does not support function max', ]); - testErrorsAndWarnings('from a_index | where tanh(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where max(ipField) > 0', [ + 'WHERE does not support function max', + ]); - testErrorsAndWarnings('from a_index | where tanh(stringField) > 0', [ - 'Argument of [tanh] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | eval var = max(doubleField)', [ + 'EVAL does not support function max', ]); - testErrorsAndWarnings('from a_index | eval var = tanh(numberField)', []); - testErrorsAndWarnings('from a_index | eval tanh(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = tanh(to_integer(stringField))', []); + testErrorsAndWarnings('from a_index | eval var = max(doubleField) > 0', [ + 'EVAL does not support function max', + ]); - testErrorsAndWarnings('from a_index | eval tanh(stringField)', [ - 'Argument of [tanh] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | eval max(doubleField)', [ + 'EVAL does not support function max', ]); - testErrorsAndWarnings('from a_index | eval tanh(numberField, extraArg)', [ - 'Error: [tanh] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval max(doubleField) > 0', [ + 'EVAL does not support function max', ]); - testErrorsAndWarnings('from a_index | eval var = tanh(*)', [ - 'Using wildcards (*) in tanh is not allowed', + testErrorsAndWarnings('from a_index | eval var = max(longField)', [ + 'EVAL does not support function max', ]); - testErrorsAndWarnings('from a_index | sort tanh(numberField)', []); - testErrorsAndWarnings('row var = tanh(to_integer(true))', []); + testErrorsAndWarnings('from a_index | eval var = max(longField) > 0', [ + 'EVAL does not support function max', + ]); - testErrorsAndWarnings('row var = tanh(true)', [ - 'Argument of [tanh] must be [number], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | eval max(longField)', [ + 'EVAL does not support function max', ]); - testErrorsAndWarnings('from a_index | where tanh(booleanField) > 0', [ - 'Argument of [tanh] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval max(longField) > 0', [ + 'EVAL does not support function max', ]); - testErrorsAndWarnings('from a_index | eval var = tanh(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = max(integerField)', [ + 'EVAL does not support function max', + ]); - testErrorsAndWarnings('from a_index | eval tanh(booleanField)', [ - 'Argument of [tanh] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval var = max(integerField) > 0', [ + 'EVAL does not support function max', ]); - testErrorsAndWarnings('from a_index | eval tanh(null)', []); - testErrorsAndWarnings('row nullVar = null | eval tanh(nullVar)', []); - }); - describe('tau', () => { - testErrorsAndWarnings('row var = tau()', []); - testErrorsAndWarnings('row tau()', []); - testErrorsAndWarnings('from a_index | where tau() > 0', []); - testErrorsAndWarnings('from a_index | eval var = tau()', []); - testErrorsAndWarnings('from a_index | eval tau()', []); + testErrorsAndWarnings('from a_index | eval max(integerField)', [ + 'EVAL does not support function max', + ]); - testErrorsAndWarnings('from a_index | eval tau(extraArg)', [ - 'Error: [tau] function expects exactly 0 arguments, got 1.', + testErrorsAndWarnings('from a_index | eval max(integerField) > 0', [ + 'EVAL does not support function max', ]); - testErrorsAndWarnings('from a_index | sort tau()', []); - testErrorsAndWarnings('row nullVar = null | eval tau()', []); - }); + testErrorsAndWarnings('from a_index | eval var = max(dateField)', [ + 'EVAL does not support function max', + ]); - describe('to_boolean', () => { - testErrorsAndWarnings('row var = to_boolean("a")', []); - testErrorsAndWarnings('row to_boolean("a")', []); - testErrorsAndWarnings('row var = to_bool("a")', []); - testErrorsAndWarnings('from a_index | eval var = to_boolean(stringField)', []); - testErrorsAndWarnings('from a_index | eval to_boolean(stringField)', []); - testErrorsAndWarnings('from a_index | eval var = to_bool(stringField)', []); + testErrorsAndWarnings('from a_index | eval var = max(dateField) > 0', [ + 'EVAL does not support function max', + ]); - testErrorsAndWarnings('from a_index | eval var = to_boolean(*)', [ - 'Using wildcards (*) in to_boolean is not allowed', + testErrorsAndWarnings('from a_index | eval max(dateField)', [ + 'EVAL does not support function max', ]); - testErrorsAndWarnings('from a_index | sort to_boolean(stringField)', []); - testErrorsAndWarnings('row var = to_boolean(true)', []); - testErrorsAndWarnings('row to_boolean(true)', []); - testErrorsAndWarnings('row var = to_bool(true)', []); - testErrorsAndWarnings('row var = to_boolean(to_boolean(true))', []); - testErrorsAndWarnings('row var = to_boolean(5)', []); - testErrorsAndWarnings('row to_boolean(5)', []); - testErrorsAndWarnings('row var = to_bool(5)', []); - testErrorsAndWarnings('row var = to_boolean(to_integer(true))', []); - testErrorsAndWarnings('row var = to_boolean(to_string(true))', []); + testErrorsAndWarnings('from a_index | eval max(dateField) > 0', [ + 'EVAL does not support function max', + ]); - testErrorsAndWarnings('row var = to_boolean(to_cartesianpoint("POINT (30 10)"))', [ - 'Argument of [to_boolean] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + testErrorsAndWarnings('from a_index | eval var = max(datePeriodField)', [ + 'EVAL does not support function max', ]); - testErrorsAndWarnings('from a_index | eval var = to_boolean(booleanField)', []); - testErrorsAndWarnings('from a_index | eval to_boolean(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = to_bool(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = to_boolean(to_boolean(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = max(datePeriodField) > 0', [ + 'EVAL does not support function max', + ]); - testErrorsAndWarnings('from a_index | eval to_boolean(cartesianPointField)', [ - 'Argument of [to_boolean] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | eval max(datePeriodField)', [ + 'EVAL does not support function max', ]); - testErrorsAndWarnings('from a_index | eval var = to_boolean(numberField)', []); - testErrorsAndWarnings('from a_index | eval to_boolean(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = to_bool(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = to_boolean(to_integer(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = to_boolean(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval max(datePeriodField) > 0', [ + 'EVAL does not support function max', + ]); - testErrorsAndWarnings('from a_index | eval to_boolean(booleanField, extraArg)', [ - 'Error: [to_boolean] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval var = max(booleanField)', [ + 'EVAL does not support function max', ]); - testErrorsAndWarnings('from a_index | sort to_boolean(booleanField)', []); - testErrorsAndWarnings('from a_index | eval to_boolean(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_boolean(nullVar)', []); - }); + testErrorsAndWarnings('from a_index | eval var = max(booleanField) > 0', [ + 'EVAL does not support function max', + ]); - describe('to_cartesianpoint', () => { - testErrorsAndWarnings('row var = to_cartesianpoint("a")', []); - testErrorsAndWarnings('row to_cartesianpoint("a")', []); - testErrorsAndWarnings('from a_index | eval var = to_cartesianpoint(stringField)', []); - testErrorsAndWarnings('from a_index | eval to_cartesianpoint(stringField)', []); + testErrorsAndWarnings('from a_index | eval max(booleanField)', [ + 'EVAL does not support function max', + ]); - testErrorsAndWarnings('from a_index | eval var = to_cartesianpoint(*)', [ - 'Using wildcards (*) in to_cartesianpoint is not allowed', + testErrorsAndWarnings('from a_index | eval max(booleanField) > 0', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval var = max(ipField)', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval var = max(ipField) > 0', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval max(ipField)', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval max(ipField) > 0', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | stats max(null)', []); + testErrorsAndWarnings('row nullVar = null | stats max(nullVar)', []); + testErrorsAndWarnings('from a_index | stats max("2022")', []); + testErrorsAndWarnings('from a_index | stats max(concat("20", "22"))', [ + 'Argument of [max] must be [double], found value [concat("20","22")] type [keyword]', ]); + }); + + describe('min', () => { + testErrorsAndWarnings('from a_index | stats var = min(doubleField)', []); + testErrorsAndWarnings('from a_index | stats min(doubleField)', []); + testErrorsAndWarnings('from a_index | stats var = round(min(doubleField))', []); + testErrorsAndWarnings('from a_index | stats round(min(doubleField))', []); - testErrorsAndWarnings('from a_index | sort to_cartesianpoint(stringField)', []); testErrorsAndWarnings( - 'row var = to_cartesianpoint(to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats var = round(min(doubleField)) + min(doubleField)', [] ); - testErrorsAndWarnings('row to_cartesianpoint(to_cartesianpoint("POINT (30 10)"))', []); testErrorsAndWarnings( - 'row var = to_cartesianpoint(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats round(min(doubleField)) + min(doubleField)', + [] + ); + testErrorsAndWarnings('from a_index | stats min(doubleField / 2)', []); + testErrorsAndWarnings('from a_index | stats var0 = min(doubleField / 2)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), min(doubleField / 2)', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = min(doubleField / 2)', + [] + ); + testErrorsAndWarnings('from a_index | stats var0 = min(doubleField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), min(doubleField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), var0 = min(doubleField)', []); + testErrorsAndWarnings( + 'from a_index | stats min(doubleField) by round(doubleField / 2)', [] ); - - testErrorsAndWarnings('row var = to_cartesianpoint(to_string(true))', []); - - testErrorsAndWarnings('row var = to_cartesianpoint(true)', [ - 'Argument of [to_cartesianpoint] must be [cartesian_point], found value [true] type [boolean]', - ]); testErrorsAndWarnings( - 'from a_index | eval var = to_cartesianpoint(cartesianPointField)', + 'from a_index | stats var0 = min(doubleField) by var1 = round(doubleField / 2)', [] ); - testErrorsAndWarnings('from a_index | eval to_cartesianpoint(cartesianPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = to_cartesianpoint(to_cartesianpoint(cartesianPointField))', + 'from a_index | stats avg(doubleField), min(doubleField) by round(doubleField / 2), ipField', [] ); - testErrorsAndWarnings('from a_index | eval to_cartesianpoint(booleanField)', [ - 'Argument of [to_cartesianpoint] must be [cartesian_point], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = min(doubleField) by var1 = round(doubleField / 2), ipField', + [] + ); testErrorsAndWarnings( - 'from a_index | eval var = to_cartesianpoint(to_string(booleanField))', + 'from a_index | stats avg(doubleField), min(doubleField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval to_cartesianpoint(cartesianPointField, extraArg)', - ['Error: [to_cartesianpoint] function expects exactly one argument, got 2.'] + 'from a_index | stats avg(doubleField), var0 = min(doubleField) by var1 = round(doubleField / 2), doubleField / 2', + [] ); - testErrorsAndWarnings('from a_index | sort to_cartesianpoint(cartesianPointField)', []); - testErrorsAndWarnings('from a_index | eval to_cartesianpoint(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_cartesianpoint(nullVar)', []); - }); + testErrorsAndWarnings('from a_index | stats var = min(avg(integerField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + ]); - describe('to_cartesianshape', () => { - testErrorsAndWarnings('row var = to_cartesianshape("a")', []); - testErrorsAndWarnings('row to_cartesianshape("a")', []); - testErrorsAndWarnings('from a_index | eval var = to_cartesianshape(stringField)', []); - testErrorsAndWarnings('from a_index | eval to_cartesianshape(stringField)', []); + testErrorsAndWarnings('from a_index | stats min(avg(integerField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + ]); - testErrorsAndWarnings('from a_index | eval var = to_cartesianshape(*)', [ - 'Using wildcards (*) in to_cartesianshape is not allowed', + testErrorsAndWarnings('from a_index | stats min(cartesianPointField)', [ + 'Argument of [min] must be [double], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | stats var = min(*)', [ + 'Using wildcards (*) in min is not allowed', ]); - testErrorsAndWarnings('from a_index | sort to_cartesianshape(stringField)', []); + testErrorsAndWarnings('from a_index | stats var = min(longField)', []); + testErrorsAndWarnings('from a_index | stats min(longField)', []); + testErrorsAndWarnings('from a_index | stats var = round(min(longField))', []); + testErrorsAndWarnings('from a_index | stats round(min(longField))', []); testErrorsAndWarnings( - 'row var = to_cartesianshape(to_cartesianpoint("POINT (30 10)"))', + 'from a_index | stats var = round(min(longField)) + min(longField)', [] ); - testErrorsAndWarnings('row to_cartesianshape(to_cartesianpoint("POINT (30 10)"))', []); + testErrorsAndWarnings('from a_index | stats round(min(longField)) + min(longField)', []); + testErrorsAndWarnings('from a_index | stats var0 = min(longField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), min(longField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), var0 = min(longField)', []); + testErrorsAndWarnings('from a_index | stats min(longField) by round(doubleField / 2)', []); testErrorsAndWarnings( - 'row var = to_cartesianshape(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats var0 = min(longField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'row var = to_cartesianshape(to_cartesianshape("POINT (30 10)"))', + 'from a_index | stats avg(doubleField), min(longField) by round(doubleField / 2), ipField', [] ); - testErrorsAndWarnings('row to_cartesianshape(to_cartesianshape("POINT (30 10)"))', []); testErrorsAndWarnings( - 'row var = to_cartesianshape(to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats avg(doubleField), var0 = min(longField) by var1 = round(doubleField / 2), ipField', [] ); - testErrorsAndWarnings('row var = to_cartesianshape(to_string(true))', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), min(longField) by round(doubleField / 2), doubleField / 2', + [] + ); - testErrorsAndWarnings('row var = to_cartesianshape(true)', [ - 'Argument of [to_cartesianshape] must be [cartesian_point], found value [true] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = min(longField) by var1 = round(doubleField / 2), doubleField / 2', + [] + ); + + testErrorsAndWarnings('from a_index | stats var = min(integerField)', []); + testErrorsAndWarnings('from a_index | stats min(integerField)', []); + testErrorsAndWarnings('from a_index | stats var = round(min(integerField))', []); + testErrorsAndWarnings('from a_index | stats round(min(integerField))', []); testErrorsAndWarnings( - 'from a_index | eval var = to_cartesianshape(cartesianPointField)', + 'from a_index | stats var = round(min(integerField)) + min(integerField)', [] ); - testErrorsAndWarnings('from a_index | eval to_cartesianshape(cartesianPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = to_cartesianshape(to_cartesianpoint(cartesianPointField))', + 'from a_index | stats round(min(integerField)) + min(integerField)', + [] + ); + testErrorsAndWarnings('from a_index | stats var0 = min(integerField)', []); + testErrorsAndWarnings('from a_index | stats avg(doubleField), min(integerField)', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = min(integerField)', + [] + ); + testErrorsAndWarnings( + 'from a_index | stats min(integerField) by round(doubleField / 2)', [] ); - testErrorsAndWarnings('from a_index | eval to_cartesianshape(booleanField)', [ - 'Argument of [to_cartesianshape] must be [cartesian_point], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats var0 = min(integerField) by var1 = round(doubleField / 2)', + [] + ); testErrorsAndWarnings( - 'from a_index | eval var = to_cartesianshape(cartesianShapeField)', + 'from a_index | stats avg(doubleField), min(integerField) by round(doubleField / 2), ipField', [] ); - testErrorsAndWarnings('from a_index | eval to_cartesianshape(cartesianShapeField)', []); testErrorsAndWarnings( - 'from a_index | eval var = to_cartesianshape(to_cartesianshape(cartesianPointField))', + 'from a_index | stats avg(doubleField), var0 = min(integerField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | eval var = to_cartesianshape(to_string(booleanField))', + 'from a_index | stats avg(doubleField), min(integerField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | eval to_cartesianshape(cartesianPointField, extraArg)', - ['Error: [to_cartesianshape] function expects exactly one argument, got 2.'] + 'from a_index | stats avg(doubleField), var0 = min(integerField) by var1 = round(doubleField / 2), doubleField / 2', + [] ); - testErrorsAndWarnings('from a_index | sort to_cartesianshape(cartesianPointField)', []); - testErrorsAndWarnings('from a_index | eval to_cartesianshape(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_cartesianshape(nullVar)', []); - }); + testErrorsAndWarnings('from a_index | stats var = min(dateField)', []); + testErrorsAndWarnings('from a_index | stats min(dateField)', []); + testErrorsAndWarnings('from a_index | stats var = min(datePeriodField)', []); + testErrorsAndWarnings('from a_index | stats min(datePeriodField)', []); + testErrorsAndWarnings('from a_index | stats var = min(booleanField)', []); + testErrorsAndWarnings('from a_index | stats min(booleanField)', []); + testErrorsAndWarnings('from a_index | stats var = min(ipField)', []); + testErrorsAndWarnings('from a_index | stats min(ipField)', []); - describe('to_datetime', () => { - testErrorsAndWarnings('row var = to_datetime("a")', []); - testErrorsAndWarnings('row to_datetime("a")', []); - testErrorsAndWarnings('row var = to_dt("a")', []); - testErrorsAndWarnings('from a_index | eval var = to_datetime(stringField)', []); - testErrorsAndWarnings('from a_index | eval to_datetime(stringField)', []); - testErrorsAndWarnings('from a_index | eval var = to_dt(stringField)', []); + testErrorsAndWarnings('from a_index | sort min(doubleField)', [ + 'SORT does not support function min', + ]); - testErrorsAndWarnings('from a_index | eval var = to_datetime(*)', [ - 'Using wildcards (*) in to_datetime is not allowed', + testErrorsAndWarnings('from a_index | where min(doubleField)', [ + 'WHERE does not support function min', ]); - testErrorsAndWarnings('from a_index | sort to_datetime(stringField)', []); - testErrorsAndWarnings('row var = to_datetime(now())', []); - testErrorsAndWarnings('row to_datetime(now())', []); - testErrorsAndWarnings('row var = to_dt(now())', []); - testErrorsAndWarnings('row var = to_datetime(to_datetime(now()))', []); - testErrorsAndWarnings('row var = to_datetime(5)', []); - testErrorsAndWarnings('row to_datetime(5)', []); - testErrorsAndWarnings('row var = to_dt(5)', []); - testErrorsAndWarnings('row var = to_datetime(to_integer(true))', []); - testErrorsAndWarnings('row var = to_datetime(to_string(true))', []); + testErrorsAndWarnings('from a_index | where min(doubleField) > 0', [ + 'WHERE does not support function min', + ]); - testErrorsAndWarnings('row var = to_datetime(true)', [ - 'Argument of [to_datetime] must be [date], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | where min(longField)', [ + 'WHERE does not support function min', ]); - testErrorsAndWarnings('from a_index | eval var = to_datetime(dateField)', []); - testErrorsAndWarnings('from a_index | eval to_datetime(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = to_dt(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = to_datetime(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | where min(longField) > 0', [ + 'WHERE does not support function min', + ]); - testErrorsAndWarnings('from a_index | eval to_datetime(booleanField)', [ - 'Argument of [to_datetime] must be [date], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | where min(integerField)', [ + 'WHERE does not support function min', ]); - testErrorsAndWarnings('from a_index | eval var = to_datetime(numberField)', []); - testErrorsAndWarnings('from a_index | eval to_datetime(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = to_dt(numberField)', []); - testErrorsAndWarnings( - 'from a_index | eval var = to_datetime(to_integer(booleanField))', - [] - ); - testErrorsAndWarnings('from a_index | eval var = to_datetime(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | where min(integerField) > 0', [ + 'WHERE does not support function min', + ]); - testErrorsAndWarnings('from a_index | eval to_datetime(dateField, extraArg)', [ - 'Error: [to_datetime] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | where min(dateField)', [ + 'WHERE does not support function min', ]); - testErrorsAndWarnings('from a_index | sort to_datetime(dateField)', []); - testErrorsAndWarnings('from a_index | eval to_datetime(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_datetime(nullVar)', []); - }); + testErrorsAndWarnings('from a_index | where min(dateField) > 0', [ + 'WHERE does not support function min', + ]); - describe('to_degrees', () => { - testErrorsAndWarnings('row var = to_degrees(5)', []); - testErrorsAndWarnings('row to_degrees(5)', []); - testErrorsAndWarnings('row var = to_degrees(to_integer("a"))', []); + testErrorsAndWarnings('from a_index | where min(datePeriodField)', [ + 'WHERE does not support function min', + ]); - testErrorsAndWarnings('row var = to_degrees("a")', [ - 'Argument of [to_degrees] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('from a_index | where min(datePeriodField) > 0', [ + 'WHERE does not support function min', ]); - testErrorsAndWarnings('from a_index | where to_degrees(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where min(booleanField)', [ + 'WHERE does not support function min', + ]); - testErrorsAndWarnings('from a_index | where to_degrees(stringField) > 0', [ - 'Argument of [to_degrees] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | where min(booleanField) > 0', [ + 'WHERE does not support function min', ]); - testErrorsAndWarnings('from a_index | eval var = to_degrees(numberField)', []); - testErrorsAndWarnings('from a_index | eval to_degrees(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = to_degrees(to_integer(stringField))', []); + testErrorsAndWarnings('from a_index | where min(ipField)', [ + 'WHERE does not support function min', + ]); - testErrorsAndWarnings('from a_index | eval to_degrees(stringField)', [ - 'Argument of [to_degrees] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | where min(ipField) > 0', [ + 'WHERE does not support function min', ]); - testErrorsAndWarnings('from a_index | eval to_degrees(numberField, extraArg)', [ - 'Error: [to_degrees] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval var = min(doubleField)', [ + 'EVAL does not support function min', ]); - testErrorsAndWarnings('from a_index | eval var = to_degrees(*)', [ - 'Using wildcards (*) in to_degrees is not allowed', + testErrorsAndWarnings('from a_index | eval var = min(doubleField) > 0', [ + 'EVAL does not support function min', ]); - testErrorsAndWarnings('from a_index | sort to_degrees(numberField)', []); - testErrorsAndWarnings('row var = to_degrees(to_integer(true))', []); + testErrorsAndWarnings('from a_index | eval min(doubleField)', [ + 'EVAL does not support function min', + ]); - testErrorsAndWarnings('row var = to_degrees(true)', [ - 'Argument of [to_degrees] must be [number], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | eval min(doubleField) > 0', [ + 'EVAL does not support function min', ]); - testErrorsAndWarnings('from a_index | where to_degrees(booleanField) > 0', [ - 'Argument of [to_degrees] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval var = min(longField)', [ + 'EVAL does not support function min', ]); - testErrorsAndWarnings('from a_index | eval var = to_degrees(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = min(longField) > 0', [ + 'EVAL does not support function min', + ]); - testErrorsAndWarnings('from a_index | eval to_degrees(booleanField)', [ - 'Argument of [to_degrees] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval min(longField)', [ + 'EVAL does not support function min', ]); - testErrorsAndWarnings('from a_index | eval to_degrees(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_degrees(nullVar)', []); - }); - describe('to_double', () => { - testErrorsAndWarnings('row var = to_double("a")', []); - testErrorsAndWarnings('row to_double("a")', []); - testErrorsAndWarnings('row var = to_dbl("a")', []); - testErrorsAndWarnings('from a_index | eval var = to_double(stringField)', []); - testErrorsAndWarnings('from a_index | eval to_double(stringField)', []); - testErrorsAndWarnings('from a_index | eval var = to_dbl(stringField)', []); + testErrorsAndWarnings('from a_index | eval min(longField) > 0', [ + 'EVAL does not support function min', + ]); - testErrorsAndWarnings('from a_index | eval var = to_double(*)', [ - 'Using wildcards (*) in to_double is not allowed', + testErrorsAndWarnings('from a_index | eval var = min(integerField)', [ + 'EVAL does not support function min', ]); - testErrorsAndWarnings('from a_index | sort to_double(stringField)', []); - testErrorsAndWarnings('row var = to_double(true)', []); - testErrorsAndWarnings('row to_double(true)', []); - testErrorsAndWarnings('row var = to_dbl(true)', []); - testErrorsAndWarnings('row var = to_double(to_boolean(true))', []); - testErrorsAndWarnings('row var = to_double(5)', []); - testErrorsAndWarnings('row to_double(5)', []); - testErrorsAndWarnings('row var = to_dbl(5)', []); - testErrorsAndWarnings('row var = to_double(to_integer(true))', []); - testErrorsAndWarnings('row var = to_double(now())', []); - testErrorsAndWarnings('row to_double(now())', []); - testErrorsAndWarnings('row var = to_dbl(now())', []); - testErrorsAndWarnings('row var = to_double(to_datetime(now()))', []); - testErrorsAndWarnings('row var = to_double(to_string(true))', []); + testErrorsAndWarnings('from a_index | eval var = min(integerField) > 0', [ + 'EVAL does not support function min', + ]); - testErrorsAndWarnings('row var = to_double(to_cartesianpoint("POINT (30 10)"))', [ - 'Argument of [to_double] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + testErrorsAndWarnings('from a_index | eval min(integerField)', [ + 'EVAL does not support function min', ]); - testErrorsAndWarnings('from a_index | where to_double(booleanField) > 0', []); + testErrorsAndWarnings('from a_index | eval min(integerField) > 0', [ + 'EVAL does not support function min', + ]); - testErrorsAndWarnings('from a_index | where to_double(cartesianPointField) > 0', [ - 'Argument of [to_double] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | eval var = min(dateField)', [ + 'EVAL does not support function min', ]); - testErrorsAndWarnings('from a_index | where to_double(numberField) > 0', []); - testErrorsAndWarnings('from a_index | where to_double(dateField) > 0', []); - testErrorsAndWarnings('from a_index | where to_double(stringField) > 0', []); - testErrorsAndWarnings('from a_index | eval var = to_double(booleanField)', []); - testErrorsAndWarnings('from a_index | eval to_double(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = to_dbl(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = to_double(to_boolean(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = min(dateField) > 0', [ + 'EVAL does not support function min', + ]); - testErrorsAndWarnings('from a_index | eval to_double(cartesianPointField)', [ - 'Argument of [to_double] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | eval min(dateField)', [ + 'EVAL does not support function min', ]); - testErrorsAndWarnings('from a_index | eval var = to_double(numberField)', []); - testErrorsAndWarnings('from a_index | eval to_double(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = to_dbl(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = to_double(to_integer(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = to_double(dateField)', []); - testErrorsAndWarnings('from a_index | eval to_double(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = to_dbl(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = to_double(to_datetime(dateField))', []); - testErrorsAndWarnings('from a_index | eval var = to_double(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval min(dateField) > 0', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval var = min(datePeriodField)', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval var = min(datePeriodField) > 0', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval min(datePeriodField)', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval min(datePeriodField) > 0', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval var = min(booleanField)', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval var = min(booleanField) > 0', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval min(booleanField)', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval min(booleanField) > 0', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval var = min(ipField)', [ + 'EVAL does not support function min', + ]); - testErrorsAndWarnings('from a_index | eval to_double(booleanField, extraArg)', [ - 'Error: [to_double] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval var = min(ipField) > 0', [ + 'EVAL does not support function min', ]); - testErrorsAndWarnings('from a_index | sort to_double(booleanField)', []); - testErrorsAndWarnings('from a_index | eval to_double(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_double(nullVar)', []); - }); + testErrorsAndWarnings('from a_index | eval min(ipField)', [ + 'EVAL does not support function min', + ]); - describe('to_geopoint', () => { - testErrorsAndWarnings('row var = to_geopoint("a")', []); - testErrorsAndWarnings('row to_geopoint("a")', []); - testErrorsAndWarnings('from a_index | eval var = to_geopoint(stringField)', []); - testErrorsAndWarnings('from a_index | eval to_geopoint(stringField)', []); + testErrorsAndWarnings('from a_index | eval min(ipField) > 0', [ + 'EVAL does not support function min', + ]); - testErrorsAndWarnings('from a_index | eval var = to_geopoint(*)', [ - 'Using wildcards (*) in to_geopoint is not allowed', + testErrorsAndWarnings('from a_index | stats min(null)', []); + testErrorsAndWarnings('row nullVar = null | stats min(nullVar)', []); + testErrorsAndWarnings('from a_index | stats min("2022")', []); + testErrorsAndWarnings('from a_index | stats min(concat("20", "22"))', [ + 'Argument of [min] must be [double], found value [concat("20","22")] type [keyword]', ]); + }); + + describe('count', () => { + testErrorsAndWarnings('from a_index | stats var = count(textField)', []); + testErrorsAndWarnings('from a_index | stats count(textField)', []); + testErrorsAndWarnings('from a_index | stats var = round(count(textField))', []); + testErrorsAndWarnings('from a_index | stats round(count(textField))', []); - testErrorsAndWarnings('from a_index | sort to_geopoint(stringField)', []); - testErrorsAndWarnings('row var = to_geopoint(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row to_geopoint(to_geopoint("POINT (30 10)"))', []); testErrorsAndWarnings( - 'row var = to_geopoint(to_geopoint(to_geopoint("POINT (30 10)")))', + 'from a_index | stats var = round(count(textField)) + count(textField)', [] ); - testErrorsAndWarnings('row var = to_geopoint(to_string(true))', []); - - testErrorsAndWarnings('row var = to_geopoint(true)', [ - 'Argument of [to_geopoint] must be [geo_point], found value [true] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | eval var = to_geopoint(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval to_geopoint(geoPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = to_geopoint(to_geopoint(geoPointField))', + 'from a_index | stats round(count(textField)) + count(textField)', [] ); - testErrorsAndWarnings('from a_index | eval to_geopoint(booleanField)', [ - 'Argument of [to_geopoint] must be [geo_point], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | sort count(textField)', [ + 'SORT does not support function count', ]); - testErrorsAndWarnings('from a_index | eval var = to_geopoint(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | where count(textField)', [ + 'WHERE does not support function count', + ]); - testErrorsAndWarnings('from a_index | eval to_geopoint(geoPointField, extraArg)', [ - 'Error: [to_geopoint] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | where count(textField) > 0', [ + 'WHERE does not support function count', ]); - testErrorsAndWarnings('from a_index | sort to_geopoint(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval to_geopoint(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_geopoint(nullVar)', []); - }); + testErrorsAndWarnings('from a_index | eval var = count(textField)', [ + 'EVAL does not support function count', + ]); - describe('to_geoshape', () => { - testErrorsAndWarnings('row var = to_geoshape("a")', []); - testErrorsAndWarnings('row to_geoshape("a")', []); - testErrorsAndWarnings('from a_index | eval var = to_geoshape(stringField)', []); - testErrorsAndWarnings('from a_index | eval to_geoshape(stringField)', []); + testErrorsAndWarnings('from a_index | eval var = count(textField) > 0', [ + 'EVAL does not support function count', + ]); - testErrorsAndWarnings('from a_index | eval var = to_geoshape(*)', [ - 'Using wildcards (*) in to_geoshape is not allowed', + testErrorsAndWarnings('from a_index | eval count(textField)', [ + 'EVAL does not support function count', ]); - testErrorsAndWarnings('from a_index | sort to_geoshape(stringField)', []); - testErrorsAndWarnings('row var = to_geoshape(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row to_geoshape(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings( - 'row var = to_geoshape(to_geopoint(to_geopoint("POINT (30 10)")))', - [] - ); - testErrorsAndWarnings('row var = to_geoshape(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row to_geoshape(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('from a_index | eval count(textField) > 0', [ + 'EVAL does not support function count', + ]); + + testErrorsAndWarnings('from a_index | stats count(null)', []); + testErrorsAndWarnings('row nullVar = null | stats count(nullVar)', []); + }); + + describe('count_distinct', () => { testErrorsAndWarnings( - 'row var = to_geoshape(to_geoshape(to_geopoint("POINT (30 10)")))', + 'from a_index | stats count_distinct(null, null, null, null, null, null, null, null)', [] ); - testErrorsAndWarnings('row var = to_geoshape(to_string(true))', []); - - testErrorsAndWarnings('row var = to_geoshape(true)', [ - 'Argument of [to_geoshape] must be [geo_point], found value [true] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | eval var = to_geoshape(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval to_geoshape(geoPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = to_geoshape(to_geopoint(geoPointField))', + 'row nullVar = null | stats count_distinct(nullVar, nullVar, nullVar, nullVar, nullVar, nullVar, nullVar, nullVar)', [] ); + }); - testErrorsAndWarnings('from a_index | eval to_geoshape(booleanField)', [ - 'Argument of [to_geoshape] must be [geo_point], found value [booleanField] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | eval var = to_geoshape(geoShapeField)', []); - testErrorsAndWarnings('from a_index | eval to_geoshape(geoShapeField)', []); + describe('st_centroid_agg', () => { testErrorsAndWarnings( - 'from a_index | eval var = to_geoshape(to_geoshape(geoPointField))', + 'from a_index | stats var = st_centroid_agg(cartesianPointField)', [] ); - testErrorsAndWarnings('from a_index | eval var = to_geoshape(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | stats st_centroid_agg(cartesianPointField)', []); - testErrorsAndWarnings('from a_index | eval to_geoshape(geoPointField, extraArg)', [ - 'Error: [to_geoshape] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | stats var = st_centroid_agg(avg(integerField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", ]); - testErrorsAndWarnings('from a_index | sort to_geoshape(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval to_geoshape(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_geoshape(nullVar)', []); - }); - - describe('to_integer', () => { - testErrorsAndWarnings('row var = to_integer("a")', []); - testErrorsAndWarnings('row to_integer("a")', []); - testErrorsAndWarnings('row var = to_int("a")', []); - testErrorsAndWarnings('from a_index | eval var = to_integer(stringField)', []); - testErrorsAndWarnings('from a_index | eval to_integer(stringField)', []); - testErrorsAndWarnings('from a_index | eval var = to_int(stringField)', []); - - testErrorsAndWarnings('from a_index | eval var = to_integer(*)', [ - 'Using wildcards (*) in to_integer is not allowed', + testErrorsAndWarnings('from a_index | stats st_centroid_agg(avg(integerField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", ]); - testErrorsAndWarnings('from a_index | sort to_integer(stringField)', []); - testErrorsAndWarnings('row var = to_integer(true)', []); - testErrorsAndWarnings('row to_integer(true)', []); - testErrorsAndWarnings('row var = to_int(true)', []); - testErrorsAndWarnings('row var = to_integer(to_boolean(true))', []); - testErrorsAndWarnings('row var = to_integer(5)', []); - testErrorsAndWarnings('row to_integer(5)', []); - testErrorsAndWarnings('row var = to_int(5)', []); - testErrorsAndWarnings('row var = to_integer(to_integer(true))', []); - testErrorsAndWarnings('row var = to_integer(now())', []); - testErrorsAndWarnings('row to_integer(now())', []); - testErrorsAndWarnings('row var = to_int(now())', []); - testErrorsAndWarnings('row var = to_integer(to_datetime(now()))', []); - testErrorsAndWarnings('row var = to_integer(to_string(true))', []); + testErrorsAndWarnings('from a_index | stats st_centroid_agg(booleanField)', [ + 'Argument of [st_centroid_agg] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); - testErrorsAndWarnings('row var = to_integer(to_cartesianpoint("POINT (30 10)"))', [ - 'Argument of [to_integer] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + testErrorsAndWarnings('from a_index | stats var = st_centroid_agg(*)', [ + 'Using wildcards (*) in st_centroid_agg is not allowed', ]); - testErrorsAndWarnings('from a_index | where to_integer(booleanField) > 0', []); + testErrorsAndWarnings('from a_index | stats var = st_centroid_agg(geoPointField)', []); + testErrorsAndWarnings('from a_index | stats st_centroid_agg(geoPointField)', []); - testErrorsAndWarnings('from a_index | where to_integer(cartesianPointField) > 0', [ - 'Argument of [to_integer] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | sort st_centroid_agg(cartesianPointField)', [ + 'SORT does not support function st_centroid_agg', ]); - testErrorsAndWarnings('from a_index | where to_integer(numberField) > 0', []); - testErrorsAndWarnings('from a_index | where to_integer(dateField) > 0', []); - testErrorsAndWarnings('from a_index | where to_integer(stringField) > 0', []); - testErrorsAndWarnings('from a_index | eval var = to_integer(booleanField)', []); - testErrorsAndWarnings('from a_index | eval to_integer(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = to_int(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = to_integer(to_boolean(booleanField))', []); + testErrorsAndWarnings('from a_index | where st_centroid_agg(cartesianPointField)', [ + 'WHERE does not support function st_centroid_agg', + ]); - testErrorsAndWarnings('from a_index | eval to_integer(cartesianPointField)', [ - 'Argument of [to_integer] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | where st_centroid_agg(cartesianPointField) > 0', [ + 'WHERE does not support function st_centroid_agg', ]); - testErrorsAndWarnings('from a_index | eval var = to_integer(numberField)', []); - testErrorsAndWarnings('from a_index | eval to_integer(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = to_int(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = to_integer(to_integer(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = to_integer(dateField)', []); - testErrorsAndWarnings('from a_index | eval to_integer(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = to_int(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = to_integer(to_datetime(dateField))', []); - testErrorsAndWarnings('from a_index | eval var = to_integer(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | where st_centroid_agg(geoPointField)', [ + 'WHERE does not support function st_centroid_agg', + ]); - testErrorsAndWarnings('from a_index | eval to_integer(booleanField, extraArg)', [ - 'Error: [to_integer] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | where st_centroid_agg(geoPointField) > 0', [ + 'WHERE does not support function st_centroid_agg', ]); - testErrorsAndWarnings('from a_index | sort to_integer(booleanField)', []); - testErrorsAndWarnings('from a_index | eval to_integer(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_integer(nullVar)', []); - }); + testErrorsAndWarnings('from a_index | eval var = st_centroid_agg(cartesianPointField)', [ + 'EVAL does not support function st_centroid_agg', + ]); - describe('to_ip', () => { - testErrorsAndWarnings('row var = to_ip("a")', []); - testErrorsAndWarnings('row to_ip("a")', []); - testErrorsAndWarnings('from a_index | eval var = to_ip(stringField)', []); - testErrorsAndWarnings('from a_index | eval to_ip(stringField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = st_centroid_agg(cartesianPointField) > 0', + ['EVAL does not support function st_centroid_agg'] + ); - testErrorsAndWarnings('from a_index | eval var = to_ip(*)', [ - 'Using wildcards (*) in to_ip is not allowed', + testErrorsAndWarnings('from a_index | eval st_centroid_agg(cartesianPointField)', [ + 'EVAL does not support function st_centroid_agg', ]); - testErrorsAndWarnings('from a_index | sort to_ip(stringField)', []); - testErrorsAndWarnings('row var = to_ip(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row to_ip(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row var = to_ip(to_ip(to_ip("127.0.0.1")))', []); - testErrorsAndWarnings('row var = to_ip(to_string(true))', []); - - testErrorsAndWarnings('row var = to_ip(true)', [ - 'Argument of [to_ip] must be [ip], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | eval st_centroid_agg(cartesianPointField) > 0', [ + 'EVAL does not support function st_centroid_agg', ]); - testErrorsAndWarnings('from a_index | eval var = to_ip(ipField)', []); - testErrorsAndWarnings('from a_index | eval to_ip(ipField)', []); - testErrorsAndWarnings('from a_index | eval var = to_ip(to_ip(ipField))', []); + testErrorsAndWarnings('from a_index | eval var = st_centroid_agg(geoPointField)', [ + 'EVAL does not support function st_centroid_agg', + ]); - testErrorsAndWarnings('from a_index | eval to_ip(booleanField)', [ - 'Argument of [to_ip] must be [ip], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval var = st_centroid_agg(geoPointField) > 0', [ + 'EVAL does not support function st_centroid_agg', ]); - testErrorsAndWarnings('from a_index | eval var = to_ip(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval st_centroid_agg(geoPointField)', [ + 'EVAL does not support function st_centroid_agg', + ]); - testErrorsAndWarnings('from a_index | eval to_ip(ipField, extraArg)', [ - 'Error: [to_ip] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval st_centroid_agg(geoPointField) > 0', [ + 'EVAL does not support function st_centroid_agg', ]); - testErrorsAndWarnings('from a_index | sort to_ip(ipField)', []); - testErrorsAndWarnings('from a_index | eval to_ip(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_ip(nullVar)', []); + testErrorsAndWarnings('from a_index | stats st_centroid_agg(null)', []); + testErrorsAndWarnings('row nullVar = null | stats st_centroid_agg(nullVar)', []); }); - describe('to_long', () => { - testErrorsAndWarnings('row var = to_long("a")', []); - testErrorsAndWarnings('row to_long("a")', []); - testErrorsAndWarnings('from a_index | eval var = to_long(stringField)', []); - testErrorsAndWarnings('from a_index | eval to_long(stringField)', []); + describe('values', () => { + testErrorsAndWarnings('from a_index | stats var = values(textField)', []); + testErrorsAndWarnings('from a_index | stats values(textField)', []); - testErrorsAndWarnings('from a_index | eval var = to_long(*)', [ - 'Using wildcards (*) in to_long is not allowed', + testErrorsAndWarnings('from a_index | sort values(textField)', [ + 'SORT does not support function values', ]); - testErrorsAndWarnings('from a_index | sort to_long(stringField)', []); - testErrorsAndWarnings('row var = to_long(true)', []); - testErrorsAndWarnings('row to_long(true)', []); - testErrorsAndWarnings('row var = to_long(to_boolean(true))', []); - testErrorsAndWarnings('row var = to_long(5)', []); - testErrorsAndWarnings('row to_long(5)', []); - testErrorsAndWarnings('row var = to_long(to_integer(true))', []); - testErrorsAndWarnings('row var = to_long(now())', []); - testErrorsAndWarnings('row to_long(now())', []); - testErrorsAndWarnings('row var = to_long(to_datetime(now()))', []); - testErrorsAndWarnings('row var = to_long(to_string(true))', []); - - testErrorsAndWarnings('row var = to_long(to_cartesianpoint("POINT (30 10)"))', [ - 'Argument of [to_long] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + testErrorsAndWarnings('from a_index | where values(textField)', [ + 'WHERE does not support function values', ]); - testErrorsAndWarnings('from a_index | where to_long(booleanField) > 0', []); - - testErrorsAndWarnings('from a_index | where to_long(cartesianPointField) > 0', [ - 'Argument of [to_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | where values(textField) > 0', [ + 'WHERE does not support function values', ]); - testErrorsAndWarnings('from a_index | where to_long(numberField) > 0', []); - testErrorsAndWarnings('from a_index | where to_long(dateField) > 0', []); - testErrorsAndWarnings('from a_index | where to_long(stringField) > 0', []); - testErrorsAndWarnings('from a_index | eval var = to_long(booleanField)', []); - testErrorsAndWarnings('from a_index | eval to_long(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = to_long(to_boolean(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = values(textField)', [ + 'EVAL does not support function values', + ]); - testErrorsAndWarnings('from a_index | eval to_long(cartesianPointField)', [ - 'Argument of [to_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | eval var = values(textField) > 0', [ + 'EVAL does not support function values', ]); - testErrorsAndWarnings('from a_index | eval var = to_long(numberField)', []); - testErrorsAndWarnings('from a_index | eval to_long(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = to_long(to_integer(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = to_long(dateField)', []); - testErrorsAndWarnings('from a_index | eval to_long(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = to_long(to_datetime(dateField))', []); - testErrorsAndWarnings('from a_index | eval var = to_long(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval values(textField)', [ + 'EVAL does not support function values', + ]); - testErrorsAndWarnings('from a_index | eval to_long(booleanField, extraArg)', [ - 'Error: [to_long] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval values(textField) > 0', [ + 'EVAL does not support function values', ]); - testErrorsAndWarnings('from a_index | sort to_long(booleanField)', []); - testErrorsAndWarnings('from a_index | eval to_long(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_long(nullVar)', []); + testErrorsAndWarnings('from a_index | stats values(null)', []); + testErrorsAndWarnings('row nullVar = null | stats values(nullVar)', []); }); - describe('to_lower', () => { - testErrorsAndWarnings('row var = to_lower("a")', []); - testErrorsAndWarnings('row to_lower("a")', []); - testErrorsAndWarnings('row var = to_lower(to_string("a"))', []); + describe('top', () => { + testErrorsAndWarnings( + 'from a_index | stats var = top(textField, integerField, textField)', + ['Argument of [=] must be a constant, received [top(textField,integerField,textField)]'] + ); - testErrorsAndWarnings('row var = to_lower(5)', [ - 'Argument of [to_lower] must be [string], found value [5] type [number]', + testErrorsAndWarnings('from a_index | stats top(textField, integerField, textField)', [ + 'Argument of [top] must be a constant, received [integerField]', + 'Argument of [top] must be a constant, received [textField]', ]); - testErrorsAndWarnings('from a_index | where length(to_lower(stringField)) > 0', []); - - testErrorsAndWarnings('from a_index | where length(to_lower(numberField)) > 0', [ - 'Argument of [to_lower] must be [string], found value [numberField] type [number]', + testErrorsAndWarnings('from a_index | sort top(textField, integerField, textField)', [ + 'SORT does not support function top', ]); - testErrorsAndWarnings('from a_index | eval var = to_lower(stringField)', []); - testErrorsAndWarnings('from a_index | eval to_lower(stringField)', []); - testErrorsAndWarnings('from a_index | eval var = to_lower(to_string(stringField))', []); - - testErrorsAndWarnings('from a_index | eval to_lower(numberField)', [ - 'Argument of [to_lower] must be [string], found value [numberField] type [number]', + testErrorsAndWarnings('from a_index | where top(textField, integerField, textField)', [ + 'WHERE does not support function top', ]); - testErrorsAndWarnings('from a_index | eval to_lower(stringField, extraArg)', [ - 'Error: [to_lower] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | where top(textField, integerField, textField) > 0', [ + 'WHERE does not support function top', ]); - testErrorsAndWarnings('from a_index | eval var = to_lower(*)', [ - 'Using wildcards (*) in to_lower is not allowed', + testErrorsAndWarnings('from a_index | eval var = top(textField, integerField, textField)', [ + 'EVAL does not support function top', ]); - testErrorsAndWarnings('from a_index | sort to_lower(stringField)', []); - testErrorsAndWarnings('row var = to_lower(to_string(true))', []); + testErrorsAndWarnings( + 'from a_index | eval var = top(textField, integerField, textField) > 0', + ['EVAL does not support function top'] + ); - testErrorsAndWarnings('row var = to_lower(true)', [ - 'Argument of [to_lower] must be [string], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | eval top(textField, integerField, textField)', [ + 'EVAL does not support function top', ]); - testErrorsAndWarnings('from a_index | where length(to_lower(booleanField)) > 0', [ - 'Argument of [to_lower] must be [string], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval top(textField, integerField, textField) > 0', [ + 'EVAL does not support function top', ]); - testErrorsAndWarnings('from a_index | eval var = to_lower(to_string(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval to_lower(booleanField)', [ - 'Argument of [to_lower] must be [string], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | stats top(null, null, null)', []); + testErrorsAndWarnings('row nullVar = null | stats top(nullVar, nullVar, nullVar)', [ + 'Argument of [top] must be a constant, received [nullVar]', + 'Argument of [top] must be a constant, received [nullVar]', ]); - testErrorsAndWarnings('from a_index | eval to_lower(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_lower(nullVar)', []); - }); - - describe('to_radians', () => { - testErrorsAndWarnings('row var = to_radians(5)', []); - testErrorsAndWarnings('row to_radians(5)', []); - testErrorsAndWarnings('row var = to_radians(to_integer("a"))', []); - - testErrorsAndWarnings('row var = to_radians("a")', [ - 'Argument of [to_radians] must be [number], found value ["a"] type [string]', + testErrorsAndWarnings('from a_index | stats var = top(textField, integerField, "asc")', [ + 'Argument of [=] must be a constant, received [top(textField,integerField,"asc")]', ]); - testErrorsAndWarnings('from a_index | where to_radians(numberField) > 0', []); - - testErrorsAndWarnings('from a_index | where to_radians(stringField) > 0', [ - 'Argument of [to_radians] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | stats top(textField, integerField, "asc")', [ + 'Argument of [top] must be a constant, received [integerField]', ]); - testErrorsAndWarnings('from a_index | eval var = to_radians(numberField)', []); - testErrorsAndWarnings('from a_index | eval to_radians(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = to_radians(to_integer(stringField))', []); - - testErrorsAndWarnings('from a_index | eval to_radians(stringField)', [ - 'Argument of [to_radians] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | sort top(textField, integerField, "asc")', [ + 'SORT does not support function top', ]); - testErrorsAndWarnings('from a_index | eval to_radians(numberField, extraArg)', [ - 'Error: [to_radians] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | where top(textField, integerField, "asc")', [ + 'WHERE does not support function top', ]); - testErrorsAndWarnings('from a_index | eval var = to_radians(*)', [ - 'Using wildcards (*) in to_radians is not allowed', + testErrorsAndWarnings('from a_index | where top(textField, integerField, "asc") > 0', [ + 'WHERE does not support function top', ]); - testErrorsAndWarnings('from a_index | sort to_radians(numberField)', []); - testErrorsAndWarnings('row var = to_radians(to_integer(true))', []); - - testErrorsAndWarnings('row var = to_radians(true)', [ - 'Argument of [to_radians] must be [number], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | eval var = top(textField, integerField, "asc")', [ + 'EVAL does not support function top', ]); - testErrorsAndWarnings('from a_index | where to_radians(booleanField) > 0', [ - 'Argument of [to_radians] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval var = top(textField, integerField, "asc") > 0', [ + 'EVAL does not support function top', ]); - testErrorsAndWarnings('from a_index | eval var = to_radians(to_integer(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval to_radians(booleanField)', [ - 'Argument of [to_radians] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval top(textField, integerField, "asc")', [ + 'EVAL does not support function top', ]); - testErrorsAndWarnings('from a_index | eval to_radians(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_radians(nullVar)', []); - }); - - describe('to_string', () => { - testErrorsAndWarnings('row var = to_string("a")', []); - testErrorsAndWarnings('row to_string("a")', []); - testErrorsAndWarnings('row var = to_str("a")', []); - testErrorsAndWarnings('from a_index | eval var = to_string(stringField)', []); - testErrorsAndWarnings('from a_index | eval to_string(stringField)', []); - testErrorsAndWarnings('from a_index | eval var = to_str(stringField)', []); - testErrorsAndWarnings('from a_index | eval var = to_string(*)', [ - 'Using wildcards (*) in to_string is not allowed', + testErrorsAndWarnings('from a_index | eval top(textField, integerField, "asc") > 0', [ + 'EVAL does not support function top', ]); + }); - testErrorsAndWarnings('from a_index | sort to_string(stringField)', []); - testErrorsAndWarnings('row var = to_string(true)', []); - testErrorsAndWarnings('row to_string(true)', []); - testErrorsAndWarnings('row var = to_str(true)', []); - testErrorsAndWarnings('row var = to_string(to_boolean(true))', []); - testErrorsAndWarnings('row var = to_string(to_cartesianpoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row to_string(to_cartesianpoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = to_str(to_cartesianpoint("POINT (30 10)"))', []); - + describe('weighted_avg', () => { testErrorsAndWarnings( - 'row var = to_string(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats var = weighted_avg(doubleField, doubleField)', [] ); - - testErrorsAndWarnings('row var = to_string(to_cartesianshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row to_string(to_cartesianshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = to_str(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('from a_index | stats weighted_avg(doubleField, doubleField)', []); testErrorsAndWarnings( - 'row var = to_string(to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + 'from a_index | stats var = round(weighted_avg(doubleField, doubleField))', [] ); - testErrorsAndWarnings('row var = to_string(now())', []); - testErrorsAndWarnings('row to_string(now())', []); - testErrorsAndWarnings('row var = to_str(now())', []); - testErrorsAndWarnings('row var = to_string(to_datetime(now()))', []); - testErrorsAndWarnings('row var = to_string(5)', []); - testErrorsAndWarnings('row to_string(5)', []); - testErrorsAndWarnings('row var = to_str(5)', []); - testErrorsAndWarnings('row var = to_string(to_integer(true))', []); - testErrorsAndWarnings('row var = to_string(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row to_string(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = to_str(to_geopoint("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = to_string(to_geopoint(to_geopoint("POINT (30 10)")))', []); - testErrorsAndWarnings('row var = to_string(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row to_string(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = to_str(to_geoshape("POINT (30 10)"))', []); - testErrorsAndWarnings('row var = to_string(to_geoshape(to_geopoint("POINT (30 10)")))', []); - testErrorsAndWarnings('row var = to_string(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row to_string(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row var = to_str(to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row var = to_string(to_ip(to_ip("127.0.0.1")))', []); - testErrorsAndWarnings('row var = to_string(to_string(true))', []); - testErrorsAndWarnings('row var = to_string(to_version("1.0.0"))', []); - testErrorsAndWarnings('row to_string(to_version("1.0.0"))', []); - testErrorsAndWarnings('row var = to_str(to_version("1.0.0"))', []); - testErrorsAndWarnings('row var = to_string(to_version("a"))', []); - testErrorsAndWarnings('from a_index | where length(to_string(booleanField)) > 0', []); testErrorsAndWarnings( - 'from a_index | where length(to_string(cartesianPointField)) > 0', + 'from a_index | stats round(weighted_avg(doubleField, doubleField))', [] ); + testErrorsAndWarnings( - 'from a_index | where length(to_string(cartesianShapeField)) > 0', + 'from a_index | stats var = round(weighted_avg(doubleField, doubleField)) + weighted_avg(doubleField, doubleField)', [] ); - testErrorsAndWarnings('from a_index | where length(to_string(dateField)) > 0', []); - testErrorsAndWarnings('from a_index | where length(to_string(numberField)) > 0', []); - testErrorsAndWarnings('from a_index | where length(to_string(geoPointField)) > 0', []); - testErrorsAndWarnings('from a_index | where length(to_string(geoShapeField)) > 0', []); - testErrorsAndWarnings('from a_index | where length(to_string(ipField)) > 0', []); - testErrorsAndWarnings('from a_index | where length(to_string(stringField)) > 0', []); - testErrorsAndWarnings('from a_index | where length(to_string(versionField)) > 0', []); - testErrorsAndWarnings('from a_index | eval var = to_string(booleanField)', []); - testErrorsAndWarnings('from a_index | eval to_string(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = to_str(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = to_string(to_boolean(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = to_string(cartesianPointField)', []); - testErrorsAndWarnings('from a_index | eval to_string(cartesianPointField)', []); - testErrorsAndWarnings('from a_index | eval var = to_str(cartesianPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = to_string(to_cartesianpoint(cartesianPointField))', + 'from a_index | stats round(weighted_avg(doubleField, doubleField)) + weighted_avg(doubleField, doubleField)', [] ); - testErrorsAndWarnings('from a_index | eval var = to_string(cartesianShapeField)', []); - testErrorsAndWarnings('from a_index | eval to_string(cartesianShapeField)', []); - testErrorsAndWarnings('from a_index | eval var = to_str(cartesianShapeField)', []); - testErrorsAndWarnings( - 'from a_index | eval var = to_string(to_cartesianshape(cartesianPointField))', + 'from a_index | stats weighted_avg(doubleField / 2, doubleField)', [] ); - testErrorsAndWarnings('from a_index | eval var = to_string(dateField)', []); - testErrorsAndWarnings('from a_index | eval to_string(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = to_str(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = to_string(to_datetime(dateField))', []); - testErrorsAndWarnings('from a_index | eval var = to_string(numberField)', []); - testErrorsAndWarnings('from a_index | eval to_string(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = to_str(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = to_string(to_integer(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = to_string(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval to_string(geoPointField)', []); - testErrorsAndWarnings('from a_index | eval var = to_str(geoPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = to_string(to_geopoint(geoPointField))', + 'from a_index | stats var0 = weighted_avg(doubleField / 2, doubleField)', [] ); - testErrorsAndWarnings('from a_index | eval var = to_string(geoShapeField)', []); - testErrorsAndWarnings('from a_index | eval to_string(geoShapeField)', []); - testErrorsAndWarnings('from a_index | eval var = to_str(geoShapeField)', []); + testErrorsAndWarnings( - 'from a_index | eval var = to_string(to_geoshape(geoPointField))', + 'from a_index | stats avg(doubleField), weighted_avg(doubleField / 2, doubleField)', [] ); - testErrorsAndWarnings('from a_index | eval var = to_string(ipField)', []); - testErrorsAndWarnings('from a_index | eval to_string(ipField)', []); - testErrorsAndWarnings('from a_index | eval var = to_str(ipField)', []); - testErrorsAndWarnings('from a_index | eval var = to_string(to_ip(ipField))', []); - testErrorsAndWarnings('from a_index | eval var = to_string(to_string(booleanField))', []); - testErrorsAndWarnings('from a_index | eval var = to_string(versionField)', []); - testErrorsAndWarnings('from a_index | eval to_string(versionField)', []); - testErrorsAndWarnings('from a_index | eval var = to_str(versionField)', []); - testErrorsAndWarnings('from a_index | eval var = to_string(to_version(stringField))', []); - - testErrorsAndWarnings('from a_index | eval to_string(booleanField, extraArg)', [ - 'Error: [to_string] function expects exactly one argument, got 2.', - ]); - testErrorsAndWarnings('from a_index | sort to_string(booleanField)', []); - testErrorsAndWarnings('from a_index | eval to_string(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_string(nullVar)', []); - }); - - describe('to_unsigned_long', () => { - testErrorsAndWarnings('row var = to_unsigned_long("a")', []); - testErrorsAndWarnings('row to_unsigned_long("a")', []); - testErrorsAndWarnings('row var = to_ul("a")', []); - testErrorsAndWarnings('row var = to_ulong("a")', []); - testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(stringField)', []); - testErrorsAndWarnings('from a_index | eval to_unsigned_long(stringField)', []); - testErrorsAndWarnings('from a_index | eval var = to_ul(stringField)', []); - testErrorsAndWarnings('from a_index | eval var = to_ulong(stringField)', []); - - testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(*)', [ - 'Using wildcards (*) in to_unsigned_long is not allowed', - ]); - - testErrorsAndWarnings('from a_index | sort to_unsigned_long(stringField)', []); - testErrorsAndWarnings('row var = to_unsigned_long(true)', []); - testErrorsAndWarnings('row to_unsigned_long(true)', []); - testErrorsAndWarnings('row var = to_ul(true)', []); - testErrorsAndWarnings('row var = to_ulong(true)', []); - testErrorsAndWarnings('row var = to_unsigned_long(to_boolean(true))', []); - testErrorsAndWarnings('row var = to_unsigned_long(now())', []); - testErrorsAndWarnings('row to_unsigned_long(now())', []); - testErrorsAndWarnings('row var = to_ul(now())', []); - testErrorsAndWarnings('row var = to_ulong(now())', []); - testErrorsAndWarnings('row var = to_unsigned_long(to_datetime(now()))', []); - testErrorsAndWarnings('row var = to_unsigned_long(5)', []); - testErrorsAndWarnings('row to_unsigned_long(5)', []); - testErrorsAndWarnings('row var = to_ul(5)', []); - testErrorsAndWarnings('row var = to_ulong(5)', []); - testErrorsAndWarnings('row var = to_unsigned_long(to_integer(true))', []); - testErrorsAndWarnings('row var = to_unsigned_long(to_string(true))', []); - - testErrorsAndWarnings('row var = to_unsigned_long(to_cartesianpoint("POINT (30 10)"))', [ - 'Argument of [to_unsigned_long] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', - ]); - - testErrorsAndWarnings('from a_index | where to_unsigned_long(booleanField) > 0', []); - - testErrorsAndWarnings('from a_index | where to_unsigned_long(cartesianPointField) > 0', [ - 'Argument of [to_unsigned_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]', - ]); - - testErrorsAndWarnings('from a_index | where to_unsigned_long(dateField) > 0', []); - testErrorsAndWarnings('from a_index | where to_unsigned_long(numberField) > 0', []); - testErrorsAndWarnings('from a_index | where to_unsigned_long(stringField) > 0', []); - testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(booleanField)', []); - testErrorsAndWarnings('from a_index | eval to_unsigned_long(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = to_ul(booleanField)', []); - testErrorsAndWarnings('from a_index | eval var = to_ulong(booleanField)', []); testErrorsAndWarnings( - 'from a_index | eval var = to_unsigned_long(to_boolean(booleanField))', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField / 2, doubleField)', [] ); - testErrorsAndWarnings('from a_index | eval to_unsigned_long(cartesianPointField)', [ - 'Argument of [to_unsigned_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]', - ]); - - testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(dateField)', []); - testErrorsAndWarnings('from a_index | eval to_unsigned_long(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = to_ul(dateField)', []); - testErrorsAndWarnings('from a_index | eval var = to_ulong(dateField)', []); testErrorsAndWarnings( - 'from a_index | eval var = to_unsigned_long(to_datetime(dateField))', + 'from a_index | stats var0 = weighted_avg(doubleField, doubleField)', [] ); - testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(numberField)', []); - testErrorsAndWarnings('from a_index | eval to_unsigned_long(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = to_ul(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = to_ulong(numberField)', []); + testErrorsAndWarnings( - 'from a_index | eval var = to_unsigned_long(to_integer(booleanField))', + 'from a_index | stats avg(doubleField), weighted_avg(doubleField, doubleField)', [] ); + testErrorsAndWarnings( - 'from a_index | eval var = to_unsigned_long(to_string(booleanField))', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, doubleField)', [] ); - testErrorsAndWarnings('from a_index | eval to_unsigned_long(booleanField, extraArg)', [ - 'Error: [to_unsigned_long] function expects exactly one argument, got 2.', - ]); - - testErrorsAndWarnings('from a_index | sort to_unsigned_long(booleanField)', []); - testErrorsAndWarnings('from a_index | eval to_unsigned_long(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_unsigned_long(nullVar)', []); - }); - - describe('to_upper', () => { - testErrorsAndWarnings('row var = to_upper("a")', []); - testErrorsAndWarnings('row to_upper("a")', []); - testErrorsAndWarnings('row var = to_upper(to_string("a"))', []); - - testErrorsAndWarnings('row var = to_upper(5)', [ - 'Argument of [to_upper] must be [string], found value [5] type [number]', - ]); - - testErrorsAndWarnings('from a_index | where length(to_upper(stringField)) > 0', []); - - testErrorsAndWarnings('from a_index | where length(to_upper(numberField)) > 0', [ - 'Argument of [to_upper] must be [string], found value [numberField] type [number]', - ]); - - testErrorsAndWarnings('from a_index | eval var = to_upper(stringField)', []); - testErrorsAndWarnings('from a_index | eval to_upper(stringField)', []); - testErrorsAndWarnings('from a_index | eval var = to_upper(to_string(stringField))', []); - - testErrorsAndWarnings('from a_index | eval to_upper(numberField)', [ - 'Argument of [to_upper] must be [string], found value [numberField] type [number]', - ]); - - testErrorsAndWarnings('from a_index | eval to_upper(stringField, extraArg)', [ - 'Error: [to_upper] function expects exactly one argument, got 2.', - ]); - - testErrorsAndWarnings('from a_index | eval var = to_upper(*)', [ - 'Using wildcards (*) in to_upper is not allowed', - ]); - - testErrorsAndWarnings('from a_index | sort to_upper(stringField)', []); - testErrorsAndWarnings('row var = to_upper(to_string(true))', []); - - testErrorsAndWarnings('row var = to_upper(true)', [ - 'Argument of [to_upper] must be [string], found value [true] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | where length(to_upper(booleanField)) > 0', [ - 'Argument of [to_upper] must be [string], found value [booleanField] type [boolean]', - ]); - - testErrorsAndWarnings('from a_index | eval var = to_upper(to_string(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval to_upper(booleanField)', [ - 'Argument of [to_upper] must be [string], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | eval to_upper(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_upper(nullVar)', []); - }); - - describe('to_version', () => { - testErrorsAndWarnings('row var = to_version("a")', []); - testErrorsAndWarnings('row to_version("a")', []); - testErrorsAndWarnings('row var = to_ver("a")', []); - testErrorsAndWarnings('from a_index | eval var = to_version(stringField)', []); - testErrorsAndWarnings('from a_index | eval to_version(stringField)', []); - testErrorsAndWarnings('from a_index | eval var = to_ver(stringField)', []); - - testErrorsAndWarnings('from a_index | eval var = to_version(*)', [ - 'Using wildcards (*) in to_version is not allowed', - ]); - - testErrorsAndWarnings('from a_index | sort to_version(stringField)', []); - testErrorsAndWarnings('row var = to_version(to_version("1.0.0"))', []); - testErrorsAndWarnings('row to_version(to_version("1.0.0"))', []); - testErrorsAndWarnings('row var = to_ver(to_version("1.0.0"))', []); + testErrorsAndWarnings( + 'from a_index | stats weighted_avg(doubleField, doubleField) by round(doubleField / 2)', + [] + ); - testErrorsAndWarnings('row var = to_version(true)', [ - 'Argument of [to_version] must be [string], found value [true] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats var0 = weighted_avg(doubleField, doubleField) by var1 = round(doubleField / 2)', + [] + ); - testErrorsAndWarnings('from a_index | eval var = to_version(versionField)', []); - testErrorsAndWarnings('from a_index | eval to_version(versionField)', []); - testErrorsAndWarnings('from a_index | eval var = to_ver(versionField)', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), weighted_avg(doubleField, doubleField) by round(doubleField / 2), ipField', + [] + ); - testErrorsAndWarnings('from a_index | eval to_version(stringField, extraArg)', [ - 'Error: [to_version] function expects exactly one argument, got 2.', - ]); - testErrorsAndWarnings('from a_index | eval to_version(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_version(nullVar)', []); - }); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, doubleField) by var1 = round(doubleField / 2), ipField', + [] + ); - describe('trim', () => { - testErrorsAndWarnings('row var = trim("a")', []); - testErrorsAndWarnings('row trim("a")', []); - testErrorsAndWarnings('row var = trim(to_string("a"))', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), weighted_avg(doubleField, doubleField) by round(doubleField / 2), doubleField / 2', + [] + ); - testErrorsAndWarnings('row var = trim(5)', [ - 'Argument of [trim] must be [string], found value [5] type [number]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, doubleField) by var1 = round(doubleField / 2), doubleField / 2', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats var = weighted_avg(avg(integerField), avg(integerField))', + [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + ] + ); - testErrorsAndWarnings('from a_index | where length(trim(stringField)) > 0', []); + testErrorsAndWarnings( + 'from a_index | stats weighted_avg(avg(integerField), avg(integerField))', + [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", + ] + ); - testErrorsAndWarnings('from a_index | where length(trim(numberField)) > 0', [ - 'Argument of [trim] must be [string], found value [numberField] type [number]', + testErrorsAndWarnings('from a_index | stats weighted_avg(booleanField, booleanField)', [ + 'Argument of [weighted_avg] must be [double], found value [booleanField] type [boolean]', + 'Argument of [weighted_avg] must be [double], found value [booleanField] type [boolean]', ]); - testErrorsAndWarnings('from a_index | eval var = trim(stringField)', []); - testErrorsAndWarnings('from a_index | eval trim(stringField)', []); - testErrorsAndWarnings('from a_index | eval var = trim(to_string(stringField))', []); + testErrorsAndWarnings('from a_index | sort weighted_avg(doubleField, doubleField)', [ + 'SORT does not support function weighted_avg', + ]); - testErrorsAndWarnings('from a_index | eval trim(numberField)', [ - 'Argument of [trim] must be [string], found value [numberField] type [number]', + testErrorsAndWarnings('from a_index | where weighted_avg(doubleField, doubleField)', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval trim(stringField, extraArg)', [ - 'Error: [trim] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | where weighted_avg(doubleField, doubleField) > 0', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval var = trim(*)', [ - 'Using wildcards (*) in trim is not allowed', + testErrorsAndWarnings('from a_index | eval var = weighted_avg(doubleField, doubleField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | sort trim(stringField)', []); - testErrorsAndWarnings('row var = trim(to_string(true))', []); + testErrorsAndWarnings( + 'from a_index | eval var = weighted_avg(doubleField, doubleField) > 0', + ['EVAL does not support function weighted_avg'] + ); - testErrorsAndWarnings('row var = trim(true)', [ - 'Argument of [trim] must be [string], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | eval weighted_avg(doubleField, doubleField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | where length(trim(booleanField)) > 0', [ - 'Argument of [trim] must be [string], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval weighted_avg(doubleField, doubleField) > 0', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval var = trim(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | stats weighted_avg(null, null)', []); + testErrorsAndWarnings('row nullVar = null | stats weighted_avg(nullVar, nullVar)', []); + testErrorsAndWarnings( + 'from a_index | stats var = weighted_avg(doubleField, longField)', + [] + ); + testErrorsAndWarnings('from a_index | stats weighted_avg(doubleField, longField)', []); - testErrorsAndWarnings('from a_index | eval trim(booleanField)', [ - 'Argument of [trim] must be [string], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | eval trim(null)', []); - testErrorsAndWarnings('row nullVar = null | eval trim(nullVar)', []); - }); + testErrorsAndWarnings( + 'from a_index | stats var = round(weighted_avg(doubleField, longField))', + [] + ); - describe('avg', () => { - testErrorsAndWarnings('from a_index | stats var = avg(numberField)', []); - testErrorsAndWarnings('from a_index | stats avg(numberField)', []); - testErrorsAndWarnings('from a_index | stats var = round(avg(numberField))', []); - testErrorsAndWarnings('from a_index | stats round(avg(numberField))', []); + testErrorsAndWarnings( + 'from a_index | stats round(weighted_avg(doubleField, longField))', + [] + ); testErrorsAndWarnings( - 'from a_index | stats var = round(avg(numberField)) + avg(numberField)', + 'from a_index | stats var = round(weighted_avg(doubleField, longField)) + weighted_avg(doubleField, longField)', [] ); testErrorsAndWarnings( - 'from a_index | stats round(avg(numberField)) + avg(numberField)', + 'from a_index | stats round(weighted_avg(doubleField, longField)) + weighted_avg(doubleField, longField)', [] ); - testErrorsAndWarnings('from a_index | stats avg(numberField / 2)', []); - testErrorsAndWarnings('from a_index | stats var0 = avg(numberField / 2)', []); - testErrorsAndWarnings('from a_index | stats avg(numberField), avg(numberField / 2)', []); + + testErrorsAndWarnings('from a_index | stats weighted_avg(doubleField / 2, longField)', []); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = avg(numberField / 2)', + 'from a_index | stats var0 = weighted_avg(doubleField / 2, longField)', [] ); - testErrorsAndWarnings('from a_index | stats var0 = avg(numberField)', []); - testErrorsAndWarnings('from a_index | stats avg(numberField), avg(numberField)', []); - testErrorsAndWarnings('from a_index | stats avg(numberField), var0 = avg(numberField)', []); + testErrorsAndWarnings( - 'from a_index | stats avg(numberField) by round(numberField / 2)', + 'from a_index | stats avg(doubleField), weighted_avg(doubleField / 2, longField)', [] ); testErrorsAndWarnings( - 'from a_index | stats var0 = avg(numberField) by var1 = round(numberField / 2)', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField / 2, longField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), avg(numberField) by round(numberField / 2), ipField', + 'from a_index | stats var0 = weighted_avg(doubleField, longField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = avg(numberField) by var1 = round(numberField / 2), ipField', + 'from a_index | stats avg(doubleField), weighted_avg(doubleField, longField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), avg(numberField) by round(numberField / 2), numberField / 2', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, longField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = avg(numberField) by var1 = round(numberField / 2), numberField / 2', + 'from a_index | stats weighted_avg(doubleField, longField) by round(doubleField / 2)', [] ); - testErrorsAndWarnings('from a_index | stats var = avg(avg(numberField))', [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", - ]); + testErrorsAndWarnings( + 'from a_index | stats var0 = weighted_avg(doubleField, longField) by var1 = round(doubleField / 2)', + [] + ); - testErrorsAndWarnings('from a_index | stats avg(avg(numberField))', [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), weighted_avg(doubleField, longField) by round(doubleField / 2), ipField', + [] + ); - testErrorsAndWarnings('from a_index | stats avg(stringField)', [ - 'Argument of [avg] must be [number], found value [stringField] type [string]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, longField) by var1 = round(doubleField / 2), ipField', + [] + ); - testErrorsAndWarnings('from a_index | stats var = avg(*)', [ - 'Using wildcards (*) in avg is not allowed', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), weighted_avg(doubleField, longField) by round(doubleField / 2), doubleField / 2', + [] + ); - testErrorsAndWarnings('from a_index | sort avg(numberField)', [ - 'SORT does not support function avg', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, longField) by var1 = round(doubleField / 2), doubleField / 2', + [] + ); - testErrorsAndWarnings('from a_index | where avg(numberField)', [ - 'WHERE does not support function avg', - ]); + testErrorsAndWarnings( + 'from a_index | stats var = weighted_avg(doubleField, integerField)', + [] + ); + testErrorsAndWarnings('from a_index | stats weighted_avg(doubleField, integerField)', []); - testErrorsAndWarnings('from a_index | where avg(numberField) > 0', [ - 'WHERE does not support function avg', - ]); + testErrorsAndWarnings( + 'from a_index | stats var = round(weighted_avg(doubleField, integerField))', + [] + ); - testErrorsAndWarnings('from a_index | eval var = avg(numberField)', [ - 'EVAL does not support function avg', - ]); + testErrorsAndWarnings( + 'from a_index | stats round(weighted_avg(doubleField, integerField))', + [] + ); - testErrorsAndWarnings('from a_index | eval var = avg(numberField) > 0', [ - 'EVAL does not support function avg', - ]); + testErrorsAndWarnings( + 'from a_index | stats var = round(weighted_avg(doubleField, integerField)) + weighted_avg(doubleField, integerField)', + [] + ); - testErrorsAndWarnings('from a_index | eval avg(numberField)', [ - 'EVAL does not support function avg', - ]); + testErrorsAndWarnings( + 'from a_index | stats round(weighted_avg(doubleField, integerField)) + weighted_avg(doubleField, integerField)', + [] + ); - testErrorsAndWarnings('from a_index | eval avg(numberField) > 0', [ - 'EVAL does not support function avg', - ]); + testErrorsAndWarnings( + 'from a_index | stats weighted_avg(doubleField / 2, integerField)', + [] + ); - testErrorsAndWarnings('from a_index | stats avg(booleanField)', [ - 'Argument of [avg] must be [number], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | stats avg(null)', []); - testErrorsAndWarnings('row nullVar = null | stats avg(nullVar)', []); - }); + testErrorsAndWarnings( + 'from a_index | stats var0 = weighted_avg(doubleField / 2, integerField)', + [] + ); - describe('sum', () => { - testErrorsAndWarnings('from a_index | stats var = sum(numberField)', []); - testErrorsAndWarnings('from a_index | stats sum(numberField)', []); - testErrorsAndWarnings('from a_index | stats var = round(sum(numberField))', []); - testErrorsAndWarnings('from a_index | stats round(sum(numberField))', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), weighted_avg(doubleField / 2, integerField)', + [] + ); testErrorsAndWarnings( - 'from a_index | stats var = round(sum(numberField)) + sum(numberField)', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField / 2, integerField)', [] ); testErrorsAndWarnings( - 'from a_index | stats round(sum(numberField)) + sum(numberField)', + 'from a_index | stats var0 = weighted_avg(doubleField, integerField)', [] ); - testErrorsAndWarnings('from a_index | stats sum(numberField / 2)', []); - testErrorsAndWarnings('from a_index | stats var0 = sum(numberField / 2)', []); - testErrorsAndWarnings('from a_index | stats avg(numberField), sum(numberField / 2)', []); + testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = sum(numberField / 2)', + 'from a_index | stats avg(doubleField), weighted_avg(doubleField, integerField)', [] ); - testErrorsAndWarnings('from a_index | stats var0 = sum(numberField)', []); - testErrorsAndWarnings('from a_index | stats avg(numberField), sum(numberField)', []); - testErrorsAndWarnings('from a_index | stats avg(numberField), var0 = sum(numberField)', []); + testErrorsAndWarnings( - 'from a_index | stats sum(numberField) by round(numberField / 2)', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, integerField)', [] ); testErrorsAndWarnings( - 'from a_index | stats var0 = sum(numberField) by var1 = round(numberField / 2)', + 'from a_index | stats weighted_avg(doubleField, integerField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), sum(numberField) by round(numberField / 2), ipField', + 'from a_index | stats var0 = weighted_avg(doubleField, integerField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = sum(numberField) by var1 = round(numberField / 2), ipField', + 'from a_index | stats avg(doubleField), weighted_avg(doubleField, integerField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), sum(numberField) by round(numberField / 2), numberField / 2', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, integerField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = sum(numberField) by var1 = round(numberField / 2), numberField / 2', + 'from a_index | stats avg(doubleField), weighted_avg(doubleField, integerField) by round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('from a_index | stats var = sum(avg(numberField))', [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, integerField) by var1 = round(doubleField / 2), doubleField / 2', + [] + ); - testErrorsAndWarnings('from a_index | stats sum(avg(numberField))', [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", - ]); + testErrorsAndWarnings( + 'from a_index | stats var = weighted_avg(longField, doubleField)', + [] + ); + testErrorsAndWarnings('from a_index | stats weighted_avg(longField, doubleField)', []); - testErrorsAndWarnings('from a_index | stats sum(stringField)', [ - 'Argument of [sum] must be [number], found value [stringField] type [string]', - ]); + testErrorsAndWarnings( + 'from a_index | stats var = round(weighted_avg(longField, doubleField))', + [] + ); - testErrorsAndWarnings('from a_index | stats var = sum(*)', [ - 'Using wildcards (*) in sum is not allowed', - ]); + testErrorsAndWarnings( + 'from a_index | stats round(weighted_avg(longField, doubleField))', + [] + ); - testErrorsAndWarnings('from a_index | sort sum(numberField)', [ - 'SORT does not support function sum', - ]); + testErrorsAndWarnings( + 'from a_index | stats var = round(weighted_avg(longField, doubleField)) + weighted_avg(longField, doubleField)', + [] + ); - testErrorsAndWarnings('from a_index | where sum(numberField)', [ - 'WHERE does not support function sum', - ]); + testErrorsAndWarnings( + 'from a_index | stats round(weighted_avg(longField, doubleField)) + weighted_avg(longField, doubleField)', + [] + ); - testErrorsAndWarnings('from a_index | where sum(numberField) > 0', [ - 'WHERE does not support function sum', - ]); + testErrorsAndWarnings( + 'from a_index | stats var0 = weighted_avg(longField, doubleField)', + [] + ); - testErrorsAndWarnings('from a_index | eval var = sum(numberField)', [ - 'EVAL does not support function sum', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), weighted_avg(longField, doubleField)', + [] + ); - testErrorsAndWarnings('from a_index | eval var = sum(numberField) > 0', [ - 'EVAL does not support function sum', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = weighted_avg(longField, doubleField)', + [] + ); - testErrorsAndWarnings('from a_index | eval sum(numberField)', [ - 'EVAL does not support function sum', - ]); + testErrorsAndWarnings( + 'from a_index | stats weighted_avg(longField, doubleField) by round(doubleField / 2)', + [] + ); - testErrorsAndWarnings('from a_index | eval sum(numberField) > 0', [ - 'EVAL does not support function sum', - ]); + testErrorsAndWarnings( + 'from a_index | stats var0 = weighted_avg(longField, doubleField) by var1 = round(doubleField / 2)', + [] + ); - testErrorsAndWarnings('from a_index | stats sum(booleanField)', [ - 'Argument of [sum] must be [number], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | stats sum(null)', []); - testErrorsAndWarnings('row nullVar = null | stats sum(nullVar)', []); - }); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), weighted_avg(longField, doubleField) by round(doubleField / 2), ipField', + [] + ); - describe('median', () => { - testErrorsAndWarnings('from a_index | stats var = median(numberField)', []); - testErrorsAndWarnings('from a_index | stats median(numberField)', []); - testErrorsAndWarnings('from a_index | stats var = round(median(numberField))', []); - testErrorsAndWarnings('from a_index | stats round(median(numberField))', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = weighted_avg(longField, doubleField) by var1 = round(doubleField / 2), ipField', + [] + ); testErrorsAndWarnings( - 'from a_index | stats var = round(median(numberField)) + median(numberField)', + 'from a_index | stats avg(doubleField), weighted_avg(longField, doubleField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | stats round(median(numberField)) + median(numberField)', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(longField, doubleField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('from a_index | stats median(numberField / 2)', []); - testErrorsAndWarnings('from a_index | stats var0 = median(numberField / 2)', []); - testErrorsAndWarnings('from a_index | stats avg(numberField), median(numberField / 2)', []); + testErrorsAndWarnings('from a_index | stats var = weighted_avg(longField, longField)', []); + testErrorsAndWarnings('from a_index | stats weighted_avg(longField, longField)', []); + testErrorsAndWarnings( + 'from a_index | stats var = round(weighted_avg(longField, longField))', + [] + ); + testErrorsAndWarnings('from a_index | stats round(weighted_avg(longField, longField))', []); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = median(numberField / 2)', + 'from a_index | stats var = round(weighted_avg(longField, longField)) + weighted_avg(longField, longField)', [] ); - testErrorsAndWarnings('from a_index | stats var0 = median(numberField)', []); - testErrorsAndWarnings('from a_index | stats avg(numberField), median(numberField)', []); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = median(numberField)', + 'from a_index | stats round(weighted_avg(longField, longField)) + weighted_avg(longField, longField)', [] ); + + testErrorsAndWarnings('from a_index | stats var0 = weighted_avg(longField, longField)', []); + testErrorsAndWarnings( - 'from a_index | stats median(numberField) by round(numberField / 2)', + 'from a_index | stats avg(doubleField), weighted_avg(longField, longField)', [] ); testErrorsAndWarnings( - 'from a_index | stats var0 = median(numberField) by var1 = round(numberField / 2)', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(longField, longField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), median(numberField) by round(numberField / 2), ipField', + 'from a_index | stats weighted_avg(longField, longField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = median(numberField) by var1 = round(numberField / 2), ipField', + 'from a_index | stats var0 = weighted_avg(longField, longField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), median(numberField) by round(numberField / 2), numberField / 2', + 'from a_index | stats avg(doubleField), weighted_avg(longField, longField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = median(numberField) by var1 = round(numberField / 2), numberField / 2', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(longField, longField) by var1 = round(doubleField / 2), ipField', [] ); - testErrorsAndWarnings('from a_index | stats var = median(avg(numberField))', [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), weighted_avg(longField, longField) by round(doubleField / 2), doubleField / 2', + [] + ); - testErrorsAndWarnings('from a_index | stats median(avg(numberField))', [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = weighted_avg(longField, longField) by var1 = round(doubleField / 2), doubleField / 2', + [] + ); - testErrorsAndWarnings('from a_index | stats median(stringField)', [ - 'Argument of [median] must be [number], found value [stringField] type [string]', - ]); + testErrorsAndWarnings( + 'from a_index | stats var = weighted_avg(longField, integerField)', + [] + ); + testErrorsAndWarnings('from a_index | stats weighted_avg(longField, integerField)', []); - testErrorsAndWarnings('from a_index | stats var = median(*)', [ - 'Using wildcards (*) in median is not allowed', - ]); + testErrorsAndWarnings( + 'from a_index | stats var = round(weighted_avg(longField, integerField))', + [] + ); - testErrorsAndWarnings('from a_index | sort median(numberField)', [ - 'SORT does not support function median', - ]); + testErrorsAndWarnings( + 'from a_index | stats round(weighted_avg(longField, integerField))', + [] + ); - testErrorsAndWarnings('from a_index | where median(numberField)', [ - 'WHERE does not support function median', - ]); + testErrorsAndWarnings( + 'from a_index | stats var = round(weighted_avg(longField, integerField)) + weighted_avg(longField, integerField)', + [] + ); - testErrorsAndWarnings('from a_index | where median(numberField) > 0', [ - 'WHERE does not support function median', - ]); + testErrorsAndWarnings( + 'from a_index | stats round(weighted_avg(longField, integerField)) + weighted_avg(longField, integerField)', + [] + ); - testErrorsAndWarnings('from a_index | eval var = median(numberField)', [ - 'EVAL does not support function median', - ]); + testErrorsAndWarnings( + 'from a_index | stats var0 = weighted_avg(longField, integerField)', + [] + ); - testErrorsAndWarnings('from a_index | eval var = median(numberField) > 0', [ - 'EVAL does not support function median', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), weighted_avg(longField, integerField)', + [] + ); - testErrorsAndWarnings('from a_index | eval median(numberField)', [ - 'EVAL does not support function median', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = weighted_avg(longField, integerField)', + [] + ); - testErrorsAndWarnings('from a_index | eval median(numberField) > 0', [ - 'EVAL does not support function median', - ]); + testErrorsAndWarnings( + 'from a_index | stats weighted_avg(longField, integerField) by round(doubleField / 2)', + [] + ); - testErrorsAndWarnings('from a_index | stats median(booleanField)', [ - 'Argument of [median] must be [number], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | stats median(null)', []); - testErrorsAndWarnings('row nullVar = null | stats median(nullVar)', []); - }); + testErrorsAndWarnings( + 'from a_index | stats var0 = weighted_avg(longField, integerField) by var1 = round(doubleField / 2)', + [] + ); - describe('median_absolute_deviation', () => { testErrorsAndWarnings( - 'from a_index | stats var = median_absolute_deviation(numberField)', + 'from a_index | stats avg(doubleField), weighted_avg(longField, integerField) by round(doubleField / 2), ipField', [] ); - testErrorsAndWarnings('from a_index | stats median_absolute_deviation(numberField)', []); testErrorsAndWarnings( - 'from a_index | stats var = round(median_absolute_deviation(numberField))', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(longField, integerField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | stats round(median_absolute_deviation(numberField))', + 'from a_index | stats avg(doubleField), weighted_avg(longField, integerField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | stats var = round(median_absolute_deviation(numberField)) + median_absolute_deviation(numberField)', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(longField, integerField) by var1 = round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | stats round(median_absolute_deviation(numberField)) + median_absolute_deviation(numberField)', + 'from a_index | stats var = weighted_avg(integerField, doubleField)', [] ); + testErrorsAndWarnings('from a_index | stats weighted_avg(integerField, doubleField)', []); testErrorsAndWarnings( - 'from a_index | stats median_absolute_deviation(numberField / 2)', + 'from a_index | stats var = round(weighted_avg(integerField, doubleField))', [] ); testErrorsAndWarnings( - 'from a_index | stats var0 = median_absolute_deviation(numberField / 2)', + 'from a_index | stats round(weighted_avg(integerField, doubleField))', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), median_absolute_deviation(numberField / 2)', + 'from a_index | stats var = round(weighted_avg(integerField, doubleField)) + weighted_avg(integerField, doubleField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField / 2)', + 'from a_index | stats round(weighted_avg(integerField, doubleField)) + weighted_avg(integerField, doubleField)', [] ); testErrorsAndWarnings( - 'from a_index | stats var0 = median_absolute_deviation(numberField)', + 'from a_index | stats var0 = weighted_avg(integerField, doubleField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), median_absolute_deviation(numberField)', + 'from a_index | stats avg(doubleField), weighted_avg(integerField, doubleField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField)', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, doubleField)', [] ); testErrorsAndWarnings( - 'from a_index | stats median_absolute_deviation(numberField) by round(numberField / 2)', + 'from a_index | stats weighted_avg(integerField, doubleField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | stats var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2)', + 'from a_index | stats var0 = weighted_avg(integerField, doubleField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), median_absolute_deviation(numberField) by round(numberField / 2), ipField', + 'from a_index | stats avg(doubleField), weighted_avg(integerField, doubleField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2), ipField', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, doubleField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), median_absolute_deviation(numberField) by round(numberField / 2), numberField / 2', + 'from a_index | stats avg(doubleField), weighted_avg(integerField, doubleField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2), numberField / 2', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, doubleField) by var1 = round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | stats var = median_absolute_deviation(avg(numberField))', - [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", - ] + 'from a_index | stats var = weighted_avg(integerField, longField)', + [] ); - - testErrorsAndWarnings('from a_index | stats median_absolute_deviation(avg(numberField))', [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", - ]); - - testErrorsAndWarnings('from a_index | stats median_absolute_deviation(stringField)', [ - 'Argument of [median_absolute_deviation] must be [number], found value [stringField] type [string]', - ]); - - testErrorsAndWarnings('from a_index | stats var = median_absolute_deviation(*)', [ - 'Using wildcards (*) in median_absolute_deviation is not allowed', - ]); - - testErrorsAndWarnings('from a_index | sort median_absolute_deviation(numberField)', [ - 'SORT does not support function median_absolute_deviation', - ]); - - testErrorsAndWarnings('from a_index | where median_absolute_deviation(numberField)', [ - 'WHERE does not support function median_absolute_deviation', - ]); - - testErrorsAndWarnings('from a_index | where median_absolute_deviation(numberField) > 0', [ - 'WHERE does not support function median_absolute_deviation', - ]); - - testErrorsAndWarnings('from a_index | eval var = median_absolute_deviation(numberField)', [ - 'EVAL does not support function median_absolute_deviation', - ]); + testErrorsAndWarnings('from a_index | stats weighted_avg(integerField, longField)', []); testErrorsAndWarnings( - 'from a_index | eval var = median_absolute_deviation(numberField) > 0', - ['EVAL does not support function median_absolute_deviation'] + 'from a_index | stats var = round(weighted_avg(integerField, longField))', + [] ); - testErrorsAndWarnings('from a_index | eval median_absolute_deviation(numberField)', [ - 'EVAL does not support function median_absolute_deviation', - ]); - - testErrorsAndWarnings('from a_index | eval median_absolute_deviation(numberField) > 0', [ - 'EVAL does not support function median_absolute_deviation', - ]); - - testErrorsAndWarnings('from a_index | stats median_absolute_deviation(booleanField)', [ - 'Argument of [median_absolute_deviation] must be [number], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | stats median_absolute_deviation(null)', []); - testErrorsAndWarnings('row nullVar = null | stats median_absolute_deviation(nullVar)', []); - }); - - describe('percentile', () => { - testErrorsAndWarnings('from a_index | stats var = percentile(numberField, 5)', []); - testErrorsAndWarnings('from a_index | stats percentile(numberField, 5)', []); - testErrorsAndWarnings('from a_index | stats var = round(percentile(numberField, 5))', []); - testErrorsAndWarnings('from a_index | stats round(percentile(numberField, 5))', []); - testErrorsAndWarnings( - 'from a_index | stats var = round(percentile(numberField, 5)) + percentile(numberField, 5)', + 'from a_index | stats round(weighted_avg(integerField, longField))', [] ); testErrorsAndWarnings( - 'from a_index | stats round(percentile(numberField, 5)) + percentile(numberField, 5)', + 'from a_index | stats var = round(weighted_avg(integerField, longField)) + weighted_avg(integerField, longField)', [] ); - testErrorsAndWarnings('from a_index | stats percentile(numberField, numberField)', [ - 'Argument of [percentile] must be a constant, received [numberField]', - ]); - - testErrorsAndWarnings('from a_index | stats percentile(numberField / 2, 5)', []); - testErrorsAndWarnings('from a_index | stats var0 = percentile(numberField / 2, 5)', []); - testErrorsAndWarnings( - 'from a_index | stats avg(numberField), percentile(numberField / 2, 5)', + 'from a_index | stats round(weighted_avg(integerField, longField)) + weighted_avg(integerField, longField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = percentile(numberField / 2, 5)', + 'from a_index | stats var0 = weighted_avg(integerField, longField)', [] ); - testErrorsAndWarnings('from a_index | stats var0 = percentile(numberField, 5)', []); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), percentile(numberField, 5)', + 'from a_index | stats avg(doubleField), weighted_avg(integerField, longField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = percentile(numberField, 5)', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, longField)', [] ); testErrorsAndWarnings( - 'from a_index | stats percentile(numberField, 5) by round(numberField / 2)', + 'from a_index | stats weighted_avg(integerField, longField) by round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | stats var0 = percentile(numberField, 5) by var1 = round(numberField / 2)', + 'from a_index | stats var0 = weighted_avg(integerField, longField) by var1 = round(doubleField / 2)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), percentile(numberField, 5) by round(numberField / 2), ipField', + 'from a_index | stats avg(doubleField), weighted_avg(integerField, longField) by round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = percentile(numberField, 5) by var1 = round(numberField / 2), ipField', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, longField) by var1 = round(doubleField / 2), ipField', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), percentile(numberField, 5) by round(numberField / 2), numberField / 2', + 'from a_index | stats avg(doubleField), weighted_avg(integerField, longField) by round(doubleField / 2), doubleField / 2', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = percentile(numberField, 5) by var1 = round(numberField / 2), numberField / 2', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, longField) by var1 = round(doubleField / 2), doubleField / 2', [] ); - testErrorsAndWarnings('from a_index | stats var = percentile(avg(numberField), 5)', [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", - ]); - - testErrorsAndWarnings('from a_index | stats percentile(avg(numberField), 5)', [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", - ]); - - testErrorsAndWarnings('from a_index | stats percentile(stringField, 5)', [ - 'Argument of [percentile] must be [number], found value [stringField] type [string]', - ]); - - testErrorsAndWarnings('from a_index | sort percentile(numberField, 5)', [ - 'SORT does not support function percentile', - ]); - - testErrorsAndWarnings('from a_index | where percentile(numberField, 5)', [ - 'WHERE does not support function percentile', - ]); - - testErrorsAndWarnings('from a_index | where percentile(numberField, 5) > 0', [ - 'WHERE does not support function percentile', - ]); - - testErrorsAndWarnings('from a_index | eval var = percentile(numberField, 5)', [ - 'EVAL does not support function percentile', - ]); - - testErrorsAndWarnings('from a_index | eval var = percentile(numberField, 5) > 0', [ - 'EVAL does not support function percentile', - ]); - - testErrorsAndWarnings('from a_index | eval percentile(numberField, 5)', [ - 'EVAL does not support function percentile', - ]); - - testErrorsAndWarnings('from a_index | eval percentile(numberField, 5) > 0', [ - 'EVAL does not support function percentile', - ]); - - testErrorsAndWarnings('from a_index | stats percentile(booleanField, 5)', [ - 'Argument of [percentile] must be [number], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | stats percentile(null, null)', []); - testErrorsAndWarnings('row nullVar = null | stats percentile(nullVar, nullVar)', [ - 'Argument of [percentile] must be a constant, received [nullVar]', - ]); - }); - - describe('max', () => { - testErrorsAndWarnings('from a_index | stats var = max(numberField)', []); - testErrorsAndWarnings('from a_index | stats max(numberField)', []); - testErrorsAndWarnings('from a_index | stats var = round(max(numberField))', []); - testErrorsAndWarnings('from a_index | stats round(max(numberField))', []); - testErrorsAndWarnings( - 'from a_index | stats var = round(max(numberField)) + max(numberField)', + 'from a_index | stats var = weighted_avg(integerField, integerField)', [] ); + testErrorsAndWarnings('from a_index | stats weighted_avg(integerField, integerField)', []); testErrorsAndWarnings( - 'from a_index | stats round(max(numberField)) + max(numberField)', + 'from a_index | stats var = round(weighted_avg(integerField, integerField))', [] ); - testErrorsAndWarnings('from a_index | stats max(numberField / 2)', []); - testErrorsAndWarnings('from a_index | stats var0 = max(numberField / 2)', []); - testErrorsAndWarnings('from a_index | stats avg(numberField), max(numberField / 2)', []); + testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = max(numberField / 2)', + 'from a_index | stats round(weighted_avg(integerField, integerField))', [] ); - testErrorsAndWarnings('from a_index | stats var0 = max(numberField)', []); - testErrorsAndWarnings('from a_index | stats avg(numberField), max(numberField)', []); - testErrorsAndWarnings('from a_index | stats avg(numberField), var0 = max(numberField)', []); + testErrorsAndWarnings( - 'from a_index | stats max(numberField) by round(numberField / 2)', + 'from a_index | stats var = round(weighted_avg(integerField, integerField)) + weighted_avg(integerField, integerField)', [] ); testErrorsAndWarnings( - 'from a_index | stats var0 = max(numberField) by var1 = round(numberField / 2)', + 'from a_index | stats round(weighted_avg(integerField, integerField)) + weighted_avg(integerField, integerField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), max(numberField) by round(numberField / 2), ipField', + 'from a_index | stats var0 = weighted_avg(integerField, integerField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = max(numberField) by var1 = round(numberField / 2), ipField', + 'from a_index | stats avg(doubleField), weighted_avg(integerField, integerField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), max(numberField) by round(numberField / 2), numberField / 2', + 'from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, integerField)', [] ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = max(numberField) by var1 = round(numberField / 2), numberField / 2', + 'from a_index | stats weighted_avg(integerField, integerField) by round(doubleField / 2)', [] ); - testErrorsAndWarnings('from a_index | stats var = max(avg(numberField))', [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", - ]); - - testErrorsAndWarnings('from a_index | stats max(avg(numberField))', [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", - ]); - - testErrorsAndWarnings('from a_index | stats max(stringField)', [ - 'Argument of [max] must be [number], found value [stringField] type [string]', - ]); - - testErrorsAndWarnings('from a_index | stats var = max(*)', [ - 'Using wildcards (*) in max is not allowed', - ]); - - testErrorsAndWarnings('from a_index | stats var = max(dateField)', []); - testErrorsAndWarnings('from a_index | stats max(dateField)', []); - testErrorsAndWarnings('from a_index | stats var = round(max(dateField))', []); - testErrorsAndWarnings('from a_index | stats round(max(dateField))', []); testErrorsAndWarnings( - 'from a_index | stats var = round(max(dateField)) + max(dateField)', + 'from a_index | stats var0 = weighted_avg(integerField, integerField) by var1 = round(doubleField / 2)', [] ); - testErrorsAndWarnings('from a_index | stats round(max(dateField)) + max(dateField)', []); - - testErrorsAndWarnings('from a_index | sort max(numberField)', [ - 'SORT does not support function max', - ]); - testErrorsAndWarnings('from a_index | where max(numberField)', [ - 'WHERE does not support function max', - ]); - - testErrorsAndWarnings('from a_index | where max(numberField) > 0', [ - 'WHERE does not support function max', - ]); - - testErrorsAndWarnings('from a_index | where max(dateField)', [ - 'WHERE does not support function max', - ]); - - testErrorsAndWarnings('from a_index | where max(dateField) > 0', [ - 'WHERE does not support function max', - ]); - - testErrorsAndWarnings('from a_index | eval var = max(numberField)', [ - 'EVAL does not support function max', - ]); - - testErrorsAndWarnings('from a_index | eval var = max(numberField) > 0', [ - 'EVAL does not support function max', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), weighted_avg(integerField, integerField) by round(doubleField / 2), ipField', + [] + ); - testErrorsAndWarnings('from a_index | eval max(numberField)', [ - 'EVAL does not support function max', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, integerField) by var1 = round(doubleField / 2), ipField', + [] + ); - testErrorsAndWarnings('from a_index | eval max(numberField) > 0', [ - 'EVAL does not support function max', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), weighted_avg(integerField, integerField) by round(doubleField / 2), doubleField / 2', + [] + ); - testErrorsAndWarnings('from a_index | eval var = max(dateField)', [ - 'EVAL does not support function max', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, integerField) by var1 = round(doubleField / 2), doubleField / 2', + [] + ); - testErrorsAndWarnings('from a_index | eval var = max(dateField) > 0', [ - 'EVAL does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(doubleField, longField)', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval max(dateField)', [ - 'EVAL does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(doubleField, longField) > 0', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval max(dateField) > 0', [ - 'EVAL does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(doubleField, integerField)', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | stats max(booleanField)', []); - testErrorsAndWarnings('from a_index | stats max(null)', []); - testErrorsAndWarnings('row nullVar = null | stats max(nullVar)', []); - testErrorsAndWarnings('from a_index | stats max("2022")', []); - testErrorsAndWarnings('from a_index | stats max(concat("20", "22"))', [ - 'Argument of [max] must be [number], found value [concat("20","22")] type [string]', + testErrorsAndWarnings('from a_index | where weighted_avg(doubleField, integerField) > 0', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | stats max(cartesianPointField)', [ - 'Argument of [max] must be [number], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | where weighted_avg(longField, doubleField)', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | stats var = max(booleanField)', []); - - testErrorsAndWarnings('from a_index | where max(booleanField)', [ - 'WHERE does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(longField, doubleField) > 0', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | where max(booleanField) > 0', [ - 'WHERE does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(longField, longField)', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval var = max(booleanField)', [ - 'EVAL does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(longField, longField) > 0', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval var = max(booleanField) > 0', [ - 'EVAL does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(longField, integerField)', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval max(booleanField)', [ - 'EVAL does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(longField, integerField) > 0', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval max(booleanField) > 0', [ - 'EVAL does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(integerField, doubleField)', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | stats var = max(ipField)', []); - testErrorsAndWarnings('from a_index | stats max(ipField)', []); - testErrorsAndWarnings('from a_index | where max(ipField)', [ - 'WHERE does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(integerField, doubleField) > 0', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | where max(ipField) > 0', [ - 'WHERE does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(integerField, longField)', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval var = max(ipField)', [ - 'EVAL does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(integerField, longField) > 0', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval var = max(ipField) > 0', [ - 'EVAL does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(integerField, integerField)', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval max(ipField)', [ - 'EVAL does not support function max', + testErrorsAndWarnings('from a_index | where weighted_avg(integerField, integerField) > 0', [ + 'WHERE does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval max(ipField) > 0', [ - 'EVAL does not support function max', + testErrorsAndWarnings('from a_index | eval var = weighted_avg(doubleField, longField)', [ + 'EVAL does not support function weighted_avg', ]); - }); - - describe('min', () => { - testErrorsAndWarnings('from a_index | stats var = min(numberField)', []); - testErrorsAndWarnings('from a_index | stats min(numberField)', []); - testErrorsAndWarnings('from a_index | stats var = round(min(numberField))', []); - testErrorsAndWarnings('from a_index | stats round(min(numberField))', []); - - testErrorsAndWarnings( - 'from a_index | stats var = round(min(numberField)) + min(numberField)', - [] - ); - - testErrorsAndWarnings( - 'from a_index | stats round(min(numberField)) + min(numberField)', - [] - ); - testErrorsAndWarnings('from a_index | stats min(numberField / 2)', []); - testErrorsAndWarnings('from a_index | stats var0 = min(numberField / 2)', []); - testErrorsAndWarnings('from a_index | stats avg(numberField), min(numberField / 2)', []); - testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = min(numberField / 2)', - [] - ); - testErrorsAndWarnings('from a_index | stats var0 = min(numberField)', []); - testErrorsAndWarnings('from a_index | stats avg(numberField), min(numberField)', []); - testErrorsAndWarnings('from a_index | stats avg(numberField), var0 = min(numberField)', []); - testErrorsAndWarnings( - 'from a_index | stats min(numberField) by round(numberField / 2)', - [] - ); - - testErrorsAndWarnings( - 'from a_index | stats var0 = min(numberField) by var1 = round(numberField / 2)', - [] - ); - - testErrorsAndWarnings( - 'from a_index | stats avg(numberField), min(numberField) by round(numberField / 2), ipField', - [] - ); - - testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = min(numberField) by var1 = round(numberField / 2), ipField', - [] - ); - - testErrorsAndWarnings( - 'from a_index | stats avg(numberField), min(numberField) by round(numberField / 2), numberField / 2', - [] - ); testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = min(numberField) by var1 = round(numberField / 2), numberField / 2', - [] + 'from a_index | eval var = weighted_avg(doubleField, longField) > 0', + ['EVAL does not support function weighted_avg'] ); - testErrorsAndWarnings('from a_index | stats var = min(avg(numberField))', [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", - ]); - - testErrorsAndWarnings('from a_index | stats min(avg(numberField))', [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", + testErrorsAndWarnings('from a_index | eval weighted_avg(doubleField, longField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | stats min(stringField)', [ - 'Argument of [min] must be [number], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | eval weighted_avg(doubleField, longField) > 0', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | stats var = min(*)', [ - 'Using wildcards (*) in min is not allowed', + testErrorsAndWarnings('from a_index | eval var = weighted_avg(doubleField, integerField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | stats var = min(dateField)', []); - testErrorsAndWarnings('from a_index | stats min(dateField)', []); - testErrorsAndWarnings('from a_index | stats var = round(min(dateField))', []); - testErrorsAndWarnings('from a_index | stats round(min(dateField))', []); testErrorsAndWarnings( - 'from a_index | stats var = round(min(dateField)) + min(dateField)', - [] + 'from a_index | eval var = weighted_avg(doubleField, integerField) > 0', + ['EVAL does not support function weighted_avg'] ); - testErrorsAndWarnings('from a_index | stats round(min(dateField)) + min(dateField)', []); - - testErrorsAndWarnings('from a_index | sort min(numberField)', [ - 'SORT does not support function min', - ]); - testErrorsAndWarnings('from a_index | where min(numberField)', [ - 'WHERE does not support function min', - ]); - - testErrorsAndWarnings('from a_index | where min(numberField) > 0', [ - 'WHERE does not support function min', - ]); - - testErrorsAndWarnings('from a_index | where min(dateField)', [ - 'WHERE does not support function min', - ]); - - testErrorsAndWarnings('from a_index | where min(dateField) > 0', [ - 'WHERE does not support function min', - ]); - - testErrorsAndWarnings('from a_index | eval var = min(numberField)', [ - 'EVAL does not support function min', + testErrorsAndWarnings('from a_index | eval weighted_avg(doubleField, integerField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval var = min(numberField) > 0', [ - 'EVAL does not support function min', + testErrorsAndWarnings('from a_index | eval weighted_avg(doubleField, integerField) > 0', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval min(numberField)', [ - 'EVAL does not support function min', + testErrorsAndWarnings('from a_index | eval var = weighted_avg(longField, doubleField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval min(numberField) > 0', [ - 'EVAL does not support function min', - ]); + testErrorsAndWarnings( + 'from a_index | eval var = weighted_avg(longField, doubleField) > 0', + ['EVAL does not support function weighted_avg'] + ); - testErrorsAndWarnings('from a_index | eval var = min(dateField)', [ - 'EVAL does not support function min', + testErrorsAndWarnings('from a_index | eval weighted_avg(longField, doubleField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval var = min(dateField) > 0', [ - 'EVAL does not support function min', + testErrorsAndWarnings('from a_index | eval weighted_avg(longField, doubleField) > 0', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval min(dateField)', [ - 'EVAL does not support function min', + testErrorsAndWarnings('from a_index | eval var = weighted_avg(longField, longField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval min(dateField) > 0', [ - 'EVAL does not support function min', + testErrorsAndWarnings('from a_index | eval var = weighted_avg(longField, longField) > 0', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | stats min(booleanField)', []); - testErrorsAndWarnings('from a_index | stats min(null)', []); - testErrorsAndWarnings('row nullVar = null | stats min(nullVar)', []); - testErrorsAndWarnings('from a_index | stats min("2022")', []); - testErrorsAndWarnings('from a_index | stats min(concat("20", "22"))', [ - 'Argument of [min] must be [number], found value [concat("20","22")] type [string]', + testErrorsAndWarnings('from a_index | eval weighted_avg(longField, longField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | stats min(cartesianPointField)', [ - 'Argument of [min] must be [number], found value [cartesianPointField] type [cartesian_point]', + testErrorsAndWarnings('from a_index | eval weighted_avg(longField, longField) > 0', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | stats var = min(booleanField)', []); - - testErrorsAndWarnings('from a_index | where min(booleanField)', [ - 'WHERE does not support function min', + testErrorsAndWarnings('from a_index | eval var = weighted_avg(longField, integerField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | where min(booleanField) > 0', [ - 'WHERE does not support function min', - ]); + testErrorsAndWarnings( + 'from a_index | eval var = weighted_avg(longField, integerField) > 0', + ['EVAL does not support function weighted_avg'] + ); - testErrorsAndWarnings('from a_index | eval var = min(booleanField)', [ - 'EVAL does not support function min', + testErrorsAndWarnings('from a_index | eval weighted_avg(longField, integerField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval var = min(booleanField) > 0', [ - 'EVAL does not support function min', + testErrorsAndWarnings('from a_index | eval weighted_avg(longField, integerField) > 0', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval min(booleanField)', [ - 'EVAL does not support function min', + testErrorsAndWarnings('from a_index | eval var = weighted_avg(integerField, doubleField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval min(booleanField) > 0', [ - 'EVAL does not support function min', - ]); - testErrorsAndWarnings('from a_index | stats var = min(ipField)', []); - testErrorsAndWarnings('from a_index | stats min(ipField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = weighted_avg(integerField, doubleField) > 0', + ['EVAL does not support function weighted_avg'] + ); - testErrorsAndWarnings('from a_index | where min(ipField)', [ - 'WHERE does not support function min', + testErrorsAndWarnings('from a_index | eval weighted_avg(integerField, doubleField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | where min(ipField) > 0', [ - 'WHERE does not support function min', + testErrorsAndWarnings('from a_index | eval weighted_avg(integerField, doubleField) > 0', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval var = min(ipField)', [ - 'EVAL does not support function min', + testErrorsAndWarnings('from a_index | eval var = weighted_avg(integerField, longField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval var = min(ipField) > 0', [ - 'EVAL does not support function min', - ]); + testErrorsAndWarnings( + 'from a_index | eval var = weighted_avg(integerField, longField) > 0', + ['EVAL does not support function weighted_avg'] + ); - testErrorsAndWarnings('from a_index | eval min(ipField)', [ - 'EVAL does not support function min', + testErrorsAndWarnings('from a_index | eval weighted_avg(integerField, longField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval min(ipField) > 0', [ - 'EVAL does not support function min', + testErrorsAndWarnings('from a_index | eval weighted_avg(integerField, longField) > 0', [ + 'EVAL does not support function weighted_avg', ]); - }); - - describe('count', () => { - testErrorsAndWarnings('from a_index | stats var = count(stringField)', []); - testErrorsAndWarnings('from a_index | stats count(stringField)', []); - testErrorsAndWarnings('from a_index | stats var = round(count(stringField))', []); - testErrorsAndWarnings('from a_index | stats round(count(stringField))', []); testErrorsAndWarnings( - 'from a_index | stats var = round(count(stringField)) + count(stringField)', - [] + 'from a_index | eval var = weighted_avg(integerField, integerField)', + ['EVAL does not support function weighted_avg'] ); testErrorsAndWarnings( - 'from a_index | stats round(count(stringField)) + count(stringField)', - [] + 'from a_index | eval var = weighted_avg(integerField, integerField) > 0', + ['EVAL does not support function weighted_avg'] ); - testErrorsAndWarnings('from a_index | sort count(stringField)', [ - 'SORT does not support function count', - ]); - - testErrorsAndWarnings('from a_index | where count(stringField)', [ - 'WHERE does not support function count', - ]); - - testErrorsAndWarnings('from a_index | where count(stringField) > 0', [ - 'WHERE does not support function count', + testErrorsAndWarnings('from a_index | eval weighted_avg(integerField, integerField)', [ + 'EVAL does not support function weighted_avg', ]); - testErrorsAndWarnings('from a_index | eval var = count(stringField)', [ - 'EVAL does not support function count', + testErrorsAndWarnings('from a_index | eval weighted_avg(integerField, integerField) > 0', [ + 'EVAL does not support function weighted_avg', ]); + }); - testErrorsAndWarnings('from a_index | eval var = count(stringField) > 0', [ - 'EVAL does not support function count', - ]); + describe('bucket', () => { + testErrorsAndWarnings('from a_index | stats by bucket(dateField, 1 year)', []); + testErrorsAndWarnings('from a_index | stats by bin(dateField, 1 year)', []); - testErrorsAndWarnings('from a_index | eval count(stringField)', [ - 'EVAL does not support function count', + testErrorsAndWarnings('from a_index | stats by bucket(integerField, integerField)', [ + 'Argument of [bucket] must be a constant, received [integerField]', ]); - testErrorsAndWarnings('from a_index | eval count(stringField) > 0', [ - 'EVAL does not support function count', + testErrorsAndWarnings('from a_index | stats by bin(integerField, integerField)', [ + 'Argument of [bin] must be a constant, received [integerField]', ]); - testErrorsAndWarnings('from a_index | stats count(null)', []); - testErrorsAndWarnings('row nullVar = null | stats count(nullVar)', []); - }); - describe('count_distinct', () => { testErrorsAndWarnings( - 'from a_index | stats var = count_distinct(stringField, numberField)', - [] + 'from a_index | stats by bucket(dateField, integerField, textField, textField)', + [ + 'Argument of [bucket] must be a constant, received [integerField]', + 'Argument of [bucket] must be a constant, received [textField]', + 'Argument of [bucket] must be a constant, received [textField]', + ] ); - testErrorsAndWarnings('from a_index | stats count_distinct(stringField, numberField)', []); testErrorsAndWarnings( - 'from a_index | stats var = round(count_distinct(stringField, numberField))', - [] + 'from a_index | stats by bin(dateField, integerField, textField, textField)', + [ + 'Argument of [bin] must be a constant, received [integerField]', + 'Argument of [bin] must be a constant, received [textField]', + 'Argument of [bin] must be a constant, received [textField]', + ] ); testErrorsAndWarnings( - 'from a_index | stats round(count_distinct(stringField, numberField))', - [] + 'from a_index | stats by bucket(dateField, integerField, dateField, dateField)', + [ + 'Argument of [bucket] must be a constant, received [integerField]', + 'Argument of [bucket] must be a constant, received [dateField]', + 'Argument of [bucket] must be a constant, received [dateField]', + ] ); testErrorsAndWarnings( - 'from a_index | stats var = round(count_distinct(stringField, numberField)) + count_distinct(stringField, numberField)', - [] + 'from a_index | stats by bin(dateField, integerField, dateField, dateField)', + [ + 'Argument of [bin] must be a constant, received [integerField]', + 'Argument of [bin] must be a constant, received [dateField]', + 'Argument of [bin] must be a constant, received [dateField]', + ] ); testErrorsAndWarnings( - 'from a_index | stats round(count_distinct(stringField, numberField)) + count_distinct(stringField, numberField)', - [] + 'from a_index | stats by bucket(dateField, integerField, textField, dateField)', + [ + 'Argument of [bucket] must be a constant, received [integerField]', + 'Argument of [bucket] must be a constant, received [textField]', + 'Argument of [bucket] must be a constant, received [dateField]', + ] ); - testErrorsAndWarnings('from a_index | sort count_distinct(stringField, numberField)', [ - 'SORT does not support function count_distinct', - ]); - - testErrorsAndWarnings('from a_index | where count_distinct(stringField, numberField)', [ - 'WHERE does not support function count_distinct', - ]); - - testErrorsAndWarnings('from a_index | where count_distinct(stringField, numberField) > 0', [ - 'WHERE does not support function count_distinct', - ]); - testErrorsAndWarnings( - 'from a_index | eval var = count_distinct(stringField, numberField)', - ['EVAL does not support function count_distinct'] + 'from a_index | stats by bin(dateField, integerField, textField, dateField)', + [ + 'Argument of [bin] must be a constant, received [integerField]', + 'Argument of [bin] must be a constant, received [textField]', + 'Argument of [bin] must be a constant, received [dateField]', + ] ); testErrorsAndWarnings( - 'from a_index | eval var = count_distinct(stringField, numberField) > 0', - ['EVAL does not support function count_distinct'] + 'from a_index | stats by bucket(dateField, integerField, dateField, textField)', + [ + 'Argument of [bucket] must be a constant, received [integerField]', + 'Argument of [bucket] must be a constant, received [dateField]', + 'Argument of [bucket] must be a constant, received [textField]', + ] ); - testErrorsAndWarnings('from a_index | eval count_distinct(stringField, numberField)', [ - 'EVAL does not support function count_distinct', - ]); - - testErrorsAndWarnings('from a_index | eval count_distinct(stringField, numberField) > 0', [ - 'EVAL does not support function count_distinct', - ]); - testErrorsAndWarnings('from a_index | stats count_distinct(null, null)', []); - testErrorsAndWarnings('row nullVar = null | stats count_distinct(nullVar, nullVar)', []); - }); - - describe('st_centroid_agg', () => { testErrorsAndWarnings( - 'from a_index | stats var = st_centroid_agg(cartesianPointField)', - [] + 'from a_index | stats by bin(dateField, integerField, dateField, textField)', + [ + 'Argument of [bin] must be a constant, received [integerField]', + 'Argument of [bin] must be a constant, received [dateField]', + 'Argument of [bin] must be a constant, received [textField]', + ] ); - testErrorsAndWarnings('from a_index | stats st_centroid_agg(cartesianPointField)', []); - testErrorsAndWarnings('from a_index | stats var = st_centroid_agg(avg(numberField))', [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", - ]); + testErrorsAndWarnings( + 'from a_index | stats by bucket(integerField, integerField, integerField, integerField)', + [ + 'Argument of [bucket] must be a constant, received [integerField]', + 'Argument of [bucket] must be a constant, received [integerField]', + 'Argument of [bucket] must be a constant, received [integerField]', + ] + ); - testErrorsAndWarnings('from a_index | stats st_centroid_agg(avg(numberField))', [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", - ]); + testErrorsAndWarnings( + 'from a_index | stats by bin(integerField, integerField, integerField, integerField)', + [ + 'Argument of [bin] must be a constant, received [integerField]', + 'Argument of [bin] must be a constant, received [integerField]', + 'Argument of [bin] must be a constant, received [integerField]', + ] + ); - testErrorsAndWarnings('from a_index | stats st_centroid_agg(stringField)', [ - 'Argument of [st_centroid_agg] must be [cartesian_point], found value [stringField] type [string]', + testErrorsAndWarnings('from a_index | sort bucket(dateField, 1 year)', [ + 'SORT does not support function bucket', ]); - testErrorsAndWarnings('from a_index | stats var = st_centroid_agg(*)', [ - 'Using wildcards (*) in st_centroid_agg is not allowed', - ]); + testErrorsAndWarnings('from a_index | stats bucket(null, null, null, null)', []); - testErrorsAndWarnings('from a_index | stats var = st_centroid_agg(geoPointField)', []); - testErrorsAndWarnings('from a_index | stats st_centroid_agg(geoPointField)', []); + testErrorsAndWarnings( + 'row nullVar = null | stats bucket(nullVar, nullVar, nullVar, nullVar)', + [ + 'Argument of [bucket] must be a constant, received [nullVar]', + 'Argument of [bucket] must be a constant, received [nullVar]', + 'Argument of [bucket] must be a constant, received [nullVar]', + ] + ); - testErrorsAndWarnings('from a_index | sort st_centroid_agg(cartesianPointField)', [ - 'SORT does not support function st_centroid_agg', + testErrorsAndWarnings('from a_index | stats bucket("2022", 1 year)', []); + testErrorsAndWarnings('from a_index | stats bucket(concat("20", "22"), 1 year)', [ + 'Argument of [bucket] must be [date], found value [concat("20","22")] type [keyword]', ]); - testErrorsAndWarnings('from a_index | where st_centroid_agg(cartesianPointField)', [ - 'WHERE does not support function st_centroid_agg', - ]); + testErrorsAndWarnings( + 'from a_index | stats bucket("2022", integerField, textField, textField)', + [ + 'Argument of [bucket] must be a constant, received [integerField]', + 'Argument of [bucket] must be a constant, received [textField]', + 'Argument of [bucket] must be a constant, received [textField]', + ] + ); - testErrorsAndWarnings('from a_index | where st_centroid_agg(cartesianPointField) > 0', [ - 'WHERE does not support function st_centroid_agg', - ]); + testErrorsAndWarnings( + 'from a_index | stats bucket(concat("20", "22"), integerField, textField, textField)', + [ + 'Argument of [bucket] must be [date], found value [concat("20","22")] type [keyword]', + 'Argument of [bucket] must be a constant, received [integerField]', + 'Argument of [bucket] must be a constant, received [textField]', + 'Argument of [bucket] must be a constant, received [textField]', + ] + ); - testErrorsAndWarnings('from a_index | where st_centroid_agg(geoPointField)', [ - 'WHERE does not support function st_centroid_agg', + testErrorsAndWarnings('from a_index | stats bucket("2022", integerField, "2022", "2022")', [ + 'Argument of [bucket] must be a constant, received [integerField]', ]); - testErrorsAndWarnings('from a_index | where st_centroid_agg(geoPointField) > 0', [ - 'WHERE does not support function st_centroid_agg', - ]); + testErrorsAndWarnings( + 'from a_index | stats bucket(concat("20", "22"), integerField, concat("20", "22"), concat("20", "22"))', + [ + 'Argument of [bucket] must be [date], found value [concat("20","22")] type [keyword]', + 'Argument of [bucket] must be a constant, received [integerField]', + 'Argument of [bucket] must be [date], found value [concat("20","22")] type [keyword]', + 'Argument of [bucket] must be [date], found value [concat("20","22")] type [keyword]', + ] + ); - testErrorsAndWarnings('from a_index | eval var = st_centroid_agg(cartesianPointField)', [ - 'EVAL does not support function st_centroid_agg', - ]); + testErrorsAndWarnings( + 'from a_index | stats bucket("2022", integerField, textField, "2022")', + [ + 'Argument of [bucket] must be a constant, received [integerField]', + 'Argument of [bucket] must be a constant, received [textField]', + ] + ); testErrorsAndWarnings( - 'from a_index | eval var = st_centroid_agg(cartesianPointField) > 0', - ['EVAL does not support function st_centroid_agg'] + 'from a_index | stats bucket(concat("20", "22"), integerField, textField, concat("20", "22"))', + [ + 'Argument of [bucket] must be [date], found value [concat("20","22")] type [keyword]', + 'Argument of [bucket] must be a constant, received [integerField]', + 'Argument of [bucket] must be a constant, received [textField]', + 'Argument of [bucket] must be [date], found value [concat("20","22")] type [keyword]', + ] ); - testErrorsAndWarnings('from a_index | eval st_centroid_agg(cartesianPointField)', [ - 'EVAL does not support function st_centroid_agg', - ]); + testErrorsAndWarnings( + 'from a_index | stats bucket("2022", integerField, "2022", textField)', + [ + 'Argument of [bucket] must be a constant, received [integerField]', + 'Argument of [bucket] must be a constant, received [textField]', + ] + ); - testErrorsAndWarnings('from a_index | eval st_centroid_agg(cartesianPointField) > 0', [ - 'EVAL does not support function st_centroid_agg', - ]); + testErrorsAndWarnings( + 'from a_index | stats bucket(concat("20", "22"), integerField, concat("20", "22"), textField)', + [ + 'Argument of [bucket] must be [date], found value [concat("20","22")] type [keyword]', + 'Argument of [bucket] must be a constant, received [integerField]', + 'Argument of [bucket] must be [date], found value [concat("20","22")] type [keyword]', + 'Argument of [bucket] must be a constant, received [textField]', + ] + ); + }); - testErrorsAndWarnings('from a_index | eval var = st_centroid_agg(geoPointField)', [ - 'EVAL does not support function st_centroid_agg', + describe('percentile', () => { + testErrorsAndWarnings('from a_index | stats var = percentile(doubleField, doubleField)', [ + 'Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]', ]); - - testErrorsAndWarnings('from a_index | eval var = st_centroid_agg(geoPointField) > 0', [ - 'EVAL does not support function st_centroid_agg', + testErrorsAndWarnings('from a_index | stats percentile(doubleField, doubleField)', [ + 'Argument of [percentile] must be a constant, received [doubleField]', ]); - testErrorsAndWarnings('from a_index | eval st_centroid_agg(geoPointField)', [ - 'EVAL does not support function st_centroid_agg', - ]); + testErrorsAndWarnings( + 'from a_index | stats var = round(percentile(doubleField, doubleField))', + [ + 'Argument of [=] must be a constant, received [round(percentile(doubleField,doubleField))]', + ] + ); - testErrorsAndWarnings('from a_index | eval st_centroid_agg(geoPointField) > 0', [ - 'EVAL does not support function st_centroid_agg', + testErrorsAndWarnings('from a_index | stats round(percentile(doubleField, doubleField))', [ + 'Argument of [round] must be a constant, received [percentile(doubleField,doubleField)]', ]); - testErrorsAndWarnings('from a_index | stats st_centroid_agg(booleanField)', [ - 'Argument of [st_centroid_agg] must be [cartesian_point], found value [booleanField] type [boolean]', - ]); - testErrorsAndWarnings('from a_index | stats st_centroid_agg(null)', []); - testErrorsAndWarnings('row nullVar = null | stats st_centroid_agg(nullVar)', []); - }); + testErrorsAndWarnings( + 'from a_index | stats var = round(percentile(doubleField, doubleField)) + percentile(doubleField, doubleField)', + [ + 'Argument of [=] must be a constant, received [round(percentile(doubleField,doubleField))+percentile(doubleField,doubleField)]', + ] + ); - describe('values', () => { - testErrorsAndWarnings('from a_index | stats var = values(stringField)', []); - testErrorsAndWarnings('from a_index | stats values(stringField)', []); + testErrorsAndWarnings( + 'from a_index | stats round(percentile(doubleField, doubleField)) + percentile(doubleField, doubleField)', + [ + 'Argument of [+] must be a constant, received [round(percentile(doubleField,doubleField))]', + 'Argument of [+] must be a constant, received [percentile(doubleField,doubleField)]', + ] + ); - testErrorsAndWarnings('from a_index | sort values(stringField)', [ - 'SORT does not support function values', + testErrorsAndWarnings('from a_index | stats percentile(doubleField / 2, doubleField)', [ + 'Argument of [percentile] must be a constant, received [doubleField]', ]); + testErrorsAndWarnings( + 'from a_index | stats var0 = percentile(doubleField / 2, doubleField)', + ['Argument of [=] must be a constant, received [percentile(doubleField/2,doubleField)]'] + ); - testErrorsAndWarnings('from a_index | where values(stringField)', [ - 'WHERE does not support function values', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), percentile(doubleField / 2, doubleField)', + ['Argument of [percentile] must be a constant, received [doubleField]'] + ); - testErrorsAndWarnings('from a_index | where values(stringField) > 0', [ - 'WHERE does not support function values', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(doubleField / 2, doubleField)', + ['Argument of [=] must be a constant, received [percentile(doubleField/2,doubleField)]'] + ); - testErrorsAndWarnings('from a_index | eval var = values(stringField)', [ - 'EVAL does not support function values', + testErrorsAndWarnings('from a_index | stats var0 = percentile(doubleField, doubleField)', [ + 'Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]', ]); - testErrorsAndWarnings('from a_index | eval var = values(stringField) > 0', [ - 'EVAL does not support function values', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), percentile(doubleField, doubleField)', + ['Argument of [percentile] must be a constant, received [doubleField]'] + ); - testErrorsAndWarnings('from a_index | eval values(stringField)', [ - 'EVAL does not support function values', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(doubleField, doubleField)', + ['Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]'] + ); - testErrorsAndWarnings('from a_index | eval values(stringField) > 0', [ - 'EVAL does not support function values', - ]); - testErrorsAndWarnings('from a_index | stats values(null)', []); - testErrorsAndWarnings('row nullVar = null | stats values(nullVar)', []); - }); + testErrorsAndWarnings( + 'from a_index | stats percentile(doubleField, doubleField) by round(doubleField / 2)', + ['Argument of [percentile] must be a constant, received [doubleField]'] + ); - describe('bucket', () => { - testErrorsAndWarnings('from a_index | stats by bucket(dateField, 1 year)', []); - testErrorsAndWarnings('from a_index | stats by bin(dateField, 1 year)', []); - testErrorsAndWarnings('from a_index | stats by bucket(numberField, 5)', []); + testErrorsAndWarnings( + 'from a_index | stats var0 = percentile(doubleField, doubleField) by var1 = round(doubleField / 2)', + ['Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]'] + ); - testErrorsAndWarnings('from a_index | stats by bucket(numberField, numberField)', [ - 'Argument of [bucket] must be a constant, received [numberField]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), percentile(doubleField, doubleField) by round(doubleField / 2), ipField', + ['Argument of [percentile] must be a constant, received [doubleField]'] + ); - testErrorsAndWarnings('from a_index | stats by bin(numberField, 5)', []); - testErrorsAndWarnings('from a_index | stats by bucket(dateField, 5, "a", "a")', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(doubleField, doubleField) by var1 = round(doubleField / 2), ipField', + ['Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]'] + ); testErrorsAndWarnings( - 'from a_index | stats by bucket(dateField, numberField, stringField, stringField)', - [ - 'Argument of [bucket] must be a constant, received [numberField]', - 'Argument of [bucket] must be a constant, received [stringField]', - 'Argument of [bucket] must be a constant, received [stringField]', - ] + 'from a_index | stats avg(doubleField), percentile(doubleField, doubleField) by round(doubleField / 2), doubleField / 2', + ['Argument of [percentile] must be a constant, received [doubleField]'] ); - testErrorsAndWarnings('from a_index | stats by bin(dateField, 5, "a", "a")', []); - testErrorsAndWarnings('from a_index | stats by bucket(dateField, 5, now(), now())', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(doubleField, doubleField) by var1 = round(doubleField / 2), doubleField / 2', + ['Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]'] + ); testErrorsAndWarnings( - 'from a_index | stats by bucket(dateField, numberField, dateField, dateField)', + 'from a_index | stats var = percentile(avg(integerField), avg(integerField))', [ - 'Argument of [bucket] must be a constant, received [numberField]', - 'Argument of [bucket] must be a constant, received [dateField]', - 'Argument of [bucket] must be a constant, received [dateField]', + 'Argument of [=] must be a constant, received [percentile(avg(integerField),avg(integerField))]', + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", ] ); - testErrorsAndWarnings('from a_index | stats by bin(dateField, 5, now(), now())', []); - testErrorsAndWarnings('from a_index | stats by bucket(dateField, 5, "a", now())', []); - testErrorsAndWarnings( - 'from a_index | stats by bucket(dateField, numberField, stringField, dateField)', + 'from a_index | stats percentile(avg(integerField), avg(integerField))', [ - 'Argument of [bucket] must be a constant, received [numberField]', - 'Argument of [bucket] must be a constant, received [stringField]', - 'Argument of [bucket] must be a constant, received [dateField]', + 'Argument of [percentile] must be a constant, received [avg(integerField)]', + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", ] ); - testErrorsAndWarnings('from a_index | stats by bin(dateField, 5, "a", now())', []); - testErrorsAndWarnings('from a_index | stats by bucket(dateField, 5, now(), "a")', []); + testErrorsAndWarnings('from a_index | stats percentile(booleanField, )', [ + "SyntaxError: no viable alternative at input 'percentile(booleanField, )'", + "SyntaxError: mismatched input ')' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + 'At least one aggregation or grouping expression required in [STATS]', + ]); + testErrorsAndWarnings('from a_index | stats var = percentile(doubleField, longField)', [ + 'Argument of [=] must be a constant, received [percentile(doubleField,longField)]', + ]); + testErrorsAndWarnings('from a_index | stats percentile(doubleField, longField)', [ + 'Argument of [percentile] must be a constant, received [longField]', + ]); testErrorsAndWarnings( - 'from a_index | stats by bucket(dateField, numberField, dateField, stringField)', + 'from a_index | stats var = round(percentile(doubleField, longField))', [ - 'Argument of [bucket] must be a constant, received [numberField]', - 'Argument of [bucket] must be a constant, received [dateField]', - 'Argument of [bucket] must be a constant, received [stringField]', + 'Argument of [=] must be a constant, received [round(percentile(doubleField,longField))]', ] ); - - testErrorsAndWarnings('from a_index | stats by bin(dateField, 5, now(), "a")', []); - testErrorsAndWarnings('from a_index | stats by bucket(numberField, 5, 5, 5)', []); + testErrorsAndWarnings('from a_index | stats round(percentile(doubleField, longField))', [ + 'Argument of [round] must be a constant, received [percentile(doubleField,longField)]', + ]); testErrorsAndWarnings( - 'from a_index | stats by bucket(numberField, numberField, numberField, numberField)', + 'from a_index | stats var = round(percentile(doubleField, longField)) + percentile(doubleField, longField)', [ - 'Argument of [bucket] must be a constant, received [numberField]', - 'Argument of [bucket] must be a constant, received [numberField]', - 'Argument of [bucket] must be a constant, received [numberField]', + 'Argument of [=] must be a constant, received [round(percentile(doubleField,longField))+percentile(doubleField,longField)]', ] ); - testErrorsAndWarnings('from a_index | stats by bin(numberField, 5, 5, 5)', []); - - testErrorsAndWarnings('from a_index | sort bucket(dateField, 1 year)', [ - 'SORT does not support function bucket', - ]); - testErrorsAndWarnings('from a_index | stats bucket(null, null, null, null)', []); - testErrorsAndWarnings( - 'row nullVar = null | stats bucket(nullVar, nullVar, nullVar, nullVar)', + 'from a_index | stats round(percentile(doubleField, longField)) + percentile(doubleField, longField)', [ - 'Argument of [bucket] must be a constant, received [nullVar]', - 'Argument of [bucket] must be a constant, received [nullVar]', - 'Argument of [bucket] must be a constant, received [nullVar]', + 'Argument of [+] must be a constant, received [round(percentile(doubleField,longField))]', + 'Argument of [+] must be a constant, received [percentile(doubleField,longField)]', ] ); - testErrorsAndWarnings('from a_index | stats bucket("2022", 1 year)', []); - testErrorsAndWarnings('from a_index | stats bucket(concat("20", "22"), 1 year)', [ - 'Argument of [bucket] must be [date], found value [concat("20","22")] type [string]', - ]); - testErrorsAndWarnings('from a_index | stats by bucket(concat("20", "22"), 1 year)', [ - 'Argument of [bucket] must be [date], found value [concat("20","22")] type [string]', - ]); - testErrorsAndWarnings('from a_index | stats bucket("2022", 5, "a", "a")', []); - testErrorsAndWarnings('from a_index | stats bucket(concat("20", "22"), 5, "a", "a")', [ - 'Argument of [bucket] must be [date], found value [concat("20","22")] type [string]', + + testErrorsAndWarnings('from a_index | stats percentile(doubleField / 2, longField)', [ + 'Argument of [percentile] must be a constant, received [longField]', ]); - testErrorsAndWarnings('from a_index | stats bucket("2022", 5, "2022", "2022")', []); + testErrorsAndWarnings( + 'from a_index | stats var0 = percentile(doubleField / 2, longField)', + ['Argument of [=] must be a constant, received [percentile(doubleField/2,longField)]'] + ); testErrorsAndWarnings( - 'from a_index | stats bucket(concat("20", "22"), 5, concat("20", "22"), concat("20", "22"))', - ['Argument of [bucket] must be [date], found value [concat("20","22")] type [string]'] + 'from a_index | stats avg(doubleField), percentile(doubleField / 2, longField)', + ['Argument of [percentile] must be a constant, received [longField]'] ); - testErrorsAndWarnings('from a_index | stats bucket("2022", 5, "a", "2022")', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(doubleField / 2, longField)', + ['Argument of [=] must be a constant, received [percentile(doubleField/2,longField)]'] + ); + + testErrorsAndWarnings('from a_index | stats var0 = percentile(doubleField, longField)', [ + 'Argument of [=] must be a constant, received [percentile(doubleField,longField)]', + ]); testErrorsAndWarnings( - 'from a_index | stats bucket(concat("20", "22"), 5, "a", concat("20", "22"))', - ['Argument of [bucket] must be [date], found value [concat("20","22")] type [string]'] + 'from a_index | stats avg(doubleField), percentile(doubleField, longField)', + ['Argument of [percentile] must be a constant, received [longField]'] ); - testErrorsAndWarnings('from a_index | stats bucket("2022", 5, "2022", "a")', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(doubleField, longField)', + ['Argument of [=] must be a constant, received [percentile(doubleField,longField)]'] + ); testErrorsAndWarnings( - 'from a_index | stats bucket(concat("20", "22"), 5, concat("20", "22"), "a")', - ['Argument of [bucket] must be [date], found value [concat("20","22")] type [string]'] + 'from a_index | stats percentile(doubleField, longField) by round(doubleField / 2)', + ['Argument of [percentile] must be a constant, received [longField]'] ); - }); - describe('cbrt', () => { - testErrorsAndWarnings('row var = cbrt(5)', []); - testErrorsAndWarnings('row cbrt(5)', []); - testErrorsAndWarnings('row var = cbrt(to_integer(true))', []); + testErrorsAndWarnings( + 'from a_index | stats var0 = percentile(doubleField, longField) by var1 = round(doubleField / 2)', + ['Argument of [=] must be a constant, received [percentile(doubleField,longField)]'] + ); - testErrorsAndWarnings('row var = cbrt(true)', [ - 'Argument of [cbrt] must be [number], found value [true] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), percentile(doubleField, longField) by round(doubleField / 2), ipField', + ['Argument of [percentile] must be a constant, received [longField]'] + ); - testErrorsAndWarnings('from a_index | where cbrt(numberField) > 0', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(doubleField, longField) by var1 = round(doubleField / 2), ipField', + ['Argument of [=] must be a constant, received [percentile(doubleField,longField)]'] + ); - testErrorsAndWarnings('from a_index | where cbrt(booleanField) > 0', [ - 'Argument of [cbrt] must be [number], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), percentile(doubleField, longField) by round(doubleField / 2), doubleField / 2', + ['Argument of [percentile] must be a constant, received [longField]'] + ); - testErrorsAndWarnings('from a_index | eval var = cbrt(numberField)', []); - testErrorsAndWarnings('from a_index | eval cbrt(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = cbrt(to_integer(booleanField))', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(doubleField, longField) by var1 = round(doubleField / 2), doubleField / 2', + ['Argument of [=] must be a constant, received [percentile(doubleField,longField)]'] + ); - testErrorsAndWarnings('from a_index | eval cbrt(booleanField)', [ - 'Argument of [cbrt] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | stats var = percentile(doubleField, integerField)', [ + 'Argument of [=] must be a constant, received [percentile(doubleField,integerField)]', ]); - - testErrorsAndWarnings('from a_index | eval var = cbrt(*)', [ - 'Using wildcards (*) in cbrt is not allowed', + testErrorsAndWarnings('from a_index | stats percentile(doubleField, integerField)', [ + 'Argument of [percentile] must be a constant, received [integerField]', ]); - testErrorsAndWarnings('from a_index | eval cbrt(numberField, extraArg)', [ - 'Error: [cbrt] function expects exactly one argument, got 2.', + testErrorsAndWarnings( + 'from a_index | stats var = round(percentile(doubleField, integerField))', + [ + 'Argument of [=] must be a constant, received [round(percentile(doubleField,integerField))]', + ] + ); + + testErrorsAndWarnings('from a_index | stats round(percentile(doubleField, integerField))', [ + 'Argument of [round] must be a constant, received [percentile(doubleField,integerField)]', ]); - testErrorsAndWarnings('from a_index | sort cbrt(numberField)', []); - testErrorsAndWarnings('from a_index | eval cbrt(null)', []); - testErrorsAndWarnings('row nullVar = null | eval cbrt(nullVar)', []); - }); + testErrorsAndWarnings( + 'from a_index | stats var = round(percentile(doubleField, integerField)) + percentile(doubleField, integerField)', + [ + 'Argument of [=] must be a constant, received [round(percentile(doubleField,integerField))+percentile(doubleField,integerField)]', + ] + ); - describe('from_base64', () => { - testErrorsAndWarnings('row var = from_base64("a")', []); - testErrorsAndWarnings('row from_base64("a")', []); - testErrorsAndWarnings('row var = from_base64(to_string(true))', []); + testErrorsAndWarnings( + 'from a_index | stats round(percentile(doubleField, integerField)) + percentile(doubleField, integerField)', + [ + 'Argument of [+] must be a constant, received [round(percentile(doubleField,integerField))]', + 'Argument of [+] must be a constant, received [percentile(doubleField,integerField)]', + ] + ); - testErrorsAndWarnings('row var = from_base64(true)', [ - 'Argument of [from_base64] must be [string], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | stats percentile(doubleField / 2, integerField)', [ + 'Argument of [percentile] must be a constant, received [integerField]', ]); - testErrorsAndWarnings('from a_index | where length(from_base64(stringField)) > 0', []); + testErrorsAndWarnings( + 'from a_index | stats var0 = percentile(doubleField / 2, integerField)', + ['Argument of [=] must be a constant, received [percentile(doubleField/2,integerField)]'] + ); - testErrorsAndWarnings('from a_index | where length(from_base64(booleanField)) > 0', [ - 'Argument of [from_base64] must be [string], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), percentile(doubleField / 2, integerField)', + ['Argument of [percentile] must be a constant, received [integerField]'] + ); - testErrorsAndWarnings('from a_index | eval var = from_base64(stringField)', []); - testErrorsAndWarnings('from a_index | eval from_base64(stringField)', []); - testErrorsAndWarnings('from a_index | eval var = from_base64(to_string(booleanField))', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(doubleField / 2, integerField)', + ['Argument of [=] must be a constant, received [percentile(doubleField/2,integerField)]'] + ); - testErrorsAndWarnings('from a_index | eval from_base64(booleanField)', [ - 'Argument of [from_base64] must be [string], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | stats var0 = percentile(doubleField, integerField)', [ + 'Argument of [=] must be a constant, received [percentile(doubleField,integerField)]', ]); - testErrorsAndWarnings('from a_index | eval var = from_base64(*)', [ - 'Using wildcards (*) in from_base64 is not allowed', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), percentile(doubleField, integerField)', + ['Argument of [percentile] must be a constant, received [integerField]'] + ); - testErrorsAndWarnings('from a_index | eval from_base64(stringField, extraArg)', [ - 'Error: [from_base64] function expects exactly one argument, got 2.', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(doubleField, integerField)', + ['Argument of [=] must be a constant, received [percentile(doubleField,integerField)]'] + ); - testErrorsAndWarnings('from a_index | sort from_base64(stringField)', []); - testErrorsAndWarnings('from a_index | eval from_base64(null)', []); - testErrorsAndWarnings('row nullVar = null | eval from_base64(nullVar)', []); - }); + testErrorsAndWarnings( + 'from a_index | stats percentile(doubleField, integerField) by round(doubleField / 2)', + ['Argument of [percentile] must be a constant, received [integerField]'] + ); - describe('locate', () => { - testErrorsAndWarnings('row var = locate("a", "a")', []); - testErrorsAndWarnings('row locate("a", "a")', []); - testErrorsAndWarnings('row var = locate(to_string(true), to_string(true))', []); - testErrorsAndWarnings('row var = locate("a", "a", 5)', []); - testErrorsAndWarnings('row locate("a", "a", 5)', []); testErrorsAndWarnings( - 'row var = locate(to_string(true), to_string(true), to_integer(true))', - [] + 'from a_index | stats var0 = percentile(doubleField, integerField) by var1 = round(doubleField / 2)', + ['Argument of [=] must be a constant, received [percentile(doubleField,integerField)]'] ); - testErrorsAndWarnings('row var = locate(true, true, true)', [ - 'Argument of [locate] must be [string], found value [true] type [boolean]', - 'Argument of [locate] must be [string], found value [true] type [boolean]', - 'Argument of [locate] must be [number], found value [true] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), percentile(doubleField, integerField) by round(doubleField / 2), ipField', + ['Argument of [percentile] must be a constant, received [integerField]'] + ); - testErrorsAndWarnings('from a_index | where locate(stringField, stringField) > 0', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(doubleField, integerField) by var1 = round(doubleField / 2), ipField', + ['Argument of [=] must be a constant, received [percentile(doubleField,integerField)]'] + ); - testErrorsAndWarnings('from a_index | where locate(booleanField, booleanField) > 0', [ - 'Argument of [locate] must be [string], found value [booleanField] type [boolean]', - 'Argument of [locate] must be [string], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), percentile(doubleField, integerField) by round(doubleField / 2), doubleField / 2', + ['Argument of [percentile] must be a constant, received [integerField]'] + ); testErrorsAndWarnings( - 'from a_index | where locate(stringField, stringField, numberField) > 0', - [] + 'from a_index | stats avg(doubleField), var0 = percentile(doubleField, integerField) by var1 = round(doubleField / 2), doubleField / 2', + ['Argument of [=] must be a constant, received [percentile(doubleField,integerField)]'] ); + testErrorsAndWarnings('from a_index | stats var = percentile(longField, doubleField)', [ + 'Argument of [=] must be a constant, received [percentile(longField,doubleField)]', + ]); + testErrorsAndWarnings('from a_index | stats percentile(longField, doubleField)', [ + 'Argument of [percentile] must be a constant, received [doubleField]', + ]); testErrorsAndWarnings( - 'from a_index | where locate(booleanField, booleanField, booleanField) > 0', + 'from a_index | stats var = round(percentile(longField, doubleField))', [ - 'Argument of [locate] must be [string], found value [booleanField] type [boolean]', - 'Argument of [locate] must be [string], found value [booleanField] type [boolean]', - 'Argument of [locate] must be [number], found value [booleanField] type [boolean]', + 'Argument of [=] must be a constant, received [round(percentile(longField,doubleField))]', ] ); + testErrorsAndWarnings('from a_index | stats round(percentile(longField, doubleField))', [ + 'Argument of [round] must be a constant, received [percentile(longField,doubleField)]', + ]); - testErrorsAndWarnings('from a_index | eval var = locate(stringField, stringField)', []); - testErrorsAndWarnings('from a_index | eval locate(stringField, stringField)', []); + testErrorsAndWarnings( + 'from a_index | stats var = round(percentile(longField, doubleField)) + percentile(longField, doubleField)', + [ + 'Argument of [=] must be a constant, received [round(percentile(longField,doubleField))+percentile(longField,doubleField)]', + ] + ); testErrorsAndWarnings( - 'from a_index | eval var = locate(to_string(booleanField), to_string(booleanField))', - [] + 'from a_index | stats round(percentile(longField, doubleField)) + percentile(longField, doubleField)', + [ + 'Argument of [+] must be a constant, received [round(percentile(longField,doubleField))]', + 'Argument of [+] must be a constant, received [percentile(longField,doubleField)]', + ] ); - testErrorsAndWarnings('from a_index | eval locate(booleanField, booleanField)', [ - 'Argument of [locate] must be [string], found value [booleanField] type [boolean]', - 'Argument of [locate] must be [string], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | stats var0 = percentile(longField, doubleField)', [ + 'Argument of [=] must be a constant, received [percentile(longField,doubleField)]', ]); testErrorsAndWarnings( - 'from a_index | eval var = locate(stringField, stringField, numberField)', - [] + 'from a_index | stats avg(doubleField), percentile(longField, doubleField)', + ['Argument of [percentile] must be a constant, received [doubleField]'] ); testErrorsAndWarnings( - 'from a_index | eval locate(stringField, stringField, numberField)', - [] + 'from a_index | stats avg(doubleField), var0 = percentile(longField, doubleField)', + ['Argument of [=] must be a constant, received [percentile(longField,doubleField)]'] ); testErrorsAndWarnings( - 'from a_index | eval var = locate(to_string(booleanField), to_string(booleanField), to_integer(booleanField))', - [] + 'from a_index | stats percentile(longField, doubleField) by round(doubleField / 2)', + ['Argument of [percentile] must be a constant, received [doubleField]'] ); testErrorsAndWarnings( - 'from a_index | eval locate(booleanField, booleanField, booleanField)', - [ - 'Argument of [locate] must be [string], found value [booleanField] type [boolean]', - 'Argument of [locate] must be [string], found value [booleanField] type [boolean]', - 'Argument of [locate] must be [number], found value [booleanField] type [boolean]', - ] + 'from a_index | stats var0 = percentile(longField, doubleField) by var1 = round(doubleField / 2)', + ['Argument of [=] must be a constant, received [percentile(longField,doubleField)]'] ); testErrorsAndWarnings( - 'from a_index | eval locate(stringField, stringField, numberField, extraArg)', - ['Error: [locate] function expects no more than 3 arguments, got 4.'] + 'from a_index | stats avg(doubleField), percentile(longField, doubleField) by round(doubleField / 2), ipField', + ['Argument of [percentile] must be a constant, received [doubleField]'] ); - testErrorsAndWarnings('from a_index | sort locate(stringField, stringField)', []); - testErrorsAndWarnings('from a_index | eval locate(null, null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval locate(nullVar, nullVar, nullVar)', []); - }); - - describe('to_base64', () => { - testErrorsAndWarnings('row var = to_base64("a")', []); - testErrorsAndWarnings('row to_base64("a")', []); - testErrorsAndWarnings('row var = to_base64(to_string(true))', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(longField, doubleField) by var1 = round(doubleField / 2), ipField', + ['Argument of [=] must be a constant, received [percentile(longField,doubleField)]'] + ); - testErrorsAndWarnings('row var = to_base64(true)', [ - 'Argument of [to_base64] must be [string], found value [true] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), percentile(longField, doubleField) by round(doubleField / 2), doubleField / 2', + ['Argument of [percentile] must be a constant, received [doubleField]'] + ); - testErrorsAndWarnings('from a_index | where length(to_base64(stringField)) > 0', []); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(longField, doubleField) by var1 = round(doubleField / 2), doubleField / 2', + ['Argument of [=] must be a constant, received [percentile(longField,doubleField)]'] + ); - testErrorsAndWarnings('from a_index | where length(to_base64(booleanField)) > 0', [ - 'Argument of [to_base64] must be [string], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | stats var = percentile(longField, longField)', [ + 'Argument of [=] must be a constant, received [percentile(longField,longField)]', ]); - - testErrorsAndWarnings('from a_index | eval var = to_base64(stringField)', []); - testErrorsAndWarnings('from a_index | eval to_base64(stringField)', []); - testErrorsAndWarnings('from a_index | eval var = to_base64(to_string(booleanField))', []); - - testErrorsAndWarnings('from a_index | eval to_base64(booleanField)', [ - 'Argument of [to_base64] must be [string], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | stats percentile(longField, longField)', [ + 'Argument of [percentile] must be a constant, received [longField]', ]); - - testErrorsAndWarnings('from a_index | eval var = to_base64(*)', [ - 'Using wildcards (*) in to_base64 is not allowed', + testErrorsAndWarnings( + 'from a_index | stats var = round(percentile(longField, longField))', + ['Argument of [=] must be a constant, received [round(percentile(longField,longField))]'] + ); + testErrorsAndWarnings('from a_index | stats round(percentile(longField, longField))', [ + 'Argument of [round] must be a constant, received [percentile(longField,longField)]', ]); - testErrorsAndWarnings('from a_index | eval to_base64(stringField, extraArg)', [ - 'Error: [to_base64] function expects exactly one argument, got 2.', - ]); + testErrorsAndWarnings( + 'from a_index | stats var = round(percentile(longField, longField)) + percentile(longField, longField)', + [ + 'Argument of [=] must be a constant, received [round(percentile(longField,longField))+percentile(longField,longField)]', + ] + ); - testErrorsAndWarnings('from a_index | sort to_base64(stringField)', []); - testErrorsAndWarnings('from a_index | eval to_base64(null)', []); - testErrorsAndWarnings('row nullVar = null | eval to_base64(nullVar)', []); - }); + testErrorsAndWarnings( + 'from a_index | stats round(percentile(longField, longField)) + percentile(longField, longField)', + [ + 'Argument of [+] must be a constant, received [round(percentile(longField,longField))]', + 'Argument of [+] must be a constant, received [percentile(longField,longField)]', + ] + ); - describe('ip_prefix', () => { - testErrorsAndWarnings('row var = ip_prefix(to_ip("127.0.0.1"), 5, 5)', []); - testErrorsAndWarnings('row ip_prefix(to_ip("127.0.0.1"), 5, 5)', []); + testErrorsAndWarnings('from a_index | stats var0 = percentile(longField, longField)', [ + 'Argument of [=] must be a constant, received [percentile(longField,longField)]', + ]); testErrorsAndWarnings( - 'row var = ip_prefix(to_ip(to_ip("127.0.0.1")), to_integer(true), to_integer(true))', - [] + 'from a_index | stats avg(doubleField), percentile(longField, longField)', + ['Argument of [percentile] must be a constant, received [longField]'] ); - testErrorsAndWarnings('row var = ip_prefix(true, true, true)', [ - 'Argument of [ip_prefix] must be [ip], found value [true] type [boolean]', - 'Argument of [ip_prefix] must be [number], found value [true] type [boolean]', - 'Argument of [ip_prefix] must be [number], found value [true] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(longField, longField)', + ['Argument of [=] must be a constant, received [percentile(longField,longField)]'] + ); testErrorsAndWarnings( - 'from a_index | eval var = ip_prefix(ipField, numberField, numberField)', - [] + 'from a_index | stats percentile(longField, longField) by round(doubleField / 2)', + ['Argument of [percentile] must be a constant, received [longField]'] ); testErrorsAndWarnings( - 'from a_index | eval ip_prefix(ipField, numberField, numberField)', - [] + 'from a_index | stats var0 = percentile(longField, longField) by var1 = round(doubleField / 2)', + ['Argument of [=] must be a constant, received [percentile(longField,longField)]'] ); testErrorsAndWarnings( - 'from a_index | eval var = ip_prefix(to_ip(ipField), to_integer(booleanField), to_integer(booleanField))', - [] + 'from a_index | stats avg(doubleField), percentile(longField, longField) by round(doubleField / 2), ipField', + ['Argument of [percentile] must be a constant, received [longField]'] ); testErrorsAndWarnings( - 'from a_index | eval ip_prefix(booleanField, booleanField, booleanField)', - [ - 'Argument of [ip_prefix] must be [ip], found value [booleanField] type [boolean]', - 'Argument of [ip_prefix] must be [number], found value [booleanField] type [boolean]', - 'Argument of [ip_prefix] must be [number], found value [booleanField] type [boolean]', - ] + 'from a_index | stats avg(doubleField), var0 = percentile(longField, longField) by var1 = round(doubleField / 2), ipField', + ['Argument of [=] must be a constant, received [percentile(longField,longField)]'] ); testErrorsAndWarnings( - 'from a_index | eval ip_prefix(ipField, numberField, numberField, extraArg)', - ['Error: [ip_prefix] function expects exactly 3 arguments, got 4.'] + 'from a_index | stats avg(doubleField), percentile(longField, longField) by round(doubleField / 2), doubleField / 2', + ['Argument of [percentile] must be a constant, received [longField]'] ); testErrorsAndWarnings( - 'from a_index | sort ip_prefix(ipField, numberField, numberField)', - [] + 'from a_index | stats avg(doubleField), var0 = percentile(longField, longField) by var1 = round(doubleField / 2), doubleField / 2', + ['Argument of [=] must be a constant, received [percentile(longField,longField)]'] ); - testErrorsAndWarnings('from a_index | eval ip_prefix(null, null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval ip_prefix(nullVar, nullVar, nullVar)', []); - }); - describe('mv_append', () => { - testErrorsAndWarnings('row var = mv_append(true, true)', []); - testErrorsAndWarnings('row mv_append(true, true)', []); - testErrorsAndWarnings('row var = mv_append(to_boolean(true), to_boolean(true))', []); + testErrorsAndWarnings('from a_index | stats var = percentile(longField, integerField)', [ + 'Argument of [=] must be a constant, received [percentile(longField,integerField)]', + ]); + testErrorsAndWarnings('from a_index | stats percentile(longField, integerField)', [ + 'Argument of [percentile] must be a constant, received [integerField]', + ]); testErrorsAndWarnings( - 'row var = mv_append(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', - [] + 'from a_index | stats var = round(percentile(longField, integerField))', + [ + 'Argument of [=] must be a constant, received [round(percentile(longField,integerField))]', + ] ); + testErrorsAndWarnings('from a_index | stats round(percentile(longField, integerField))', [ + 'Argument of [round] must be a constant, received [percentile(longField,integerField)]', + ]); + testErrorsAndWarnings( - 'row mv_append(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', - [] + 'from a_index | stats var = round(percentile(longField, integerField)) + percentile(longField, integerField)', + [ + 'Argument of [=] must be a constant, received [round(percentile(longField,integerField))+percentile(longField,integerField)]', + ] ); testErrorsAndWarnings( - 'row var = mv_append(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', - [] + 'from a_index | stats round(percentile(longField, integerField)) + percentile(longField, integerField)', + [ + 'Argument of [+] must be a constant, received [round(percentile(longField,integerField))]', + 'Argument of [+] must be a constant, received [percentile(longField,integerField)]', + ] ); + testErrorsAndWarnings('from a_index | stats var0 = percentile(longField, integerField)', [ + 'Argument of [=] must be a constant, received [percentile(longField,integerField)]', + ]); + testErrorsAndWarnings( - 'row var = mv_append(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', - [] + 'from a_index | stats avg(doubleField), percentile(longField, integerField)', + ['Argument of [percentile] must be a constant, received [integerField]'] ); testErrorsAndWarnings( - 'row mv_append(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', - [] + 'from a_index | stats avg(doubleField), var0 = percentile(longField, integerField)', + ['Argument of [=] must be a constant, received [percentile(longField,integerField)]'] ); testErrorsAndWarnings( - 'row var = mv_append(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', - [] + 'from a_index | stats percentile(longField, integerField) by round(doubleField / 2)', + ['Argument of [percentile] must be a constant, received [integerField]'] ); - testErrorsAndWarnings('row var = mv_append(now(), now())', []); - testErrorsAndWarnings('row mv_append(now(), now())', []); - testErrorsAndWarnings('row var = mv_append(to_datetime(now()), to_datetime(now()))', []); - testErrorsAndWarnings('row var = mv_append(5, 5)', []); - testErrorsAndWarnings('row mv_append(5, 5)', []); - testErrorsAndWarnings('row var = mv_append(to_integer(true), to_integer(true))', []); - testErrorsAndWarnings( - 'row var = mv_append(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', - [] + 'from a_index | stats var0 = percentile(longField, integerField) by var1 = round(doubleField / 2)', + ['Argument of [=] must be a constant, received [percentile(longField,integerField)]'] ); testErrorsAndWarnings( - 'row mv_append(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', - [] + 'from a_index | stats avg(doubleField), percentile(longField, integerField) by round(doubleField / 2), ipField', + ['Argument of [percentile] must be a constant, received [integerField]'] ); testErrorsAndWarnings( - 'row var = mv_append(to_geopoint(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', - [] + 'from a_index | stats avg(doubleField), var0 = percentile(longField, integerField) by var1 = round(doubleField / 2), ipField', + ['Argument of [=] must be a constant, received [percentile(longField,integerField)]'] ); testErrorsAndWarnings( - 'row var = mv_append(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', - [] + 'from a_index | stats avg(doubleField), percentile(longField, integerField) by round(doubleField / 2), doubleField / 2', + ['Argument of [percentile] must be a constant, received [integerField]'] ); testErrorsAndWarnings( - 'row mv_append(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', - [] + 'from a_index | stats avg(doubleField), var0 = percentile(longField, integerField) by var1 = round(doubleField / 2), doubleField / 2', + ['Argument of [=] must be a constant, received [percentile(longField,integerField)]'] ); + testErrorsAndWarnings('from a_index | stats var = percentile(integerField, doubleField)', [ + 'Argument of [=] must be a constant, received [percentile(integerField,doubleField)]', + ]); + testErrorsAndWarnings('from a_index | stats percentile(integerField, doubleField)', [ + 'Argument of [percentile] must be a constant, received [doubleField]', + ]); + testErrorsAndWarnings( - 'row var = mv_append(to_geoshape(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', - [] + 'from a_index | stats var = round(percentile(integerField, doubleField))', + [ + 'Argument of [=] must be a constant, received [round(percentile(integerField,doubleField))]', + ] ); - testErrorsAndWarnings('row var = mv_append(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); - testErrorsAndWarnings('row mv_append(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('from a_index | stats round(percentile(integerField, doubleField))', [ + 'Argument of [round] must be a constant, received [percentile(integerField,doubleField)]', + ]); testErrorsAndWarnings( - 'row var = mv_append(to_ip(to_ip("127.0.0.1")), to_ip(to_ip("127.0.0.1")))', - [] + 'from a_index | stats var = round(percentile(integerField, doubleField)) + percentile(integerField, doubleField)', + [ + 'Argument of [=] must be a constant, received [round(percentile(integerField,doubleField))+percentile(integerField,doubleField)]', + ] ); - testErrorsAndWarnings('row var = mv_append("a", "a")', []); - testErrorsAndWarnings('row mv_append("a", "a")', []); - testErrorsAndWarnings('row var = mv_append(to_string(true), to_string(true))', []); - testErrorsAndWarnings('row var = mv_append(to_version("1.0.0"), to_version("1.0.0"))', []); - testErrorsAndWarnings('row mv_append(to_version("1.0.0"), to_version("1.0.0"))', []); - testErrorsAndWarnings('row var = mv_append(to_version("a"), to_version("a"))', []); - testErrorsAndWarnings('from a_index | where mv_append(numberField, numberField) > 0', []); testErrorsAndWarnings( - 'from a_index | where length(mv_append(stringField, stringField)) > 0', - [] + 'from a_index | stats round(percentile(integerField, doubleField)) + percentile(integerField, doubleField)', + [ + 'Argument of [+] must be a constant, received [round(percentile(integerField,doubleField))]', + 'Argument of [+] must be a constant, received [percentile(integerField,doubleField)]', + ] ); + + testErrorsAndWarnings('from a_index | stats var0 = percentile(integerField, doubleField)', [ + 'Argument of [=] must be a constant, received [percentile(integerField,doubleField)]', + ]); + testErrorsAndWarnings( - 'from a_index | eval var = mv_append(booleanField, booleanField)', - [] + 'from a_index | stats avg(doubleField), percentile(integerField, doubleField)', + ['Argument of [percentile] must be a constant, received [doubleField]'] ); - testErrorsAndWarnings('from a_index | eval mv_append(booleanField, booleanField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(to_boolean(booleanField), to_boolean(booleanField))', - [] + 'from a_index | stats avg(doubleField), var0 = percentile(integerField, doubleField)', + ['Argument of [=] must be a constant, received [percentile(integerField,doubleField)]'] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(cartesianPointField, cartesianPointField)', - [] + 'from a_index | stats percentile(integerField, doubleField) by round(doubleField / 2)', + ['Argument of [percentile] must be a constant, received [doubleField]'] ); testErrorsAndWarnings( - 'from a_index | eval mv_append(cartesianPointField, cartesianPointField)', - [] + 'from a_index | stats var0 = percentile(integerField, doubleField) by var1 = round(doubleField / 2)', + ['Argument of [=] must be a constant, received [percentile(integerField,doubleField)]'] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', - [] + 'from a_index | stats avg(doubleField), percentile(integerField, doubleField) by round(doubleField / 2), ipField', + ['Argument of [percentile] must be a constant, received [doubleField]'] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(cartesianShapeField, cartesianShapeField)', - [] + 'from a_index | stats avg(doubleField), var0 = percentile(integerField, doubleField) by var1 = round(doubleField / 2), ipField', + ['Argument of [=] must be a constant, received [percentile(integerField,doubleField)]'] ); testErrorsAndWarnings( - 'from a_index | eval mv_append(cartesianShapeField, cartesianShapeField)', - [] + 'from a_index | stats avg(doubleField), percentile(integerField, doubleField) by round(doubleField / 2), doubleField / 2', + ['Argument of [percentile] must be a constant, received [doubleField]'] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', - [] + 'from a_index | stats avg(doubleField), var0 = percentile(integerField, doubleField) by var1 = round(doubleField / 2), doubleField / 2', + ['Argument of [=] must be a constant, received [percentile(integerField,doubleField)]'] ); - testErrorsAndWarnings('from a_index | eval var = mv_append(dateField, dateField)', []); - testErrorsAndWarnings('from a_index | eval mv_append(dateField, dateField)', []); + testErrorsAndWarnings('from a_index | stats var = percentile(integerField, longField)', [ + 'Argument of [=] must be a constant, received [percentile(integerField,longField)]', + ]); + testErrorsAndWarnings('from a_index | stats percentile(integerField, longField)', [ + 'Argument of [percentile] must be a constant, received [longField]', + ]); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(to_datetime(dateField), to_datetime(dateField))', - [] + 'from a_index | stats var = round(percentile(integerField, longField))', + [ + 'Argument of [=] must be a constant, received [round(percentile(integerField,longField))]', + ] ); - testErrorsAndWarnings('from a_index | eval var = mv_append(numberField, numberField)', []); - testErrorsAndWarnings('from a_index | eval mv_append(numberField, numberField)', []); + testErrorsAndWarnings('from a_index | stats round(percentile(integerField, longField))', [ + 'Argument of [round] must be a constant, received [percentile(integerField,longField)]', + ]); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(to_integer(booleanField), to_integer(booleanField))', - [] + 'from a_index | stats var = round(percentile(integerField, longField)) + percentile(integerField, longField)', + [ + 'Argument of [=] must be a constant, received [round(percentile(integerField,longField))+percentile(integerField,longField)]', + ] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(geoPointField, geoPointField)', - [] + 'from a_index | stats round(percentile(integerField, longField)) + percentile(integerField, longField)', + [ + 'Argument of [+] must be a constant, received [round(percentile(integerField,longField))]', + 'Argument of [+] must be a constant, received [percentile(integerField,longField)]', + ] ); - testErrorsAndWarnings('from a_index | eval mv_append(geoPointField, geoPointField)', []); + + testErrorsAndWarnings('from a_index | stats var0 = percentile(integerField, longField)', [ + 'Argument of [=] must be a constant, received [percentile(integerField,longField)]', + ]); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(to_geopoint(geoPointField), to_geopoint(geoPointField))', - [] + 'from a_index | stats avg(doubleField), percentile(integerField, longField)', + ['Argument of [percentile] must be a constant, received [longField]'] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(geoShapeField, geoShapeField)', - [] + 'from a_index | stats avg(doubleField), var0 = percentile(integerField, longField)', + ['Argument of [=] must be a constant, received [percentile(integerField,longField)]'] ); - testErrorsAndWarnings('from a_index | eval mv_append(geoShapeField, geoShapeField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(to_geoshape(geoPointField), to_geoshape(geoPointField))', - [] + 'from a_index | stats percentile(integerField, longField) by round(doubleField / 2)', + ['Argument of [percentile] must be a constant, received [longField]'] ); - testErrorsAndWarnings('from a_index | eval var = mv_append(ipField, ipField)', []); - testErrorsAndWarnings('from a_index | eval mv_append(ipField, ipField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(to_ip(ipField), to_ip(ipField))', - [] + 'from a_index | stats var0 = percentile(integerField, longField) by var1 = round(doubleField / 2)', + ['Argument of [=] must be a constant, received [percentile(integerField,longField)]'] ); - testErrorsAndWarnings('from a_index | eval var = mv_append(stringField, stringField)', []); - testErrorsAndWarnings('from a_index | eval mv_append(stringField, stringField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(to_string(booleanField), to_string(booleanField))', - [] + 'from a_index | stats avg(doubleField), percentile(integerField, longField) by round(doubleField / 2), ipField', + ['Argument of [percentile] must be a constant, received [longField]'] ); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(versionField, versionField)', - [] + 'from a_index | stats avg(doubleField), var0 = percentile(integerField, longField) by var1 = round(doubleField / 2), ipField', + ['Argument of [=] must be a constant, received [percentile(integerField,longField)]'] ); - testErrorsAndWarnings('from a_index | eval mv_append(versionField, versionField)', []); testErrorsAndWarnings( - 'from a_index | eval var = mv_append(to_version(stringField), to_version(stringField))', - [] + 'from a_index | stats avg(doubleField), percentile(integerField, longField) by round(doubleField / 2), doubleField / 2', + ['Argument of [percentile] must be a constant, received [longField]'] ); testErrorsAndWarnings( - 'from a_index | eval mv_append(booleanField, booleanField, extraArg)', - ['Error: [mv_append] function expects exactly 2 arguments, got 3.'] + 'from a_index | stats avg(doubleField), var0 = percentile(integerField, longField) by var1 = round(doubleField / 2), doubleField / 2', + ['Argument of [=] must be a constant, received [percentile(integerField,longField)]'] ); - testErrorsAndWarnings('from a_index | sort mv_append(booleanField, booleanField)', []); - testErrorsAndWarnings('from a_index | eval mv_append(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval mv_append(nullVar, nullVar)', []); - }); + testErrorsAndWarnings('from a_index | stats var = percentile(integerField, integerField)', [ + 'Argument of [=] must be a constant, received [percentile(integerField,integerField)]', + ]); + testErrorsAndWarnings('from a_index | stats percentile(integerField, integerField)', [ + 'Argument of [percentile] must be a constant, received [integerField]', + ]); - describe('repeat', () => { - testErrorsAndWarnings('row var = repeat("a", 5)', []); - testErrorsAndWarnings('row repeat("a", 5)', []); - testErrorsAndWarnings('row var = repeat(to_string(true), to_integer(true))', []); + testErrorsAndWarnings( + 'from a_index | stats var = round(percentile(integerField, integerField))', + [ + 'Argument of [=] must be a constant, received [round(percentile(integerField,integerField))]', + ] + ); - testErrorsAndWarnings('row var = repeat(true, true)', [ - 'Argument of [repeat] must be [string], found value [true] type [boolean]', - 'Argument of [repeat] must be [number], found value [true] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats round(percentile(integerField, integerField))', + [ + 'Argument of [round] must be a constant, received [percentile(integerField,integerField)]', + ] + ); testErrorsAndWarnings( - 'from a_index | where length(repeat(stringField, numberField)) > 0', - [] + 'from a_index | stats var = round(percentile(integerField, integerField)) + percentile(integerField, integerField)', + [ + 'Argument of [=] must be a constant, received [round(percentile(integerField,integerField))+percentile(integerField,integerField)]', + ] ); testErrorsAndWarnings( - 'from a_index | where length(repeat(booleanField, booleanField)) > 0', + 'from a_index | stats round(percentile(integerField, integerField)) + percentile(integerField, integerField)', [ - 'Argument of [repeat] must be [string], found value [booleanField] type [boolean]', - 'Argument of [repeat] must be [number], found value [booleanField] type [boolean]', + 'Argument of [+] must be a constant, received [round(percentile(integerField,integerField))]', + 'Argument of [+] must be a constant, received [percentile(integerField,integerField)]', ] ); - testErrorsAndWarnings('from a_index | eval var = repeat(stringField, numberField)', []); - testErrorsAndWarnings('from a_index | eval repeat(stringField, numberField)', []); + testErrorsAndWarnings( + 'from a_index | stats var0 = percentile(integerField, integerField)', + ['Argument of [=] must be a constant, received [percentile(integerField,integerField)]'] + ); testErrorsAndWarnings( - 'from a_index | eval var = repeat(to_string(booleanField), to_integer(booleanField))', - [] + 'from a_index | stats avg(doubleField), percentile(integerField, integerField)', + ['Argument of [percentile] must be a constant, received [integerField]'] ); - testErrorsAndWarnings('from a_index | eval repeat(booleanField, booleanField)', [ - 'Argument of [repeat] must be [string], found value [booleanField] type [boolean]', - 'Argument of [repeat] must be [number], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(integerField, integerField)', + ['Argument of [=] must be a constant, received [percentile(integerField,integerField)]'] + ); - testErrorsAndWarnings('from a_index | eval repeat(stringField, numberField, extraArg)', [ - 'Error: [repeat] function expects exactly 2 arguments, got 3.', - ]); + testErrorsAndWarnings( + 'from a_index | stats percentile(integerField, integerField) by round(doubleField / 2)', + ['Argument of [percentile] must be a constant, received [integerField]'] + ); - testErrorsAndWarnings('from a_index | sort repeat(stringField, numberField)', []); - testErrorsAndWarnings('from a_index | eval repeat(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval repeat(nullVar, nullVar)', []); - }); + testErrorsAndWarnings( + 'from a_index | stats var0 = percentile(integerField, integerField) by var1 = round(doubleField / 2)', + ['Argument of [=] must be a constant, received [percentile(integerField,integerField)]'] + ); - describe('top', () => { - describe('no errors on correct usage', () => { - testErrorsAndWarnings('from a_index | stats var = top(stringField, 3, "asc")', []); - testErrorsAndWarnings('from a_index | stats top(stringField, 1, "desc")', []); - testErrorsAndWarnings('from a_index | stats var = top(stringField, 5, "asc")', []); - testErrorsAndWarnings('from a_index | stats top(stringField, 5, "asc")', []); - }); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), percentile(integerField, integerField) by round(doubleField / 2), ipField', + ['Argument of [percentile] must be a constant, received [integerField]'] + ); - describe('errors on invalid argument count', () => { - testErrorsAndWarnings('from a_index | stats var = top(stringField, 3)', [ - 'Error: [top] function expects exactly 3 arguments, got 2.', - ]); - testErrorsAndWarnings('from a_index | stats var = top(stringField)', [ - 'Error: [top] function expects exactly 3 arguments, got 1.', - ]); - }); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(integerField, integerField) by var1 = round(doubleField / 2), ipField', + ['Argument of [=] must be a constant, received [percentile(integerField,integerField)]'] + ); - describe('limit must be a literal', () => { - testErrorsAndWarnings('from a_index | stats var = top(stringField, numberField, "asc")', [ - 'Argument of [=] must be a constant, received [top(stringField,numberField,"asc")]', - ]); - testErrorsAndWarnings( - 'from a_index | stats var = top(stringField, 100 + numberField, "asc")', - [ - 'Argument of [=] must be a constant, received [top(stringField,100+numberField,"asc")]', - ] - ); - }); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), percentile(integerField, integerField) by round(doubleField / 2), doubleField / 2', + ['Argument of [percentile] must be a constant, received [integerField]'] + ); - describe('order must be "asc" or "desc"', () => { - testErrorsAndWarnings('from a_index | stats var = top(stringField, 1, stringField)', [ - 'Argument of [=] must be a constant, received [top(stringField,1,stringField)]', - ]); - testErrorsAndWarnings( - 'from a_index | stats var = top(stringField, 1, "asdf")', - [], - ['Invalid option ["asdf"] for top. Supported options: ["asc", "desc"].'] - ); - }); + testErrorsAndWarnings( + 'from a_index | stats avg(doubleField), var0 = percentile(integerField, integerField) by var1 = round(doubleField / 2), doubleField / 2', + ['Argument of [=] must be a constant, received [percentile(integerField,integerField)]'] + ); - testErrorsAndWarnings('from a_index | sort top(stringField, numberField, "asc")', [ - 'SORT does not support function top', + testErrorsAndWarnings('from a_index | sort percentile(doubleField, doubleField)', [ + 'SORT does not support function percentile', ]); - testErrorsAndWarnings('from a_index | where top(stringField, numberField, "asc")', [ - 'WHERE does not support function top', + testErrorsAndWarnings('from a_index | where percentile(doubleField, doubleField)', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings('from a_index | where top(stringField, numberField, "asc") > 0', [ - 'WHERE does not support function top', + testErrorsAndWarnings('from a_index | where percentile(doubleField, doubleField) > 0', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings('from a_index | eval var = top(stringField, numberField, "asc")', [ - 'EVAL does not support function top', + testErrorsAndWarnings('from a_index | where percentile(doubleField, longField)', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings( - 'from a_index | eval var = top(stringField, numberField, "asc") > 0', - ['EVAL does not support function top'] - ); - - testErrorsAndWarnings('from a_index | eval top(stringField, numberField, "asc")', [ - 'EVAL does not support function top', + testErrorsAndWarnings('from a_index | where percentile(doubleField, longField) > 0', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings('from a_index | eval top(stringField, numberField, "asc") > 0', [ - 'EVAL does not support function top', + testErrorsAndWarnings('from a_index | where percentile(doubleField, integerField)', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings('from a_index | sort top(stringField, 5, "asc")', [ - 'SORT does not support function top', + testErrorsAndWarnings('from a_index | where percentile(doubleField, integerField) > 0', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings('from a_index | where top(stringField, 5, "asc")', [ - 'WHERE does not support function top', + testErrorsAndWarnings('from a_index | where percentile(longField, doubleField)', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings('from a_index | where top(stringField, 5, "asc") > 0', [ - 'WHERE does not support function top', + testErrorsAndWarnings('from a_index | where percentile(longField, doubleField) > 0', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings('from a_index | eval var = top(stringField, 5, "asc")', [ - 'EVAL does not support function top', + testErrorsAndWarnings('from a_index | where percentile(longField, longField)', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings('from a_index | eval var = top(stringField, 5, "asc") > 0', [ - 'EVAL does not support function top', + testErrorsAndWarnings('from a_index | where percentile(longField, longField) > 0', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings('from a_index | eval top(stringField, 5, "asc")', [ - 'EVAL does not support function top', + testErrorsAndWarnings('from a_index | where percentile(longField, integerField)', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings('from a_index | eval top(stringField, 5, "asc") > 0', [ - 'EVAL does not support function top', + testErrorsAndWarnings('from a_index | where percentile(longField, integerField) > 0', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings('from a_index | stats var = top(stringField, 5, "asc")', []); - testErrorsAndWarnings('from a_index | stats top(stringField, 5, "asc")', []); - testErrorsAndWarnings('from a_index | stats top(stringField, numberField, "asc")', [ - 'Argument of [top] must be a constant, received [numberField]', + testErrorsAndWarnings('from a_index | where percentile(integerField, doubleField)', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings('from a_index | stats top(null, null, null)', []); - testErrorsAndWarnings('row nullVar = null | stats top(nullVar, nullVar, nullVar)', [ - 'Argument of [top] must be a constant, received [nullVar]', - 'Argument of [top] must be a constant, received [nullVar]', + testErrorsAndWarnings('from a_index | where percentile(integerField, doubleField) > 0', [ + 'WHERE does not support function percentile', ]); - }); - - describe('st_distance', () => { - testErrorsAndWarnings( - 'row var = st_distance(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', - [] - ); - - testErrorsAndWarnings( - 'row st_distance(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', - [] - ); - - testErrorsAndWarnings( - 'row var = st_distance(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', - [] - ); - - testErrorsAndWarnings( - 'row var = st_distance(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', - [] - ); - - testErrorsAndWarnings( - 'row st_distance(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', - [] - ); - - testErrorsAndWarnings( - 'row var = st_distance(to_geopoint(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', - [] - ); - testErrorsAndWarnings('row var = st_distance(true, true)', [ - 'Argument of [st_distance] must be [cartesian_point], found value [true] type [boolean]', - 'Argument of [st_distance] must be [cartesian_point], found value [true] type [boolean]', + testErrorsAndWarnings('from a_index | where percentile(integerField, longField)', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings( - 'from a_index | eval var = st_distance(cartesianPointField, cartesianPointField)', - [] - ); - - testErrorsAndWarnings( - 'from a_index | eval st_distance(cartesianPointField, cartesianPointField)', - [] - ); + testErrorsAndWarnings('from a_index | where percentile(integerField, longField) > 0', [ + 'WHERE does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | eval var = st_distance(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', - [] - ); + testErrorsAndWarnings('from a_index | where percentile(integerField, integerField)', [ + 'WHERE does not support function percentile', + ]); - testErrorsAndWarnings('from a_index | eval st_distance(booleanField, booleanField)', [ - 'Argument of [st_distance] must be [cartesian_point], found value [booleanField] type [boolean]', - 'Argument of [st_distance] must be [cartesian_point], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | where percentile(integerField, integerField) > 0', [ + 'WHERE does not support function percentile', ]); - testErrorsAndWarnings( - 'from a_index | eval var = st_distance(geoPointField, geoPointField)', - [] - ); - testErrorsAndWarnings('from a_index | eval st_distance(geoPointField, geoPointField)', []); + testErrorsAndWarnings('from a_index | eval var = percentile(doubleField, doubleField)', [ + 'EVAL does not support function percentile', + ]); testErrorsAndWarnings( - 'from a_index | eval var = st_distance(to_geopoint(geoPointField), to_geopoint(geoPointField))', - [] + 'from a_index | eval var = percentile(doubleField, doubleField) > 0', + ['EVAL does not support function percentile'] ); - testErrorsAndWarnings( - 'from a_index | eval st_distance(cartesianPointField, cartesianPointField, extraArg)', - ['Error: [st_distance] function expects exactly 2 arguments, got 3.'] - ); + testErrorsAndWarnings('from a_index | eval percentile(doubleField, doubleField)', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | sort st_distance(cartesianPointField, cartesianPointField)', - [] - ); + testErrorsAndWarnings('from a_index | eval percentile(doubleField, doubleField) > 0', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings('from a_index | eval st_distance(null, null)', []); - testErrorsAndWarnings('row nullVar = null | eval st_distance(nullVar, nullVar)', []); - }); + testErrorsAndWarnings('from a_index | eval var = percentile(doubleField, longField)', [ + 'EVAL does not support function percentile', + ]); - describe('weighted_avg', () => { - testErrorsAndWarnings( - 'from a_index | stats var = weighted_avg(numberField, numberField)', - [] - ); - testErrorsAndWarnings('from a_index | stats weighted_avg(numberField, numberField)', []); + testErrorsAndWarnings('from a_index | eval var = percentile(doubleField, longField) > 0', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats var = round(weighted_avg(numberField, numberField))', - [] - ); + testErrorsAndWarnings('from a_index | eval percentile(doubleField, longField)', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats round(weighted_avg(numberField, numberField))', - [] - ); + testErrorsAndWarnings('from a_index | eval percentile(doubleField, longField) > 0', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats var = round(weighted_avg(numberField, numberField)) + weighted_avg(numberField, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | eval var = percentile(doubleField, integerField)', [ + 'EVAL does not support function percentile', + ]); testErrorsAndWarnings( - 'from a_index | stats round(weighted_avg(numberField, numberField)) + weighted_avg(numberField, numberField)', - [] + 'from a_index | eval var = percentile(doubleField, integerField) > 0', + ['EVAL does not support function percentile'] ); - testErrorsAndWarnings( - 'from a_index | stats weighted_avg(numberField / 2, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | eval percentile(doubleField, integerField)', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats var0 = weighted_avg(numberField / 2, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | eval percentile(doubleField, integerField) > 0', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats avg(numberField), weighted_avg(numberField / 2, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | eval var = percentile(longField, doubleField)', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = weighted_avg(numberField / 2, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | eval var = percentile(longField, doubleField) > 0', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats var0 = weighted_avg(numberField, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | eval percentile(longField, doubleField)', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats avg(numberField), weighted_avg(numberField, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | eval percentile(longField, doubleField) > 0', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = weighted_avg(numberField, numberField)', - [] - ); + testErrorsAndWarnings('from a_index | eval var = percentile(longField, longField)', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats weighted_avg(numberField, numberField) by round(numberField / 2)', - [] - ); + testErrorsAndWarnings('from a_index | eval var = percentile(longField, longField) > 0', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats var0 = weighted_avg(numberField, numberField) by var1 = round(numberField / 2)', - [] - ); + testErrorsAndWarnings('from a_index | eval percentile(longField, longField)', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats avg(numberField), weighted_avg(numberField, numberField) by round(numberField / 2), ipField', - [] - ); + testErrorsAndWarnings('from a_index | eval percentile(longField, longField) > 0', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = weighted_avg(numberField, numberField) by var1 = round(numberField / 2), ipField', - [] - ); + testErrorsAndWarnings('from a_index | eval var = percentile(longField, integerField)', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats avg(numberField), weighted_avg(numberField, numberField) by round(numberField / 2), numberField / 2', - [] - ); + testErrorsAndWarnings('from a_index | eval var = percentile(longField, integerField) > 0', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats avg(numberField), var0 = weighted_avg(numberField, numberField) by var1 = round(numberField / 2), numberField / 2', - [] - ); + testErrorsAndWarnings('from a_index | eval percentile(longField, integerField)', [ + 'EVAL does not support function percentile', + ]); - testErrorsAndWarnings( - 'from a_index | stats var = weighted_avg(avg(numberField), avg(numberField))', - [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", - ] - ); + testErrorsAndWarnings('from a_index | eval percentile(longField, integerField) > 0', [ + 'EVAL does not support function percentile', + ]); + + testErrorsAndWarnings('from a_index | eval var = percentile(integerField, doubleField)', [ + 'EVAL does not support function percentile', + ]); testErrorsAndWarnings( - 'from a_index | stats weighted_avg(avg(numberField), avg(numberField))', - [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", - ] + 'from a_index | eval var = percentile(integerField, doubleField) > 0', + ['EVAL does not support function percentile'] ); - testErrorsAndWarnings('from a_index | stats weighted_avg(booleanField, booleanField)', [ - 'Argument of [weighted_avg] must be [number], found value [booleanField] type [boolean]', - 'Argument of [weighted_avg] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval percentile(integerField, doubleField)', [ + 'EVAL does not support function percentile', ]); - testErrorsAndWarnings('from a_index | sort weighted_avg(numberField, numberField)', [ - 'SORT does not support function weighted_avg', + testErrorsAndWarnings('from a_index | eval percentile(integerField, doubleField) > 0', [ + 'EVAL does not support function percentile', ]); - testErrorsAndWarnings('from a_index | where weighted_avg(numberField, numberField)', [ - 'WHERE does not support function weighted_avg', + testErrorsAndWarnings('from a_index | eval var = percentile(integerField, longField)', [ + 'EVAL does not support function percentile', ]); - testErrorsAndWarnings('from a_index | where weighted_avg(numberField, numberField) > 0', [ - 'WHERE does not support function weighted_avg', + testErrorsAndWarnings('from a_index | eval var = percentile(integerField, longField) > 0', [ + 'EVAL does not support function percentile', ]); - testErrorsAndWarnings('from a_index | eval var = weighted_avg(numberField, numberField)', [ - 'EVAL does not support function weighted_avg', + testErrorsAndWarnings('from a_index | eval percentile(integerField, longField)', [ + 'EVAL does not support function percentile', + ]); + + testErrorsAndWarnings('from a_index | eval percentile(integerField, longField) > 0', [ + 'EVAL does not support function percentile', + ]); + + testErrorsAndWarnings('from a_index | eval var = percentile(integerField, integerField)', [ + 'EVAL does not support function percentile', ]); testErrorsAndWarnings( - 'from a_index | eval var = weighted_avg(numberField, numberField) > 0', - ['EVAL does not support function weighted_avg'] + 'from a_index | eval var = percentile(integerField, integerField) > 0', + ['EVAL does not support function percentile'] ); - testErrorsAndWarnings('from a_index | eval weighted_avg(numberField, numberField)', [ - 'EVAL does not support function weighted_avg', + testErrorsAndWarnings('from a_index | eval percentile(integerField, integerField)', [ + 'EVAL does not support function percentile', ]); - testErrorsAndWarnings('from a_index | eval weighted_avg(numberField, numberField) > 0', [ - 'EVAL does not support function weighted_avg', + testErrorsAndWarnings('from a_index | eval percentile(integerField, integerField) > 0', [ + 'EVAL does not support function percentile', ]); - testErrorsAndWarnings('from a_index | stats weighted_avg(null, null)', []); - testErrorsAndWarnings('row nullVar = null | stats weighted_avg(nullVar, nullVar)', []); + testErrorsAndWarnings('from a_index | stats percentile(null, null)', []); + testErrorsAndWarnings('row nullVar = null | stats percentile(nullVar, nullVar)', [ + 'Argument of [percentile] must be a constant, received [nullVar]', + ]); }); - describe('exp', () => { - testErrorsAndWarnings('row var = exp(5)', []); - testErrorsAndWarnings('row exp(5)', []); - testErrorsAndWarnings('row var = exp(to_integer(true))', []); - - testErrorsAndWarnings('row var = exp(true)', [ - 'Argument of [exp] must be [number], found value [true] type [boolean]', + describe('to_string', () => { + testErrorsAndWarnings('row var = to_string(true)', []); + testErrorsAndWarnings('row to_string(true)', []); + testErrorsAndWarnings('row var = to_str(true)', []); + testErrorsAndWarnings('row var = to_string(to_boolean(true))', []); + testErrorsAndWarnings('row var = to_string(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row to_string(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = to_str(cartesianPointField)', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = to_string(to_cartesianpoint(cartesianPointField))', [ + 'Unknown column [cartesianPointField]', ]); + testErrorsAndWarnings('row var = to_string(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row to_string(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = to_str(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = to_string(to_cartesianshape(cartesianPointField))', [ + 'Unknown column [cartesianPointField]', + ]); + testErrorsAndWarnings('row var = to_string(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row to_string(to_datetime("2021-01-01T00:00:00Z"))', []); + testErrorsAndWarnings('row var = to_str(to_datetime("2021-01-01T00:00:00Z"))', []); - testErrorsAndWarnings('from a_index | where exp(numberField) > 0', []); + testErrorsAndWarnings( + 'row var = to_string(to_datetime(to_datetime("2021-01-01T00:00:00Z")))', + [] + ); - testErrorsAndWarnings('from a_index | where exp(booleanField) > 0', [ - 'Argument of [exp] must be [number], found value [booleanField] type [boolean]', - ]); + testErrorsAndWarnings('row var = to_string(5.5)', []); - testErrorsAndWarnings('from a_index | eval var = exp(numberField)', []); - testErrorsAndWarnings('from a_index | eval exp(numberField)', []); - testErrorsAndWarnings('from a_index | eval var = exp(to_integer(booleanField))', []); + testErrorsAndWarnings('row to_string(5.5)', []); + testErrorsAndWarnings('row var = to_str(5.5)', []); + testErrorsAndWarnings('row var = to_string(to_double(true))', []); + testErrorsAndWarnings('row var = to_string(geoPointField)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row to_string(geoPointField)', ['Unknown column [geoPointField]']); + testErrorsAndWarnings('row var = to_str(geoPointField)', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row var = to_string(to_geopoint(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row var = to_string(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row to_string(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = to_str(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = to_string(to_geoshape(geoPointField))', [ + 'Unknown column [geoPointField]', + ]); + testErrorsAndWarnings('row var = to_string(5)', []); + testErrorsAndWarnings('row to_string(5)', []); + testErrorsAndWarnings('row var = to_str(5)', []); + testErrorsAndWarnings('row var = to_string(to_integer(true))', []); + testErrorsAndWarnings('row var = to_string(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row to_string(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = to_str(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = to_string(to_ip(to_ip("127.0.0.1")))', []); + testErrorsAndWarnings('row var = to_string("a")', []); + testErrorsAndWarnings('row to_string("a")', []); + testErrorsAndWarnings('row var = to_str("a")', []); + testErrorsAndWarnings('row var = to_string(to_string(true))', []); + testErrorsAndWarnings('row var = to_string(to_version("1.0.0"))', []); + testErrorsAndWarnings('row to_string(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = to_str(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = to_string(to_version("a"))', []); + testErrorsAndWarnings('from a_index | eval var = to_string(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_string(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_string(to_boolean(booleanField))', []); - testErrorsAndWarnings('from a_index | eval exp(booleanField)', [ - 'Argument of [exp] must be [number], found value [booleanField] type [boolean]', + testErrorsAndWarnings('from a_index | eval to_string(counterDoubleField)', [ + 'Argument of [to_string] must be [boolean], found value [counterDoubleField] type [counter_double]', ]); - testErrorsAndWarnings('from a_index | eval var = exp(*)', [ - 'Using wildcards (*) in exp is not allowed', + testErrorsAndWarnings('from a_index | eval var = to_string(*)', [ + 'Using wildcards (*) in to_string is not allowed', ]); - testErrorsAndWarnings('from a_index | eval exp(numberField, extraArg)', [ - 'Error: [exp] function expects exactly one argument, got 2.', + testErrorsAndWarnings('from a_index | eval var = to_string(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval to_string(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(cartesianPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = to_string(to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = to_string(cartesianShapeField)', []); + testErrorsAndWarnings('from a_index | eval to_string(cartesianShapeField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(cartesianShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = to_string(to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = to_string(dateField)', []); + testErrorsAndWarnings('from a_index | eval to_string(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_string(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = to_string(doubleField)', []); + testErrorsAndWarnings('from a_index | eval to_string(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(doubleField)', []); + testErrorsAndWarnings('from a_index | eval var = to_string(to_double(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_string(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval to_string(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(geoPointField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = to_string(to_geopoint(geoPointField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = to_string(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval to_string(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(geoShapeField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = to_string(to_geoshape(geoPointField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = to_string(integerField)', []); + testErrorsAndWarnings('from a_index | eval to_string(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(integerField)', []); + testErrorsAndWarnings('from a_index | eval var = to_string(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_string(ipField)', []); + testErrorsAndWarnings('from a_index | eval to_string(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = to_string(to_ip(ipField))', []); + testErrorsAndWarnings('from a_index | eval var = to_string(keywordField)', []); + testErrorsAndWarnings('from a_index | eval to_string(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(keywordField)', []); + testErrorsAndWarnings('from a_index | eval var = to_string(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_string(longField)', []); + testErrorsAndWarnings('from a_index | eval to_string(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(longField)', []); + testErrorsAndWarnings('from a_index | eval var = to_string(textField)', []); + testErrorsAndWarnings('from a_index | eval to_string(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(textField)', []); + testErrorsAndWarnings('from a_index | eval var = to_string(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval to_string(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(unsignedLongField)', []); + testErrorsAndWarnings('from a_index | eval var = to_string(versionField)', []); + testErrorsAndWarnings('from a_index | eval to_string(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = to_string(to_version(keywordField))', []); + + testErrorsAndWarnings('from a_index | eval to_string(booleanField, extraArg)', [ + 'Error: [to_string] function expects exactly one argument, got 2.', ]); - testErrorsAndWarnings('from a_index | sort exp(numberField)', []); - testErrorsAndWarnings('from a_index | eval exp(null)', []); - testErrorsAndWarnings('row nullVar = null | eval exp(nullVar)', []); + testErrorsAndWarnings('from a_index | sort to_string(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_string(null)', []); + testErrorsAndWarnings('row nullVar = null | eval to_string(nullVar)', []); + testErrorsAndWarnings('from a_index | eval to_string("2022")', []); + testErrorsAndWarnings('from a_index | eval to_string(concat("20", "22"))', []); }); }); }); diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts b/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts index cea9dccbd8d97..6cc515dc4ac74 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts @@ -76,6 +76,7 @@ import { import { collapseWrongArgumentTypeMessages, getMaxMinNumberOfParams } from './helpers'; import { getParamAtPosition } from '../autocomplete/helper'; import { METADATA_FIELDS } from '../shared/constants'; +import { isStringType } from '../shared/esql_types'; function validateFunctionLiteralArg( astFunction: ESQLFunction, @@ -879,6 +880,7 @@ function validateColumnForCommand( if (columnParamsWithInnerTypes.length) { const hasSomeWrongInnerTypes = columnParamsWithInnerTypes.every(({ innerType }) => { + if (innerType === 'string' && isStringType(columnRef.type)) return false; return innerType !== 'any' && innerType !== columnRef.type; }); if (hasSomeWrongInnerTypes) { diff --git a/packages/kbn-text-based-editor/src/ecs_metadata_helper.test.ts b/packages/kbn-text-based-editor/src/ecs_metadata_helper.test.ts index aa60c10a4a4a6..4cfebe1597607 100644 --- a/packages/kbn-text-based-editor/src/ecs_metadata_helper.test.ts +++ b/packages/kbn-text-based-editor/src/ecs_metadata_helper.test.ts @@ -13,9 +13,9 @@ import type { FieldsMetadataPublicStart } from '@kbn/fields-metadata-plugin/publ describe('getColumnsWithMetadata', () => { it('should return original columns if fieldsMetadata is not provided', async () => { const columns = [ - { name: 'ecs.version', type: 'string' as DatatableColumnType }, - { name: 'field1', type: 'string' as DatatableColumnType }, - { name: 'field2', type: 'number' as DatatableColumnType }, + { name: 'ecs.version', type: 'keyword' as DatatableColumnType }, + { name: 'field1', type: 'text' as DatatableColumnType }, + { name: 'field2', type: 'double' as DatatableColumnType }, ]; const result = await getColumnsWithMetadata(columns); @@ -24,16 +24,16 @@ describe('getColumnsWithMetadata', () => { it('should return columns with metadata if both name and type match with ECS fields', async () => { const columns = [ - { name: 'ecs.field', type: 'string' as DatatableColumnType }, + { name: 'ecs.field', type: 'text' as DatatableColumnType }, { name: 'ecs.fakeBooleanField', type: 'boolean' as DatatableColumnType }, - { name: 'field2', type: 'number' as DatatableColumnType }, + { name: 'field2', type: 'double' as DatatableColumnType }, ]; const fieldsMetadata = { getClient: jest.fn().mockResolvedValue({ find: jest.fn().mockResolvedValue({ fields: { 'ecs.version': { description: 'ECS version field', type: 'keyword' }, - 'ecs.field': { description: 'ECS field description', type: 'keyword' }, + 'ecs.field': { description: 'ECS field description', type: 'text' }, 'ecs.fakeBooleanField': { description: 'ECS fake boolean field description', type: 'keyword', @@ -48,19 +48,19 @@ describe('getColumnsWithMetadata', () => { expect(result).toEqual([ { name: 'ecs.field', - type: 'string', + type: 'text', metadata: { description: 'ECS field description' }, }, { name: 'ecs.fakeBooleanField', type: 'boolean' }, - { name: 'field2', type: 'number' }, + { name: 'field2', type: 'double' }, ]); }); it('should handle keyword suffix correctly', async () => { const columns = [ - { name: 'ecs.version', type: 'string' as DatatableColumnType }, - { name: 'ecs.version.keyword', type: 'string' as DatatableColumnType }, - { name: 'field2', type: 'number' as DatatableColumnType }, + { name: 'ecs.version', type: 'keyword' as DatatableColumnType }, + { name: 'ecs.version.keyword', type: 'keyword' as DatatableColumnType }, + { name: 'field2', type: 'double' as DatatableColumnType }, ]; const fieldsMetadata = { getClient: jest.fn().mockResolvedValue({ @@ -75,13 +75,13 @@ describe('getColumnsWithMetadata', () => { const result = await getColumnsWithMetadata(columns, fieldsMetadata); expect(result).toEqual([ - { name: 'ecs.version', type: 'string', metadata: { description: 'ECS version field' } }, + { name: 'ecs.version', type: 'keyword', metadata: { description: 'ECS version field' } }, { name: 'ecs.version.keyword', - type: 'string', + type: 'keyword', metadata: { description: 'ECS version field' }, }, - { name: 'field2', type: 'number' }, + { name: 'field2', type: 'double' }, ]); }); }); diff --git a/packages/kbn-text-based-editor/src/ecs_metadata_helper.ts b/packages/kbn-text-based-editor/src/ecs_metadata_helper.ts index 687999350be0e..14198ab9d911a 100644 --- a/packages/kbn-text-based-editor/src/ecs_metadata_helper.ts +++ b/packages/kbn-text-based-editor/src/ecs_metadata_helper.ts @@ -7,7 +7,6 @@ */ import type { ESQLRealField } from '@kbn/esql-validation-autocomplete'; -import { esFieldTypeToKibanaFieldType } from '@kbn/field-types'; import type { FieldsMetadataPublicStart } from '@kbn/fields-metadata-plugin/public'; import { chunk } from 'lodash'; @@ -45,11 +44,7 @@ export async function getColumnsWithMetadata( const metadata = fields.fields[removeKeywordSuffix(c.name)]; // Need to convert metadata's type (e.g. keyword) to ES|QL type (e.g. string) to check if they are the same - if ( - !metadata || - (metadata?.type && esFieldTypeToKibanaFieldType(metadata.type) !== c.type) - ) - return c; + if (!metadata || (metadata?.type && metadata.type !== c.type)) return c; return { ...c, metadata: { description: metadata.description }, diff --git a/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx b/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx index e2d3fd630999d..110e803fdf54e 100644 --- a/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx +++ b/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx @@ -468,7 +468,14 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ undefined, abortController ).result; - const columns = table?.columns.map((c) => ({ name: c.name, type: c.meta.type })) || []; + const columns = + table?.columns.map((c) => { + // Casting unsupported as unknown to avoid plethora of warnings + // Remove when addressed https://github.com/elastic/kibana/issues/189666 + if (!c.meta.esType || c.meta.esType === 'unsupported') + return { name: c.name, type: 'unknown' }; + return { name: c.name, type: c.meta.esType }; + }) || []; return await getRateLimitedColumnsWithMetadata(columns, fieldsMetadata); } catch (e) { // no action yet diff --git a/packages/kbn-text-based-editor/tsconfig.json b/packages/kbn-text-based-editor/tsconfig.json index 632dd05753459..c141fe2c2e8fa 100644 --- a/packages/kbn-text-based-editor/tsconfig.json +++ b/packages/kbn-text-based-editor/tsconfig.json @@ -28,7 +28,6 @@ "@kbn/shared-ux-markdown", "@kbn/fields-metadata-plugin", "@kbn/esql-validation-autocomplete", - "@kbn/field-types" ], "exclude": [ "target/**/*", diff --git a/test/api_integration/apis/esql/errors.ts b/test/api_integration/apis/esql/errors.ts index e74f86efcb44c..193d48c478209 100644 --- a/test/api_integration/apis/esql/errors.ts +++ b/test/api_integration/apis/esql/errors.ts @@ -137,6 +137,7 @@ export default function ({ getService }: FtrProviderContext) { describe('error messages', () => { const config = readSetupFromESQLPackage(); const { queryToErrors, indexes, policies } = parseConfig(config); + const missmatches: Array<{ query: string; error: string }> = []; // Swap these for DEBUG/further investigation on ES bugs const stringVariants = ['text', 'keyword'] as const; @@ -182,11 +183,18 @@ export default function ({ getService }: FtrProviderContext) { for (const index of indexes) { // setup all indexes, mappings and policies here - log.info(`creating a index "${index}" with mapping...`); + log.info( + `creating a index "${index}" with mapping...\n${JSON.stringify(config.fields)}` + ); + const fieldsExcludingCounterType = config.fields.filter( + // ES|QL supports counter_integer, counter_long, counter_double, date_period, etc. + // but they are not types suitable for Elasticsearch indices + (c: { type: string }) => !c.type.startsWith('counter_') && c.type !== 'date_period' + ); await es.indices.create( createIndexRequest( index, - /unsupported/.test(index) ? config.unsupported_field : config.fields, + /unsupported/.test(index) ? config.unsupported_field : fieldsExcludingCounterType, stringFieldType, numberFieldType ), From 176a2210d769ff004cb0669e002f69099febbec3 Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Thu, 1 Aug 2024 09:38:01 -0700 Subject: [PATCH 03/25] [OAS][DOCS] Add temporary overlays for Kibana API documents (#189322) --- .github/CODEOWNERS | 3 ++- oas_docs/makefile | 7 +++---- oas_docs/overlays/kibana.overlays.serverless.yaml | 12 +++++++++++- oas_docs/overlays/kibana.overlays.yaml | 7 +++++++ 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 246497e110b94..d7055dbca4f44 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1740,8 +1740,9 @@ packages/react @elastic/appex-sharedux /plugins/data_views/docs/openapi @elastic/platform-docs oas_docs/.spectral.yaml @elastic/platform-docs oas_docs/kibana.info.serverless.yaml @elastic/platform-docs -oas_docs/kibana.serverless.yaml @elastic/platform-docs +oas_docs/kibana.info.yaml @elastic/platform-docs oas_docs/makefile @elastic/platform-docs +oas_docs/overlays @elastic/platform-docs # Plugin manifests /src/plugins/**/kibana.jsonc @elastic/kibana-core diff --git a/oas_docs/makefile b/oas_docs/makefile index aa6bd1af38223..ec99abaf9e40d 100644 --- a/oas_docs/makefile +++ b/oas_docs/makefile @@ -16,11 +16,11 @@ .PHONY: api-docs api-docs: ## Generate kibana.serverless.yaml and kibana.yaml @npx @redocly/cli join "kibana.info.serverless.yaml" "../x-pack/plugins/observability_solution/apm/docs/openapi/apm.yaml" "../x-pack/plugins/actions/docs/openapi/bundled_serverless.yaml" "../src/plugins/data_views/docs/openapi/bundled.yaml" "../x-pack/plugins/ml/common/openapi/ml_apis_serverless.yaml" "../packages/core/saved-objects/docs/openapi/bundled_serverless.yaml" "../x-pack/plugins/observability_solution/slo/docs/openapi/slo/bundled.yaml" -o "output/kibana.serverless.yaml" "bundle.serverless.json" --prefix-components-with-info-prop title - @npx @redocly/cli join "kibana.info.yaml" "../x-pack/plugins/alerting/docs/openapi/bundled.yaml" "../x-pack/plugins/observability_solution/apm/docs/openapi/apm.yaml" "../x-pack/plugins/cases/docs/openapi/bundled.yaml" "../x-pack/plugins/actions/docs/openapi/bundled.yaml" "../src/plugins/data_views/docs/openapi/bundled.yaml" "../x-pack/plugins/ml/common/openapi/ml_apis.yaml" "../packages/core/saved-objects/docs/openapi/bundled.yaml" "../x-pack/plugins/observability_solution/slo/docs/openapi/slo/bundled.yaml" "bundle.json" -o "output/kibana.yaml" --prefix-components-with-info-prop title + @npx @redocly/cli join "kibana.info.yaml" "../x-pack/plugins/alerting/docs/openapi/bundled.yaml" "../x-pack/plugins/observability_solution/apm/docs/openapi/apm.yaml" "../x-pack/plugins/cases/docs/openapi/bundled.yaml" "../x-pack/plugins/actions/docs/openapi/bundled.yaml" "../src/plugins/data_views/docs/openapi/bundled.yaml" "../x-pack/plugins/ml/common/openapi/ml_apis.yaml" "../packages/core/saved-objects/docs/openapi/bundled.yaml" "bundle.json" -o "output/kibana.yaml" --prefix-components-with-info-prop title .PHONY: api-docs-stateful api-docs-stateful: ## Generate only kibana.yaml - @npx @redocly/cli join "kibana.info.yaml" "../x-pack/plugins/alerting/docs/openapi/bundled.yaml" "../x-pack/plugins/observability_solution/apm/docs/openapi/apm.yaml" "../x-pack/plugins/cases/docs/openapi/bundled.yaml" "../x-pack/plugins/actions/docs/openapi/bundled.yaml" "../src/plugins/data_views/docs/openapi/bundled.yaml" "../x-pack/plugins/ml/common/openapi/ml_apis.yaml" "../packages/core/saved-objects/docs/openapi/bundled.yaml" "../x-pack/plugins/observability_solution/slo/docs/openapi/slo/bundled.yaml" "bundle.json" -o "output/kibana.yaml" --prefix-components-with-info-prop title + @npx @redocly/cli join "kibana.info.yaml" "../x-pack/plugins/alerting/docs/openapi/bundled.yaml" "../x-pack/plugins/observability_solution/apm/docs/openapi/apm.yaml" "../x-pack/plugins/cases/docs/openapi/bundled.yaml" "../x-pack/plugins/actions/docs/openapi/bundled.yaml" "../src/plugins/data_views/docs/openapi/bundled.yaml" "../x-pack/plugins/ml/common/openapi/ml_apis.yaml" "../packages/core/saved-objects/docs/openapi/bundled.yaml" "bundle.json" -o "output/kibana.yaml" --prefix-components-with-info-prop title # Temporarily omit "../x-pack/plugins/fleet/common/openapi/bundled.yaml" due to internals tag and tag sorting .PHONY: api-docs-serverless @@ -29,8 +29,7 @@ api-docs-serverless: ## Generate only kibana.serverless.yaml .PHONY: api-docs-lint api-docs-lint: ## Run spectral API docs linter - @npx @stoplight/spectral-cli lint "output/kibana.serverless.yaml" --ruleset ".spectral.yaml" - @npx @stoplight/spectral-cli lint "output/kibana.yaml" --ruleset ".spectral.yaml" + @npx @stoplight/spectral-cli lint "output/*.yaml" --ruleset ".spectral.yaml" .PHONY: api-docs-lint-stateful api-docs-lint-stateful: ## Run spectral API docs linter on kibana.yaml diff --git a/oas_docs/overlays/kibana.overlays.serverless.yaml b/oas_docs/overlays/kibana.overlays.serverless.yaml index 359d0d4bddac8..86a73d57c8561 100644 --- a/oas_docs/overlays/kibana.overlays.serverless.yaml +++ b/oas_docs/overlays/kibana.overlays.serverless.yaml @@ -4,6 +4,7 @@ info: title: Overlays for the Kibana API document version: 0.0.1 actions: + # Clean up server definitions - target: '$.servers.*' description: Remove all servers so we can add our own. remove: true @@ -14,6 +15,11 @@ actions: variables: kibana_url: default: localhost:5601 + # Remove operation-level security definitions + - target: "$.paths['/api/status']['get'].security" + description: Remove system security definitions + remove: true + # Add a document-level security definition - target: '$.components.securitySchemes' description: Add an API key security scheme update: @@ -27,4 +33,8 @@ actions: update: security: - apiKeyAuth: [] - + # Mark all operations as beta + - target: '$.paths[*][*]' + description: Add x-beta + update: + x-beta: true \ No newline at end of file diff --git a/oas_docs/overlays/kibana.overlays.yaml b/oas_docs/overlays/kibana.overlays.yaml index 7681a7201872a..d1acdf7712bf8 100644 --- a/oas_docs/overlays/kibana.overlays.yaml +++ b/oas_docs/overlays/kibana.overlays.yaml @@ -4,6 +4,7 @@ info: title: Overlays for the Kibana API document version: 0.0.1 actions: + # Clean up server definitions - target: '$.servers.*' description: Remove all servers so we can add our own. remove: true @@ -14,6 +15,11 @@ actions: variables: kibana_url: default: localhost:5601 + # Remove operation-level security definitions + - target: "$.paths['/api/status']['get'].security" + description: Remove system security definitions + remove: true + # Add document-level security definitions - target: '$.components.securitySchemes' description: Add an API key security scheme update: @@ -34,6 +40,7 @@ actions: security: - apiKeyAuth: [] - basicAuth: [] + # Add an introduction to spaces - target: '$' description: Add an extra page about spaces update: From e691d2295d83a313ca0d42202dac5d77c5b2f3d1 Mon Sep 17 00:00:00 2001 From: Giorgos Bamparopoulos Date: Thu, 1 Aug 2024 17:48:42 +0100 Subject: [PATCH 04/25] Update ARIA role attribute in the log stream (#189553) Updates ARIA role attribute in the log stream so screen readers announce column headers while navigating through the individual cells. - Headers have a role of `columnheader` - Cells have a role of `cell` Tested with VoiceOver on Safari, macOS Sonoma. Closes https://github.com/elastic/observability-accessibility/issues/24 ### Before Screenshot 2024-07-30 at 19 03 40 ### After Screenshot 2024-07-30 at 19 01 29 Co-authored-by: Elastic Machine --- .../components/logging/log_text_stream/column_headers.tsx | 6 ++---- .../components/logging/log_text_stream/log_entry_column.tsx | 4 ++-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/x-pack/plugins/observability_solution/logs_shared/public/components/logging/log_text_stream/column_headers.tsx b/x-pack/plugins/observability_solution/logs_shared/public/components/logging/log_text_stream/column_headers.tsx index 88161e794c37e..e1478123ab29b 100644 --- a/x-pack/plugins/observability_solution/logs_shared/public/components/logging/log_text_stream/column_headers.tsx +++ b/x-pack/plugins/observability_solution/logs_shared/public/components/logging/log_text_stream/column_headers.tsx @@ -108,14 +108,12 @@ export const LogColumnHeader: FC< 'data-test-subj'?: string; }> > = ({ children, columnWidth, 'data-test-subj': dataTestSubj }) => ( - + {children} ); -const LogColumnHeaderWrapper = euiStyled(LogEntryColumn).attrs((props) => ({ - role: props.role ?? 'columnheader', -}))` +const LogColumnHeaderWrapper = euiStyled(LogEntryColumn)` align-items: center; display: flex; flex-direction: row; diff --git a/x-pack/plugins/observability_solution/logs_shared/public/components/logging/log_text_stream/log_entry_column.tsx b/x-pack/plugins/observability_solution/logs_shared/public/components/logging/log_text_stream/log_entry_column.tsx index a62f08903764a..fb7560a4e93b8 100644 --- a/x-pack/plugins/observability_solution/logs_shared/public/components/logging/log_text_stream/log_entry_column.tsx +++ b/x-pack/plugins/observability_solution/logs_shared/public/components/logging/log_text_stream/log_entry_column.tsx @@ -30,8 +30,8 @@ export interface LogEntryColumnProps { shrinkWeight: number; } -export const LogEntryColumn = euiStyled.div.attrs(() => ({ - role: 'cell', +export const LogEntryColumn = euiStyled.div.attrs((props) => ({ + role: props.role ?? 'cell', }))` align-items: stretch; display: flex; From 3d9d7df6866f9611969e54538ef75267906dabbd Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Thu, 1 Aug 2024 18:14:06 +0100 Subject: [PATCH 05/25] chore(NA): skip defend workflows tests failing because of vagrant (#189723) This is a temporary PR intended to skip the defend workflows FTR suites that are failing the pipelines due to a vagrant box problem. It was done in a single PR as it will make it easier to revert after the problem is fixed. --- .../automated_response_actions/automated_response_actions.cy.ts | 2 +- .../public/management/cypress/e2e/endpoint_alerts.cy.ts | 2 +- .../public/management/cypress/e2e/endpoint_list/endpoints.cy.ts | 2 +- .../cypress/e2e/response_actions/alerts_response_console.cy.ts | 2 +- .../cypress/e2e/response_actions/document_signing.cy.ts | 2 +- .../e2e/response_actions/endpoints_list_response_console.cy.ts | 2 +- .../cypress/e2e/response_actions/response_console/execute.cy.ts | 2 +- .../e2e/response_actions/response_console/file_operations.cy.ts | 2 +- .../cypress/e2e/response_actions/response_console/isolate.cy.ts | 2 +- .../response_actions/response_console/process_operations.cy.ts | 2 +- .../cypress/e2e/response_actions/response_console/release.cy.ts | 2 +- .../cypress/e2e/response_actions/response_console/scan.cy.ts | 2 +- .../tamper_protection/disabled/unenroll_agent_from_fleet.cy.ts | 2 +- .../tamper_protection/disabled/uninstall_agent_from_host.cy.ts | 2 +- .../tamper_protection/enabled/unenroll_agent_from_fleet.cy.ts | 2 +- .../tamper_protection/enabled/uninstall_agent_from_host.cy.ts | 2 +- ...nt_from_fleet_changing_policy_from_disabled_to_enabled.cy.ts | 2 +- ...nt_from_fleet_changing_policy_from_enabled_to_disabled.cy.ts | 2 +- ...ent_from_fleet_changing_policy_from_enabled_to_enabled.cy.ts | 2 +- ...ent_from_host_changing_policy_from_disabled_to_enabled.cy.ts | 2 +- ...ent_from_host_changing_policy_from_enabled_to_disabled.cy.ts | 2 +- ...gent_from_host_changing_policy_from_enabled_to_enabled.cy.ts | 2 +- 22 files changed, 22 insertions(+), 22 deletions(-) diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/automated_response_actions.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/automated_response_actions.cy.ts index 9da25023f0778..7281a8b8f32cb 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/automated_response_actions.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/automated_response_actions.cy.ts @@ -20,7 +20,7 @@ import { createEndpointHost } from '../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../tasks/delete_all_endpoint_data'; import { enableAllPolicyProtections } from '../../tasks/endpoint_policy'; -describe( +describe.skip( 'Automated Response Actions', { tags: ['@ess', '@serverless'], diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_alerts.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_alerts.cy.ts index 9df69b03e072c..7bfdb83b71dac 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_alerts.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_alerts.cy.ts @@ -19,7 +19,7 @@ import { login, ROLE } from '../tasks/login'; import { EXECUTE_ROUTE } from '../../../../common/endpoint/constants'; import { waitForActionToComplete } from '../tasks/response_actions'; -describe('Endpoint generated alerts', { tags: ['@ess', '@serverless'] }, () => { +describe.skip('Endpoint generated alerts', { tags: ['@ess', '@serverless'] }, () => { let indexedPolicy: IndexedFleetEndpointPolicyResponse; let policy: PolicyData; let createdHost: CreateAndEnrollEndpointHostResponse; diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/endpoints.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/endpoints.cy.ts index 12cdfcfa6e09c..695618999ba9a 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/endpoints.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/endpoints.cy.ts @@ -28,7 +28,7 @@ import { createEndpointHost } from '../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../tasks/delete_all_endpoint_data'; import { enableAllPolicyProtections } from '../../tasks/endpoint_policy'; -describe('Endpoints page', { tags: ['@ess', '@serverless'] }, () => { +describe.skip('Endpoints page', { tags: ['@ess', '@serverless'] }, () => { let indexedPolicy: IndexedFleetEndpointPolicyResponse; let policy: PolicyData; let createdHost: CreateAndEnrollEndpointHostResponse; diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/alerts_response_console.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/alerts_response_console.cy.ts index d741c3a7f0e59..457a4a60f9850 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/alerts_response_console.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/alerts_response_console.cy.ts @@ -27,7 +27,7 @@ import { enableAllPolicyProtections } from '../../tasks/endpoint_policy'; import { createEndpointHost } from '../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../tasks/delete_all_endpoint_data'; -describe( +describe.skip( 'Response console: From Alerts', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/document_signing.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/document_signing.cy.ts index 2ff96b249cfdb..a883b3af1491d 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/document_signing.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/document_signing.cy.ts @@ -22,7 +22,7 @@ import { enableAllPolicyProtections } from '../../tasks/endpoint_policy'; import { createEndpointHost } from '../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../tasks/delete_all_endpoint_data'; -describe('Document signing:', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { +describe.skip('Document signing:', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { let indexedPolicy: IndexedFleetEndpointPolicyResponse; let policy: PolicyData; let createdHost: CreateAndEnrollEndpointHostResponse; diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/endpoints_list_response_console.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/endpoints_list_response_console.cy.ts index 64cc11e553538..7955fd15e3920 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/endpoints_list_response_console.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/endpoints_list_response_console.cy.ts @@ -20,7 +20,7 @@ import { enableAllPolicyProtections } from '../../tasks/endpoint_policy'; import { createEndpointHost } from '../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../tasks/delete_all_endpoint_data'; -describe('Response console', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { +describe.skip('Response console', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { beforeEach(() => { login(); }); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/execute.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/execute.cy.ts index 042031b301185..e07e8f81a2777 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/execute.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/execute.cy.ts @@ -21,7 +21,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe('Response console', { tags: ['@ess', '@serverless'] }, () => { +describe.skip('Response console', { tags: ['@ess', '@serverless'] }, () => { beforeEach(() => { login(); }); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/file_operations.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/file_operations.cy.ts index ef252cbce01aa..28cb2a89a9135 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/file_operations.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/file_operations.cy.ts @@ -21,7 +21,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe('Response console', { tags: ['@ess', '@serverless'] }, () => { +describe.skip('Response console', { tags: ['@ess', '@serverless'] }, () => { beforeEach(() => { login(); }); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/isolate.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/isolate.cy.ts index f89f2a6f62ecf..7707e754c20c9 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/isolate.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/isolate.cy.ts @@ -26,7 +26,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe('Response console', { tags: ['@ess', '@serverless'] }, () => { +describe.skip('Response console', { tags: ['@ess', '@serverless'] }, () => { let indexedPolicy: IndexedFleetEndpointPolicyResponse; let policy: PolicyData; let createdHost: CreateAndEnrollEndpointHostResponse; diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/process_operations.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/process_operations.cy.ts index e09aa8dc9fc85..291decb66f0f9 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/process_operations.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/process_operations.cy.ts @@ -26,7 +26,7 @@ import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_ const AGENT_BEAT_FILE_PATH_SUFFIX = '/components/agentbeat'; -describe('Response console', { tags: ['@ess', '@serverless', '@skipInServerlessMKI'] }, () => { +describe.skip('Response console', { tags: ['@ess', '@serverless', '@skipInServerlessMKI'] }, () => { beforeEach(() => { login(); }); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/release.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/release.cy.ts index d11b7210713a8..5c784213af04c 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/release.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/release.cy.ts @@ -27,7 +27,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe('Response console', { tags: ['@ess', '@serverless'] }, () => { +describe.skip('Response console', { tags: ['@ess', '@serverless'] }, () => { let indexedPolicy: IndexedFleetEndpointPolicyResponse; let policy: PolicyData; let createdHost: CreateAndEnrollEndpointHostResponse; diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/scan.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/scan.cy.ts index ba105aa8cbc0a..96cb436f421a8 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/scan.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/scan.cy.ts @@ -20,7 +20,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe( +describe.skip( 'Response console', { env: { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/disabled/unenroll_agent_from_fleet.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/disabled/unenroll_agent_from_fleet.cy.ts index 674ede811fc77..2d95850ef3f80 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/disabled/unenroll_agent_from_fleet.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/disabled/unenroll_agent_from_fleet.cy.ts @@ -20,7 +20,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe( +describe.skip( 'Unenroll agent from fleet with agent tamper protection is disabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/disabled/uninstall_agent_from_host.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/disabled/uninstall_agent_from_host.cy.ts index 6f82d9c98a0cf..f853aaa664345 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/disabled/uninstall_agent_from_host.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/disabled/uninstall_agent_from_host.cy.ts @@ -21,7 +21,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe( +describe.skip( 'Uninstall agent from host when agent tamper protection is disabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/enabled/unenroll_agent_from_fleet.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/enabled/unenroll_agent_from_fleet.cy.ts index 0915cd578adc1..8ce0c16abd2e7 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/enabled/unenroll_agent_from_fleet.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/enabled/unenroll_agent_from_fleet.cy.ts @@ -20,7 +20,7 @@ import { login } from '../../../tasks/login'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe( +describe.skip( 'Unenroll agent from fleet when agent tamper protection is enabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/enabled/uninstall_agent_from_host.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/enabled/uninstall_agent_from_host.cy.ts index 286be75f745b3..d3636437e4b39 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/enabled/uninstall_agent_from_host.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/enabled/uninstall_agent_from_host.cy.ts @@ -22,7 +22,7 @@ import { login } from '../../../tasks/login'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe( +describe.skip( 'Uninstall agent from host when agent tamper protection is enabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_disabled_to_enabled.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_disabled_to_enabled.cy.ts index 67c71e4bd5ffb..bf623bc8972b9 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_disabled_to_enabled.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_disabled_to_enabled.cy.ts @@ -22,7 +22,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe( +describe.skip( 'Unenroll agent from fleet when agent tamper protection is disabled but then is switched to a policy with it enabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_enabled_to_disabled.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_enabled_to_disabled.cy.ts index 687b2a5924bea..a13bf0b53a27a 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_enabled_to_disabled.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_enabled_to_disabled.cy.ts @@ -22,7 +22,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe( +describe.skip( 'Unenroll agent from fleet changing when agent tamper protection is enabled but then is switched to a policy with it disabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_enabled_to_enabled.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_enabled_to_enabled.cy.ts index cf091cdccc60d..7ac5fb9d7470b 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_enabled_to_enabled.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_enabled_to_enabled.cy.ts @@ -21,7 +21,7 @@ import { login } from '../../../tasks/login'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe( +describe.skip( 'Unenroll agent from fleet changing agent policy when agent tamper protection is enabled but then is switched to a policy with it also enabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_disabled_to_enabled.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_disabled_to_enabled.cy.ts index 63f4715331514..7205e4cfbad81 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_disabled_to_enabled.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_disabled_to_enabled.cy.ts @@ -24,7 +24,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe( +describe.skip( 'Uninstall agent from host changing agent policy when agent tamper protection is disabled but then is switched to a policy with it enabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_enabled_to_disabled.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_enabled_to_disabled.cy.ts index 45b278539d5b5..4967dfdb77e8c 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_enabled_to_disabled.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_enabled_to_disabled.cy.ts @@ -23,7 +23,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe( +describe.skip( 'Uninstall agent from host changing agent policy when agent tamper protection is enabled but then is switched to a policy with it disabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_enabled_to_enabled.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_enabled_to_enabled.cy.ts index db49f448bc980..4d6946916edd7 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_enabled_to_enabled.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_enabled_to_enabled.cy.ts @@ -23,7 +23,7 @@ import { login } from '../../../tasks/login'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe( +describe.skip( 'Uninstall agent from host changing agent policy when agent tamper protection is enabled but then is switched to a policy with it also enabled', { tags: ['@ess'] }, () => { From 35a008d03859785f5d6d87cf401d2efd5dad5e04 Mon Sep 17 00:00:00 2001 From: Hannah Mudge Date: Thu, 1 Aug 2024 11:42:23 -0600 Subject: [PATCH 06/25] [Embeddable Rebuild] [Links] Fix small bugs (#189673) Closes https://github.com/elastic/kibana/issues/189445 ## Summary This PR fixes two small bugs with the links panel: 1. The editor no longer throws an unnecessary error on cancel: https://github.com/user-attachments/assets/666d856d-f1aa-46b2-a764-1731cce49a57 2. The `hidePanelTitles` attribute is now passed to the embeddable as expected: https://github.com/user-attachments/assets/92a95a89-d853-4bce-b6dc-9b22d89182da ### 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 ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- .../public/editor/open_editor_flyout.tsx | 4 +-- .../public/editor/open_link_editor_flyout.tsx | 7 ++--- .../embeddable/links_embeddable.test.tsx | 12 ++++--- .../public/embeddable/links_embeddable.tsx | 31 +++++++++---------- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/plugins/links/public/editor/open_editor_flyout.tsx b/src/plugins/links/public/editor/open_editor_flyout.tsx index cb3ce3a5d7591..08434f6631ae5 100644 --- a/src/plugins/links/public/editor/open_editor_flyout.tsx +++ b/src/plugins/links/public/editor/open_editor_flyout.tsx @@ -62,7 +62,7 @@ export async function openEditorFlyout({ ? parentDashboard.savedObjectId.value : undefined; - return new Promise((resolve, reject) => { + return new Promise((resolve) => { const flyoutId = `linksEditorFlyout-${uuidv4()}`; const closeEditorFlyout = (editorFlyout: OverlayRef) => { @@ -116,7 +116,7 @@ export async function openEditorFlyout({ }; const onCancel = () => { - reject(); + resolve(undefined); closeEditorFlyout(editorFlyout); }; diff --git a/src/plugins/links/public/editor/open_link_editor_flyout.tsx b/src/plugins/links/public/editor/open_link_editor_flyout.tsx index e6c931be5aee0..eac3135d8f089 100644 --- a/src/plugins/links/public/editor/open_link_editor_flyout.tsx +++ b/src/plugins/links/public/editor/open_link_editor_flyout.tsx @@ -49,14 +49,14 @@ export async function openLinkEditorFlyout({ }); }; - return new Promise((resolve, reject) => { + return new Promise((resolve) => { const onSave = async (newLink: UnorderedLink) => { resolve(newLink); await unmountFlyout(); }; const onCancel = async () => { - reject(); + resolve(undefined); await unmountFlyout(); }; @@ -71,8 +71,5 @@ export async function openLinkEditorFlyout({ , ref.current ); - }).catch(() => { - // on reject (i.e. on cancel), just return the original list of links - return undefined; }); } diff --git a/src/plugins/links/public/embeddable/links_embeddable.test.tsx b/src/plugins/links/public/embeddable/links_embeddable.test.tsx index 39de26a6a77c9..e6dbe32e86730 100644 --- a/src/plugins/links/public/embeddable/links_embeddable.test.tsx +++ b/src/plugins/links/public/embeddable/links_embeddable.test.tsx @@ -153,6 +153,7 @@ describe('getLinksEmbeddableFactory', () => { savedObjectId: '123', title: 'my links', description: 'just a few links', + hidePanelTitles: false, } as LinksSerializedState; const expectedRuntimeState = { @@ -163,6 +164,7 @@ describe('getLinksEmbeddableFactory', () => { description: 'just a few links', title: 'my links', savedObjectId: '123', + hidePanelTitles: false, }; let parent: LinksParentApi; @@ -210,7 +212,7 @@ describe('getLinksEmbeddableFactory', () => { savedObjectId: '123', title: 'my links', description: 'just a few links', - hidePanelTitles: undefined, + hidePanelTitles: false, }, references: [], }); @@ -238,7 +240,7 @@ describe('getLinksEmbeddableFactory', () => { rawState: { title: 'my links', description: 'just a few links', - hidePanelTitles: undefined, + hidePanelTitles: false, attributes: { description: 'some links', title: 'links 001', @@ -261,6 +263,7 @@ describe('getLinksEmbeddableFactory', () => { }, description: 'just a few links', title: 'my links', + hidePanelTitles: true, } as LinksSerializedState; const expectedRuntimeState = { @@ -271,6 +274,7 @@ describe('getLinksEmbeddableFactory', () => { description: 'just a few links', title: 'my links', savedObjectId: undefined, + hidePanelTitles: true, }; let parent: LinksParentApi; @@ -315,7 +319,7 @@ describe('getLinksEmbeddableFactory', () => { rawState: { title: 'my links', description: 'just a few links', - hidePanelTitles: undefined, + hidePanelTitles: true, attributes: { links: getLinks(), layout: 'horizontal', @@ -356,7 +360,7 @@ describe('getLinksEmbeddableFactory', () => { savedObjectId: '333', title: 'my links', description: 'just a few links', - hidePanelTitles: undefined, + hidePanelTitles: true, }, references: [], }); diff --git a/src/plugins/links/public/embeddable/links_embeddable.tsx b/src/plugins/links/public/embeddable/links_embeddable.tsx index 23f9d82b7cb03..8fc6d464cd50f 100644 --- a/src/plugins/links/public/embeddable/links_embeddable.tsx +++ b/src/plugins/links/public/embeddable/links_embeddable.tsx @@ -71,7 +71,7 @@ export const getLinksEmbeddableFactory = () => { deserializeState: async (serializedState) => { // Clone the state to avoid an object not extensible error when injecting references const state = cloneDeep(serializedState.rawState); - const { title, description } = serializedState.rawState; + const { title, description, hidePanelTitles } = serializedState.rawState; if (linksSerializeStateIsByReference(state)) { const linksSavedObject = await linksClient.get(state.savedObjectId); @@ -80,6 +80,7 @@ export const getLinksEmbeddableFactory = () => { ...runtimeState, title, description, + hidePanelTitles, }; } @@ -93,6 +94,7 @@ export const getLinksEmbeddableFactory = () => { return { title, description, + hidePanelTitles, links: resolvedLinks, layout: attributesWithInjectedIds.layout, defaultPanelTitle: attributesWithInjectedIds.title, @@ -175,21 +177,18 @@ export const getLinksEmbeddableFactory = () => { savedObjectId$.next(undefined); }, onEdit: async () => { - try { - const { openEditorFlyout } = await import('../editor/open_editor_flyout'); - const newState = await openEditorFlyout({ - initialState: api.snapshotRuntimeState(), - parentDashboard: parentApi, - }); - if (newState) { - links$.next(newState.links); - layout$.next(newState.layout); - defaultPanelTitle.next(newState.defaultPanelTitle); - defaultPanelDescription.next(newState.defaultPanelDescription); - savedObjectId$.next(newState.savedObjectId); - } - } catch { - // do nothing, user cancelled + const { openEditorFlyout } = await import('../editor/open_editor_flyout'); + const newState = await openEditorFlyout({ + initialState: api.snapshotRuntimeState(), + parentDashboard: parentApi, + }); + + if (newState) { + links$.next(newState.links); + layout$.next(newState.layout); + defaultPanelTitle.next(newState.defaultPanelTitle); + defaultPanelDescription.next(newState.defaultPanelDescription); + savedObjectId$.next(newState.savedObjectId); } }, }, From 399d7db5719b3da5a2436cdb3842edfefd529506 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Thu, 1 Aug 2024 18:46:35 +0100 Subject: [PATCH 07/25] chore(NA): update versions after v7.17.24 bump (#189548) This PR is a simple update of our versions file after the recent bumps. --- versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/versions.json b/versions.json index 3816626bb83ca..b096cb490ff00 100644 --- a/versions.json +++ b/versions.json @@ -20,7 +20,7 @@ "previousMinor": true }, { - "version": "7.17.23", + "version": "7.17.24", "branch": "7.17", "previousMajor": true } From 4e0910a166a5e2d01d6ebd4492f2ea30a57c1145 Mon Sep 17 00:00:00 2001 From: Tim Sullivan Date: Thu, 1 Aug 2024 11:34:40 -0700 Subject: [PATCH 08/25] [Spaces] UX improvements to spaces grid (#188261) ## Summary This PR offers UX improvements to the Spaces Management listing page which are part of epic: https://github.com/elastic/kibana-team/issues/785 * Use a badge to denote the current space * Update wording of the "features visible" column header * Truncate Space description text * Add an action to switch to the space identified by the table row. In the Roles & Spaces UX Improvements project, our roll out plan is work in https://github.com/elastic/kibana/pull/184697 and to pull small mergeable changes a little at a time, to release the changes as separate PRs. ### Screenshot **Before:** image **After:** image ### Release Note Added minor user experience improvements to Spaces Management in Stack Management. ### Checklist Delete any items that are not applicable to this PR. - [X] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [x] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [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 - [X] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [X] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [X] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [X] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) --------- Co-authored-by: elena-shostak <165678770+elena-shostak@users.noreply.github.com> --- docs/spaces/images/space-management.png | Bin 65644 -> 120860 bytes .../spaces_grid/spaces_grid_page.test.tsx | 113 +++++++++++- .../spaces_grid/spaces_grid_page.tsx | 171 +++++++++++++----- .../management/spaces_management_app.test.tsx | 2 +- .../management/spaces_management_app.tsx | 3 +- x-pack/test/functional/apps/spaces/index.ts | 1 + .../functional/apps/spaces/spaces_grid.ts | 47 +++++ x-pack/test/functional/config.base.js | 3 + .../page_objects/space_selector_page.ts | 14 ++ 9 files changed, 300 insertions(+), 54 deletions(-) create mode 100644 x-pack/test/functional/apps/spaces/spaces_grid.ts diff --git a/docs/spaces/images/space-management.png b/docs/spaces/images/space-management.png index 2668758a98f4c8f61e2e78978d1c829f4f07b69b..bbb0164009e533d7cdb5fb519dc75cf75b5ec319 100644 GIT binary patch literal 120860 zcmZ^K19)c3vUZY*jfp3=ZQJG-+cqcmL=)S#?POxxwkP(Vea^o3?7h$ZzdY;dUfuO} zHELB=cXh(#WyRp2v7mu~fZ!y=g%yE-Ky`qCfOjE5K1&iLrSpM+pbN}}gybcJgz)7Z zY)#CqjDdi}!x9o9+uh;rh#>iG8Z z@u6bGzQ)W7BoEZfkk0JF*lUXDJ%I)}3(T)V^u5CQ*dJgcrY;-G9D3COh)O%G0Ys%7 z9=9ZK@v{L<4Jo@JN09vZ;+yaPXpVWtPK;oV*=ynjA02&V)g?PTOz|x+ny5Uw9}+Qh zTrT=aDzmw3{|C~cQO!<2H{WRb*1Eg7Ke6h;hda)P=Fd1`7#1fak^z{GFGy5jYs+u_ zUv(L73{@ZL=%bm?`3A2EFJr(=idsZy=|lD}sCd)rdu{y;-7}@_Go4JXKpbbe{n6Bu zk;yAjshkX{>7|<0)#5P-?*|=Ic3uJ3J^C=|Juuoe-R5Beoe>N+23_)B$uF`-9~`vH zPbo5aIL_&AekbqL9bfls>?{K!-W;EP45XWH?`*JZxke8pBigs)ud8TD#eBt&IwW-u zdo#xr_@o|!XmMlZ_X>fc&hiBVC+G&5@`I=bKj?<_b-H-IT_#vl1Wggt(emPq^lPW3 zjT|;jqb>j>1Jr@(UsMnIf?VfX*dP_E=$?_Yfb|Z6fL?8;(Idx}zk&fRn@yXl2XG7F z0%a&##nKyYgk-+;01?K3IPfDC1Jh(9{D_6O_Wfcf(0U8}j*lVi%i;^SBfyC0?~IRa z1^kqacn0dpPf`pF(W77ok`6+%^{pAS(ieM+_2^4bLJ}Ha|H?c<>HBFR_1ZPK7*yGKh*GL^kJ<=@GRPR4e$MAVM~Q**6au zZ$AZksKfvjeeI>Mg?+F~=0pOFTw4y!XuR-jeMwu`c6i*7U4di@KqP*- zxy&g_M^jv2XX_8Wr{(RF-y_reJzBX^Dc716{_U3rq!9jWQ4HuaHckn5Sg(v z!Z!kG1=Vt+bJM1^kJ^q1Zb6^1gMTRWVCbJQNK3Pm!q>saMN{;B`^BtJYxqo0l#HNG zoftmfw_?yygR}&C25yDqg4c+&8g)JZZ%Ag(o=!Lcc^G;#SYvnG?4<>E!G1w_0dE8P z07d7gHmJG9a~#R=-^&*vvJMEn&69%%)#36dy~A{SO6 z`bZp>loYWEaWo9Bf3$zF-xV1dIThIjnTo^>nFDzrnT(`T5>~>CboeK%giSvA&(Qh+ zr@%Q`4}K3Z(m3Z~+C6axPIriws5Oc2lJCS4vCOeXk`BadQmPWHQX8>eG$JuGu?FH5 zu_Hez<2Y%YrA`u<1vJ!FWKu~wBw8h(%Wr*e^I=7PY5meA1r&-OB#*JAFaXlaE6YQu z#aQL;v#pBG=)pv$bDI^G;w$2X;z#3=ILgyAzbVlQRLWljYDKRFwwJdjcon~TJW)Q~ z{0>n5s**I4PpS}6QdImlM<=D6M4xDvWTiV(y*KeQ8hQkp7FsI^BuF%fH;68rSp;D~ zctAUxCR{FlN-|iIDq(@*T&=bIRuUk)ERa&6mF*?@lmlIEP>ft$E3ltEB9kDY!lFW_ z;%5!sV%G&vSe`R^)ZUw;^lG7=}Eu({TofFUb&Z*C- z>A3MI>X_n);jZ@fCW=*5>pTE2s{k@1=a?;H+UiVI#?yR>4zQ>Hc{p@ zZ{9{ha)FD~layr=JVx9P%wL$l?tTf8Dx>hlX~m(%Ef%g6#um0ox5;#+0MbZOa2P#} zXe}=cGc7kv-WPhO{H+y??I(X)9hIJI8DShGt>YkG8X^ zT75AYvBX{AK>@N!L_v1hcN@x5%BC8I@AA?* zRz;g!T;to4JpDYQL(0WM#R>+MwbX>CdjNELKJB7%Qaw^>y!!FY`ZRsS0d@G!`Rb|~sDYQ4 zYdmpJano~EbA=+;vmU8Wh3GAA?QDq=JQL)`M9G&-6;HKJMeASaljsL*7j9$s*$R`3 zToGyz*~jL@h7ggdxtFihSrCtKQu3AhG;EyQl~q+JXvEbYylRv*ls6RRF-+@E59SsD z-pe%>j9{4xIZgb}e{GC@AGY6)clh=B0U=+Ql^a?~oT;Z9u3a==yB$8(KB{rE>5yE? z_`3?q^bQJt^b>_KN$5*N4nOW4?bUe!z7uv)iO?8(OICG@$IxL&H^{BWaT463;>rfh zs1`L8juJ>s%fxmbaZSqyD~YQ7Dss*_m90twOzQeD&C)x19+)MXF34d|VJ~5G*0R(# z86j93S#eiGt$eL3F|1oSXdfry(BTkkLTnHudav+Rvg?>CuP(Q14b^sfgSf#P@kw4rYRfBHDs=mh zJ(GQ(c-Nk2i%J}dH%frL)ah(%iC5K-fBrtX!m~J1K4Ni?{1AQ*pZJo{q-v&iR-Rn> zqw1{8p~9kEwPZu*%^uHmGvkf+1=~W|656u!b?D{#9k}YtctdN0F+>dn6Fe{9SC8Ts zvS&HxkOX*i+;@*aAEPU?t?5e6)z(%+%E9o{Z4ZUF$Lr$VCb{M;Gi!Pq_9<~|YHldm zaM{jBj_1R7rOqNw*;zTZ^l1*IbzyT#v*1*wG%}4HO>j*j4bREv^m8*uGt1|Jy(FST z<_VRIBtBg)KR1HQ-m!u5h`4kAd$pt;S~%D8bGJFn4fiTbW3@@+%~7=~H=W}%6DQsF z6SuoHmKRIYs@bZhwd$5>ui0ml*{X#u*1M%!=FQrUd5_f#7tPDs4H(z-ORd(^?++t9 z2OZenRL>qSLeG~7!f>z~hiiDAF}GXeeLq5!q8)GzanZSBzboD=@0*|7f_JgNufS&F zIpDQEQ6DYm>EB?$mlt(T3-He!RKlk4}!iT9vU_ueeRFkT@qnwR3M(=F4R<3mz4U7pfu zq5bT>E?j4$_s!eA8>zdAXg6~0fhzFVTstdjAlqnsPa#mC_*Ec8weiatN09N$4@b~< zl*!9gM}sf?6)-^hq0dc3KZ?J@11W}PXovV~16i3GEt6OGj+Ok`w$C_nR%Kw!YgKwmy{z@L9W zz*s(UF z`I-Ntn2r$tUnEYJJcQ~p^7ulw4#xPbwDh#}guKxB`1sroMkbt!!lHk|Ki_x=&77R< zIO*tIU0rEinP_btOz9XnI5_C&8R-}qX+9}v9Nlf4^xbG|9Etwj$p5q>Z0u<0U~cDR zZfk@8N4xq4w$4sGgoJ-E`rqHb`)TZE{vS>@j(-m8bAWVz)X*`|($oE4Feh`9{}1es znt#LoHLicNe=YqdLe9bba~|~n=o&A>pB(;L_9s0z-5+cJ7g_kXp#7`# zQ_^^$x#|8_YI&i52>O5SCHa9Qgawq{fX}oc^u7)}Y*4jGU3TybLLmw!(28HqqUJwraODsa=f`e%w!QeYAuQY>g9L&iZek>{F@0_wZ_YQ? zy}0V?N)3x>o4Hm?=KZJ1?F>LMfJJ?g^!}1;m5A{dC@SC)$Sao3Yrw!rNl{7NWwaLI zf?ePfbwkpF`~doEq9+Wr4bO!9F@NI3*&!>23XAyH+CORK*gzyNgczg5H5x>vV=^z^ z9WVcjuP>53AwRJ=uSHEUd{{{=GEpMt|J5~8ks}Ht8g(S4yrTDVM~MHT;TP>TGJymT z%jd1`4Vf_$(pjn%XIn)W8Hd%H$2r86D=JZJ7NySYO^@#58ntkhLrTA+3XI@Xg_=?I z7JakB3~U>4Z2IkBl?z)rVx<_hPT>gqf!4R9j!M_^(aHV8`dank_&gK3cJgITxs<~A zkzsfwb5x4l^<)2{y4{2FrKA~>s@GBEF+RubNAK(k9lu9Y<$6Us;Y4qqRm2Y6Alm5k zyy0M@o30UZegc~@e>`~*B^0S|YCKh&vH>cKgctyjl0cNLF+vGr+%%Az+b>v`3i!S z5zm8;ZX}~jVLY-UK22HYAT**e@Dn1iqrjn}GY8F71^aOIJ z85zqgV+R@S0Bo*pKmgm2e6>`|PwVAIGK^{`qom}-O{5J*xyni&0n*TtQ~*)|-qc4i zj^ze0-cU||4qJis_&#G!!HhJ0?|8>^Mg_OFl-E7*JxeQyO2cMFKNYNTAeG z3l*Pj&N%|@5M3O8YcKqhXOz^TMFPFJ{WfncCM% zRz`AfxC1qqzupkAr zz>vbn(l8(&QH@GjNtN*1$VBDiv(bczSriBH!^Qd%q5kw&)CE-5|70nlDUkauEnA!z ze@t#U5>(5plCwq(RGv&_BVtinT?}f==2_r(mIU?>1@MPD$YcaH$_@HX;U0sADJcgC zY2o_&SO2fKH8|iH{FZQ|3Q7K0@u=`gx#7}%TJlvw03g@u!e(DGW5;2+Jp83(>ZhVV zbwO!-%!r9fcwcxiC4>0aT$=rP0Fq2nk7?L+Vh=(}Ow;c>z=7U{`D0b+&3iz*-1v)f z8<~fkzhKIX;##%a@b1YL4^c}|Z=Z0bQ)N8fFH?%f{f)pgc{EA$H;OWkM_Ru2kRsR_ zhsy~f{zn^`wTkw&7s!y2#`szZ%>v~Vvkj&fqt;fmv!A1N*fA)CZ*;k^)eGqzVN=!g%S|5L5*fgBTJtRpC>FlRB?2M7H~< zHv*ncAI~4*?3a8)FLUj34KE?r3>JwkbOUe^N!*p+*O`8LQgTc0Nghf*>3by_XkN$+ z!5inqFJ#r0hFt#c^K=`*r+K*G1_``e=wBZh?TEH3wvwVqt5=as2s_}ZlPfH13zC^m zq&Z+zPcX|Bv1>N`crcn-_uqH;zm`iBG?XF?=A^%Cup|4z1~N_BImPI5_Qb{_x~VPJ}K{@72o19ERs$wu+T>05k80xz-FrR`rqletw@#6z{UVF^v{6lAh(cD#QMQ?!OFOyf2Va9y0$n z;eRdBV--R7+)UAe@M~5!0nRCvXTH=VgW!wyv*DM*-Om92I*~={fBzlZUe+4fI^2XaPJWUc6`4Q5_5y}FqTo=CO5N0)21y;2Oa}kS? zyxQZoA-A+x$aW1*VApB)YJ);igkW?_rhk}nj5tF*TKJL62owfARKM=?CQQHVM073# z3uUCkFmJ}cQFAvyhQ?vL2Ja$CaD-8`loIywcv6kqtt}{ykOu$xy)9|;$O9qdQ{QWs zxj5HfInYDUAs^4+MM_#xq)PVeB0`0JYe{A(c(8J43P(I$cjkTkMCE4ynw>%Vz z{?KzL^d07ek)gtiP)lubvfZ<(SVZLV7$Q|hVi?}Ax!>=p#brchHT{bt^DjN-1PTkD zr$O^O7h!Sp(LyPGOaH*KfI@!r;YL)>OI_2WtCAI(Pj_x7Tlcin3lkwHEe!H2ab46 z6IW}8>>Wraw2Dmx)N&@N z;)A$#A4!|&3t3idmA>7pdyN8-A$WES3G`%*q*C5@h=K>?6jwt+`KR}LDa6(<>j3gh zxc(uiThoNT3Qf$0#QnrZA%pu*>K1}GaFmoD^|5xA{QSfMSSofp3dY#y@1g1abKk!5 z?(uG*vRHx=g8t5%HVbTvqeCQSDI~_Lh43=}r=J)N1Z@8qZXi)G>+XaRanZ<_PQHU& z*(bg52a*k)Aph#0aexNJPGR5?%0Xo1;hGeTTZ)k`Ml7NzDJv^0EiElKIW#^xU(AAr zh87hCPfJUSnEeGDjK)L^0gMg%?~=?70@_ce-QNOjA?dYBRWuk0L<;D4RFo~seJw#+ zg1^qq&ZZKJ!sT(_*$Y!Dn#|ykXf7Gk=4>!u%eUVxlu4^Mn_lbb0p3s6HE_9YuA;KZ z`kNNm0!ED4xcAT%a@bL;>QZg8!MP$d5gU+YM*sVKahpS~WiqyYR9F8j z6*mx3zc-FZ(DjdrC}+<_FUrbKeR2JjiWe-MUnIcowH8f7{ zp6hRK=i-^Aq#{_YS5aI?#>cf=3^3nmwVLIN;Op|jdB)E&{yr!qBA|l+zN_35&V&w) z1WWotOi;B1y&?rv=-vh|p+t;C@;f*OULe=PIx{ug{kw`2gIuHxZChISB7Bl%A zjRjItlaNr6(o#{e)3B}7;Vc$lCZ>ljM@#OD6X#4O6B-Q$DS3HB$K41&%cG%4G%`&U z;lBqFmnD$vkwUAoQ(78_jPxS!@2noJ%jMYxp^>b1nLbRBTiH|B5VTC?M=O8NiX4$u z|Lb1G7s>4mQZGh3v?x|t5C!HgtX`0yKz?l_O0=qYs>Gu8#DQ7R&F^}mPO2d2hX8SK zy$^!LsO_(?;36MSTAJ{puFADyBmq=R%)7hAO~Hj^^E{$l!=0aSPbFF2tWC~ohhujK zR0EzIIB$yC97K|ZbnJ8>+dV|*Lx*O8C=dFjzDbW6QH5nzW6zk?t;)TFbe8~ zoA?eO-nlB0R73qqlI4UlZk=f~>bIuKtl=Is@t{!vZ4% znLN{h>=s+3x^G;_s8r$*`K#K?P%>5_54oRVM~FDqzUSLV65gUms2y&X`7qHPW538( z5?0oOEx(S2FQ+8L#49TrVq(FS8h5+d0(2ws**YDqetv#+8{U^i^JNxbbHn4KLYjw@ z8JAO?Ji+hy;Gahz>OaYN6@lbomp8M4-Pzz`sA&4vzR#gQ-@f&xUdi04Mv)(=@*ZkmYDq? zp_-wgMqEl_tdJ}O1b}mcuv&dpf{wsSx9~_wUqfI^=t)Q#s;lwI$j}d1Sr_P=8X8!b zm_GfwNXjpIDSsF38X{lMCwwketb`Cf?kx333(G^O^Y$`N^-((hUgWm1GyiQG#g!^J zgkf^KrkP(@7d=rYsby6MU)RGa5Uan+RsD8kb(}A$A)b^b`6`anDdUh&;zf?{I)X`1 z01K9C$6p7`nb07L`qNe%O;?*ruUI3Oilnp_1UjLXv5cBdBslC_DQwUBZ32UGj27=4 zq;ep;sG=ex$N>3f&&K;+SYE}dli6Y=4mt1;)UOA5p@gig%WmK|fyhcw?RI1%h&LE? zI#Uyq<>h6;jryl5R4P>t_9ddWkE!YCjjZ`1xyw-j0iV}S@HnaLZ^_;cc1~s+<>oK< z=h)1}2qBU#!m;?tfq{XBgHd?wZuFebXf6n1dUm14p1{Bjsm$hU?Eoe+GBRc|F?hiJ zmpjA3XdGTAVs>I;8XCBoZWN(cgF-9jQHM~NKzaDa#kX_8rsQXS zhz7loaUq(WA#Su_nD*1*to#ww@=7tNwEZ4R($8izd%;`OMt~xRIQ-8?Czw`hYk}Az z>LiOA7Li1Sm6Dx_G1TKeAMj_A0R)I>(gbvt);BFURyF=LH!AvO#6T%Ee*u&BcJ3aM z>U3C=WZ0fc*oxKqUke);N0#-exxIq%dK$r;->|S+okvN3N_?!f+?;bhh=)bT!w{5f zzCc8EeY}fpe)sN)3f&&!K771Jx%9c(ZmjSbCe7UVZYrC_?^2F5SM$#|MmO31ouQTgX8Z#HEwQh{5YCxLMOZP73V6M3?ytE%9A%H zZwg536=yHog)vrZjR5&!U?MkZS{jY^y)xU*2*@^BQBEo{GEZzfspUaU+YTQ6UN?HG zlz?Fs>VMcX0?1G%T+tlAmS-#FjWt}{U9OiC7Ii3+sCyQR`JA%hhW7FdD<=_=WO_s_ zwT8{*$*SF-TUJsD1sX=|193?j&6ygH7LG*}INn|icYz7Q{`C7EzlT`Z0(KmGqWJa7 zyG7?pK?1HhGqsQdJq|1q6o!~EtQ$(_2zML2YMf0YM;4`n1ntOtA}QzfU@7P~MyOI( zmNsSw94_bQXs%ltEl|~!ydCY$wDl0rZcCE|cV&*v$y0}c4+Y@cB-x8qFhxYi0Nduz zj)dz--J4g@1)|^fbGtRFT7R12`zs3-`5)F3=IM|e&6i3&1#5-jyPNlu_?HBU-r^wa z>yEKyE5wjLHpRWJn%B4n*$L$9?l31k%7GRA&JlGzkOk%Pv`2&Nds}MmZ@t6PVfQ&W zwe3vdc2~^k=GQO}Cc3JvX{=N!E0kCaOJt9%Q zy0#YN%ka<`H8pjs+xwU=@EhCvlj$TbPpJ9Sw~67nB6^`OWcRYTEN^ALuIHOghpNiS z2^CUxq<1LDKdU+VtGZsDE?x_qEx(Ik;A2B#K#__?<62MWf`QWE@u{JkQm=kljtC0_ zYwKH+6*N$Ea2O%W^7@8}%Hy+PT3J~+^%W}f_F_dO0 zsA|RZX$&^o!})Sp*ZHce)5#ptzBnXCh0oi#e~RrSf1~L5iWyRzayJbr6%@%ims2Y$ zis%0CAUVDa6m)bx*NdX$GXoc5gTb)BsCGXxSl}Izd8g94L>TO)fk!`b?eESGU`zGQ z3wcpeJ(wt(zLTVpzDHq;owQPSV8v_T?_mcC1~gB>6A$-MPic7a^6HAyA*+?@yPaAc z7#0lwnxP4}R(9%)3DE1FQTDHE3~RXW_Z!0vcuQro+r)91wj*s*WU|D_h!{m@yx{KN z%ek2^vqcNrgRTc|FAh(k#AuKR+9?&VlD4TR*)akSD!T?l_GW-S2Jg`dBBg9e*)IV_ zh&;i%Wnc?(4m4ZQIzKjWks@)kR8|NIJ{kgHkR1~OSe9~_+ZG2=TBz8W!~)rh;|oQl zYQUSQK}RB+BRf+u|Dk(20{okjlJJ*=MFt+9R9oFh@+BKmBhcTfZ9j65`huCQma;A8 zOFtcJb!stfkP>_y0RSOu&`jc&rEUR~q%EbE69~Na!|i>Tpgb}7Sgfdb7K@?+Q-9tJ z9>+$t$xJrejdHCPMlHXME#RD%n}gM*HkXSjQWBQCp=%}%%rF#E*

F_b(7l*2`KI z9yDX}ES4L;m!^gIK3+%50ZitiFlQvx)K|CxAoz5#Z8>dVE^uLccSvC`HEE= z&@+=YI=v(oD>GgmF3IFLduYi1woURQg9bLOpd>D_)3Q`!gD_W_!_f)EXXp@;`=(!z zteQtj&YWyM-;vhZ;YdhPHxxP;mk-EV?EqFnR%q&am zTyS_Uu6WtnBw~vyPfgCmOG{m$a;A<(n@h!BGT`&<7n(5?Bv?Jiq-4nzV zspD+!y!sJQpyNo$?7h*mgu>tsvstpj-i;}Bh6Z2USP{HV_F~v)_?xW332S9+Ua^V? z=_lvC-s||7Aeo~x^kb4jce|3As6G?h&Eks+h>+Act(F75$@Q@^H{fp7j!#+w2VMs6 zquevLr}<8Bru+-k1?$RCJcy?0dTwU|mTIHKDD9dP?R8(CMCU?k8i$C#YKKL>?Ji|w zSPEEIrsU(jk)*SyjGd^yZ`xCP&vz9qnyLXK8ZNZ1Yth8$NYWAc?RLniL^7N*79<(X@*Xf*MKVR?}r&pIZ9F)U6eg`B39NjB^K zpxymOtwL*CyTxLcbX+!*{eG0LtMlc8Yi{x8aI$Y|Oxl%+keY$kVk;tG)8|8*Pgl1Y zht*1bRFy`cJDdObqf=ulM+m}BN;*SeTbAMD@26T1X4oT*(XqD2 zl^D)Ili5OM#U{E^63%WaZ4!2WI;L?-M%3L|k}U0!eIJpfa9!8OPkF1$&gNSyKGz9E zu^b^qb5;to6h%|XX}ZjFtBs9CDt$qV-zpkBI?!Opr$rA>t#C7yAHRz&K7c>w5nW?G z8G4;-fU(1?dz^bo0(-=f6(iR)j>|S#1p2TboHp0Dmu@sBcR}01czbJFt+vueEtq(x zdhG3?b7-dUD6LN~4tp)hv4ybI>#`R%Hpphgt8ASbFAQx?50jqFJ5S?gK1T|bu~uFr zCu<)aR#;oR~+ zY=Ns1a4^F%y4vbdzq&v8DBKxqG@FKgG4*V2Gd3~S=Jq)s*}r+rW7;TtfT6oRo-I>D zKt!Mp5$a_jRFM!%@Fj87!L>1+On-gc<*;qP=Dc?os>sUP+!5JyJ>Q^WzCW6aIc!%BLr)!DLCwM^eKLdBSC)UNy ztGR_kCty;Px&&B4p!`_rCSY2Q^Z{k1yG@#crdFXB3acI#law{)?mXza94&lzhvxI( z4Zkzz*7ghT6lyqCl&Hq9kJ{-xxeS{+h}7aTGjQf=V#jj@=D$%hs{_>3<@1roWVIx| zy_xQb`=q%(KXpy@IxbCMKv>qz)vq}p?ub!Gx|IaX=GHW{vDvvhJMX>TUu=mK1;k;$ zx$T~7u-ZP9O&9v5Z6V#*pxa*M0=jfR%$6%80@e=TDmczKswU+MMfcEJ(n<^kxTqKt zuvr9S^u+Yo-9(QX)QY%or29VoswTsi^GHN`h1o`HrV309DXh#TD1^2a`##RsJ3RWM zSvkJSokOx%qLl;LGx}O}gEU0tjn zn7FtKZ7x8`;41?oJdguqD)h6+-;iNLibvvH!b1DMhhe6W3-nsF&K5<1EtEtLmpPis zr2txQPZ!bKAtU|c^tRKRnihTizVJuRnRs|YT!S^ZJ&G}cv2a554EBMw1qdZGAETzA z$ATo@$fPjapDj&uW)u|!x%ZF9r0MHti`tzY9RcAGCQ@ebm~?|!F50X$BeBj3ofdm* zdcZ>Q_+#A;6WmH{5&iApxjQa^ztgv=C4Ac`ToXF9q%|Z#2*z~`NB?~7?r}}l`CF-* z#^FAy`JF}vvrK%3ZMP~YzEHIi{HqAtkW`#(@)FXRvU&0i1@kXUP_jr$s4A&m9e7?e z4BSBy<7jmk6uC3z(*up+VM1P(hy7sLU2M)}O+$sus~=r?@@_XN13f5~D_*N((}R60 z^E%Ps9XNNr30}e=8T~)JwuNodHZm6uG^E*N%ujx9PE9YXep_xVKPFG!M8;zhWK

XN{m3FP7pCbiUA+U?TfR7lvIa3(bqOJQxl`W;Gnlo zlf1|dY+T|zFy|(?d^Pa(@Gt?iSzh73U(qIMadvt~YX&%*j^SMq`f*R)7>(TLa`tN}#?ywrJ)I%}dWK z7DbNq;2M-ZytwOx4s&GakSmgz878q=My4gO)Bn0^7V=i>kc~@H!$?T?d^c&`DqUTh zE%G#Uoyrakw1TsFlQJ{`jt?RPI{kESebaixuq!5153f zxuatW-oUD8J7wWWxir9juZfh4CdGa9WZ}82Yaq}~mzgb9X#o>y1UFnPMbjj5oMrlr z7?vTs-j+G;n)hYx{I0}3_!gF)E9|rcbgH);q;KL!?tKGI?30V`PdkFDLv=MG)^d7` zv=^==z_G&(v@OXYY5swM1?;0Z*LII3*dH>aN5tF$3_OeFCP29XGIx|>8Vry54IMqi z6*Pmx8*P;hIQ#m}br}O;AlD%CE zThjnFZ~$Nij1rk+&c8#?7zdPEI{+3K=H|)<069l%5I~CSA}E-{s4v8E3r{j7Av0Qh zrsjQds0-!a9M;0P{nj|yU;`5#6r~H*>U;NHIRYvdiAbzUtESvJt5L}*h0tppe2ouSGRkU_; zV$QtHk<&vulk?1j%}PH{;Km7*O@CtKvY2>oeMg&vZf@=^Cr;*u-QUFJU2A*OXbSxn;8D2CwP5k}J$6__NP1h@tNt@BVqZg znscm1wL(Li)Ajq)e$7&c$L)~*V-yo>!btRH|0c+T`_W@Nnfu#-(5P59c3G zZv^?Qw$F7tI9C$X7AUl8{}DW3M?!QDmTXQog}j}bspvq+8smCm!jdVzskVXQ@_q zslJH{bKl8@g=bdLGs||HrI+(`rt#})=tuX63rt&!Eu^G(MS|ubX{OAB@EM#0x;+Ed zBs$h%=h1R*BTQj*KdKie0nujYvhQ}JHf=}T%fZuJjnr)umjcg`v-XVV0l-lreFQ;vm7EC>Wif31DOW}5M7M8n_`LZ3a zB-Mx#?2Z=PvVpTRtNk$eD>ym1NrgO7e+5`fMs_YTbdqG*7N>0|)%$ZWlO1yubd}O0 z`|P753_ApNWkdvE%PU&2bvtKQ;Wl9hGlVb9w}Y3K-4U;r3*bK8t8rIz@*WP-ZSWas zY}WoEvDIY#GXb$B`bdCplZ;9M{UjgUCRaw6((+Uhorr+1%F z$Yd{8eYPgyPWN2Wn5{EY_Jbbwa*f_vS@e>1$Ff3X@RM^Y7DR0&+uG@ZQ&t zF{?OkXV@t%GloN;q6YN!31UTBII!tTWq=3t_X_60qe%K+4IE5m`7=2uVvTLS8XkqU zJultC?222Cb3yE8l-CQbJi>ZRqR*|H5ogCL8iW-1U&S9~bDR-f@*CuAeP48r45vY{l0gmaymvY2G5DE^KOT6Kr09 z34!9JO|9d#a9S1%ocrBoyH*=XP++>gix3@f+RE&3xi*AjZ?cDW-VKim2ChqGUCbV> zT2ta>5*do6U)O*(K5)LJwMIqKFUrsEd9U^Me0O1o{k2$lB!6+SLUV9onCf1&ImFYD z+Exe*7r0MBS~01HoklbD7l*?w#zuzZD#27c9HfMmm6nEs)3}BozM8NeGgb|edcpm| z*u#0o+Vxj?L4)6sTS`hg-rl`|_UbsMm288jKaf%4KGh+dOh>;DKH_fg3da?S(ajAE zb@gyC{uUG?H@uO)zF#GQW?%-!+{x9|mE~dpLtWq-vHa=oISz(8wk>C_Yu8Ssv`r=L zl0lAZmCk4Ihd{_8TbNWR8>y>zZMu#|W6O5zXxjW(S42$A(C{a(JbEF4u2BbKKjFN?SJ;C=!> z;1hRlu*5l;R3v4$U03@|FTw{DIjsg`lxC{&9J$bnXUfQ4olhsFC@Q=^m)xnOq{S!D zNJn;PvE_Jzbbnk2M>$Xi>#QL*NK{j5{9-7bmk+c9L(kN*LP~sC+na?4wCv95G?3)g(IiQJRHy3 zzCE){MBOK%JzrIC;c&V7bL-&-2mfaGM;E~KM9wD@@$`6^Ibn&P(uzD1Yq#n@beWlD zx^usVe;3`Hg( zA#r^Tm2G-Nk(pUr(*Vp9aG1YmG&SJ=>Yqz^MwwHp)4@p^bak+1B9nH1vYe+h7?r{4 z+)s@0m=jQEDoN-Pf!Gw0ZJI^yX2ikp_Zv>1AuA%c1iOarBg2XotgMH#Tq@m02W!RI z>FJ4Ybgw=25~{L24WYLjZF#P1Lkml0WAl_&8+J{gBSsYp#v100qWe~G35fuGuM#yb zbxZmVL?yjsA6mHaWp(qJNVk3oyISR47U4tJ!P#uA)WpP{zUNpD5jeK82* zJ!OV9$u#rXD~Jhg1jN`%LK;+&aTzYB73~#lyEbW>#TC?ZkkOo|G&T^~vO|=wK$S6D zG6-NYi2~i>0vRbLLV_E?+0tJLzjhRWSC!AFmMw}HRly7+WD~L*I*S;r4)yKL>8kD43QHG@%}hEpUlto)G~d&U8kvsM z?a_48CJG)zZ$y}tRXKm8yohWn3rf=AdiampriO|GT^LPCJ=adtOmp$b+(q-_<2cfe z=hG@a0GB)1vl@rX?O7&I+DfB!TujVV)kk)3Zf}16Tw0FWw$b5)HV$V!*+f9cZ!B@o zYkiRM;b{UAg*B?zdtOAh+K7is(%YxMdSTrt!9Z|3L~#CP1)RKfcKyNRJ*1TtaR3}m zYspRq^1Lf2D_YTK4{SIWxuNz&H#}%oi=H*fIAa1mT&R4(Dr7~t9W)mV=97v6Ozg3f zY=yZ(46x6``%IlZriGI(798gj!3@rIU$|RPX>I+fALq?AdI(DFXlN&1$>N?nIW#e4 z-(Z|8jiMTV!hNV8hXnad{Pf|*48la z0t+F$?{dt+j6Y|)5^BWJ3=<;*9kcgy{XUi2r}Kh~aPt)vEu+g0xQYOzr(ChZ#7^93 z@SdhpyM@_gPFf8ey){1!mH(HClf-a|pEC&j*(Q@6z7FwAZe5&`{1mE{h@N#w1Ow$_XpHt*qMy@G*<&S!E<-Y#*x(qQSxn~{})cB-4#7#G(! zO%&4VdX z>7oh03sd9@2Pdc6y1L~W?=p?(CTzb6OdZd+@kzcHc6$04($s}Ylq{~=#zw)cDW;E9 zKVc9C6q28O|FnF#AoyI&@zHFMQ6A2WtX;J9XOR=@*nS;l1thK>4Rxv{@X(h75yg&M z2#;SB{4`_GhT^ZPUV-2f{QQV98NLwzBrGstgl51{iMaj3xdp^dC;%Z0_UwiaJrP!) zP4Ma$qenVItS_D#>Pjs^YR36X?`xLGbaCOk8|s0+J9vj^Li94su)GublNi0cRJ;e> zi4;_a?~lTsBt%r?TO?FL5w~P_kOv{n_;4_Xwsx-%3Oox?ULhtXb#d00ylB%7raHr- ziEX6mCByN))d!0yu-9RGLw$_~ z+;_;|#ZlC1+Dwh@kUcV{AFt`SIKoB`tHt~?GS<^R(x5GzNZ8v2GO+MX+;$*eq}Ld} zek2^Emh-G>xt_1oI4wKS(Vflebqfj8gR-2=HM-wcETyldk0wpHTyBhanc$$K7xh6r z^i1`QHdO;%N};)iVQ`!AkEgQWBcca&|22#aEV>0H%#S-_m>s>04buT_O9gffgxQ^_ zTMQ=WHWeshJTQAMaLz|XPegpNb2k}?>|sw8p3rb*v9nD4BFAPRdkk#^rTM)IYEqy@ zGS&O%V#n~cKfVIUY>SXfKgg1S5G2PiAt#9vZ_7OrD zUR<>Hy0;hAi=KUITNzAa8WA!Gbm00Pe*t|{o$aL!Mka^juf?X{o7x>6=K`^15h(Xb zFLw80Zlfo;c%7DO^&GfEzy%7Hb8eQDI&#jhOGxVDSr3>C$w(EwQIK^e9rL?ShuADO z8UvFM*xXy!S)VuQcA?8Pw5@VQW`kKQpFe6`g!pNEXjHWg6jJM{;h2;m5nwBWLo%Mv-3EMm$CaOB03#ATa?I5XcA;s(j%WwN&=Tm0Mu0rFB zLOexHOf)pWT~G&w?BMTRjvUO?`}ZRbc{6W@KLccXQa6Uli>Z7cqa{kZP4;$WfDXyJ zgGqx%8b;3h=Xv?85tWRLZwwI$>FEwTqm?8 zg7LQby>b@{w!WOeZ+HunSUssZMHtY*3*Pp50uhSCEJTcPe}CD*RtC5+aXj#Hd0om; ze7=2u!HdFWf_`ZifCv^w%}-(OkvHnTup@W1w|9RksDX#S|841G6f*g6^m)hPP(1}) z(}2DBWTjvf&!_x&vn#8d6pDk*zX~3kb?3Zk^V5dWgxODXHHyW7G_u98Y(vN~zx|#q z9gs?#@bV1SvLP(jYY}?(hb{Ip<4p?uJ%i?7^jFT%!aQ49-SZ}3avzamIS=7C~ zSeI%HB0!sv$z&`MmHDvk1cWwizFU(X5%$?`{Xh2J`8m?4+aFCbv2AB!JDJ#;*mg3p zZ5tD3V%xTjj&0lK?NjG`Z{7FYzu;EgU%I-hx}V;)_kPw|dwuZ4Nq6hMZ02G?1$G92 z&z%W{P(=M_-Tn;*&Lnl$NI@#Lm-e!q`9BP8w?9(c&SDhs78a-KHM$6hh~2J_o}wl{ zb%KNpU~sk=Rhp!e{r$C)Y1LEK$z203IJfE2SWH>;Cbbr8P>ZFHrZc{KfPifCNpC=q zL@a(xbZm2dW2IJ;bXU7ej>i#>yRtYPCjkZq#NqjJPz_XAuleCPzibAZ#bP-*=2{l7 z$K7y@0&j9sM#c|e2+GE0Sqk+7COW!{gR=SMnuxz8#l?o#)`QXJVYnRD{#Ct2-J?2k zjqw?f%kB8+!MYP7A|hm@q_-!3YwXBZ-rnAfj3Mpuit3ey_XeDfMJsN?N8{s>tn~Qv1 zFQ!t&S^hA_@*nt#;1F3Zz8foTxqIjJYM`QT{b_djv)ao@{O8u$a|sF3bA&MZF(j3G ze4rN>xg8TIb%KSegJb@Ka8oWOF^wZP3TvGygulJqmnl2xzj~;(whT)}=)BelYuXB- zk;3I7s7f|)JkbQ7E%SnUez^bKY8avZT;c42M7wz|hiUcwYsMo*Wd2Sh-TZ1XiTNf~ zMR=P{%|PNpbVN9o?l8Z!2~R879`_ASlVdqO~QN`#JHzFb5|Jq!%_ zS#Is1BbxUA;@+!Jf$dQ#bjmZNX`g}P*;ogl*jZK0V6MLMAtP^36h@A7LL-{}a{71o zcY20z@=8m$ZsDYQDn*S%&u~t4I91Dn$${WMX04Y@+@B-6`pl58v)x5eI*(ItoUE(j z7$vN43KUe!L>1>cTAJoV-@hs@iX66xUC%VEL>O}+nGfF~gXb>_kN}#Vu|L%M0hSZi zmtgasD#&p(PwAA_^8Zqw1i*@eOpX%EqBT`t zc3P+?#^v-^4<5s*omGZu4XgGE2~=IF_7^1y_sMnmi8ev{x}Frh;I9n0G=FejGdS^z z##HOH;o@Oc49RFL{_E`20b^!D&`#=;L`=P2gj%1>r$7=r zj(VrS>sW+)nk#B6+)SEtpuoU}G8*qJsn1UXM>3BlWC>@Japua0*Y?U4`Ccu>Q$2=h zik?ku`P1c;h!Kv)IA10s<2Bj}WHc%F?O6gPmA_NSubL>O8K&;I23dhrHVS}`OzIf!u)ow6|mBLF= z7o>C-6OOjc4UnavFm(&tal$SsEnUy~y|g(oV_n1LsW&6ZIM}HO6OjU8_i$gxLN(Kw zQVF-Hn2G;8XW#_z2(&o%i9m}xY*59T?T~SDa`N%<0TmhbA87B$-9)|UWaTR>tq%|I z(O$?iKQ#C~%1^*T(KR(!PgHP19ZX^yKq$%o9UmMV93JwG`;tWm27(1YXh72b!KzAy z7NaKK0i)0ZCs;9JLH8YZ6_>U+tW(M3Y2~PIaANB7`mT*vRa3(}!jOjNp{C|0A*mZI zf2SMF#Z24wlRV&%`aKpe!(0eg13!JudgrKK;NQ?tZ){}bP(MBy1)cKo@zHQReZAGd zNXi0BmHdJb;i$9KN|UPtn}D>S{D#aYtrvVVH#fJxw+GXU>h&h5Yhe1{!7Sh#4D3)m zW{`;R*0vb8N4)2|+jS#YJq*#$V<9bK`@0sr=j6plED+Jx!6KQ!cb|E%FozbOT82FS zugL>B+5+)sS2j4sC@n&sIK>P7!;QUuw-H9Y21;OFt;zdy0InE4cOGn;f~~rm0%VZz z$pm=6@b6@GI0 z-W~=HgvAN>iN^d!=Hgb|1L5W)BO@or7!ajFg6n{h93Ue#gfOCJe?x*~VE244_oo{P zVx@qj2`RT0R`X{8UaxfQ5c$AyHNL%Ag_SxlbO(WAoM|V9EdoPAV*Bl(fw3A2ssO*D zGASmZc!RA;47AtssB*Q%b~7+ms#n3w^lm|q5q@d{KxwytUzRQk27&fX6%aN#S(%iS z)Y<7hY7%JdAbTfIlE;%s(ZlV1;J%WNe+);##0i6>+Uk&)l$n{B2q(f#2wfOapdXV)doY}k z@nBR(MD0kNrg$f(`;?lOI>Vqhg0<(^$Y@~_WQuPSM3J|6GZPbrm#23!iMTu+eu%;# zvfl?3_Pz&>O2x$vKLLf&UaD^VqJH`-#pWW6%4H_X;B|`;G|$@)a(DuNE*FWKr2m_F$pLKk|Uz8@OhoFH4|w} zl5M2|sGxM!u^9D8DV>v0)<2e)T+TU^nnfuKYoa5inHVTRgYNzoj2Q2MX}(Yo!Jt!F zm)dM~y6g{6?eHE99)urJy=b=>{c`gn;pG)pqdHVdb@`o}>&RA4S0bsP+G*v8Hbc$w zv7acWCN1DtkYE2$~=W-mxtj^CHh zZXhEdt3#nikKhB6%;kKo&8vol2$251n3|)lt-T-0;Ohd!rCC{7Z|^ToPI8ye^Fo;w z#Kl9mbnNWR!yGG%!dUQ)a3Et_H#Iag3@j{6ZEVOrFqnb^yMf}&E6?JhqW*}iEP^2e zE35eqbtE_$xIcRg)JxHZ{jl|HI(?o3RWUK_8%iX5eS1_+PF+=1^pj;|3H2|TsJ^mw zbTbXN`?+_Wt-pL^X^5@*+tkB2r5_T3WEc4G{4!E-ojF<^xb)M6HmSx`Nif zk35|~WS|S;1Hrj=@cuvxDPiOb=RwD+0i}yp7KRpfc2MB<1)R)^I);aPd(jM>7F%*v zm|mhnV1j~q^XX&027y}A&NzaQcOD*XZqrSr{=^P8xe_~4)MI05jltHaKdafeMh=5Z z1tF@gbc9>FWWICR4ZwPtl>@*sxu}_LUAdxbblRF7Cc3GWNp*E~Ca0#RCL15|nwlD# z#ORA04jPRMrid3fk~!j(*8g=*I2pi`LRN5`%A5^J*=lAr+nyk|B9!k}!VEGZa;^xGXW2eW>i7o@XX3U$7Gdy1= zHypg)^?x~x?wo@WRj#YIF0i93N%-^5)YjGxa?<|_QJYblNv>FTBlyQf0;>-ajGCkv zRDqk8EB5PgMgmhcjctHDlCGO!2Xs5-1gu;kFgQ-iOpW3<{>6|TYb0#^-Z^wNGWM^% zqocJ(seMnE^W2~VG!!s!mEH9S2D2oxS)2e2{wB9>y|3wm;4^IZ1+TE%+H}EBDy||>ahkA=$H#aoBqsxe1yPhH(yl}C^$_l5eR&?lCj)T zg&t|_H{QIHa|)BOG~8kOvYG?7K419G=Q}8U!RiPvj`e-FJ58~k9PDdby!M+Ss2B#JsHe|>=pU)x;Nqt{y!K&P@kJlS*UEU_sQvit9>phyn z!u1&$4NXntzOv?>?2CY9te(H`PedO_>q8C>5w6V~1>%Tjn;l`vMdTqdWWEl49Y@~3 zh-PDPxuf5pkL{-1TU^dl7!fbR5^UDp81(9C82C{x5ph?bLa^!cyeF0}j~R9Tu{+_$ zSl?XCA1oL5a9U}7db&7t_}nI70Nk$chScHqQI%S3--brkqi`Yo1XE`R<(SCCyRM4S3`mXB`;>q_(WdKql6KPV_AyawaA z95A1*cy1m8hdkOmKt2xZM7$nO5NDu~sp9<|wn7p7s=qv9+~3AATf zDmzpwF#GyQ&N*!dre07)-jRs-2bYE+n@@(WHobcE8+mzIhBv1y#%US%gN=B@%Z;Qk za9y2N>yta42_e&BaF=jc%|thU1z-ozzdVHjzU@4o5oNWSFFBpoCie9Re`p7Lehii^ z3Vc3&T@=}9Lv?=4G1WQ@2B8J>TzEZQ=@RRyOJR4$60$>6f(^nCbdbxWtV@fm-|i1r zYrO7dhqM(7dCl0A)pXO!v6(&S*}Xc^K>@&_IPfj z!RxzsUL%XM-E3o(8yHVYN=hl4{Ny-J+5)(_AZ1i6lq z99880e$!*~S#d0_XAv6e7JwD;EU^C?y=0I_1Y%2DH?(f#E)$&#u!3&_*APue^&O2Xk9OO!7{Sy=C>-H(l{g|R`Ve$DqKRT{cLxV$qOm=s5AmH4Q z`is%#<>hGzEf>j*0D&xi9!|F@JK7q3q%W(9W;e6$kQ$zclgU*lILr@wYAS4fBVd%` z_g*o$Vc_a(nJJdl?$&MulM{T>!x3nAI+hEEr6?66`5%#Dz&A1&Qco_TfSKeA2Dkf7 zJhA&c3&zJvZg6a?;YN}6_I0;@bb?4&9LR=7V|Lzr z$rzUreSs8}B8bxhz+=A*zeu59uk}5h2OJ3@!nQ}21HUd*y9O_kjdta3Li)Q?tm^PT#*Fyzozrun83fxq7w^P@CkA`{0#=XNNJiL)v~ETRAvPd zYTMr?5t9Ju`QrMpa*I-+cePT4R8`0AaF;a957L*}V}Bbbuq0%2I+vUvC0S5>x#5lX zb$3prkrCG5Up|%5qF_J-c*S2$9hO~dFyD?qD+xs)ilQ4PFBOw?UjbR&_SFtToNLg= zzDpnpB`y^v=^ZhEW`W!*?Z3Rg;)5c6KQ+H+_U#|?*KSLskQW=9*6o-bJihM^<~2E? z(o$$~I<^(E*X}gINin0>?uJ#x7FR}t2Kgg6-1f3FAg}PaA1APH+1HB0B1v5?*pAD2 z?f+k^W3+L959ks4I#j=1AOngNkyp8Mrp4lc0>w7nu^5-~wXF?e~UVA*zZULEGwSZ)^^1aw&tS~8(BZ_fftU~{kf-Vlen9nbNcIs>EA zUnld4l=Ay~!N1k{vBA_1N#G`d__xUP82Ixv2?+jz5dw|-#hMEqv2tmP(I6!`7+#~W zTPy+3?b`V~KJVGk2xV`fd=H6+3uNvn5d_&}E zf$Fc<{vnwtOvVbr8GIsbEh5Qk(Ssrk{aj0?L5K)A5Nje99Yb6MUj`^$i<#0UVwE@7 zU8Gvw9$zv`PzVoqpEGTrH$?LIx&&C&))f1unxyGXV3wB#-A~E`HXD%a1DmCZ0KoN| zo|+giz2AB#YO?v}yeMY(M$#$9Z-Mc@jAo9 zGN0mV^k6Ii?{VL!i?+o%D10{?1q>`AMqSG87tu^!7hDzC5Pe1sXj3YKs6f*R^@M0g z9PLrb7wCfW@7~>Yw~Mt7H^2LoEIc;b`=iG6)`eRbRPguZt+dz-lo{~m8GJrhFoqJF z_1md^PK!Id*7JaJV4I=9vVTy$js-3Bt0_a?>zu%zRfS&br*CC(H}{Wi^_L303LJ)p z!NQ*^v#bHk%*^rI>5n7}TbW;onZSmadTkZ3RWgw_DvXgbx!Stq(Y@SDCK0<=VK$fa zE#!1!kAjvPiKK<`J^a!eIKP(xs~=a|<$TIw`4?nANxfu`CM3FOHml?5(>Nv^yN^~R zKwG`G-!wWZr(4Xt>z!ob#`H^A;P0i~$_phw`wK%LJg6#HM60b=7ZbETn1OBncd%$? zuDQ0`X15QeFFHt>e6sipwvy_(D}d8_1M_x2!}U$OVW&i*CLoPVn4TYO6ev=}Z)DJA zz1pYz-6s!UZl9cA?zY{>)nh)LJ#?7?JX_O2^Ec*R4UWy15^(z7WwDZe*scBE=nEhT zuU@Oh{6o^Mhw0k_Z5b99zI`L`_9NeyvSjubvK z;s8oe9867T=q$YnF8t-TA2LhPSj`s_8Sf;A0_HyU2aDlGD4ngHF;{pVyy~IMJv<(# zt?<+MqLo5H9a%j#rt|3*)_}vP#&m!XQz?Yzm_+pD2JK>xqnL@>3QqoMLl*OBij~{- z*80P$9F+tNguH|WOeES>RwBiTW)JAVjaPbBVu4$E3`*@q0AXI=3@rJCS|u)vH64N* zup5IMe3oYJ504l$Y8pnR`1PjOK^UzS4XwzaiW7lhpaB$VJKB6H9&twW(~TflIg^;wS6?v7;yaP|Z_R~0 z)UGLkURVYwAx&{eGN#OP9J?MUQ=MVV{e>dfm`i}sQw9o{HuW!S^+Untb#}py(FKFUPErd#jw$d0~}i?O2P2%TQIyM z1i=gpOCJhyK((MCkz$i`x?~3RZY+p2Q>CaHBtDCHe$|?@NKbfM9{9c2%pgoi^gJj| zB@7FBG^3($$@M(oxQAI4-!LdYSD`ywF^~tHUlnhF+mp{|;boUhKYLZ}?*#_~6}M(F8huEI9G_u{R6WG6(pJ-CQRbf3_pWxIUo(xhyHA zD2%YkKyHMn8@?bJbrjhP;lBczEUi2m?z0?^<>IFyL{oM_1>cytPK^E*Rxzz{ARcOxww)V`vi+ z85t!ay>U_?d;Qq!=<+S#z$?6VokS{FzU%toUE<=?eZ7*Z*LMy5=hz=h0uk>P)vSDs zew025n5shP!VwOD$w>(#)}Y7d9bu>i^njVMi^cfJ3z@2~hnNec`P<8B7&$^w8N;{m zDVXa0HGu+5*H-T9?C1vYC3zH5(wu`?h0=w)m}Y;NFq&`{@!3g7zPG z;`hVcfC@%K2{J8Fp^@=qAMx0;9&^Cg5}>Ic9_7w#qJ25K?qBvt&D}vnp~e3lotl_>i_;&-!(U-eQINz#KX{ zsUcH<_Pfg&q;N4;oggFEPjnVc_Mstie;J^Ch&X*cxxPFv)`_{6r+CJ3w%EY}b@X*c^N9wf z0z8PUfz=Nv9@dhs_pLD94(I;J+_gCva*=+b+&Hz&f8WEfIr&g;@S*C{x~^!1U=yFpal=21+~{t`cO@k>B?l{RscOtbUg z50X}?Xl$V0(kyRz2yeutN}wQwQ@LKQhBIz0rj zE@3|_!ukGKvF5d}Kf9zoA+r7Z+OV-j>yv#uAd??15`z@+bg)R4YpGmSq!yv~K;&>d z`Q~GC{7_&<@^+8>Z|A3g*DrvBmt7$6MHxj%5gA=n3{(sq4(uuP^1k8w zZ58h+7A#Q7nu_4GD?IR_o9;${)tnRl`HFOW(*cml|2li`yzK~B%{c3AaMcB(t*~)|6u)y2RCa;5<)7fH$ zli8-)0|hYgrEx2pnEQ>!-|wsX*&5Gr}X9%nyK9V1qU)9ZUH`(sUUR>oDWmTEpC zR*_QHy6@&1upyHe&&4#m)Ovh3&)BDH0gXX2w8DBE9hIxbqu2S8Jgp>EouAd{&5)t z*I4%aIW5x<2ZtYfGaQ2_@a_DTHp_Vzu1R3KU2PL}H01#zGzB}H#p70gI`M{p$4u8! znIkgr$CAlfGF)OTMQ8dSUyD|Z$am5q@=CuzIf?2^imMWafyT`W5>o=me?rVEGA=ZF*^ zuM93K2rjzAMv06wKe|Oq7npOmXbmZ=*rAov-lW=@GbN=qU@rZ|oPkE!0LM0~MA^XR+C29%!uLlAE zcZV|2f@sru{_(*&)>?l78f}yn`|rA*g)oLvd%!+dAvoe*!c#sb%>seU>?YTX<*g1FOwdDhAzw&n|M#?%bcm zUDPysemmc2xB1P$~EW%GZ}u- z7FBaa=zL4@ZgXO@QK@h|ggvC0zrVMiQ=Zf-j4xxCDo4p6+&9xg0$q<8P*J2kQ(=rT z`?#z{&2wsYIge#!V)fpidZ;DuEtlnCChY8(KDf5Le8%nymxw!}`ImERryrqy-inpv zbo$&zJNGV+jS%6bWnfbuc=E`(-R-$zQ-L|( z*JXS%QxSBhMGBn;8@1dPU+f zXD7dJj@2pU{t1)Rw?RBQEobwIRCk7peoEAUzh`O8WsZ65vOHcWvdB+l_%RMuky-KA zG1sZmq!bIHG{CR;;4lLUBPvk+Mp+k5sn!kqw|$@Y7f!cL0V&CSzVKBQkVpl}R&j#- zt~j@dcKxt?s|l_IJM+cC!Gj4#V>-Z~oF?pX+2p_(+v(PqSynl{*Dze)EoBEoo;_At zi2-=`pFA#8Og}^q#n2atj-pSHM62xk?%u#2E*YhRqmibyh&h?XImn$LciT* zLU-jLx;t z0ZIGya*TAL9|)qq&1@RkHwJQi--)M(A5T?uUqe?X}A}O8}$Ps0NqN6Xagk2RD{+fMk;K}p{ssN&!g8C)DK^fJp8BpA)({A7K$3d?R77yjEw3ZpV@}Xn;Usf z&lNT8fir_T9yK2?U#WTL3F8Kx9P1Qr(7& zkev#v3yaU?={=Sbd>VB-<>jQPeW?4 zdQSW zw@c%jO#NyD-KfGfHKzS=FCbMnl6t6*bKcv>kW;uh?!`&Rb?iwqDz!3yB$JOOBelBc zb*r9T+dAwQ1*CS9Wnb|6l0Y-iq;?A9gkO)pRzPg$Q92es(A*Y>sS`h;flHm$M{0D5UmD7&HV!F_K9{&bp|t{RHq1d<$Ng=*2^!O8UgQXFM~vhI_UZH?6(Z<%2u;c+O)k&><6zH z&6x<8zAkrzSkpy|0xI5j*t(;s430kvai+$VPZrD5>vQ|Xcwyf!1Cw|XI-J1iTwIAQ zP#_uZxo-7I+W!0GxZW%~fx^k_e97+A{qB2I@Qhf80Lct(wPeF?c@UF?sGOx^v}lkB z0*bDvh^L6E+JBCaX#O^pu{>QrrqLmE|7`VA6YabMBR`!68fW)RJ+FGtV|d;p+0kI z5@-cBXgQ`iBF#U`-Lx?62|hOW;CD{P$r9j3X!iCb#BIu%qGM6f0^7#gZ)rrQ&F z>ce3y6H+P2MeK0~Uzq0M%wna#0sG1(DS#RpJ;S=r z85w+?B(fMirMYbX)icwHB&~XDoK!RRT?0e2?#?!cpKi#r>+Ye%DtU%e{~qD_+*7xd zjcL&KHLG&v2vY-q8`W#F8M_`V*PCr3G3kHHl}x?NS{tJc zyB808j&~J5+7Cdwly0$6{P9Oh6kY;rusLekzSY%1U+kUJYqNBT$cIm@b;^3~U+Y|@ z1)D&c#iG}XE&rLrcU5HIfQ0|x+mteFzj~%mB2c51fq}~X@h-<&2ZygMa><01T%F}%=k(+~HGMplTKpM~Q>ycEiD$j}();`o z%lc#8aY!raDXYC<9FZ>s7K0RT61vXmhn;McspVytM!Ct@*XMN4{Z$y@+cm8&kDCb= zkMOPadLCXza-#YCsn3I-J@o`D^icf!-MyP8t1;sOc=8+<@Nwt6SkwbylSJ0Y{TkO&9=K9APTrDF}lGZ9`^KKwm9Qc^ z*>ss&zHG>t^iMh3VIY0$(rl7pwJ(9#kh4kowP43pkbbA}iN#?tFcl9j8u= z0>_yRY2>**(+jJEHQi0SdeJGxQ{(d`!jp)Q5fiEOLSYd@0oIB){ZTcu+ztFo%ldu; z);XFyQhQta!ayHD$8R6EIyHpplR^H@y*oudz`11yyfPlA&6;&H{@sIQMpL%1^h#hrhH<)Y;k3LL@&EKWsNHYzQMK(|Zhme;q)lM4tz#Xe9! z%I7&*Yp&;>VILh}Y0l9XM($DC6n9(8{873k-7rye@pa+ESgF<3tlPnHqxQGZtA&ZHWDLee7@1_?1 z=3T#NSSYmaZkMxNo2^=%S|fi_eg37MJjUDF6P?EB!Nqwh$9X=I>HSFxP@F${)H&S=BG>EGFszhai-Buz`M#66PW%}eM4Ct9 z`Q^uG2&bqQeepZ{gPlDL^QiN_y~)Cl12TcyM3rVA`s(R+fdq_{7>v~36OC)Bgg5#9 zKvzZ}jkQDlzK?kx%eo$j)*i;-an3H9Ipv`&BQ?1FBzsn-@WChgMjm6PkxGJNIJte~ zWKDx?^Bo)&i%M0kP^yzG(|V#Q*J`5S7~LTm@YuF{bD3{_<|j+x+`05qseR|PODrn1 zCerOP+g!4VuJz=*W90X%xgNsW$>wrk>7ZY>TL=yD2t!4zOCSXL4!1WDU8N~<-oT9H z56N^mpVj&fgzj29c^xVYqoeFRj-?M=Mb%9f15bFpt8G?D?xzq17R%|0-mlX_dg#7f<}rCSC;HOat-W1#s=98`92s>{ zhjfdbsheHQ)HSzOD`^Y?U6gu+L`_!A0>}OGGc!5Z9uwiS#xzUSx>mdWLvCBlu;iWl z+)lL-mw<+&MvG0y)w{z2iOt_}nTVuWaR?Q@YuDdvWf3-O5APokQI~{RjJJ?!VY+S; z5XU(aTPNyzUX(p6PEXvrH*}hT1i`DG9ate6U7qZ}sGc{yDDlQ;10*F!S@wptwVm4z z+P*iWNA?QjyI&3lTI$WZk~DO>A9`xa-=pR$rTslGg5qwdQ8Gpig}vWD<8r*&7`y^3 zoo&+;_PkHYv9=wSyIjr}ih1rX=Hq<04N(h#E=wtGM2EO2o=hVLO8cQ@c`O(UahtR<;?;-{Y{ox+?VIR>PR?CHFnpoHrn%I z@2+PrFG0_gXWZkcWe63^wg*4(+O3SQ@iu{m<=jrkZr84uJmIx}AH;kZi~&}`C4iSU zgT4>UiAbK4;bDV#z3q7K^1%WRpaby`4@GQ?tm5iK%6y@+1Z@4##_D<1 zbA^XL`UF0=W57*Qg*y};I;4zxcR7c`=aC`jsy3Am2_*=kWrNq~q={2!<5-wW-)Heq zwL-1C6abXjF&6*R^_p6|DDanxfaFi%X|-|KmZ@$vJ4w#^)eOic)BgVY^nLSi9Rb?e zJ8stIF}~wzkV)}5FfCW=+7aO=eB&thtoU3eL$CBgOgEGtxiP&yy z@Et{^O!%vLf>P!H)LEk$X~S(8l&j#j;TH_XguGT2>T!)B8y)ewCHsAt~Q zCX+rGuc*!wuj}E!!`9eEl@4mNJdIN^*x0}wrjdDf2LbwvN;pjZVo-1=Kp2y_vq$k|3lXZ8m3JcVoY{@4i{B2BFMj!8Pa=xc;cY_LS;@^ZT~BKh|f7 znJjPP8?IHW!nFqQxu3XTJ)W)B8G9*YZl7=Di$%Fl3CH5^Z~1;V$Zs{-P@XMRf6kD_ zF$eG(>=+cgrZ8wvaZpZd2TglTRDMdnT^lJf7JE(bH!t(ov`R|m_IDJYGrwQ>WBI7qBUp!=s3LkzhC*q z2hcZAv$XOE|}ds)=sDT_zi;LG6kz<&K#<4h1-jt6XZKw=}4r{vj-uEgEy z&(2gImviE9j8>EFl(@!3O3mQ$8(wvf?FzD9fU{csu5nPgY6Z{)D2jpL`X~4c%)k5g zocT%*8AyT*POC|olV{oU_!=Oq>_{Rmn*iI=v<{hZC_`LFxyM)J%`e*O&XrNE)8rHK z@kMTo1yGI`&CIVynYTwSeeWa)&(z=~QY5Xa)%2$xFNnsXNGy3g8AsauU%uBfA)eo- z%Ti^V_ow%MINoV#olY>_-;@F&VP~V!%fcGJgA%3_95fS_BAMi~r79k`w@)O2>+P27 zr**p$C@HJ}c&1-l73!%hrf~ONpsc8=kJs95((Iw@>EpRX%Ei_m&EN(nSgNs|PAU~z zO^O8+z%uW?9s~H^()D;WZ_#Supf^5Of4$5pmD}m)`(_`o2q0-AV>gu>fwSF_{6 z0)*7!l?OqE2 zVtnt6Ml6}rcphR zi$bRl@V)!3C3@hC$7!L}B1aH)~&Q~kcI zrAnKIKHd-YD0ufwg|c#@u62D4=gn{O1T0|w~dz`0<&2Ll|XljxLt^s)xiD}Fm0 z?gL8I(mS5sJBrHGHJSyc{x#T~Kb_YQ@n8I_C_~yn5fBSH)B$$&l@9F5ZEc@m{>3Z&} zmOfY17s6q*SgBdykZ7io>;Z>m_)veXkvg4qLx~Po3v@&DzTkH{x=^Ff&|^KQACAdT zt5o^B4u2GRahsdvrYBEGN+?(iI}(kvSzzv_-7wO=a)&{)$^0gs-65s#vH84i*Ao*V z3Y{B#7JNB~NJ^Dw=6W@kOkJ5{4p{HG?v>@-W;=-t_}bW1w9S*x=}!9u8qGL)fAsxr zi5~1U-$Fu|Y|8X`;;vY(G$p{#p$4mxU4OC$y_;Z^!B)fOvs_p;_Y$ZZ`dpL6`OWe} z9P?TcDGHNbZ@vaw57eti*C|)^o^_QpL}NoZark$U_^dd))mmCfhUaL3iE38Pjps=p zly>tU@y>mjv2*WKTKzhqPfrf1QPYsfWW0qMD*y|@6^$yuV3){kr0Vf{nO>rKg~)u` zjO7V90>7tK^U6JDb|F5Ksg+9Z`?Y2Z=9ja+pR#T_!%!i~v?(JtoMMbU8n;SRgE|lM z<#V}0d}lQ0r{yYTqx({5(wLf6T9q2q-2sLF9NcWyo6lCtSO)|rcWyh(H5-O~zCVBa zLc&T(SE-!VALM955&)nD*3`N}Ij5Cc?fYmMul=UEH%lSmL4*>t_ub57-p<1aper!= zJTrStCsKf;6du!c+Zsa}SG)oO&sK~1%thQG+im0ME|03I>~>rAN{5k?fv8y=<+2&B zm5(79aAZOY#V%2n<_iXF=BINQO_pkYAGhCg{t887s`C^vV=%n0S_%5MG+M1YKu3fT z-=nJ+=W_X+D9xA%)gGJo*bKYwGX3qSXo2^FBu4!*+s$8Uzf6*cn?0ibb;5;9W^C7N zw`uO>TkvvLem_RiR=Z!dNkqL9vCsOmS+AHZU3f&F&(83D+=#6BqJw_CZfXtp2ou}$ z{GX_-4wk;s*A;*b)^SO@?dc_ z=O)u1K|k@w&Y%`XRx$5Jg9@Jh$FvogX;Bh3_c%G2*FvO`sKjT_R!GWWysWE!;DKPC zomn0$7}Cs4!$T}}h^>_vfAS}CaL+xwJo(A~Ahs8z*mUMrJ z5x?l?`7Y?Uk^|R&I7vg$g#!mvZN!XiKJTYCf-rp3M9){79hzol1b=h=>c^OiWBuy; zCuMFBa6j?RH4-6H7XA83ltUIr2*q-z$|Bi z84aT4DXa|tM17_ZxVHOhEQlD8^vM z5^eY16+d0~v{M%lQ8`umZ+Ps10$FN)RI-gT=0_Nk?eej!QRmjl@vW64ow3(z@-j|y zi8s`F}Kad{e{^GIYCu|O9`{z2O4cV4x>ym{q z`(IgPKLw~?p@x)FNPeOhh&_NMkl|n9{H7vrnecbwk~-eUXE*_mO$xrHRFhN;g$sMn zB(5@;(T~JtxbV&-E9E73Yh~hx4%;wue=s3KrQHzVwQZGmrvv_Ow@%o*pM1baIKQ?# ziHOTcj7kO#c<1qgkvv}|afK=Gd1np;3NzfoKRZZ&EuauSn|Obz*eDR|kmMbuTgSs8 z&^TNfB;~HdaQ$EG{bf*`-PSb<2X}XZJHg%EU4y#@3GR>(+}*7S5+uRh-Q9z`2A7}> zoa^3uKku`X@9%f2PSrV8{iCbtUe_|_nrqBC#)M;{b!A5r0^@fwe1Uk_OTz;6!f%!i zjH`slxeS!?!#?t3-dqZ*G#!h2l{^GL!Oe#TyU2Zz?XM!b8YaccGI!`a-d@KuW4bOd zLQc9Qr~4s|K_)L-hCbdc8Fc2vmKJ6aB(9F|JyHKZfk+y3?^$@AHk%Vm^Mg%+0kli$ zZ9c~2jIc@Jr|nzcmsY>&#P8Oi=_aulyHMos$Ik;%p1j^z4YmF54zv+LWD{p7w$n;o zIqh|y*pRpyqmKJdgvJqnR0zQtyL#XKs3072KsSn&rIH)6fgeWRVzx<3P5bWu6S{e8 zl1gdtS&GbySku9F+8lBimim|=THK(OQ1p3Hls0BRN^$jh1LGE=%$9Vf5O=2jSrQmA-l45K=j%e1J8;NMeD7i693M#a@eBc5(> zuYF0o9nZ-szs0Kkh>9i5OuO52exBLoEcTi3KE2rA9XZguWo|qG85If9)NESfT_^(F z4K0*Nx@3*KxLbWlbnB#?9r|UAC4UEMb&PQGKfiz zALo4}17xuf1nxvNUBW@gONnob%2TT{EzjYX+H>)ln(FLim?c-SBdQ<%nJ8MYJ_6^~ zBgq^xs81yjnSXWunkCd@@oJ5^#wM-LVv<2|7rPOS0CX0OyU>Cg1W-;y1zfChscmVsxwJu`m3vTRAjSsOg0RE zfByf8vWc3DoH%8~jPV*dhODbLuB!8S~eZV@R06NHG0KRiVXoBO^lQ z^1gO+>b03wE&y(-^f>RZ+jM?i33d^h+`*qAeL0&sJ%If)M0uO2Z0%q!=7dkIM-n zRK&5K-FJiCGc4ibZGA+iuu2o7Cbvy$=d2gYQI?R8{R(o*h_??$+U&(BLo>)MzP_UZ z_e!BPBVW?aJ*4*d=Op_0UA58)o(jo)T5?9R@{5*M@EHIxxSWKsJb>)&6=APEm_Wchgt`H{aP%S`SMjj_j&lcJ7`NS z@%;xg=w^GJUmgP@x)5oRQG3a7@A=pc;B8&ynpBBsOl)($@U4Cu&Z0U?8kX=fFym7> zaLQ!j1WtN_;z8(aoeTEEBezhm&?kK>UO4Jgs~ndkXOMEl1ErPlKC6nS9j*n4mKSc; zh375BIVR%e!Aw5fvjjG*Wnho8b-17EKq-n(=ulSlHK$f;2@GGZMLqBU_@X^Q2_kZK zgJlfGQOjYNkUsgy-Deco4DR9)7{0KmLn_1ghx9jq&~r#jICK96*+EcHZ;dI4c}R*U zj5dubf)alkjqhwX8QPuSQ+3jL8WK;Yz}}2z>mmU&Y@b2}G{*ysskO4Li68)R_U+olN0akcgLG=Oe&*=z% z1B?vg3mwj1?GWSu9gQ{$9O?W|&;Qc_QE2!f&d4{CrGK0X5Ew&;Ku0ZaFg0JK{>NVb zdk!f?fssLz$%p*ajx;UM(So$ES1kXxErH}ZC%+HpFS=K^zh*C7^gBk^VR+dRhUskh zs^tiFN`(J^E_468@MQDwCT=Dkl2d|_5hhw0?=E!;l`|qH17by!WU4-APC-v3tGC z;eD0pkCVKsB1*Qs_^P>;iF)hS#Nb z@ar}{94jmJjXZI}i8PxG;}m2HqSd+&?9C zE||>ulc=y_7#+DxOVW$`?rKH-i$;Ft8bp4+Qp>m}c}LIW>MIXlD;X5~WhKcOazf;A z$Jb}phc^)wk6}7Mgc;S-4kR!=n^gU^YDEw=7VmY@nK6~8_>j0Gu`n33GAXgjS4Eyp zZCQ##Mtx3F2tEWJx*+SNFnka@Q&AKX!@q~48agf|FilY%v*Wr+L;aBLLA0uJHtLut zpo^-?l+U><4x!Z#HpGxXw|hkh7A8E`&E~L~|Lj7dz0EsuFzV5h=-qk5x9FZy<-|)D zY(`b>%Oq%UaFTirI4kk%msXa*?C7=Di00b<->3*EZD0F!wT|aug`V?@FWF z>fh`p3PJ}bZPOkdEXNHQ(|Sb*=K3F;6EQ~?kLS0#Cg$(xY4-lIyUwRdxWRq|8EHMs zTrQ`xZmDVnMkGxDgBR_2qPuXsfTA598%#t@(74JhE7)4iw?)sh6o-1{&3; zF&hFz8Xp7PI0PSNFcI8AH0UmBYa-K*SU9J{hC(N z_*25bFt8`p#(~RvAot`ZvEotZDvkk^3y`E(MErm!aHgCPL$*& zKPfZBP?F|)e>f;>hvi*-)1O8Y$TVSuP{fZt74VR@j_l#*U;02lDrNE(wl?s-iEis+ zi)g7f2^ZF2g#Ml6pY|V!9i)6AAZFC*MeW8HTccN=knG~@(V`?pKtS+A!ok9lz#Tu( zJb!=rm-Ut;gMq{+PA6gfHk!<*(X$0zn5cF94Sj2}jnafr7t<<#nC_8d6Y=ju1s{S# zl;Vm{rBAUSd@UP0;(w06|JdQKVXO-)8)fH#AqB;v>0!#W!av8^Wurg_nYEgO_?GAT zTZ&h4pqld^{n|8E+QjxWxmbF}s+G=YGY&Rc3GEGQM|nF&w=Ms){QSeN*1_nH33yS1 zv=OokCf_}^1Y!cWWzMU-3&gL!x4QP6u>b`K!(w1YBvLBkuhSab3SU@i6FlyEI7J>! z@%i?{LiU43kzcLlC~0*y8(8p!VE%{u*<7{Bi{K@KOu7a?!7)4=O{OAmJ<9jqFtj9U z^#{*+)V1%ct9HB@s)sgosP$#BQYz zTaGx=@aH(Q5DF7)f@3gKetkzn<8z(*@zwVzhI;fT_E7G@-S~=aw%TPR1Rfq;eB3F~lno7v zHEOc!=J2+FIIFujSb`Z4JMqJk(7&~x_C+P~d8lv9;;#5vDsfCHBe)lSAvf3AyneX; z=QiS`jF%>zWVOV`OY%OtdjFOi>;q(qS49C=lwDo?m#w!@UN(Me%@-#%0vesZtH_d$?lL4<_z0-2`_=oQ0yi_2d4$4Q!q$TzdRi93;5+ z_);PhnIe9Nmef%=R{Qjx6ZR4nzdEhP`ENVSHNt}60D@#D_fBi>_3rR|hf)-O{iGyX z(L^k9D~-R<>A?~bkZ3iXXE@qYZ)XN(G-`2K50s)-z<%1jmOEYHJYKBW+ZSn2N$0d& z52W53Nu}^fk>8W$^u4ujy*tSPk2fY2jnS#KUGNzS0I{j;@j(O^PYjU$!(UFA1vaD& zyIrz{$jMr5v3ftE;xv(PcC=K$cu*PFmCEjZy9u!?;WY`u~1br8UB zWFrkZdSBrd0fc_4tm3Gh9NV9}85}QXn!oY{*|< zp_zA5pwh-_cPp5<2ozf_H_y%G^|lT2u?8xb*bG**s|Y>KtUg5fWUpi#6(ChMd0*C~ z=+;;ar*e(Hw%<$)82cYDmyUWvY?h;nb%s4C$7r3NUAAP7JYfV?bwWQK40VYu|Gfv`bLD!E ziBZ1q8MP4~&_r^o+@E4s9NIga0@?sDdn|+Dpu(^n;9MgAG|m>9kT&LoZ1X#(P4Qg%4P16VtK*1rpM!zo#9Y-qAJ+ypxSt#N zn3*prb1i6Nb%wR7Ogi$k(FD&|D@L`;9&cN7LB79x1sn-hi!763Ivva`*W)<+*Bc#0 zoy;IwfMlmyA^z2qRo63Wpc(~pp_ITgf=IwHAF7LViG~}q? zkTYLx`P(+7;e64XRd}5<|1>;TsDo(Rj(Wu>VC({`a#3nMlkfJ4n_-A2C|-rnZjhZm z?GIBKE(%NWPfvMI1o8pG)HRkgAYQ%(Bh)(B-#;)&+Ox4A!YWl`IeInNKwQ}=?9dl} zTw@($X?K1>Pg#a(mCgO~_@q$Tu~w{o7YUGzy)j*tfYADChwI(T^V0)_u6kNpEEb@O< z*m&Jcaz6ju6-Q+H+2kPoIcQu$YaqtA*kTxS{`-4NJD4m<#KAH7Hb3v{n(`j3$u?fc zEldxn*Rw%g72zkBA4R_x6D#!UN5C`Fv#)nOkH-GSEq=e-%}ISvA`b2$mU=>v9F|&K ze`nS!5`AL-JmddzX9QYZr{JHllxZEyVCTT-ds$=3rPKWRS&30f$?Z4ih;XcK6^h zdtKcUAxL|bIvrz!xk{O=How{)qRyI%99tWh?#n*B1WEx3+3((er=8zl^pl##fDwk1MxCOEoj@B2qav9|;o-Iiz&t1}l)t6nn$= zJhH2W(sR4{0inEeAght(?bJVtQt;QWml`tbOe?{Ojx#10-nhv&PGUN|9o5PAKgx!% z`e-FedYsrzuQ?0gNd+!~9XXc-wwLt0D7pfAcgF{tnNt7!&mn`fQ6UQ~QX~9ihi%bk zfs{HH;I&XsY(-BT7Gh@48q+&~;O(;Kbs}PZFp<+~J~)wVWi_T{ia;uFFF)v~8UiH% z?=OBjGjX5QrZ7R2ZnR&;VMa&QGA@>(XA#(-Dw}NL*8GR>BMQw<5#VpKKo>q-%QJQ_ zd$os{MYZq>L(Z771CZLzv=fCr~iMt)(4G= z5)W{>g`Del#eqvqM#w;A>D6%=LKs?YXEt)-uIi}DpJOL8gHCK{Q0Dd7{h;V}Q+gcp z#l|9I2on!4hwr-M(-YfbUFT{kUNq-l{!R9mH_~uLaImt9Zu?D5i&(NC3svaPKf{qP zb1)u8QaGLfFva71BAZg?Hc8RQ>@Ukhalr%6Y6mbjK@wrx*9YS}1aifGz@3c(Efs?% z_Ud4`{nNpjL>OwnWyEN91U>!738xV$Dww}o8N}js**)yOzb}wMJs8arpwN&miHo+` zy~?0gFxU!wxII}TRgsP(NwC}<8u|;vL??jE$WIR)PNn9SxfKNDmdwtBWEBaemN{!2 z^IQ%_Ffx2oasT{h0)jdjZ(wC5wPq8(6d|Ib|oTIEfk+8iye zY6-k#@E2P>NmluY|2ZqWY!o*)90;F-o~06nU3TH!M<`>J|pf@4>gxo~^Y2rz6 z_F61l_`z92{!xX?0zSYZFX1{Fta4S<2C49lU6Y!M$|<53XF=|loYt7;5}z)Fcckbe zRTpK~W!jar(80Ze+Kdh_P0Xx<$ndnrI5tiSy#|eZxXXApAIBNzC}^GvlUiytsCkwV zN`43fUU^(zs5@&t88@Lm9y#$VBobv;XAU+j80dZ85B~R%5-aK zMq>nw zyD=(>;60GB;^cX}ijNg&b%lq0U@@qVQMpH3Jx~9`Y(h%LaB@XQIQQD@*=qt zTx-=@ z!7%HCfNC_QEa9BbBG02LB2R6+r#97Qf?C1Lz1u=oat;pMhs}F&A`LIqDW*sy?|qx% zISFPbGkQUiP?io@9xC6iB?mZpP4lzjxUMWt_Ol$l54Q#%Z%>u-1q&5VDSCtC;LHFy z4d5d659tsf`JA<%Lx?kI(y3ha)tvPoS9V_R#BodtUMn*9o=;<cGj=9wLjhK( z$NT6Olkli++m6CC5dtZ(SWH)P->6=7>)%jAji#|ws^)k)+hh*+;}pG@K)or4m4@f++R36^p9wzeq}*oL1B`w| zVZl^C3gxc6^(N;X$~eJ3B%9X&sGkNLb;>#XEFCxO!)mL^Cb9vT3_21{JLYi}Nrirw zyV-!S$lE*1FR6I0gQ%yc%wDH_rg~_CKzifg@x{}5$6$_#amU@dZ>QKZERB6)YRNp^ zs)vm~U#o95UG}q|kH@ri?k8!|67TDM0I{-PC_5^YGX|8uGmxqD`3&9oB*~yKOcq~W zp3X8v9L3HIn!UI2M;pgD&VPwe8YN9!%jO&q`F%a<&fqmQi)t`LCE}H3Od3qMho>#~ z9@wDB@22k#gQ|bo@i^%ZaJqP4&l$SVlOfr&DATS)I%_kp8%IvE_GkKN)moSYFvHHZ zerN#$d=cZEV*d%*iFa#%&0_}I8RyLMl9#Lfa*gXcVXab>Mo84aEOJs4V zgjP4y*3&FUg5Pr*lbZw4e%sY>EG<=d4hufWt+&gxxqdA_VGhjk#A>`Qx9_p=Kxff< zGwx}hkJ1Lp3dM0V30g(Nv)SLglGtjPt{ynh%uqnOepIG}B0ukgI zgU=6LgD=;I$@Iqhu_Y~9zNITKP+Rq0O)pOyw9;|SC_E~p($gjSj@1KU>)|Zk1`MZz zg14M`@!>FTdGh#!v`p)mMfTXE-fk>HygiKHBuH3>eQ}>rU z8Kgi7$EUju|BX7ESwPKI&0dxnD67yDi~zXWR&wekq zR0yrBDp1Axoq8c_A|M{yM+;8p{>UFBaggnb8lHU_2~drknr-`Uha3$q%AToY*tIuf?!d$x6O)`a~kY^RsfjBE0D!qu2(M}Do1X+ z8AkfKZxb=(1?YoTsopok6%TyY=+=1LAQsJXT&7G7EZz(9g|XbvnQYH1M0~Dwb}OO3 zM$ktOb~=YLsTE4qzX6H=nt5hYVDFE!LarOwx;TIaB^qS{pioh6)cyzzS+`5VO0U6Q zOc*e9y!?`tQ80Ui?E3(mXb1G(Y}V4@Fx3@7PU zEL5Azka!Oif}T4M7RteUd0`|ZY}-DWk5W;%Km;Ks0y41U>Fg;03JxgxYuOVlroE(6z;N4(ZhUDvX#e{uWdQNa0dHhjHGihA)1tf88HBP5$(E)a$_$JLUArPW1fzG9CrWL7H z3&6QoBwI>i$u4`N0K$C=n9-y4XM<$8x3|$cL?hQn@?Qo6^b5FlR!c{90dYR7T;X;b z?o%;yHq_bs5JX&yfDcDA-)ssiToH4s-bD{Umh5`R%EW{Q*)9jFH0Jr3Pkn%EH33GL3`jF}o}ZU+n!4-1&aejc z3;Ernd}2NeGY14e>UMD$v{~L4Z9m`{^!4zQ_<=Lzr0>6_8F!BhWZiM13b3Yn!EAOs zq$cFFf^u3#OJm;pOLGU8`@B2-imqAuD`OX01(kpNCrT%Y%8k?T3i-Qtw9?aS zo*T1Y)ig*BCPiMer>fC}=T29zof!2SvKujDD?1-TQ}gtBCa-5+(&|6{#DJ^qpld$b z*Y^Q!APr{L+g%E_>U;V*`Cay>dAT$lEN8-;v;#I)X9{r7t;X&bRsl~bUk+g;%Rf|D z%wS?;7%*58~C3_W)wK6Swf z5H%8O6e)HO;-EOh!XV)S-(OhW@Z)fQ0Y5Y);)Vd#gz_aK#Ais{x z+uok-a1BLMZ1KHBu{brJPc`czotvJ_l``bozTU2!H?edy<+^u~c<)YAc5Efeqsh*7 zj&MS@a49a51M@8+>Zt3#P9;JOf~a<)#xol`4%VN%jJX}Bzq@Cl z-rFzNML2JNdb;z!nU>K+2KjTczPcWL2@vo&0dEGOU1oECBn0U<`ZyjJgM2bENu76; znzYOHVmilJX06R`FeZO)ctNQYft)y^WU2eQ6$m9B?>2Y_Eg1ZI!?UV(S$=(TKB~d_ z>A2Ws_cE6G8*oJD7*FFz_8ri3+@i;P2FoR&mES^Y4WB-b1V)vVFbc9mF}D)A?g5U| zJG~mnS(dWAmWv+YG(!(Q2a;f$*&?h_S7$sF`-w$320aO(B z^{w>kqJNiVo4j<~CI8_~ocA*T^N0LK@(|D{R_g6|r`uu{6sqJkjn3m5O92IoOceo; zN`3$|GQsocGmNx=_t*ek849__%&pnYdC_#K>elr3WQp-W8IccVgV&0%{bpuV`e}rr zGT+;xo%1XHMj<`PU4u1?>905B)0nqLmsl5t%|$vN7o*5+0cQK`OC&?3c;Z5n^tcbt zDl24TIdRYTZXxeTYr;$BDtU2j2$eBf!Rn~=iowgd*-6#AvJ@IlFP-W1$+=PuCE9u9 zToYB+$W@AqIIOA>LCrkq>e|%_4xKy7>{gS+LO8&|%SNKb9A-C_6FM85@J zA&L6h_m@pMhnfasKcS;AULEMR{$7}F%2=?%M;Z(x{S^FWVCjQxf;m1=#RqFZ?!sILi0R;V&?=>v*HKta_&T04`LIVUH5tp`td*#poHcOkukn( zC$Ij~?u>WI;# zM1U}5Y(xaTX33_IXSB(oC8<#1ScX7@qkavb)#`iKu{p{@%YGXjjmPAqldpO7bvb_Y zOH(#Qyc)t(cH(cq22XvrRPfNGdtWp60`OA1C%DxB&NG3tJCs+i_;BjF0oXmAX6%ecso2 z$oNya0deFKup;28#kUSk)yAD2oKL9?&^l&eK_H;h=hAs;q1g)a$F~b zJU0v*>oy4D%Z0xmeOUCr)mnKnanJz?{ zP!q{H2glm@bIU)KqDzIIZ#YhhB;cQeiTK(Yfuh)_Pdpaw_W`|nHVlvqc#!mjiM)nU zG){LeR+^9t-0Wk0D6I3%c0VVUxh9*gV^?HWo!U|Gfux^=3JkmZ4U#)pc1~5`C>u@I zd@d+x&mjR^-s@@FTn=u{5>;{woo!#h^JnF@$YE=E)0L#c%y+(4+Xz4&Wg~eiMsV#hk9<19%0F=@OG-ZB z8M<|cwEIvKDL1+AGPMzZQc02rSET9E2pgCmadgO`HYv>N+9du5m+OWyu6 zoM6#iQ^4Wvcg6|B(O?Nbu{gFQg|MRi``k*1fLjuMJ{;J zh`e;eP>Da_dKu3FnjcFwdnxa{jbX1!t`>z~?t3fSZwJ1o{LpK#)yOl0QBhf7v{xB1 zpSYv7uj|6~295%u~wFsnmURH;{)@&;5@Igs>pD z|4NF0wz8f=>ei;~wGz*jA@rV9Kq`|)=$WCWrpFE}Cp6eaWMm&m3iRGbX<{ub_t9~+ zHCtFJAehKvK{Mlt#qXZ*8pA*V*xS*z^IDaaFXVy{^UCYq0@qv_b2_Y zB3@^xYsb<<;X&;`yE;$5LiDr|xb5Mn2>-qTIIz{YXV;U$d2ypZ611)W=iiE+kAcFW zX$w$1AWo+B1cj6pg-__WNnQeWr_!)J{Wp$Z<8td=NMj7a_=sbw=6tEf(=(c|2`TG( z-=xqhg+AlSa`Sa+0wr*vgtNjea@F2;E_HY4H~v}vGA2x_8UN|$+eRvdM^ zd*pFIEicb31#$gUTNlTUZH^}eilmo%?MFpfKvXtL*V*BYWM`dZ@T`T)*6a8KU=&8~ z0y`^=hXpd38b(Y&!|L80tl1 z_Z|&?!=U{j{L~;Cj?6SA7D;H_E?6OA7O$#3jQ+x3P?>T z-@AZ+un2P4^xS8NDEdG29}KUzp0^F61y>oJfvyw#C{TBhS%X5^>CtTQEcR6n z9SEF{I*&PGQU8n61P;euQz7>A{FGfqJtW}FLb%CXypFxv zFAFYd#ESRLeyUojkT`%rYEweR7u**RUufDX!YNTN-+wjo3b5_<+|sPglMt%+8yXd^ zf_G{=^M~_$zzLH5ruZ;YNAESWS5q#AP9ktizJ5pa%zQMNC@9_>BJ+BUPiny-&`0g) zGvTqgHvME;%4|rnFs>2f4dL3{v*AQRmyIpwFGUuFQROo+C4dI6AC%}@hWca0p1|{N z?QYq1x!PQN1$z)Q3n?`MTrA!8zFT+Pw%oaIM5Zu!hsRqeVNVWyY}^R=$1}IG3oa?) z9q7SjF^WcmB9#s^9X&h9i9>^1c{e4$IT^~ouTkSh?dvt1MI4-8s9m`}KUt5-V3t~YgEX;O`7hXr5={U5Jj!SfrU6m%zMmIiR1 zgg9AfwW<0hGy82IysofsyvcKXYZC?Z0~;RDznl9Pv(iEnRH8B_Y29WD<)EKyhE~1? z=BccnWcG&EeQ4TCP4HSCG}lVrP|S(!sMy{)FMxt_1c)H(F*$#@4q$@CK(%2q* z#Qw}2__95g!BP56leXiFSviK8EH1GB%-(l*s?coz1mB@!$UjiWxTR71T`ob%Ur6=si#ZHgJiXDYM4j)kcxaCnt;?y z+fvZ5Wd2Rg?3Xv6==lk>bdt$J6!Mb`9yT|{tclVpKf%|7FG@71buI?BTx3N;osaz< zbgprOXxm92Y5iipkVK}?DdMvWEl2#Bc$W1%Y6dZR zQ}vBt3?Nr+_g`$!l- zG?_5!b;UE7d+t3*A#ovIGnZ^~X}R$-^US9})gt^!NJk@HZZ%O@cxt{()ER08PSu-~ z48+>EeOUE{4j-{S`-+F#LRa;$(@OYGyx~GNur0(9T*=y;@3}znilLHY;b~erK;4|* zQ>RNw473VI`Q@DDr543R%NEj2SW#Ve6EL<_-U-aHeBBcv>4r5SOn5_jej3$2# z`%pD%A=Jyo%O+h|6`IBUaqO~~KJ++2X4;;DJ_E)DBABri22x>#P1>? zX__Ga-7fn#WM2QI1N{&Hz=`&V%$+n_qE*5?B@Dw#0-y^KNK-T zr6Mg+GQ}&ElHj2*gCgvuK5mEAA)``!P4EnMYRXA|vePr=OY*cxqJxj}-0}<=!Oxb^ zIdJ^wrcwxWh{21{ut{0x=}TIs^gxtZmzeXi9h7gH%7yFx*!$Z3Y9UNf+U;FEHb4L_n|uR{iVfv8k&;3#Rb3|Py7%WYHl z*RLyXE=5dc{1k!_UoVb!m2Z_VZ_e4MO9tPhTZ9|b@JA#S-s<$r%3bL|$~{Ajz^E`T zCILFB%$|J+O)k+*`?GRe!Igvvt@5?O*4M)Z%xBlbuzCDI7Z1 z+*%2wCG(QQMR_5#8*?ZPq=kW0BY@-o6Own(#($Jx57sb(S4MjH;V4;UGgrAW>GN6t z6890U0`0`GGefNkqmNIR-f**NR$a61l9Wv^pW(N}0rzNM&+HU%`_V~gA{Y-rzShYaM419 zl31zClAHfJsjx|D7O3D@InRPl~w% zokt6gsOI8h9QsyVjGaCt^r=`v9-!Ep=Futq_xDT1$rdBfXyVKKYe38k5fV8%p&nFr zlfkQA;n5+XUXbL}uWtP^MQSbYP%WkZE3JvF9zOWyh$+Kq5kZ42 zv(hg`^UqIf|M@AS|2O9U$`p&oh3;wD0o9v>I_7tt3nTf4#@QOr_YC#OOgmDN!Idz% z7s6A!W-x2y34vl_p5cqb1|Tyx1q!u@(Uya(8?5CB&^qZgf5Wp2dLyaB^2`IDS&>@L z7Ug9ark`-ONr}XN4G_>{@P;%Ryty}KzN*B0`Z00ZXYl3v61(Y1R^5GU5GKbXcIWX{ z4i>}n=!q7nVMhE5P)VRLiWape)kq)Q2$88VO0bBCiHH@RZ!e;>B0Lp9e?8vMVVlmt zI*w11Ydzg{Nct-2)sc=sd%Qz6o=`S{HQE#|_H6Oai{K2E#=;?LduE&c5VdnOSv&_g z-B&QipoGuZ>A@|r*$kFEzhZ&AF*rzO2i24)2h^w@K+>~^&)~-5`5Aw(gkK1EG$fOI zqMJ(5R6dcp0*hmBV&lk7xM(Dib<$~%yjpzQ<;a0tlAXG~sGA~Gvid7}h;rO$78d-l zziQXFZNZ!?3oQ4m?p;Q5JnV{YgkTGLx`-!>t4+=3ral+Y1O_IdCMYp_)*Moq(Tm{5 zjbB2r_nCFVUKTf>kSDRG^V_)IB+>z#}UxES3_5Y))bYL5@jq2kBs~( z%MwV@ey4nxM-#6s?!%&e1@S3KVrW|$wN>F>2~r{nJJ2^LI_9a;7hv!6Gwr6Z8hxsV)BNNE(X?|3rO7FA> z(>!Z2pjEg<5^K{P{+ytZX?cP7YSE>{2pM5G&Yr9^OH1`Bu(F-xNcEwo`^@5DNa) z)c>~pQUJeO`H~K?`8i>RL7d7Vg(#yaYWQuwj(S1ic;xy0QzfLQY+Ci(J#l5R+2m?T zSJY0JZrq4nUk|Qwd^XEnzY(^F7AA*lN)i}qg94d=mLZM*?(-MXuYDLM63!$|gW}Mg zncCr3crj(Wq7ojU$Yb)r!aXKqd+=m(y0+HtsRi!#Nvee`qETR5s(KTC9D8ZXx3OQA z??X$eUkyOh*mMhZ`qRM*pAk8F-NcEt zb6GA+=(h-ke$kR$;r-9_{d>%GOwdg-!N}tdXfNzCZwh>)*UHPww+K>F`BdbEZMo#l zSn=KXiMuR7IIEOZXE!CgC4Q3$bV&OJQj$&5ak%~ot$!{`SFg;MHsXq(+qiz)oAQ!u z&lK>Z3Z!Exk7%&(1UmJ|zNQivuC5v&39nJ$z@w6_sbjMtDZL+2+#*b2-=q-ubBzOJ zg5G$GxrM-xC5shIo3z6d?Uk(cs7AgM?-G9*Ze=2b@REV|X$Qp@Zfjs7nJ_tw!mEC3 zH25$!+AGqucqO7d_0d$j){j6;KArr3_su^8ztABgL*u(<`le5f#fcUV6|*H^Ksohl z*+@%T1NU{4P}fAEF_@!MSQM2yy^d2WW--#-2sBUZi*oHruwL)9A1RmeyTa^s7=GVk z231+=GQgG1a(HukZuVjinA^!sc75*(ybZ6k{x7cHF*?#{YuAo#qvCXI+vwOf zI=0cVosK)UosMnWwrwY;_ITg#jI+Q0sf-#`&sw$Cob$deH#23olralBd7}lqs?^Sc zLgC%H2CMVH0`sMa0JNztc(BsVt+s|-ATy1`~dsMl9WL3 z9b*Gx(;GM!Px$*PP$YUD@{kC&WI&JXE-JyLRVQDhJ0gZF>n{T?;viMIbbS-<`Gvqj zyO#{I0@UFrLj(p{&9KA(MBs(h!CADrOSQ2U`}UZ0Q7E#cWD?AEX{7*#QR@GF4!+1> zW<2yxk+f#MQ329u!o^gy_XyRwsXk>V)c*Xxi%x+8Y|N3nL>NU5LeG(gfbu3J8VK@8 zjQDw)0vBIgRMgv=>;LI$Hur#igd*-1a0EqTIYlRz51|pGxV(dHbkfClvDR@i;}**R zavIueNbg6kG7wLA!$j0GR^FIplBB{HEe3>}-)9BGox+uUyq~$PP%M_D z%7@I6sji33(DD18HoIGGgOWL3v^p|koZskY^(+%@_gzL|&kU3AR^CbGWr=-1JI(m| z*^TZ*9Mn_8HDnnM4&~q15LE;=v(~_EOdLWbs0{w*s&FuxUm%d(os=SFM7GdeDX45o zp_?iZ!46syAaR(WuCiK_Jpq$D4t@DB2N*_8D}e@?>+Pp>@@rvK1#~qb+F-$H;+i^Q zNg*PRv?w0GQFFcQj0Drh3{kynniU^4ryDk`J)`2GF~WZS_ZAVP|!^ZKxiDC7FBbwpqEeaMS^t$2$Jh61_o zL@=Y#GKaB2y(-6OB!7`0VO7`V1#ykRfuvhK1})r3!lr*%QEM`wA5V3q=29)J1-4+) zP^5tc41sxtD{yaOhWP!9wR*x9yx8HS&+%jfj8zU zj5gR^LP913T^j9)Sy{L~A;SWB&>Km%?P;yX@iH(TpGs$PRHSrzr+QnDn~Rum)fTq$R^f9rue1Eedg(`|kzUdzpmsZDpGgH;1sw#Tl zNf6fIRjt*REEaF?_cm8+b2Bpu@$GWl9b^Fs`IfmL(F9iWY1hlS(Zxl~O`^!qu|QIz zXmKzE2v0wGb@ituTi#sIwQ#9RA?ndOAuQ>x%D<<mq)80p+VuO8K=7Er+7gqS>xfv^6pHT%H(8a zqr=0?_1cTsy+}|A{UA>2@_T`P>Qdd+@&0~rcIZWr4}4D1szz-hqU)8F_0iE$cB=&; zQA*DQDH)mVcKh#b{3hTGXuf6Q5D54prp7PCVfq9`+k@X5ffD|F)g!SGLMZt=Dr)2c z)Fkr4wn@SFQqgIVR7X1`D3T@fmW^wrCnus|vAMiJk}=?A1YTOm0TI{>bZ~XHU95*} z`r1Z7tWaskN~gp{#+3#x&&5dnY{ILnpYWfB!EoZ95fwr^brSw~keHxskWo5JM1|20 z=|Q0v7XTd{d^U!EWLC!RDiv%&rkeL0oDSKM2;fA)caiJ)kIsm3k-1<_8AedakYc^Y z0yJdsN7iS(@DhBwQv{2MCN3ZO>Sie}0zY}2ba{U3@_1@Tc21_96vJ1f-{B4S<7y_p zjjSxBsKl~;lhiKO9B269pS<7pDx^Y&4x5h@nIR)FVt4qnS<$wzjbwe04tzPk9PM0B zSw2Eh^2S_%O36xKC0c{1_-kOhCprL^>vK+&-Rte_f^4Q}UYi4}(dm_SDW2jqEu73p z4X9!tZ11>c%791a*RF6MVnBt8N=4)ZOK{;y)*ZQEQvTgYE;1X}sDB{B`f6!=tPa-|{UOAc|NuruHL*{2WzBrot&yhf3=YB`kqb z+<`(nDa22QyZci)-9jJTUvJPzuyc2+1C)tBDd&{wRu#%o248E@!Bp9P5S1tWZW~mi zR)FfihWs8&wgxtUe=2aYdpd{#e~fxmBoG5Wg@se`IV!uYm-S~1_ae3HEM^nrbeaML zJnt4tSi2`CCrJbp8i9D=Q6k^1V%Ph-dTUUDMTv4IU1VkISJiD}W8?3wTG-z(qG%eV zz-pT*&aI=Gx^@vqLfBNGYj*yKw$KKtHMp%-xsS-mZq#X|d zgV$M9k13~<&~Xqc#zB%utMu>1@Jv!ZSyIhE4j#=*^3rn260zpZS!>eAfwfd*ayjJe zwgVkxJtTs@V#+j6G~O1VG-@6ZB&j*x8s`h8%1%~Khcg4qM+Q8E$z8u?E1cvxG+_e! zgAiDq5jnIu7z*N|<{mx$vLguAHhiwqI0)S+PIlrC4)7|g7XO_DtMZ5vE@|7a6{{86 zbfQi#sl$VIjL9-x@SyV>^)A{?R(Nr*^LdQs;+U-%5ilsU;bqXSR{W5ZgCMKq11!R7 zvm*#Ga7aki7#)rcR%KD}DTRd)Vr$sK^>Av32yKa;+nQho0-M=>I5}bZOHzrvEmWqwn+YXBX(a_tXgH5lSx4ByN_4uVx0Y01Uu9pjS z{7|@l)$iWtOIglcnGs%LUt_bgpeEtzzG^l$E39K9BRyd7k77UugZ{_*?+Mu;g@VM1 z3Az{jr6mN~f2LF=`g4nehhf*pTs&NXaUcQ!`k+}udvo*IvOH{|Z~s$U76c7CxV(9P z--H1$jC4r#W(OG)Y%cq|lSqCQ1jC;=u$BzC6VVg0yjt0Z^!O6xEG#USmzTM#o12(+ z7=sDDY3`Dqt!o1Vg)usAasbY9`|U0AP?6ka5o!S7!V}e0W~DaHskbTyQ76XHskZk5 zEF35wEXl_6cvyk;hx$EHj-y^kP6=(Ue6+e+Hy0q~Ly94iJZqttl70iagG14$nsDsZ zvkWG7f1O7{M&aK?hy8cf$v!IVht$@Q-B2({vouN^Hkiko>Ls{BPQYQwbmsYNK}JRf zZ8Dg(*h0?!={nG=oElp+caBWR$6|I+i~8-2`P)jXG|vJ?lScxL$@9{fU66BG_(%nF z@M3gF_)|q?o;VsVq8K{M>C(8&0Ul5KF2huUqByav$R9Su%}GP(RoU&tEv@XRO%5{~ z4#uRkA2a~OL~*eW?qPZD2O;6rPW;iuh0Q+|Q*s$86^d?|^gmH03W#ZN0@`pqpb5kD zP4cytLfk?)L;VQ#hwoDJ_>D={F=qsg4%? zqE|3rJdV8vtj^PXtjd3R#BE8B>2^_i>^~m7U2%M7cs$yu|De|qblx2F6Pe2{H~xOA zp%lQ;tgusiR?#p{B|s9yOkAz)xV)L_lKUJl=3wnOmn0bHpRZ0R z$a>NiJ4>2GEm3*U30(}AA0w=zW+9uebqw}XPq|u+`Ew5S(v#^QiDcBwimWGfw$<|6 zNm@P#&rSwOLQW8^+q%+Eh<$lNc5?}xdEb5e$$g&AYnG9RWPE*cs3Nfc@41xdQi#v$ zaE0EclN(+IJo-8PHumf59|%EYTL%X1_R&20vAueXFp@6vx;ik9L@plgwzm5DA!0-MbIKhSEASNjZoh`85te{Y}bgM24R0rt*-B_+}Zg_VKK(0zg zL3clRk$HMXhWE|RE-((TSdQy2?sj3b>b|3B7h5eEH`VF=NL(^bUN#S`>j6dEc8K^3 zlvBW=jooNOycJ~8Qopa&j_(~KE*paN=F{zNWUs`BhX?U)`qS;2<{EofP58v6O1{|>hIk(1O<5KgzU<{e28~vj zrmWw`+i!>-W@rBta&TEnecCyIY#CUX8_{)PtTg|Z)6@_~KF)#l_PbC&4omj6;DG^? zVfo4QSEbjx!Qtl$`-K%;Rk>V+vh7O62HM#3Mn@~jS`{nxDmF2fP*y;D( z3-oDa@wm2G&JW#0 zgpo@EB0Ir$c;+-~&CA1Mtd4>H^VHHZjeJmNeRej&45&t@i<_BE(j#)`g#G^AQIt0= zjd)f&>FNcp!$q?@%We(LW1_Ck@MUJs>enf*S0k`FRwIZG&qJmo_|`mseHr_^(-M-= zTdt;z(mfMlxx5Nb!!4T4YU0SM)ds2Xx5HQ)q2IxZj z9&Lglz=}Fxax`Cw&E<-(EIV5P_{X*DNxEm;w+>w`W_Dz*T3q*nyR{4spHr~AX7Q2t z%&$_ga1=m3!s@wY%Zfd1*tiQlFii<>8_z2yK@u zStHa-SDhG{(~BP8`j(DaaveA5$WF`t^DbeqO-;X9eT=id?Bv&G`-=nAib-IzZEhnL z(-@tZy-bpsHKF0L)x(PB2`V+`EC{=VjXl?qlvr{Cy@B*EI2VpHaE>d*N3~s=e<5!^bF=N;5TLsXJeadkX15A?zMU=?aIfP~V96e@m+6A^+ z-luGTYpyoC$Mpui8;Loc+$b?o3vDe8K@o}fbb>;6LV0!OG4jVH({3<)nXKN_5j~$m zUgrWmZe|Qx^#ECf@-19W3To;IHu4{o3Yj-pwz6k-r3j z!gkOZM)h>l!J7D>`*| zH8V3zV_^2~Y{9A*aq;9HUqMihlFxx&u|+rtEcUeixs27((eW?WSHryd&QqZ_xcvr3KLO~##!}BpR zByAyxPaB|JbU|5*G_X24ItZJyC9{=GTV>GD;#QTOTetUc!Kz@Sj`5JisKzuVy~Cvg z5~VZIXBhW6oHL=>^m|dm`KVgw89O>QGBTa-*V4x9ox+Vk>E6`?!1 z&F-<0S%I@&Mdl{uMIK5e-S|5|TJyxNNILYmU>tvA4*k6R`~7ol2-C5myZZDf*VfWJ zIlE}wtQub8t-KPz|0TseAsQt$QT{Ee*jIdzBUl-V@XdpBd$xi9WvjQg%;?8Kewx}j zi<#9Z80SQ^H0u3SW*W5R@q?vmaTuF+u_^AYR4WRk*}XXHYP(Q3!|PB-4!JLmPR(_3 zqsJ0CZao1NF4jtDpPZdfFc~wQHq1c(s5(?F7B~|hi0jRJwbLuAIX*O|TqB@hG7yLQ zT8T?k^KA{@wKXIt#?4)a?3A0B&VU6Q*7cDT6~&sC(R^Vs*FvbiB5X1e3;6>DhV7!K zax{ZX^54l*pN@%y(TMBQMk^2En$bt_pH=)Cu(BWxCP5jmv( zKJ0pJ$hkCnbt0{v+tWC=-5MluATr^8?@yOCU9XmlXM#E2PnI{IpC3m)&zMiIfm>ZB z<~BAT34`5+Tq{ks*0Sq{dmjy2IS-ff=OqTd*BfO%=&$z=K%84>NQg$+UJyBz0Nq~} zPh()2ul=8WBq&iD%u44%n~wrrOTZ8t^22_l<8Hf(8F&sJ`|r9k9Dr8J;#N>tESsfj zyH9)54lrcNI4CT{U0opY6&G9M;JUe5aZDu}XLR?zd23>|gpeyIOevo&@cV&lsB$=# z$e`B6WG13YUmx?&%<3TS{3UVi-BP7g5O769Z8piB(`p0(`4(Mxm?jKRMT>EDLahriS zL%ffPap6>k zsCQnbS2Vv|v?i!`McOkv`iG*Y3OeUTUq3F=dk z5c)K@Zj0CHZie;NLj|_}G9vls`}@HG2s5cEgO1qGd#tjg=CsDLlhd+|ia^b@0D;Sk z)_dRxZbW#;Vu^;vh5GY@X;`J<%FXl;y#gYkKj!t{9G}ga?|7|-?yK#ZSX0t zvXW79I~*AKevTy6buULB_dVX@=^TSjGlDc6Z$mNWudHTfL^*UGO`95>=A{-#6X2N? zfQqWb6Ea2wnIi8SavXSzI`oqU;nzWxO9(vwZw5lNq`h#+iHiNh2*#*#9;^BKhh>vF za_q+?^j-Y8(A8Bdq!4l$^SOLdF>v!gv4NTpK$HvznM` zDugwLk5fWq0<@F`HFWUhT>2dz)cWKvBfgtMpG+PvHyVbQqbBVu zahw_3qQqhz0MuMKEL2qP=df<=CX2{lIqP-JLDj+f9VigXF#SH--SnDlRxaV!KOFE(-ms8ZRv^VjxYgt?d4vG2J`IAZeg8h zSeHL3o8=e}`kO8so+2Dxu+jRNxw9{D9j#k1uDcO_7+ukw3^ZwWDBf(MB52khBpQhd zwt2C)0L6DJa*}v+^Q?$Y_og*J8vUYU5xXD2OpH!b=zT(ez-bW737Wh- zp3=kNHG9*s?}p(&Vcr6;=j*l0tQ5^vc$X~t*?AO6Voxk!{245W0jp*5-zgf!hWB=H z>cNR1M}>!KKib=O!^<`#Cvzq?`O`9Bx9VTH0R9Sdhw0q^qKZLj(5uGfDsfjvx9beX z3ix4(6KlkDXhL6ey~A}qc#NK*>K07)C*fE8MkPO>GV7ud$1?Uz*>?T{3sd*P>5y!g z`6`LiPsWc3uIzO*&mCDp&8_iry$5|86*VX3xl(n)HeQs1u(-^r){&NZHRppUR*gpv z!;euTISJfVo0eL~h?kyKb2p-KEJrvQ=Qii#`eH1Ee zB@V0C!JmSP9p0&Qe)ogY=DO0rS#VbfQ?es>YD_aL#+-NP98#Orw)t+yX_H|EA^+gr zn!eFqa}oQlFEoxdBhRz->!sNVh8Z_UGg_sSaIMMlL|whi+J30u_6EdBDKaeZ%0kno zFgYa8);j@CQ@LlhTw$lm2vkI5P<2PpgR6ZN*c=%nx?fBu+j#eH9rk8MmXK^yDa6=d zN-uJj?0)6RXQ~IVx`AQlfc#MjA2$gFv4Y_j$YiBH zttlI#T^o+)sMoDgD0KrzdE4&ymfO4NkuaE0_IHtx_hN;MGy;QlH z?>Gs(S?uc!7ss3%mV<#={F;(~I!Hjof7>flskrsry^hj&AbKDr;0c=wSfiFMbY<3( zx#Qr_wh)>bZEz*tp)v;RTg7dE%W}vcEqvbU8)JH5^0zUZ1GaX))?p6b#br{yI~-nP zt0oxJSsqOU1&^?eLRPy6d)WPc&sXc=?*wz&2Q-Fo!0BoSATSuqI3ABRxmThdPbr_QHu0=DHEPA1;L43Z^7C8oTqI{hZ}_7%Nht8U4RbzMD|j3PVBJly~1Najtp zbO)SsIP5xS^KRbncM;Xs)2YbS+zg0q z>$3V5B)2quGz19o0@1Hl{C|Mfvt9XXk&{8J7HW*eCkM<_q zx^De_3>;)?kFf!KWYJ%aT$mQoYnz+84us&Ls5VZeYBC@Fc7F*wbB3O0YC3tMpTSBk zxS-&^NigM!OO^VY)vMC&W4$`pC|Uj9ZK>tk3PdkGVu9)K^p`C*==Ws%j~eXY-skd@ z#@8HnC8cfkYF*f7M@Q!KC59|uqJ)jo?7VJC){;>dpU zF1pj@ltn$0=~s3dhTqQ2DCnoRFw~%!V>TXN{K0NUo_8Qe^b_C4W~px=tMA-}!O>(7 zrv^&DydbYmr8o-_%$JmL;3(S7?BT30$M1K!jKJJuD~rqm&l=Q2u*NjRK)$6Kf7mad z`^)F;iL5wVz8=rT$Zf$Keu5lsVH~96?Q^%Uw|nzOQ22Eu--MiA1`=77I zT3sd0Ofi;&)2|mopyexe;Q4>AQ zYHb5DnqO8+mDDpm5!BWijDJ4_blj`d2NTmh{kv<_t@%CT%V@*HqeVDj0-!w=>O>-m zQK)2Kas~PUZBFeD*1fw*(t#AXy;>i`_1meHTXnza^=(y(efO?4OkS)R`x)=7SM0Bk z3>@z0O=kpesDBor<=5?OwE8&z281t#Jw<&5KOGQpxm*;KU5h}mHdu6|#lE^-O*2xRoroS5BY9(~wC|@a7?R-`pGxi-z&yf)z`|F)AGRb1@IX7aEGV7h zM+fZAfb>W%#R7}6&W;>dadpZu*S$v)GV11LXfX4<`>Td(xRHeQ-ocFyP z=AH>>(EhBQ)$GP7h$Agg6*JQECrz$GRPR$48=~lfi?HocY-K%4K}JSJxnb4C)maev zRClNak`nvV+41fyO4-m$ljU8N|A#0gfr1HPIJw%5Lws!Eq`udg?oU4bQb<}v(<|x$ zqac0p%e2qtWrB!u-L0>pSOLd~zZFjsKOI|Xk%l*-CoL|nW0k`O3MGfljkTyrIrwQ9 z5^W!x)rU*Y(Nvt#SRWD)-yyef{h;=}3!C5G1eSZ>)s3G5&dU<27B36wX1Is}GP1kO zr_E^fwFCcdG&dGc9+n#U)?QX*ETNDqMfs=TC8^6SC1W!L94T(?+3RWhwFEyH*a4SGG6JRIW-xlMh!)(I^? zxB-0Rc>Hj3LdjBr{CRz3q^!r))D^}sQF|J%B_Ml@=mo~_ql;ZfKdA5K_O+z#defbW z>I6;x9JuR+?e>;DK&c^_|o`zW4q51;jN?>vlP@Gu=G&_7C&!0OKe*H@D=l&< zF#|R_Jgpnc)ovECUd*SmKb@wUUxaaHNcoCka^aLJxII}MdZ)L6z(I6IZG&wq2b{HL z`;6@DM%QyB40;k0*lGco%w5ML8XsJqY&n4lo~?vz@XkD<)gDBt%>WL2C@Eil{C zx_Cb;!#I9#tw}+zhnGTXBE4>xBrAbpe0jiTNR{JDHOSCE`(-?RM0x1}l1Ns;3^FOH z1-EK_uHmBNCP8*Wlr0w6=hZM7>LTHH*ZT|fPE8$6 zl@W61U+7(h(vKaUokiZ;&sduH_x_e|Tw7hmz4rQ$W-m^RM-e5Us}%)-m&WE*Avr;+nELTH4VTfZ_nf?6y_WWd#BN_VJP3jo#_`fH@Er2=nZ^O zjosHH{Vv-}9jK&!lAUBefc5e}_{g8DMA;mz%?AA-_+r94V;VqOfzoP5AR0L1fC86`_xoz_Jc%Wz>yY)bikqHPYv4Uj<^n1#_xm*E zMR!)BP0?L_9S_Q%$II5>f8h&NCHwm8D2`X^ZjjKAWw`^Fy_U0h6?7(B$rVz(HN|39 zY8rda-(6`qzv*wq#LRG>9uEbLpYH3^EGH&8p6*;N)WR@pJ;akBWj;lA_BYn0^$%ZE z87hUE)w(iefG|9ZDa_$sPmdO3vB1@I>Ew!k7PA=l^I1IZ+>WFU%U7S+K@2`Tt~ST9 z1TzU`kNK+w2KQ9vdJSeEDeSd80DNcb_t;J@nP!b?2CjXi^)@bs+JK|5%7quhow%Cg ziQaT5FJM%7q0~rQdu-{l-GRpOzBq>IsqcXKppJ8TauQck+o;KV;hd4(>Hyvy9!X8z zj3-n~Gg66WSf7-<7a}^xpr`)OFH|zP*$6e!*JXR!rf-D3wp< z_@5_ofxIs^>m>*kttAd5AlgE571XdG)b$q9Q^Xhy%h?}cHFRz_CLs-_+jV_vpHjZj ze%)!M78`VYk#^Yy%JtbU>vr^X$<}+Q^Ai|bM;eSqZJT|vJ^Sb~J>2pMD}PbF0{UU9 z(!aXce=}Qd)r+Is2(5L7A##?;e}d%T8|`Rz{cc6F%`k>0TiTm8fJuM&dVgsncynx; z&hCVMd$@unGm3zTqXt`Ws>`SreUHuJb?>9ca#AY0IjQjQ-V-IBpgVDCJseLRmh_^g zrhajNv1U0?62bw693B?r+Jry^WfO?7+o}YWm*sYO!J(Nr7)|7Hvk2n|N%wmlJ8bm( zLMJ5LDsm2^kh|@bM`!c9Xt&<#Se!ewu0@Lyt)}(XxU1Uj{xy!|g31+L?RM$)VhECq zrDZq=F$qDBmrO*oun2#nUw1dH5>Vne)vM94RiV?2Gz4m^&CxdjtKKs+CmG`bJ4J|x z^dk=%B8a(6w@CU?zw_PgVutVsBoQmS-4*5xBT0cLu{{PoGadDGY3c9+b**NxGtKtvg3Ih)TVD$z*ZGmBz2q=>hW(+4Nh~|idI)`-VHb2*o^RmhEvsu5jx=ay zg3niL5zg2>_IUS`QGz6x; zy1oluqSj{dzqhB0S-z;In?GRJUB-4<&($|Gt5(V1L}7*aHS7&N$B|((s4QL)6b2_u zx;N6((nEaE36Jg@QKj(ftLiA_kS=60lIT9#Xs7O`7IAA8kiFwgla;lxeBTwE{wq7RCM-=xw|()(L7vK(NS@dl1EoVPeIh+3hdt{kSjy?i>VD% zDK9NUgS!QcuqHldid68LfxAde1STNCMV^2aL;;B~zG0CDf5a8!gR58)RO#rzG%I2> z3Ucy%|C373t6HK@UNEgd9Zj$}uq})OB?d6iIxa7G0etDOIy{#^WH7LwGHWwRq_9W6 zTml2owXnCaBiP__k$ow7K!Umt$2mF%T;eB=yGQ~8NC50hWuu8xp=UQpbi(DoFCdqC; zR83P~;yWk^m&pKj8+QFd@O$q(0Q}wP44Q{tzY=RG^^X1`BFbd^@kGrKr<#fp<`A=) zFW$4Ikyv`wW^8JqImKnG{3DXaJfyE6bhOudBa zP2?ctkh+cjD;d`~#6ZKCvac7iZeqWBcXM(j54T2aIX7$XmTAi`5)SUC_9j49C z_nRQ8X1~8Pj*sklB}RcX+6zB7i2)(}vB+7DuZlI}g#RlB zgC0Y}VWMhPHPxfcll=%2YK#5r4+uLaxg`BzRS;#K>?>zvvCeC)FZnTIz_PMwue0#@ zVGK4bNgP$?pmB*s(2fIdgg-eW3|EUdsADF$1qX!dr^3bDa9!n8C9LDI9vbqvD#&<$e zAhCZ;pBUMSLRY1m5S}pVv)6)e^5eHR^xO?82-QEA0B%+cDTfL^ih={E#f|>LU^x5a zK^*=O1Q;t-+EgmDlxPYd{bZo|AfmmmC*~!C0gYuvPaSUehZMlkkk{Jyge$0(L)>1i z=ul0_Nu&tMVhM}Jq&5v7HE>G0>-aaJs0oIu3${Rot+HopdskMz<6|YAunZ@7X0k+{ zvo(B`$)=3xnH0s?qsv~7*L3mE&aE%2upFuDG*eKGpfZ?QO!o9PmEhcVf;TBx;aGMb z4P&*kEBfn~S|49LDf%iIt8w&THVv1qf8Ak~9Zu2+8zFxMNDDoX3N413qb!UJ6CNPd zdPBS9_rL=#UtM9)&5)*x`Hz&BPckr`GT48@d@cM42|vM^xjM&187;(%BI2MH4wR*3 zFNN~>X>z+j9-&G;VLzEZusw_hS}v$6S_f0 zs0(5Vua2WUj;Z`(IGG0dHbM$uQJ@pKCrd@C7IFk;bn_>^)BRuy0>BVQMfj86jvA}k ziH1WmNQjNO6-r--0T#))6%8eXLv6(Q#|DTnFan_pp}310slxLn;l7#>!WCGmkaP8I zv(aU=+B~SmxHnb?3bf_|wFg%gZv&E79^iXWF%3TNO(+-mrKxh5A4r7( zidUnUs>JagB{InXOA#68|12y;h0XK7@!=gQagb{yeYX77^8vnF=)fb!aF9vx%laY4 z_uB(V*up+uym8)@y#VyrIzP;BC}cwaPkWRh4DiV-Oj!>Fz}R7SLK3?X252`6awQ0i z-mM6904-SMAZD}Jjx?KI8J%=GSCJdN@N#(Q9o6V`udw|VjFriCQdvD*FL#O4Zs`#i z=DlLNBX{CvX(0%$T(|(`l10Z-M`Cw@Werl)TMZPOt!m+c?B-F=%1o&X??H4CNt{1MzQa zR+EcCY=W$V0d=q_Sbf5z2I1AFtkoFAP=N-c@_Q(HW6Nk8iqL*2$H+Z8zw@+(JmjA) zMhvB_RpbgLds)q5r}e<22E%?z?Ee9LXvUjqWSR9blGcv2J2WnLEo@~pJ#AtRND>5u zjcC`bM*kk0K=p$s71ATQriO$2aOZ*;?Cdi8;(ZBEfcqa3LJyf(&)#FOdkSO;R}Plz|Zw4|U{MXa(&lQW-j5L}jQ^yjMb1+tL21#z6b4{8?Yc1|w(eW+MBL z>#3iKD@{DD{s$zO9rZtxO>KEc`|ly`w?nIK91{x&9!Q0 z@@eVdDfnsdAu!_LJpa`EZvY%41_X*j(`}DsFJv%}D&5~*^`8)K1ijWWOvu0(XsyG7 z1(f%@Td5-V4@&qgWkvL z4k0R4mw`)MWC)k2|4?Pz_(&t0E*aRM>g5EP7sAD>JkPH|lCB9OYEx_=mPa}mg8u(~ z^?&FS9(*XdkO{;6>Hq>It57T#tkHeyljk&UNR_1YI#RO#<`?`Yi@zg`3cQc?7PZ!& zvP5(yAis5pd;Rxc{U>~T|IuDl_n$*j#Jjh!{{~6h9cEnMKxZkP1~>+q(%ZpPp+vunf%u}<{?gzUg8!m%bySE*3-|tKSFXvfEI=R( z|3A;l|Ih(YVEABRsD?Kl%G!UoWLoZ20sLrR6+}kIWpQs{aGLI<5Lom^2KzJ*o$JDB zvUGrS2Baxc?El~UP7wFkB|gX_U%AmmweVmVuf^d`fZd=j`bj+UF4BY0_Ij`!eE%7S& zF-Y*miignJ%EPH4>F$pFQ*iFjYyaT>tOa;^o)Ronfl`%vMdd-y*UoXSLmgNb@gXrI zrIFg`LG~EDZ2jl~Bj&u9Q|SX#L32q(VvsGf%BI{!UaJJs)6ycXH}Fo(lZyX$E>_qn z)v(nPJnya~a^fHLm<`pBJP1`&3SxLs@*J{r@>uE!ZViThWB7xuxHiJ=x}ICE;Ku z9BAzL!z8>#2Q5nTS8QfzG)vmT*z8!oqYSalpOk_B!`3@ER@Q9m-bp$gcG$6Pvt!$K z(y?u)gN|+6wr$(Sif!kv{qA$l{r0)vACS2+XH|`=8e=@a2L^_Mw3R9=$&td<*g-Oc z+NkFU+*cHB#Ub-0&Y{eovsI8xB5_6=6@cB~4=n!dp_w@5t}1A1OCYEf9td&xi!5>Lg;T`iX`~^ep%7U1nu4Ds znirA`?peSb7Uxf(E1)%-m}i9;3-o48yYjPy5G>#1<7#kX-%H{-u|w!LM=3We|&Qbl{q)D0-OsGyRK6!qE@8jg&~QxV6mz zz7){+T}q7V?mLVb8QfvU-JOa944WI$^X^JJjEl=A@ zU~k6R31Eh+E5-Gd@e~3)5=`t!CH<9SF`k3a0#gzs&9Tu%QI>O1h|~1kbqfL&DN+4} zI74@!VI|R|2ZJcleWbvzI1|cfjHKgCuv=o$yf$t(Xe$63j$kbZqjMyq0EuE8AtRrl zUGvbM#P2A6A7VpDk>#UY{^$c8L@xU9ap&l}ef|Q)^XqGM+gm6;Nc}gxU<~(ES75jn ztlEUstnOlUw&2wvAHjaGJtm<373_(&FW*d%+?*mN-QLR@q(@Ds)yq|=^RJ?P%&L&W zDw~kj?=G(>LzMrA@bPaD4gxwTo3=?*?2B*A1iQhRaD&^xClN-3DpsRpxwl#VUa(fg zuq<{57Pci^m0e_lfG(Q>Ufem3M(-vl<(n7#r7B@jr zhrcTxF&&{ur3qWHab3Pjmpp~)N3E_C!Z82&6aR{kIZ)tcjk3B3{y@FN>iX!Dj{BTo zCxK+2v1BA-l|rciEfey8GHZarYZuB+EqEh6FB4|~jaGi_H}rBz0x0?_^nb=U;BihJ zyrujbzJ!aHG_}Zpnga;vQ~nqfP9G~3F@oU#hQa`&J2K+VCjvLVgU<*(l{(ucJ!*sp zNyZ${Ur=l~K?wLAQ&F1{f7C4GR}fX6Ev}*Q

D=SvM*Uf^(LQ|(!Y76&G+nqRJUOh~_ z*(LVp99_DT>-wSjETKESg*k5R#MlauH!iX&cTHGnT&HP7h|uSRkbqM*yp2TsJlsK6XK8s;fS7z zWcj>zF|p63TXAHs*B%k;pG~$WUnFOS-Ns(J?J96kL3fTRy77h-PF7=y9#31thqJFK z*xxT8;M={CkmINuvbSdGZT|D=cf1XCz42;tG{#JJw$Q9HE0DsqmDT9Uaf=B;OH3I z6k{|;igSK(LEAxWq~3rzrcSEUm&EiydWe;3JYL?H@&5b7qRZfOqXMyF1{v0{ZqfTw7-kb;aQQ!?3-hID%Ize zth>u_-Y+%8f0o3KgcyhpsVK_mDCK(76-;!<0LI|&-#;aHAR)4#+ng{n(%FTgaX3Uj z5f15*!l|F_Z*G7_PIgWe4(BV-eW3=iXx@|vx3ukQ4gzMG^{X!LFFQrPP zG8*WGMq3i|tI)2ozCIvefJ>SQRV^Gus)zEsXV^#{NjK}*^io|6MU!e}S6YGxBdq;&322@(#&d=CZD>RqEn|a2llBG=wb})Xl=|o`kfWZXz~Lay~&Gdzv?0? z!t9yrAE<2$;H^{PG-;~`DV+}Dxh-W6hN1r*1-Wyfh2)*uRbjeXI3~7A<1IL5s(T7PEb;^xAFq|9r#7Vkr@WLds_0 z{{gN;ne?1eC}@j=?699Lqea$nhnAPXBsuEepcvN>`=iP!91f6^Xz)GJFJHCXevo`> zSS|yPrKCIPN2z}tHoIVby(1zvCgy6sr`m{?me!rRQR(toyVGS0P$CI5eg|dbv_ii{ zYl{7>^HtdswH2D$CEWuL12)8kC8eaGIGsq!+Eo2CiAA;5HP$TXx?3vPx8X#Z1nd@O z^LTdYcCP)VD$khv5sydp*R7E{m+~76&lr#?Ll)(0`G~HkRk{e&9uE@-n7>nQPfD|} zG;CLDx!#}5d+rxSI$JEuO2`21lJ;I;1@5}uB+D7$rV>#lB-Yp0b$+xRobG{r*oA?C zd1!aG@euUjTVsA;*B!km(*J3wtp$pTK?iFii@lG*JBSGaRG6q>tG-_-pvC|2OUUC# z*enr5;U!uYk84mZgS{CgeuQMRcZIQYmYkf`f2|S%+}g$8yP*Qo$NW5x!wE)o$}FFj zzfPZkB6VhFHRGT!5^^m#CaKYh#^zbGMOEn1)g{fw`b@MJ!$OF^`e}^N)KXNVo3muZ z=v6I9wUwuCB0i_8v#SsW5}2*4*KdBWtR%`T%IFqiuF!z_*^R`@yrhTiRt-paWU>Q zsaci5RP3f&3<5$wzJuz4|8qtFwkYsdD|Xn(Wt;rG2DYC^helQ&pHL>N0RSq%tqYET zL0_X?6%MN|r<|OKmG$BlU`dbQT_m%<q zbtCF0dtM0C*Ine&^Io0rSy>te=(uBqtgO{7gZ|}h2`UiHADx&;_+X@DWgQ$G42smb zu9A>gJae9!YFWIdx%c?SHp&lerD_7_-ohR;T;*MdgF|Dsva-TbqIVU&?VBr&6jY0J z9_VaibFK#3o63EngQd=I{U+PFSVK-t%}o4LqlYc-gnfqtTT5$(MKrh<>X8ZT_hEO{ zii`$Apqztbn1HRFiwi`@4v4-Lg})rsS#8_#&hKaiEVC$X9KsOL_zi8`txLCiJ7VBO z2mcL9Np=_;_$MwAaCkZvoL+$0o_j6m>gZTlAwgb+=A}x?#H`@Elewp`2l~O{OP573 z;b#yD@gVq(*~+S-_CeenI|)kuh5>$P{twBZAb+5kKM2n@5HO_E{+I)H0tZnYhMJj) zgUx!5isMl7*VY*d#To;=B$pN_OpPm)dV9DKy0ujOZ2G-xpi@Oh@+@khsTqDKqmVBj z9)-)dT4BEL02mWEe}4&YZQC%BNzdWT-5`Iz)+uW|sIi6_p#)2L}g;P$l<%{;V0? z61Fn|MMEN~eO4TgyJ^=~YYY3^nFr@)QWr1VgI6kog>yl{r;nAYt#5g-2AkzL*Tb5X zU0E3(#2nT-+mHQcK(y!4U4}1ehtTDHxOz7o0J9c&4l`!(w)GPf%}Z0^(q$)yUXzp z{YIRMu60ZYW|~^>&M-BiI14X#C$mn6CYPlEU(VQ!6rWcIt72n;Z2TXV`!+iL_)~^&bnSt!)Ipf zI&2vKz*M@`8dVWpL7mHH9DUHyfmWL-dy~sWzlS!?;enK^sg?v@5K0P^czdycN9+o~? z$=$5(uB=dPjLX)G)X4S@C9Lk&gENBb20SS2r?FZeTpm8|zkdhvP&PX~w^wemyROec zepmxt&fbQOpOR>_urZMi&$J>pQjWEn30_VrY|-d700+N+BJMyED}aMXAkgWw-S#%5 zMq)1p$Ike^xoj}g{{YeeSRpPMT68}+G3pGpHlz7IUSE>=CccbA^Yfi6(?DmgSC90_ z$w`4mCe&nPF8hbLyj!|@UaYRK74D3)NQgat&{$|R+G~|kp7{9qC}>)U+a9KK8~8qa z_V2%Nr10@=Jsguio}eP{K$hDcd=Y#N`+%)ief>5DB`^aua^|~vdpdZ_{^~?G#5_j7e5p>Vavn#GemD-)W)Xa^*ZfA@a0rHIO7rw98$3VHI_ZL?W zP0314P?x4Ad;6Pg>Fmt3xZBYP`kJkkCYf^keR7qmbCuC?%iX-eV%hI|NZq_9w_7}( zot@Mwm3>*?@$P#Af`g+mn%zcEH!>>DdI=%nactHKkW?b-zJ!1KV*V&0uL;u=kmsN5 zZNY)>?_T?H@W9zQ`@2Uv*cC8#%`?-J&Q|>|APCm$*LpsqOv^@#{oQr!KCKpu5VLU6 z^+dbNNeKMu$gH7G`+WwBIni-E`8OcTVWZR$-Pe~-8U)VkHBl3^%lUNSrcAxqF_{f$ z5}V0&Ra`Joa3ArbHQy5a$o;jro?QB)sHyv@;bi-7a1a5<{W+iAb$RP``&@p$ZRh8! zC0!LDt=X(dpURne(B8rv%KHKho83M@LH?8^;kT_a*Dshd7a;LQB2e$CpX>N zMftiMu*>IkcQV`J;G$aPL_kQL?oE^tpVs&syc55?$HoWXtBo2jSDMCYMTGO&SzM95 z!mqR-wf1c%T-(rsrNeDc1>;5n);0f087m_37t35dDE%?r*wh9pLRFh>DuM2@``*z+ z^IF;6s%H6E&n%44=*G|2`re*Rz%@U4%hv@ItgaPGB}4LZou(E;o^RH=tVm5aSS*4C zn2%g-)w>=`(MzXu`n(mX0B4BzYfx;;gVjRGZUn;cW|)Nf^}HIbCQCobLL|06MlwGh z=sL_&g?4#-w=wDSx(RCwWqNNTdFUgp7pd zFo9vlNUMa$t+o&Exo$eEmMMO6l z+eq)9y7x)l$@j-wwL))AZcE}0@6Vw?{zT`;($`X@?!oRQ1eZQ)=Srz6zi6PMD9GZE zo%Z(jM(gz=q2Na#(Z|u*nO3cen+iJQ8zg*CQ2ieqyr<19Bo&4cpyR8fI)%-w{tg1) zr`OJoz89RhvH5CUt7+oeHP9KL*`OKNvK7#Ui;nI_grWk5rHjM40uklk_^@GXQfzt( z1Qfh1ChG|%oqesIV%6VO0E(J(Be$c%ueMrG#PDT5Z^KiA5%5#F zd|xK9*>mq~MB_+Fodyjk+w_#*Y&!q$7>-CN7165Kh*vHJ{tZ&8-nL%7O$6#jJtx!n zV&4XHa$YAr==5q&fxE?Kt0g<8_8eRC)ZaG2nn7gbBy&5Grw!(0YOXc00^^1fbsH$O zs0EAhpnO3^K8kSX9JaDtU){td-FOx%O76GDtwi()t3Q=a?Q;+DkZSIxi0e+5X2lo3 zb}5qT;&H8uE<)drH`8o+HWAa?&)z&}_>xnI-*C^@3plNk#LH{jvaG$j^#JDdETWq9 z2yYMM2!TUIFP7m%9>aL#}6T=vX87`&oe?B)7d* zcGnA80_%Dc8D{4C)VaUhhV&|B3?h+Yft+q5Eat0etAuD5AFpS&aF|SpuRVVPTsPhZ z?lH3)&GWNR*f*U%3QFtIX?5pXm4Y9z*%7d2*r}-ExfG>AKy< z8d3uw5q5B|3nY~AaXs^;pDdhhxOLz-0pn`#p8d{10LkEXEO9smnFa&WI3K?ZNxX#L zG|!z|INBss*X`|{)77y%0|z-HrOJi~S_0q4gtrg`wNfw~_WM0Eg73qks~qo5NQu8j zFTxf(0H?&!vjZ~=67Bo&mAJW#m8owYh&@x;;)ip}=@1nBuPcOCq` zc>B4JuTN6!)7b`|jl~x=Td;1^84JH{7|qjRy&k36xVOXixgxYsrDcQH&nhW9?tLE% zso87+jepgqGVk_BCp6Mm(_-Yfyy|%;-xdQkA~N#h{;oR9{cY~Hw&fAwp|y!2MrUpyq*D1G%AJ$9!}=;-Uy&k$3%1rHA4a8X8vyNy5)|2F&BYZ zzf(|L*!h_qOyBLLyiAwbY_kqi{3FW2F_I#^<0S+Zc8C?``X&@!75*>4Cc&e3k(hk` zM)OKjCw+*)my4N;on-)@2BXE{;1||l8G^EXAUNc&vgex7t=$4AF$2|RGKEvh+xB)h*iAKqVT}MiEbMIxfsi>Q8gSBs9?|Uv5UVhI137lfKt}Y-V14)Du(Ib4vYX za)2i>#gm%U^kty!TRzK;Mz@ii@ay)Hlhlrpb0B+D+(~*7R&j|sEi2Xv^Z4>xyPr7E zs_g|GQx~i0etKd2lt?{2RPSa7S`w&~i3VO5`D;~KZ&F2>LvOH;p*UiI0~hljW+YHe zhZA3`%{J@4U|Z+2rBs1vYv4(2qb~SU61bXAT<3g8nvdgR)SApsP9{VI{*HdI)JM=p z`0innxdAbAw3;1xCK+p~e&)=MM<0XbOSD?9Knzg)VafvtiGCWI?XWt3UmXdsLtiQO zC~a(Z{H!O|$bCv*$Vi!l`vEUyCA=l}l%it#OJIfDB2^MFeAbi1g(`X4aqu}lgr^od^j`2{K6cPnlt+BWCsf zexZR13m7%_s`ml4IDZ|aGo7r+_dMna#RBxfnI?MSTG?n zvPPcnqd@3v!T5F%D4UKo+xe>XV0@n+x7rR%h#WYxR)Hh0&1;K&t1~}HNp?fC5)$$} zh>cTPc6Y$rUC@cf3cI=ixAsMk~j>VUSF`^dU*7_UYy?^`w?)|(J(O? zjjn@$`QkmaLqP;g?%$^im=ln??T_0?LW_L`R+bu3QXJc3wMl2{Z+^uE1tP*_9FOfPRQvl|k~Y)b{-DW0ej;xp^@`->{InwhlepRixMS5E$?Gmx)wXlK@l3TJ+f-zRF2tRAL6NSr8(UwYOjv+ z!0$B@0g`9?h3_oh&oO`6hLss&6{B;tz(hlUoyqhF4)gM@;A@nV*%4YeKjm zO-WF*t3;xoyv1^;dYs3>^>Neixsb!%nFO;sA7D%t1yL}74=4Q;pwbR z4USH$ms>tEnf8YyNZj8Qs#+VyyzL3wS&+T7@F~2K;)m0d)`6h3N*21Qp zb*Nt;WzdV`PQ2?U_P1Ti`XP9)KXlq%j7l+Zx#&pqtr=Aeo2)j|GSX&SrNnS(S(wkv zpKE%hy$3pPj$UkDPD#YNqv`P(70{y`@wUgMtnwWci&vgOL4hWwY3z%r@{|(_gory} zD&=V5lv2rbSHAk&Umf>j1*1xjm#arogSQX3EOsEa>M^n96|_a13ZN~^DX&sGm0HDY z3JYjy71+bt!?Y2W3uP+fw%uRGdjk@rBblsnv_M3kvqodjp^w-jQ_>Xww z!GYLUW1|#+sJ=eo`QA*SBRM9)8t`Nq@Aj=yhSFHi_&{aS^ef=DT!O%_`7fMI8q2#~ z->|tkCXm!N%wSWPa$M59?Vg=FIuZ4^e}(dhecLN|jL%>|{+Q|4*f48e&~9|7V|p}c zHK$u(qo}#Ys&<(L;h#_5A52LCz3%<{i3t_DP{u|^j3r`*!#+;RC@zyRrg#cvYi^zZ zBftO?mJ;>z<2Ku_q)POU7t6sZVpw>{WkV^sa+0=8MZCy8`x4Hhvq4?QL@@8ai%_eH zaf|sfGOWi3cJEDYrt&#@G2L?89*Nmn9aqVYd;XP1%&KGz-=hxM<{cvM>&GM$Torla z>IFT6UfhdKjN%KF0z#no)jqvfOZG6C1j4=_^{Fh~Tv z_uF!OpgC>kZvWpJkHAGP3kj#?ahr~tHHe2ZE%@;A4m{dCZX2L@^*2bdu8v93OEX_} zCW(5h11l_d&bHgryhJ=-k{IhZr8Cu!{5AckjSaqJ>wQeQ=9JLeSp_7iq$&(<@kvpw z4!6+$S{2Tjh80;sXFtKW2ixH8-YLY8Sq;5b0~KW>k|cWd7O3P>y=~t2-S-+ekSMsf z; z4+RUJoMElTz5XKJZ)Lp0Ly_r4vadIb$=M1DNj@R4oY~Q&2H3s6%asT)+&1LwDX4cb z@Mglo!sShHdHH#3jXdaFluvWU;~4mc3n9fFK4iB}!g#)oqLEl|XR2=}N86VzA0`K@ zpJyMgU+i}L_>}oo^rwF=J+d4q2O~?BiXZEOu+v#=BF=)iwV13n8bV=vZP0)pXR$%T zkWDDq_gsChXfhqsKfgIRT~Y-RkkQCvR8Us~??41=wZBnm8Qi>;I#Vyk{s{5gdPPm| zYo@_msI-C3zH$N);0K}>Lp?}42pF z>V8aWTDc5GcKK_5y31^{iEG^<2FABk(T!qVYAXE+U4WO??t)cK$LS{V;dF^q{LAj^ zv;Vd)C=$+HAix$)kGf0I?HP!Jf<$O56bimOTP*J{V#?%l)@!mNgkS0Mj>s%y=fzR} z1VZ}79d;7{sYzkWXa`Y{&pRt`_A6!s453f36R2LNqr;7i8)jCvcR(bbS=7cMr@Ex@ zON%HA2ud_LbRiaxwZP;I!BF^8v1t|7Qm2W!xCv-|zZ4YM;%kYTSUVGMN}V~N`^}7D zo~h2=Y=f!eyATJYOYPYoM-=+-+=>qkvADSvYtONgB5z%tx%)xBc2P*m<-#<+Z>%K- z1w)LakrG=LF=oD;=^o*kVcoREgD|{465&hHlV^_y6Vz)%vKpOV!H`Y9%_=Iym>e zsH9f)Xdn8jM&I5^`W|SSVgGB;4R3XP$)?y>wD~p>eK@-19F5JZSgOtJhAEg>nxIH=BgbRZiCA_i3gpp5=ng&XFx&uU8pkGp{mh+gL*AHpBVQ zaN{1<)BETAQL6b%Pm8HTog?}O^LJP^`fPF=)UuX3-^tWLWzOS%v6V$0?fd@i24{9= z66mNlCzAP+s?N_Oyv_D1%}$q(BAramEU|3l`b~?v0@kBCF~7AwR^#S=@}cNAyFPLs zpHHBpz>LZ9o0=m*i=%{KAN1ANRqf5R)0O9qA8#hR)rJENB_JN*YuxjvBI9Adjq}g0 z)IYZT$ZVQcuDsd!XVP%wA@mA`k}Vr?EV%naTT>xp_0yeBU*4{8$Jmr6# z7|$o{@t;pamd_$A!iiMD%nWoU@~EY@00*&opc{nsqCP8iV*3x4n&5AOjulK)WH`CK z;C+k75*(6e+HC2rzWb;O!7hGDJsR+qG73gHUx{%0^tS4jzb~+ePX~3j8F>FzgVnN3 z>Z;>uyGd@5w!5=ihSime9u5S(;7U#nR2;ClB;Q#q|03i5MZm;gg3cGfC`09Wr}p%F{8 zX}xMvcGOB?GI_5|Ss&pHco_szllgvRb-dq>(`ZA~LRhSCBuK;;laiB0c3CJd!?v+o zZYA)-FspbtTXT6nYUALs^+ko3&wjqc!=llM-pR1*t~YJE)4HSoOOXqPqKsUaYo!K=4Q-9zXgqK=G%(M9@?ZWEuheXA zy^lkxu>CyC{*DfZ-9v`hu`=XYfr`IgVLo3{BA!q)7dpLvONrV>Pv7-y06ZuQ_*HOF zxdA|_BMvMcPZv#3ot8{0%;me`ufcv{-_*Lb*le!3)hB?>oGwJ{U39H^aa0Wr5<`%j zZ~eqXWwclr2^kq9BoqMV#fLdU!^?+$;hl|PEr*(KbzmxGiNkh_K9ng#7ky(qD;3Fa z!30us)eW9!e5U#O@r=v9^@zgKVh>MduqI1n0YT!g)39yH5hMes*p;L8p!)Omy3dRh=U~{^5ztE)9t*iJ7@;+Xu8w{z! zC}0wsMFMdTe83chw~_M$bc)WZgp#29V~ITM&>i&)pLb4G4q!mxpX@?Rs9{TtMB!cl zrOva>YRSN~9UMOIF))Pg^P;+2ICy!zN2*2V`1I+E8fR~9t~c?BiROuKRb6mI(DVk| z0E+|0$vRUENN`9O*g{495RW0{3Ll^CL-!|};Yc*6LPItb{i6Iz+$@$q+c zx`S`+XpZC@at&TRJ`c}sM*=<}^T!lE<{M+WGkJ+#L|xz!Wl zYAG)kc2ecWPA9_H2KNd%CtWkX{yTP3)DvOuL&`sXl3ZM)IXzH*#ubhW3HiT}AVHrr zJD>1Aw-)2?Ew-D2CR%8T^dT%?ZC*6|MR6ZW6D~sh;f!)y1@F&%2W$W!JC{9PC=Cc) z#S1W3v+9zTKiWfK<)Z^HfEO1xn{oj=hB{>ihg6G6_pePG5pOhX=`YZ9FT|wUbme>M9)+#pk4Vq_cU7lFEK#%3o!nX~^4yvQPT<#)I&~ zuXNfV+D>wVjXh|pXggA?Pk^4)UY1@T1%SfN!MNh4Mt7b-d6+{ zwa?=4wm}_T^fVGo4=;a8@(`fj`f#m-P>JU*^MGcrA5FV*rb6x}9=sNp(k{)7uX99F ziHf39Q8UpCcVADGqjSkf%om{sxB>P1orRa|tf``#pz?#2nL%xmlP4{M@pN)AYQ%Y3 zTi$zi%8+l0@7}kW#kgloQN9nPErO{VnAG+Y$Ppyy5n8tBxm)9$oV6|@Q_i>IV!_9o zHg6-#7^Fu|BUlST?G{e~pB2)~E4Z>mfXNPwOXh)X$7o$)4KeYgi_^xoEF={sTC|Q6 z>O;F=*^&vE(t%>cz=Xmhm`l(ViW~<7g40vT1Br_0hV)SF0b1frr{rPq9K3{O+W?nb*t#$* zK^_$S)?+*2lv9Xc^^d>)t;sADnjmr!l0*;SaNrUKDjbWt_91xSzlr>)kPz>nG)q-j zsRIJe;qiHCd}58rpOi3-bRuXZtrwuQS{Syr%)>t=JPz5aLw|TQZg~pCcsodT>1QuE3332i77jvoIUE8TdEK-vd2KBAV6Vizh`)F^q+fPuJ|0bK7_N>#n*xH??oT1772t@H+}P z_xxJy&4kpP$1UvKw`>y4VxAWJ{UW~4l(?+esH36c-^PH@^eh-3+OZXG0XZhrwEE1Q zHpB%}DEQaQ;$Idd9C^WK;yP6OifR+*J(w&#fzjX${V@U@=ioRUtW!AtsHW53BvM{! zzN19V6uQ!hEJLBALb7>&Z4D&jO>2G>%Y8JphC<2}ku24dax=Y6L-+1?L1QxA8qFou zRA}q47cOP0vL%nwnm*;YWNZ-KvaZVvfy4c)%Ja`j!i6a2N{LC&p03hvPuRvlZLq2Ln_FA}AHD&nytwG)SNKSmt4c z%SlU^3rpBwmx@$)j5RBf%;7AM*$&`+);WEXJHT1n1EBAXIA8i{m=P{^G;Eyz$R^Y2 zv%x(3iK$a!ry;D#Or5aYo7)jpH*!aE3t}}yp6JYEI?aY~K+=Gr@XvSr4NMSb$UucC z33o>ds^JuiSAl$pXix~wNY8PmTL4n!Rp0Zx-yTcpao^tB-5-*C6WBlVKZtZLoL@Hc zSh|%%=bR!LGL{*B7(c%T{lGcI)+7JOZe8VSK5XmaP*Ly2aDuHqUvF{$9bDC=vZ$Jl zdSLg`j5>hh%3Pt5dMW*r?Y}<}Fv=lVfk@-JqnD zjE#u+XO;ac3Hncg&`)3|LewubCjx!cCe@`_+-#DAvirCoQ11KYoNHuFlsYzO_;m)|M~7dD$Y~A#HRt~It^Vsd{HcTljsk<(NP6PggAf;|W?h;4CdE+>`^lm; z(%Qs7l6mCqW3;s@vs)N?_^FoBuE>+vk^g@l^PQjn9aF9vB8q`Ewz`%m-d4GkX?%<| zPH^W`J-sKvA~wR|e}?IQULmIgv8T57N|IbRhSyM~D@(3xf{9L0WZkSXBHXr)`M>|i ze=QT>z4{x{%!k#RgY#qqI)+J?S9?UR92%&=;)j(vQp09`h0YntSXT1K?dnURaPmq? ztd~@ANH&c@zzMfR?gfsg#^$q)Kzl(ZU0w>0#OizyhK9H@p$i(l3L%UXaTx(I>|XL; zxWO3>|HH(bG6R$WW(kq{;rTwnUn1;X$8kYMt{x&PfkcMi#J2D%iz9wRqm>b;e7})f zeT-L?-%Cnp>5HdRd?EeyP?z2I_m=u&6rin3N}KDo$a`M0mjfWo5qz(Qaz2#Tt5f8g z(j%wUYvJUmh;ZtK8WE|9;r$HEH`GC_LR8~Nn6)dUk%QJRMA4+fU7n>@`=I|ttrnpa zK&`&94Q&0VC@s!b%TakGF9aIe@}y#K)0!nW%!{DZlT&)OArixeQVmS)6;cW7n+u~F z840}4)#PGuO3id2E2~8KyOEWeJ-TVCLlqwnq3hJeoXb|1gvlQuH|K(*q7{@8_^j%E zAU78bpeFH<4Nl!GjQgBog;{%HlG9YjB`J5kATX9hH7*L7&bG6IN5ueO-A%Ouqg|Vt z)vBtixGeZ9C>XM9i$FFrf3^Yx`0P$A}S7(yN1_7W6O z${~b=cq$(tB0CJVmIu78*VQxCg9SKHXA8(D7%KR2agb)#Z!(WLh7Qm>I7Tgy_D7Dq z6;~S~1?#p{f&Mb$^&luq0ZB-)Oi0RVecEBf$1f+QOsq>GOEvo6Q~FQ5Xb%VMxMZ@BnUs;#Ssap*CguMt{jKZG`c> zE*5DQmEe1jAyuqReAE()MTy)z;{G7`m@50)Q}qhL^lR0wy?x5!vQly3ch z_n`ld2js&1qH!5jvo}9aQzVNw^3SdC`Sfi0wvo?JvuBE!wSY-8h8~3IVJud~shDQ= zez7Di@X-4G`>=(bSOEIyX%Mn@zr2^9R0VR2C~b-t1LS|R0K#pO@x?QW95j=+hRDE2- zyBC?|+Jza~@5FC})RE#~^AMXigj&K~2cr^4<$b#pjLYJQ`z?JaF}eEx+!_A8&;I)z zB{4zU3il{9x~DF(J3DbXILhRvq{+{g^A?lLN$0BR07RL*r{85*;3O{!b&OQd@rT4Rn{)bn(Js!qWmKuh4mgh; zTxo(K%~)wYZhKtZh5OK73=UNMB_b@9{eNSr{6BN99v3uO>A*>9lUuGG)~J{o%z~6H zw~8WYbaGTxD1E7pM08YJ0!nCnb#On~S!0XWBrXdMNeJt|cZ7dM$$zS32;g>}_kRXw zUajc;t}iki3dToR4W1A(@Byb82eIjy0DzLHXjXx_=*EBj#eZ)p6{0yYH!<~C=;haI z=yOxiWU^4Qv!rq*rv>0+eP_RG#53|T?hhvNgI6dN(kb#qI7^^AByD|tzd|gYMb3Gr zLEF>QcM*k1c};>=@bq(s)s%GAsoGQqTb= z#yC2R@f*xEIF?ba7+(^JnHUr+74I*kdf2px8-=_$J(8P6=N6i{@rptMh%`&HYVd zJnS}1zDJT+%tTV~uxqf?(l-+CQ`@Y+$sPKK@qdoRPPek^Octm1U_6| zCkhst`<2>)l`<9jHZwPAX%>9xxG8T!op+$K;DsOoS-WO-4Sxah?oUZoBT)NP7|>#z zNP3y&kWjm&y*y%Aa{Nr^csXHT+ipZwt|)ymwNPV0ov!)Qg%uL5sp8Acul{eJ%f6@h zsL9i+aCAI}%m4XpdkEy$ph|oyEE$Y|AZlLTEubdI+QY+x|9200wpW*azo<6x$vyhq zLvj4s{(cu2e)Dkri7F1#3`ENyG6~FZMMzYV=`HfEyd7nGMxt!FT6N;l4QqKHBJh}| zkvtjO<$F|H$mb5(cne<M^pL)GITR5NRsb_6%xKKN zzOF~6vtdfDe|1zD!SrmvmAbioHjW~k>+E@~UZj@eKx^@Roa!S2!D1AM>hsQPoI2UVEXj=J| zTrU0IQs{y>67IbVm775G$R6`QehXoZmS5g?m9F{uc@7Sa@9*!bRhmM4w^zPsMkXf6 z+BJ6O!oq+PW}v{#SOF6VJ@o=s>4t}gr8FtY8W6X=zvjK8ySLgDa554W8t&HEx&epS zK!>6+Yczyug+6_@$0mM#Bv$g#2qu$$KEB@9@kTC7CF zrk2T8mMuXQURdStTseTUJ{>VOKE>9(S4ATk=1B?RSQfP+arx_ zDkds>moE3p&nls4G1{|Ke z&2qB{H2U8`%YC)XlQ7!$)-)nhr_Jv#hUZgB(ZJR2}GL<(0}*? zupC;c)u>%(w90YRAm}H=PM?8qn}Fog^0-b}ql?zZX*EfA!MDDi z$?)XU^`IgB=7Wah6&uQ8k@eSu7+fh+xpSH{>9?Y&OFuiB53?mPOYmBn_N{!QYN$pZ z2MIc82p^jDm**xgbk&y6^R109-L@Nlp$bPy1b?711}Rep>V**%Wo8f>L*T#X1Q*iG z^m5}@Rk>R8)P#m(k3gDJ8yUXz^ZoKRdEblar@v{IC-f80wfKB4g$w8BR|<>Mf_1L| zXd<;r97QOACXlqW=u~3Hpu8z9__a!>9hl=6a0SOiiuZDs|5;F{dj*+%_+l<%!a@C3o3PN}@olR5^ zffVva4_5l_Lz!l|Gn1Q!k`wGOA=V84F8Bpf6};ZA3>deSvOi6fgq)&8kx8ex)vGH^~H zq#^^;CMK(2tkU74r3G?vw{~pXNySb@6(<$jwrxA9I2BfG zt76->?X1`~&)V;^_xawlzd!3&R%&3nu-=H0K}{kL_e`M&0!sdA2d5!oYFqVYL; zTc5hZfXdD0g$1_nf~rMQhP!|r?2B#xooJ5j&b_HOU{sCtR{Rcj@5{9RXGV7NE70E9 z=jNap7Z>+k|NoK8}5TE7k3>&Iu;7XB0EqqpnheiF~3L$1(_ zsWHua*$_3)(U%&5R+pu~X|JxVy))-w_2$|0fkZGeV)7W#Iw!sJ!gmUc_%Y}D;{KOb zGZM~t7R@$tvoQ-wwh+>QLNQpMS=iaH1XTg1tq`;UZnl^g_vM+YN~^!;*LaHvit(kq zivvQpWPy!d4w*6~qF5OT|CSbOM*m_(TrZZ{6^EWlaoz54U44HGczmV zc4>YZOFIB{71O+4>k0C_TGe{G8?fcAYO>4_&|_Q`$(nq~Z2H_Su-=dNC%$}}sQ2MG zVBGMs(zG&YNKBKtq8TW+E+lFuDnn{|#|vvD!88QH2O*AUOAIGxY!)j&AwVE=kCeN zd*jNIn1Ca93nSX#GunVCS?K5OygE>|8KzhNxD5=4bT-a**UK2r_Bly2*Z+z6K+eY} zT!vDR-Y*`b*XSktbgAq2=6kEEzAZ98Ok!TC#a^aT1#|`O)MB^ZNo6j*dd0WP;kH%l z?&1SJ!k!p;J6alyi^Lu-vRW?eq3#RjQj6ekOOov4mtRq-S=MJx2vnEI!dp{#G; zXw@RiKm{13TS~>15>AuS+CpRRr^OD6M%bG6lv0#Pe)Pm;vRe;s$uU?#XvoR+_3q~+ zU%Im0Ai`b8jYX^aS4lnF^-e{dZwMX@JX#Q{)2zhey5~%9u2s7>zF0q!mze9%l`9U9 zfZ!_h&HaXN_HXvN;`7C4tJZv(slB&9w99Tjxo&0ef6LM?kes9)o@2@RbSom`ai2>M zf)>!ZANfNm_{pC$waH!Vou$QW`1RsyyLW0h`^}G7W?P4e+ruL4xtN{quA|6QxBlbW zyuO)0R*HBwPc5|H`k;x7_Rn3wwB654wF0HA;ms2h5&Y~I#x_S+j%E$4RQ z)W3#-xlY-l&05{bB{7_%%6-d7^@vih6!_robRKpd61dqwT#h|-z1s49^Lqvy4N50B zbCpo&YGa8>$Fo~6ecs>M1HpTn<;P4zVQ6tNF?#(jpn_Td)Jd>_=hDkyUsSlwn(6)Ed3Tkl6p$zdsadm*IB0`+Z7>-R%D3b-nN?hcH&oixq|#C^wY9y7cvW zDtr?{6Kg1z&3PFvv;-LD6^KRK%y!`Vg1!DExDQKZ=kT7&=?_DUiHQ+P9Sykhy}r55 z3rdCIFg?B3<7;QNRIp6_VLUX^+98GSyZ9GtGJ|YX0ZQ=*xC7soD$UnrGn!@Ijc-FA zGJtZC#b*1fo?jsM>d|E~STK8bwQTR>)m@scP8Y35O?WIG1~xXTCj;o(H^^Smz+5}J zpfDb{%lC(6$zKkiFTmKRx4ScYznwrQ05wvP!O-kPTD^Y`XUOo;pWYAPnX!L#)NVO{ zXgaRGRH}OhjN&|7OTt^|GSgwlAVucX_rLq7Ei4>oYA2`u?l2gky8U&12V`9t&zIYQ zT)j>gm-DC3UM2FJlCpj0g&ysk=fzYOySE%LBuu-(;>Xo=HyV0Eem-f}7XW*v%VYl< z*muAb-YW=vbyqJ{=?WP9%;9dduGVRMjTmQ2ikxcQE%0^I8W|yt+$|s_Yegp`C3Oh8 z;QYQXVcRQON;EFhW|8004cD1I1 zkmw7-&hdw<1^sx7_C2oUaz2b9-~!{3H^HZoy1gC{+tia~%Xl)+bsZ^U zBmUvdZzE-GudnP)sqUS@{A3Cl>z?0TEj(7e5oH??%lLVX%)U*+#eO%t-Q3{q`Kb*5 z1O@%3oPo~b1Tjn#*@WD3Q>~^bIBBIOCo|r5>hHh(?thjs3?Z-C*nLvTnqtR|vU8-( zutL={&GVzD-LHkoPq8mA(R{d?--RHkc1J!z33^2#Uk)f%m*$Fs)R zu>^`dU5EE4^@Rg2@F+VZBmRMXDJ4vuhD`}&`W!I_l9TD|W~#7!Xj>hOIxQwEGXcQ7 zVSKMyRhcw0*vPUBc5A5;^OZlK&PSggE6*i{Vxpo=w)64)Qp0!a%*0SrK$Hp?s^~Tv zNW9sdIAQE^V@9olU@Nn7)6v)bm!%;yuQ?cYrUFmHS`JIPQ<@o8v@09Sp+>e7p z-&d+tT8(2(rZDOv5$_G!B%|@&FMO@gXasAT`Ce@{--V{aI;H48lE7C3{BKXbKAxhV zPL_bgO^s33%8kO}#D_?s&GV!cHDDCWY^#rwY7@phl)udJlxLDmQG5Ad+nD<$`a z4E(QWP#sIQJ)eT4nOf_W!ycbSfrq`#VwtFf#CPs69k=PTFYgR^4E1`kdP>CpJ|P}g zUM6l@G~26=r<+3tZ4zK`GFPtu_Ep#0NnlkL4yeUe2hjL^JpjXi3F!HNh|hsY{KH|j zE{UGWaO&tJ&>5f(aEanuCGrH0aLUR`V*0FR@96T|zSH0-`kohcrl+Avdoy{$NwgvA zb;)0nZ+j6p&#tXKMj)6ZG!&ZxJ^o(-LEWFc{#RR_=u~pACnfsV`^{Au-G2R0bF9VE zA9+i%*(_nR$)gD+pU-gvwAOu`Koeo2QuVBYS&Ij)-Vn{`BU(0Iawh#c$i6oeA%r z!H?Fc&KIZLM;y_r*kn{sTdVE%M02F%Bh!xbZ=-sS?ok$+G&4^MR!hl+6Ei4ZT;*u5 zT{X`Fd+A%;g=A13){qF3(-B^zq$^D~WJ#XBVPl46YE7T`Gw2yJ)`E ze%9Yz-<#5gpJj6+8KVDl)oBh3#!Kee!%AcNc<#B`=4SG}wkC+(Rt3!{_dH%xx<6|0FgzE_mZgweb zD`fHTe%NSK>!koiim~4)+d2fkemu-ci<8QWle6TrTqcuD3zM@{vE!B+R0UzT#qzUY z#dB%x<#+*xbNq0*O;7|wDH(}<$?P-=#1OllPs6;gx`5i^t#@W9(PcPLDJm%(U$5(! zayR{CjblQdwo{!et&&?Sk{%j zcHyEvJRT3zcfYVekmF6h2Mp_XJ+4KzuvNTTEZ^NaB5zK&`-FN8MYR?uH;RLO!~yY3 zWP+9LbgN_MWkL@3(}jSB7Dj|y5cnV)j_v!t?yo5Wb{Mi~xAns!?QXc(~cDvk5t-Gv%f;o39PH;`^?^k&{sW zZ2ig)c(vtsk%T?c40ON^izP5CjKlRJXBKZI>FHFv_h|)g562Hz^@roFXsupZB0M}P zr`Fh&#q;&soo&y3=V4_U{&^c`aoWHzXpcwo#3BQLoZ86HGWx~HtOPca5!(a1s5!qLv-^Q z_oMe~iv~ljG?mZ|?v`tL($^b4)QqpGwVy`1y6Y`?9c>K|9}>Rby@+`uQ&!7OjZLV5 z3x4n{tk%7a#MX1rOG|kA9tehYyGyk_oER~QHz(IVi~h}XLyAIt-4=kQ>)v)T&pCBR zum+5yeG4;QEEbM&=$3?Unw@%ieW~D$@AA^!ed92LgnHI`64{Cd7%;)LeyexpVUHSM z60(harj4-z6<1}q_}$fN^K}wn_-$guD4N~g$9%dd7OlUbjZzkm z^~rK7(-S|k28^icia0)>h`^Eq_SYVbB zJYLljv&`KgtXXe#&?CQX6h1c>o!}5o;E6ck0WWFkT&5Pii#Rff9g70`PA#B+5LKIw zniUW*M!N>*bh=hl&_VypnVu#sb|#J1zH| zca~KgXLu3ktfHa~2W{pYKMyP8h0VtO{4V`!5{5R7g+xaB-O^P?gOR$Cm|eLRYM0Hb zo$uYSY}Y^#&W^+c+~eKJ2Jcc_9INw5jO92wDLzDV1@R=7^IJlF(7P|IGvOY;*2?`* z+TPK589u6maF#;YIbFeNy>R!+xBaWVMkoJtf0G{nWx~}qaoL<5ulin{ERd@#Xl0H| zY0YlBo8lkL=v9_7T^%Gls8Z1;J7bFK; zg!ub+*o)Qr6jSnwGXLw(j5eTN@XBx~O0%|harV^G+?9i``NsOcnb3NlaKMi%DU&ybQp2ce06)XT8Bvz+}Y~ zxLdj?9atr*K7$1LlRs9+%&;Otk1oeQ;sHIh|wjtX8IwD3G4`C9#Q~3pa zEkdgf7abd^3ADQ7NA_v!m{n9=G56g5^xXkgd01j!H2rogMU!A`I_+gCg?on+AKy&) zR7`!xBu|>slcc`IF|b*JpX!UetC*aaA3J(~q*S~0vb>3KzIKFT^;k}6#gc0AyEbTs z(a_J9Vp8Jw-LEtnd$iV?P0t>I_jX@zSFe!p*qd%|eA5C?3wyC;08^;wZQrY;_DkQ? zW#(sInc#kNgI5Y$Jn7}asST$+_7okb+1)|ugaqZ(qt!OsD_mCdxMX)w!GO<%61kH6 z-M*W){nxXh+QaB}Z=mzb1P!`E7U>VlKy$cj0q*)JJlFM$^iHpZ_C9}e+)3BnpuJe9?yeq% zt9_cC=ag;VvP(|g#k7izR~1bOe=oYZRi$6-ee`cNsCy3~p6GoAVjm*9$&LB#-#P~|Fj@6~n(*d>2oPKIN_n16$xr1E4O>x;3Ildk=tySdLLr|Ks)+6{ z#=zB)CX6yq9i)Z^RNpe7-z>mI<}&|Bgx0ef`pZQGr|0D(mWHYO_BBa8Y8U8QD|T1i zew#O}hr{>k^imOq;5yTBN>mRuhIgvyo!D!b2UGnq%~Q=_oh7<610c)$*6U)M;|plC z?|ysCN44T(vuCVs@yTphyKnb28$Hv@*AREv$#uS=ov)3#(4|RFLp!oMSmcLRRPDnd zwU`yUi0kPsOO;BZtMw)LNQG~610EX7VZ?1;m)^uChCNyC8)N-}Q*BMxbCF@6%$9K0 z`5N&UrWeD%mIHr1kghuJ?Bv;Pw%tDMKZ`TAJ&$es=Xjh|a?BnjQ^8B2H8HH#I%5kH z{58dzao?`-+_YW!NmF>G)G4Ow6KY-6HOC?=`;{Om2-f(W?l~=AGscA94C?s}fNQti zwO2|-yjf#t>}&mq$~e!l{YgIOvS~BDvjGkr%lkHATya~bUE-$U(Q+QZY`V0ztmlcv zp&IYN5E!(`h<8ujGUHW_yg}|5Q21(TJtEXm9dj}LVtm_Rx5@bDwch09_Rk*@C#p2A zF%VGKO87GB5VLA@r#F4i)$4y@k&k^&;Q4<}!=US&mxo9#BSi1nqFbiF54pLr2apMcScvzZhb-7kmUhvUpGgy`rrqpkD)pD)Wz zwr`K;^Nz2HNngGnTkwp>fm)$PcI^kDF@!w-V#+tMflGfsKYitL;v*Wn#b73*`#Dzr z^gC5U+d@;C9xZ6lj14Zpeb`~f9ypp=lW}f9t|;^He_nYev1}Pg~?Rspq-gE@9!GuA6>F;QnJHW zSx>o;Xmn%2nQ00&_A~lL)@&SURkP|6L%4sf&=>SUnB=2o$JJo!f9rntBlg7)o`=JM z*ztzoWCL}|sPuG_BgV<;OeDm13II ze0G{8;@sbfa@9!R`(AA^eQzFJXP><4uFqsi7M`Z7LS&5fmf`iQ4&>g7$_M-=mH?3o z3MQl%ImMJILLf3WXI% zNc>lDi?;i=>w4FRzyCV`U%dH?)oI@$|N27T`@j>6Q*gcok%;&D8i07!dAAk-4u941 zkz6yQFj@Eg;8uJ) zTC!5+sk3v@@KSqZ*FA-PtrO0ARWGxbTL@iV%(~;zUif{^|MwK~#_*x69Kc&#++C6}+yTQ+f(hsHf^&@`Qvp>@iEnrc_@49eh>v;j#kTUqaCeb1F`c! zt8`iDTZpEY$b@2&Af@Zwy)E|F^mM?}*ZtK#?t0Ft8Y@5L{YR1wZejk!KfwQ#9K`Ww zT~kAGcj+IqR`Dn!_>d~NSb!?Vh;pJl143%5wcEK-E{5O68B93fEf_U34qY`8L)>5cV+Ed0*^33|Q$c;(V|=(%``X4MGm`Gfn~6?l3-I-iOsJyDm}h0W$r<=~-HfrbGGFw}4SwBD0_}3UE$hxiL%s7}T};#Y-9K zz2BRVaeG(LHxm8EwkX>{$jgD0JRNb>OT84ge{ZF_Vz2@2|C`CgVU@+kl9`i_6@FRF zw`P%rks-@eDkc|%Jtu>q>4{j{Tv1u2=%-QRa7ucdFFkvZEtLhdWK2m&XhRfz;HTf| z%RokDRFsXrzC9@tRZ&5q+oFSi`Jmr>{h)jmuZM-t6K$_wPw20tN-o@ga4A$!uSZVg z`%ufwhXM@Z-*#~J8s996zBx$edS3lCg`l_o9rx-}CO6fBsLd4;8ay)R31Dp*z$4ci zV*$^0gl!YNef~KLAQOiVR z2zgyJ4vZ!{mix3ogpzTOw*-*sIlCsnnzJD}b%Ab*aLC99eC366&k8<2b2&mohGQsZ zUFYo$<7%Y}v-t^dpujpX%!Qo;U(yX>)mqSt1An9{6GRmt?FdOTLsC1St0z3*cc={q zfTBc9ugd;ZvDAPGWDuMknjyfZV_{J;o3{*asdzTlQFe*I)gd&x%bgn85sbx+(hOh~ z&H~%D@0Rs>3X=ExII#}Y(hli=a`_H(-;gHc+=Q-U0rS#v}&4=Gn7SSI|hb zHV=ozWZ2G|e4nugW@^J7<&jkosa6M_n+b4ipos>Q3P>*Aqb>h!mLC98wURe~Q^8;Z z-@(5>SBd<9kQ!zOP7Wl$nUfVE;WEGX$p#@=?FQqC?2NDCGqw8x)|uGt=cx~K7QHWh z-23sH*}Gh8(o2w{z;sbnahd-uu&3q*$BBaZO$h!N-9hcSl<>$G4OEk(ZBedmwY6nE zZ4)c{ktcU?S8zDsSzlCYFH0Mlk(0-Bzd*jKo`{!FO((?u2#b*L8{Jg1d;sSROIdEt zamr)%oFuwUurdQft9-@>z?l<4#9i5Nx`n@%H-&x0bD7a#`m{jEkRQ~A<33dr(};R> z`D6Z+*MJq_pJ87L=2{`;o~@f;#tExy<`IFu%V>Rox9C=BWdK7tQpm$BE2RQP1(p3c z@VH{rB_|)(ZjDw;L8?-aI>OT}_k2{cyns#L8E#HyX{5n+J(Q4L&+mbu*bf2<^5c0g z#fNybswQ_o)IS0Sq^kf@B8b?HWAma=emip87(T%wf1pb|iAXai-d74ZynE ziRCMM3%aezo>#yH1`)9vVI+cwn>c07KpcQz@#HB6mY%Rs$_*)US84PDNSDJ#_X_*S?nSomye z*x_3!7A5ESVll)F9E=iv8}}t5rD_a=rBqG9#j}dRVT}Jz$6P`P#yh!~A@?f1Re<>_NjgEIu z%WYkbsA+$e+jT9@s)LiLX?$o9u(RzS>|rV_GPRi=7|MsTbLsC+-_{G28oex)A5+?TQTuQ|B+(k+~5j zKgBquhKj!!B4ob($TU*XY!ypR z8=B@CEH{n+um3%h9_+rUkw-)e)`}7Wx=PW?s_Y!sqwY1jg9IcB1(*vhM6FTTPgGt@ zDmI@!l2U3s{_DFjiz!Im=zlBI7f`9ahPBAKtOH}O3QJ1nE16vBrjHTO(9vHc5@vqg6u>F0}9E-qu~hp?&%rx*Ay|zl->RgJ=@O-KU>9rFhIu~gT&>%?6dJ=xoKh*M|@-dwqAp>ZGih<3Ku$Wjz zQJZEKarcStdn<$IiZcXM+HCDm(t?I1322NmaddKY3&C{7`R`bE8i3l66oATHgqb{I zHi0~T1nFK{nGct#fpeGU{y0QL;Bz+hx6xh>BhGPuYXu>*mDR8)dM++UWI9FeOQ~O? z1gopVF@y!?#6W-e9O_0`{JQTD3ogK)ykGb)TVj1;{-M%!anWCPM8c4ZiK1t7zq;dH zXX8VX)aa<`wY4{HG*?LFV(2B8kI5qpurYyahus@}h1DQ!#jT&_lg2ICit^9G6=VIs z3nz<_c#82dxKxd9wW~spNCQu3C-0|ZRBdfdBc*Y&~BkpR^l~m zz1UB>1rbH1q#_wWC?=71OIAs|8k@J(^}ffN0tW81%E34dc*fl%sXnCw#=w)vC`Bpv zT0~Rd6o2z;ZCC1O^=)7U8FX(Z!B7O}yt4cEf~j=?c#x&5rKP1`SJ#r5QF2An*6Cb< zrmvrvr^+db8q6CPaWY?9-#jC=ZYWsH4ox?lek7PxNX9F)$7))dW=$`mOu*FoOMx5G zPR^R(PD_89LaE!Sy1<}-97E$&Gr2BVBJHxgi*zOR$QUozX`)m-9Z4jdZPvl-(Mc|; z6*B{wq{v88>0D`|m9@=WUqj9X9@~XdkuLOIiU*o}w!C9o}00APp<#*S;njGGNb+G*-hl zBmo7qUE>>@B^y#aks;RxLVbB7-Mx%yY~y@#q0x0tKZAZ`N?73t@G&T(*XmXJ^UI?C zjGkP10Pc5^&x58@VlG|E9^)U2ewGZG0Qa=yfE|baja{H?>>M01aos3p;c#}3T!KoV zos1%Eg0Maf>>Ae$cPoBQEQLidhdEff7n1QtkR*rlBD_4T? zQ<9qKOMV&r3UaZ=PNT^469 ze6ylZT-7L$Oh$CGRClerIWNq$OS3b_4r63qrsiVz-OeK?ZbZ%cM@sq+$Mugs;2`MN zrU0tB=xQGIk$;|(^WxMf<1!WWSbh>~@cRCJh6`Sj8X@DbcwDyLABXXh6^ev%r=VLN zdi#)s2z5qO7Apb?i}hIN1{m07i8yvGa&YmHQva&^sZ5cKq|)e#>2M(rou<_AnjMla zA(IF+Rimo7oND=^nVwzjztlr`xc|2g`489%fLS5Lz^?QQ!5TY2Lv@N<0C_>M{Z1j)2awlKu6~mlAcj3mSVf-y(=xu7tOS*X=l}uZXn3rG6ZXPVYJy$K;lMNLksiVJ|A$8L zK-grXrj0%6WtoqU&%P}jTxgW&OCkuAin1WyzKX&3xNwrpqG5xOjUxz*p1f2MX2 z##jk-?j#478959zQ|xjQ7l1-|oR%2OlpO^AcaoER?-m(1iujtq#LY>BJ-k*>qrm@y z?n*eoT)Hl%erx}!vy3t4(9I`rEpF`4t<2)@yrB(zz@z?lkJ~2)-_(~_f7~>mt{iML zu2m?bOGf*Lb4!ipX5k@Gj7o$NNf6VN&@>v@-2T6G){cw#FT28$Gg2Af;;0dng^DP_V>p&R7hxLx;tZKp2q3Sgq#6b)!+!I}>Ex9v z7|Bbl^a{OxQ-9UK(CNP^Q8LtAWZLW~lvf!;fHblywvJIq^>lW8zCsCiJuHui&{;j@ zPms3j++1>&Y?oGJ4Xi5Eb>AI~-@=JWX}SYe`xpJ@u8Zacg<{D(N<$$3?{gF|j}6+k zHwTX?lmky2hc)A?=uM@@3NPh%cmpZ|MKup%q$NRCc?QJ|gBuH0z5o3))02)!diLWtBFwGxR0ogVT=2j7um6CH2w;%ke#UNG zPLLc9#pUwnC?Lm=gv;gK$?hgwcClb4Yf7}%Xb!ibzCeXo3aqoM$UsOfvnzczuoK!{ z>=Mp*>-ZW-*ELtCG@AQt6>@9Z@5dlfd+}gB+gZ+0G#!m3Cy@z9x$h&z!T#6Q!iWIj z8}lK=JgF|vE~6k3Y^R(|+1Db%ZFl%KcCjXBy{4x}6P`uZaEL)+AudeSz&aiWw1JSQ zR$8xddXleZa`ZS-vn4P?#O8wDgJWpY$^g2vwi}IA-6vK6II@Uw&ei{R{AT;li144P z*+Ta7X#KKhB}hp6N@s)oX<#_4vCs@&9C{PxLhZMcFBWsw5`(ojiWWS4rR^^iNro$2 z7wPiJdb-((e3Uh_O3jivMWGf*)Omtw@^s}(5z96)F0Kk}DLI)80Z(H$H#rv{3oWDK zTaR0@sKVzyM?DX^C7OPr0z3xV%B)s%+4c+Dwgo!Jn&(gEb>7@$X;D4Vo0SM#@T8;; z@&Y3|n(E+O=IN|!Z=5$|_N(A#(Xl2@sLQ5v~(E!kp(dQGC&F#A6c951O zkxf9T8Y4o}CT8%n7p;kSt(}IMZBBrULfVrTi{Wt3%NCo_ZFoTPj>LH6uTy1D zh5q{VHWl%3nZ`~W$K9*PFRwSwJ0(PjSowAEMvaI&c@a&TVtGBivH2RJ?MJ1f zoTiSJGHk$zDH#F+2xij&HIuYV*Z))x;3CX~YEM?&`UEGF&)J3)yj4GHc$cA@0cd_Y z;obRUA<6^hc2+K$Q^vDXQq5BuhT&{eZlc%;6_YVIRfDD7epCDL+~h?8`7&`QEQ+t8q6y)`fd@E z)%=&O*i~lZV~dI?&Ai^c%0FCwW|A=i}oeBLkN+Gc(iDN%ShsNha{8d6pa_DRQAFp&#&0&F;srF;xU-Ff_@yj9 zC~<&sz$b;ZAF42ZND8_OSxam8=qZhkM++-(3bo9pd%mJ2wyg|dC#u~+&iMp!OTmCH zMQaKM79HSOVngYNQwWzes3r7rM(0%fo4JV@-R2c86#U#fOK1)cpC$jSkaTDCp%*=+ z2wOUipn0seSo3GQh}Kt+^}49;{Yvxx3WHa-;r}J{j){lF3u*>(+n;9syX%6T*qe=* zIV1cPC4tT1bU0$Hj*`_zf^*5^Iq~;hbDXr4)?u5jI5Jg{vdS2eB3X1+frAzQ2 zd2NJ@$j>^3AuX*$)vCf_&B)-vWi`#)2nr+GELFX@eyUB^@1A#C#<*!#lwy5x4N%Q; zUk10_qZo$FVh#>kfnen%a>puAa?0fJ;|m0sXLSl_>Hqe!6on{U-0bol?%x|?((Aym zWr>V(J8r-7&;H>HbZnAN_Pf6^=R|wdIHr(J*>qf9$>yt)U#SlxDU&G2<2XYYHlht7 z;KrgX@pZ!gj~4(UC*v?ssqIKR08+j>ZoT7z5-1$6{VI}?FdF;4(Fqv;lVxrMkQS>U zaR?((tJXuu*LEFGuAGVg!wRj|3ut-EhTitI2OEgF;L-EANdjg~T4Z6fd40aUW_*2? zYk5eXsVO~|%;rUkX;Ozb=>)!>4?*h$|HkAGCbZ%q*7`F{b1LAmATRJGgm#LV0>Xc-V8Il^AI4mBK2Lttp7g&wa4Jx!aR zTi4&bmkYowMmpUWQn1~h0b>-?6FwcC?JE*VOtv=RP}e~ngR*H6<9V`u^&4uxdcR(2 z7vQfoc!+9W{AN4G;mc2m(%l; z>L%8!V;Gh~7?GMu9rCG?c173KonMjFR^%7VdpG5;OT0^)pCEhY{jcmPjQXPPvYKi5 zj4}8qZN312JgQu{Jg-|Hz9a&c6LZ+~YW-1G<~bZ(pq6)|Q8xPifnCWvUrKw3BR+@Z z@4*^AR^Hv+UGr&eFi&a_$$cYGHAo(j)b8zM>~P^@1;v$aD?vRq&T_(}I;R?OfJ9Q# zG?J={${!OmJGYlHRbgS_U`;VK!Um(U=}hKI^JzPY$%zTAhsC3)C>gYymM|vWIuZs3 zLc?Q9X`?X^j9vWkp^*_|6O@?A{R!E}3hLbG?|c_Bl|&$Xq|Q+d=#=5p zoX2wlS?j7GBGr#EkE7R1rj2~}$2Yh)(ZC6lk|>V~Mi^I>Ox0DvjN4d^(>1H3|4J_X z;|uMdbjYAlQS_}!X|}lw)g5m(E>DrAajZ=s!190~qMLRs~_6B#Fb7<#{txrYuIfpi~QInc3o$kQv zH>b_?=M@D3Fp&55C+OKRMdhi;Ts9-6$HBaubtc$ivKu=i(1JC0o#g}?K+Ii}VgL0Ls@ z*+B_$%)`vm?6%}|l+tT3{wRqXcv+$L9&t?P9*Drg3b1bAI|u4p(V@yeA|p7*f1Qw_ zr^wME#7Z{dFuw8;^I&ZdOrfR2vqCeu)mk>H&|F%MRjYG?6%s_2?zoiOS-a&+za-B zN_SHGtq#PelD8p zIsC*p#>_S&4%!-GLsJ?z3k$w|_C!qrVk;tm)A$pF4J^^HIoWcgeAU5SX1WA*8YoRef8#~c00~&l=Y({>eD0GBS0uK;CZA=z zf4IAYcW48J*hB&c2OrqMfEGaNT^B$^L<}z~EDjCfXZ}7D=3`*+9R(5!iq99%(AG8t zJ7!2Mw8cy=le5tf7?B2T&CafxnG1~!&bF|)iYo#O3M#0%x>^C@CTD7nwFtQ1eDZf# zz9OoEBO?=bBQh-Ij}Gq{+&eo9I~6fvuA;*Ti5iK|&UV}znw+VjB8>|l6h6AX4ksF?@<$zgtW$v-sd4!AESoJUs&hd8;^FD(c5}^4U~5x{V-gn|#{|#~ zKI>&_sb!^jU2GF5aDS~2|!LVsg&az8aNJvA{uEF;A@vBcf8)zFv-8h=6(fN76; zB7<6^{GME+2F^Ih%@)ns!aG=a|87fV?A17HZD#$;T~N!4R(MU5OVgsfjJklhdrxP@ zyPTL{jB&;B;U&SG#`gTdpl7FZ)iK9h_s7Qe7pePGR&WL=6ZhH)o<+GG7ZLBtP-Lqu z!-7iUZKO1zUyHGl#!68LE`7ijK2c$b*(4Xii3$CWS#^7^J*)0REh$pKPEg+EtI$_N z-yE-G%3<-I8{`Ip9NzpE-Z^0P1)#aqRm;j2v9uM(d+@!$L*c=UJlEz`U(9h zG0$T(XwmX1wDPn*YX`rCZhq~1^c`&rG# z-kO%_r{w~k*|VQVZ%p~h=DJa`qcj9-bMKk@GV2u0Uolgh*YwWy?j}6Ws@|*@x+&R2 z5hJG+MeoWMLlRWFzJ%=UFX}oEiM)geMHHsm@?i*@1Rf+5_RE7u%#N0X8F*IVA%3W( zd|lls2?_N_dVT5mu-Z(+4L>k>w2m>75{WvnX1%?4?ixB4kBpYLA_!+ykc-LOjVq54 zJ0j^a#>l}$cD}$tKPg8$XZ@e4cLr##Or?*2bgpTkd4tVKfW(G*mEN7Ay1M$~9CZnh<5?T`MY{Jsq=hV;D; zFAIy69YBJ?%8p^@O$yRpR#k&8(oQwbiU;j|CB)arCBz*VGoQk`nWkea! z7lVL6OFo?qig4HU><3U`iA<=8Lq)jOENbr3H(S>(2 zY%c&Xv4WD4H`U!&CySj4MMXs-N-dt__GBfD92^VJh96Ct6%9WswF7Wmel9~i{CG!f z8Zd|NqGn9i>u~Yi4j|KQcL5m!`mvM^+@;526}{q9TW<*Tl$s+fd= zz4O*c8QG|Y#>QAe0R|<^-ll*PYg^+*|LcKbxgWrQ++R@m>tnUczq&4f`S2P~a(>A5 zR_jfK0u|f&rB$y-+hNAW#%m2XfdE1@v^CovXo~oA@c===-n{ZSC?16|*6Ne>@>lB<$+>N=!pEobqugvv6d9AwAR*${o4HYepIwPQTfdFZNjB6Gpd_dK4Zhq zUpJNs{cK`S7F+DjW)Xo=QTI-ge75xP&hdY~MrCwd*#b_)EiluW|EIlg43Bi{+Uz79 z+qP}nw(WF`PRF)wCmq|iZCf4NPNvTLely>D&dlGLUsM0;s;X6cKl^$1+H0+Q-S-U~ z1Plxmj2PO=5r9brAlL=%FEV4?VdWd755K&!{%Tm3uRxi->z}ixFf5}#|EH%=-`y>W zg}I@r-W*I41{or%tNUeSE-$Ots>ITUzwxvmXnX^gn+gi$ll7`ZDX)=#K+;$Sx8goo zrZMYTwMVZzQ1McX_8gW6C#r#!BVy0r=luQyaci9S&0SNJ)NK9Je)vOa0DYgwKc^7x z?REAP-i9A*hJ_HIr#_c~Jtc0PwO3gF+hBy&cG#w759WJe*^Cx}f?pmo{VWWHa5t03j5B7Ft}f;) zPOVpF0W(qa>%sif$6wMrSI9Wz4_4_J`YZ=2-1_)FKV9<>tuX|(45NeAIx(}^inQ!g z_`|2(9Wp2Xe9Ee-s`BYv%|G=dSgX&2_HXE!NK}y=iql?O8kNM+QVu0DdRC&3WwxVp zdpKQhRd0GUH@Uy^A zJS12jMVTXJ#WucbKxC>+Ry^!L?q|AE#IX?xd=Kr(Kr(3lwc%m6{rK?9Mfj*fRXXN^ z`w0NZhH{3(A$T{=NSXrGgzz#lS(ux9H@_Vi8KG!4qca|g6tKHGp56b12hInk|6Tn2 zQWq)MPxhCqJX<3rWIPFY3XxCe0Mgun7P@-r1oFyYcgbLNT=N&zzu2tD<-`0%A&TLz z!+0BBEg7O3TFmEuI-Wccq7BvsEpu*haqu~KB%M3)eDieZ`6$}%Y!e9+rB?l7@jL@G zUnDm*KK^!g1){+R*R7gnZ^iJow9ibJ# zv`{Rcb^RIWV2*1kDJ?A=H3KCFQUH~d6oB^{iOuUe+c&+l>N`2pEKmR3HSKd;+B;C6T(v|RNDpgTtfC2AzJn?aE6k)aYu<#Gcw=I0}BeH?8A zB-DKEuV>;a&NJU!==vs^Y{tNICUm~$$%lFkTqDIXp(jU7}Tbpf4wG<@7ClqXqS5A%r>ztA(KT0**gpQ z79P;(I305XoJX_t(Nldr$Sk+c+y2ng>(l%F{7G!TJ4QC(^V%k*fTgBaH{$hi9?#KmeHJ_pUR)4Nb=10 zLw5rL{PFV<8nUt=0cSjFxv9Q2{AL$tWemd*Cd6xle$3!S}Uh41Eg(MGe?!j;l_f48&>ufNR|?(~?^ z;8)D5Pv#4qetg8XM%LMoxn+2ev^X1oeU&V;@FHbOwg+t|@5RwNWg2M7WuQ-ofVQNv zFbZN$5y;s#D+>y|x1wfJO$Dt%hqYPsdrEgLt-^)=oL(1NoLDDT;Z7<^DUr@! zzU(=8e6om8sGzN)K|xB9ar5&Eh!m7;j7uWI3}ynklmk6N3oQp?GQ(S7`R*Kk!XE1L z7sxnEnPJisbOXM;e(`;OE}Phf((Tc_mNvNDws27-i?RJYT)-FWzsVqmM6uUh~K32O*FG=r}FN{tTBg;2y$ zAf2kMlL&Q1l!M3pJu;#mBohoHHW*Q=Z4HZ$uNiT>QyX1_MyV7ULpa(S%u4u`3_~5=?}E`_Xt9rn#ZPR|7ytRaeO0gVC@3e0+>iEAi_| zEj1^H-!^PXmS!ru6T$^yKmk{VU`KOo6(a1Dnw21 zq5`4k@YuldWeoOykWtP4GBeHIjSxvz`EYp6!R4pl&IhEi;Ycqk8=$va*=qXwy11lD zKq*iww$0~jRt~qrAcGOutVj$T9#@!WTY%03WSc=?c5Uo^@1UH4E%%;$zPQ2s60CVB zkGPn3W7EJ!%<)Xso_H9K7p5nS@8|jXUQoRudY&#oagEQ}yx7l=&l-R=3Jv51D&rNo9M z*VMhRn7%ua!RRGnwVk!upcT0b69bdt$;akcu3Rp?{!W#;ZT$(~Ftr`kOGs$x{@gB9 zu1i#v+IQdE880qwdg|HkX7xNPZu46HC}u7T$uFw&&#n1&_VUB0P{Q33auL-3iYxt4 zB3$1@iq8^i7>T_W)$Uu?gp-CLXwabLglmt3rluigrtrpHz&bSQ0@b0ogJRIZRN*@? zW&F;>u47`_NxA%m`L9<&p>5};H#`zLTRZC#N+H^o3!!h?RA$JUVKgwg5#Or)cU~+` zD$)|vLtB6E>{rkaO^hO00Cw`#Sq)s~xcE8}P6-y3Ef?w~a^@lH4)XB+!$Wsc7kfBopI^{Xm262q^Xvhrec5 zMZGSZ0-^kY!&Fph2CPXn{LG(%of{n0qm7w#5TF*3<&G%==z!AW&)FMUaijT|Jz@MzzBf+pb z;Tk&Xa?!eu#XkvF1ll$N@x#p2!m`Y`U==``l%9}LTv%#o6+mc)CgJ|cV>?f;jn4~Z za~i2xEkw)gv5ZV5n_XV=h%wcM}QW!?LT+unYU8G$aoU6~s2^ue&Mp=eI|J-yjJ!Yw-x zjvZ=xI;Ex6p`UI>;NG@Yh_g?>S_e?%sB%a!`wm8W{%-S9qS&vqRH|k+|aHj5eDXdhebG_ zp-Eg=7?%&9F0;QgZBSZ!Nu!2-$f$B-t=5&!u>>LJ&d>ES^6rDR!Y8V=g(6dSyRNYj zlcNRO8mZ!|>9(Es=?X^xjU$U82UZwuH^i^8qHo$QB0S1&EfHG|QW*!2kl9iBoUsQY*MvoOwkh)=(W0C)M8g@Zg}lKVDrSG}T(<~&`*^JofJKAWfWHUqz(C?WX4s@r^4$Ag>Oxs|B##`gSO$fp6_@EqGt z`&9GpHb*Qvs~RPGpqFpw1q>xdNpt%UtHcO z+vKC6ginTe3F*Cqv66xY@Z4!xha7rU%4S{L*$-2~_j_rzKQhd)$x6jIx~L36IZoK=;*fnO$%2x>+!z#up%2M6e|W=NXHmIc z%wKpnQZ)sI#;pxja1giNTI)lqRgfe>8X`IBVe1LRXRW=xcsC;a0SOTnLJC@;;Y&dCeFWalYW1nv*S0y|mQ=b6cPL8vXup-I_N25N z0x6;fCLp1Z&bAcb?w|5+&6-&HsQE%c3#DqP$i-v?ZZ)CQOlg_tkiv3>!}{iSCz~*> z`k)gvHIx)IjDF{1rK^4`kF*HVX7-fo?7sUl3!Ln-ZBiT3>UIyw=DvkNqYUqplNME! zPw+?>+r-M{Stjsn4ZfE2q^n@!VL?RBNe0K3mZg~(qeTftDe!awih-M;78O0u-ZM9T ze)0s76pXWz*o%ers~JIyb`H@U;5B=0Q-J%czJlPl_E$Xf>tlC4jpty#Hvnu0lr57M z0|vl2w#b+--kSr0{q2b>F;W|&Eu)S~LyyO$ma!ewu2(sJ9>A-|{__vRFFXfi8Y&v3 z@}EyV)!n*QmX;kC%MWa9OV1EQg3(()l+OEa zk9heP@orXjB0{02u^2re)Pj3lk@6HkU#&_Ui{e^aUsCjGvY0)F_G4q+?z#g{n9L?5 z5`E(}Imw2Gu3~V1oi)*Sa0!Dyv9h!8N1){DEwR8X>E9gG$@6D{rTB*o+tWZYxGz93 zcB5gE%wB{-JWP&``VE=0;(d<+?kkcx%ocI2OLX~GdmLB%_UvF>Utd4dIfOKAP02hm z(iT}U2i87(-DKCLceC1|d3{Z*S0|+`U2m7O)%p^T$J=Jep$Rsu1CfE2jjw^_*6PLp zI*Z28ix;7Zje*fa5cmy8q#`OvG-$N+WP`FNK_TsKhcMem2C60%D519=W?Hbq(pOjp zzYqE<3|Y+ZC)U*FjGx}rRCH*_-H-Q{S()q$!=*K?3~|xnok30*Y>_^#@$u;pCJt_( zPoR!kSozf4f|ftM`NIiY_`|#zpruza_#ooQ$xwqeMMkcHEE43jsAFnhP22NNk#$8IecEh+lb@9 z0pLIIv4PF`+OZTjd;CD$A5Q)B2S$~D6npVp9p~|KadCYCorN}HU5NT#U{VKS8j=Zk zfPu@HB>oBOOok_e!{zVLRRUnV`kz;Yw)*<^R(iJ`?r`{RQMRNBhgMfD#;2`rGSY8O zSg^6N)rvfwsw)p*zkj;PbqF46neJATUs8*ORNHPjSw>CgGjBCNWwo?!&X?9Fx7kV` z(G}ZXbYR*Ku|MxUDpQL)0if(l14oXQs-m!gtF6rxRyYm5y zVjBJ0NNT`_&n`AOyn28`3_Pm!`>_#)+)e#b#eXPw(`f9PMbON_LB-oHP&UDB!GiRj9$9zLmfst;s?2A78W6TOQbh1ep@(A7RDA_-qtg6|AD zPFv$AJBvfFeq0X68J0!(hJu9IO@9qZFY+irwtRZ-3#a-;m{4nP|stAkZ) zTs0AT04_tXR1yWh=#5U)_|Mu_!`c%Kt7vS;N!rli!Rh0Lfj5c0lZ-e{q?7y~r3s&K zIg9fPGU71IO1|>XLjKz;K@p8B`3ZGS$@;DM>Ar>N8|Sc~ZDW+HL8waiDG&%iMAwJk zSG>pw`F2xm!1=QITD6y_FoI_RN~ki6*YFVVu&|=DH9*hWSU&2N_JiYPCU${It|@R_ zo&n%b{Em;nnP9Gi(b?P4S?$8YeFQjIXuJLv4{S>i#!AXUiTug*!WbZnRXSWR?`}Bg zYHCeQwskgdcoQT;zdSvKA>$6zFuzJcaE$tqOr(>eJMC|nQ0AAHhh2+py03cd$=hhr8=Bf7w9(l4%bnf*+pG_-*WvlTZ-$2Sw}bwxKtB2cGC7P+ z$7SzSy^begpaj+DQp(ITU;6yKD<&qU!zt}|3Ic>zkCt|B4h?Y;k-oWS^SKe@VY%L| z9wStYxE9AFyvUaR-E?RH<(;TMe7-)^yY`4N32lkJ5x6lj-aJHBj(mt1)F)Eq# zzI`|(W*7_zEx@ayq4i%h6X;HilIPsN%wtXtgok|C%oY@!i!{()c&!;C8vsv|jLf;? zfbrIH-L$&TeeX*6d{(q-Qyw!-iSe-fR@>#pjzP%cpP}d+&$~mLh0vyffq@;Wpr`^O zq&(qKI%yP8dZU$j4)x`tnus0rpcF{*EDJicaxl;!gJi@3g#7CAFj5=?P};A(d8ad< z;MQo@iI3;QGkTBveLk896F+ql)p*Z~-F9jy()vEl+$Ikl9u4{e;Sgs4Q%ikqZEsS*Y_^_W z<@LHC49{bzU+rd*tkuBI1CVD;sGx_HwxZ3!S-({v9P4(Y+5iTp74wl>{_?vcew-==Bk$&b&9Prel{62~EUaPu;XnBRDLH_=8(08q?3ADITj}_*O z4pt-Q8Ib-HM1EDr{g+LlR~vmDHr?m}-EO|6BGPZHh^Y}w&x;Ka1%>{xw^z}^FqgQ3 zq2Kct5SkX$^;yQ;Z--{Go)V_%P75g2hH@KWbtjHKQJ73}qpI4VE=3OP*k7mx*HU4rcp%iBy{i}w(gmrqa{J~k!b7yF|AlnIHkzd;I^H_?Pzc$<1YurYr39{65_9| z89iKxq&TF|*;p=5P3j=1D)jh#qUIwk(~V=+9me%=3SIMbYddb5=4%V^;g=Ey4WhV**$P zVLfH@(#omp`n?5GW;Z6R&#(E!W3q0qca}6(muk!DBE(8}rPl4^eOo?A!!)CggwI%OCClq!9Lt z2{_FazMS~4PUnnkBI>j16L`NXP(Fr*QJxEzE5LX9X)^O?Gg=ugQ=xQpGH30XGm;R_T-&Xg~Z^AT8+#sqwWn^%a#rmw^m<^WBgHn+n-t72u`1Yex8j)y>yzkh=O!8Q0 z=>1kXxVU7|=|7GKPRi}$akiGTs*4@Y7ZzD3CS`dyv}tr2cu3AmtD+x|75nqJ%rq)r z-5WctLT-rPDnD)KTOj+%BJl&BB@>3aL*kfIo<^~H$1ohL^B1h7*o*kZ;l2w&}sHoK3l46vi|ToU4Un# z0X{O?@!d+9$`K&>zH%@&NmX*ZP=iO?K{v9Jw_am`55s@qRj57@CVeCZjw7N zg#Yb%p0mdC@siWGTD{jyc&;pIoLoN5>-OF)bIFOnYN+m~z3U!uXn1r$05tH*gp6$W zhoxRj-h6T7Wf&yv@U)KI@)&6KRvaKGP`|oMnH`S|buB6{_c$98c0N6t%4W3tjE6)n zZnj)BItZWix#ISv#E%`GX>VY;L?38Ezme2fLo~$JKAX)Kf8Oeh5ez$`+YG(|tH+-- z0n-TL_^6Z-==wpAUq$j1ULX};&1;=1%GkJi1?+*t#A}6gw?@`o=qqF`)E2~8guT>= zI20AMZ{05LlAX1Nk!w>GZv2TB!yRm-SX)q2B2ZF6gj5C$rUo~N3r;&qKQUNA!&*yb zvhrj3+6WGwK$J9yvb?SQhInSHuD9;|*>$$QC2}OtdZV-=iiJkDkr5;$3#oz~7b^)Z zD-k3ovOJ2f>!|-{uZb&C0vcit>{(%H6rVORw&Z9UDB^T$%t7lKc45I`2?aGPh}%&(RwPmNtd8Y8OZp?=R}~liH(dnLFb0!N*O8LCM%o}(~^?x zev}U5=*K~7?$%;fEx8|xX%SAx!~R;7xo1^?;G0CjO2f*Ex5}mbS<5)H{Ab9x;7DQ* zsoucKqO5cWA>z5v?2udI)X>++ThT$nL`z2tj|7+2X_wF6w?Y?U{@(}|S|Dfe{sdAk zGB7tr>F|mxvqo_ky4uO; z$h1PjLc4aeOG`hUoO-b)V+CU#Ee4crL*uIGw&H%6nx?0x)jIsDVe!Z35B>rI;U|Dp zheu=RA>fut4B>{pd#gPZG%-Qx;3^Sf3r`(KeaDE%FjUB_Pe3kOBc|WFG)}rca-dge ztWO{ob0&4}FLeJlD(akJQ(f&ExY4ObnToiF5sc2O)s(N~^$) zqinBan9Yk43=9YNDEEHugJFG4ny()b&GcthacIWp+rXO^%{GjWzYKT*pajg992+~+ z(!!z3t2^N>*v=swpzlsd!GQrAGP^gofO$w^g--VP9Te2i88eoPlcOdmF*ZG$v7 z=^Cs+Ar%ue9sNVt>!G0#Fr3C@P;D%6af+$!gVmlrX$Tbh1;70{4Qi%=py1lpT`oWC zEO==qs9G68Id%lUWm_BM#z?~*A@*rN+=Mt~cx$}L3VC`ODKVkV1H85v&$_*;aV@OI ziEIT8F77$wBNAQy(e!>U6&NL>Bi7*F&+zE5#`?xZ_8IC#lszn8(`cj}Okt$^!0Y-E z31#GlQ0*ijdPF>axWNwMNGr>wi6Bf)je6{$dQA;idvP&Q%MvSJ!as2+NLb;g6_phL zrJhy#h>wcY>;`h+M$#T{6l?wU4kuE5`l8vQZ#K-SVk;}UcrJLC{iEg}dL6yrg)l5y zP8dMKu*b*5g>w5?kYqF$^WkLkPjeletyH(#EceTi4#%HU#$(#4iIcbW*dVWKRVv`v z-waB!vY-F#(P``oJU&;@K_?C<+5lq1HYA_B+#qrk-l`$yw}Au zrKQX|95r^t^h&CZz18uM6N8JWF@XYLSOmaVp}y}?5_~$PZBz+mks@N358M3B&Ks|v zPV3bwOytwhDwM$z5FH!E6-pXiCT>74H8Nsol+Yvb8UlQHh9X@RVudtOmo;t9s+jtw zCWU0eMM#BGj2QLc<4{fDXm0(t!AW)F_-bRJBxw6bN8KhbW%J~ZX#yG)eTWx24rp2x;-Rr0VFJlEH9c0{!F)m+2*rqOEV#-MwG=1GI_?c)b7!^&9}W zXTkW1%G3_wA1aQ)_)K0O(E{A!X*y;fXAkbwzi$oRgT6?AquD@i-rdRujQ+Up2S)eWWiU zWjr6ar9)#2;GuF$NDgAI^%AzrW|B#3jK&uYUT)YLgkZ^(v&Uk1L}Y?cs=xX4WC;$a zlMqH?EKz9cC718T>c6%BCeR!GNr39`UvZ1t_dj-O6$F|vz$+`VP(TIA+ci{FCUNHw zk}cw@1@^?a8hYoowa);8zDwf`M@h7pjt&&^A>cX^G=qmaUa2aIsJGwLM71|A`?p#q zs?3ZpofT*zMCgxow+9I(q$5gc1)hr%Wh%gMX*}g|sC|7=ruwAc;jX%;Y0?8Etm_`@ zBI_j3ril(rHN?b((exGJ$fHR-YnLZ0?}lWxuY>f-G&j45jNQ0=iG#U!s=y;*chT@@ ze45mGY+AWKTd`Uh#`}mgTRK*t7}bFFPx;j;)gv|r18A5;bn;LK$4p#r%IKSIkY${9#{ z+L-MC(MMG$N!208xZ5jueQib;{=Gm2*5KcTrs!CwWhW&`)gj8dwtUbo$R-%}%;ECm z!?6yY=Mb9qSLG(kgi31CPNr%jiQC%LVT2xw_AS<#)=8yFP?RZ^yuVY%^DzD@mJ9GA z^lYLw*60;gv{4bqjSYVhNA&x^nWX7Mb<{PCsdgv6sUj{W(Tv||0ZA;0h^ZNXz^Ih+ zM+7z{$tfiD!3dF#syC~s!HEqU-oghv7@6P_>1#uHw2V^+Co$Bdf}4FeOvE}bOd-D> zId!j;QeD!^Qe&l2Q?sx+FvX-4_>M&bWXo~Ry(v@qFq!2fY)68@X)g7%;9PxR83MVu zBP3>B#Z5dzI(E=eIWo|w@DF+GWRccw6**t6+@hE0bXQve)qZ)TXJZi!G=hPjb(0v| zAI!K@rdv&p`Pesn4^U9YPh;_S#3w^2wAgKRRPvmuAk#rLISP4q&UE$M@U^m76U8qI z-AV{jKp+hm4wN62M}n%D(7x175?r~Jl9SQmpt}0h_)RtKZX+-~`{{uema9yXO$E~} zYE-3MS6kEgpH&r{P}LuPDpb1%#SG0IY~2(*B>GJe2$bdJN{Rq0$mKSkg+`_!i%G=D zx!(}Ye|_J|vk1gz&a5Y@{n_3XP2b0qK>QQNnsw%>S~4cxLtkA@O-bqTUC^vuu_=0T z5*v3FiwXv-ZdsJIYxzT&EhlA_?Mp-{^sm?-u!P?bpY;)AJ3+m%$Mb^C7Qf1(ROk_( ztC3toKu&#S9{ZysWZHjHaE$T8GMYXMQ2u!Buw) z?4rafl=cE9lGce++)-3$F)CN%-(&j^Q$6d5u17_P3jr}DWXyVHRwLSG)m0kd}(>qhKw`3OB>pT;&dhT ze?3(Ps^i$tqi>r*?Nf&rkr4gs3jN2=e0ls{nW8kZCIsTEbNc>n?XPSrm_RNc*aEAs zSv=JL{-HWz33D}K^Vo*f@}H`iK(x$q0zsd!Z-}mrz`w}dK%A?C9<}_~OB#C3N>z=m zNZ%i2tBy{$^mf0TA%Agw_8+ClUHa_*`FT`JceuNdW-(AXth?`Yyt23X6~!!A`PY1W zM13zw>;yg=XY{DA!IIckXc{f8D+9N?Mjv!G*QwvP>HOq|eV*UvMnCK_H`=&joXoH! zp$gMDLBqp0w4fUh|7+F$d&Z{$zW%ul4Km`=sue_@-JlFFvQAZyuA>-+rpT^Zm7vKHB^h8 zpzwD;_Z&y)wTzdyF@H_q`ww#jz+Y~_s9<42-hLvQnv$Xv6{-nonuR6LF`7ZCYgn4` zeMI-MqEtd#p0Q5JR)rE5foH}7xUa8+gQU+PuxojmE6->@)qs>VF(h?D!AFA*_Nn_M zM0uK0w8JF$*vStv1aktqs_JzyKUc+$kq1HTA6f; zTu~93IbkGhD$oRjfg#R_ifJ~onZ8;eC&8^@a*C-S&pFB`P2##P&wx)|F4RCxl&PSG z8ZNZ(kFB;K+srrkI2!bF6*b^_w9-1Z-#D5DG?Cx98*fnw0a@461q(Z9=sUxHu=;`! zco4a4F5)C9fF|K~zK42VEORvVfsk0!=t4>8&ZkheX(?Sw2SX5GAN}_h@UJaQAnAJx zAL;hN)YufSVz}WcVZHoVB zN9aP+ckrxZ-p?r8+8&!Rs;;b676Zkg+#Ln1^?hm4yWd z7x(qy!fWr3g^7t|9k8aaC{t4EeApl}2R(a@k~0?osr}z>mjJk$%y){3YqBOnPN$`^ zi0X8?Gpa4UWvt2~>7b^|+0`iffgPwkntZK{8X|El@sInC>R}lQq{D)FZZU6(`rG-2 z=T*5khE7PA=PI`|Zl`c{TtyHSRo~+F*Yhs;6>*VxjP2AVF90cUzF019YkRq9#V#b& ze{OB#{&bpGSm?C$=AWHyyUwNu3JN+bpJ{t|x_5Y(9vA2EI?>A4>4Alb$>)w@f0ta{ zpt07eopNY9Y2f6G^$4I`QLoaeZ>)EF=K!d9)yrSuF)*jfB4MDMUw8?Mi?>T3MNdu1 z0pQ`yR~tc%iOI=yYN+tX+bKy1Z#;Aq$F;3#k_z?`YHE)F{RkRbT8&X4AU^;WIXAG& z%e{9I1o}JGW``R$6IGjIadcRiq-?rITN|4wCjiL!{JO==&VI65-=0=VxrU8_QczXp z2Szl}01N9;XSlh%D^JGfisCyCNA7*K^-+IBllrx4J<=n9#b>Q&W(IF#QyCwxL|W)$ ztzJZa9}^Z9WNTF0($b=#sfo!JACFYkTn7M7t>jSnN&aS8`@2ICn1nR&hoV7P5hbVJ zQbaAizc?)EA(D<| zdG%loO$@t)m}uBV>>aBv8(!Kt!Owf8^`p`OEE0KqYN}U<_)jdF0#oEnuF~I&TEDMDFO$`eTPhj`DZ~H}a@$uTtUVvnAeC9-Jlk?S!)hc?q zu1+QZv-o3D7X}-KwMwVaeO29RabW=tpL40(Cx=|VkI?Nf62O&-t)qhj5dT)Mc%~yI zMU8Vj^6C2OF;oLxm(O@Ld~>$Rb#->8GlGJ;g~w}W@LVBCUTdmM5r{?2iS-qpC^w3; zp4JNg_zV#DUT*@4tBD{%f;=Y*l+WU8KOBx?$VBj7#U7H%<^9i%1<-I6{f*fViX;f# z>k>LC3GCjwyof5;OUbbvf|U74gc*9Wh10f^ClY!#CrJ(KL{<0WD_oqDAvQNYJ9=qH z?_!?W(eo0_=mL1kW#H-Si&R$~ycY80STf(AYkOzXz|?lTw%jXtwF(Uc!51#L8egi09ZT7f}$d* zz{imw;nc*WpNy)=$jJPewZGlJfRV@m zpe1T*>?7;W*n4;>7@jY6yH%+V`xPKzV7lDiF8{!j30U{|b}?8CMds|CTylADP{42s zldMba8pIto*xN-5tEw_)GN@PSO;1jG;HB)$EnE&eVH?n6Vw|q8ubP>dQBqQ`uR1&c zvxp4?p;^!Q14~|Y_3NZ_5$kDddps5+_vi2lYly4AU3J5Mwz}jn9c3~G+pDNdY)t32 z;wn{ER=VHg`3q=SmL&x#x<1dV>idM8D;G~M%q@s?l$S$4-eOY)<%mlvB8p)~s4oB{ zCL}deBNBgZ6`VFR85{58FMBhap3;OB*e^}QOuOgc^BG!*>{u+7gukdQq6<*|&6$Yg zVgVnk=a-KSk*X5krki_n;9OBEDJUG8eRPK{mvlsjCjr;^a%8Hf%JuE-vJ25VbuAA2 za=Ch=(YzY$`nPu5zKqUoQFC%)PBJjebbnE_5OjYtlr%IHm_Y`#tvNY0@^!XfaNCnG zP*iw4(E&tDwp!1o0okflkAXUe0`MdSVaN<5cJC{*44nf;h>wR*oi@7=$=Ap{opr#f-#lp8a+M_ zvx%6cr54b9833wi1}kxCl9RJD-KW-+q_iN0p())idz@rcvrnBn=%?#nIczp#vArPt zX?%nI^8rcv7SmPCk!SM@e}eA}t#?~`aSiC0YC|DbjKf}EUpf9{hJI}!1RVZWbZ=|x z{%WG+1?*%wdFXU{ZnwuI=R^bj!QPz9-Q&5$e-Ael(!QPjAX?g71iFi$+iFqQ0BkWp zbh%@{SvkcVHiqDfsJ(>OA$XlD+P}pJIm>OeT0Kq3-e;ayXdKWxC0PBQKQle;XX&fR zSV&}HnH(80Ke*Kd0lSZg@R+UgT1USrO=U(#MeTGvx_lG70U*x3{n_Ls{(#tZy_bKXmfA8d_X{h_tf5=Y2e1PN>6`8JSX6zoc zSFG#w8x;-~9`hWbC(H0*QMbf0AMy%gE5jzjC>IBl_Hg(!ECq6SjiNVpFPCQ(wPERK zG*adbsj5Oy8DN4z8{;aJgqFT_YlLB6_+|Bk4-vvBuqi`SCEee{;L=3uGCDxSySceB zkk=4Kz6fb#z~w}UVn|694l+=wh)@lQiE)_3QJ`5dv)IjlO)d6oFkw?$8QWNi^cfhC zBSo+XAd$fi$r2$!^;r6^_TL*CeSSW5>vnq22eY=dacOF5VgwH>)ehfo)Mx=(j7dR} zDt?8WU(2SYrfX=kN=ituFk5--59w!dIr)-oh=)l^QVF59cxgPozk8CBn#M_ps$oI* z$n`(7!#X)>A~RUSpV9Ty4kcEEeSxRfp9}a^Dxv<8_6m1~eW?NSG^o zyYY@jL!Ca+t8R2HFS>i3=BZ62_;}CiX*I1%Tw)NwJEA4?t0F(2cc{46BS7_h z1?sZyJl1dsgQ;&G73H0SlXA4Dr>DOkSB~E80UmT2H1yuH(oD4JxUKPJN!%l^RvrU1#J1OgxOv*&<7MQvfJglD*bjMNce3W=5Sl{D@3xoTEAsVgD0nbAT(+xb#o z8t+F4{u;O-9XeYY$Y~Z!Boyi2C-NZY`w(upyWkuQ|Ho--1gdO7q$+1JLp5n{dvn)k zn8m$P^3F1pb$Uu4XCsw8lScD-F-V!}?+0@8$nRU$q8t@1-|YN7J!V&j#I+BM^{~Z~ z*Gye)!m5#W+m)}Oq-pCZf{&BRKg1n}lU98tt29L_c{Brsh7yb`lAd*{) z49GXu<_ON^{4?FhMF7Y*;tCWH{ry%1E4+6cL#bg#l?w6Dg4vqz0sS=~AO2y$Yd|AYw;Aq!W6T8hVFd1F4~h z4hkd$NGJh92!Suo`OP`UnR&nWA9$1NN}jTxwfEX}t##k~d41PVi|IVa`4cBjFzINk zo18d7XMf_vN$fd#+Lef=)MeV=Nk0>sCoD2+3+@u|!J8|mdr4y%r zCZT;#ymUQ5_vi766N0q=6DLk*pZuS@*{A-xOJ|>b`mf`Y*gsRA*S${@V&!Uf4|2~y zU*5snQ~bdr?}v`!L7qN;CQuBLryY7aLLTr2d3t#H$p&Ocfza@U_y7GBmUS37tM^5r4>YD#~oOY&k-30>ikp}<*0|UharNq5` zodFVZa&mxMk^o6bF}nM6a@Ud1CS8E1^92-v_}A5`Me_FzpG98JiGn(vnNidoX}BMH48eqK6^HORQ+nl z_vE=ymXo-1y5_29RQFZVa&MTZzsbF)TE+I;)$_R@Zsb0_BBE`2SzYDi8DrclhF%Yo5l1BmLSwOE{`+Kf5anIO%PKkW?qeBM_g*C?%Z{CSc{xW#)#ovlYJKg`? z=c&{{UPZj|G-upDa-(HFpx?pe^SDq-p2gWh+MVxT@@iZZl{Zk}t6=z-(w;gQ==0TG zhUDwk8pI&M{HrcMRofI^xLDh0StVotNetrrh~u9rR64SrD2(4Ru66&}^{fBP?YH6+5y{$Lzs3GbMPKIK{K4|ZBl5)f%x~ zIyH1jJ9>?lqIQ6F`ELU{zwt>xzTO>P>r=&#m8ffZ98@Za!wLzD^q6k9ySP3NAa5_n zpE|>+Jz4FT?~`+9s5+nXSCu2Ac{^4#To?E|2e0LK?(QJy>;pFD#MI^~cRSybt&gl) zfTF?uX>7d)_^F=g@`~gO?2^y=yH5Qo<>w&bWj$j8HOoUF*@a@2_wv{0!#f(ZcHPXE z%T-Som=(WoM_=Rnn}Sm;-!}KtYXk3c4k2&)y7ajLs#rdMzNLrU6LwQ-q z`#Ccc7{SR}SHCw8@814Z#LsU1n?ZybW2>lLy)Adx%Fv^Y7J55E=)(6$2-KT@_C*yp z#(ZlYfOqSb#e~C%vaQ=#iExweaza16;oBxcvwK)Tk7X%K&Y`d`L%~SA`Ge+D$G*R{ z_0Q9X2E68{076EYm+{kIMWWf2?zoM$^1B$Lr(3@DB3cDc&;M~*8k}_~?H}?bBDt~g z_O!mR+KU~NZ*LP4l%d-q2b{Nk?$&!w3!XW@BpZ=y%diI+X4i`0j1#kI&^>_Q3bNVz zh26)?;#hxAI3CPVtM*?5ni{g!#GVmw=v)faE%QTQ^hW}X7|gR4w5T+s)buEEqglMnYl`e@K$5H?7A<^2V|RK;Z>tG0uUjZFV1(Gi=l_qQ>vO0 zNRJdw2E$U(4;75u^Az`jjM!yDJSG$gXFe;3fH{ErE10FBZSLS526m~vtIie^T1;uJ z5}W3(!}~W;ie0fh$#X^^As%MNaOD}1)vb$M+x5;1eHpQ?zYJ2|v{T*eW7?78MDB9Y zrW%3S>-RTuSWNPcv$`*~+uBGL)i!;2!YLnMA}BV?$7ex^#(X!mIDamG=YwYPrJx~e zJ^{UC($dhv%kjJ2Nn&v9cD_@{8T(bRl~JJ~Jae=ppvepD-t|n7sks)&C#)g4UYE4B z#1i|49(HG>9ZJdfpN2ce3Cq6Uxs&C*oHW42QkJ`1=P@>314yS!wUe?Z%v(;)kB-X- z!K!UY-0i1s6RyalNCoUznskqr{LQ8)zV*O^gcX#p$-5Gy1H==3~HJzr2Zf()G z;LNT!%&!*a3etf&3;oXddQZxv&DtC#W6!?XoKWhMqc}tqCR1Z4eRo!jQDJd?J69n? zlKvFEJM!CO%B}=FE4dPFJr@O~^n#Ad#=5gdDXCb#i_I=4l|q&9lc1O+?AXc2gPKa2 zE=;L|i(?m~sH15NVuq0>%%JU{6_3ncmp=)^ed@cKO)S`ne`Q`h83&sU(Gx1RZ%Y%kX|{cF0Sbm4x|Y;fFFc-U zSS*-sD{^l;JS1LVmw5Q-epBcj3Vf*DtNKy5Xr5+tBE!591W-T1!D+%=WV%4>?>MW> zah2fjWM@yL6i3Ga><2Tj^0M{)`DA-m&(5X%$A#X1Aa?d0Vzqmd#PV0aMUUCeJx12eWV$eq^al(*?^Y8Ayv;A&?bfLvCZkj%DIoT{g;ZsNm90det+ zKD!36HMCVXfE(l*XqSwfuBbH=O*5Bt)(3=pD~Q@D+lV34y5v`fTvbqq9%W)IH)@@RAYbC_pCuXTX&bWSEPLQup zLTP(Z6Yf9uIdOTv`*y0sUV%nk*uz!ew?6a2vCblqWo_Fq*9MCokyvRtOI^0U>q334 z^T%@lG_2KRZ;d5>M(`l43P;yeXVre>6V`u?l>AeLuCQ5nGOT$v=uxeYWJ`gI^M$^E`w2GDbA{qomet%~1F zPfb1c@--2VT8*1GEAlve)c_5j_^tL0kWx(De%Lfl=MVr_2ER$eXir@(_RIKGk7Q?h z;iBTyLrq+gGHYX#^-yd-{rxZJ!-*5}oF)YZP2+m*NM68~W^VH9|W*dRk8t@{gj z3~IRVFZIT$a(mcH-_={0X-)NDO0Sn;e6^Pv|FO2+E$jg|xyt>FO~PKJRKBT|Fqj`+ zHsPxt!xisf=%e|klkC3;}vktTi! zB!v5I_%X(9?EW)_E22wEx`TUMMOrt9{oB&ETzIiZ6oNmSbJ4~cELQ*Ufyq;{e41&o ziNNxL>c(~mXw3A@W#RYtmC9xERara@mki}a1E+zqQ&y8T&VhjHkr0^u>hYVIfa!AJ zV7?R)ixP@r>j&jsD`D|?#r}(xrgHv#w#GkQw)d^tRDYK_<6x6*|?T5 z$|cV3bvrHf9aJK4UH&Gvt@hhMaLr?hZU=cPmn5`wMoIbTEJ~v(vF5_Jk)*cqS(i)9I zzl$2^bw!7_!i?P|dxOT=t7ir%pGVh+{CsuVMTeW5KC1U0O$6U|0UhCmiaBVbxUK%H zj0x$DeBu0iZ~TgK&dCTLUU`mp}UHh+OuQJt9mYYg|JhF6inH zj_H>7Xm5^d5~vozf^%R+9nCus|^91fbxJl?K-1BLxZT?2xFUqGm)j}F zVRL@J!u^edxi1)0E@3b^n9_HNOJ`;@7L2y&IJd4 zIFw%_J@S8BdL|^Xl-QdfUcj7*dn4i&I)G07-a|QnKYoDTvR=3-UDsZfs7N}DvY%X6 zEWfr?Az+ph7CcRg+6#8D=j&Mz zCV79aK6~r{{zOO4ln?XzaZz{z$ipq{wy^WKsnU}atAX|Y(0=AEr^~BKFJttme$~DF zBkDKWUhAwY2i>uN!|Wu}grkqwMrquAmtXnrZ0ekYmi7oPl@rBjFI zg*}_i$x#EHYw5Fkr=)e!S@L5ZFnLQil$6PBW2Yr^uucRN*i$tNPtP*H=YkC3*C&GI z-{a=I8mT_mt+b1lnU-^3F!-rDk;;1{$I)+q)2R5gd+iUO?}U@ho0`Aw<{D&c|2l1z zoex6>1y%=$z26l)WIv{^rn*PzHLVv#a^nr~F)#JcR`=h;#yOsS3jcmvK?c1Om+Lz7 z$l*a{)|F_U-?tu%Jy^Danpq+a;^;MVrI#M#f0yQm_AOPx8w(| zhZ2bSVClPs7iFk%#d5^$SO)h<^=hVBi#$KSZ&wQZ^wdn9>g|b3#Z~Tj@frJu${LY? ztm*XdW(S8N*4{v;`KeTg;n68+zMFI2Inu{I&l{)fZVPe&lxEwyYzm7<4?{(|pEpTG z)hMQ0-4}ZJ=*P~LxTgyF84cVDtYLA>w?4)_J;O-nX%7F*ydo@z>h7wqhjpX6U-< zX~C@GIFpk57B+`1BZji646}1*3nvY2Mx493cF#xcU8xz^G4drkKIe}t9;@EpMLv37 zY?oWy&hSIgAq^w_A;soRnxHzN){A63-PJp|SFp@AV%e81H?8lP%2J>82b0BN>qA7X z%*Ts(Ho=j`-D)3AAK5Fg`tNi0lqll##iur@T|<6>J-e6*nerLdndE*-MvwON*U)^k z2vOe{SHt|z?ts~F{rVIwuA_sGFEk1chSzAoBMDSj)P|_Ov7ymGQ1a;bVz*vU=hm}g{CT$KXXtAQTuWr@%6%iVm> zKP8ZMQ{sHTKTk|w*HLyF^eRw$A22YDB|9&r7G+7+g|T)&eZCc5{ixjW_64R9s@WEQTKRR+S=T9Cf!;a29-y`SNkhqkE(?G+c`-@k${VCPM3x~D= z`!06J9dRtf$CT({tQlCyFjYP%Djqfixl8z?UYEXJ#PPK3^(IH;^G+p7e0;0bw{mA{hSm+H-pXX;G*j$ z@)>ku%s~g{C>v4E>8R*e5z@t!7*(*DRu8p8Y1D z=39t!-N>=~U9d8H5`?9aPDJwbFY)zPcRQ5M8}paC;gbSwlDEsqKN9k2mcYs-`R%xx znT@=QldaQq=f}A(9;qr7@1js~-Q$OY*4J{1TX78qudFJlrO))5XYo#O!o@&;^_=rg zM`c_(u{(>-R|%fZ68Okf*8XcX^_&S*A;Xuf7k7&vJiT-MFLw{BW%R8ll7ZqrWDKWG zx?g{Yqm|0}1Sh9JQybA*x_y0oE!Z+2F40gY!_K}1Z)*3A4%E%DQuE!u0Kb|E87Lh(ydYptZ07>THqGjjKXEYO2mKzEMQgR6gTA1ndWdT zC=GY1EQS;hN02?IW>T_oN#oC&Iw1iR-{W?Zwh(hU*kPln?M~5-)X6dfIB?ouCRWOA zlu8P$A->57ttgXGd!#_jh<0Hr;E*ZlJ?5|#rbXD}p%hZDtkXFk#1h@})}+6oORoe@ z;#&mXAK5%~okt}>Cqq~AIhk>mJ06pygb9?Ht6RQ8MMnKzC~jFw`2{=Zn7=?b@j?Pi zMX@n&WbEszJme+(4a<1opHEhTB)8) z*2(Eluho1vZesQ5lt{PE6%q4+9g5^eBb#*CUvjMZ?D!%6%#Zi5SC=Pbi_2yA@p>zI-Rv*sb` zYt0CXl8$3duU=+grvCWFa05>kqz)-BmfcbNv}{hX$E2hrbahGnv|!Gf%b??zO_YIY zzMEgjg_*nCfodPuL;4fQ7GB9GO*JfL0 zJt^XHZ6XXswWf1{^W6NV;fEjhKEJ=EwJ#T|c=%*RTZLouoB_w-ABVJX*zz(gKzn6y znbubmhxm{Q_DVd=HhLPTwNLBw3Twrr=aj;atg8i6illTe1H|WHO1cob+%KmT>HtW6 z<)GtP{zx;9F!tlwd($NShs(tg0dEz;2^%KmC4u1z&l#`0*8#n4aAFIF@UL^en{wrm zLh2t&c=YoM0b>8I$|3rUNqKCt&)^ipdZz*W(PF1TwfDTTuu1+arf-);@A7_-({J2u zI|ynjw!3=O?D6=dgXXMNdssoaoJm=b#1L=fd_J|tW1>-Y95H>L65b7$jdfv4U!RQU zwh}J({0UJ3;W6HU8*_YJF+B07Fey=NB2L^yp}G?6cKLLD_qdpiW7j}NKod8%3Co(O z7`z>XG4jCVsJ-;i>VnI9Cn<%Jbc^2$;2%2=q{~%}{S8je|8N4@ntx*>ym~W%uqa@z zDWkjI=h&BGOj|WS9SJ0D=qI@@e8efr4*S-o#*Y87RU*gYYL!D~ydrwzfUP_~B1!wH z?rTp=Eys*N z&DMy{{u1b{sK&1eUtNpPi*ky}X?tKf5D+oin0c->9dF4%`4zD}d`VY z8EHVB`hq|K>iY7pf#Y-P2H7-xb2xuLl{w&29anC4jfDz=uPxI=K4Ui``TBFl>1$bj zn7-eG`m#X5d8Z1bfq$2f-qfKWn|N*C7xVTQcS(9B7j5j89}c~Z8@;VvAMq=S{BDo# zh2i{72Ufznc_7#OS)m`pb0>Y(jjs&GK@D(K39+i47(*96??3Tr_$jSe?!>lG(pStt##AYOI`CU}{9}o>*s4lDtyr#jrO>^?m5MSO zq-vo7MdQe}m0zPF-hvTpZCL7@wD@1m&MSY47X7nobg8-!;{K|(tvJfo&(j8XyuG$f z1W4ui@f(XTcSJ-EZ&;B zzET}bO!`3Rq6O2I5y&J#t3u3Vv%k%I@=^4KgVG%nhZC&#v zwi>Y8%1l{`(zayk0hiq~E;hwV(m*k{!NdGam%By{$6(zM@vAbeCNvD2efM)rR8)M< z22}J43IO1H5zgP16*5W!?zFc(!b#4PQT&UuB*hyX(lK8XX58giW1mC+Gt?sze*cyt z`ISDo1bnF$sMh4`=(y5y`ZSo%F#Yzmwh&UBtbtgHA4*A!16an>`lHzSCxbxLs+vwr zA$U7K-zW<*qg`56WRxZDGCL@A@KMUHc|oz+ke^4Tt!FeiXZZz2Z@>@KwbWqi8S_rq zw2+@9RnVqJLT^ZfWV9?LEC+@<`-&Y*qLN2w&wyaUYBf&fITEvj$mg3py-0<)3(egRLpO=S7-|bog^x)%S z1!mpEJC;$aL?6n++^Z}_!r?&e{Mwi|88*=3XY{7CZaom0zPSARf2P6#@rZmrHsjlw z-pCAI8VHdbf!JlDv#Y&FJ+-@I8mosJE?61?Xs(LF>5eU zK#%(i8XW0l2G=8`T_*0V9&d2qrjKRhf>!QkbBZ1BMnvL?V;IXYyRNm3(m03HYc2}p zb}GI02&UYlDOT|y;gE=G?${oDy~P5nbQHI`bXc0h9qYB$Fz+;NevwOF)SHRh4epAQ zaBZ@V`j#<@PZB3JI!~71tOuCmVYS3M*JS0aBclGa?e{k!29Et{b*gKPS^DJ1X?12B zYc~Gcl?MH#1|GB!!aT=nd!5^em0%dC+wN_7!S+52YC>_9Izyx?+3lq4{E_Ypq2%CF z$hn&XEj$y8gVj5n6;?!}yFieA^HYNJ;qK_5Jz(ncBQ#+)qWTh&6;$(LpssOzQPCaG z3F_jS$WGPn8QIt^bv%#@CwMB1=#ZJ98+^f=IhjBTw2=Loy=hKAZ>{Dtd&Us)-MU&| zM;}jSJV*yxhs(hX5ec>%)|Gzg^Dt7I=fGXco6hb2Muq`#!5~hlz3GmoQGE2ioBrL* zF9gN|jxh%xWRkyQd0RfQPV-4T?ARejsi+y%?9ox`{buj%vSDu$;+?&b65!Z<^b>}> zvWWUZez-D#l~HorLGK-58=-Px3E1Xd%d!L;15@oTLKMJgUaig+L5awMlA2$7PE>Xi zO6HO)yoNdrnM2$^C;^L_T=LP)ey}=Rf*^J-p9CqNT-a}hv#wG;wWujqlgI2)HSzD8 zoif4*TFyM}S+}ifU#EMSBD!2hoKrY-;do~HWP9#o?%WMpd~$TRG&nv)%$-~5Mc~UY z7dRHDWI?vW`%0*n z$wfjnEt*g=`=b5j8f9ueJPYRixFUHl^u5%4Q&OEG2>p_Nd+Z+EevLfD(Lo5!t^xlQ znCqCNxnB{<&l%bDX#B4HyE#u8zEnH)U$;zi8;vrkT$-rbFCm^~=C0+bwhwyzWV9r> z3ewV0YG(xUXrm6C#aK4|*k0iy>3zI&W~riurxH2NCI1J{Eh{3*dK%C>kBJIGPt*L& zz*}U#FxLd{ATuzL#UnWn zG8LN&JmG7RN86Zw_gQfa4!tXxYTWS0tWKyusr`8!ZfwiC+(&-O4}hPnM1woaaq zOz(JA6ZYeaZ~#nZu@I@f2Rk@JTQJ#ZD4Jsvf|60)578~Ido{yzf6M?W+8FOwW?iE( zGQ_9l*~APQ*4xJPijd|5lY{#f?FDX?gR3)xwyh?;d+?8sXX_^uy-e}x`8?tqYg>)v zJBMwyPy-ekzly>iKBu_7BL#K*_zC0*qzV{OdQxS>bL!gj+?`wIjdsEe)2YL6_tF)| zv<49O?7i9w+SX;kPW}`Eb9>rG>F*Be$VY*z6NXcDZK^OCp3at36?hF8*0!VflHknh z$F#aths0^7Dmtd^5TFN^`#$Jgde|Hc3l+9Moaw0hV@fM}esSEv_dUQU3ysJkVm;8* zl`e!KzBhl_zaQ`BIbEATm?hj&9pj96*nagmGHj1*IoxOrZ6ZuL?OCsEEwDro%T-6` zP^~v;_Ck{_Y*N5i3vIJrH%&d#a%^uhl$JwR(Bpuqg`R=){&2Gr2<-k<0)tXAltPOX zO0Xu=JliVla^gwvsf7}Z-fDYxKhN&2qSJaH;h|$Q`BVjZtRUI`A$E=Ji`OhqmFl%N zrxJ^%yD#8tTiuzcvrqY&5rK2NPx`={MUcj(Xo$;vCnuJz(AClBmZXbXQ6{at=Yorm zRjz)3Wp^o=WUIh}ck3DyDYJvr8&- zPbI8lV(dJ%+8lcml0rAyX9;+kp;3cv)5i_hC%wo*H&RkEh^3U`?j~7R6#$K>hY1U; zx`<#7vw@M9E#X)}B1c=bJ(of`+Lp3cj<3yfA9uPyMoqq)GeWw!nLAZ)$b=XTcLbmn zHj>|Bx*`aqxd$8b2e9vS->9}on0;@v!hv!gwPd9Z-8yMrADlw}M@SkaZ%$46d8Qs{ z?RJ;MkJ2h%N2Yy0*lcqDm38eVTlFZ zpzLk1wViE_^h%5U%Y}1Q={P(O&+R^(x?)KjrhmL~k<7auAZT>djj?L>XzC|!i=4*$ z5g#a24$#64cttymA*MGy1L5dm-QoqES!j6KnR-78T5+5T&hf}>@?)C_wrTKeKzX~& z3cu?LyZc58dHA)i^*g3R(asBY?Sf*UQ6ISSThf-vG5S;u80vXRp_9!JCNd7Rr7Cp2i&R`puz{&4ADQ_b=G+p9eH#tuzb14sHBrgzg* z-SU=y4u6cLzQS}BkjuKcCfKm_xtChQGQVlmM*`fBdk;TN6C~Q13OH|=bbEv_kCA{% zOavEdMnfye>9uZS^N;g1!&w3s7E~2_<*DVD*16eh8q&zT)$XKgn&vM@n!CgctP{yE-I>Mj^tBP2eqmg3t(%aOUQ^BLQC+HHWU4NyS2k zv5viXzj6hv?9SZMj7{w((^cS7|JHEQ_jFk??fKY@&<{0A z2x4)t|J9t0aO)(>)WunV9V&yfs0ti@HKknqpnZF4&3iH!W)Dv@M!jUvrRy1D0BtnE zxY9$B?Xq$@B!gHISs5^CHL!ar#K;$;fUfqNc|AK{s{%!iqiz`vlRg_MQzci3Q8jP1 z{u3Iw-EzjHwKIx**ZH$)s-)w^tA#x-2Y(DL(a2h^o@o&Bavfy2aJkoVs_SY6a&I(! z|7^L~qM^VWHYsGnoH&_?jlUvdF)1ih<3#nU@tABL%P_BSox8nhOOY5HVC+9j?P&F3 zk@r~2bJ{tJe_Po_CDB!j-I58tX@-RPOTR{AEJ3qL@own$ z(bU>lIX}!T%8<2qQ~rxGn}#`y_;EK%8qhmtgU-_Z`I1zf`%bcwr*fgerJe*~0a@Gm zJJoQ*x3k5BD@7=*2Ag?9RPAZ4z?&B9GuiFu1`v1WJdUqh9a@I@i6QN$ii_+;FpNmg z%)+`Di;BZ(FSnQE-4UG}^p7`*Tj+=It2Xjh>ke(rTgXrHQhah=&Rn2O!?`aNU?dhL z+)G_SquLBtYBQPfqz)bb)i2X7iD3p&214CwzL-AtpmG=RUGq|V7x&hb=@Pq&<2sii z(OX39j)mii@jI~G;`%je(VJrST-S}c{c9PtH6^Y!X?ORB ztyXh}$Q^rtJV08YF2+7DWW#Nu5_aFb{DF0Y*QP(qy_8cd1B0WxtK$p_72;Xp^3t1g zIBXsJJ-J7pP@xszmuCuJq>cX=CJ74R+Hn*@>zR*SuY~-Kw*8ciA%%&rcoRNIaifs7uJ_V;4xQm1+|*NF?$Vb{itw zQFKo)Va{%;fF$KZOkH$65|Tyw*ltjtD7p@t4FTS<2vPYtYzLh#q)GpAw`4S!LB2`U zYun|ZOB!+Bzl!k^*{IZ8D5(zs4R~xkf~!(U6gTgojsg*b?TX5WD}FXy_H4~apEW;x zuX9H)^wGlAjaM*!WN^X50D41Or#{+-gfpNW%}c+8Gx%=f99|RO zbbr|>ny`Yk)$%-HJGgjG+H)wets-&IeFz82rm zhmY+kQ&uhwp&Pa6ge=Na*w)zn&W3p^Z-YOMA7ntCB&fxA9@oSkm)SY<$UONFo}&XN zoYxwF()L#mw3Y2@&_G2QM-%T10i??gY&b~!p1*rLyd-bjMEcFmAX;8aSDOrBbN^XDDBFRRjoq> zw4s)n-k`9jo$9+JN?98PU7M2!crI1sNKF5Q$m?t*%n&bBbZb80Xt+#l4RC2Uc^w|KZz}%f;oHgmUGyosn8Ft)~F`OX-J!eFh zdlRc_4nth$Pfu0(WMMSyR+0kD4Y%n}@C0(l|}=;VXp!ThORRk`YDV zG2t{E=p6v4M(DIzF83vhxU^GV)7!|nG66}y4H}AFYfEm5A8&t5h?1W#X2;lO5nAKc zDL+8Tjh4GgT(~+y%Y7bp)5SFZjTc#KmXv$je%_GetNpad4yq<&z#T6ORg!ZZ%0;Gk z^Ybvnr=AdMMLv<@A7a|{xTN24c-`;0yBfa!GT)HP zyBe%3y->AjCWJ7|TvA>=Cy|x%BqCsS6+*y@mul8AdJ5$>gM$rDXddsNt*K{VpF6+6 zZ^=k?A-IS%!%D^`zeV_+#V*>BFmzG+{w_X{#nXTt8@ecgQI5tDl*+;XP0h+}ID$?Yw;e`a)?_Q&ondM?RT%fhH(Z`%=d}kOQ??*IM(aZxWa7=wu~`+#1BWA!{mloIKf1%&EZ%JJ zTcRR})@&@4`&<5cB?CRpCCwIQLsctAXje zP!+AuQT%d-;eDA`@8Lfb%WaR2K$jw!K~==VcAyMVd1MBaaoCDI@NfJO;^-HRx^RBK z1U;Gs+beU#&BYG7VjEdnkT~icE&CBCor5_jZ7ux92+ge4Xqx{#TX%e?;j`agmSia1 zC(F;Ten^bAADRSjMug&5IJp$&1(^EIF{Vm6SIgMxzf5qVi*WL-VJGud<%8eWu|{2d z(CpY7AcwqTH3XcTYVF7=#RyUpb+yJGzpp=y zRyL$<)9E}KhPAMZn`)^Kg7c7Mr>E3U+s*8{3RU^gb1Q(kgJn$$_v7Q{a-MHHdXo-D ziVmkZGd$b7O<~m^U)UQdbM9YX+VR_Z$6lokxAK^87x|dn_+{@JWYR7$po;J7N@Zhz zpUc(hhK&SSdM1XRLZq)dhjh@ZTH1buNrwZK!MLIsok*~}_uQdIz~$?B?;oZt9m8g0 zZ-*1o^YbMAWmqYDgydKdc^GEZ-tNd~lK=*A8S82}m~8ySK&`C|r4qmF>A-_%0}-Tf z={3DiiFv7L;i8km_4lD|OPmcnMkL@R_@3WU>o{qxsDEA>_ezQ5+z8mEuKRVC+3~0h zwa*Wrqc_rETyD)~^Z5bBc5b){dbb=1TE?+)mVeL9dzUC|H@w%MYXD1kl7ek8*4JB% zya;$EHCtibIHHD89xo*^2D}R48q?8g3qJmgTCe;#1$tH(fVX}fv$|8s&aS0(r`O5t zQ>&}nbAd$ZCsV60*813njWpoWDT z3_6RI%99Ef08!?0)D%LQN8)-2t&6NS4%#S$wep@evrSp%BF(5weee?5(4Q+VgB6!U zH=~sgQnAuH(8c}+4K4IA<^ipngO(}Xi`au`49&+^evWayi>zSR`B2~X^7z3E@9_>y z0#DKO!UGdk6|qu_@~HJSZLM9`F!R%X(fvTsLpqZGrRM%YEYm7F9)RQ&kU#%!j>MR9 zBGO)#;}A!=;|-tPa3>xTdnW~9@~w@)f{`b0vPibbiwEqFhL>Eo-!VwmyHD#5r>Y#j ziUUtSadoD}`T5CB%CuOcpaYT{0RDrA>!Ti}ojg9_;(H)Fa_xtItz>y(alf$6f3QuT zz4Q6H3mU;Yk#CRQD+c$NO*2OhvN$FrM^)q;!OQ<0N~A=YPBm0*i9~PaY6S`fn{K0#kEi{VVQ){?L&%35TkLP%$ zEPi5fR}3KmengsJej(piUD(AFs-o<->z#8lFLa}6)}j~<){>F?ELqh1TR6AOt5Gc3 zevdIE_H1TlFyweXgqW!E^8NRLCMQFlY8013?G>q>M8zE+fK3v80e$PR(BS$fL^5|T zUt#0O9YG!T8za8f;#WJku%}mDQ7Ut7C+Zo{^zr+w#ei-3SeRl4 z)Nh=Dw1WN9axjXuLVUEOzi^2u+pWCTwowe?xewR%MnHG`q8y7WK*-h zW(3Z-S&~B2)2tM9#xKUzxxO4%8OlfGc?Aa6jlc+uz&!HCs#CP*g2u}|e_8U-^1(9p zUGaA!nJsTA)tNGBUMn}u61!V@(kdfI#?=1mW-gP->R?+M1T5b4p`F74m6n zBBHKsw2EWXO(%qPxx;H;DjqFK4P&1t<8OT}H_#fKl9hH&3Hf>!UJFc%uO0Dk z!@AX6D32qJBs^~4h%;m#a9B}Z33Il|A#pi#L3jM92f<=3y*p_E`mF>td$NCKO$`0# zTKcaahQM$hIZR5Si$WhWXSsk;=1fF;{fy&ngn@G=uxKRBdWz>QJy51{UnRB$-)uOS zzo!RhX1;|sJw8HAyKD4Xv}kd+0|s%3d30gGkM<7f_+gUDEF0dT|EK$Q))OedxeJs0 zcG$QeEjzXl({3bJ*WX&frc^jchE*`*Kd(;~@ic(6cSA~ISsgqfDIrX(uD%D{zVy76 zQslp0moT6k0l~0Q8b{~+%A3R1CyYm8$dDF45G5OYYZwk_IVi1-uMKH~k^fM1QMs#C ze)b|~LWV-%6!_6@q@|k>{?=w?@f(EsD{7&tcbmJs1E)C1klQ(&x^2C&Qst0Kt#@I{ z_R)dM7e8J}?(`wYry-JGjk^qD&VLv6SHCIstl_d`M#(B0$w#Nu(p^fJx*1;RN<*T6 z``-yj-dcT-{Z!eHl;Q{3b@u51yPV}`p%qr1p=glMszeXP$ z6PI9hEW3d7vaXcJ&M1TG$NET$?fR~*IOuKXkBp~`fkS)dWfTQ)`ka3d)xzkJgjllECpsbX0Vr7l*%Bb z_UmeZPayR{HCgBK9Z!}sm>^(M3c7k(&RGe%Me>q{yG6yZ!1 z9s)1b3O|k6SNn;?52&kXWm$R3Uok2{W=KuauVpHonu;UL1T*%9Vz0@eE~J)iq!KXA z&ZxNb$;=-cLeh^pI zih-1rfS`nQBi$hln~+U+cL~ysN_Tg&>F(U9fHX)qD6r|=bpMv;yyraUJox?peZTRJ zv4&#}7kjR`X590h_kCU0eA3dfq^_TF_tF1;*gt#p|BW6qlG(^Pd*7KCyYTS85re;U zCwj07w4i2H6Nk;s>+?Cpo6i2PMTOLq91g4wP?x4Gs5G4m@ z6)7Xjf59z(efrHW?VbPqD4@;$FX^dB=IlAsMAtoEGW+#?J8q}#+>Xx9G=1}u@Votb zhAo-Em}b-)t5an>K;8J>=%60_%pSseKk`|G&r3l&u+z2xIsQm~!uB+abY3Wa$4jQW z#uGyl=YE*iOI|PGr$juARC4LD2(Hyq-%x25F{lBN7)_^_vGhr!puz1V#YZt=|CVX_ zV-)^;ctXraD-oU^N&3kCQy*6CIStXw@TwT_VzPCtT1D}@c+q#12pY_ynlQ6|Qix(O zq7EPwWUV9m8-%EVn2;e3LAB&Y?2<3uj-=|P!+%L>{858S(#%TaF!fvq>4VQ9C-WeQ zCK^uyntu}leibS8&>x8cV-ws&3~w4u<202 zdgoDOJb*mSg;e)c-f15pnO`%uaP-UI-A5W&-Ou|FtG#c%@C6KNWHJO4RZ7&%oohYL z?ZM?b*5dG_EXdxo_-U2%qQJ)Zp?(s#Vb%5MhU^Q@ zBxBALpZ?I>vyJ8bf6@*A^dI6MjU+J_FN5t7C#`4b#84zuSj9dvK0tgL|K;Q3z=?MU z(i#s|({0du6#0qS+4VMEjP;4`8Y&DGz0rwlaJJcQMPE)O$*M(**%=>QUl-8a@e+qs zu-tjel{*6SWLMw*&zzOsri8vu_9BYHY*zqqs_Bq6YqOPVbn^~>qHLDhwv|`rDIp+i zP-RjZu`!yT;NIjEi45!eq{$$*RzBOHE^uvMqV=}2WuuRBRZcOOh}ZAG4PvCqLxZw! zAx^oo+nae%Pxd{)N%CAf?LC8a+eOp7r*thl6@h~@x*&`1Bcz}$u0~UMhAmaBe{C%O z;VkS^V7ynRQ7O@)SW95qvRq>yZCra61;9+t2KVCZmh%`!e)P^nb2>9NbGe^b*(Vh4 zR9)UwhmDjg??G@5z2V=cK&SB)-(s4mO=FA|5n)O0)#J=L2WAY+X!d1Hm1LH$Y1 zZ~Y@K7~gTt*6qb&uDU+O9&5}~C*!@f#4Z?SsW$GTb!2Q7jW1VYxYqIPdTf!3BY0^a z8cVICRHRf!Ehw8pgH0*>9{1ob5TBV5<2}1hZvq`%pGpaQyenkJX0AodA&pgvq1>9D zYFVyVA|t%UH{RYDB-P4On_GnBWX5B^QXq4_f!Elm4Qd>FsLiHa4jz82d81XOMXOpw zVy&S~=7$Ue7zfBRux97II7pxBwE3DK+Wy?kf%xTEJh!92)^S_YNVcm8Z+WjD&Pwy1 zcl5mbDNnKFVIEqp@5Z5c%tUSyziCz>&M03+>Rl457)j|uG>!3p85A=jG6~;SFXmw{|-i$HEeX6tOrWm`j zDfLq0D0I@U*d=v_iaWa>#dHn~& zwjry-ElqN4;F~K~h{8vnk;9+vxf{yIJMRVofOX`9fTxJTlQ%j?On_<_$7{vhcW<~| z_9OWYziz={s>?=0>8;?+mL+iI2UUht2VeWAX|#%$F;eu#y^*gfxU?lns49GZ(`Hh> ziNzdItfq2}w>R!92VL%<8@kzqPmE@H5gf3fy{6My%SpO_I&-~$==A!(Wt##)Q2jYYsyi~ z-TG)wd7BMHo^L0qlxo}qSf1m;v|S06p?YeO%MAy2sd>!s+&qQ zt|P3mVrimQgO1f!rT*}|$4C2A=){>Uchk8C&=7=)vrOr0ao^~L|X1t#9Sc^86 ziOf62O9u;dx-dK(d+rxX$T@7%7tdbo&|Dp3G#E>BhXnO&B$@^Z0bV)SUiZ(HimHt! zGQ(3-{{xH0Aw}aCJkuA_m4;o6!%&?XV!ZO)TE&wT0qq)*h3^i4+SRn7#n7{EJg@8T zjz^7;-Jb%|Irgrx8*v$~cYARaA*F6N0ZZ(ChU=T4*hoqQCN~cPkB!kaGr zQozzKB^?O6QXZazvV zUa0-9U`eo$;WNPfeD;SUhi3|wwp}?3im5U@ebo~w&}uXkufSs5uQ#IrIa2wJZ-)_x z_kBHpgJ~q0k-&i_k~77qKXU0x$3z?lI`ESjjKfF+%fP21p=+8`k(|^N2d01#-z5m>I|Ie`D1N=^x%-4UC zPyRKO0{wweWJV2se0LQ60D>%?5B${cc9{^{F9wxJ6w5!p=C8M+1CB8fb^mXi^z2_j z8-n22|KivEYAF{W3UnZ(k9)Tg7-&Fw!*6p@@3zus5n%g^h+KWQ624|Yc|rc9#&=ez zdk928)AGGd{4*-|FUMXKC=bN;jOO2D{Xf3zf4l0B@%;aru6n0}oXY14zPYdrdI?aU z)GymC#x16soo%ZojQ@yI`qq%WTmSwF@J-df-?v_95d%1FRPHC+QNL(y7soF?#2-HV zHIIJO_)K~p9gS3b2Y&`V8~T|in*srJ9qpw`XHNEf1Bl`PVwkuc$}>Nq84R^bd&pR8 zmHv;tUosW@vwOXOI2HK#UcOukqbhr&2K3CpC3=?MZt2tYy;i4ro)pywjK`at(GtXa zNh?i8LO*043hOcrTCT;&3xJ#|FT~!qVeBrn@=hC9kRnu4XWqB-4D-0ySW9m{HCViH zYFro{A_sUK!%+Wl;s~a-V_#e8_TuE85#v7VN-`(`4c=snmWI}(be`<3I?tkgiu!`m z($dnPQFY0$4R1%PkJqB3K+3u)N*hh#Wx=BTV7v$ZP&{GS@%0$zLf(MplrEc%#iTf3 zEGYrai&(#qn^+pb(1_!C(_0KlWnV*yh@Q=HZ%`a<9K@jW5SE{j*PAP)*pCQfGTKhW z1UJ0UqiWnWM=wgMc%8T9YYb9O0w*Glp|X}tBQ9y>VPw^ztgWuV7E zi2Ac@t5Ug&G9&aXTS%c3^bB1_f`=KP4ng{?oqGd_QKP=8vIjdj!pShI5dfN4nSe)_1=I-V|k-0-y zFkOO1dM+$`uwFPc=2+snHaRnC7U?*6Uop?BFkc&gD`(OFdTRe3$i8(ZkdXrn<&ipB z%R==-gA`S7&nt@+vn2K{=N>@8tj2OygR$+3rCG*14iHHVmC3jX0hC?Ek~uAD0c3DR z-_fKrgY96dD>zTa+}vAHlSa8HSNogyla8j(;{z#Dr#8+hc>+``TejbNJWmCwhxl)^ zQQZz5o3{W0P$cu}W2iwVZJ`O&!Ktyf+S7BL$=}T|!^EOwJz&c1cvHG>OGDBh6`y== zORRo)**9RNs*jO}s-D+=?D;vsDI+&6(^~Db5;@oXc;S?`_s!c@ z_co2!k*)kt;l#0|d|Wz?b_RA8;6v;S%%-VHkl8|pclxX4wp*Q(?FG8yt;sl!Qd?A` z^W#Z%czbS7RqsO{OQmwk`o#q?Kq`^kwvDx8bvW5%=ArNd9$V;n{G7+3tbL)z`%?)zD^YySYfQ znrl$7X~=@KmPcf~R-lwiwF+@v8K#1j@izCymukWQ4XMbyf#h!YJx@K$cC#PG>)%gd zg*x(qk9m((0VA^X;QFUd{otio-&R>1Q-C+c9-8NDYqQL+Km;?@Yx^;?7iNswO*Pl4 zmkxXB(KL#b%^5!h5~v)B$MtF_&InmoU#Q#cb^$=g>cun^TzZnA`3%P#x5e8Z?GeTc zEdUxF+)p&Djc|Bjd+6Cg+EpMU*(|D$sB3Eh-4;&0R$-&ku(>Pf#@LchS2?hxlxv6)?6h$=n<)O8St6<9BvVKOluTKYB3VSZ>T3BNeeRG zH^%<+)}Cm!4JVJ?m&fq0b==f>oSMd=Isi@oO|tcD{p=dg4jUfwsT<&@n(KayNXmOd z?8PP%p5z6q@;Ay{=(d0mSu}IbXoC`2A2okApkXd-v** z)6JphMeoNv*PpnDVu$G1{Tow-AxMegwSB3R-T`v;-AkR`(}p9HZHi*^CQE`3qcNr$ z-v?Y>pC*6K&=I`&@=LM>-p9mhoYI(n+`1HZ|G>BJe065*G*wqtNU$F1@#Ym3Aj^`( zVp8SZ#GN)VnQ>X0c^L7M-$M6A2p-dLK4m6X`(w+RD?m_X`n2I)`H=UGy5(XBkiVz# zL&l5EcN3(OKianL`ziPktSOY@xz*}%UWJoA;Cob^7=z`WVW)%bJU=g+m*Ue@mVfHF z(?wBzE}XUZDESvn4Tx-^cntEIA;bcaA3F~H2Rj#{x+2Ta>%l?!ZO5$^T?go~lX{!4 zfIdPbu#*>(K`vnxG`Y!WJ@koq<+*(Jk;Dz}&Cx>h=;ekeQ`b+2LA$5kJ6!qcZq9D} zT^p(Etb-ScV7IKEp5M;vUcE~9sA4^=b6w-z+aBaQd0ja-*ZeW3>zAYuQt1Tr~e)fkZcW3+`gD$u2$fl9;JKx~BJoK}CA=C8JUY z(*)%iG`&Ss%iRi`4B!uf6R5NI*4HHgQB70q(Nwlr+t+kTMc>LK!qi5c7{`c2A2b+O zzbMr>h>%`vFb`?r%ilXMy{#*KVGi#&xDv05>5XZ+fB$}OY^^;k*gPGc34)w?Aos6MIXgm@~osbQh&o-pWVFiUfnxM#~sRVY>*kz6_2l9!uB? zw@w*9!%ZM@O>y~%ldzOWP8zS@c6g@S?ABOhx#2eaJkWmaYFd%ax>uBeW(>UWmPpVo z@+r}j2yFU7jNVQM>LFz)ew*DpUZS4n{}lgOQFw=Y(vU6JR+ZS-jwpwT~kSVBQ!gN8$=I(aL&#JSCCI;di3&DmU2c4o@VZuT~! zYf1P<`&`KU+&ZcOtMR%yS^SnKy52E(V0*fH!`rl}DlRX}PsYV_y4sz$zTO`Q16rJ1 z#4b`rC0iwNTXpNr)Ec5V8iHOtdE#M%0N1Pv+NeV{c}bQvMavirt1mJxPL)-l)C ztpN#hg`G0Yg5)zErC*2>j8?L+YAZkHU9^{w`1_Z%ctOL_W?#p=t zW5v$8gPX;3ugG_UAzNZgj6q7}I$?`%d5Rnri2<9MFB*hZSOTnR-xZw38|;=ToA-@b zm9-$+%bbOzU>#8{guZ=tsL22iGBPsQ9IgP*8M4e0exy7DNX8wxs@?b9f70DxyHHXH zRfDheoXHM8s!bzP_3~^g34|@X*TH8R>{yS_e@ZwWl5W_0iYbZO#q1f%kbx#mKVCS- z@%mE-ujm?#UUl?}|IwdId9+{%Sj@2;_9Ie_W`iOxF%V+69V-At*79U%YWs%{x`7;4gP_{!mIW-zi}sXo<1O>q-L5p7rgL zcmr5mDDmsXHuv(S#@wF)ZAMZtBZE6B)5?3u0J$rcQZ_x$W6e}1BX2XYNe56I%7cHs z#P9~o+EgaxNV-^lv^}AOIgdLU&pt zosAlGCK`e_q$&k}@#Dvj&$d&e)hTngvF@Kb41oYRDjltNW}j-AnX(8&r>C6gl2RZa ze4Jt2KL{N(nZNBl{I!v`tiLcO-wZys=*UQ*I;hCvZ?N$l7v9?w? zTP0gKlc&;6S6B|~(@AJsZ4;(;@3Hh^8T-ivR> zTli*sudjCb-3y*~#bYx&>Xy-fmF{B`1M8F0f$Rf>2jiY?PTr(DmIgr2QKE4 zV(noeJ&0y8mL_1UXj5SqkAKG=Ou7x%t210<+??H`N@jJ2B8yTV=&W?rnniuRXbpYI zo{W3j8hi0h2002)i5+e}-5YargDS)~Fudo&NTF2M(xR5%ouj1;Rcnw*Ws7Ta+A3rV zh6qCaqG-fAk@W_Wy~mI0;3UZReW!$e06-}=#~EU!Hs9i4u~)itA8$E@9JNto=q6)2 z#0YqIIgPIYao;HMYaV}l7)|#Ve$RsLuC2bPQW<(}rU^I(C#AwCX+G3SHOz!8nIx8? zOy~@HNLEr#P4SLu*|0KS%5=u4>99h$?JLU22G_cHzFx6UKB3Hw8+OZQ*!F4NW7~wh zj>@ur6t4FX)yfjpMcUmIh{pYx#K1U9eYn!BZZkq5S?ZAw3S}y9c0SgwU<*I?>n}0t&TKwU zNYr0CF%3~`vavQtH2!5JNhpy3S!3lLofhVko%yUAPU|yOh?Exn&W)Nu3V~pk^efO} z4!c0p`Ud+2z zxCD`YHIU|aK0(zOV2ziIl*K%7+?p%Qu}2?qQjE!=?UTVIoo{wjV6E(S%MV{H^2x{+ zjhZGFT}f-;t6{h_W%gXm&p>9R-H2X{yM}e{NP0~8KP7&X)_n9CX zUdUuK+B+$#*z?kM%rTNqRc?ImV!Mol^-cFS9UR7BOr9RqKXWXSv9M|FHl!n1P<0Mp zQ}jBCFT+C<=X087jpur7j)n5$AtG5^fci85x2zs_q}~;IfOurOm0U<$QGO|v_Ce9o z_PnaC@buJE*+<)4w@i_NF|@9Y>!pvv!`|m%PvYw^UbEYXU-88va6gWshKWfhFiN$B zUa70M9<2|@bu3l6hHzNWgI*#d&C!tBW*OCy2I-Sa_X&Ds2qCc5EB-vL6Vd?r{4fS}I&33T=ZJVF}jsfAr?2kTLOz^g&J+ZM;3EN{~ z86BgbDzRr#r19S>O}?0&U1rjHUSW(no?9og9HaMk+nTTsL)U7p+aXS9zsxN>erC8= z?~mEbEG4v5(G8LkF%G0|h5_pY55-`7E0lBA8=|jwI@H}8QF^4iP${kJ-f(Jg? zo?d@7R77pCd8w`gmq~sdFCI>iqq8Z^9TYKBDdMgkrV!L_ha=EohJN#r7yao|mC+ds z!3z687M%PRYi>7}HkSJdE(|mDGz18hPElVBQf*|tgoN&)U*)=Fj_T>3XONP7v5cXT zCt6J;e>#%F`Dzoi$i>>S)zi?@;S*JV#GuKc>gznPqj+@)Dak^K($}ogWv1Y4xj{Ru ze2OsqM#zNA?fRm&s-MM1*T#d~CYmPdfYwGF%Th)(#T+!tq1?qaFjot|xpt4{W8U)v zJW}lM{o@12?Q>ilsyd(qrx;2ptgK5W&}8X^K>V*YX3Ov2Pk94#)1dJ=_TrHLbx4upp**@m zEn-d16Qxpc5;$K@ws1#}mM#?wi3ZLNbJpYVU>MpeW&$j)~{k|WTPw_CG+mhYX zfBy3y9Wg9_FF0Y{G?f3h&E$~ z8I$gMP?!G4yZv+TiKyUxYMty1=97O^=RbA)Rq-Vl3jYC@)o%-5r@Ge(I%54s^xu{G zqmIzG2v1KO=K5M}M@$wGYXqr%t`^$r3oSR6zCntlq7~YY@C!>paw(hHuYWgqfXX5I zauKU#=jdzBcwoE~71ZXDwM5961rJzFZlpsou2ul5x!DjEPru4ZS}ykp(4}x@s_QQa9ALV=y$~mtvqRQ zJ@lWOn^PhyD=Uj7dGn#0{drie;nI21p3Z(x2C|mN({2Sg~{ z0w@(}uZWDqovmKwEwiD82PTID#x9G^@@==wAqWTv{Ww968}a}gh;MOrzm@8x7ZJBV zkK=hd5T?V}FoeE4V3}`m_W0zIg=bsvr*>)L_v77_0)v?{KhhfmJGzJ|l$d84L- zg-3Wy2uj>Ew$kKfH=FERg{I{Ee!prA`9sAi31MvmN*KTkNnT87WR%D!0pt!gILgm|+-ItPmKeVcs>^`l|`G+E%52Kq%xAohX?OYiq=It_8vct^L`2u!d>4 z(W@+9q|wM{+_QwWVVEv>Ydh2Am=8_sQM}2uoa8^At+X~?D{E!jUSoC|w^k_WK4vlQ z4Sjt*J)?Bo zpr)mE@zu9Q{1==ykTzT<)>-HC8-myGxU^f{2CVRn{xA;_x7sx%l* zf?$OS~pVw95UPPV3e3PTpM7_4Eh zm&~bmEnK$ZSR=*hON_nQ1p5%3wdL8p*!#Zl;^xSIF_*nRBl#Q0kW>(MhhjW4tScis zXuw_((n6y=KkHRqFx~=MnP`5(oiABH?3|5i!FSj)b7OZcn_P9tNQkc`oe_b9QNf8I zpK(5#Sc$!{M1f9ws!U_CG!t26GOiA6OPLc`OdRs!8IlWZY-gb%ZC1|1*iOw+Ri&Do z`3~mow0xbidi@PFY|9ZrvE)()$VjfBkXs#b0Bf0f_VlUM{kP#z^V#Sn;1CJqfCg)i zMN<-X^AR6tnX+~Ur}vjdz!4@R;Bd&4em`50^z@|>=L4shi_PMZu_k3!=`^0WUTi$7 zb^(w<8*#wfVinnjA!Et#pL2eo*l`M0>#2sYnHn4EvalBgP5#6NQdLf+FB&rhW?_j=v#-fe;#aqA zEayl;N~Ei~8HeWN8*#W}|`Nkynl2dke>lsP)u0V>ZC_}1^2hAnpB?^8TwN`nmZv|El zt|p^lD_)!QtuV_h`_A$LiPODA1z~{ZNlwV`^kFcqO>&J%Co8HQ5$>2Qme#(|+6=DD z_ESDx;X^Z~%a+0xS4d_nREDOGYB!&bDg&Uc7P~mwdi`Zwz}`IJ*DJ0Wfdm&G#?wM} zPZ?;-R0Z3p*c>FiSIy>~0}q`29pLSk=r#W3Uu0A26h@4C3N*%p$6C}4RUUUKbm?6I zaAEv}PL99UIUzNK_*h1RW71$ecbr*WoY^l?E%eH%OB8aV#AO{%u@@G`wY$mo(OO*~ zhqW0M=TDEPTvBLPB&8N(owC^zh!uAP2S<6KL3D$-)QhoWtzWj4DX<+2e#qD^K=UuW z)AMB~)4_Ok1se*3Nvj#IqV1D&-!sCnBR=*BuE$&|>+SQ}uRUii7g^Zq>y~DzYr$8e z3z4?`7M$s;Yl;>Zf%a>XDCQ3+AxBb{9dCS(!Y=ugl)JYykm5Y1=`9uM@|w&We@Gzx z(V2b?MOPD7d7Z5KVE2P<7)W*f+I^m#+w#Oiqs{}3-RfcN& zIe1vZ$!t3!6u#-}XZXgbQA*f8l187bbKYM+Rh?=8X?!cUZdRaodAHY{~aVe;p z0)O3-j)Sx{VXJaYqg3FdBGcxv|2d%P^el=<;3(&0vBpTOi}m6-hg6J?oLSTD6kiAl zn;WdDvT$~GM%zbfE{I0wo0~4_sG{RNTZV&37E(?m4D*EwpR9C0}U^SVIYOHDI<6kBl!hn9!GS(-Z9zQ&enL5l)n5W|sKIn+7t z-8N@nn$jI@DADDek9gcwx_;bv5<@DGp14R^&p1u2X&R94%%*hqeG!q!)x7f2P3jUS zv^VV363sQ}v{$MURRAKE5FUBJWKby325ZJqJ8g~^O8KF{@&)sUC>l9LMW=^v^Rpac z%ilEOrc}c1T4!;S0U%?qv$a-4oEvxC2eHA{xvRi#ZdBAKN?UNuqs_Rc6JcS8%06;$ zuI3gB!%nesqBP}32uO8AO(hhUM$2b&ytFWuMeu~U=z{u@Rin;m9>^N*hST>Fvz^)6 zoR7fUR8m`kZ6LMQr%0(#NG#-8u2jse(W71a9%QngVYRPuBL8-fF@l9$r18+v(RsXY z_{NJ>nUwh5rvuq>nX-Hi06&1#Z+$1NIV*a{k<48qt@%5|{k{?#h=rhOGG(Hs2Q(nP z^^E=)IX^4fJ3XgWHJ#Qum%tA^I)u0zWeM>6kyrWYj3}!wqib>+iTGV^lAUziO%7jC z$v%(Jh_%aBp(|JHoTKTf73E2p6?*hX89*s)f}~E-ZMH%j{&IX#AXkC1X8?d?O2@`rfiSog%MYOmX}MUi5Tb?yt?{| zkr+!N2Uqj+L&P=}^lUh#b~U&V+=#$#HWs|NKwQ-WF&*ru(GOSHikS6hi1lZ1rIaTq zy`Y&u9-(r@7!xIWqFHMtEa>S#VLnzNFkZCNtHP$KCN&&|!x*PLOllN`YBwwbNks*;|Q#t$aty{79dldd+AQMryWT>oB3 zRl2N3dVO(X028{O%;JiwTvQOE01m=IzEsCw{%IFBVmDJVjZz@&S8g^FYggn2M5)bY zGOE{!=wmdZ1#9Ug=_7ri6+Q!UloQHSVd84rO0mx<)-{ zchhRl5|rQFHB~0jujInSBge$6Yl`N2J>Tq^|Lnb|_xhW`LHr}!w+7P=+YQaMnm|Hd zqjg5Mk-&UShc}?e$1ftDLCgHJykG&AJ(_F=K!`OANwiR=D`cxAu)MW)=4tO81L)&Z z4z0m2(i*qM8$j{ja_rQt-4C*pJo=mPp4+zu!Xf;0EMcXvuP-b$-2by@`9z^tIs%c3 zp>*P{Rwz+w;o47W)bj$x2QJEVJw|dXtrnF^n(}3I*;=^TX*l}yROe82{&xR>q>SIA zGdQ6_f_(K>7bf#Yb4W1n9C0@$Ul+r=?f3&$7pwK)%eqIoK0@0Rde6_Q^?a{3g?8N* zQF3An`jNxWQR3f*Oc0)jd7@!;hU5u7*<0V5C>6u@N)d-f5Gg8qxofA-JFytsbEucf zY()2F8}30rZa*H=YIN^zZ{_ROHJ~GiDpGbp53OQEuY|v)MR%O|2FC2WZ`c`K1L+wr zo-D*_)*zq_pxv*_bBVgwY#F59(1YG*I`tH+f9Qz=~JTkd(B_(JT)Lx+%t?xnOo5Ogf_a zqm9$-khc#rze2-5%Aw7HX&M;G2jeAe^vz$R(otVT_9MrqGKh)}HyExFrQk3j`wVv} ztEdD)M&LM>N8C^=LJIo`hR_bNQoSz-7NJ3Kxo=&=hWRe2;tM#%R@2}M&xM98-heLk zEZ1~~FQROZ!Y8$DAug3Lx46CgKaE^kdylCni!0SwiO{yXYfEXg$+hRMJBZ}9&QX_@ z)mbM{XFGZRS~5RVA>2NKguIk3abOSbIzV1{)JnS4@VN4goOdceb;f%vw;O3w9fs@p zeN6b?=iBQk7o-Qq<+>b)r zB$1y#FOfW@do>XB@ZJ1+U35{kU;q7Zv;#uerA1wW;6j(SZ`(NHXw_xta80=F$GF&A_Z^2`lzi_N3Y$`<<*TgS z^WRZ_KZqIu+N6|>^wH@(6%6SZ!JN!$y?m+w&y|Y14C(z5!AY#G9$f|RiB)Uw_61an zdlPEhmgaT;(gGmtW(;2=CB>x<)1H01OliG=-z8{2TcO-|U#u>~*S9GFVMZ;=SiH^# zb1UpqNd+>hht#6StZZXV5F|ux+AN--Zd)@J;~Q3hfcE4JJGpTUw40sk`dv?|lyWW5 zl^h*@-}l|(tQ8FgT-ZtyzOVB{3>hktpXF#~sZ1nS=EZel{S^!VG(K;GN5sOZC)8TV z`Mi?^DmJ|NoS2Zcsy<-7Pfdu7SUt#)3%f228Zla5omCRFWP#nh4UMBD9fw1*IbbXW zj^VGQSYo26O=NlwQf?eV9vm&a1P52;k2W%(>AH*PDlMHs!iW0!I~{lN)?E1c zq7qqvq(C_ahV%1AT({HBq8nIgOGnW9L~YE1Cf^=4`~@?_qYqz*O{@+e`b42 zYAMP{5r+G|veO2TW2GezX_ct+gJC@>AcoE`5iL^D6+{s&@+QZf%(~8KF@#o&>`uDj zx>9xA{tO9q&p-+v+-^k#XA9DJ6h=ON2e*8Ov9-%x4VL-lTc1=`u8n#$RZ(A3Y4UdU zaJh6IYc)~zpHnlZ&i$jQYCNXNokKKFSBe^aqw zg)eq(TVhmlsiZ-(Sol2&Oy%}TF+$@rGEyv*qCFH7uc+i2VmLKZt<>7I8ejB4R|hZY z`WZ#0NR_eiQw*$^dRP<8uMdyL)N9O)LlYX`uPI4UOwY@s=rOGA?9RJiWX^Etme*QV z3OmL%=|Jpu+}IcDAqQq!Ds_GV9oQo!rsOuUlHsY-Hf)N))5D?Oe&hb zXy?UF{uhUi(TqA>4;e)On7pO1;7COY=Wnw)zlA@B5+m-u z9C+g{hGf5!Or>p@fP;rOKkKM?yfWYdc)U}!8@5FQHnK}!NlB~ABxMrpu=Ap+8H|dy z?UwVuZ%x`xp}jfP(}LK$!dS9R6nN}Y{n0L!$7^9Zlyq1fagszHFg0Tn;v~qox5=E= z1s{$WHK7`D(@;asAc}~G^6V7h;X$!jQbZLLE_(n?#{BA&c~)fJr{i>h$td{Y+ol9ul-jvuc_|<~js$yS;vuxgVe8AO3iBWWb$4;A`uZL3P@|@MQ z$wlhSNMAHXFwG+vpmC7h5mU+QFlENR71^O}XF!qOee)n-+)5G)Wco83lI8SsB{n|% zeLo(4O1W;EimRi#6iu0)!5d1$cko#Jtj*`PlBv&vrdbnAXQScvvc2>&3>uD^04$0c zk43Xw)h-6hI7O>m_N?i9nd-8qCM!|c))lvB-DZx~-tx3|<>R4;6w-o*NVdREtn2Tc zm`{J~xoCv`P&z+wuH96DL)6C#_mBhK+ZdvTx!w(%wIeB~+N!V1_&sfsj&*t) zV9E!MNjk*$Oh9OCdN*H=leF>bL1846^ zjk_ataA-8^*yO!;dVO{AXf1to_<2Wb7ELY3OEqxmR73?K``K+b3dk`FtxW}bmA%^m zno(!02KPzttKI&fN%ND)54Rp@LYJa1WNv$^$l7mZ%t;%yIzUi}ug|86p?SG*+qJ;v z(#_Nxz53(ETA#>;A&r%xEa1qscMQL`R6Jb2`^OEros($OI}#W$A{1wBn+mKey)d^B zWHsu{icCVH)eFdPB396dIU+^vD6xogc&+qZqe`DIR4ny>hsj#rzGo0SAn(%2eK$p- z$AWY8DX2~HvtC+pWUVJldZp9{s-aW?^#KCPYW<*Yu9TzM^34`0dh8@_iBbqrUfR17& zFlt$;62SQkpH-4kON3il@RCjzTP` zER4hpYOIVA)_>;@2=7-~VVaK@#c6!w0O5_B-vqXE))Uu+4YkG+b}hDX&p6TTr6Lq@ z1lFC9%~o{iA9$a~k5Jy`##WA*d{1#cIumi!vDw$4b(2#mNKGr{!I?@{t1-aV` zL{pB_#LFHJk8#I%B`~Od%#$N3{y^9#qhj#JaPxV`e0!9(!a!yG9*?)TH#?=wczuUt zo_ajjE8S?xZPIYF7t%ox!nV|6)1makM#(V>KG=Admi_bClf@N1Q!`KKBg#(vEw6EbfgbsSA<19{-5lJE{iX4=G6we zAOJpo`SEp5G7C>#1KtMj5FPVH2SWss`Bc*~(juS$l*{s7@j2mTuw=?pKDww{X*_d5 zyALk06s0i4dz$pBD{s)G69QAY$0|(`vgu#vzkX7_*yECyxG$=u5l+OPHHS-16#TOt zqOV;USz$zhIV?c1D{{hsi~}MCPDqrpE|e_bb4}#HLlmbo11&=MLBI=GTi#Pzo7qX! z2s~%3eg4AV+-6o91KWwZ07W@Nb@WJrW z-)T@^CO@Cz;w|shw}xZmlGKccP$@zioiN-?ko{_Y9V2%R#F`EH_j#wEn6Gy-33W=T z`)~bm$QYuNPZq=bZ8XS1_aPvod)bVCdHDa#LkZ;~bu=uAh3iRYMJp6}U_$z0KQyT` zk;*R}^xHaj%&PYu%n&~l^5VnxXNV5}$fP109ZHZl^aO;b`8kXJ zx38YxXO3SVQ*h>F-mAN(gUTJPJ*Ty3l^t#2CNw%0W&YQ}=&Ywa*FC zKt7e}xPQ6ff5yq5qvfxEv(tP;9QJ-j=gT|nA?*A%E$Som>B+O+otIf|6Dq-nzMV5) zsS$ry5#WpU`0qCms1G4i{PtZ!pDBSanfip{_kVco20T{#fArT+C-A~g+#cmLn3;BRI0=2?)+O`z~@7$1DyU6m|+>+o+aqTv$i2t-)Zj`9rCS3~er$nY~i3illbOs^#kP{O-s33T<+)m4RcKG#f1lcc$G* z<_wRa&Kba&Fu0E%u6udgE;PyFG3wN*?fuBgIa=va3^9(x=S2d}M@R+^HU_1qa~f{n z+s;B~cG{m}1^^z~7~f+V%}4Vfq+-F}FOIjQMo97iv(*{0VdE#4=JqY-=D3BJC#wEw zeGvgA10^<8_ooz*uPwFp)%S~%%Ht}9GSncldGYhlfh25 zXM}p9{jOWNT;Xi8=`3j)HCDm^$O&y+PLvbSa1f#aljm!&7mL*d4e8hpG=;^oN^le@ zv<7#2>i$n|m&egU0ou}Iw*0NsVe(QyHic!-h+n}9?KxK};0S%Eu zsX59}j(znJ8#b86D*m*C=mLWbF+2@GAWS{FF9HD_Z;o#qEO$w7koG1}$|j2j!9ut} zxQZKjBcTk21_W9qZ(I0~yhNCU7rqY}BX_WszdIGIX<-dBPp6x+$E1m5FC}{Sa$>1weRKn%n98=S9oF=65W6!* zAr@sWt}BbgiHl*4*P?fsqD`Gg<1Kw6hqjk61q%g)Xq-jyT#M%Dny1}Hbkx~>^i?^Y zQt%;f1*z#uo~FZ@HwBGXOM{Z}l6mqJJ*RSSN_70ogRJ(+>q3Odj4l=GpsA5OkYDK7 zMKS8dN!fWzZj$@%=E z>}gv?4t!Z&A)|<~W@$`>r;kzb6xfN}^zqY}UWgvGPco_;{~SK#WHV2}vp#f@rg^z+ zcl&op&HWaxbM^kJ5Ct zt8+wC^acDZ_b@-O2@H4dQtwJ;#DdH zb6@0HgM#sxbPC9DIg9r$QCB!^(bl&##*bYO@vdaOyyVT+BX4@O$qmI#EvB=BdKc?F z@vP^YLelv>#bHodu|Jc^qmd1`VfdVWCRfZ+(d5JG6<#j4z7r*mIlnT9;5ynOm0D7E z+lfRR?z}~rR31nFp~a_7F4G_3D}!&+cx&^u8tvCF{o)EJ^vqF%X4Qb>6kJ}O4QI7e zO$F0%vcv4a1>f`WJOJ?r@Z@Y*N`0YQt#mAV2#WSegSg1!Ye|D)08j6IJyn;-Z@cGC zuA<*1pQ>Wmri`Lm1cqeaWHP`km&+9c>S`P|r0wl`WCRb{O)QDav`=$u`AmjVn?)bN z*YeyP+wxpd;=i{{w{4Zb_YA1`qvI)`sDYaT`=ZpKqO~&Vd`TUxBeBnEO+S46X#On} zpH1)cJw-7?K8CAFKIR26ZN!BGw82BpR~NULLoeGXXkTlcAmtL*E#y_7A{0n;%B&nv z2SU@|M+q-fe)|ZEx5ZFSw@YtPXC7^{poE{G=Us%9M_$J0xeawO*)Q3>K1Xa--dd2? z9sLjzVLn1+YoR_DG(ssQWUcBxG9AIJ=W(_8HcW766lcMX3&3nkO4xtXwJs&~skZht1N* zb0*M~F;Re?L4W}TzO>Z<+c~jgQFOjm2@EvI*GWrOYIy5)@%}<9ncW>~As$P3?M)yp z5s{h+RN=4y!|YKEl*g?4JQiKw?x&T1bDybwH7T^!<&|Dwt*B8|xzNW`7OcDhIzJ z%d=O(i8UMG!}eWq&#JlC(%O~%n2oN7;Z-lAk3|9^M!I#sRcE-}S23$yap7JYuj4Zc z83A2f-(2S>a%Y<*b6egQHfvBt ztY;k+ddpw?MFAL?pJA`K_kiOS-c0h_()jgRhbJ9fqkmlA0fa?@hRAw5#>^F~;gv`` zK+YY*?t^jWy*ZqTfLfl8`d=fM#)t(5=p~ zns+o?gW`DhqzZm{5KwcxS^ai?`bI=SIzt%mC%55Omzr8#=HNct4gwqyX!=`P_O%vN zC5w&CbkVc-b8pmuXGpZ+2bZy8f0Xegr+6nf?)zXy9*OLMKs_8ToAzhi#v1^8@DWsaMX5V+4SN}im-ZHAL zCTrJD2qeJ?uEE_sI0Ojp?!n#N-7UC7aCdhS+}+*XT{e7+C*5!N+x?vH?-}F#VQkp! zz1FI#wW?}f^S)>D*FW^d3li*=5Dtc$3~XfmMF=+zrcGmc+P6;)H}gVJ$pz5Z=t_EP zv7SiUs|Fk#dBgxguo5cih7S>erK{Y7w%N}Jr@o2tMZ#cofL>t?)KrhtBkB{SCd?nw$)qZyOAM5@-LIa*oY?s!6G zx>sllp~3*BKV2_XDv3!k?NGEN3@Ag*oW|wK7hVZrhBDnCqoKb{px;e!bhyA?Og7I# z9KZ1B2qF<3)-|Q*1xIwO?Fm1i>>i0GrYw~0zChM&t83?b_js`RDXFQA>RP*Xkwmm} zMoo?+Ql=7ZE73zwzexQS;q~e9G19A6G@&5mRA(+D*6jS?^mH`7rfF5Jle5#FOcTaf zK!-~gQAky>yrj*4%i+Kf6lberB6}4>8EN-L`$=kNwCsM8EH^aAa6OSaE2#12424oN zNOIYoFB~dIQ53Bo%~<+NnqaqB1kriigrHJ#fy)iD+4_a7`RDdaAI)|U?>i-rs_*BJ zPW(#g`{K1rmaRX#+-%vL7fFfx-0P}7HLgE~gftK-9BQG7md5XJQ(dozDZN1vPUkJR zi((Pz7m#jA>r(jF);oo^PCNooklp(N$mn z7~F?2KbUDb2qHEDIUPY_;=g<#VmYG7pj+4~jsUu-yq@V=__G|@JFZG!Y~OUb!CI~q z*ASxL*+C6){4-taiA!6uS-M2u67ct) z47%|(XB&I$J)iHxUqleyF1{ii zVvFe%!duRVQ{WNRKo)y{9+0i>d-vBy@J{$U8YPTC7ntBPv-M&{96;Mp_wQi5z1asv zJHL=)%r^;^up+XP$>gx#b|U5?tv^RamEIa*&um zNq~ElM}w6(+$(^!35!jwF}`Hczb51)I*|a<8ET3ia%=EuL=a;Ex!*&LZm%XLkAolg zsui(i`clofIdSQu<2$KtcfXwxHSuuFnauUh_ZX;?<)lnajiDL5`F>Cyxvt)sD6v?I zQD2@O&78ymZ+U~mOey;LnhWJ`5njx?!Z&Mo=WZCM61K;v^ z9(g>=LNL-_5RVv$UQXH4Wr5j-`*$M_qpP?qk6*7go|-F$s8g?=GU_3)AJZc7PE>6A zXkTe}esPfn)OAzigp|#*(N7~T@AjdO#V|#t^?u4*YZ#T|BDp^&KaLf(ZaVD zQ{B$6^Bx{zt+&&F8%lhx*% zvW~Z688DgW9C%F5+GNF-m=W6DTfa}4y=BO*} zla}_Hvb_X+Y|3v)kPMVFBhji* zW0c;mfiTY^Ts0A&8KY2X9(r>&1SzHpH9}FCijC&0ri(m)w8W{2yUp&Bn@#)ePM_aJ zCmG|(h;<~>>lsHzlo-W23F<&*h4Te_+wF~658(Xz-iOGzPuDB-(B{b6dYBxRMih*6 z4pLS}k?WUj%Y9Z&QS#eFFkh+ieP;bxzK}n~@!Q?!HT393{7-b5!l0T0pvy)8U1oK* z_EkvfbYDDWgDui6J829AsYSOAkXFBUJ;uKkTk+>|!Vs5W!I^$(w%`=~^`6z~W&*S* z<+~r0?^)nU3ny(FZdVo??6czjlao+t>`ub50CV(vjlYIH0mW+UAn%IV^n~F)Gkfn_ zM|d0Ygbk#n!rh7DqW+?LIdY}^)91FY%`{w@myYiWyN{sdEiN!z?jI(HZ3S*=uZy;& zL6 z!Me1l9hoWt`fU?>hbQFdc}I(iD!sjmag!PR;H32~(RWdx4{*g^6%3n$zXiqkk7xVI zsd07_X*U$Jhqn37d!_E6fg%jSe7^-t2LePV{=x#SIc-_z8v-nV3A-d6;=S&O|m_ zG}%Z^(EYay_GZ~-xpVFuj}YV?!_`OI2eawOn0(1eCkM}>UyOXjlCi=?{?R)vtJg0U z8y#)M3X8w9jH?|e60Hk-=7N~K&w73^bL`D!h9}<_&)&XMHm>(kt-F^bCn+s7EfPO2 zHyv|VtdU4(@fEly`xU=fds+ncBzk{#AyI2=nyl>C>H!MS*k>=)jn?I`l18gooT-!k z48-FH@z1vUNzn!Yvy}q!Y@YlHL1D2Db(x|t91g`7%L5o;3~R9}rC=0PT3w*f=6xh= zl}{Yjg(VrGa^{6t40eDB$t<*ibBvIztikTe;Erng_16XNEo)q+W!+jdJj%S6RaG8Og{9hBTOLA zC!Oxx5emJ;7KLGerJ3Av9+ueoLXXMzK@YPN3O31IC`Y-HfN8&8D=zD+PLkd61+~PZ zd;CMf^HiBenq)d>wq>4u@s3?|e)7q}@rUX7t~#Thx16|VFx>4C>B2x!ZMnBDy;6xq z<+>*NLwoC-#p6Vn^fsvjBk5czHt+*cgeeQ3nQiF8bs=P`caEp)$THr;-SGh{SSxdN zC35!z>k19qiDE;g^tOeBw&OW|lqlWQkx8Kx=p{<1tRJkF*Pw#m^g14&Ef%OnHU@*B z!@vceH%HkH+#C+(;x&>Ek`Lh~2>I|@=#e!ib@mA?_!gZP?32a|46a2@6iY962^~%e zDt)$8A8dErRI6QD7h1{oiImHLO-7M45l@xjsHm-h#I{P?lF{u6h-fyZVXway^6l%y zCz# z!W68iLYbZ$V(UzmniN)*A?yi7Z`u+z^ssLhM4DIF?aqOUvMF}KM)*pO*qeQK{&m&N z^aIt2;3-d6=2kG(Bc18Cxr&Qb#j4u~J1b$KqZbO@^o~YWH7G=GoT}+fTU||H)t_!2 z7vk-%TU#}>j-p4c)N{T$Vq0CxnQo>;Pk{XR@h6b_d7wc-q*Y=tq>_w2J6qS?N{EN| zV>m#fy)_!t*I8NUVPYr(006XLo2_}lYx{DZ13%U$CETRy0uT@LAvZngm4=J1c1N`elKQc+#oHfYXjhBU63Mr= zw@V%8V+cZ@Rg0F+ZcbKm)W?S9`58WXb)boV2ckR=*`o=xxVYd9epje(|?n8y8XX^URAn*Jet@7wnRw&cy<2Q^-kkMjjLG zfq4-hKq6%F5cwgz_~dKcWo}mW(PtvjgdS(vZ$LycFo8wIEmVj+o_rktHoYwmEM{b^ zo-<|AF)nrA`^EIZd{;vhE5kimgPUA8OLx@>>95dxhXYuix_*sf*F)!-w!9dtI>{zR zLRdGz^QO>pL)dadw^9}&bA%MP(1%qT6HOLXA;PCn^u>~y;tipgYT z`G(+};HVtAhMoZ(b=glD6th>UmzQh}r_&j46oMEU4-e17k|^4IV*}Q5qit`=hTug` z7?;?PY71Rb{^sLk3P<|*Z!*3c&RCbTSR-SOCd{~Nh9w_5JsHtUx&HEzMCucj3kNOSkiFQnn}D=g(;54Car#Ui*_-&Q(Bt&MLO z5LK!G_f3z5Eo_0{B}wIita0n20UTy)9FQ<1oQFOQ9r*hnQgyvGoMTPB>uLZnOZRPluTxrq)xFq^x||Lo2|t- z^*Ae=#m)yl*izZ7z$@#|z<>RT;0vzjvj37S*ynkksACoMefIUQ-%;L9zU3(?!esVG zoHh}KtlEx9?txMLWSTHnWEa(WS5B_6mH5-{6VzXuv{zUHI3cXH=h=NadFj>-q27c9 zfdg}@&0iFAEPs!IPBe}-%TA=<{O<|Ks{;L%U#|ZOT^y&p?L@XYW%;n=ZkmX4;(`sA zgT-SDCo12hQ&MLKdCM#FziG}tkP6-m!Yjip$qb12dr6-c3i#3Q>Anz;tpAgYj~$?I zT}^TUaDPhyyHH=>j%W1u_}lOA`oH^WxbfvpK%F|?3S9&L_iXYLfizjYt>1x)8u`cv zR8#0|?7zdMueZoG_?n3x7iBEah5zDU|9YMBk@s8&i3a)aQSsYDK!K|B|K_K^%*nGS zLq9f`XLl5TAiL{_eK@-*m2eH+T;qkD+{w}dCc*(gk6IM^`(HQMzhiI&9Pkad@4*oP z=EjU$jqvvt*iz+gTxNv^btSq1Zd*%MWNbNo-|Ju){xPQiW1!$^%>Ve$KfiVmyy{Z#GE@ge6HHM#Frvg|+JX)d|4&pjgg30$$$8xx zZy|!qYw=r4f>CE^z~6lHS~Y?)P^@*i)s=OstxB)|>+xbee4Iff7QMy!MbGKC8f$0J zonlR`dC@u$SeqyllM>f2tO4|CdjP7uI=jcJ*8e@&@Jtt^$0I|`XSpKtf-<|ml;%}n zf_VHVsX+kA+wpW|-1}YNeuUCq3fz2JLIP_Vx2@#yJ+K#2kQ_)sggmWt8Fo3CFXjn< zu=gn>&=Oeqqg_4IdgJ^*%2m7eI9AK$JZLmpH9fntF&UQ&q63d|>JylxjI<6w5VF@3 zUeG+s^jS9p4*L8(Pns;G4j%9#s}rLi3U&_ecddv?#qu`3SSRFW&Jt(Z%q z&QfCICNy$C;X1@?qPf6U&~v?v?quN#pU1`(lqpyMU{C%K$~-+uQisvMX~ zqR>EQl%*jfBNJy6`6s2c*&2`p+zwe)dS<$S`m$qX%a3NIsM*`IC5ys9JPEcQezx5C zHA#K{**CE0s3%-)zr1^JXa=c!#>=~N|6sbnF_)!TPR~sd%yySL&wSBQ&?%#5HuM}l z)T*=KmgHD(qQF%@*T5jND9R z`g{~gT>1rBgAps)#DOhF!r3kI%$^I<&h)L7XC3YjwJIah%V+0?=4;o6nG-rXo4=P6 zY92~(K@&uQ3+^*D5y+gCV8m8I+BoXs9Ua`SV-7F=(_Ec78nI+*qGYNasn)8{)>bU{ zS0Ss-9ct14ALZsBt?2I;Q1QRCqKAtl&3a*yNhIIhTEB-S?fA(9J^e`Zy}+(evz498 z<4KuZL*O1rRzec}fybA_!R>IQ9Alm+${I%!Pk%$?;Qry9iOkP}2QJGq!X;3)rN#Bd zd*`HC0v_Z`es-Gj-^TMa$G@$Ashjw_yGt#2+QRXBT z(pVT|CZEk~qL6dSGb@5j_?es5n3B@G?utrBS)nvERC;v#^Hix0$$>l@VXM=1M4rWM zR;g0@*y61~saQ_FN3DjuR*zYWgl)wAnD6Xq!O)!CRDBb4Er{ZsLXuN53Co~F+(ljv zF_7&`r`9gt7w5BsV%K*F5jPMU%O2~P7nNc$zWx#i zV?U(o{Fh_a8*l=twe3N?g(`c}@H=M&i46Kkhm!@dqv)m{{?{lNv- zzo`-xdI449Jmxjm|ELmK0KKf=vuai9l2lr5{n2mv#to&Z>_^8~I_O%R zNv(e~sStTs%9GpEe*gM)Wn!Z}VH`*jCu{S4 zr*;&ZZMjgF14u6Yb?_||S8p-;SiSz6Sq@p#02?oHYBeUAd!1hu_J=es7grc@k44C} z7R#vK$ib5dfe(7KOMB%o+@N?dv+M>9{e0j z>IiqRRLHeGkn0MmqYQT#MTj@^jp1aW##j>Y^WU`H6^wH#aoAt-Mx}a6>D?!%_`$HVDA2QRf6d|FYZ7JDXX*V zDq*Dwo5w~C=3%L7gKQiHiUNw<>>x+m4oq)iL!JIeYH)86E)Kh!&&BqzgoHB{8ihP> z`y%KOzVOr!i`7!@+9Zz56cw%M$T~a#=0Qg5J>_4E#OeQL`o+bjIgX~5Au)ZQrSHm} z37P}R3fi}q_%EQHN-g)tYDq=+v!p7r<1}+q_pJL|Z8$dbPvgi!3_iQ_x(|BDY6|bL zJ7Af#M#oVWB952aSII{Eofpjb3|_4zohZ{jf=_s*Y1$p0Q(~%4`ZMH;7FfzD(ztw( z?Z((GtYD<%p^u1lmeJP#k9=~sr#w?0uX3N#rALvk3 zDKNX)Dr!YK!raEqk^An<<1PU`hx5PS=zQ(|Q7<}Oy_;_V!|CLs3f*;ia&U{vy@KaC zij60t_^I>DpOvon9=_Gt*r#c$+M>8ZZD01SI%_pQ2l+}JHVTz2vRu))=mpQoXn>B3 zX62ywKz))qnktryfkGRQ@|4UFt2P)_dPL9{ddUcw7$+nx2sU*$>4En;T&^2CVuMy_ zGu?D~LP(J#SI&{3=RjriTt|d>4_;({|Iy_-gvQn^?8gs;IFkELp|D)Nl7_wM>}pZ9 zCOhJAePW@g-w*|w%gLhTm%1;RMUk?+4>e}@m4)|8;a+eo zkCvt)o?;#`XI^ssQ#>Fe%ioc}nuse-KZ?KY*N{TC${H$>ZiBHu7>n=qM}tLY`nn1) zw<({|Pr2xLq^O%qUQaEG7JNKeeJf=b8pmzE$dtX+A5AgKgP}{1SBADpPoitPk;Ajs zv`d|9)i`|O3)F=UT4|eJE*F8pms!h^Oi4z`kuW-K<1cAQ60f&dQhedXDOhxi&e9&a&i`@$vep@-KB-PFW@5?A3w;PIX_#bJS0eYuYrpP1Fg}L`{@A zadL62Qze%@_`>D(Cv1p@^MZ@lxshBG=gd7j_Z#~4QVFIzJ%A54UKf)d=!bP$~4p-=(m52hQ`5i z2%E|95a_NZ&SrZ&kqZ!jt7){9u@OgzbeXowWS<-<0wtS$4F0n`mHGO8atFt(QAR>V zeQG0@Q(P1#>goP+Vaj71(5(`D2)J%=@Li2oQnX)Q9-RPOJ>t598}Nb~8uS#czXQA` zLLy*OZWY(%N44#HeF(h!3oBfBc(w9uIsduy7s{ zfC)(U>Ks9y>a-}uadEk*+@odlB!;42ERBW_U^H7)A_h44m0XBbYzUWFh>HNm4h5@` z{8tt#8(GBGmj6XH=Ur;el4JpxU9JL+T3GKiF3!DEQWQK@C`Z06_UKUhTX{9e=iBE9 z&xgH*=>l!{B8A1cuBv>~goq+;?yPt(veAY5SrtF$Du%BcnBiELjBFKgv9>)huT0!! z=d_%vP+bE{8i;`Im5OYs-{8`P5eeHfC?*G?M*vS>QT6OkguUamgdbwUSfe~=EwiRL zp=Q{aJKg)2U@R;8U&`VZ8|IJ!5IY;2%=SRse6-@Nt7)0JmX?;ouNf}S z6iTF+eTQ-<>#aG$e7tx{6DJo{ZSk<72;g&$76<6S% zkvLD~NObB)sZ>>-81jL-q26p3b}EbgqsF$R-HG=}>CYFjB|6UoI?)6UZ+v<4 z2eyHDChp#=^M}4_|_d4M}Ak<)dnX>>K8aM0cQ*J29bannu%A*q^ zn}ZW*lddx9EIXh)$GV+#ixFML>(>rQ2Te^qg4X6nrQnd z;BQiNy;*|CHfkY8kPOy)SXS?{R-#sqDsg9ydC%=4t}wrl1325plE+k2m_FeTAg$Lp zuJW05TJUeA6N?g9<1)k##8HktL5LLy9!8j5%kh(I!Ys3g4G!{G=GjHHKrKazw8VDw zu-WcuB8xOBlLd7P{6V47Bm_qm%Qq9|Ym5VsK+z-&Yo|9IH8AEzXq4Yu_@Q6n zI%NC4ZlrkSktziD5mC-HU>-A~+w(yxGM^VwXe)nD7Z@8GZmSZ}d^?o9mkx-HkjIat zfeTp|sZ6*Iah8>B%Yig{_ONWa-a|2O9<)|2+V|Lkef(m0%0)3SLvT34l@%L|Q(%}| zp+EP7I7~P-aiavi@nR#~Mri`-u6-gYBP6ByCc~dv>mkk|iwLrWXFB5i>*>_`W@OtD zY2v$H@b~SL4u$bSgIG`>SYG$Kcmt3}I{w~4LjqHCwXn<<6Y)S4m9!pKZQfkyb{RJ* z?fv@$=VeA!_A{@Lu8%uyESgPWVO#X=4~wJM!&eOlbK)TF_&(PjLxYOS=GF~52=5m{ve+wokbl6fG- zl{LS*083M8&cRcKtJmhBTkpALPgt5!QGuw~UO_e0G*s6Mx-i{c+=+i+JPm6xf%RRz zJO_yiOMzC3XdG1@N+&}IBzi>gS@LH#lhkBYP}44K-QEB%0AFF{y5(J0O2ElgvJ#u% z^x2Iho-%lpiUW3=1uB0}g=s{s*ixaHc8`l&i4NDQ_0(j3`Qqk6ZjcyZ|JSw@<}c{o zF82p|!)==AxruK8PVQHWX6hs)^~Wn4f@@#$#RZt5^RnCFS932lM++TGv9(Khbr7@8 z+XPiE+~dNSj8f2A9}xo8=a_{yiqX|HMmKruj_0!U0h7_9;9b7cg6fnL^9<{hfJKOC z(w{h>P`Uc{GFi%qPjYy=vJ{DIka0T2$#@R>2fgQNRaVlPpCIe7(4XQNFuMYsb(cPM z_H?Sy_Ri40q+VvTl{}5F{5D%pr2FT}iEypwt$KIqPpoE;QI^l9$84x%>K8%8dSZs? zNL}q9=m_wnX#>&d;{?9)So^+Uq!S|eB&-=)rIT+}<&BrmP}PG75h&Tg;7KT^NTXPQ zf%D~6%@bAvhohuID^WAN@muTejcq`V`II*(xGmzP3Ax0fcP4d!?{JkETw^uPQ_@$E zeat>pC3&n`@>4}{FuqiAAB7^(fY^fg;&BSIBX$@7tQWPgg)6wo-q2NMv2(fFjHLzM%Op0bWFV8vd`M)@hm0 zTrqgK-;|=9zaR=Q`ck{7O(1SfOH1p3Yi@a7krUQHG+*rYa8p0~ z+2cql#fHXi>j8;5G|H5GlBD~_?xXo2Ta0p^IM1dSkNi-MP6hfcEqpUZqpdh9WHhCP zNE(_J3yqHT`x%_JFz#V z5@+m0Ha8{e7QWUaZC@D@gmXX)^`e97eDuA}#f;_>dQU{gSBA$CSjBi492V7KI6`Zs zRApnls+SIJ6a+;BIh6(@O8O zVF|eMmoA{9>J$?G3d5%t>lmkxvIucdq~Ug2<4>T`$~{NQQ<)~OG>STZ1%wLNnU$L) zE=}q{K#v*`7jTdWCFm=kLMT0Nu8u6FGTu6%*Q~uic(JV&0Z3<2@(-(_tbL79gGd z0+&1@6Ot?pPU4zUf_Uavb{nD+JqfT|;f*OOyXn@UQCR9*NhRH{5(80(|m0 z`TF){)ZCYI%6eiC-7Arq6o1RmDfa4aNbbc_h^>!8H zL%!H4JqQ$6(*R1%JviUt$w?I7F(5|rgAs@={;rhkts~J;eO_I0_v&}Dw|?_-Xnx&B zr5LG6;1U^x*cyt+m9x)Hgh(I|X%sB%hbNqcROF_G@JRwPtX`sr?` zENf>@Pvo!k8%t*T^X6Dk(I=-f^uBRjXYdmqH;2+mA<|ep(JFy;)(f#fG_GiENfE>@ z8|P?taB{vS^dO|c%eh65Boy*`M}kL>4G-P43J7Qj?dBvxv-}EK@1y~~jO-GI7XRU6rJc|*IN~0e1niLh9wQPRp zJ`w4VaPySq;_nPpkkz9W0mryX=;71-~-jP=c3d*zO8NU5}xjM z=D^CEy_@?hK9)TDbnA_Ft!sMyELBBNK_k+VH1jpo@uAc2uG1mu>@r;Y_**?y41xv} zwfbY;7Z0wC-F)v|$+u7fa&KYlj4p3(>ZCAmqB=uUG3-7@8PtF?YuMT08sy9(J>}c( zQo`N#Mt5N_qJHM7n#P4ZUG5FSA#HKIpExa-jG99Cyrv-$(_U*U21!UHDKg|741Sx} zbio3X_WG-v$#}i{5cZxdIFM4Gb`}fs(!ZnK?76SY?}mT?D-({)h!SpptGF{K3VBJJT|zV z@cOB{JlQp_U*61poM&}}!WbZ8#G)Vcr-gv}=NTaAgR!^PC?L@fNcw!p1KJtE8!UO8 z!TsS1FZ9U794+lSh*{Ie8L`ab83Jv_14}$|tXxzhlQ6nfmFJ3ME&i{*0S3cAzwh-W z9t>Ezk|J#9FLm?e66JS9!YPB(MRe4YW@zsY4@=GD{W%mL-E zgeC2k*!&dJF=CLKdj`!K*Z=zVe>5Ee1elEGX7_n=xy3yS>rH8QnpoiZ-LH4O3ivCL zpEy`Hat9*18V4CCi3O+~UI);B92AcMJWFAXn1Lp-_ix_y0*fL>pbo$koaw&!^0(K> z0DZ%yExAnN6vkZ`cS(=GeYj{eu%2uWZtEdqHgk%IsF+dt2(LyWki zV^Hkc?o#J(8YxKp?R!lExs=|l|Gu2HT*U8d+qo`H&Xs?2x&nE;M?u_kC;Wy44+u*< z|J4|;JrKv+hP}^Uo7Rlg?L;-aJaQ!T-{%J$cdhMBAZDXwclzHPM!JI#I77}29mBut zG2oN$XiwBCN&oKfXTo0IXps$bN&nrPuaD%8j?hQNBay#5BTnGLy9sF=UI*_#+wp&1 zo4qwtqI;eEx6GS-=mVjuQkrz3E4n3*C##H=A&&JkHB8!#+nTJ*1FD z^%QT>%hoF1zHk+rc49Aebf78Zw%)% z&q-wIqFJX|xfVPfsHVL*Z+m%XC@s*D!?DxwU0~C}g)G&h^G&&Ot&4fk?1AS6a*rD` zV0-X3?=&jA_iVL{>z76SNqKmK-M&qQd&9*xf|UoT1zQPpq+qd710mOzadQMkllcZB zUCkS)NuxcI%C?iS61kVhm*4?{|WiKo4qXzvhd|#X}kbibSll=6KOK;`*)fcsy-dM$K`trL^W^>pE zcF3q*t=@ubQVQ+q@l-Jk{hqnX;8qZ*yrO<{ZnsX`PSb%)`Eq4fO?J$4JL|99rehzp zYjxIvKa_e6Etysa(rU6=mwlqM|Mp|i_g)$7_}LWnP5i|;;z`0`wJppMn2UCmc;8V2!WbdI98mfv@7tjiR`{q-ZqAzB zS#AX~(pH|Q&p23)wB3z^&u5a`p|hbZ0&Ql*z6YPF<8KpPKL&4hbB z`_c6z6FAuKA=ndO^DVPH{liH1vM8g8!@}orF0?Pl51p>|=yiH(1bNytY!Tbd+r5yK zPBL|F^zLdRXk|&AA2w=cGFlwqx2s7yf4Znd{icN5f@X@vtitF#*yWv9?;om+)MyCr zSv~1_qJj9qZOmEy41(fLti7kI%V_nF;TO$Z9OCbbCwYt67LQund&;zEpXLZosFdCj zz+Jx4nE^*&afFV((shHI?U2}h4A%Cv4DV@23s&w_Im8md1DDzud|oW6z5R=_kMPk# zl@sRxt=j#~*iZ(L_N#4|jg4M$MmF+(NhmJ0f4thoz=<@}aCI2BnO6IthjESw1f44p z6ltn2_)A>V08|5OSn<53uqB%CQSO=B7oI|oH(wN^vip=hfaaz%!nXbgkp)!^WgJ`@ z<>T7Wv@1=ydDD?+E(|DnhPxcp5TlsU^^}HYB{@=Ta)NwUU_z1;!<)oX+ZRQHFR9V! zE9gp-Dg2(+t|;+SZWU>*<;&&+Vxu13S2u+qR zd{mlW7O&JQtRQDfmc1sUwPlZ{zZy~EO2?2^gW4Tmp5KXstlt9xcfT(eZ_CW)qm5Qd zKIwErJ$c5#RlA&m(l0)ImuQj6jb1jsaOBze?Ju_X*lw|L2iwv*nJv@VWB{sKed(CU z^<10SrX*9@P+&5icvC2s>jy{u@Dv(_emhM^BpN$*L{YAv+{p=1k#}5*Fim6h$ciV#r^!fSxBiLGuO=sCxK?z!96Nx{G-C8^&o}guJxha}M{}ZQ z>!wTG8(iEEnDfOFPe7T<`a>0jh~gtqx|oNP+QfVy;+1mSh^cHn)QvbgJLA z&)4T<(h{MM-8Ua3%>;{b_GQ{Pn#q!j!BpjsgIPmaW2U+|3@np>Hye*aJvEq-?Ua2E z-wB9>G)DzfQT_hFS=fmZL zH?sK2EvXh9F__z*;aN`?A}TFjP~<@#w20lo{$<;Y8wE$zXNkvW3CA_}T5X}HIoyL? z;rZjLKJ2-+M4d8_buA>lT(oZ^SIQrMR#CZH24_GbLfD%(Wtit%B)T6&{(_Fkyxh)zd2Bh~YMDCl&F!rK>Ahi(>-PffTCRtSG+Vu_6IMq;ApUUKt?wj@ zVR4THJ%LlLN8j!GLg< z0D!Va<1L?{&}fXf@2+FKg5En6wcoQ}?7Bkewm-i|B9UYX9Q!U*f8t(g-AQtZU(@Dx zm&ED`Ng|o7Gc#MLp}`%b&-fN~IX@4_bdemF*Ako)gyVL2V-8sCq1|S{Fpph>cre1c z5F7TE3QGaMwyO+!Wgl!n+Rb-uQl9cteAdE!n9bw^S3U;gZU~=(e5vaEQU;5A{QS&$ z;Cmg}TuE*2E!Dy6NWo=AM%x-3whcpuz^gVmU-Ywm1d)Uh!ndX0WN8iaol87zjmE@A zAA!_aBUq;JjI%U1Jlb$TVxn^wREda?T-fZAcRY8F+tjl9?i{g8i18lJV`qqs$+bD{ z{tP5;Nb|9};{)#XFCZgM0uRq{#B7iBZP@YR3*#f~e&bjZ=c&U!O|9olra?F>Q885< zMqPe6ym>@9Mm4X8QO7x;R^7>b&$KH-w=wG+I&3QM3m#FPF&lycd-d$P9jA^c-Dg}i zcePYfr|N^*8}Wc|IC3;YkWkP5B(0@}d1g9O!#$GG>=lvLl$$hrNA;hHPM2u8&zi0&aVJD3BMZ)Ut0@C7(ZK_s#`~ znUHdwRIF>Q12!WhYgyhIx7>UFAK=Zdk$hc8lYP%V0Ne2suwM`wB`=Sik3WGL!CnS6 z4G+6cB^-_?ypP{zQK=aqxC;5sBVyzv7 zhoaw_;@XvQpf@t0h0E?rncOE2#j8diM@d(ynTWE8r7-ND2Y|EH7>{M1ns^SGCl99M z$Z~m#BI7i_D<-DQjs-`25HU~8jAP7Hf>o2=x^5w-bDOtLjXOf4q$JDURs$;n#h=i?Kh5fvXv@ioO}xYWU1+i|ZEtX<2lK z+b9bNMmJ}4XQM;|V%#ZIgqzxmI6X;;l!+XH3VuL{sGuXOdyv>RJFCB;fS`Voh&Pj2 z;L10Jv=p#PoFn$vz8(B9DT*?fBvEfR9|4Q?Opigz4la@s>84w5|DD~zh>*O~`fU9} z+7E7b_Dl2jvRU{7&zEY!(=7S^4OwMNZl<5w$8zsbPinrw9{v=%g%?)>;oV)|S)S+W zb;*}V&rngyWTC6p90i#pek4~c`RH)EVpt`1Fk5UsgBH~hWw6{}GQCowQ}wAtTZLUf ztX;o+8PUVOddIq(tGqc(Db|gF<5LideB$TlibO} zl{(XyG4xrH3BvEiVIgTun%drzryepJTk-pb#*nzvzU>pOs1i1raY8a*Y>&(^cnb4y zcReT*H=WO-Ul5Lut7FI&`zhJFLoz4VroN9LVTY9=&W-*!op5u@?*T~`j(rYLe)8Pn z?K+|vVLAg~^<orvLH`0?OLvW0)Wpy#ue50rn~~W$JAG zIkg~9ECJSgg6&lB!3+;n*di@?>d1KSgs*I(nzvoZg3wGp<*2)4~WHcB{!Oet_ zJt`IF_T#4vrW;MSi>*f$q$Qe&E*LE_P5^$R?dPM{$+bhy8>sE6I~Z?{_|plO9UMPc zFUaV}_xliq&mT0^aa=RplqcYAfGVc7<=mvJlBOKwj1PN15`nTqiSVMBRA;w5#J8+s z9i1%VlWj6&C&;wVMedZKj*??s$R9_sRAAJ&~LW6-%K4JlHUIN3;YW`dNS? z;a?c^Dj-IN-^1}RIb}%}zo?V)b7Lm1t6&mMtn-hQrnZk0V88H&19Z~P$W)0*V?ERk}#f% zAm&f(FGh(NE4kjyK;aiWk?1Z9F0^K%3Z*(TNMP+IRRRd^KBr|Ecp57Pk(Mf!9-y;& zFu2&cYlVEtVEL8p;oh90VdRzN8u{$)z-s-QtiNW!P*csaovW`+(wClHT>4#Y#4)oo zmzqSNsPUVfa)GGq@A2&uqfdkk-%pCi`bsgVfR(LQz#$!#zL#)wuLgH1 zkEOa#p5O68uC4>4-PZq@!7Q(3s=EI;@}RM{@5(ZVv>^(tew5!z`OvJ(tahL4MfXc@ z7AuuAoNWXlYToMhgoVrA7iSB!6@77j{`kDyjA;9U9q43@l=!vT1zYPhe^aB{urG2u z#S^Z)Gtij_lWNR`=s_yq=A?4t%R~EisA+x1`;XXxS*G7fTo>*brh4nRjlZg~1agq- zz#7{enL@x~C-~d73l?4#JWhJ3H(6_e(d~{E@tU|Q24B|A>N~|KwRB`pA#(NeLjKVH zrdS=X64|=ZBjBZ%w$x?_&1!7cIlgWV`9)vM9E-!!eAB7;TEnhDW=6pJEN?2TFp3ss zWYx)qv$w76M6C@nb%d)j^-&>km!wSZ6nq*=j8CV%t((pwjt8|*y1<*ErX&~Kq-0H5 zdeNHgb=O((@d^K0y~g-`$aD1qkdHH-Yx}_!2i3GOzn;}%j+=^YM&vx+GL_ktQ1i)& zLcK;8@*C^_KMHvd(txqZ+pXa*7i@;aZt6Hdu_)r&!SY}7Y?S~ z#Y}SaV&LNk#b+X2jFz!Ld8>{4+;+mzsKjL&&F|xBwZidzd8|(iJ|ET}L+`#&F;k-U z$uD8$eCw0%7k5SiJzm?)^Q2GZSeaR;BO|sDVxUDxyeLnj@-qnHlouL=7hU|CzA0_f z^<05(?&uhONJ*w?7yEuOsIAox*Zw;vI9s9>ZQ0doRM1PW*+>IjD%qALgmh8Wol>kq z05An!shZZSG7b>Ygp4qvRLw!yd3y4lo?berZ<;ycJx^n3W4g=1mBm(bbH?RhDJ`@) zoH2idA^MfH=RmLf{<+!m*{AzXr;iMoLcRm0c5*$C9eZ@yL5^V*k-IQK&pi7S9`?IKrL2 z&DQS;g(DP=BEo^%r3w@`w*5_N4rj(gq^luy+D$1HfCRDBqEp}Oa>*b|dU?bn^4PO( zCloqd_pD9(jd=jF7beIpx-#oHV(L3Nu*z@LqIa~3QOSa53f=CQPw7kJj>3@48LZhe zE3R5`K}#S;sM6aNoFYpcK%Se{rg=&G*rDcczM6CN<1y1%Q3Ats(F8*8F5*e%Zu$aA znYLCwU}n^!)MckmZzo5Yy4LV&DT63L7=MY<;IYIQaic^p(@2ew-|OOWE@ayTlxQyd zu^|nHN0gw}fXOMET*WO0QV(Y>2%FWm2z;i~(86=s?K3x|j&A!90*YFdZjD630@KLw z{X)sLAmieby^AFdOV05~YoPKjuGd=y2DN3M*6EJeI_+?C|Dalgs+l7UqRwz8*MQe} z9k0O0p#-q9T2lr74;VMP%yQUDKKLmt<^eP2kYa;r90?c$KLrg+lcKLWwuQs@Zol@WtJ_y`n zGM3u}-Lfytrg7S1?&p3dSG$ASGu=pBweD9XH;39dIBakZg-ay$_IbHJz}&EnqLrfQ z4||w|fv#rYtTSIFU;l+J3t#BfuQyImr+AqVRx!pzEqy#!<5UCps8Xp@t58)CL-29{GMZ*M)pq zuns0;aw+d6m+r9OWANXMLBGdiB_v2!auqR#gMd(cq6wo;vp z(fJKPwHkOuzBDcn>|J|z=bJ|3S%MX4Iqr7C0Lk|5oE_hy0*&JKOyz1NveSAP-sqkO z6gF5NCMS*eQED^ji6$V0vPyRUf9;)TRFg}$fE58n4xoTE1w^{idyyJ?5kzXFmjI#n zfCNMkP!OaD(t7{_DWO*pGyJsKJ_EHg#sKRqo%mhNTUB29tU@|{0q}o7Q@a-KfnM00HIB{0*v_hM`hV@qI zk$#oBDnbzS+NWDI2%hVhaKt8&L#%F1{nY}`yc`p+)vXYC&xh6lvBsNZ*Gc1miQ54h7}*9faB#B*n>z6lZ@R3Hy(MmGb_B&cp%f_o`dIpk0tlVRsBH3)ow#36udz68s z9xTGf`QD{CNb+C3#{%caOA+(p_h59_y<0$K*Oy(H-Z0p`<+(OY*6Dpx=lv-7$0lnh zSn1>R2=^_TA1)QsE8z)lmLG?d-5mB-njGFzi*H0?Te#9+hb0Nwh0!CP2)~Z0*j#5P zaJ7PI@iS#FWpmpi89qk#Pg^E5lCd zDApo=X4~lvjQ^P+s?0OpKvR`jT(w)z+T1mFuvoAEkEs3;cmzE*ev}JY>N*G>C^Q!A zS&({?WCiV9(%wEg>qR`1up?}1b$30QnVWkjv0bN(&23r5_ct5MwGci{*M|jl@G5BsJ3fgj!FY?7+2z+q~~CqB6X@#V~=9?9u_#c{yMt*rRtta**=&RcC9pd*>{ z5U=ggZioH4!(QE2>_vVRr`J=*9&tegy9gffLv&HTHk_;CTqStg0yoN3D&L%2vS}=~ zQ%`#x3XQ5TJfHA{?QtM@KA&E39H%xCPGT<+S1i-Uv8=T%O35s$QR_U}t8`nsk31E@ z*G%>@kbT7m{#99p3s+DwqUwyb4~Ezk@R`WbNB~(h(yP!nQKUHPCo+^M7|^^eb8Q#v&j?(LK*`U{8}5U zuH89IKU)BevtDcDDS*R~A7^BMMB}`XQg?e4gGIvSPVp<90QF=58M2PK+TZ*wQmmq& z?N*VCR^2yU`$2h1cfYCzH4`{7=W{QntK@1%uia`^+(&|GP3c~R|ku%D!Gm8KdMO?D?)}7%~Mfbn92{>RykzX1bw1M zPKC8(>`44B-0F`05DjZ$K;~<^A~f>-{z#sg#Gy3l{k=ezL|~oxkFe_jeOl7PrM51M zo?7mDNx+HpjBPmai5L^v#P^ztm%2)q_uM(hqF*q+rTY4fY;fH0=!H4`-?w0sQ zyW}1=Iruv6x{L*)B>a8zqlzKS^1~D$Etu68C2~R0?VpYvfsYR?9>;y@(6NaNL%_tU z>ab27?_+-QwLG~sf?w8lJqt(iBn5l>b|gJP{&`Lvf~TM+zFAa&;NR81N~X680`Ds!iib{FRSyLAD^(!6ed*tM^Ub11I;C5`tzx6bRnr1< zhihcY4BJ({%+G!y4P^}=poPRrCamIwAFUuE_BXkH&cP(aPF6MoQ8F9-gB7BV#n?gY zP=lgU+|u%%IF?{zi<3Ij9rXFpJ4@a_j{#T|u6w&Rt?J4NgG%vJeuK}3H7rxwxju-6 zK&y1n_4@jHrkCft=Xjlo1P}XLN4pMntz8LjR5MH&*PJn`L|P06IZq04MDEd4d=J7` z9JfuR&6xUbYxM3fI9Ha2(wGZ;374x~ljoH2@snih^J1^XnjZGd3bwL>^*xWwsm+Q^@!4vV?PK%G|T+)ltL(_BuOB4v^PF~E)ziCMOlE{ChoI2-JtaB3o|Nw3tu ziDh>fK}DSIHj1-!jV(Eg7xBi3lseed?D)_g@N!yhu07A?PW_c+gwvId}lh1lKV5&MB)E4+S3+94jEsi_F8?9&K zGWH&a5}d`9mmZetXh@)MBP6fM$st2Ik*gb81^8#FdNU-mn2)n{QezoX>*hr9yog3M zy7{Z!2AetpZ?=ojp|<>Pat}AN6-3Te7<42%4eFi0u3UB>8j2mtn7Ceb!A#tu#WN)O zP}=njDFxImvygE2PSS@Mx;m!f8@azA`h-3=q^oQyQ@oulh-wY+9E$C zk`+*K0o={tCvIUlvEB=p#hM!%dy8#$t%F-02^P-JLWVfwkGQ}jd0%7l2LeaC23=3b zP@+q-;~G;T&49hc>oS?EGxx*0W=|iv`iijDMoRIzow$ah1iag)%xOR83Z6X?{s)_ZJ;f8SuvkFX@Tu2R29um} z^k@&6H9$^HvzwEtcpq$F)=N?ut8xK6vG^rExRByb0@qOKpA4F{gztjxFy5V5Z-g5; zXXt2#f@`l-3$VEZdvnk+fBTZw zbm?CN7qm~5SIuM6OD2ar^zjAw)t#t#8TiFa27q78FTQ%$`~~*;??<^*fVqmY?qs}B zM*lV4e?D$T6Yy+qM@!7q8(xBIJp2 zxF;c05*G{D-hX8S|8p3!%B4q53`s)7+ zWZeJ%&3^;uxaoR>!+2X9I&4exnezC6x5O1Ah#vE#u6r_hvkETk)Jq2d$~US`UoS?O zhb(r<|BpP;`gGaJAlNoYj!6m5pxaL7hlEUVBhiL z>s=<*p~NYYUxDELH8|`)f%v}&A!FaGM78cKeVw>QfH#QWkn7;<-Z9JyZTzB#+0b*P zgiNA)!>BIZV)1j&PUI8Lq1?XA?I6dATHr=#G1H>}lBbpPKqU@FRBHaM)oF(!LwU|8 zl#-k7BqHq#+Q5z1dgF1jl>b!&P~S~ z-wz0604aV&u`-gfDu*YyhNnT$-zOW6qvYsvpQNlLbkK>|P|->F1>q6KO;;U;-FB9^ zQsX)=7f!{iHr1I_Wi}d~R(gW{0Nb3tT4vP&jdMDA5tBSsT*$Qy} zr>ibldXZ3|c=c>ZKK~5HpA<-_Cpe5qsk9$)>~h%PCUjm{6aCeB{FbVfZwwQ)ld|37 z&H>&P*FvZT5X3ZsK54T@2|3WXbwaoMHISWzk5uE-lw#SUMxJyp1K^KRJXevo{pkTf z1D4zO${F&R_BTE6Z8Um>gtlY*ORc;8P6Xg(qE&{Z49TLalyAr(fyGWgZvWu7?n*pu z4Wk?u(@r0I`SNbH?;#&4tKSM~-ZlE)1-^7Fp`2WgJom~?4m`Ac&>@`kn9#sEnm<9 zpon`0TRUr0Jq6uY$PO+rt_7tM*)bpwWyx%$RH^BV){cH4(~*c#t-wbfvoc(6KR(b$ zuC|c#F3cW~9VcF03Pqnt)c1TJ4y4Y>R!$)WjLYU&jK6@9!290$Q@RDe*;eJA^O$Cq zTiJv_g2Q(v{?A{Qn)qMPhPO0c$wsU<837J00b=ALI_7>b$-)`m)V;--mJpVuzQcwM z02-j%o_~Qy#;V?oCB^OaT>I%#-;dyrppy(9u+_?Vj`h=T^cCz%5qIKy>a$1p@{llI z*_rLS&{+eu!)Sx`E8g05N|1ut$w6*QsCzhg}0t z0*I}+&p`Kh@NP@JD05lfRfqGDAMu{pl|OjL~mO@c@Vc^a^*2xu;Bv4>W7Orq_a= z1L_*5tB-O0Y&yRW;7tL{s@D@uTOj!w(F}pYXNT5ET;2`Y)erSY(A#Y#O5s4+`uj1K zuzG_%4*|Q;TZ)l~47PntLmAg5DE!xTd?h?T8XyEA5cG+BnJidUq1|wx2upD`Tu@*T z&-N4tZBjxG#Fth$NdXS515322|C+D$ej!F3@uWBN_126c-1(%si5e`pcTC`#G?t7N zBH&q;a(JXyBm;__jL{jMkmEV1`IgJ#>P$8XXY|AKvRu|UbKFh#{2o24`vcfUGB-qT=I*--4#sdKTV zw9-fC_gi;5Cyz%rZvnRskOH9YID^ULV}K4N+^&!A;E;kX-FSQF5p=_@vg3#-iAlPz zkNnrE)39TqL7fcFEoSr)1z-8X_J@KzVI~S@Kq;M=nIswu2S)rkpmW_95WM zOcc^77zEYa97MZpOw?Hq(Tn*GSR!q1$vvO+^+p$+^>~aI=AH!xtPX11Ay zihNl9HLJ)+u$lbWyS;Itallj5V?`jE*^M^6%*(wxi`$XYCcBxEs9FTysF1P|l5=XxUvxs(;D0BzTS=g0H!7F4SV#W<${y-_j^s3wYzfe30a^H)O2q zVO&aIQLk7&!i{Yfr(NhYd8HUh2UxuyMYvdW`^C6N5gNz%?9U$4 zR>kp{;S_`^R*m@bD+hOqi4Iwa>i*I8y_EJ*wP|$0HT|m;M2$-oP()Y-TF0O3pIeE6 z$M@&`XUV$V3*Kk8c)kd=^g4&qhb6gnmlz*)M@wpz%Ax#w8<-; zQGpw?pE!;7uTyY=A;D{EM++~Ow&q&jyi>W;KHV+2s;&?*6i3bW+E+3BWOTjMR*z{8 z0t8N}ZCdZ@k)Z`GyBER$pk7s1na{F4_9?XXK-nm9aKFDVLmOODWnHYHX7rIk%k4Y# zFwL^*UDFXa*>1Th}APSA=ad#S{4eObrHJsA?}i51O_*Fth8JK{+Tm7qst=WTy#nD`QGUtK<;o^mk=M8{Rr1Zq67om*!mx0?kBe<`3x6h&Kl4w z5ww#sABH=UGOK}FGhZDN-sL|-d7;JZh8R(&B2&X(D*#`ZOvg}){nhNKKy}kBAd6|W z&)!4m5HwuU)lpYkzG@iE1H$(=$9a%=*tfl|us;F)-XTnenr@mn4iCc*NEEia(z(%F z={SMUJ8q7__@WMzJ?bPI>Qr7@Uj?hmOaa1!%9^M#2m#bOB0h?|aLWDd?MkH&SQI@V zr48gdLZjZJNrv<3d)GWNa=k%stDvRhJ(VwCULjk%@u@Lv$Z2_S2LuqgWK~X6Kn#-u z6oQ&tR+9s=)(IZF7}AZyQ(i0Q{-EQ7y=2E-^Cj|e&?`0qxwiSb*b6(3$C`FRvFs{87T+))thy2qv2E4Y+NN$CKs4`M2k!CQPOuQVo7 z?B(@>2n}$wOK0vzHb`mr7kZ27!wV04TsBU;|Dbt{({GKIi9<^wOiP9m+ZHt~hbuL> z8wds-6IJWqwd17LTQo0P1Rh++IdCY^{4q1;3cKGFu#cV6PjU*fC( zv4xYC6i$hXiO4$!_&yZ!>jQ8BY@}?W<|JngFw}f6J#j^+{+jDNVafY|c*<$zU(CNNR2O$u5_p*!E)z@3 zEyzo51ulYYOsAO#+{fSlz8Nk=EiMpHrMf9;sCub!&IvT;Emt%AJ{uRKxM2)j3rxeS z<1Xtq2n;l8_Pc;CG5OhU)dN=%&BxCFnB+gZtpFM`5Ocx*n3)Tf76x2@yu!|aFYOiz zG|H-@h<@Kk7s`+HCJ<|fi)pF2wA%roF(@(O?q$JYfWL { const getUrlForApp = (appId: string) => appId; const history = scopedHistoryMock.create(); @@ -79,7 +84,7 @@ describe('SpacesGridPage', () => { catalogue: {}, spaces: { manage: true }, }} - maxSpaces={1000} + {...spacesGridCommonProps} /> ); @@ -138,8 +143,8 @@ describe('SpacesGridPage', () => { catalogue: {}, spaces: { manage: true }, }} - maxSpaces={1000} solutionNavExperiment={Promise.resolve(true)} + {...spacesGridCommonProps} /> ); @@ -156,6 +161,103 @@ describe('SpacesGridPage', () => { }); }); + it('renders a "current" badge for the current space', async () => { + spacesManager.getActiveSpace.mockResolvedValue(spaces[2]); + const current = await spacesManager.getActiveSpace(); + expect(current.id).toBe('custom-2'); + + const wrapper = mountWithIntl( + + ); + + // allow spacesManager to load spaces and lazy-load SpaceAvatar + await act(async () => {}); + wrapper.update(); + + const activeRow = wrapper.find('[data-test-subj="spacesListTableRow-custom-2"]'); + const nameCell = activeRow.find('[data-test-subj="spacesListTableRowNameCell"]'); + const activeBadge = nameCell.find('EuiBadge'); + expect(activeBadge.text()).toBe('current'); + }); + + it('renders a non-clickable "switch" action for the current space', async () => { + spacesManager.getActiveSpace.mockResolvedValue(spaces[2]); + const current = await spacesManager.getActiveSpace(); + expect(current.id).toBe('custom-2'); + + const wrapper = mountWithIntl( + + ); + + // allow spacesManager to load spaces and lazy-load SpaceAvatar + await act(async () => {}); + wrapper.update(); + + const activeRow = wrapper.find('[data-test-subj="spacesListTableRow-custom-2"]'); + const switchAction = activeRow.find('EuiButtonIcon[data-test-subj="Custom 2-switchSpace"]'); + expect(switchAction.prop('isDisabled')).toBe(true); + }); + + it('renders a clickable "switch" action for the non-current space', async () => { + spacesManager.getActiveSpace.mockResolvedValue(spaces[2]); + const current = await spacesManager.getActiveSpace(); + expect(current.id).toBe('custom-2'); + + const wrapper = mountWithIntl( + + ); + + // allow spacesManager to load spaces and lazy-load SpaceAvatar + await act(async () => {}); + wrapper.update(); + + const nonActiveRow = wrapper.find('[data-test-subj="spacesListTableRow-default"]'); + const switchAction = nonActiveRow.find('EuiButtonIcon[data-test-subj="Default-switchSpace"]'); + expect(switchAction.prop('isDisabled')).toBe(false); + }); + it('renders a create spaces button', async () => { const httpStart = httpServiceMock.createStartContract(); httpStart.get.mockResolvedValue([]); @@ -173,7 +275,7 @@ describe('SpacesGridPage', () => { catalogue: {}, spaces: { manage: true }, }} - maxSpaces={1000} + {...spacesGridCommonProps} /> ); @@ -203,6 +305,7 @@ describe('SpacesGridPage', () => { spaces: { manage: true }, }} maxSpaces={1} + serverBasePath={spacesGridCommonProps.serverBasePath} /> ); @@ -236,7 +339,7 @@ describe('SpacesGridPage', () => { catalogue: {}, spaces: { manage: true }, }} - maxSpaces={1000} + {...spacesGridCommonProps} /> ); @@ -271,7 +374,7 @@ describe('SpacesGridPage', () => { catalogue: {}, spaces: { manage: true }, }} - maxSpaces={1000} + {...spacesGridCommonProps} /> ); diff --git a/x-pack/plugins/spaces/public/management/spaces_grid/spaces_grid_page.tsx b/x-pack/plugins/spaces/public/management/spaces_grid/spaces_grid_page.tsx index c6a321b3bf484..e3069743cec42 100644 --- a/x-pack/plugins/spaces/public/management/spaces_grid/spaces_grid_page.tsx +++ b/x-pack/plugins/spaces/public/management/spaces_grid/spaces_grid_page.tsx @@ -5,11 +5,13 @@ * 2.0. */ -import type { EuiBasicTableColumn } from '@elastic/eui'; import { + EuiBadge, + type EuiBasicTableColumn, EuiButton, - EuiButtonIcon, EuiCallOut, + EuiFlexGroup, + EuiFlexItem, EuiInMemoryTable, EuiLink, EuiLoadingSpinner, @@ -31,9 +33,9 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { reactRouterNavigate } from '@kbn/kibana-react-plugin/public'; -import type { Space } from '../../../common'; +import { addSpaceIdToPath, type Space } from '../../../common'; import { isReservedSpace } from '../../../common'; -import { DEFAULT_SPACE_ID } from '../../../common/constants'; +import { DEFAULT_SPACE_ID, ENTER_SPACE_PATH } from '../../../common/constants'; import { getSpacesFeatureDescription } from '../../constants'; import { getSpaceAvatarComponent } from '../../space_avatar'; import { SpaceSolutionBadge } from '../../space_solution_badge'; @@ -49,6 +51,7 @@ const LazySpaceAvatar = lazy(() => interface Props { spacesManager: SpacesManager; notifications: NotificationsStart; + serverBasePath: string; getFeatures: FeaturesPluginStart['getFeatures']; capabilities: Capabilities; history: ScopedHistory; @@ -59,6 +62,7 @@ interface Props { interface State { spaces: Space[]; + activeSpace: Space | null; features: KibanaFeature[]; loading: boolean; showConfirmDeleteModal: boolean; @@ -71,6 +75,7 @@ export class SpacesGridPage extends Component { super(props); this.state = { spaces: [], + activeSpace: null, features: [], loading: true, showConfirmDeleteModal: false, @@ -133,11 +138,15 @@ export class SpacesGridPage extends Component { ) : undefined} ({ + 'data-test-subj': `spacesListTableRow-${item.id}`, + })} columns={this.getColumnConfig()} pagination={true} sorting={true} @@ -221,12 +230,18 @@ export class SpacesGridPage extends Component { }); const getSpaces = spacesManager.getSpaces(); + const getActiveSpace = spacesManager.getActiveSpace(); try { - const [spaces, features] = await Promise.all([getSpaces, getFeatures()]); + const [spaces, activeSpace, features] = await Promise.all([ + getSpaces, + getActiveSpace, + getFeatures(), + ]); this.setState({ loading: false, spaces, + activeSpace, features, }); } catch (error) { @@ -247,11 +262,13 @@ export class SpacesGridPage extends Component { field: 'initials', name: '', width: '50px', - render: (value: string, record: Space) => { + render: (_value: string, rowRecord) => { return ( }> - - + + ); @@ -263,11 +280,28 @@ export class SpacesGridPage extends Component { defaultMessage: 'Space', }), sortable: true, - render: (value: string, record: Space) => ( - - {value} - + render: (value: string, rowRecord: Space) => ( + + + + {value} + + + {this.state.activeSpace?.name === rowRecord.name && ( + + + {i18n.translate('xpack.spaces.management.spacesGridPage.currentSpaceMarkerText', { + defaultMessage: 'current', + })} + + + )} + ), + 'data-test-subj': 'spacesListTableRowNameCell', }, { field: 'description', @@ -275,17 +309,19 @@ export class SpacesGridPage extends Component { defaultMessage: 'Description', }), sortable: true, + truncateText: true, + width: '30%', }, { field: 'disabledFeatures', name: i18n.translate('xpack.spaces.management.spacesGridPage.featuresColumnName', { - defaultMessage: 'Features', + defaultMessage: 'Features visible', }), sortable: (space: Space) => { return getEnabledFeatures(this.state.features, space).length; }, - render: (disabledFeatures: string[], record: Space) => { - const enabledFeatureCount = getEnabledFeatures(this.state.features, record).length; + render: (_disabledFeatures: string[], rowRecord: Space) => { + const enabledFeatureCount = getEnabledFeatures(this.state.features, rowRecord).length; if (enabledFeatureCount === this.state.features.length) { return ( { return ( { }), actions: [ { - render: (record: Space) => ( - - ), + isPrimary: true, + name: i18n.translate('xpack.spaces.management.spacesGridPage.editSpaceActionName', { + defaultMessage: `Edit`, + }), + description: (rowRecord) => + i18n.translate('xpack.spaces.management.spacesGridPage.editSpaceActionDescription', { + defaultMessage: `Edit {spaceName}.`, + values: { spaceName: rowRecord.name }, + }), + type: 'icon', + icon: 'pencil', + color: 'primary', + href: (rowRecord) => + reactRouterNavigate(this.props.history, this.getEditSpacePath(rowRecord)).href, + onClick: (rowRecord) => + reactRouterNavigate(this.props.history, this.getEditSpacePath(rowRecord)).onClick, + 'data-test-subj': (rowRecord) => `${rowRecord.name}-editSpace`, }, { - available: (record: Space) => !isReservedSpace(record), - render: (record: Space) => ( - this.onDeleteSpaceClick(record)} - /> - ), + isPrimary: true, + name: i18n.translate('xpack.spaces.management.spacesGridPage.switchSpaceActionName', { + defaultMessage: 'Switch', + }), + description: (rowRecord) => + this.state.activeSpace?.name !== rowRecord.name + ? i18n.translate( + 'xpack.spaces.management.spacesGridPage.switchSpaceActionDescription', + { + defaultMessage: 'Switch to {spaceName}', + values: { spaceName: rowRecord.name }, + } + ) + : i18n.translate( + 'xpack.spaces.management.spacesGridPage.switchSpaceActionDisabledDescription', + { + defaultMessage: '{spaceName} is the current space', + values: { spaceName: rowRecord.name }, + } + ), + type: 'icon', + icon: 'merge', + color: 'primary', + href: (rowRecord: Space) => + addSpaceIdToPath( + this.props.serverBasePath, + rowRecord.id, + `${ENTER_SPACE_PATH}?next=/app/management/kibana/spaces/` + ), + enabled: (rowRecord) => this.state.activeSpace?.name !== rowRecord.name, + 'data-test-subj': (rowRecord) => `${rowRecord.name}-switchSpace`, + }, + { + name: i18n.translate('xpack.spaces.management.spacesGridPage.deleteActionName', { + defaultMessage: `Delete`, + }), + description: (rowRecord) => + isReservedSpace(rowRecord) + ? i18n.translate( + 'xpack.spaces.management.spacesGridPage.deleteActionDisabledDescription', + { + defaultMessage: `{spaceName} is reserved`, + values: { spaceName: rowRecord.name }, + } + ) + : i18n.translate('xpack.spaces.management.spacesGridPage.deleteActionDescription', { + defaultMessage: `Delete {spaceName}`, + values: { spaceName: rowRecord.name }, + }), + type: 'icon', + icon: 'trash', + color: 'danger', + onClick: (rowRecord: Space) => this.onDeleteSpaceClick(rowRecord), + enabled: (rowRecord: Space) => !isReservedSpace(rowRecord), + 'data-test-subj': (rowRecord) => `${rowRecord.name}-deleteSpace`, }, ], }); diff --git a/x-pack/plugins/spaces/public/management/spaces_management_app.test.tsx b/x-pack/plugins/spaces/public/management/spaces_management_app.test.tsx index 065c5b080fcea..cfc4542b4bacd 100644 --- a/x-pack/plugins/spaces/public/management/spaces_management_app.test.tsx +++ b/x-pack/plugins/spaces/public/management/spaces_management_app.test.tsx @@ -105,7 +105,7 @@ describe('spacesManagementApp', () => { css="You have tried to stringify object returned from \`css\` function. It isn't supposed to be used directly (e.g. as value of the \`className\` prop), but rather handed to emotion so it can handle it (e.g. as value of \`css\` prop)." data-test-subj="kbnRedirectAppLink" > - Spaces Page: {"capabilities":{"catalogue":{},"management":{},"navLinks":{}},"notifications":{"toasts":{}},"spacesManager":{"onActiveSpaceChange$":{}},"history":{"action":"PUSH","length":1,"location":{"pathname":"/","search":"","hash":""}},"maxSpaces":1000,"solutionNavExperiment":{}} + Spaces Page: {"capabilities":{"catalogue":{},"management":{},"navLinks":{}},"notifications":{"toasts":{}},"spacesManager":{"onActiveSpaceChange$":{}},"serverBasePath":"","history":{"action":"PUSH","length":1,"location":{"pathname":"/","search":"","hash":""}},"maxSpaces":1000,"solutionNavExperiment":{}} `); diff --git a/x-pack/plugins/spaces/public/management/spaces_management_app.tsx b/x-pack/plugins/spaces/public/management/spaces_management_app.tsx index d08e90dd70024..f6eea4d2fd1be 100644 --- a/x-pack/plugins/spaces/public/management/spaces_management_app.tsx +++ b/x-pack/plugins/spaces/public/management/spaces_management_app.tsx @@ -59,7 +59,7 @@ export const spacesManagementApp = Object.freeze({ text: title, href: `/`, }; - const { notifications, application, chrome } = coreStart; + const { notifications, application, chrome, http } = coreStart; chrome.docTitle.change(title); @@ -71,6 +71,7 @@ export const spacesManagementApp = Object.freeze({ getFeatures={features.getFeatures} notifications={notifications} spacesManager={spacesManager} + serverBasePath={http.basePath.serverBasePath} history={history} getUrlForApp={application.getUrlForApp} maxSpaces={config.maxSpaces} diff --git a/x-pack/test/functional/apps/spaces/index.ts b/x-pack/test/functional/apps/spaces/index.ts index aa034f4be012b..3fe77a1a4528b 100644 --- a/x-pack/test/functional/apps/spaces/index.ts +++ b/x-pack/test/functional/apps/spaces/index.ts @@ -14,5 +14,6 @@ export default function spacesApp({ loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./spaces_selection')); loadTestFile(require.resolve('./enter_space')); loadTestFile(require.resolve('./create_edit_space')); + loadTestFile(require.resolve('./spaces_grid')); }); } diff --git a/x-pack/test/functional/apps/spaces/spaces_grid.ts b/x-pack/test/functional/apps/spaces/spaces_grid.ts new file mode 100644 index 0000000000000..62363802db98a --- /dev/null +++ b/x-pack/test/functional/apps/spaces/spaces_grid.ts @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext } from '../../ftr_provider_context'; + +export default function enterSpaceFunctionalTests({ + getService, + getPageObjects, +}: FtrProviderContext) { + const kibanaServer = getService('kibanaServer'); + const PageObjects = getPageObjects(['security', 'spaceSelector', 'common']); + const spacesService = getService('spaces'); + const testSubjects = getService('testSubjects'); + + const anotherSpace = { + id: 'space2', + name: 'space2', + disabledFeatures: [], + }; + + describe('Spaces grid', function () { + before(async () => { + await spacesService.create(anotherSpace); + + await PageObjects.common.navigateToApp('spacesManagement'); + await testSubjects.existOrFail('spaces-grid-page'); + }); + + after(async () => { + await spacesService.delete('another-space'); + await kibanaServer.savedObjects.cleanStandardList(); + }); + + it('can switch to a space from the row in the grid', async () => { + // use the "current" badge confirm that Default is the current space + await testSubjects.existOrFail('spacesListCurrentBadge-default'); + // click the switch button of "another space" + await PageObjects.spaceSelector.clickSwitchSpaceButton('space2'); + // use the "current" badge confirm that "Another Space" is now the current space + await testSubjects.existOrFail('spacesListCurrentBadge-space2'); + }); + }); +} diff --git a/x-pack/test/functional/config.base.js b/x-pack/test/functional/config.base.js index 834aee5fbaa8c..56ecbef55759f 100644 --- a/x-pack/test/functional/config.base.js +++ b/x-pack/test/functional/config.base.js @@ -146,6 +146,9 @@ export default async function ({ readConfigFile }) { snapshotRestore: { pathname: '/app/management/data/snapshot_restore', }, + spacesManagement: { + pathname: '/app/management/kibana/spaces', + }, remoteClusters: { pathname: '/app/management/data/remote_clusters', }, diff --git a/x-pack/test/functional/page_objects/space_selector_page.ts b/x-pack/test/functional/page_objects/space_selector_page.ts index a9bea52bcd2e8..ea9a7948410f3 100644 --- a/x-pack/test/functional/page_objects/space_selector_page.ts +++ b/x-pack/test/functional/page_objects/space_selector_page.ts @@ -212,7 +212,21 @@ export class SpaceSelectorPageObject extends FtrService { await this.testSubjects.setValue('descriptionSpaceText', descriptionSpace); } + async clickSwitchSpaceButton(spaceName: string) { + const collapsedButtonSelector = '[data-test-subj=euiCollapsedItemActionsButton]'; + // open context menu + await this.find.clickByCssSelector(`#${spaceName}-actions ${collapsedButtonSelector}`); + // click context menu item + await this.find.clickByCssSelector( + `.euiContextMenuItem[data-test-subj="${spaceName}-switchSpace"]` // can not use testSubj: multiple elements exist with the same data-test-subj + ); + } + async clickOnDeleteSpaceButton(spaceName: string) { + const collapsedButtonSelector = '[data-test-subj=euiCollapsedItemActionsButton]'; + // open context menu + await this.find.clickByCssSelector(`#${spaceName}-actions ${collapsedButtonSelector}`); + // click context menu item await this.testSubjects.click(`${spaceName}-deleteSpace`); } From 5c9853dc57a6f9a0b82c69b78bf43cf3231597f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yulia=20=C4=8Cech?= <6585477+yuliacech@users.noreply.github.com> Date: Thu, 1 Aug 2024 20:55:18 +0200 Subject: [PATCH 09/25] [Console Monaco migration] Fix flaky documentation tests (#186641) ## Summary Related to https://github.com/elastic/kibana/pull/188977 This PR fixes a flaky test by closing any additionally opened tabs after each test. ### Checklist Delete any items that are not applicable to this PR. - [ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [ ] [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 - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [ ] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [ ] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker) - [ ] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [ ] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) ### Risk Matrix Delete this section if it is not applicable to this PR. Before closing this PR, invite QA, stakeholders, and other developers to identify risks that should be tested prior to the change/feature release. When forming the risk matrix, consider some of the following examples and how they may potentially impact the change: | Risk | Probability | Severity | Mitigation/Notes | |---------------------------|-------------|----------|-------------------------| | Multiple Spaces—unexpected behavior in non-default Kibana Space. | Low | High | Integration tests will verify that all features are still supported in non-default Kibana Space and when user switches between spaces. | | Multiple nodes—Elasticsearch polling might have race conditions when multiple Kibana nodes are polling for the same tasks. | High | Low | Tasks are idempotent, so executing them multiple times will not result in logical error, but will degrade performance. To test for this case we add plenty of unit tests around this logic and document manual testing procedure. | | Code should gracefully handle cases when feature X or plugin Y are disabled. | Medium | High | Unit tests will verify that any feature flag or plugin combination still results in our service operational. | | [See more potential risk examples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx) | ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- .../console/monaco/_misc_console_behavior.ts | 40 ++++++++++--------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/test/functional/apps/console/monaco/_misc_console_behavior.ts b/test/functional/apps/console/monaco/_misc_console_behavior.ts index 1d72fa796e421..f7ad2957c8411 100644 --- a/test/functional/apps/console/monaco/_misc_console_behavior.ts +++ b/test/functional/apps/console/monaco/_misc_console_behavior.ts @@ -27,11 +27,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); describe('keyboard shortcuts', () => { - let tabCount = 1; - - after(async () => { - if (tabCount > 1) { + let tabOpened = false; + afterEach(async () => { + if (tabOpened) { await browser.closeCurrentWindow(); + tabOpened = false; await browser.switchTab(0); } }); @@ -91,20 +91,24 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await PageObjects.console.monaco.getCurrentLineNumber()).to.be(4); }); - // flaky - it.skip('should open documentation when Ctrl+/ is pressed', async () => { - await PageObjects.console.monaco.enterText('GET _search'); - await PageObjects.console.monaco.pressEscape(); - await PageObjects.console.monaco.pressCtrlSlash(); - await retry.tryForTime(10000, async () => { - await browser.switchTab(1); - tabCount++; - }); - - // Retry until the documentation is loaded - await retry.try(async () => { - const url = await browser.getCurrentUrl(); - expect(url).to.contain('search-search.html'); + describe('open documentation', () => { + const requests = ['GET _search', 'GET test_index/_search', 'GET /_search']; + requests.forEach((request) => { + it('should open documentation when Ctrl+/ is pressed', async () => { + await PageObjects.console.monaco.enterText(request); + await PageObjects.console.monaco.pressEscape(); + await PageObjects.console.monaco.pressCtrlSlash(); + await retry.tryForTime(10000, async () => { + await browser.switchTab(1); + tabOpened = true; + }); + + // Retry until the documentation is loaded + await retry.try(async () => { + const url = await browser.getCurrentUrl(); + expect(url).to.contain('search-search.html'); + }); + }); }); }); }); From a1fe300a0317d5773150a7155c6acc10f9874ef8 Mon Sep 17 00:00:00 2001 From: Hannah Mudge Date: Thu, 1 Aug 2024 13:02:18 -0600 Subject: [PATCH 10/25] [Embeddable Rebuild] [Controls] Refactor options list control (#186655) Closes https://github.com/elastic/kibana/issues/184374 ## Summary > [!NOTE] > This PR has **no** user-facing changes - all work is contained in the `examples` plugin. ### Design reviewers The `options_list.scss` file in this PR is just a cleaned up / simplified copy of https://github.com/elastic/kibana/blob/main/src/plugins/controls/public/options_list/components/options_list.scss. We are migrating the controls in the examples folder. Once all controls are migrated, we will replace the embeddable controls with the migrated controls from the examples ### Presentation reviewers This PR refactors the options list control to the new React control framework. https://github.com/user-attachments/assets/2fcff028-4408-427e-aa19-7d1e4eaf1e76 ### Checklist - [x] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [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 - [x] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [x] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../common/options_list/ip_search.test.ts | 129 ++++++ .../common/options_list/ip_search.ts | 122 ++++++ .../options_list/options_list_selections.ts | 19 + .../suggestions_searching.test.ts | 118 +++++ .../options_list/suggestions_searching.ts | 69 +++ .../options_list/suggestions_sorting.ts | 32 ++ .../public/app/react_control_example.tsx | 26 +- examples/controls_example/public/plugin.tsx | 28 +- .../components/control_panel.tsx | 8 +- .../control_setting_tooltip_label.tsx | 32 ++ .../get_control_group_factory.tsx | 18 + .../react_controls/control_group/types.ts | 1 + .../data_control_editor.test.tsx | 2 +- .../data_controls/data_control_editor.tsx | 31 +- .../data_controls/initialize_data_control.ts | 21 +- .../data_controls/mocks/api_mocks.tsx | 46 ++ ...ta_control_mocks.tsx => factory_mocks.tsx} | 0 .../components/options_list.scss | 90 ++++ .../components/options_list_control.test.tsx | 120 +++++ .../components/options_list_control.tsx | 198 +++++++++ .../options_list_editor_options.test.tsx | 261 +++++++++++ .../options_list_editor_options.tsx | 175 ++++++++ .../components/options_list_popover.test.tsx | 365 ++++++++++++++++ .../components/options_list_popover.tsx | 54 +++ .../options_list_popover_action_bar.tsx | 157 +++++++ .../options_list_popover_empty_message.tsx | 55 +++ .../options_list_popover_footer.tsx | 102 +++++ ...ptions_list_popover_invalid_selections.tsx | 101 +++++ ...tions_list_popover_sorting_button.test.tsx | 121 ++++++ .../options_list_popover_sorting_button.tsx | 160 +++++++ .../options_list_popover_suggestion_badge.tsx | 46 ++ .../options_list_popover_suggestions.tsx | 208 +++++++++ .../options_list_control/constants.ts | 23 + .../fetch_and_validate.tsx | 121 ++++++ .../get_options_list_control_factory.test.tsx | 347 +++++++++++++++ .../get_options_list_control_factory.tsx | 410 ++++++++++++++++++ .../options_list_context_provider.tsx | 34 ++ .../options_list_fetch_cache.ts | 122 ++++++ .../options_list_strings.ts | 323 ++++++++++++++ .../options_list_control/types.ts | 59 +++ .../get_range_slider_control_factory.test.tsx | 72 ++- .../get_range_slider_control_factory.tsx | 29 +- .../data_controls/range_slider/types.ts | 9 - .../get_search_control_factory.tsx | 29 +- .../react_controls/data_controls/types.ts | 36 +- .../react_controls/mocks/control_mocks.ts | 47 ++ .../get_timeslider_control_factory.test.tsx | 17 +- examples/controls_example/tsconfig.json | 1 + .../controls/common/options_list/types.ts | 4 +- 49 files changed, 4464 insertions(+), 134 deletions(-) create mode 100644 examples/controls_example/common/options_list/ip_search.test.ts create mode 100644 examples/controls_example/common/options_list/ip_search.ts create mode 100644 examples/controls_example/common/options_list/options_list_selections.ts create mode 100644 examples/controls_example/common/options_list/suggestions_searching.test.ts create mode 100644 examples/controls_example/common/options_list/suggestions_searching.ts create mode 100644 examples/controls_example/common/options_list/suggestions_sorting.ts create mode 100644 examples/controls_example/public/react_controls/components/control_setting_tooltip_label.tsx create mode 100644 examples/controls_example/public/react_controls/data_controls/mocks/api_mocks.tsx rename examples/controls_example/public/react_controls/data_controls/mocks/{data_control_mocks.tsx => factory_mocks.tsx} (100%) create mode 100644 examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list.scss create mode 100644 examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_control.test.tsx create mode 100644 examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_control.tsx create mode 100644 examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_editor_options.test.tsx create mode 100644 examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_editor_options.tsx create mode 100644 examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover.test.tsx create mode 100644 examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover.tsx create mode 100644 examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_action_bar.tsx create mode 100644 examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_empty_message.tsx create mode 100644 examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_footer.tsx create mode 100644 examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_invalid_selections.tsx create mode 100644 examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_sorting_button.test.tsx create mode 100644 examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_sorting_button.tsx create mode 100644 examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_suggestion_badge.tsx create mode 100644 examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_suggestions.tsx create mode 100644 examples/controls_example/public/react_controls/data_controls/options_list_control/constants.ts create mode 100644 examples/controls_example/public/react_controls/data_controls/options_list_control/fetch_and_validate.tsx create mode 100644 examples/controls_example/public/react_controls/data_controls/options_list_control/get_options_list_control_factory.test.tsx create mode 100644 examples/controls_example/public/react_controls/data_controls/options_list_control/get_options_list_control_factory.tsx create mode 100644 examples/controls_example/public/react_controls/data_controls/options_list_control/options_list_context_provider.tsx create mode 100644 examples/controls_example/public/react_controls/data_controls/options_list_control/options_list_fetch_cache.ts create mode 100644 examples/controls_example/public/react_controls/data_controls/options_list_control/options_list_strings.ts create mode 100644 examples/controls_example/public/react_controls/data_controls/options_list_control/types.ts create mode 100644 examples/controls_example/public/react_controls/mocks/control_mocks.ts diff --git a/examples/controls_example/common/options_list/ip_search.test.ts b/examples/controls_example/common/options_list/ip_search.test.ts new file mode 100644 index 0000000000000..1c935b1875311 --- /dev/null +++ b/examples/controls_example/common/options_list/ip_search.test.ts @@ -0,0 +1,129 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { getIpRangeQuery, getIpSegments, getMinMaxIp } from './ip_search'; + +describe('test IP search functionality', () => { + test('get IP segments', () => { + expect(getIpSegments('')).toStrictEqual({ segments: [''], type: 'unknown' }); + expect(getIpSegments('test')).toStrictEqual({ segments: ['test'], type: 'unknown' }); + expect(getIpSegments('123.456')).toStrictEqual({ segments: ['123', '456'], type: 'ipv4' }); + expect(getIpSegments('123..456...')).toStrictEqual({ segments: ['123', '456'], type: 'ipv4' }); + expect(getIpSegments('abc:def:')).toStrictEqual({ segments: ['abc', 'def'], type: 'ipv6' }); + expect(getIpSegments(':::x:::abc:::def:::')).toStrictEqual({ + segments: ['x', 'abc', 'def'], + type: 'ipv6', + }); + }); + + test('get min/max IP', () => { + expect(getMinMaxIp('ipv4', ['123'])).toStrictEqual({ + min: '123.0.0.0', + max: '123.255.255.255', + }); + expect(getMinMaxIp('ipv4', ['123', '456', '789'])).toStrictEqual({ + min: '123.456.789.0', + max: '123.456.789.255', + }); + expect(getMinMaxIp('ipv6', ['abc', 'def'])).toStrictEqual({ + min: 'abc:def::', + max: 'abc:def:ffff:ffff:ffff:ffff:ffff:ffff', + }); + expect(getMinMaxIp('ipv6', ['a', 'b', 'c', 'd', 'e', 'f', 'g'])).toStrictEqual({ + min: 'a:b:c:d:e:f:g::', + max: 'a:b:c:d:e:f:g:ffff', + }); + }); + + test('get IP range query', () => { + // invalid searches + expect(getIpRangeQuery('xyz')).toStrictEqual({ + validSearch: false, + }); + expect(getIpRangeQuery('123.456.OVER 9000')).toStrictEqual({ + validSearch: false, + }); + expect(getIpRangeQuery('abc:def:ghi')).toStrictEqual({ + validSearch: false, + }); + + // full IP searches + expect(getIpRangeQuery('1.2.3.4')).toStrictEqual({ + validSearch: true, + rangeQuery: [ + { + key: 'ipv4', + mask: '1.2.3.4/32', + }, + ], + }); + expect(getIpRangeQuery('1.2.3.256')).toStrictEqual({ + validSearch: false, + rangeQuery: undefined, + }); + expect(getIpRangeQuery('fbbe:a363:9e14:987c:49cf:d4d0:d8c8:bc42')).toStrictEqual({ + validSearch: true, + rangeQuery: [ + { + key: 'ipv6', + mask: 'fbbe:a363:9e14:987c:49cf:d4d0:d8c8:bc42/128', + }, + ], + }); + + // partial IP searches - ipv4 + const partialIpv4 = getIpRangeQuery('12.34.'); + expect(partialIpv4.validSearch).toBe(true); + expect(partialIpv4.rangeQuery?.[0]).toStrictEqual({ + key: 'ipv4', + from: '12.34.0.0', + to: '12.34.255.255', + }); + expect(getIpRangeQuery('123.456.7')).toStrictEqual({ + validSearch: false, + rangeQuery: [], + }); + expect(getIpRangeQuery('12:34.56')).toStrictEqual({ + validSearch: false, + rangeQuery: [], + }); + + // partial IP searches - ipv6 + const partialIpv6 = getIpRangeQuery('fbbe:a363:9e14:987c:49cf'); + expect(partialIpv6.validSearch).toBe(true); + expect(partialIpv6.rangeQuery?.[0]).toStrictEqual({ + key: 'ipv6', + from: 'fbbe:a363:9e14:987c:49cf::', + to: 'fbbe:a363:9e14:987c:49cf:ffff:ffff:ffff', + }); + + // partial IP searches - unknown type + let partialUnknownIp = getIpRangeQuery('1234'); + expect(partialUnknownIp.validSearch).toBe(true); + expect(partialUnknownIp.rangeQuery?.length).toBe(1); + expect(partialUnknownIp.rangeQuery?.[0]).toStrictEqual({ + key: 'ipv6', + from: '1234::', + to: '1234:ffff:ffff:ffff:ffff:ffff:ffff:ffff', + }); + + partialUnknownIp = getIpRangeQuery('123'); + expect(partialUnknownIp.validSearch).toBe(true); + expect(partialUnknownIp.rangeQuery?.length).toBe(2); + expect(partialUnknownIp.rangeQuery?.[0]).toStrictEqual({ + key: 'ipv4', + from: '123.0.0.0', + to: '123.255.255.255', + }); + expect(partialUnknownIp.rangeQuery?.[1]).toStrictEqual({ + key: 'ipv6', + from: '123::', + to: '123:ffff:ffff:ffff:ffff:ffff:ffff:ffff', + }); + }); +}); diff --git a/examples/controls_example/common/options_list/ip_search.ts b/examples/controls_example/common/options_list/ip_search.ts new file mode 100644 index 0000000000000..565c2ed2a1df6 --- /dev/null +++ b/examples/controls_example/common/options_list/ip_search.ts @@ -0,0 +1,122 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import ipaddr from 'ipaddr.js'; + +export interface IpRangeQuery { + validSearch: boolean; + rangeQuery?: Array<{ key: string; from: string; to: string } | { key: string; mask: string }>; +} +interface IpSegments { + segments: string[]; + type: 'ipv4' | 'ipv6' | 'unknown'; +} + +export const getIsValidFullIp = (searchString: string) => { + return ipaddr.IPv4.isValidFourPartDecimal(searchString) || ipaddr.IPv6.isValid(searchString); +}; + +export const getIpSegments = (searchString: string): IpSegments => { + if (searchString.indexOf('.') !== -1) { + // ipv4 takes priority - so if search string contains both `.` and `:` then it will just be an invalid ipv4 search + const ipv4Segments = searchString.split('.').filter((segment) => segment !== ''); + return { segments: ipv4Segments, type: 'ipv4' }; + } else if (searchString.indexOf(':') !== -1) { + // note that currently, because of the logic of splitting here, searching for shorthand IPv6 IPs is not supported (for example, + // must search for `59fb:0:0:0:0:1005:cc57:6571` and not `59fb::1005:cc57:6571` to get the expected match) + const ipv6Segments = searchString.split(':').filter((segment) => segment !== ''); + return { segments: ipv6Segments, type: 'ipv6' }; + } + return { segments: [searchString], type: 'unknown' }; +}; + +export const getMinMaxIp = ( + type: 'ipv4' | 'ipv6', + segments: IpSegments['segments'] +): { min: string; max: string } => { + const isIpv4 = type === 'ipv4'; + const minIp = isIpv4 + ? segments.concat(Array(4 - segments.length).fill('0')).join('.') + : segments.join(':') + '::'; + const maxIp = isIpv4 + ? segments.concat(Array(4 - segments.length).fill('255')).join('.') + : segments.concat(Array(8 - segments.length).fill('ffff')).join(':'); + return { + min: minIp, + max: maxIp, + }; +}; + +const buildFullIpSearchRangeQuery = (segments: IpSegments): IpRangeQuery['rangeQuery'] => { + const { type: ipType, segments: ipSegments } = segments; + + const isIpv4 = ipType === 'ipv4'; + const searchIp = ipSegments.join(isIpv4 ? '.' : ':'); + if (ipaddr.isValid(searchIp)) { + return [ + { + key: ipType, + mask: isIpv4 ? searchIp + '/32' : searchIp + '/128', + }, + ]; + } + return undefined; +}; + +const buildPartialIpSearchRangeQuery = (segments: IpSegments): IpRangeQuery['rangeQuery'] => { + const { type: ipType, segments: ipSegments } = segments; + + const ranges = []; + if (ipType === 'unknown' || ipType === 'ipv4') { + const { min: minIpv4, max: maxIpv4 } = getMinMaxIp('ipv4', ipSegments); + + if (ipaddr.isValid(minIpv4) && ipaddr.isValid(maxIpv4)) { + ranges.push({ + key: 'ipv4', + from: minIpv4, + to: maxIpv4, + }); + } + } + + if (ipType === 'unknown' || ipType === 'ipv6') { + const { min: minIpv6, max: maxIpv6 } = getMinMaxIp('ipv6', ipSegments); + + if (ipaddr.isValid(minIpv6) && ipaddr.isValid(maxIpv6)) { + ranges.push({ + key: 'ipv6', + from: minIpv6, + to: maxIpv6, + }); + } + } + + return ranges; +}; + +export const getIpRangeQuery = (searchString: string): IpRangeQuery => { + if (searchString.match(/^[A-Fa-f0-9.:]*$/) === null) { + return { validSearch: false }; + } + + const ipSegments = getIpSegments(searchString); + if (ipSegments.type === 'ipv4' && ipSegments.segments.length === 4) { + const ipv4RangeQuery = buildFullIpSearchRangeQuery(ipSegments); + return { validSearch: Boolean(ipv4RangeQuery), rangeQuery: ipv4RangeQuery }; + } + if (ipSegments.type === 'ipv6' && ipSegments.segments.length === 8) { + const ipv6RangeQuery = buildFullIpSearchRangeQuery(ipSegments); + return { validSearch: Boolean(ipv6RangeQuery), rangeQuery: ipv6RangeQuery }; + } + + const partialRangeQuery = buildPartialIpSearchRangeQuery(ipSegments); + return { + validSearch: !(partialRangeQuery?.length === 0), + rangeQuery: partialRangeQuery, + }; +}; diff --git a/examples/controls_example/common/options_list/options_list_selections.ts b/examples/controls_example/common/options_list/options_list_selections.ts new file mode 100644 index 0000000000000..1db66f3749e61 --- /dev/null +++ b/examples/controls_example/common/options_list/options_list_selections.ts @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { DataViewField } from '@kbn/data-views-plugin/common'; + +export type OptionsListSelection = string | number; + +export const getSelectionAsFieldType = ( + field: DataViewField, + key: string +): OptionsListSelection => { + const storeAsNumber = field.type === 'number' || field.type === 'date'; + return storeAsNumber ? +key : key; +}; diff --git a/examples/controls_example/common/options_list/suggestions_searching.test.ts b/examples/controls_example/common/options_list/suggestions_searching.test.ts new file mode 100644 index 0000000000000..fc78b3f97440d --- /dev/null +++ b/examples/controls_example/common/options_list/suggestions_searching.test.ts @@ -0,0 +1,118 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { isValidSearch } from './suggestions_searching'; + +describe('test validity of search strings', () => { + describe('number field', () => { + it('valid search - basic integer', () => { + expect(isValidSearch({ searchString: '123', fieldType: 'number' })).toBe(true); + }); + + it('valid search - floating point number', () => { + expect(isValidSearch({ searchString: '12.34', fieldType: 'number' })).toBe(true); + }); + + it('valid search - negative number', () => { + expect(isValidSearch({ searchString: '-42', fieldType: 'number' })).toBe(true); + }); + + it('invalid search - invalid character search string', () => { + expect(isValidSearch({ searchString: '1!a23', fieldType: 'number' })).toBe(false); + }); + }); + + // we do not currently support searching date fields, so they will always be invalid + describe('date field', () => { + it('invalid search - formatted date', () => { + expect(isValidSearch({ searchString: 'December 12, 2023', fieldType: 'date' })).toBe(false); + }); + + it('invalid search - invalid character search string', () => { + expect(isValidSearch({ searchString: '!!12/12/23?', fieldType: 'date' })).toBe(false); + }); + }); + + // only testing exact match validity here - the remainder of testing is covered by ./ip_search.test.ts + describe('ip field', () => { + it('valid search - ipv4', () => { + expect( + isValidSearch({ + searchString: '1.2.3.4', + fieldType: 'ip', + searchTechnique: 'exact', + }) + ).toBe(true); + }); + + it('valid search - full ipv6', () => { + expect( + isValidSearch({ + searchString: 'fbbe:a363:9e14:987c:49cf:d4d0:d8c8:bc42', + fieldType: 'ip', + searchTechnique: 'exact', + }) + ).toBe(true); + }); + + it('valid search - partial ipv6', () => { + expect( + isValidSearch({ + searchString: 'fbbe:a363::', + fieldType: 'ip', + searchTechnique: 'exact', + }) + ).toBe(true); + }); + + it('invalid search - invalid character search string', () => { + expect( + isValidSearch({ + searchString: '!!123.abc?', + fieldType: 'ip', + searchTechnique: 'exact', + }) + ).toBe(false); + }); + + it('invalid search - ipv4', () => { + expect( + isValidSearch({ + searchString: '1.2.3.256', + fieldType: 'ip', + searchTechnique: 'exact', + }) + ).toBe(false); + }); + + it('invalid search - ipv6', () => { + expect( + isValidSearch({ + searchString: '::fbbe:a363::', + fieldType: 'ip', + searchTechnique: 'exact', + }) + ).toBe(false); + }); + }); + + // string field searches can never be invalid + describe('string field', () => { + it('valid search - basic search string', () => { + expect(isValidSearch({ searchString: 'abc', fieldType: 'string' })).toBe(true); + }); + + it('valid search - numeric search string', () => { + expect(isValidSearch({ searchString: '123', fieldType: 'string' })).toBe(true); + }); + + it('valid search - complex search string', () => { + expect(isValidSearch({ searchString: '!+@abc*&[]', fieldType: 'string' })).toBe(true); + }); + }); +}); diff --git a/examples/controls_example/common/options_list/suggestions_searching.ts b/examples/controls_example/common/options_list/suggestions_searching.ts new file mode 100644 index 0000000000000..c4b115e659b0c --- /dev/null +++ b/examples/controls_example/common/options_list/suggestions_searching.ts @@ -0,0 +1,69 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { getIpRangeQuery, getIsValidFullIp } from './ip_search'; + +export type OptionsListSearchTechnique = 'prefix' | 'wildcard' | 'exact'; + +export const getDefaultSearchTechnique = (type: string): OptionsListSearchTechnique | undefined => { + const compatibleSearchTechniques = getCompatibleSearchTechniques(type); + return compatibleSearchTechniques.length > 0 ? compatibleSearchTechniques[0] : undefined; +}; + +export const getCompatibleSearchTechniques = (type?: string): OptionsListSearchTechnique[] => { + switch (type) { + case 'string': { + return ['prefix', 'wildcard', 'exact']; + } + case 'ip': { + return ['prefix', 'exact']; + } + case 'number': { + return ['exact']; + } + default: { + return []; + } + } +}; + +export const isValidSearch = ({ + searchString, + fieldType, + searchTechnique, +}: { + searchString?: string; + fieldType?: string; + searchTechnique?: OptionsListSearchTechnique; +}): boolean => { + if (!searchString || searchString.length === 0) return true; + + switch (fieldType) { + case 'number': { + return !isNaN(Number(searchString)); + } + case 'date': { + /** searching is not currently supported for date fields */ + return false; + } + case 'ip': { + if (searchTechnique === 'exact') { + /** + * exact match searching will throw an error if the search string isn't a **full** IP, + * so we need a slightly different validity check here than for other search techniques + */ + return getIsValidFullIp(searchString); + } + return getIpRangeQuery(searchString).validSearch; + } + default: { + /** string searches are always considered to be valid */ + return true; + } + } +}; diff --git a/examples/controls_example/common/options_list/suggestions_sorting.ts b/examples/controls_example/common/options_list/suggestions_sorting.ts new file mode 100644 index 0000000000000..a66fe1bdf2891 --- /dev/null +++ b/examples/controls_example/common/options_list/suggestions_sorting.ts @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { Direction } from '@elastic/eui'; + +export type OptionsListSortBy = '_count' | '_key'; + +export const OPTIONS_LIST_DEFAULT_SORT: OptionsListSortingType = { + by: '_count', + direction: 'desc', +}; + +export interface OptionsListSortingType { + by: OptionsListSortBy; + direction: Direction; +} + +export const getCompatibleSortingTypes = (type?: string): OptionsListSortBy[] => { + switch (type) { + case 'ip': { + return ['_count']; + } + default: { + return ['_count', '_key']; + } + } +}; diff --git a/examples/controls_example/public/app/react_control_example.tsx b/examples/controls_example/public/app/react_control_example.tsx index 7cd1b3e115b28..8e24eb10cbabd 100644 --- a/examples/controls_example/public/app/react_control_example.tsx +++ b/examples/controls_example/public/app/react_control_example.tsx @@ -40,6 +40,7 @@ import { import { toMountPoint } from '@kbn/react-kibana-mount'; import { ControlGroupApi } from '../react_controls/control_group/types'; +import { OPTIONS_LIST_CONTROL_TYPE } from '../react_controls/data_controls/options_list_control/constants'; import { RANGE_SLIDER_CONTROL_TYPE } from '../react_controls/data_controls/range_slider/types'; import { SEARCH_CONTROL_TYPE } from '../react_controls/data_controls/search_control/types'; import { TIMESLIDER_CONTROL_TYPE } from '../react_controls/timeslider_control/types'; @@ -58,13 +59,14 @@ const toggleViewButtons = [ }, ]; +const optionsListId = 'optionsList1'; const searchControlId = 'searchControl1'; const rangeSliderControlId = 'rangeSliderControl1'; const timesliderControlId = 'timesliderControl1'; const controlGroupPanels = { [searchControlId]: { type: SEARCH_CONTROL_TYPE, - order: 2, + order: 3, grow: true, width: 'medium', explicitInput: { @@ -92,12 +94,25 @@ const controlGroupPanels = { }, [timesliderControlId]: { type: TIMESLIDER_CONTROL_TYPE, - order: 0, + order: 4, grow: true, width: 'medium', explicitInput: { id: timesliderControlId, - title: 'Time slider', + enhancements: {}, + }, + }, + [optionsListId]: { + type: OPTIONS_LIST_CONTROL_TYPE, + order: 2, + grow: true, + width: 'medium', + explicitInput: { + id: searchControlId, + fieldName: 'agent.keyword', + title: 'Agent', + grow: true, + width: 'medium', enhancements: {}, }, }, @@ -386,6 +401,11 @@ export const ReactControlExample = ({ type: 'index-pattern', id: WEB_LOGS_DATA_VIEW_ID, }, + { + name: `controlGroup_${optionsListId}:optionsListControlDataView`, + type: 'index-pattern', + id: WEB_LOGS_DATA_VIEW_ID, + }, ], }), })} diff --git a/examples/controls_example/public/plugin.tsx b/examples/controls_example/public/plugin.tsx index 64f6686e92c8c..15f587033cb81 100644 --- a/examples/controls_example/public/plugin.tsx +++ b/examples/controls_example/public/plugin.tsx @@ -17,6 +17,7 @@ import { PLUGIN_ID } from './constants'; import img from './control_group_image.png'; import { EditControlAction } from './react_controls/actions/edit_control_action'; import { registerControlFactory } from './react_controls/control_factory_registry'; +import { OPTIONS_LIST_CONTROL_TYPE } from './react_controls/data_controls/options_list_control/constants'; import { RANGE_SLIDER_CONTROL_TYPE } from './react_controls/data_controls/range_slider/types'; import { SEARCH_CONTROL_TYPE } from './react_controls/data_controls/search_control/types'; import { TIMESLIDER_CONTROL_TYPE } from './react_controls/timeslider_control/types'; @@ -50,13 +51,14 @@ export class ControlsExamplePlugin }); }); - registerControlFactory(RANGE_SLIDER_CONTROL_TYPE, async () => { - const [{ getRangesliderControlFactory }, [coreStart, depsStart]] = await Promise.all([ - import('./react_controls/data_controls/range_slider/get_range_slider_control_factory'), + registerControlFactory(OPTIONS_LIST_CONTROL_TYPE, async () => { + const [{ getOptionsListControlFactory }, [coreStart, depsStart]] = await Promise.all([ + import( + './react_controls/data_controls/options_list_control/get_options_list_control_factory' + ), core.getStartServices(), ]); - - return getRangesliderControlFactory({ + return getOptionsListControlFactory({ core: coreStart, data: depsStart.data, dataViews: depsStart.data.dataViews, @@ -72,7 +74,21 @@ export class ControlsExamplePlugin return getSearchEmbeddableFactory({ core: coreStart, - dataViewsService: depsStart.data.dataViews, + data: depsStart.data, + dataViews: depsStart.data.dataViews, + }); + }); + + registerControlFactory(RANGE_SLIDER_CONTROL_TYPE, async () => { + const [{ getRangesliderControlFactory }, [coreStart, depsStart]] = await Promise.all([ + import('./react_controls/data_controls/range_slider/get_range_slider_control_factory'), + core.getStartServices(), + ]); + + return getRangesliderControlFactory({ + core: coreStart, + data: depsStart.data, + dataViews: depsStart.data.dataViews, }); }); diff --git a/examples/controls_example/public/react_controls/components/control_panel.tsx b/examples/controls_example/public/react_controls/components/control_panel.tsx index 7127f158511be..4d858d25aa45b 100644 --- a/examples/controls_example/public/react_controls/components/control_panel.tsx +++ b/examples/controls_example/public/react_controls/components/control_panel.tsx @@ -19,6 +19,7 @@ import { EuiIcon, EuiToolTip, } from '@elastic/eui'; +import { DEFAULT_CONTROL_WIDTH } from '@kbn/controls-plugin/common'; import { ViewMode } from '@kbn/embeddable-plugin/public'; import { i18n } from '@kbn/i18n'; import { @@ -119,6 +120,7 @@ export const ControlPanel = (activeIndex ?? -1), diff --git a/examples/controls_example/public/react_controls/components/control_setting_tooltip_label.tsx b/examples/controls_example/public/react_controls/components/control_setting_tooltip_label.tsx new file mode 100644 index 0000000000000..91b40e6a95e67 --- /dev/null +++ b/examples/controls_example/public/react_controls/components/control_setting_tooltip_label.tsx @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; + +import { EuiFlexGroup, EuiFlexItem, EuiIconTip } from '@elastic/eui'; +import { css } from '@emotion/react'; + +export const ControlSettingTooltipLabel = ({ + label, + tooltip, +}: { + label: string; + tooltip: string; +}) => ( + + {label} + + + + +); diff --git a/examples/controls_example/public/react_controls/control_group/get_control_group_factory.tsx b/examples/controls_example/public/react_controls/control_group/get_control_group_factory.tsx index 84bf9c949210a..64e452aae1180 100644 --- a/examples/controls_example/public/react_controls/control_group/get_control_group_factory.tsx +++ b/examples/controls_example/public/react_controls/control_group/get_control_group_factory.tsx @@ -83,6 +83,7 @@ export const getControlGroupEmbeddableFactory = (services: { const labelPosition$ = new BehaviorSubject( // TODO: Rename `ControlStyle` initialLabelPosition ?? DEFAULT_CONTROL_STYLE // TODO: Rename `DEFAULT_CONTROL_STYLE` ); + const allowExpensiveQueries$ = new BehaviorSubject(true); /** TODO: Handle loading; loading should be true if any child is loading */ const dataLoading$ = new BehaviorSubject(false); @@ -114,6 +115,7 @@ export const getControlGroupEmbeddableFactory = (services: { ), ignoreParentSettings$, autoApplySelections$, + allowExpensiveQueries$, unsavedChanges, resetUnsavedChanges: () => { // TODO: Implement this @@ -167,6 +169,22 @@ export const getControlGroupEmbeddableFactory = (services: { dataViews.next(newDataViews) ); + /** Fetch the allowExpensiveQuries setting for the children to use if necessary */ + try { + const { allowExpensiveQueries } = await services.core.http.get<{ + allowExpensiveQueries: boolean; + // TODO: Rename this route as part of https://github.com/elastic/kibana/issues/174961 + }>('/internal/controls/optionsList/getExpensiveQueriesSetting', { + version: '1', + }); + if (!allowExpensiveQueries) { + // only set if this returns false, since it defaults to true + allowExpensiveQueries$.next(allowExpensiveQueries); + } + } catch { + // do nothing - default to true on error (which it was initialized to) + } + return { api, Component: () => { diff --git a/examples/controls_example/public/react_controls/control_group/types.ts b/examples/controls_example/public/react_controls/control_group/types.ts index cfbd525dab704..9d1a390125dad 100644 --- a/examples/controls_example/public/react_controls/control_group/types.ts +++ b/examples/controls_example/public/react_controls/control_group/types.ts @@ -58,6 +58,7 @@ export type ControlGroupApi = PresentationContainer & autoApplySelections$: PublishingSubject; controlFetch$: (controlUuid: string) => Observable; ignoreParentSettings$: PublishingSubject; + allowExpensiveQueries$: PublishingSubject; untilInitialized: () => Promise; }; diff --git a/examples/controls_example/public/react_controls/data_controls/data_control_editor.test.tsx b/examples/controls_example/public/react_controls/data_controls/data_control_editor.test.tsx index d90e5349f36d8..5cf4a86752240 100644 --- a/examples/controls_example/public/react_controls/data_controls/data_control_editor.test.tsx +++ b/examples/controls_example/public/react_controls/data_controls/data_control_editor.test.tsx @@ -30,7 +30,7 @@ import { getMockedOptionsListControlFactory, getMockedRangeSliderControlFactory, getMockedSearchControlFactory, -} from './mocks/data_control_mocks'; +} from './mocks/factory_mocks'; import { ControlFactory } from '../types'; import { DataControlApi, DefaultDataControlState } from './types'; diff --git a/examples/controls_example/public/react_controls/data_controls/data_control_editor.tsx b/examples/controls_example/public/react_controls/data_controls/data_control_editor.tsx index 6776a24e1874d..53a25073375bf 100644 --- a/examples/controls_example/public/react_controls/data_controls/data_control_editor.tsx +++ b/examples/controls_example/public/react_controls/data_controls/data_control_editor.tsx @@ -5,7 +5,7 @@ * Side Public License, v 1. */ -import React, { useEffect, useMemo, useState } from 'react'; +import React, { useMemo, useState } from 'react'; import useAsync from 'react-use/lib/useAsync'; import { @@ -146,7 +146,7 @@ export const DataControlEditor = ( initialState.controlType ); - const [controlEditorValid, setControlEditorValid] = useState(false); + const [controlOptionsValid, setControlOptionsValid] = useState(true); /** TODO: Make `editorConfig` work when refactoring the `ControlGroupRenderer` */ // const editorConfig = controlGroup.getEditorConfig(); @@ -181,19 +181,13 @@ export const DataControlEditor = { - setControlEditorValid( - Boolean(editorState.fieldName) && Boolean(selectedDataView) && Boolean(selectedControlType) - ); - }, [editorState.fieldName, setControlEditorValid, selectedDataView, selectedControlType]); - const CustomSettingsComponent = useMemo(() => { if (!selectedControlType || !editorState.fieldName || !fieldRegistry) return; - const controlFactory = getControlFactory(selectedControlType) as DataControlFactory; const CustomSettings = controlFactory.CustomOptionsComponent; if (!CustomSettings) return; + return ( setEditorState({ ...editorState, ...newState })} - setControlEditorValid={setControlEditorValid} + setControlEditorValid={setControlOptionsValid} + parentApi={controlGroup} /> ); - }, [fieldRegistry, selectedControlType, editorState]); + }, [fieldRegistry, selectedControlType, initialState, editorState, controlGroup]); return ( <> @@ -295,6 +291,8 @@ export const DataControlEditor = @@ -407,7 +405,14 @@ export const DataControlEditor = { onSave(editorState, selectedControlType!); }} diff --git a/examples/controls_example/public/react_controls/data_controls/initialize_data_control.ts b/examples/controls_example/public/react_controls/data_controls/initialize_data_control.ts index 1055047779f71..7c986744c7193 100644 --- a/examples/controls_example/public/react_controls/data_controls/initialize_data_control.ts +++ b/examples/controls_example/public/react_controls/data_controls/initialize_data_control.ts @@ -10,7 +10,11 @@ import { isEqual } from 'lodash'; import { BehaviorSubject, combineLatest, first, switchMap } from 'rxjs'; import { CoreStart } from '@kbn/core-lifecycle-browser'; -import { DataView, DATA_VIEW_SAVED_OBJECT_TYPE } from '@kbn/data-views-plugin/common'; +import { + DataView, + DataViewField, + DATA_VIEW_SAVED_OBJECT_TYPE, +} from '@kbn/data-views-plugin/common'; import { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; import { Filter } from '@kbn/es-query'; import { SerializedPanelState } from '@kbn/presentation-containers'; @@ -21,7 +25,7 @@ import { ControlGroupApi } from '../control_group/types'; import { initializeDefaultControlApi } from '../initialize_default_control_api'; import { ControlApiInitialization, ControlStateManager, DefaultControlState } from '../types'; import { openDataControlEditor } from './open_data_control_editor'; -import { DataControlApi, DefaultDataControlState } from './types'; +import { DataControlApi, DataControlFieldFormatter, DefaultDataControlState } from './types'; export const initializeDataControl = ( controlId: string, @@ -49,6 +53,10 @@ export const initializeDataControl = ( const fieldName = new BehaviorSubject(state.fieldName); const dataViews = new BehaviorSubject(undefined); const filters$ = new BehaviorSubject(undefined); + const field$ = new BehaviorSubject(undefined); + const fieldFormatter = new BehaviorSubject((toFormat: any) => + String(toFormat) + ); const stateManager: ControlStateManager = { ...defaultControl.stateManager, @@ -106,7 +114,13 @@ export const initializeDataControl = ( } else { clearBlockingError(); } + + field$.next(field); defaultPanelTitle.next(field ? field.displayName || field.name : nextFieldName); + const spec = field?.toSpec(); + if (spec) { + fieldFormatter.next(dataView.getFormatterForField(spec).getConverterFor('text')); + } } ); @@ -116,6 +130,7 @@ export const initializeDataControl = ( ...stateManager, ...editorStateManager, } as ControlStateManager; + const initialState = ( Object.keys(mergedStateManager) as Array ).reduce((prev, key) => { @@ -158,6 +173,8 @@ export const initializeDataControl = ( panelTitle, defaultPanelTitle, dataViews, + field$, + fieldFormatter, onEdit, filters$, setOutputFilter: (newFilter: Filter | undefined) => { diff --git a/examples/controls_example/public/react_controls/data_controls/mocks/api_mocks.tsx b/examples/controls_example/public/react_controls/data_controls/mocks/api_mocks.tsx new file mode 100644 index 0000000000000..7f08a96e0ad71 --- /dev/null +++ b/examples/controls_example/public/react_controls/data_controls/mocks/api_mocks.tsx @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { BehaviorSubject } from 'rxjs'; + +import { OptionsListSuggestions } from '@kbn/controls-plugin/common/options_list/types'; +import { DataViewField } from '@kbn/data-views-plugin/common'; + +import { OptionsListSelection } from '../../../../common/options_list/options_list_selections'; +import { OptionsListSearchTechnique } from '../../../../common/options_list/suggestions_searching'; +import { OptionsListSortingType } from '../../../../common/options_list/suggestions_sorting'; +import { OptionsListDisplaySettings } from '../options_list_control/types'; + +export const getOptionsListMocks = () => { + return { + api: { + uuid: 'testControl', + field$: new BehaviorSubject({ type: 'string' } as DataViewField), + availableOptions$: new BehaviorSubject(undefined), + invalidSelections$: new BehaviorSubject>(new Set([])), + totalCardinality$: new BehaviorSubject(undefined), + dataLoading: new BehaviorSubject(false), + parentApi: { + allowExpensiveQueries$: new BehaviorSubject(true), + }, + fieldFormatter: new BehaviorSubject((value: string | number) => String(value)), + makeSelection: jest.fn(), + }, + stateManager: { + searchString: new BehaviorSubject(''), + searchStringValid: new BehaviorSubject(true), + fieldName: new BehaviorSubject('field'), + exclude: new BehaviorSubject(undefined), + existsSelected: new BehaviorSubject(undefined), + sort: new BehaviorSubject(undefined), + selectedOptions: new BehaviorSubject(undefined), + searchTechnique: new BehaviorSubject(undefined), + }, + displaySettings: {} as OptionsListDisplaySettings, + }; +}; diff --git a/examples/controls_example/public/react_controls/data_controls/mocks/data_control_mocks.tsx b/examples/controls_example/public/react_controls/data_controls/mocks/factory_mocks.tsx similarity index 100% rename from examples/controls_example/public/react_controls/data_controls/mocks/data_control_mocks.tsx rename to examples/controls_example/public/react_controls/data_controls/mocks/factory_mocks.tsx diff --git a/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list.scss b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list.scss new file mode 100644 index 0000000000000..029edd5a8a363 --- /dev/null +++ b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list.scss @@ -0,0 +1,90 @@ +.optionsList__inputButtonOverride { + max-inline-size: 100% !important; + + .euiButtonEmpty { + border-end-start-radius: 0 !important; + border-start-start-radius: 0 !important; + } +} + +.optionsList--filterBtn { + font-weight: $euiFontWeightRegular !important; + color: $euiTextSubduedColor !important; + + .optionsList--selectionText { + flex-grow: 1; + text-align: left; + } + + .optionsList__selections { + overflow: hidden !important; + } + + .optionsList__filter { + color: $euiTextColor; + font-weight: $euiFontWeightMedium; + } + + .optionsList__filterInvalid { + color: $euiColorWarningText; + } + + .optionsList__negateLabel { + font-weight: $euiFontWeightSemiBold; + font-size: $euiSizeM; + color: $euiColorDanger; + } +} + +.optionsList--sortPopover { + width: $euiSizeXL * 7; +} + +.optionsList__existsFilter { + font-style: italic; + font-weight: $euiFontWeightMedium; +} + +.optionsList__popover { + .optionsList__actions { + padding: 0 $euiSizeS; + border-bottom: $euiBorderThin; + border-color: darken($euiColorLightestShade, 2%); + + .optionsList__searchRow { + padding-top: $euiSizeS + } + + .optionsList__actionsRow { + margin: calc($euiSizeS / 2) 0 !important; + + .optionsList__actionBarDivider { + height: $euiSize; + border-right: $euiBorderThin; + } + } + } + + .optionsList-control-ignored-selection-title { + padding-left: $euiSizeM; + } + + .optionsList__selectionInvalid { + color: $euiColorWarningText; + } + + .optionslist--loadingMoreGroupLabel { + text-align: center; + padding: $euiSizeM; + font-style: italic; + height: $euiSizeXXL !important; + } + + .optionslist--endOfOptionsGroupLabel { + text-align: center; + font-size: $euiSizeM; + height: auto !important; + color: $euiTextSubduedColor; + padding: $euiSizeM; + } +} diff --git a/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_control.test.tsx b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_control.test.tsx new file mode 100644 index 0000000000000..c18233d85fc62 --- /dev/null +++ b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_control.test.tsx @@ -0,0 +1,120 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; + +import { DataViewField } from '@kbn/data-views-plugin/common'; +import { render } from '@testing-library/react'; +import { ControlStateManager } from '../../../types'; +import { getOptionsListMocks } from '../../mocks/api_mocks'; +import { OptionsListControlContext } from '../options_list_context_provider'; +import { OptionsListComponentApi, OptionsListComponentState } from '../types'; +import { OptionsListControl } from './options_list_control'; + +describe('Options list control', () => { + const mountComponent = ({ + api, + displaySettings, + stateManager, + }: { + api: any; + displaySettings: any; + stateManager: any; + }) => { + return render( + , + }} + > + + + ); + }; + + test('if exclude = false and existsSelected = true, then the option should read "Exists"', async () => { + const mocks = getOptionsListMocks(); + mocks.api.uuid = 'testExists'; + mocks.stateManager.exclude.next(false); + mocks.stateManager.existsSelected.next(true); + const control = mountComponent(mocks); + const existsOption = control.getByTestId('optionsList-control-testExists'); + expect(existsOption).toHaveTextContent('Exists'); + }); + + test('if exclude = true and existsSelected = true, then the option should read "Does not exist"', async () => { + const mocks = getOptionsListMocks(); + mocks.api.uuid = 'testDoesNotExist'; + mocks.stateManager.exclude.next(true); + mocks.stateManager.existsSelected.next(true); + const control = mountComponent(mocks); + const existsOption = control.getByTestId('optionsList-control-testDoesNotExist'); + expect(existsOption).toHaveTextContent('DOES NOT Exist'); + }); + + describe('renders proper delimiter', () => { + test('keyword field', async () => { + const mocks = getOptionsListMocks(); + mocks.api.uuid = 'testDelimiter'; + mocks.api.availableOptions$.next([ + { value: 'woof', docCount: 5 }, + { value: 'bark', docCount: 10 }, + { value: 'meow', docCount: 12 }, + ]); + mocks.stateManager.selectedOptions.next(['woof', 'bark']); + mocks.api.field$.next({ + name: 'Test keyword field', + type: 'keyword', + } as DataViewField); + const control = mountComponent(mocks); + const selections = control.getByTestId('optionsListSelections'); + expect(selections.textContent).toBe('woof, bark '); + }); + }); + + test('number field', async () => { + const mocks = getOptionsListMocks(); + mocks.api.uuid = 'testDelimiter'; + mocks.api.availableOptions$.next([ + { value: 1, docCount: 5 }, + { value: 2, docCount: 10 }, + { value: 3, docCount: 12 }, + ]); + mocks.stateManager.selectedOptions.next([1, 2]); + mocks.api.field$.next({ + name: 'Test keyword field', + type: 'number', + } as DataViewField); + const control = mountComponent(mocks); + const selections = control.getByTestId('optionsListSelections'); + expect(selections.textContent).toBe('1; 2 '); + }); + + test('should display invalid state', async () => { + const mocks = getOptionsListMocks(); + mocks.api.uuid = 'testInvalid'; + mocks.api.availableOptions$.next([ + { value: 'woof', docCount: 5 }, + { value: 'bark', docCount: 10 }, + { value: 'meow', docCount: 12 }, + ]); + mocks.stateManager.selectedOptions.next(['woof', 'bark']); + mocks.api.invalidSelections$.next(new Set(['woof'])); + mocks.api.field$.next({ + name: 'Test keyword field', + type: 'number', + } as DataViewField); + + const control = mountComponent(mocks); + expect( + control.queryByTestId('optionsList__invalidSelectionsToken-testInvalid') + ).toBeInTheDocument(); + }); +}); diff --git a/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_control.tsx b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_control.tsx new file mode 100644 index 0000000000000..998ca612a34fb --- /dev/null +++ b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_control.tsx @@ -0,0 +1,198 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { isEmpty } from 'lodash'; +import React, { useMemo, useState } from 'react'; + +import { + EuiFilterButton, + EuiFilterGroup, + EuiFlexGroup, + EuiFlexItem, + EuiInputPopover, + EuiToken, + EuiToolTip, + htmlIdGenerator, +} from '@elastic/eui'; +import { + useBatchedOptionalPublishingSubjects, + useBatchedPublishingSubjects, +} from '@kbn/presentation-publishing'; + +import { OptionsListSelection } from '../../../../../common/options_list/options_list_selections'; +import { MIN_POPOVER_WIDTH } from '../constants'; +import { useOptionsListContext } from '../options_list_context_provider'; +import { OptionsListPopover } from './options_list_popover'; +import { OptionsListStrings } from '../options_list_strings'; + +import './options_list.scss'; + +export const OptionsListControl = ({ + controlPanelClassName, +}: { + controlPanelClassName: string; +}) => { + const popoverId = useMemo(() => htmlIdGenerator()(), []); + const { api, stateManager, displaySettings } = useOptionsListContext(); + + const [isPopoverOpen, setPopoverOpen] = useState(false); + const [ + excludeSelected, + existsSelected, + selectedOptions, + invalidSelections, + field, + loading, + panelTitle, + fieldFormatter, + ] = useBatchedPublishingSubjects( + stateManager.exclude, + stateManager.existsSelected, + stateManager.selectedOptions, + api.invalidSelections$, + api.field$, + api.dataLoading, + api.panelTitle, + api.fieldFormatter + ); + const [defaultPanelTitle] = useBatchedOptionalPublishingSubjects(api.defaultPanelTitle); + + const delimiter = useMemo(() => OptionsListStrings.control.getSeparator(field?.type), [field]); + + const { hasSelections, selectionDisplayNode, selectedOptionsCount } = useMemo(() => { + return { + hasSelections: !isEmpty(selectedOptions), + selectedOptionsCount: selectedOptions?.length, + selectionDisplayNode: ( + + +

+ {excludeSelected && ( + <> + + {existsSelected + ? OptionsListStrings.control.getExcludeExists() + : OptionsListStrings.control.getNegate()} + {' '} + + )} + {existsSelected ? ( + + {OptionsListStrings.controlAndPopover.getExists(+Boolean(excludeSelected))} + + ) : ( + <> + {selectedOptions?.length + ? selectedOptions.map((value: OptionsListSelection, i, { length }) => { + const text = `${fieldFormatter(value)}${ + i + 1 === length ? '' : delimiter + } `; + const isInvalid = invalidSelections?.has(value); + return ( + + {text} + + ); + }) + : null} + + )} +
+ + {invalidSelections && invalidSelections.size > 0 && ( + + + + + + )} + + ), + }; + }, [ + selectedOptions, + excludeSelected, + existsSelected, + fieldFormatter, + delimiter, + invalidSelections, + api.uuid, + ]); + + const button = ( + <> + setPopoverOpen(!isPopoverOpen)} + isSelected={isPopoverOpen} + numActiveFilters={selectedOptionsCount} + hasActiveFilters={Boolean(selectedOptionsCount)} + textProps={{ className: 'optionsList--selectionText' }} + aria-label={panelTitle ?? defaultPanelTitle} + aria-expanded={isPopoverOpen} + aria-controls={popoverId} + role="combobox" + > + {hasSelections || existsSelected + ? selectionDisplayNode + : displaySettings.placeholder ?? OptionsListStrings.control.getPlaceholder()} + + + ); + + return ( + + setPopoverOpen(false)} + panelClassName="optionsList__popoverOverride" + panelProps={{ + title: panelTitle ?? defaultPanelTitle, + 'aria-label': OptionsListStrings.popover.getAriaLabel(panelTitle ?? defaultPanelTitle!), + }} + > + + + + ); +}; diff --git a/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_editor_options.test.tsx b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_editor_options.test.tsx new file mode 100644 index 0000000000000..5023a5d276eb5 --- /dev/null +++ b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_editor_options.test.tsx @@ -0,0 +1,261 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; + +import userEvent from '@testing-library/user-event'; +import { DataViewField } from '@kbn/data-views-plugin/common'; +import { act, render } from '@testing-library/react'; + +import { getMockedControlGroupApi } from '../../../mocks/control_mocks'; +import { CustomOptionsComponentProps, DefaultDataControlState } from '../../types'; +import { OptionsListControlState } from '../types'; +import { OptionsListEditorOptions } from './options_list_editor_options'; +import { ControlGroupApi } from '../../../control_group/types'; +import { BehaviorSubject } from 'rxjs'; + +describe('Options list sorting button', () => { + const getMockedState = ( + overwrite?: Partial + ): State => { + return { + dataViewId: 'testDataViewId', + fieldName: 'fieldName', + ...overwrite, + } as State; + }; + + const updateState = jest.fn(); + const mountComponent = ({ + initialState, + field, + parentApi = getMockedControlGroupApi(), + }: Pick & { + parentApi?: ControlGroupApi; + }) => { + const component = render( + + ); + return component; + }; + + test('run past timeout', () => { + const component = mountComponent({ + initialState: getMockedState({ runPastTimeout: false }), + field: { type: 'string' } as DataViewField, + }); + const toggle = component.getByTestId('optionsListControl__runPastTimeoutAdditionalSetting'); + expect(toggle.getAttribute('aria-checked')).toBe('false'); + userEvent.click(toggle); + expect(updateState).toBeCalledWith({ runPastTimeout: true }); + expect(toggle.getAttribute('aria-checked')).toBe('true'); + }); + + test('selection options', () => { + const component = mountComponent({ + initialState: getMockedState({ singleSelect: true }), + field: { type: 'string' } as DataViewField, + }); + + const multiSelect = component.container.querySelector('input#multi'); + expect(multiSelect).not.toBeChecked(); + expect(component.container.querySelector('input#single')).toBeChecked(); + + userEvent.click(multiSelect!); + expect(updateState).toBeCalledWith({ singleSelect: false }); + expect(multiSelect).toBeChecked(); + expect(component.container.querySelector('input#single')).not.toBeChecked(); + }); + + describe('custom search options', () => { + test('do not show custom search options when `allowExpensiveQueries` is false', async () => { + const allowExpensiveQueries$ = new BehaviorSubject(false); + const controlGroupApi = getMockedControlGroupApi(undefined, { allowExpensiveQueries$ }); + const component = mountComponent({ + initialState: getMockedState(), + field: { type: 'string' } as DataViewField, + parentApi: controlGroupApi, + }); + expect( + component.queryByTestId('optionsListControl__searchOptionsRadioGroup') + ).not.toBeInTheDocument(); + + act(() => allowExpensiveQueries$.next(true)); + expect( + component.queryByTestId('optionsListControl__searchOptionsRadioGroup') + ).toBeInTheDocument(); + }); + + test('string field has three custom search options', async () => { + const component = mountComponent({ + initialState: getMockedState(), + field: { type: 'string' } as DataViewField, + }); + expect( + component.queryByTestId('optionsListControl__searchOptionsRadioGroup') + ).toBeInTheDocument(); + const validTechniques = ['prefix', 'exact', 'wildcard']; + validTechniques.forEach((technique) => { + expect( + component.queryByTestId(`optionsListControl__${technique}SearchOptionAdditionalSetting`) + ).toBeInTheDocument(); + }); + }); + + test('IP field has two custom search options', async () => { + const component = mountComponent({ + initialState: getMockedState(), + field: { type: 'ip' } as DataViewField, + }); + expect( + component.queryByTestId('optionsListControl__searchOptionsRadioGroup') + ).toBeInTheDocument(); + const validTechniques = ['prefix', 'exact']; + validTechniques.forEach((technique) => { + expect( + component.queryByTestId(`optionsListControl__${technique}SearchOptionAdditionalSetting`) + ).toBeInTheDocument(); + }); + }); + + test('number field does not have custom search options', async () => { + const component = mountComponent({ + initialState: getMockedState(), + field: { type: 'number' } as DataViewField, + }); + expect( + component.queryByTestId('optionsListControl__searchOptionsRadioGroup') + ).not.toBeInTheDocument(); + }); + + test('date field does not have custom search options', async () => { + const component = mountComponent({ + initialState: getMockedState(), + field: { type: 'date' } as DataViewField, + }); + expect( + component.queryByTestId('optionsListControl__searchOptionsRadioGroup') + ).not.toBeInTheDocument(); + }); + + describe('responds to field type changing', () => { + test('reset back to initial state when valid', async () => { + const initialState = getMockedState({ searchTechnique: 'exact' }); + const parentApi = getMockedControlGroupApi(); + const component = render( + + ); + + /** loads initial state properly */ + expect(component.container.querySelector('input#prefix')).not.toBeChecked(); + expect(component.container.querySelector('input#exact')).toBeChecked(); + expect(component.container.querySelector('input#wildcard')).not.toBeChecked(); + + /** responds to the field type changing */ + component.rerender( + + ); + + expect(updateState).toBeCalledWith({ searchTechnique: 'exact' }); + expect(component.container.querySelector('input#prefix')).not.toBeChecked(); + expect(component.container.querySelector('input#exact')).toBeChecked(); + expect(component.container.querySelector('input#wildcard')).toBeNull(); + }); + + test('if the current selection is valid, send that to the parent editor state', async () => { + const initialState = getMockedState(); + const parentApi = getMockedControlGroupApi(); + const component = render( + + ); + + /** loads default compatible search technique properly */ + expect(component.container.querySelector('input#prefix')).toBeChecked(); + expect(component.container.querySelector('input#exact')).not.toBeChecked(); + expect(component.container.querySelector('input#wildcard')).not.toBeChecked(); + + /** responds to change in search technique */ + const exactSearch = component.container.querySelector('input#exact'); + userEvent.click(exactSearch!); + expect(updateState).toBeCalledWith({ searchTechnique: 'exact' }); + expect(component.container.querySelector('input#prefix')).not.toBeChecked(); + expect(exactSearch).toBeChecked(); + expect(component.container.querySelector('input#wildcard')).not.toBeChecked(); + + /** responds to the field type changing */ + component.rerender( + + ); + + expect(updateState).toBeCalledWith({ searchTechnique: 'exact' }); + }); + + test('if neither the initial or current search technique is valid, revert to the default', async () => { + const initialState = getMockedState({ searchTechnique: 'wildcard' }); + const parentApi = getMockedControlGroupApi(); + const component = render( + + ); + + /** responds to change in search technique */ + const prefixSearch = component.container.querySelector('input#prefix'); + userEvent.click(prefixSearch!); + expect(updateState).toBeCalledWith({ searchTechnique: 'prefix' }); + + /** responds to the field type changing */ + component.rerender( + + ); + + expect(updateState).toBeCalledWith({ searchTechnique: 'exact' }); + }); + }); + }); +}); diff --git a/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_editor_options.tsx b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_editor_options.tsx new file mode 100644 index 0000000000000..3374104c7dabb --- /dev/null +++ b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_editor_options.tsx @@ -0,0 +1,175 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React, { useEffect, useMemo, useState } from 'react'; + +import { EuiFormRow, EuiRadioGroup, EuiSwitch } from '@elastic/eui'; +import { useStateFromPublishingSubject } from '@kbn/presentation-publishing'; + +import { + getCompatibleSearchTechniques, + OptionsListSearchTechnique, +} from '../../../../../common/options_list/suggestions_searching'; +import { ControlSettingTooltipLabel } from '../../../components/control_setting_tooltip_label'; +import { CustomOptionsComponentProps } from '../../types'; +import { DEFAULT_SEARCH_TECHNIQUE } from '../constants'; +import { OptionsListControlState } from '../types'; +import { OptionsListStrings } from '../options_list_strings'; + +const selectionOptions = [ + { + id: 'multi', + label: OptionsListStrings.editor.selectionTypes.multi.getLabel(), + 'data-test-subj': 'optionsListControl__multiSearchOptionAdditionalSetting', + }, + { + id: 'single', + label: OptionsListStrings.editor.selectionTypes.single.getLabel(), + 'data-test-subj': 'optionsListControl__singleSearchOptionAdditionalSetting', + }, +]; + +const allSearchOptions = [ + { + id: 'prefix', + label: ( + + ), + 'data-test-subj': 'optionsListControl__prefixSearchOptionAdditionalSetting', + }, + { + id: 'wildcard', + label: ( + + ), + 'data-test-subj': 'optionsListControl__wildcardSearchOptionAdditionalSetting', + }, + { + id: 'exact', + label: ( + + ), + 'data-test-subj': 'optionsListControl__exactSearchOptionAdditionalSetting', + }, +]; + +export const OptionsListEditorOptions = ({ + initialState, + field, + updateState, + parentApi, +}: CustomOptionsComponentProps) => { + const allowExpensiveQueries = useStateFromPublishingSubject(parentApi.allowExpensiveQueries$); + + const [singleSelect, setSingleSelect] = useState(initialState.singleSelect ?? false); + const [runPastTimeout, setRunPastTimeout] = useState( + initialState.runPastTimeout ?? false + ); + const [searchTechnique, setSearchTechnique] = useState( + initialState.searchTechnique ?? DEFAULT_SEARCH_TECHNIQUE + ); + + const compatibleSearchTechniques = useMemo( + () => getCompatibleSearchTechniques(field.type), + [field.type] + ); + + const searchOptions = useMemo(() => { + return allSearchOptions.filter((searchOption) => { + return compatibleSearchTechniques.includes(searchOption.id as OptionsListSearchTechnique); + }); + }, [compatibleSearchTechniques]); + + useEffect(() => { + /** + * when field type changes, ensure that the selected search technique is still valid; + * if the selected search technique **isn't** valid, reset it to the default + */ + const initialSearchTechniqueValid = + initialState.searchTechnique && + compatibleSearchTechniques.includes(initialState.searchTechnique); + const currentSearchTechniqueValid = compatibleSearchTechniques.includes(searchTechnique); + + if (initialSearchTechniqueValid) { + // reset back to initial state if possible on field change + setSearchTechnique(initialState.searchTechnique!); + updateState({ searchTechnique: initialState.searchTechnique }); + } else if (currentSearchTechniqueValid) { + // otherwise, if the current selection is valid, send that to the parent editor state + updateState({ searchTechnique }); + } else { + // finally, if neither the initial or current search technique is valid, revert to the default + setSearchTechnique(compatibleSearchTechniques[0]); + updateState({ searchTechnique: compatibleSearchTechniques[0] }); + } + + // Note: We only want to call this when compatible search techniques changes + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [compatibleSearchTechniques]); + + return ( + <> + + { + const newSingleSelect = id === 'single'; + setSingleSelect(newSingleSelect); + updateState({ singleSelect: newSingleSelect }); + }} + /> + + {allowExpensiveQueries && compatibleSearchTechniques.length > 1 && ( + + { + const newSearchTechnique = id as OptionsListSearchTechnique; + setSearchTechnique(newSearchTechnique); + updateState({ searchTechnique: newSearchTechnique }); + }} + /> + + )} + + + } + checked={runPastTimeout} + onChange={() => { + const newRunPastTimeout = !runPastTimeout; + setRunPastTimeout(newRunPastTimeout); + updateState({ runPastTimeout: newRunPastTimeout }); + }} + data-test-subj={'optionsListControl__runPastTimeoutAdditionalSetting'} + /> + + + ); +}; diff --git a/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover.test.tsx b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover.test.tsx new file mode 100644 index 0000000000000..05d601e093a4e --- /dev/null +++ b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover.test.tsx @@ -0,0 +1,365 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; + +import { DataViewField } from '@kbn/data-views-plugin/common'; +import { act, render, RenderResult, within } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; + +import { BehaviorSubject } from 'rxjs'; +import { ControlStateManager } from '../../../types'; +import { getOptionsListMocks } from '../../mocks/api_mocks'; +import { OptionsListControlContext } from '../options_list_context_provider'; +import { + OptionsListComponentApi, + OptionsListComponentState, + OptionsListDisplaySettings, +} from '../types'; +import { OptionsListPopover } from './options_list_popover'; + +describe('Options list popover', () => { + const waitOneTick = () => act(() => new Promise((resolve) => setTimeout(resolve, 0))); + + const mountComponent = ({ + api, + displaySettings, + stateManager, + }: { + api: any; + displaySettings: any; + stateManager: any; + }) => { + return render( + , + }} + > + + + ); + }; + + const clickShowOnlySelections = (popover: RenderResult) => { + const showOnlySelectedButton = popover.getByTestId('optionsList-control-show-only-selected'); + userEvent.click(showOnlySelectedButton); + }; + + test('no available options', async () => { + const mocks = getOptionsListMocks(); + mocks.api.availableOptions$.next([]); + const popover = mountComponent(mocks); + + const availableOptionsDiv = popover.getByTestId('optionsList-control-available-options'); + const noOptionsDiv = within(availableOptionsDiv).getByTestId( + 'optionsList-control-noSelectionsMessage' + ); + expect(noOptionsDiv).toBeInTheDocument(); + }); + + test('clicking options calls `makeSelection`', async () => { + const mocks = getOptionsListMocks(); + mocks.api.availableOptions$.next([ + { value: 'woof', docCount: 5 }, + { value: 'bark', docCount: 10 }, + { value: 'meow', docCount: 12 }, + ]); + const popover = mountComponent(mocks); + + const existsOption = popover.getByTestId('optionsList-control-selection-exists'); + userEvent.click(existsOption); + expect(mocks.api.makeSelection).toBeCalledWith('exists-option', false); + + let woofOption = popover.getByTestId('optionsList-control-selection-woof'); + userEvent.click(woofOption); + expect(mocks.api.makeSelection).toBeCalledWith('woof', false); + + // simulate `makeSelection` + mocks.stateManager.selectedOptions.next(['woof']); + await waitOneTick(); + + clickShowOnlySelections(popover); + woofOption = popover.getByTestId('optionsList-control-selection-woof'); + userEvent.click(woofOption); + expect(mocks.api.makeSelection).toBeCalledWith('woof', true); + }); + + describe('show only selected', () => { + test('show only selected options', async () => { + const mocks = getOptionsListMocks(); + const selections = ['woof', 'bark']; + mocks.api.availableOptions$.next([ + { value: 'woof', docCount: 5 }, + { value: 'bark', docCount: 10 }, + { value: 'meow', docCount: 12 }, + ]); + const popover = mountComponent(mocks); + mocks.stateManager.selectedOptions.next(selections); + await waitOneTick(); + + clickShowOnlySelections(popover); + const availableOptionsDiv = popover.getByTestId('optionsList-control-available-options'); + const availableOptionsList = within(availableOptionsDiv).getByRole('listbox'); + const availableOptions = within(availableOptionsList).getAllByRole('option'); + availableOptions.forEach((child, i) => { + expect(child).toHaveTextContent(`${selections[i]}. Checked option.`); + }); + }); + + test('display error message when the show only selected toggle is true but there are no selections', async () => { + const mocks = getOptionsListMocks(); + mocks.api.availableOptions$.next([ + { value: 'woof', docCount: 5 }, + { value: 'bark', docCount: 10 }, + { value: 'meow', docCount: 12 }, + ]); + mocks.stateManager.selectedOptions.next([]); + const popover = mountComponent(mocks); + + clickShowOnlySelections(popover); + const availableOptionsDiv = popover.getByTestId('optionsList-control-available-options'); + const noSelectionsDiv = within(availableOptionsDiv).getByTestId( + 'optionsList-control-selectionsEmptyMessage' + ); + expect(noSelectionsDiv).toBeInTheDocument(); + }); + + test('disable search and sort when show only selected toggle is true', async () => { + const mocks = getOptionsListMocks(); + mocks.api.availableOptions$.next([ + { value: 'woof', docCount: 5 }, + { value: 'bark', docCount: 10 }, + { value: 'meow', docCount: 12 }, + ]); + mocks.stateManager.selectedOptions.next(['woof', 'bark']); + const popover = mountComponent(mocks); + + let searchBox = popover.getByTestId('optionsList-control-search-input'); + let sortButton = popover.getByTestId('optionsListControl__sortingOptionsButton'); + expect(searchBox).not.toBeDisabled(); + expect(sortButton).not.toBeDisabled(); + + clickShowOnlySelections(popover); + searchBox = popover.getByTestId('optionsList-control-search-input'); + sortButton = popover.getByTestId('optionsListControl__sortingOptionsButton'); + expect(searchBox).toBeDisabled(); + expect(sortButton).toBeDisabled(); + }); + }); + + describe('invalid selections', () => { + test('test single invalid selection', async () => { + const mocks = getOptionsListMocks(); + mocks.api.availableOptions$.next([ + { value: 'woof', docCount: 5 }, + { value: 'bark', docCount: 75 }, + ]); + const popover = mountComponent(mocks); + mocks.stateManager.selectedOptions.next(['woof', 'bark']); + mocks.api.invalidSelections$.next(new Set(['woof'])); + await waitOneTick(); + + const validSelection = popover.getByTestId('optionsList-control-selection-bark'); + expect(validSelection).toHaveTextContent('bark. Checked option.'); + expect( + within(validSelection).getByTestId('optionsList-document-count-badge') + ).toHaveTextContent('75'); + const title = popover.getByTestId('optionList__invalidSelectionLabel'); + expect(title).toHaveTextContent('Invalid selection'); + const invalidSelection = popover.getByTestId('optionsList-control-invalid-selection-woof'); + expect(invalidSelection).toHaveTextContent('woof. Checked option.'); + expect(invalidSelection).toHaveClass('optionsList__selectionInvalid'); + }); + + test('test title when multiple invalid selections', async () => { + const mocks = getOptionsListMocks(); + mocks.api.availableOptions$.next([ + { value: 'woof', docCount: 5 }, + { value: 'bark', docCount: 75 }, + ]); + mocks.stateManager.selectedOptions.next(['bark', 'woof', 'meow']); + mocks.api.invalidSelections$.next(new Set(['woof', 'meow'])); + const popover = mountComponent(mocks); + + const title = popover.getByTestId('optionList__invalidSelectionLabel'); + expect(title).toHaveTextContent('Invalid selections'); + }); + }); + + describe('include/exclude toggle', () => { + test('should default to exclude = false', async () => { + const mocks = getOptionsListMocks(); + const popover = mountComponent(mocks); + const includeButton = popover.getByTestId('optionsList__includeResults'); + const excludeButton = popover.getByTestId('optionsList__excludeResults'); + expect(includeButton).toHaveAttribute('aria-pressed', 'true'); + expect(excludeButton).toHaveAttribute('aria-pressed', 'false'); + }); + + test('if exclude = true, select appropriate button in button group', async () => { + const mocks = getOptionsListMocks(); + const popover = mountComponent(mocks); + mocks.stateManager.exclude.next(true); + await waitOneTick(); + + const includeButton = popover.getByTestId('optionsList__includeResults'); + const excludeButton = popover.getByTestId('optionsList__excludeResults'); + expect(includeButton).toHaveAttribute('aria-pressed', 'false'); + expect(excludeButton).toHaveAttribute('aria-pressed', 'true'); + }); + }); + + describe('"Exists" option', () => { + test('if existsSelected = false and no suggestions, then "Exists" does not show up', async () => { + const mocks = getOptionsListMocks(); + mocks.api.availableOptions$.next([]); + const popover = mountComponent(mocks); + + mocks.stateManager.existsSelected.next(false); + await waitOneTick(); + + const existsOption = popover.queryByTestId('optionsList-control-selection-exists'); + expect(existsOption).toBeNull(); + }); + + test('if existsSelected = true, "Exists" is the only option when "Show only selected options" is toggled', async () => { + const mocks = getOptionsListMocks(); + mocks.api.availableOptions$.next([ + { value: 'woof', docCount: 5 }, + { value: 'bark', docCount: 75 }, + ]); + const popover = mountComponent(mocks); + + mocks.stateManager.existsSelected.next(true); + await waitOneTick(); + clickShowOnlySelections(popover); + + const availableOptionsDiv = popover.getByTestId('optionsList-control-available-options'); + const availableOptionsList = within(availableOptionsDiv).getByRole('listbox'); + const availableOptions = within(availableOptionsList).getAllByRole('option'); + expect(availableOptions[0]).toHaveTextContent('Exists. Checked option.'); + }); + }); + + describe('field formatter', () => { + const mocks = getOptionsListMocks(); + const mockedFormatter = jest + .fn() + .mockImplementation((value: string | number) => `formatted:${value}`); + mocks.api.fieldFormatter = new BehaviorSubject( + mockedFormatter as (value: string | number) => string + ); + + afterEach(() => { + mockedFormatter.mockClear(); + }); + + test('uses field formatter on suggestions', async () => { + mocks.api.availableOptions$.next([ + { value: 1000, docCount: 1 }, + { value: 123456789, docCount: 4 }, + ]); + mocks.api.field$.next({ + name: 'Test number field', + type: 'number', + } as DataViewField); + const popover = mountComponent(mocks); + + expect(mockedFormatter).toHaveBeenNthCalledWith(1, 1000); + expect(mockedFormatter).toHaveBeenNthCalledWith(2, 123456789); + const options = await popover.findAllByRole('option'); + expect(options[0].textContent).toEqual('Exists'); + expect( + options[1].getElementsByClassName('euiSelectableListItem__text')[0].textContent + ).toEqual('formatted:1000'); + expect( + options[2].getElementsByClassName('euiSelectableListItem__text')[0].textContent + ).toEqual('formatted:123456789'); + }); + + test('converts string to number for date field', async () => { + mocks.api.availableOptions$.next([ + { value: 1721283696000, docCount: 1 }, + { value: 1721295533000, docCount: 2 }, + ]); + mocks.api.field$.next({ + name: 'Test date field', + type: 'date', + } as DataViewField); + + mountComponent(mocks); + expect(mockedFormatter).toHaveBeenNthCalledWith(1, 1721283696000); + expect(mockedFormatter).toHaveBeenNthCalledWith(2, 1721295533000); + }); + }); + + describe('allow expensive queries warning', () => { + test('ensure warning icon does not show up when testAllowExpensiveQueries = true/undefined', async () => { + const mocks = getOptionsListMocks(); + mocks.api.field$.next({ + name: 'Test keyword field', + type: 'keyword', + } as DataViewField); + const popover = mountComponent(mocks); + const warning = popover.queryByTestId('optionsList-allow-expensive-queries-warning'); + expect(warning).toBeNull(); + }); + + test('ensure warning icon shows up when testAllowExpensiveQueries = false', async () => { + const mocks = getOptionsListMocks(); + mocks.api.field$.next({ + name: 'Test keyword field', + type: 'keyword', + } as DataViewField); + mocks.api.parentApi.allowExpensiveQueries$.next(false); + const popover = mountComponent(mocks); + const warning = popover.getByTestId('optionsList-allow-expensive-queries-warning'); + expect(warning).toBeInstanceOf(HTMLDivElement); + }); + }); + + describe('advanced settings', () => { + const ensureComponentIsHidden = async ({ + displaySettings, + testSubject, + }: { + displaySettings: Partial; + testSubject: string; + }) => { + const mocks = getOptionsListMocks(); + mocks.displaySettings = displaySettings; + const popover = mountComponent(mocks); + const test = popover.queryByTestId(testSubject); + expect(test).toBeNull(); + }; + + test('can hide exists option', async () => { + ensureComponentIsHidden({ + displaySettings: { hideExists: true }, + testSubject: 'optionsList-control-selection-exists', + }); + }); + + test('can hide include/exclude toggle', async () => { + ensureComponentIsHidden({ + displaySettings: { hideExclude: true }, + testSubject: 'optionsList__includeExcludeButtonGroup', + }); + }); + + test('can hide sorting button', async () => { + ensureComponentIsHidden({ + displaySettings: { hideSort: true }, + testSubject: 'optionsListControl__sortingOptionsButton', + }); + }); + }); +}); diff --git a/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover.tsx b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover.tsx new file mode 100644 index 0000000000000..1f6168e5de1f2 --- /dev/null +++ b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover.tsx @@ -0,0 +1,54 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React, { useState } from 'react'; + +import { useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; +import { OptionsListPopoverActionBar } from './options_list_popover_action_bar'; +import { useOptionsListContext } from '../options_list_context_provider'; +import { OptionsListPopoverFooter } from './options_list_popover_footer'; +import { OptionsListPopoverInvalidSelections } from './options_list_popover_invalid_selections'; +import { OptionsListPopoverSuggestions } from './options_list_popover_suggestions'; + +export const OptionsListPopover = () => { + const { api, displaySettings } = useOptionsListContext(); + + const [field, availableOptions, invalidSelections, loading] = useBatchedPublishingSubjects( + api.field$, + api.availableOptions$, + api.invalidSelections$, + api.dataLoading + ); + const [showOnlySelected, setShowOnlySelected] = useState(false); + + return ( +
+ {field?.type !== 'boolean' && !displaySettings.hideActionBar && ( + + )} +
+ + {!showOnlySelected && invalidSelections && invalidSelections.size !== 0 && ( + + )} +
+ {!displaySettings.hideExclude && } +
+ ); +}; diff --git a/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_action_bar.tsx b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_action_bar.tsx new file mode 100644 index 0000000000000..73843ae90d9b3 --- /dev/null +++ b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_action_bar.tsx @@ -0,0 +1,157 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React, { useMemo } from 'react'; + +import { + EuiButtonIcon, + EuiFieldSearch, + EuiFlexGroup, + EuiFlexItem, + EuiFormRow, + EuiText, + EuiToolTip, +} from '@elastic/eui'; +import { useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; + +import { getCompatibleSearchTechniques } from '../../../../../common/options_list/suggestions_searching'; +import { useOptionsListContext } from '../options_list_context_provider'; +import { OptionsListPopoverSortingButton } from './options_list_popover_sorting_button'; +import { OptionsListStrings } from '../options_list_strings'; + +interface OptionsListPopoverProps { + showOnlySelected: boolean; + setShowOnlySelected: (value: boolean) => void; +} + +export const OptionsListPopoverActionBar = ({ + showOnlySelected, + setShowOnlySelected, +}: OptionsListPopoverProps) => { + const { api, stateManager, displaySettings } = useOptionsListContext(); + + const [ + searchString, + searchTechnique, + searchStringValid, + invalidSelections, + totalCardinality, + field, + allowExpensiveQueries, + ] = useBatchedPublishingSubjects( + stateManager.searchString, + stateManager.searchTechnique, + stateManager.searchStringValid, + api.invalidSelections$, + api.totalCardinality$, + api.field$, + api.parentApi.allowExpensiveQueries$ + ); + + const compatibleSearchTechniques = useMemo(() => { + if (!field) return []; + return getCompatibleSearchTechniques(field.type); + }, [field]); + + const defaultSearchTechnique = useMemo( + () => searchTechnique ?? compatibleSearchTechniques[0], + [searchTechnique, compatibleSearchTechniques] + ); + + return ( +
+ {compatibleSearchTechniques.length > 0 && ( + + { + stateManager.searchString.next(event.target.value); + }} + value={searchString} + data-test-subj="optionsList-control-search-input" + placeholder={OptionsListStrings.popover.getSearchPlaceholder( + allowExpensiveQueries ? defaultSearchTechnique : 'exact' + )} + /> + + )} + + + {allowExpensiveQueries && ( + + + {OptionsListStrings.popover.getCardinalityLabel(totalCardinality)} + + + )} + {invalidSelections && invalidSelections.size > 0 && ( + <> + {allowExpensiveQueries && ( + +
+ + )} + + + {OptionsListStrings.popover.getInvalidSelectionsLabel(invalidSelections.size)} + + + + )} + + + + + setShowOnlySelected(!showOnlySelected)} + data-test-subj="optionsList-control-show-only-selected" + aria-label={ + showOnlySelected + ? OptionsListStrings.popover.getAllOptionsButtonTitle() + : OptionsListStrings.popover.getSelectedOptionsButtonTitle() + } + /> + + + {!displaySettings.hideSort && ( + + + + )} + + + + +
+ ); +}; diff --git a/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_empty_message.tsx b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_empty_message.tsx new file mode 100644 index 0000000000000..a6950d2cfd4b0 --- /dev/null +++ b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_empty_message.tsx @@ -0,0 +1,55 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React, { useMemo } from 'react'; + +import { EuiIcon, EuiSelectableMessage, EuiSpacer } from '@elastic/eui'; +import { useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; + +import { useOptionsListContext } from '../options_list_context_provider'; +import { OptionsListStrings } from '../options_list_strings'; + +export const OptionsListPopoverEmptyMessage = ({ + showOnlySelected, +}: { + showOnlySelected: boolean; +}) => { + const { api, stateManager } = useOptionsListContext(); + + const [searchTechnique, searchStringValid, field] = useBatchedPublishingSubjects( + stateManager.searchTechnique, + stateManager.searchStringValid, + api.field$ + ); + + const noResultsMessage = useMemo(() => { + if (showOnlySelected) { + return OptionsListStrings.popover.getSelectionsEmptyMessage(); + } + if (!searchStringValid && field && searchTechnique) { + return OptionsListStrings.popover.getInvalidSearchMessage(field.type); + } + return OptionsListStrings.popover.getEmptyMessage(); + }, [showOnlySelected, field, searchStringValid, searchTechnique]); + + return ( + + + + {noResultsMessage} + + ); +}; diff --git a/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_footer.tsx b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_footer.tsx new file mode 100644 index 0000000000000..aa38330908762 --- /dev/null +++ b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_footer.tsx @@ -0,0 +1,102 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; + +import { + EuiButtonGroup, + EuiFlexGroup, + EuiFlexItem, + EuiIconTip, + EuiPopoverFooter, + EuiProgress, + useEuiBackgroundColor, + useEuiPaddingSize, +} from '@elastic/eui'; +import { css } from '@emotion/react'; +import { useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; + +import { useOptionsListContext } from '../options_list_context_provider'; +import { OptionsListStrings } from '../options_list_strings'; + +const aggregationToggleButtons = [ + { + id: 'optionsList__includeResults', + key: 'optionsList__includeResults', + label: OptionsListStrings.popover.getIncludeLabel(), + }, + { + id: 'optionsList__excludeResults', + key: 'optionsList__excludeResults', + label: OptionsListStrings.popover.getExcludeLabel(), + }, +]; + +export const OptionsListPopoverFooter = () => { + const { api, stateManager } = useOptionsListContext(); + + const [exclude, loading, allowExpensiveQueries] = useBatchedPublishingSubjects( + stateManager.exclude, + api.dataLoading, + api.parentApi.allowExpensiveQueries$ + ); + + return ( + <> + + {loading && ( +
+ +
+ )} + + + + + stateManager.exclude.next(optionId === 'optionsList__excludeResults') + } + buttonSize="compressed" + data-test-subj="optionsList__includeExcludeButtonGroup" + /> + + {!allowExpensiveQueries && ( + + + + )} + +
+ + ); +}; diff --git a/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_invalid_selections.tsx b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_invalid_selections.tsx new file mode 100644 index 0000000000000..19443cc9879f1 --- /dev/null +++ b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_invalid_selections.tsx @@ -0,0 +1,101 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React, { useEffect, useState } from 'react'; + +import { + EuiFlexGroup, + EuiFlexItem, + EuiIcon, + EuiScreenReaderOnly, + EuiSelectable, + EuiSelectableOption, + EuiSpacer, + EuiTitle, +} from '@elastic/eui'; +import { + useBatchedPublishingSubjects, + useStateFromPublishingSubject, +} from '@kbn/presentation-publishing'; + +import { useOptionsListContext } from '../options_list_context_provider'; +import { OptionsListStrings } from '../options_list_strings'; + +export const OptionsListPopoverInvalidSelections = () => { + const { api } = useOptionsListContext(); + + const [invalidSelections, fieldFormatter] = useBatchedPublishingSubjects( + api.invalidSelections$, + api.fieldFormatter + ); + const defaultPanelTitle = useStateFromPublishingSubject(api.defaultPanelTitle); + + const [selectableOptions, setSelectableOptions] = useState([]); // will be set in following useEffect + useEffect(() => { + /* This useEffect makes selectableOptions responsive to unchecking options */ + const options: EuiSelectableOption[] = Array.from(invalidSelections).map((key) => { + return { + key: String(key), + label: fieldFormatter(key), + checked: 'on', + className: 'optionsList__selectionInvalid', + 'data-test-subj': `optionsList-control-invalid-selection-${key}`, + prepend: ( + +
+ {OptionsListStrings.popover.getInvalidSelectionScreenReaderText()} + {'" "'} {/* Adds a pause for the screen reader */} +
+
+ ), + }; + }); + setSelectableOptions(options); + }, [fieldFormatter, invalidSelections]); + + return ( + <> + + + + + + + + + + + + { + setSelectableOptions(newSuggestions); + api.deselectOption(changedOption.key); + }} + > + {(list) => list} + + + ); +}; diff --git a/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_sorting_button.test.tsx b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_sorting_button.test.tsx new file mode 100644 index 0000000000000..c86aa85b9116e --- /dev/null +++ b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_sorting_button.test.tsx @@ -0,0 +1,121 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; + +import { DataViewField } from '@kbn/data-views-plugin/common'; +import { render, within } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; + +import { ControlStateManager } from '../../../types'; +import { getOptionsListMocks } from '../../mocks/api_mocks'; +import { OptionsListControlContext } from '../options_list_context_provider'; +import { OptionsListComponentApi, OptionsListComponentState } from '../types'; +import { OptionsListPopoverSortingButton } from './options_list_popover_sorting_button'; + +describe('Options list sorting button', () => { + const mountComponent = ({ + api, + displaySettings, + stateManager, + }: { + api: any; + displaySettings: any; + stateManager: any; + }) => { + const component = render( + , + }} + > + + + ); + + // open the popover for testing by clicking on the button + const sortButton = component.getByTestId('optionsListControl__sortingOptionsButton'); + userEvent.click(sortButton); + + return component; + }; + + test('when sorting suggestions, show both sorting types for keyword field', async () => { + const mocks = getOptionsListMocks(); + mocks.api.field$.next({ + name: 'Test keyword field', + type: 'keyword', + } as DataViewField); + const component = mountComponent(mocks); + + const sortingOptionsDiv = component.getByTestId('optionsListControl__sortingOptions'); + const optionsText = within(sortingOptionsDiv) + .getAllByRole('option') + .map((el) => el.textContent); + expect(optionsText).toEqual(['By document count. Checked option.', 'Alphabetically']); + }); + + test('sorting popover selects appropriate sorting type on load', async () => { + const mocks = getOptionsListMocks(); + mocks.api.field$.next({ + name: 'Test keyword field', + type: 'keyword', + } as DataViewField); + mocks.stateManager.sort.next({ by: '_key', direction: 'asc' }); + const component = mountComponent(mocks); + + const sortingOptionsDiv = component.getByTestId('optionsListControl__sortingOptions'); + const optionsText = within(sortingOptionsDiv) + .getAllByRole('option') + .map((el) => el.textContent); + expect(optionsText).toEqual(['By document count', 'Alphabetically. Checked option.']); + + const ascendingButton = component.getByTestId('optionsList__sortOrder_asc'); + expect(ascendingButton).toHaveClass('euiButtonGroupButton-isSelected'); + const descendingButton = component.getByTestId('optionsList__sortOrder_desc'); + expect(descendingButton).not.toHaveClass('euiButtonGroupButton-isSelected'); + }); + + test('when sorting suggestions, only show document count sorting for IP fields', async () => { + const mocks = getOptionsListMocks(); + mocks.api.field$.next({ name: 'Test IP field', type: 'ip' } as DataViewField); + const component = mountComponent(mocks); + + const sortingOptionsDiv = component.getByTestId('optionsListControl__sortingOptions'); + const optionsText = within(sortingOptionsDiv) + .getAllByRole('option') + .map((el) => el.textContent); + expect(optionsText).toEqual(['By document count. Checked option.']); + }); + + test('when sorting suggestions, show "By date" sorting option for date fields', async () => { + const mocks = getOptionsListMocks(); + mocks.api.field$.next({ name: 'Test date field', type: 'date' } as DataViewField); + const component = mountComponent(mocks); + + const sortingOptionsDiv = component.getByTestId('optionsListControl__sortingOptions'); + const optionsText = within(sortingOptionsDiv) + .getAllByRole('option') + .map((el) => el.textContent); + expect(optionsText).toEqual(['By document count. Checked option.', 'By date']); + }); + + test('when sorting suggestions, show "Numerically" sorting option for number fields', async () => { + const mocks = getOptionsListMocks(); + mocks.api.field$.next({ name: 'Test number field', type: 'number' } as DataViewField); + const component = mountComponent(mocks); + + const sortingOptionsDiv = component.getByTestId('optionsListControl__sortingOptions'); + const optionsText = within(sortingOptionsDiv) + .getAllByRole('option') + .map((el) => el.textContent); + expect(optionsText).toEqual(['By document count. Checked option.', 'Numerically']); + }); +}); diff --git a/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_sorting_button.tsx b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_sorting_button.tsx new file mode 100644 index 0000000000000..b8a0823dea393 --- /dev/null +++ b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_sorting_button.tsx @@ -0,0 +1,160 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React, { useCallback, useMemo, useState } from 'react'; + +import { + Direction, + EuiButtonGroup, + EuiButtonGroupOptionProps, + EuiButtonIcon, + EuiFlexGroup, + EuiFlexItem, + EuiPopover, + EuiPopoverTitle, + EuiSelectable, + EuiSelectableOption, + EuiToolTip, +} from '@elastic/eui'; +import { useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; + +import { + getCompatibleSortingTypes, + OptionsListSortBy, + OPTIONS_LIST_DEFAULT_SORT, +} from '../../../../../common/options_list/suggestions_sorting'; +import { useOptionsListContext } from '../options_list_context_provider'; +import { OptionsListStrings } from '../options_list_strings'; + +type SortByItem = EuiSelectableOption & { + data: { sortBy: OptionsListSortBy }; +}; + +const sortOrderOptions: EuiButtonGroupOptionProps[] = [ + { + id: 'asc', + iconType: `sortAscending`, + 'data-test-subj': `optionsList__sortOrder_asc`, + label: OptionsListStrings.editorAndPopover.sortOrder.asc.getSortOrderLabel(), + }, + { + id: 'desc', + iconType: `sortDescending`, + 'data-test-subj': `optionsList__sortOrder_desc`, + label: OptionsListStrings.editorAndPopover.sortOrder.desc.getSortOrderLabel(), + }, +]; + +export const OptionsListPopoverSortingButton = ({ + showOnlySelected, +}: { + showOnlySelected: boolean; +}) => { + const { api, stateManager } = useOptionsListContext(); + + const [isSortingPopoverOpen, setIsSortingPopoverOpen] = useState(false); + const [sort, field] = useBatchedPublishingSubjects(stateManager.sort, api.field$); + + const selectedSort = useMemo(() => sort ?? OPTIONS_LIST_DEFAULT_SORT, [sort]); + + const [sortByOptions, setSortByOptions] = useState(() => { + return getCompatibleSortingTypes(field?.type).map((key) => { + return { + onFocusBadge: false, + data: { sortBy: key }, + checked: key === selectedSort.by ? 'on' : undefined, + 'data-test-subj': `optionsList__sortBy_${key}`, + label: OptionsListStrings.editorAndPopover.sortBy[key].getSortByLabel(field?.type), + } as SortByItem; + }); + }); + + const onSortByChange = useCallback( + (updatedOptions: SortByItem[]) => { + setSortByOptions(updatedOptions); + const selectedOption = updatedOptions.find(({ checked }) => checked === 'on'); + if (selectedOption) { + stateManager.sort.next({ + ...selectedSort, + by: selectedOption.data.sortBy, + }); + } + }, + [selectedSort, stateManager.sort] + ); + + const SortButton = () => ( + setIsSortingPopoverOpen(!isSortingPopoverOpen)} + aria-label={OptionsListStrings.popover.getSortPopoverDescription()} + /> + ); + + return ( + + + + } + panelPaddingSize="none" + isOpen={isSortingPopoverOpen} + aria-labelledby="optionsList_sortingOptions" + closePopover={() => setIsSortingPopoverOpen(false)} + panelClassName={'optionsList--sortPopover'} + > + + + + {OptionsListStrings.popover.getSortPopoverTitle()} + + { + stateManager.sort.next({ + ...selectedSort, + direction: value as Direction, + }); + }} + /> + + + + + {(list) => list} + + + + ); +}; diff --git a/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_suggestion_badge.tsx b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_suggestion_badge.tsx new file mode 100644 index 0000000000000..79cb490dbf19b --- /dev/null +++ b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_suggestion_badge.tsx @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; + +import { css } from '@emotion/react'; +import { EuiScreenReaderOnly, EuiText, EuiToolTip, useEuiTheme } from '@elastic/eui'; + +import { OptionsListStrings } from '../options_list_strings'; + +export const OptionsListPopoverSuggestionBadge = ({ documentCount }: { documentCount: number }) => { + const { euiTheme } = useEuiTheme(); + + return ( + <> + + + {`${documentCount.toLocaleString()}`} + + + +
+ {'" "'} {/* Adds a pause for the screen reader */} + {OptionsListStrings.popover.getDocumentCountScreenReaderText(documentCount)} +
+
+ + ); +}; diff --git a/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_suggestions.tsx b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_suggestions.tsx new file mode 100644 index 0000000000000..3fdce47271873 --- /dev/null +++ b/examples/controls_example/public/react_controls/data_controls/options_list_control/components/options_list_popover_suggestions.tsx @@ -0,0 +1,208 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; + +import { EuiHighlight, EuiSelectable } from '@elastic/eui'; +import { EuiSelectableOption } from '@elastic/eui/src/components/selectable/selectable_option'; +import { OptionsListSuggestions } from '@kbn/controls-plugin/common/options_list/types'; +import { useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; +import { euiThemeVars } from '@kbn/ui-theme'; + +import { OptionsListSelection } from '../../../../../common/options_list/options_list_selections'; +import { MAX_OPTIONS_LIST_REQUEST_SIZE } from '../constants'; +import { useOptionsListContext } from '../options_list_context_provider'; +import { OptionsListStrings } from '../options_list_strings'; +import { OptionsListPopoverEmptyMessage } from './options_list_popover_empty_message'; +import { OptionsListPopoverSuggestionBadge } from './options_list_popover_suggestion_badge'; + +interface OptionsListPopoverSuggestionsProps { + showOnlySelected: boolean; +} + +export const OptionsListPopoverSuggestions = ({ + showOnlySelected, +}: OptionsListPopoverSuggestionsProps) => { + const { + api, + stateManager, + displaySettings: { hideExists }, + } = useOptionsListContext(); + + const [ + sort, + searchString, + existsSelected, + searchTechnique, + selectedOptions, + fieldName, + invalidSelections, + availableOptions, + totalCardinality, + loading, + fieldFormatter, + allowExpensiveQueries, + ] = useBatchedPublishingSubjects( + stateManager.sort, + stateManager.searchString, + stateManager.existsSelected, + stateManager.searchTechnique, + stateManager.selectedOptions, + stateManager.fieldName, + api.invalidSelections$, + api.availableOptions$, + api.totalCardinality$, + api.dataLoading, + api.fieldFormatter, + api.parentApi.allowExpensiveQueries$ + ); + + const listRef = useRef(null); + + const canLoadMoreSuggestions = useMemo( + () => + allowExpensiveQueries && totalCardinality && !showOnlySelected // && searchString.valid + ? (availableOptions ?? []).length < + Math.min(totalCardinality, MAX_OPTIONS_LIST_REQUEST_SIZE) + : false, + [availableOptions, totalCardinality, showOnlySelected, allowExpensiveQueries] + ); + + const suggestions = useMemo(() => { + return (showOnlySelected ? selectedOptions : availableOptions) ?? []; + }, [availableOptions, selectedOptions, showOnlySelected]); + + const existsSelectableOption = useMemo(() => { + if (hideExists || (!existsSelected && (showOnlySelected || suggestions?.length === 0))) return; + + return { + key: 'exists-option', + checked: existsSelected ? 'on' : undefined, + label: OptionsListStrings.controlAndPopover.getExists(), + className: 'optionsList__existsFilter', + 'data-test-subj': 'optionsList-control-selection-exists', + }; + }, [suggestions, existsSelected, showOnlySelected, hideExists]); + + const [selectableOptions, setSelectableOptions] = useState([]); // will be set in following useEffect + useEffect(() => { + /* This useEffect makes selectableOptions responsive to search, show only selected, and clear selections */ + const options: EuiSelectableOption[] = suggestions.map((suggestion) => { + if (typeof suggestion !== 'object') { + // this means that `showOnlySelected` is true, and doc count is not known when this is the case + suggestion = { value: suggestion }; + } + + return { + key: String(suggestion.value), + label: String(fieldFormatter(suggestion.value) ?? suggestion.value), + checked: (selectedOptions ?? []).includes(suggestion.value) ? 'on' : undefined, + 'data-test-subj': `optionsList-control-selection-${suggestion.value}`, + className: + showOnlySelected && invalidSelections.has(suggestion.value) + ? 'optionsList__selectionInvalid' + : 'optionsList__validSuggestion', + append: + !showOnlySelected && suggestion?.docCount ? ( + + ) : undefined, + } as EuiSelectableOption; + }); + + if (canLoadMoreSuggestions) { + options.push({ + key: 'loading-option', + className: 'optionslist--loadingMoreGroupLabel', + label: OptionsListStrings.popover.getLoadingMoreMessage(), + isGroupLabel: true, + }); + } else if (options.length === MAX_OPTIONS_LIST_REQUEST_SIZE) { + options.push({ + key: 'no-more-option', + className: 'optionslist--endOfOptionsGroupLabel', + label: OptionsListStrings.popover.getAtEndOfOptionsMessage(), + isGroupLabel: true, + }); + } + setSelectableOptions(existsSelectableOption ? [existsSelectableOption, ...options] : options); + }, [ + suggestions, + availableOptions, + showOnlySelected, + selectedOptions, + invalidSelections, + existsSelectableOption, + canLoadMoreSuggestions, + fieldFormatter, + ]); + + const loadMoreOptions = useCallback(() => { + const listbox = listRef.current?.querySelector('.euiSelectableList__list'); + if (!listbox) return; + + const { scrollTop, scrollHeight, clientHeight } = listbox; + if (scrollTop + clientHeight >= scrollHeight - parseInt(euiThemeVars.euiSizeXXL, 10)) { + // reached the "bottom" of the list, where euiSizeXXL acts as a "margin of error" so that the user doesn't + // have to scroll **all the way** to the bottom in order to load more options + stateManager.requestSize.next(totalCardinality ?? MAX_OPTIONS_LIST_REQUEST_SIZE); + api.loadMoreSubject.next(null); // trigger refetch with loadMoreSubject + } + }, [api.loadMoreSubject, stateManager.requestSize, totalCardinality]); + + const renderOption = useCallback( + (option, searchStringValue) => { + if (!allowExpensiveQueries || searchTechnique === 'exact') return option.label; + + return ( + + {option.label} + + ); + }, + [searchTechnique, allowExpensiveQueries] + ); + + useEffect(() => { + const container = listRef.current; + if (!loading && canLoadMoreSuggestions) { + container?.addEventListener('scroll', loadMoreOptions, true); + return () => { + container?.removeEventListener('scroll', loadMoreOptions, true); + }; + } + }, [loadMoreOptions, loading, canLoadMoreSuggestions]); + + useEffect(() => { + // scroll back to the top when changing the sorting or the search string + const listbox = listRef.current?.querySelector('.euiSelectableList__list'); + listbox?.scrollTo({ top: 0 }); + }, [sort, searchString]); + + return ( + <> +
+ renderOption(option, searchString)} + listProps={{ onFocusBadge: false }} + aria-label={OptionsListStrings.popover.getSuggestionsAriaLabel( + fieldName, + selectableOptions.length + )} + emptyMessage={} + onChange={(newSuggestions, _, changedOption) => { + setSelectableOptions(newSuggestions); + api.makeSelection(changedOption.key, showOnlySelected); + }} + > + {(list) => list} + +
+ + ); +}; diff --git a/examples/controls_example/public/react_controls/data_controls/options_list_control/constants.ts b/examples/controls_example/public/react_controls/data_controls/options_list_control/constants.ts new file mode 100644 index 0000000000000..6400e7b8efa42 --- /dev/null +++ b/examples/controls_example/public/react_controls/data_controls/options_list_control/constants.ts @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { OPTIONS_LIST_CONTROL } from '@kbn/controls-plugin/common'; +import { OptionsListSearchTechnique } from '@kbn/controls-plugin/common/options_list/suggestions_searching'; +import { OptionsListSortingType } from '@kbn/controls-plugin/common/options_list/suggestions_sorting'; + +export const OPTIONS_LIST_CONTROL_TYPE = OPTIONS_LIST_CONTROL; +export const DEFAULT_SEARCH_TECHNIQUE: OptionsListSearchTechnique = 'prefix'; +export const OPTIONS_LIST_DEFAULT_SORT: OptionsListSortingType = { + by: '_count', + direction: 'desc', +}; + +export const MIN_POPOVER_WIDTH = 300; + +export const MIN_OPTIONS_LIST_REQUEST_SIZE = 10; +export const MAX_OPTIONS_LIST_REQUEST_SIZE = 1000; diff --git a/examples/controls_example/public/react_controls/data_controls/options_list_control/fetch_and_validate.tsx b/examples/controls_example/public/react_controls/data_controls/options_list_control/fetch_and_validate.tsx new file mode 100644 index 0000000000000..5ed0d00623706 --- /dev/null +++ b/examples/controls_example/public/react_controls/data_controls/options_list_control/fetch_and_validate.tsx @@ -0,0 +1,121 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { + BehaviorSubject, + combineLatest, + debounceTime, + Observable, + switchMap, + tap, + withLatestFrom, +} from 'rxjs'; + +import { OptionsListSuccessResponse } from '@kbn/controls-plugin/common/options_list/types'; + +import { isValidSearch } from '../../../../common/options_list/suggestions_searching'; +import { ControlFetchContext } from '../../control_group/control_fetch'; +import { ControlStateManager } from '../../types'; +import { DataControlServices } from '../types'; +import { OptionsListFetchCache } from './options_list_fetch_cache'; +import { OptionsListComponentApi, OptionsListComponentState, OptionsListControlApi } from './types'; + +export function fetchAndValidate$({ + api, + services, + stateManager, +}: { + api: Pick & + Pick & { + controlFetch$: Observable; + loadingSuggestions$: BehaviorSubject; + debouncedSearchString: Observable; + }; + services: DataControlServices; + stateManager: ControlStateManager; +}): Observable { + const requestCache = new OptionsListFetchCache(); + let abortController: AbortController | undefined; + + return combineLatest([ + api.dataViews, + api.field$, + api.controlFetch$, + api.parentApi.allowExpensiveQueries$, + api.debouncedSearchString, + stateManager.sort, + stateManager.searchTechnique, + // cannot use requestSize directly, because we need to be able to reset the size to the default without refetching + api.loadMoreSubject.pipe(debounceTime(100)), // debounce load more so "loading" state briefly shows + ]).pipe( + tap(() => { + // abort any in progress requests + if (abortController) { + abortController.abort(); + abortController = undefined; + } + }), + withLatestFrom( + stateManager.requestSize, + stateManager.runPastTimeout, + stateManager.selectedOptions + ), + switchMap( + async ([ + [ + dataViews, + field, + controlFetchContext, + allowExpensiveQueries, + searchString, + sort, + searchTechnique, + ], + requestSize, + runPastTimeout, + selectedOptions, + ]) => { + const dataView = dataViews?.[0]; + if ( + !dataView || + !field || + !isValidSearch({ searchString, fieldType: field.type, searchTechnique }) + ) { + return { suggestions: [] }; + } + + /** Fetch the suggestions list + perform validation */ + api.loadingSuggestions$.next(true); + + const request = { + sort, + dataView, + searchString, + runPastTimeout, + searchTechnique, + selectedOptions, + field: field.toSpec(), + size: requestSize, + allowExpensiveQueries, + ...controlFetchContext, + }; + + const newAbortController = new AbortController(); + abortController = newAbortController; + try { + return await requestCache.runFetchRequest(request, newAbortController.signal, services); + } catch (error) { + return { error }; + } + } + ), + tap(() => { + api.loadingSuggestions$.next(false); + }) + ); +} diff --git a/examples/controls_example/public/react_controls/data_controls/options_list_control/get_options_list_control_factory.test.tsx b/examples/controls_example/public/react_controls/data_controls/options_list_control/get_options_list_control_factory.test.tsx new file mode 100644 index 0000000000000..d74070b980769 --- /dev/null +++ b/examples/controls_example/public/react_controls/data_controls/options_list_control/get_options_list_control_factory.test.tsx @@ -0,0 +1,347 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; + +import { coreMock } from '@kbn/core/public/mocks'; +import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; +import { DataView } from '@kbn/data-views-plugin/common'; +import { createStubDataView } from '@kbn/data-views-plugin/common/data_view.stub'; +import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks'; +import { act, render, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; + +import { getMockedBuildApi, getMockedControlGroupApi } from '../../mocks/control_mocks'; +import { getOptionsListControlFactory } from './get_options_list_control_factory'; + +describe('Options List Control Api', () => { + const uuid = 'myControl1'; + const controlGroupApi = getMockedControlGroupApi(); + const mockDataViews = dataViewPluginMocks.createStartContract(); + const mockCore = coreMock.createStart(); + + const waitOneTick = () => act(() => new Promise((resolve) => setTimeout(resolve, 0))); + + mockDataViews.get = jest.fn().mockImplementation(async (id: string): Promise => { + if (id !== 'myDataViewId') { + throw new Error(`Simulated error: no data view found for id ${id}`); + } + const stubDataView = createStubDataView({ + spec: { + id: 'myDataViewId', + fields: { + myFieldName: { + name: 'myFieldName', + customLabel: 'My field name', + type: 'string', + esTypes: ['keyword'], + aggregatable: true, + searchable: true, + }, + }, + title: 'logstash-*', + timeFieldName: '@timestamp', + }, + }); + stubDataView.getFormatterForField = jest.fn().mockImplementation(() => { + return { + getConverterFor: () => { + return (value: string) => `${value}:formatted`; + }, + toJSON: (value: any) => JSON.stringify(value), + }; + }); + return stubDataView; + }); + + const factory = getOptionsListControlFactory({ + core: mockCore, + data: dataPluginMock.createStartContract(), + dataViews: mockDataViews, + }); + + describe('filters$', () => { + test('should not set filters$ when selectedOptions is not provided', async () => { + const { api } = await factory.buildControl( + { + dataViewId: 'myDataViewId', + fieldName: 'myFieldName', + }, + getMockedBuildApi(uuid, factory, controlGroupApi), + uuid, + controlGroupApi + ); + expect(api.filters$.value).toBeUndefined(); + }); + + test('should set filters$ when selectedOptions is provided', async () => { + const { api } = await factory.buildControl( + { + dataViewId: 'myDataViewId', + fieldName: 'myFieldName', + selectedOptions: ['cool', 'test'], + }, + getMockedBuildApi(uuid, factory, controlGroupApi), + uuid, + controlGroupApi + ); + expect(api.filters$.value).toEqual([ + { + meta: { + index: 'myDataViewId', + key: 'myFieldName', + params: ['cool', 'test'], + type: 'phrases', + }, + query: { + bool: { + minimum_should_match: 1, + should: [ + { + match_phrase: { + myFieldName: 'cool', + }, + }, + { + match_phrase: { + myFieldName: 'test', + }, + }, + ], + }, + }, + }, + ]); + }); + + test('should set filters$ when exists is selected', async () => { + const { api } = await factory.buildControl( + { + dataViewId: 'myDataViewId', + fieldName: 'myFieldName', + existsSelected: true, + }, + getMockedBuildApi(uuid, factory, controlGroupApi), + uuid, + controlGroupApi + ); + expect(api.filters$.value).toEqual([ + { + meta: { + index: 'myDataViewId', + key: 'myFieldName', + }, + query: { + exists: { + field: 'myFieldName', + }, + }, + }, + ]); + }); + + test('should set filters$ when exclude is selected', async () => { + const { api } = await factory.buildControl( + { + dataViewId: 'myDataViewId', + fieldName: 'myFieldName', + existsSelected: true, + exclude: true, + }, + getMockedBuildApi(uuid, factory, controlGroupApi), + uuid, + controlGroupApi + ); + expect(api.filters$.value).toEqual([ + { + meta: { + index: 'myDataViewId', + key: 'myFieldName', + negate: true, + }, + query: { + exists: { + field: 'myFieldName', + }, + }, + }, + ]); + }); + }); + + describe('make selection', () => { + beforeAll(() => { + mockCore.http.fetch = jest.fn().mockResolvedValue({ + suggestions: [ + { value: 'woof', docCount: 10 }, + { value: 'bark', docCount: 15 }, + { value: 'meow', docCount: 12 }, + ], + }); + }); + + test('clicking another option unselects "Exists"', async () => { + const { Component } = await factory.buildControl( + { + dataViewId: 'myDataViewId', + fieldName: 'myFieldName', + existsSelected: true, + }, + getMockedBuildApi(uuid, factory, controlGroupApi), + uuid, + controlGroupApi + ); + + const control = render(); + userEvent.click(control.getByTestId(`optionsList-control-${uuid}`)); + await waitFor(() => { + expect(control.getAllByRole('option').length).toBe(4); + }); + + expect(control.getByTestId('optionsList-control-selection-exists')).toBeChecked(); + const option = control.getByTestId('optionsList-control-selection-woof'); + userEvent.click(option); + await waitOneTick(); + expect(control.getByTestId('optionsList-control-selection-exists')).not.toBeChecked(); + expect(option).toBeChecked(); + }); + + test('clicking "Exists" unselects all other selections', async () => { + const { Component } = await factory.buildControl( + { + dataViewId: 'myDataViewId', + fieldName: 'myFieldName', + selectedOptions: ['woof', 'bark'], + }, + getMockedBuildApi(uuid, factory, controlGroupApi), + uuid, + controlGroupApi + ); + + const control = render(); + userEvent.click(control.getByTestId(`optionsList-control-${uuid}`)); + await waitFor(() => { + expect(control.getAllByRole('option').length).toEqual(4); + }); + + const existsOption = control.getByTestId('optionsList-control-selection-exists'); + expect(existsOption).not.toBeChecked(); + expect(control.getByTestId('optionsList-control-selection-woof')).toBeChecked(); + expect(control.getByTestId('optionsList-control-selection-bark')).toBeChecked(); + expect(control.getByTestId('optionsList-control-selection-meow')).not.toBeChecked(); + + userEvent.click(existsOption); + await waitOneTick(); + expect(existsOption).toBeChecked(); + expect(control.getByTestId('optionsList-control-selection-woof')).not.toBeChecked(); + expect(control.getByTestId('optionsList-control-selection-bark')).not.toBeChecked(); + expect(control.getByTestId('optionsList-control-selection-meow')).not.toBeChecked(); + }); + + test('deselects when showOnlySelected is true', async () => { + const { Component, api } = await factory.buildControl( + { + dataViewId: 'myDataViewId', + fieldName: 'myFieldName', + selectedOptions: ['woof', 'bark'], + }, + getMockedBuildApi(uuid, factory, controlGroupApi), + uuid, + controlGroupApi + ); + + const control = render(); + userEvent.click(control.getByTestId(`optionsList-control-${uuid}`)); + await waitFor(() => { + expect(control.getAllByRole('option').length).toEqual(4); + }); + userEvent.click(control.getByTestId('optionsList-control-show-only-selected')); + + expect(control.getByTestId('optionsList-control-selection-woof')).toBeChecked(); + expect(control.getByTestId('optionsList-control-selection-bark')).toBeChecked(); + expect(control.queryByTestId('optionsList-control-selection-meow')).toBeNull(); + + userEvent.click(control.getByTestId('optionsList-control-selection-bark')); + await waitOneTick(); + expect(control.getByTestId('optionsList-control-selection-woof')).toBeChecked(); + expect(control.queryByTestId('optionsList-control-selection-bark')).toBeNull(); + expect(control.queryByTestId('optionsList-control-selection-meow')).toBeNull(); + + expect(api.filters$.value).toEqual([ + { + meta: { + index: 'myDataViewId', + key: 'myFieldName', + }, + query: { + match_phrase: { + myFieldName: 'woof', + }, + }, + }, + ]); + }); + + test('replace selection when singleSelect is true', async () => { + const { Component, api } = await factory.buildControl( + { + dataViewId: 'myDataViewId', + fieldName: 'myFieldName', + singleSelect: true, + selectedOptions: ['woof'], + }, + getMockedBuildApi(uuid, factory, controlGroupApi), + uuid, + controlGroupApi + ); + + const control = render(); + + expect(api.filters$.value).toEqual([ + { + meta: { + index: 'myDataViewId', + key: 'myFieldName', + }, + query: { + match_phrase: { + myFieldName: 'woof', + }, + }, + }, + ]); + + userEvent.click(control.getByTestId(`optionsList-control-${uuid}`)); + await waitFor(() => { + expect(control.getAllByRole('option').length).toEqual(4); + }); + expect(control.getByTestId('optionsList-control-selection-woof')).toBeChecked(); + expect(control.queryByTestId('optionsList-control-selection-bark')).not.toBeChecked(); + expect(control.queryByTestId('optionsList-control-selection-meow')).not.toBeChecked(); + userEvent.click(control.getByTestId('optionsList-control-selection-bark')); + await waitOneTick(); + expect(control.getByTestId('optionsList-control-selection-woof')).not.toBeChecked(); + expect(control.queryByTestId('optionsList-control-selection-bark')).toBeChecked(); + expect(control.queryByTestId('optionsList-control-selection-meow')).not.toBeChecked(); + + expect(api.filters$.value).toEqual([ + { + meta: { + index: 'myDataViewId', + key: 'myFieldName', + }, + query: { + match_phrase: { + myFieldName: 'bark', + }, + }, + }, + ]); + }); + }); +}); diff --git a/examples/controls_example/public/react_controls/data_controls/options_list_control/get_options_list_control_factory.tsx b/examples/controls_example/public/react_controls/data_controls/options_list_control/get_options_list_control_factory.tsx new file mode 100644 index 0000000000000..22927cadf3cb1 --- /dev/null +++ b/examples/controls_example/public/react_controls/data_controls/options_list_control/get_options_list_control_factory.tsx @@ -0,0 +1,410 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React, { useEffect } from 'react'; +import deepEqual from 'react-fast-compare'; +import { BehaviorSubject, combineLatest, debounceTime, filter, skip } from 'rxjs'; + +import { OptionsListSearchTechnique } from '@kbn/controls-plugin/common/options_list/suggestions_searching'; +import { OptionsListSortingType } from '@kbn/controls-plugin/common/options_list/suggestions_sorting'; +import { + OptionsListSuccessResponse, + OptionsListSuggestions, +} from '@kbn/controls-plugin/common/options_list/types'; +import { buildExistsFilter, buildPhraseFilter, buildPhrasesFilter, Filter } from '@kbn/es-query'; +import { useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; + +import { + getSelectionAsFieldType, + OptionsListSelection, +} from '../../../../common/options_list/options_list_selections'; +import { isValidSearch } from '../../../../common/options_list/suggestions_searching'; +import { initializeDataControl } from '../initialize_data_control'; +import { DataControlFactory, DataControlServices } from '../types'; +import { OptionsListControl } from './components/options_list_control'; +import { OptionsListEditorOptions } from './components/options_list_editor_options'; +import { + DEFAULT_SEARCH_TECHNIQUE, + MIN_OPTIONS_LIST_REQUEST_SIZE, + OPTIONS_LIST_CONTROL_TYPE, + OPTIONS_LIST_DEFAULT_SORT, +} from './constants'; +import { fetchAndValidate$ } from './fetch_and_validate'; +import { OptionsListControlContext } from './options_list_context_provider'; +import { OptionsListStrings } from './options_list_strings'; +import { OptionsListControlApi, OptionsListControlState } from './types'; + +export const getOptionsListControlFactory = ( + services: DataControlServices +): DataControlFactory => { + return { + type: OPTIONS_LIST_CONTROL_TYPE, + getIconType: () => 'editorChecklist', + getDisplayName: OptionsListStrings.control.getDisplayName, + isFieldCompatible: (field) => { + return ( + !field.spec.scripted && + field.aggregatable && + ['string', 'boolean', 'ip', 'date', 'number'].includes(field.type) + ); + }, + CustomOptionsComponent: OptionsListEditorOptions, + buildControl: async (initialState, buildApi, uuid, controlGroupApi) => { + /** Serializable state - i.e. the state that is saved with the control */ + const searchTechnique$ = new BehaviorSubject( + initialState.searchTechnique ?? DEFAULT_SEARCH_TECHNIQUE + ); + const runPastTimeout$ = new BehaviorSubject(initialState.runPastTimeout); + const singleSelect$ = new BehaviorSubject(initialState.singleSelect); + const selections$ = new BehaviorSubject( + initialState.selectedOptions ?? [] + ); + const sort$ = new BehaviorSubject( + initialState.sort ?? OPTIONS_LIST_DEFAULT_SORT + ); + const existsSelected$ = new BehaviorSubject(initialState.existsSelected); + const excludeSelected$ = new BehaviorSubject(initialState.exclude); + + /** Creation options state - cannot currently be changed after creation, but need subjects for comparators */ + const placeholder$ = new BehaviorSubject(initialState.placeholder); + const hideActionBar$ = new BehaviorSubject(initialState.hideActionBar); + const hideExclude$ = new BehaviorSubject(initialState.hideExclude); + const hideExists$ = new BehaviorSubject(initialState.hideExists); + const hideSort$ = new BehaviorSubject(initialState.hideSort); + + /** Runtime / component state - none of this is serialized */ + const searchString$ = new BehaviorSubject(''); + const searchStringValid$ = new BehaviorSubject(true); + const requestSize$ = new BehaviorSubject(MIN_OPTIONS_LIST_REQUEST_SIZE); + + const availableOptions$ = new BehaviorSubject(undefined); + const invalidSelections$ = new BehaviorSubject>(new Set()); + const totalCardinality$ = new BehaviorSubject(0); + + const dataControl = initializeDataControl< + Pick + >( + uuid, + OPTIONS_LIST_CONTROL_TYPE, + initialState, + { searchTechnique: searchTechnique$, singleSelect: singleSelect$ }, + controlGroupApi, + services + ); + + const stateManager = { + ...dataControl.stateManager, + exclude: excludeSelected$, + existsSelected: existsSelected$, + searchTechnique: searchTechnique$, + selectedOptions: selections$, + singleSelect: singleSelect$, + sort: sort$, + searchString: searchString$, + searchStringValid: searchStringValid$, + runPastTimeout: runPastTimeout$, + requestSize: requestSize$, + }; + + /** Handle loading state; since suggestion fetching and validation are tied, only need one loading subject */ + const loadingSuggestions$ = new BehaviorSubject(false); + const dataLoadingSubscription = loadingSuggestions$ + .pipe( + debounceTime(100) // debounce set loading so that it doesn't flash as the user types + ) + .subscribe((isLoading) => { + dataControl.api.setDataLoading(isLoading); + }); + + /** Debounce the search string changes to reduce the number of fetch requests */ + const debouncedSearchString = stateManager.searchString.pipe(debounceTime(100)); + + /** Validate the search string as the user types */ + const validSearchStringSubscription = combineLatest([ + debouncedSearchString, + dataControl.api.field$, + searchTechnique$, + ]).subscribe(([newSearchString, field, searchTechnique]) => { + searchStringValid$.next( + isValidSearch({ + searchString: newSearchString, + fieldType: field?.type, + searchTechnique, + }) + ); + }); + + /** Clear state when the field changes */ + const fieldChangedSubscription = combineLatest([ + dataControl.stateManager.fieldName, + dataControl.stateManager.dataViewId, + ]) + .pipe( + skip(1) // skip first, since this represents initialization + ) + .subscribe(() => { + searchString$.next(''); + selections$.next(undefined); + existsSelected$.next(false); + excludeSelected$.next(false); + requestSize$.next(MIN_OPTIONS_LIST_REQUEST_SIZE); + sort$.next(OPTIONS_LIST_DEFAULT_SORT); + }); + + /** Fetch the suggestions and perform validation */ + const loadMoreSubject = new BehaviorSubject(null); + const fetchSubscription = fetchAndValidate$({ + services, + api: { + ...dataControl.api, + loadMoreSubject, + loadingSuggestions$, + debouncedSearchString, + parentApi: controlGroupApi, + controlFetch$: controlGroupApi.controlFetch$(uuid), + }, + stateManager, + }).subscribe((result) => { + // if there was an error during fetch, set blocking error and return early + if (Object.hasOwn(result, 'error')) { + dataControl.api.setBlockingError((result as { error: Error }).error); + return; + } else if (dataControl.api.blockingError.getValue()) { + // otherwise, if there was a previous error, clear it + dataControl.api.setBlockingError(undefined); + } + + // fetch was successful so set all attributes from result + const successResponse = result as OptionsListSuccessResponse; + availableOptions$.next(successResponse.suggestions); + totalCardinality$.next(successResponse.totalCardinality ?? 0); + invalidSelections$.next(new Set(successResponse.invalidSelections ?? [])); + + // reset the request size back to the minimum (if it's not already) + if (stateManager.requestSize.getValue() !== MIN_OPTIONS_LIST_REQUEST_SIZE) { + stateManager.requestSize.next(MIN_OPTIONS_LIST_REQUEST_SIZE); + } + }); + + /** Remove all other selections if this control becomes a single select */ + const singleSelectSubscription = singleSelect$ + .pipe(filter((singleSelect) => Boolean(singleSelect))) + .subscribe(() => { + const currentSelections = selections$.getValue() ?? []; + if (currentSelections.length > 1) selections$.next([currentSelections[0]]); + }); + + /** Output filters when selections change */ + const outputFilterSubscription = combineLatest([ + dataControl.api.dataViews, + dataControl.stateManager.fieldName, + selections$, + existsSelected$, + excludeSelected$, + ]).subscribe(([dataViews, fieldName, selections, existsSelected, exclude]) => { + const dataView = dataViews?.[0]; + const field = dataView && fieldName ? dataView.getFieldByName(fieldName) : undefined; + + if (!dataView || !field) return; + + let newFilter: Filter | undefined; + if (existsSelected) { + newFilter = buildExistsFilter(field, dataView); + } else if (selections && selections.length > 0) { + newFilter = + selections.length === 1 + ? buildPhraseFilter(field, selections[0], dataView) + : buildPhrasesFilter(field, selections, dataView); + } + if (newFilter) { + newFilter.meta.key = field?.name; + if (exclude) newFilter.meta.negate = true; + } + api.setOutputFilter(newFilter); + }); + + const api = buildApi( + { + ...dataControl.api, + getTypeDisplayName: OptionsListStrings.control.getDisplayName, + serializeState: () => { + const { rawState: dataControlState, references } = dataControl.serialize(); + return { + rawState: { + ...dataControlState, + searchTechnique: searchTechnique$.getValue(), + runPastTimeout: runPastTimeout$.getValue(), + singleSelect: singleSelect$.getValue(), + selections: selections$.getValue(), + sort: sort$.getValue(), + existsSelected: existsSelected$.getValue(), + exclude: excludeSelected$.getValue(), + + // serialize state that cannot be changed to keep it consistent + placeholder: placeholder$.getValue(), + hideActionBar: hideActionBar$.getValue(), + hideExclude: hideExclude$.getValue(), + hideExists: hideExists$.getValue(), + hideSort: hideSort$.getValue(), + }, + references, // does not have any references other than those provided by the data control serializer + }; + }, + clearSelections: () => { + if (selections$.getValue()?.length) selections$.next([]); + if (existsSelected$.getValue()) existsSelected$.next(false); + if (invalidSelections$.getValue().size) invalidSelections$.next(new Set([])); + }, + }, + { + ...dataControl.comparators, + exclude: [excludeSelected$, (selected) => excludeSelected$.next(selected)], + existsSelected: [existsSelected$, (selected) => existsSelected$.next(selected)], + runPastTimeout: [runPastTimeout$, (runPast) => runPastTimeout$.next(runPast)], + searchTechnique: [ + searchTechnique$, + (technique) => searchTechnique$.next(technique), + (a, b) => (a ?? DEFAULT_SEARCH_TECHNIQUE) === (b ?? DEFAULT_SEARCH_TECHNIQUE), + ], + selectedOptions: [ + selections$, + (selections) => selections$.next(selections), + (a, b) => deepEqual(a ?? [], b ?? []), + ], + singleSelect: [singleSelect$, (selected) => singleSelect$.next(selected)], + sort: [ + sort$, + (sort) => sort$.next(sort), + (a, b) => (a ?? OPTIONS_LIST_DEFAULT_SORT) === (b ?? OPTIONS_LIST_DEFAULT_SORT), + ], + + /** This state cannot currently be changed after the control is created */ + placeholder: [placeholder$, (placeholder) => placeholder$.next(placeholder)], + hideActionBar: [hideActionBar$, (hideActionBar) => hideActionBar$.next(hideActionBar)], + hideExclude: [hideExclude$, (hideExclude) => hideExclude$.next(hideExclude)], + hideExists: [hideExists$, (hideExists) => hideExists$.next(hideExists)], + hideSort: [hideSort$, (hideSort) => hideSort$.next(hideSort)], + } + ); + + const componentApi = { + ...api, + selections$, + loadMoreSubject, + totalCardinality$, + availableOptions$, + invalidSelections$, + deselectOption: (key: string | undefined) => { + const field = api.field$.getValue(); + if (!key || !field) { + api.setBlockingError( + new Error(OptionsListStrings.control.getInvalidSelectionMessage()) + ); + return; + } + + const keyAsType = getSelectionAsFieldType(field, key); + + // delete from selections + const selectedOptions = selections$.getValue() ?? []; + const itemIndex = (selections$.getValue() ?? []).indexOf(keyAsType); + if (itemIndex !== -1) { + const newSelections = [...selectedOptions]; + newSelections.splice(itemIndex, 1); + selections$.next(newSelections); + } + // delete from invalid selections + const currentInvalid = invalidSelections$.getValue(); + if (currentInvalid.has(keyAsType)) { + currentInvalid.delete(keyAsType); + invalidSelections$.next(new Set(currentInvalid)); + } + }, + makeSelection: (key: string | undefined, showOnlySelected: boolean) => { + const field = api.field$.getValue(); + if (!key || !field) { + api.setBlockingError( + new Error(OptionsListStrings.control.getInvalidSelectionMessage()) + ); + return; + } + + const existsSelected = Boolean(existsSelected$.getValue()); + const selectedOptions = selections$.getValue() ?? []; + const singleSelect = singleSelect$.getValue(); + + // the order of these checks matters, so be careful if rearranging them + const keyAsType = getSelectionAsFieldType(field, key); + if (key === 'exists-option') { + // if selecting exists, then deselect everything else + existsSelected$.next(!existsSelected); + if (!existsSelected) { + selections$.next([]); + invalidSelections$.next(new Set([])); + } + } else if (showOnlySelected || selectedOptions.includes(keyAsType)) { + componentApi.deselectOption(key); + } else if (singleSelect) { + // replace selection + selections$.next([keyAsType]); + if (existsSelected) existsSelected$.next(false); + } else { + // select option + if (!selectedOptions) selections$.next([]); + if (existsSelected) existsSelected$.next(false); + selections$.next([...selectedOptions, keyAsType]); + } + }, + }; + + if (initialState.selectedOptions?.length || initialState.existsSelected) { + // has selections, so wait for initialization of filters + await dataControl.untilFiltersInitialized(); + } + + return { + api, + Component: ({ className: controlPanelClassName }) => { + useEffect(() => { + return () => { + // on unmount, clean up all subscriptions + dataLoadingSubscription.unsubscribe(); + fetchSubscription.unsubscribe(); + fieldChangedSubscription.unsubscribe(); + outputFilterSubscription.unsubscribe(); + singleSelectSubscription.unsubscribe(); + validSearchStringSubscription.unsubscribe(); + }; + }, []); + + /** Get display settings - if these are ever made editable, should be part of stateManager instead */ + const [placeholder, hideActionBar, hideExclude, hideExists, hideSort] = + useBatchedPublishingSubjects( + placeholder$, + hideActionBar$, + hideExclude$, + hideExists$, + hideSort$ + ); + + return ( + + + + ); + }, + }; + }, + }; +}; diff --git a/examples/controls_example/public/react_controls/data_controls/options_list_control/options_list_context_provider.tsx b/examples/controls_example/public/react_controls/data_controls/options_list_control/options_list_context_provider.tsx new file mode 100644 index 0000000000000..71783210bddfb --- /dev/null +++ b/examples/controls_example/public/react_controls/data_controls/options_list_control/options_list_context_provider.tsx @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React, { useContext } from 'react'; + +import { ControlStateManager } from '../../types'; +import { + OptionsListComponentApi, + OptionsListComponentState, + OptionsListDisplaySettings, +} from './types'; + +export const OptionsListControlContext = React.createContext< + | { + api: OptionsListComponentApi; + stateManager: ControlStateManager; + displaySettings: OptionsListDisplaySettings; + } + | undefined +>(undefined); + +export const useOptionsListContext = () => { + const optionsListContext = useContext(OptionsListControlContext); + if (!optionsListContext) + throw new Error( + 'No OptionsListControlContext.Provider found when calling useOptionsListContext.' + ); + return optionsListContext; +}; diff --git a/examples/controls_example/public/react_controls/data_controls/options_list_control/options_list_fetch_cache.ts b/examples/controls_example/public/react_controls/data_controls/options_list_control/options_list_fetch_cache.ts new file mode 100644 index 0000000000000..84f9d2fc5e206 --- /dev/null +++ b/examples/controls_example/public/react_controls/data_controls/options_list_control/options_list_fetch_cache.ts @@ -0,0 +1,122 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import LRUCache from 'lru-cache'; +import hash from 'object-hash'; + +import dateMath from '@kbn/datemath'; + +import { + type OptionsListFailureResponse, + type OptionsListRequest, + type OptionsListResponse, + type OptionsListSuccessResponse, +} from '@kbn/controls-plugin/common/options_list/types'; +import { getEsQueryConfig } from '@kbn/data-plugin/public'; +import { buildEsQuery } from '@kbn/es-query'; +import { DataControlServices } from '../types'; + +const REQUEST_CACHE_SIZE = 50; // only store a max of 50 responses +const REQUEST_CACHE_TTL = 1000 * 60; // time to live = 1 minute + +const optionsListResponseWasFailure = ( + response: OptionsListResponse +): response is OptionsListFailureResponse => { + return (response as OptionsListFailureResponse).error !== undefined; +}; + +export class OptionsListFetchCache { + private cache: LRUCache; + + constructor() { + this.cache = new LRUCache({ + max: REQUEST_CACHE_SIZE, + maxAge: REQUEST_CACHE_TTL, + }); + } + + private getRequestHash = (request: OptionsListRequest) => { + const { + size, + sort, + query, + filters, + timeRange, + searchString, + runPastTimeout, + selectedOptions, + searchTechnique, + field: { name: fieldName }, + dataView: { title: dataViewTitle }, + } = request; + return hash({ + // round timeRange to the minute to avoid cache misses + timeRange: timeRange + ? JSON.stringify({ + from: dateMath.parse(timeRange.from)!.startOf('minute').toISOString(), + to: dateMath.parse(timeRange.to)!.endOf('minute').toISOString(), + }) + : [], + selectedOptions, + filters, + query, + sort, + searchTechnique, + runPastTimeout, + dataViewTitle, + searchString: searchString ?? '', + fieldName, + size, + }); + }; + + public async runFetchRequest( + request: OptionsListRequest, + abortSignal: AbortSignal, + services: DataControlServices + ): Promise { + const requestHash = this.getRequestHash(request); + + if (this.cache.has(requestHash)) { + return Promise.resolve(this.cache.get(requestHash)!); + } else { + const index = request.dataView.getIndexPattern(); + + const timeService = services.data.query.timefilter.timefilter; + const { query, filters, dataView, timeRange, field, ...passThroughProps } = request; + const timeFilter = timeRange ? timeService.createFilter(dataView, timeRange) : undefined; + const filtersToUse = [...(filters ?? []), ...(timeFilter ? [timeFilter] : [])]; + const config = getEsQueryConfig(services.core.uiSettings); + const esFilters = [buildEsQuery(dataView, query ?? [], filtersToUse ?? [], config)]; + + const requestBody = { + ...passThroughProps, + filters: esFilters, + fieldName: field.name, + fieldSpec: field, + runtimeFieldMap: dataView.toSpec?.().runtimeFieldMap, + }; + + const result = await services.core.http.fetch( + `/internal/controls/optionsList/${index}`, + { + version: '1', + body: JSON.stringify(requestBody), + signal: abortSignal, + method: 'POST', + } + ); + + if (!optionsListResponseWasFailure(result)) { + // only add the success responses to the cache + this.cache.set(requestHash, result); + } + return result; + } + } +} diff --git a/examples/controls_example/public/react_controls/data_controls/options_list_control/options_list_strings.ts b/examples/controls_example/public/react_controls/data_controls/options_list_control/options_list_strings.ts new file mode 100644 index 0000000000000..5bf1c4c92239a --- /dev/null +++ b/examples/controls_example/public/react_controls/data_controls/options_list_control/options_list_strings.ts @@ -0,0 +1,323 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { OptionsListSearchTechnique } from '../../../../common/options_list/suggestions_searching'; + +export const OptionsListStrings = { + control: { + getDisplayName: () => + i18n.translate('controls.optionsList.displayName', { + defaultMessage: 'Options list', + }), + getSeparator: (type?: string) => { + if (['date', 'number'].includes(type ?? '')) { + return i18n.translate('controls.optionsList.control.dateSeparator', { + defaultMessage: '; ', + }); + } + return i18n.translate('controls.optionsList.control.separator', { + defaultMessage: ', ', + }); + }, + getPlaceholder: () => + i18n.translate('controls.optionsList.control.placeholder', { + defaultMessage: 'Any', + }), + getNegate: () => + i18n.translate('controls.optionsList.control.negate', { + defaultMessage: 'NOT', + }), + getExcludeExists: () => + i18n.translate('controls.optionsList.control.excludeExists', { + defaultMessage: 'DOES NOT', + }), + getInvalidSelectionWarningLabel: (invalidSelectionCount: number) => + i18n.translate('controls.optionsList.control.invalidSelectionWarningLabel', { + defaultMessage: + '{invalidSelectionCount} {invalidSelectionCount, plural, one {selection returns} other {selections return}} no results.', + values: { + invalidSelectionCount, + }, + }), + getInvalidSelectionMessage: () => + i18n.translate('controls.optionsList.popover.selectionError', { + defaultMessage: 'There was an error when making your selection', + }), + }, + editor: { + getSelectionOptionsTitle: () => + i18n.translate('controls.optionsList.editor.selectionOptionsTitle', { + defaultMessage: 'Selections', + }), + selectionTypes: { + multi: { + getLabel: () => + i18n.translate('controls.optionsList.editor.multiSelectLabel', { + defaultMessage: 'Allow multiple selections', + }), + }, + single: { + getLabel: () => + i18n.translate('controls.optionsList.editor.singleSelectLabel', { + defaultMessage: 'Only allow a single selection', + }), + }, + }, + getSearchOptionsTitle: () => + i18n.translate('controls.optionsList.editor.searchOptionsTitle', { + defaultMessage: `Searching`, + }), + searchTypes: { + prefix: { + getLabel: () => + i18n.translate('controls.optionsList.editor.prefixSearchLabel', { + defaultMessage: 'Prefix', + }), + getTooltip: () => + i18n.translate('controls.optionsList.editor.prefixSearchTooltip', { + defaultMessage: 'Matches values that begin with the given search string.', + }), + }, + wildcard: { + getLabel: () => + i18n.translate('controls.optionsList.editor.wildcardSearchLabel', { + defaultMessage: 'Contains', + }), + getTooltip: () => + i18n.translate('controls.optionsList.editor.wildcardSearchTooltip', { + defaultMessage: + 'Matches values that contain the given search string. Results might take longer to populate.', + }), + }, + exact: { + getLabel: () => + i18n.translate('controls.optionsList.editor.exactSearchLabel', { + defaultMessage: 'Exact', + }), + getTooltip: () => + i18n.translate('controls.optionsList.editor.exactSearchTooltip', { + defaultMessage: + 'Matches values that are equal to the given search string. Returns results quickly.', + }), + }, + }, + getAdditionalSettingsTitle: () => + i18n.translate('controls.optionsList.editor.additionalSettingsTitle', { + defaultMessage: `Additional settings`, + }), + getRunPastTimeoutTitle: () => + i18n.translate('controls.optionsList.editor.runPastTimeout', { + defaultMessage: 'Ignore timeout for results', + }), + getRunPastTimeoutTooltip: () => + i18n.translate('controls.optionsList.editor.runPastTimeout.tooltip', { + defaultMessage: + 'Wait to display results until the list is complete. This setting is useful for large data sets, but the results might take longer to populate.', + }), + }, + popover: { + getAriaLabel: (fieldName: string) => + i18n.translate('controls.optionsList.popover.ariaLabel', { + defaultMessage: 'Popover for {fieldName} control', + values: { fieldName }, + }), + getSuggestionsAriaLabel: (fieldName: string, optionCount: number) => + i18n.translate('controls.optionsList.popover.suggestionsAriaLabel', { + defaultMessage: + 'Available {optionCount, plural, one {option} other {options}} for {fieldName}', + values: { fieldName, optionCount }, + }), + getAllowExpensiveQueriesWarning: () => + i18n.translate('controls.optionsList.popover.allowExpensiveQueriesWarning', { + defaultMessage: + 'The cluster setting to allow expensive queries is off, so some features are disabled.', + }), + getLoadingMoreMessage: () => + i18n.translate('controls.optionsList.popover.loadingMore', { + defaultMessage: 'Loading more options...', + }), + getAtEndOfOptionsMessage: () => + i18n.translate('controls.optionsList.popover.endOfOptions', { + defaultMessage: + 'The top 1,000 available options are displayed. View more options by searching for the name.', + }), + getEmptyMessage: () => + i18n.translate('controls.optionsList.popover.empty', { + defaultMessage: 'No options found', + }), + getSelectionsEmptyMessage: () => + i18n.translate('controls.optionsList.popover.selectionsEmpty', { + defaultMessage: 'You have no selections', + }), + getInvalidSearchMessage: (fieldType: string) => { + switch (fieldType) { + case 'ip': { + return i18n.translate('controls.optionsList.popover.invalidSearch.ip', { + defaultMessage: 'Your search is not a valid IP address.', + }); + } + case 'number': { + return i18n.translate('controls.optionsList.popover.invalidSearch.number', { + defaultMessage: 'Your search is not a valid number.', + }); + } + default: { + // this shouldn't happen, but giving a fallback error message just in case + return i18n.translate('controls.optionsList.popover.invalidSearch.invalidCharacters', { + defaultMessage: 'Your search contains invalid characters.', + }); + } + } + }, + getAllOptionsButtonTitle: () => + i18n.translate('controls.optionsList.popover.allOptionsTitle', { + defaultMessage: 'Show all options', + }), + getSelectedOptionsButtonTitle: () => + i18n.translate('controls.optionsList.popover.selectedOptionsTitle', { + defaultMessage: 'Show only selected options', + }), + getSearchPlaceholder: (searchTechnique?: OptionsListSearchTechnique) => { + switch (searchTechnique) { + case 'prefix': { + return i18n.translate('controls.optionsList.popover.prefixSearchPlaceholder', { + defaultMessage: 'Starts with...', + }); + } + case 'wildcard': { + return i18n.translate('controls.optionsList.popover.wildcardSearchPlaceholder', { + defaultMessage: 'Contains...', + }); + } + case 'exact': { + return i18n.translate('controls.optionsList.popover.exactSearchPlaceholder', { + defaultMessage: 'Equals...', + }); + } + } + }, + getCardinalityLabel: (totalOptions: number) => + i18n.translate('controls.optionsList.popover.cardinalityLabel', { + defaultMessage: + '{totalOptions, number} {totalOptions, plural, one {option} other {options}}', + values: { totalOptions }, + }), + getInvalidSelectionsSectionAriaLabel: (fieldName: string, invalidSelectionCount: number) => + i18n.translate('controls.optionsList.popover.invalidSelectionsAriaLabel', { + defaultMessage: + 'Invalid {invalidSelectionCount, plural, one {selection} other {selections}} for {fieldName}', + values: { fieldName, invalidSelectionCount }, + }), + getInvalidSelectionsSectionTitle: (invalidSelectionCount: number) => + i18n.translate('controls.optionsList.popover.invalidSelectionsSectionTitle', { + defaultMessage: + 'Invalid {invalidSelectionCount, plural, one {selection} other {selections}}', + values: { invalidSelectionCount }, + }), + getInvalidSelectionsLabel: (selectedOptions: number) => + i18n.translate('controls.optionsList.popover.invalidSelectionsLabel', { + defaultMessage: + '{selectedOptions} {selectedOptions, plural, one {selection} other {selections}} invalid', + values: { selectedOptions }, + }), + getInvalidSelectionScreenReaderText: () => + i18n.translate('controls.optionsList.popover.invalidSelectionScreenReaderText', { + defaultMessage: 'Invalid selection.', + }), + getIncludeLabel: () => + i18n.translate('controls.optionsList.popover.includeLabel', { + defaultMessage: 'Include', + }), + getExcludeLabel: () => + i18n.translate('controls.optionsList.popover.excludeLabel', { + defaultMessage: 'Exclude', + }), + getIncludeExcludeLegend: () => + i18n.translate('controls.optionsList.popover.excludeOptionsLegend', { + defaultMessage: 'Include or exclude selections', + }), + getSortPopoverTitle: () => + i18n.translate('controls.optionsList.popover.sortTitle', { + defaultMessage: 'Sort', + }), + getSortPopoverDescription: () => + i18n.translate('controls.optionsList.popover.sortDescription', { + defaultMessage: 'Define the sort order', + }), + getSortDisabledTooltip: () => + i18n.translate('controls.optionsList.popover.sortDisabledTooltip', { + defaultMessage: 'Sorting is ignored when “Show only selected” is true', + }), + getDocumentCountTooltip: (documentCount: number) => + i18n.translate('controls.optionsList.popover.documentCountTooltip', { + defaultMessage: + 'This value appears in {documentCount, number} {documentCount, plural, one {document} other {documents}}', + values: { documentCount }, + }), + getDocumentCountScreenReaderText: (documentCount: number) => + i18n.translate('controls.optionsList.popover.documentCountScreenReaderText', { + defaultMessage: + 'Appears in {documentCount, number} {documentCount, plural, one {document} other {documents}}', + values: { documentCount }, + }), + }, + controlAndPopover: { + getExists: (negate: number = +false) => + i18n.translate('controls.optionsList.controlAndPopover.exists', { + defaultMessage: '{negate, plural, one {Exist} other {Exists}}', + values: { negate }, + }), + }, + editorAndPopover: { + getSortDirectionLegend: () => + i18n.translate('controls.optionsList.popover.sortDirections', { + defaultMessage: 'Sort directions', + }), + sortBy: { + _count: { + getSortByLabel: () => + i18n.translate('controls.optionsList.popover.sortBy.docCount', { + defaultMessage: 'By document count', + }), + }, + _key: { + getSortByLabel: (type?: string) => { + switch (type) { + case 'date': + return i18n.translate('controls.optionsList.popover.sortBy.date', { + defaultMessage: 'By date', + }); + case 'number': + return i18n.translate('controls.optionsList.popover.sortBy.numeric', { + defaultMessage: 'Numerically', + }); + default: + return i18n.translate('controls.optionsList.popover.sortBy.alphabetical', { + defaultMessage: 'Alphabetically', + }); + } + }, + }, + }, + sortOrder: { + asc: { + getSortOrderLabel: () => + i18n.translate('controls.optionsList.popover.sortOrder.asc', { + defaultMessage: 'Ascending', + }), + }, + desc: { + getSortOrderLabel: () => + i18n.translate('controls.optionsList.popover.sortOrder.desc', { + defaultMessage: 'Descending', + }), + }, + }, + }, +}; diff --git a/examples/controls_example/public/react_controls/data_controls/options_list_control/types.ts b/examples/controls_example/public/react_controls/data_controls/options_list_control/types.ts new file mode 100644 index 0000000000000..3fba2f6908d0c --- /dev/null +++ b/examples/controls_example/public/react_controls/data_controls/options_list_control/types.ts @@ -0,0 +1,59 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { BehaviorSubject } from 'rxjs'; + +import { OptionsListSearchTechnique } from '@kbn/controls-plugin/common/options_list/suggestions_searching'; +import { OptionsListSortingType } from '@kbn/controls-plugin/common/options_list/suggestions_sorting'; +import { OptionsListSuggestions } from '@kbn/controls-plugin/common/options_list/types'; +import { PublishingSubject } from '@kbn/presentation-publishing'; + +import { OptionsListSelection } from '../../../../common/options_list/options_list_selections'; +import { DataControlApi, DefaultDataControlState } from '../types'; + +export interface OptionsListDisplaySettings { + placeholder?: string; + hideActionBar?: boolean; + hideExclude?: boolean; + hideExists?: boolean; + hideSort?: boolean; +} + +export interface OptionsListControlState + extends DefaultDataControlState, + OptionsListDisplaySettings { + searchTechnique?: OptionsListSearchTechnique; + sort?: OptionsListSortingType; + selectedOptions?: OptionsListSelection[]; + existsSelected?: boolean; + runPastTimeout?: boolean; + singleSelect?: boolean; + exclude?: boolean; +} + +export type OptionsListControlApi = DataControlApi; + +export interface OptionsListComponentState + extends Omit { + searchString: string; + searchStringValid: boolean; + requestSize: number; +} + +interface PublishesOptions { + availableOptions$: PublishingSubject; + invalidSelections$: PublishingSubject>; + totalCardinality$: PublishingSubject; +} + +export type OptionsListComponentApi = OptionsListControlApi & + PublishesOptions & { + deselectOption: (key: string | undefined) => void; + makeSelection: (key: string | undefined, showOnlySelected: boolean) => void; + loadMoreSubject: BehaviorSubject; + }; diff --git a/examples/controls_example/public/react_controls/data_controls/range_slider/get_range_slider_control_factory.test.tsx b/examples/controls_example/public/react_controls/data_controls/range_slider/get_range_slider_control_factory.test.tsx index 3746d81f44473..110de033520de 100644 --- a/examples/controls_example/public/react_controls/data_controls/range_slider/get_range_slider_control_factory.test.tsx +++ b/examples/controls_example/public/react_controls/data_controls/range_slider/get_range_slider_control_factory.test.tsx @@ -7,22 +7,19 @@ */ import React from 'react'; -import { BehaviorSubject, of } from 'rxjs'; +import { of } from 'rxjs'; import { estypes } from '@elastic/elasticsearch'; import { coreMock } from '@kbn/core/public/mocks'; import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; +import { DataViewField } from '@kbn/data-views-plugin/common'; import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks'; -import { TimeRange } from '@kbn/es-query'; import { SerializedPanelState } from '@kbn/presentation-containers'; -import { StateComparators } from '@kbn/presentation-publishing'; import { fireEvent, render, waitFor } from '@testing-library/react'; -import { ControlFetchContext } from '../../control_group/control_fetch'; -import { ControlGroupApi } from '../../control_group/types'; -import { ControlApiRegistration } from '../../types'; +import { getMockedBuildApi, getMockedControlGroupApi } from '../../mocks/control_mocks'; import { getRangesliderControlFactory } from './get_range_slider_control_factory'; -import { RangesliderControlApi, RangesliderControlState } from './types'; +import { RangesliderControlState } from './types'; const DEFAULT_TOTAL_RESULTS = 20; const DEFAULT_MIN = 0; @@ -30,14 +27,9 @@ const DEFAULT_MAX = 1000; describe('RangesliderControlApi', () => { const uuid = 'myControl1'; - const dashboardApi = { - timeRange$: new BehaviorSubject(undefined), - }; - const controlGroupApi = { - controlFetch$: () => new BehaviorSubject({}), - ignoreParentSettings$: new BehaviorSubject(undefined), - parentApi: dashboardApi, - } as unknown as ControlGroupApi; + + const controlGroupApi = getMockedControlGroupApi(); + const dataStartServiceMock = dataPluginMock.createStartContract(); let totalResults = DEFAULT_TOTAL_RESULTS; let min: estypes.AggregationsSingleMetricAggregateBase['value'] = DEFAULT_MIN; @@ -62,8 +54,8 @@ describe('RangesliderControlApi', () => { }; }); const mockDataViews = dataViewPluginMocks.createStartContract(); - // @ts-ignore - mockDataViews.get = async (id: string): Promise => { + + mockDataViews.get = jest.fn().mockImplementation(async (id: string): Promise => { if (id !== 'myDataViewId') { throw new Error(`no data view found for id ${id}`); } @@ -74,7 +66,8 @@ describe('RangesliderControlApi', () => { { displayName: 'My field name', name: 'myFieldName', - type: 'string', + type: 'number', + toSpec: jest.fn(), }, ].find((field) => fieldName === field.name); }, @@ -86,7 +79,8 @@ describe('RangesliderControlApi', () => { }; }, } as unknown as DataView; - }; + }); + const factory = getRangesliderControlFactory({ core: coreMock.createStart(), data: dataStartServiceMock, @@ -99,28 +93,14 @@ describe('RangesliderControlApi', () => { max = DEFAULT_MAX; }); - function buildApiMock( - api: ControlApiRegistration, - nextComparitors: StateComparators - ) { - return { - ...api, - uuid, - parentApi: controlGroupApi, - unsavedChanges: new BehaviorSubject | undefined>(undefined), - resetUnsavedChanges: () => {}, - type: factory.type, - }; - } - - describe('on initialize', () => { + describe('filters$', () => { test('should not set filters$ when value is not provided', async () => { const { api } = await factory.buildControl( { dataViewId: 'myDataView', fieldName: 'myFieldName', }, - buildApiMock, + getMockedBuildApi(uuid, factory, controlGroupApi), uuid, controlGroupApi ); @@ -134,7 +114,7 @@ describe('RangesliderControlApi', () => { fieldName: 'myFieldName', value: ['5', '10'], }, - buildApiMock, + getMockedBuildApi(uuid, factory, controlGroupApi), uuid, controlGroupApi ); @@ -169,7 +149,7 @@ describe('RangesliderControlApi', () => { fieldName: 'myFieldName', value: ['5', '10'], }, - buildApiMock, + getMockedBuildApi(uuid, factory, controlGroupApi), uuid, controlGroupApi ); @@ -191,7 +171,7 @@ describe('RangesliderControlApi', () => { fieldName: 'myFieldName', value: ['5', '10'], }, - buildApiMock, + getMockedBuildApi(uuid, factory, controlGroupApi), uuid, controlGroupApi ); @@ -209,7 +189,7 @@ describe('RangesliderControlApi', () => { dataViewId: 'myDataViewId', fieldName: 'myFieldName', }, - buildApiMock, + getMockedBuildApi(uuid, factory, controlGroupApi), uuid, controlGroupApi ); @@ -230,7 +210,7 @@ describe('RangesliderControlApi', () => { dataViewId: 'myDataViewId', fieldName: 'myFieldName', }, - buildApiMock, + getMockedBuildApi(uuid, factory, controlGroupApi), uuid, controlGroupApi ); @@ -245,7 +225,7 @@ describe('RangesliderControlApi', () => { fieldName: 'myFieldName', step: 1024, }, - buildApiMock, + getMockedBuildApi(uuid, factory, controlGroupApi), uuid, controlGroupApi ); @@ -259,9 +239,11 @@ describe('RangesliderControlApi', () => { const CustomSettings = factory.CustomOptionsComponent!; const component = render( ); expect( @@ -274,9 +256,11 @@ describe('RangesliderControlApi', () => { const CustomSettings = factory.CustomOptionsComponent!; const component = render( ); @@ -285,7 +269,7 @@ describe('RangesliderControlApi', () => { }); expect(setControlEditorValid).toBeCalledWith(false); fireEvent.change(component.getByTestId('rangeSliderControl__stepAdditionalSetting'), { - target: { value: '' }, + target: { value: undefined }, }); expect(setControlEditorValid).toBeCalledWith(false); fireEvent.change(component.getByTestId('rangeSliderControl__stepAdditionalSetting'), { diff --git a/examples/controls_example/public/react_controls/data_controls/range_slider/get_range_slider_control_factory.tsx b/examples/controls_example/public/react_controls/data_controls/range_slider/get_range_slider_control_factory.tsx index 4db429ba7cb68..6fc95bdf1913e 100644 --- a/examples/controls_example/public/react_controls/data_controls/range_slider/get_range_slider_control_factory.tsx +++ b/examples/controls_example/public/react_controls/data_controls/range_slider/get_range_slider_control_factory.tsx @@ -6,13 +6,13 @@ * Side Public License, v 1. */ -import React, { useEffect, useMemo } from 'react'; +import React, { useEffect, useState } from 'react'; import { EuiFieldNumber, EuiFormRow } from '@elastic/eui'; import { buildRangeFilter, Filter, RangeFilterParams } from '@kbn/es-query'; import { useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; import { BehaviorSubject, combineLatest, map, skip } from 'rxjs'; import { initializeDataControl } from '../initialize_data_control'; -import { DataControlFactory } from '../types'; +import { DataControlFactory, DataControlServices } from '../types'; import { RangeSliderControl } from './components/range_slider_control'; import { hasNoResults$ } from './has_no_results'; import { minMax$ } from './min_max'; @@ -22,11 +22,10 @@ import { RangesliderControlState, RangeValue, RANGE_SLIDER_CONTROL_TYPE, - Services, } from './types'; export const getRangesliderControlFactory = ( - services: Services + services: DataControlServices ): DataControlFactory => { return { type: RANGE_SLIDER_CONTROL_TYPE, @@ -35,8 +34,9 @@ export const getRangesliderControlFactory = ( isFieldCompatible: (field) => { return field.aggregatable && field.type === 'number'; }, - CustomOptionsComponent: ({ currentState, updateState, setControlEditorValid }) => { - const step = currentState.step ?? 1; + CustomOptionsComponent: ({ initialState, updateState, setControlEditorValid }) => { + const [step, setStep] = useState(initialState.step ?? 1); + return ( <> @@ -44,6 +44,7 @@ export const getRangesliderControlFactory = ( value={step} onChange={(event) => { const newStep = event.target.valueAsNumber; + setStep(newStep); updateState({ step: newStep }); setControlEditorValid(newStep > 0); }} @@ -207,11 +208,10 @@ export const getRangesliderControlFactory = ( return { api, Component: ({ className: controlPanelClassName }) => { - const [dataLoading, dataViews, fieldName, max, min, selectionHasNotResults, step, value] = + const [dataLoading, fieldFormatter, max, min, selectionHasNotResults, step, value] = useBatchedPublishingSubjects( dataLoading$, - dataControl.api.dataViews, - dataControl.stateManager.fieldName, + dataControl.api.fieldFormatter, max$, min$, selectionHasNoResults$, @@ -229,17 +229,6 @@ export const getRangesliderControlFactory = ( }; }, []); - const fieldFormatter = useMemo(() => { - const dataView = dataViews?.[0]; - if (!dataView) { - return undefined; - } - const fieldSpec = dataView.getFieldByName(fieldName); - return fieldSpec - ? dataView.getFormatterForField(fieldSpec).getConverterFor('text') - : undefined; - }, [dataViews, fieldName]); - return ( => { +export const getSearchControlFactory = ( + services: DataControlServices +): DataControlFactory => { return { type: SEARCH_CONTROL_TYPE, getIconType: () => 'search', @@ -65,8 +59,11 @@ export const getSearchControlFactory = ({ (field.spec.esTypes ?? []).includes('text') ); }, - CustomOptionsComponent: ({ currentState, updateState }) => { - const searchTechnique = currentState.searchTechnique ?? DEFAULT_SEARCH_TECHNIQUE; + CustomOptionsComponent: ({ initialState, updateState }) => { + const [searchTechnique, setSearchTechnique] = useState( + initialState.searchTechnique ?? DEFAULT_SEARCH_TECHNIQUE + ); + return ( { const newSearchTechnique = id as SearchControlTechniques; + setSearchTechnique(newSearchTechnique); updateState({ searchTechnique: newSearchTechnique }); }} /> @@ -93,10 +91,7 @@ export const getSearchControlFactory = ({ initialState, editorStateManager, parentApi, - { - core, - dataViews: dataViewsService, - } + services ); const api = buildApi( diff --git a/examples/controls_example/public/react_controls/data_controls/types.ts b/examples/controls_example/public/react_controls/data_controls/types.ts index b3379889f4223..db4cba8773232 100644 --- a/examples/controls_example/public/react_controls/data_controls/types.ts +++ b/examples/controls_example/public/react_controls/data_controls/types.ts @@ -6,34 +6,54 @@ * Side Public License, v 1. */ +import { CoreStart } from '@kbn/core/public'; +import { DataPublicPluginStart } from '@kbn/data-plugin/public'; import { DataViewField } from '@kbn/data-views-plugin/common'; +import { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; import { Filter } from '@kbn/es-query'; +import { FieldFormatConvertFunction } from '@kbn/field-formats-plugin/common'; import { HasEditCapabilities, PublishesDataViews, PublishesFilters, PublishesPanelTitle, + PublishingSubject, } from '@kbn/presentation-publishing'; +import { ControlGroupApi } from '../control_group/types'; import { ControlFactory, DefaultControlApi, DefaultControlState } from '../types'; +export type DataControlFieldFormatter = FieldFormatConvertFunction | ((toFormat: any) => string); + +export interface PublishesField { + field$: PublishingSubject; + fieldFormatter: PublishingSubject; +} + export type DataControlApi = DefaultControlApi & Omit & // control titles cannot be hidden HasEditCapabilities & PublishesDataViews & + PublishesField & PublishesFilters & { setOutputFilter: (filter: Filter | undefined) => void; // a control should only ever output a **single** filter }; +export interface CustomOptionsComponentProps< + State extends DefaultDataControlState = DefaultDataControlState +> { + initialState: Omit; + field: DataViewField; + updateState: (newState: Partial) => void; + setControlEditorValid: (valid: boolean) => void; + parentApi: ControlGroupApi; +} + export interface DataControlFactory< State extends DefaultDataControlState = DefaultDataControlState, Api extends DataControlApi = DataControlApi > extends ControlFactory { isFieldCompatible: (field: DataViewField) => boolean; - CustomOptionsComponent?: React.FC<{ - currentState: Partial; - updateState: (newState: Partial) => void; - setControlEditorValid: (valid: boolean) => void; - }>; + CustomOptionsComponent?: React.FC>; } export const isDataControlFactory = ( @@ -47,3 +67,9 @@ export interface DefaultDataControlState extends DefaultControlState { fieldName: string; title?: string; // custom control label } + +export interface DataControlServices { + core: CoreStart; + data: DataPublicPluginStart; + dataViews: DataViewsPublicPluginStart; +} diff --git a/examples/controls_example/public/react_controls/mocks/control_mocks.ts b/examples/controls_example/public/react_controls/mocks/control_mocks.ts new file mode 100644 index 0000000000000..fb484013f7ccc --- /dev/null +++ b/examples/controls_example/public/react_controls/mocks/control_mocks.ts @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { TimeRange } from '@kbn/es-query'; +import { PublishesUnifiedSearch, StateComparators } from '@kbn/presentation-publishing'; +import { BehaviorSubject } from 'rxjs'; +import { ControlFetchContext } from '../control_group/control_fetch/control_fetch'; +import { ControlGroupApi } from '../control_group/types'; +import { ControlApiRegistration, ControlFactory, DefaultControlApi } from '../types'; + +export const getMockedControlGroupApi = ( + dashboardApi: Partial = { + timeRange$: new BehaviorSubject(undefined), + }, + overwriteApi?: Partial +) => { + return { + parentApi: dashboardApi, + autoApplySelections$: new BehaviorSubject(true), + ignoreParentSettings$: new BehaviorSubject(undefined), + controlFetch$: () => new BehaviorSubject({}), + allowExpensiveQueries$: new BehaviorSubject(true), + ...overwriteApi, + } as unknown as ControlGroupApi; +}; + +export const getMockedBuildApi = + ( + uuid: string, + factory: ControlFactory, + controlGroupApi?: ControlGroupApi + ) => + (api: ControlApiRegistration, nextComparators: StateComparators) => { + return { + ...api, + uuid, + parentApi: controlGroupApi ?? getMockedControlGroupApi(), + unsavedChanges: new BehaviorSubject | undefined>(undefined), + resetUnsavedChanges: () => {}, + type: factory.type, + }; + }; diff --git a/examples/controls_example/public/react_controls/timeslider_control/get_timeslider_control_factory.test.tsx b/examples/controls_example/public/react_controls/timeslider_control/get_timeslider_control_factory.test.tsx index ff32abe441a0c..9bf8ade2ebe32 100644 --- a/examples/controls_example/public/react_controls/timeslider_control/get_timeslider_control_factory.test.tsx +++ b/examples/controls_example/public/react_controls/timeslider_control/get_timeslider_control_factory.test.tsx @@ -6,28 +6,27 @@ * Side Public License, v 1. */ -import React from 'react'; -import { render, fireEvent } from '@testing-library/react'; -import { TimeRange } from '@kbn/es-query'; -import { StateComparators } from '@kbn/presentation-publishing'; import { coreMock } from '@kbn/core/public/mocks'; import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; import dateMath from '@kbn/datemath'; +import { TimeRange } from '@kbn/es-query'; +import { StateComparators } from '@kbn/presentation-publishing'; +import { fireEvent, render } from '@testing-library/react'; +import React from 'react'; import { BehaviorSubject } from 'rxjs'; -import { ControlGroupApi } from '../control_group/types'; +import { getMockedControlGroupApi } from '../mocks/control_mocks'; import { ControlApiRegistration } from '../types'; import { getTimesliderControlFactory } from './get_timeslider_control_factory'; import { TimesliderControlApi, TimesliderControlState } from './types'; describe('TimesliderControlApi', () => { const uuid = 'myControl1'; + const dashboardApi = { timeRange$: new BehaviorSubject(undefined), }; - const controlGroupApi = { - autoApplySelections$: new BehaviorSubject(true), - parentApi: dashboardApi, - } as unknown as ControlGroupApi; + const controlGroupApi = getMockedControlGroupApi(dashboardApi); + const dataStartServiceMock = dataPluginMock.createStartContract(); dataStartServiceMock.query.timefilter.timefilter.calculateBounds = (timeRange: TimeRange) => { const now = new Date(); diff --git a/examples/controls_example/tsconfig.json b/examples/controls_example/tsconfig.json index 5ad45877cf0a7..9ddcdf1835213 100644 --- a/examples/controls_example/tsconfig.json +++ b/examples/controls_example/tsconfig.json @@ -36,5 +36,6 @@ "@kbn/datemath", "@kbn/ui-theme", "@kbn/react-kibana-context-render", + "@kbn/field-formats-plugin", ] } diff --git a/src/plugins/controls/common/options_list/types.ts b/src/plugins/controls/common/options_list/types.ts index 1242e866ca089..4192cc6aac26d 100644 --- a/src/plugins/controls/common/options_list/types.ts +++ b/src/plugins/controls/common/options_list/types.ts @@ -7,7 +7,7 @@ */ import { DataView, FieldSpec, RuntimeFieldSpec } from '@kbn/data-views-plugin/common'; -import type { BoolQuery, Filter, Query, TimeRange } from '@kbn/es-query'; +import type { AggregateQuery, BoolQuery, Filter, Query, TimeRange } from '@kbn/es-query'; import type { DataControlInput } from '../types'; import { OptionsListSelection } from './options_list_selections'; @@ -68,7 +68,7 @@ export type OptionsListRequest = Omit< dataView: DataView; filters?: Filter[]; field: FieldSpec; - query?: Query; + query?: Query | AggregateQuery; }; /** From a726ef64bf2f3749b8c36cd3bdcaa85067a76c8f Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Thu, 1 Aug 2024 12:05:50 -0700 Subject: [PATCH 11/25] [DOCS] Add known issue to 8.14 release notes (#189583) --- docs/CHANGELOG.asciidoc | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/docs/CHANGELOG.asciidoc b/docs/CHANGELOG.asciidoc index 6b515415fe731..479987758b25a 100644 --- a/docs/CHANGELOG.asciidoc +++ b/docs/CHANGELOG.asciidoc @@ -105,6 +105,8 @@ The 8.14.3 release includes the following bug fixes and known issues. include::CHANGELOG.asciidoc[tag=known-issue-186969] +include::CHANGELOG.asciidoc[tag=known-issue-189394] + [discrete] [[known-185691]] .When using the Observability AI Assistant with the OpenAI connector, function calling will result in an error @@ -146,6 +148,8 @@ The 8.14.2 release includes the following bug fixes and known issues. include::CHANGELOG.asciidoc[tag=known-issue-186969] +include::CHANGELOG.asciidoc[tag=known-issue-189394] + [float] [[fixes-v8.14.2]] === Bug Fixes @@ -170,6 +174,8 @@ The 8.14.1 release includes the following bug fixes and known issues. include::CHANGELOG.asciidoc[tag=known-issue-186969] +include::CHANGELOG.asciidoc[tag=known-issue-189394] + [float] [[fixes-v8.14.1]] === Bug Fixes @@ -194,7 +200,6 @@ For information about the {kib} 8.14.0 release, review the following information === Known issues // tag::known-issue-186969[] -[discrete] .Creating or editing APM, {observability} and {stack-monitor-app} rules fails [%collapsible] ==== @@ -208,9 +213,33 @@ This known issue impacts only {observability}, {stack-monitor-app}, and APM and *Workaround* + To work around this issue for {observability} and APM and {user-experience} rules, create them from the {observability} *Alerts* page. Refer to <> and {observability-guide}/create-alerts-rules.html[Create and manage {observability} rules]. + +*Resolved* + +This issue is resolved in 8.15.0. ==== // end::known-issue-186969[] +// tag::known-issue-189394[] +.{webhook-cm} connector fails to send HTTP headers +[%collapsible] +==== +*Details* + +If you configured the {webhook-cm} connector to send key-value pairs as headers, that information is not sent unles you have also enabled the basic authentication option for the connector. +Refer to https://github.com/elastic/kibana/issues/189394[#189394]. + +*Impact* + +The impact of this issue will vary depending on the purpose of your headers. +For example, if you added an `ApiKey` authorization header, you might receive a `401` authorization error since it's no longer sent by the connector. + +*Workaround* + +To work around this issue, enable the *Require authentication for this webhook* option, which is the `hasAuth` property in the API. +You must then provide a username and password for authentication. + +*Resolved* + +This issue is resolved in 8.15.0. +==== +// end::known-issue-189394[] + [float] [[breaking-changes-8.14.0]] === Breaking changes From 305f2d79165298145455357a07de09763eecb8c4 Mon Sep 17 00:00:00 2001 From: Hannah Mudge Date: Thu, 1 Aug 2024 14:00:33 -0600 Subject: [PATCH 12/25] [Embeddable Rebuild] [Controls] Fix range slider state on field change (#189680) ## Summary The range slider `value` was getting overwritten by the old value on edit after the field name changed because we were passing in `value` as part of the editor state manager - so, this resulted in the following when editing a range slider with a defined `value` (for the sake of clarity, let's say `value = [100, 200]`. 1. Change the field name to another number field (keeping it as a range slider control) and save your changes 2. On save, the editor loops through the provided state manager key by key and updates the control 3. The `fieldName` key is hit first because of the order of spread, so this gets updated - which triggers the `fieldChangedSubscription` and sets `value` to `undefined` 4. The `value` key gets hit afterward, which still has the old `[100, 200]` value because we don't clear up the dirty state - so, the editor calls `value$.next([100, 200])` 5. The edited control now has the same selection as the old control :fire: We should only add state to the editor state manager **that the editor can change** - and since `value` is never changed via the editor, removing this from the state manager fixes the above situation. I've added a comment to hopefully clarify this. ### How to test 1. Create a range slider control and make a value change on it 2. Edit that control and pick a different data view and/or field - keep it as a range slider control! 3. The value selected at step 1 **should be cleared** ### Before https://github.com/user-attachments/assets/e6700538-deda-4196-8f52-c5446fa06518 ### After https://github.com/user-attachments/assets/be47fb2c-ecbf-4274-8beb-82a7e5462874 ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- .../react_controls/data_controls/initialize_data_control.ts | 4 ++++ .../range_slider/get_range_slider_control_factory.tsx | 3 +-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/examples/controls_example/public/react_controls/data_controls/initialize_data_control.ts b/examples/controls_example/public/react_controls/data_controls/initialize_data_control.ts index 7c986744c7193..42119456bc0ef 100644 --- a/examples/controls_example/public/react_controls/data_controls/initialize_data_control.ts +++ b/examples/controls_example/public/react_controls/data_controls/initialize_data_control.ts @@ -31,6 +31,10 @@ export const initializeDataControl = ( controlId: string, controlType: string, state: DefaultDataControlState, + /** + * `This state manager` should only include the state that the data control editor is + * responsible for managing + */ editorStateManager: ControlStateManager, controlGroup: ControlGroupApi, services: { diff --git a/examples/controls_example/public/react_controls/data_controls/range_slider/get_range_slider_control_factory.tsx b/examples/controls_example/public/react_controls/data_controls/range_slider/get_range_slider_control_factory.tsx index 6fc95bdf1913e..8893d114c98f3 100644 --- a/examples/controls_example/public/react_controls/data_controls/range_slider/get_range_slider_control_factory.tsx +++ b/examples/controls_example/public/react_controls/data_controls/range_slider/get_range_slider_control_factory.tsx @@ -67,13 +67,12 @@ export const getRangesliderControlFactory = ( value$.next(nextValue); } - const dataControl = initializeDataControl>( + const dataControl = initializeDataControl>( uuid, RANGE_SLIDER_CONTROL_TYPE, initialState, { step: step$, - value: value$, }, controlGroupApi, services From f4b2b449f97789db1bf9f3f841509abe625b259f Mon Sep 17 00:00:00 2001 From: Candace Park <56409205+parkiino@users.noreply.github.com> Date: Thu, 1 Aug 2024 16:08:32 -0400 Subject: [PATCH 13/25] [Security Solution][AVC banner] Hide AVC banner on January 1, 2025 (#187929) ## Summary - [x] Hides the avc banner when the local system time is 1/1/2025 - [x] Updates the blog link - [x] Unit tests --------- Co-authored-by: Elastic Machine --- packages/kbn-avc-banner/src/index.tsx | 9 ++++++- packages/kbn-doc-links/src/get_doc_links.ts | 2 +- .../epm/screens/detail/overview/overview.tsx | 4 ++-- .../onboarding/onboarding.test.tsx | 24 +++++++++++++++++-- .../landing_page/onboarding/onboarding.tsx | 4 ++-- 5 files changed, 35 insertions(+), 8 deletions(-) diff --git a/packages/kbn-avc-banner/src/index.tsx b/packages/kbn-avc-banner/src/index.tsx index 54ded0bfdd49d..2f71b5ddd9679 100644 --- a/packages/kbn-avc-banner/src/index.tsx +++ b/packages/kbn-avc-banner/src/index.tsx @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import React from 'react'; +import React, { useMemo } from 'react'; import { css } from '@emotion/css'; import { i18n } from '@kbn/i18n'; import { EuiButton, EuiCallOut, EuiSpacer, useEuiTheme } from '@elastic/eui'; @@ -14,6 +14,13 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { useKibana } from '@kbn/kibana-react-plugin/public'; import avcBannerBackground from './avc_banner_background.svg'; +// Logic to hide banner at EOY 2024 +export const useIsStillYear2024: () => boolean = () => { + return useMemo(() => { + return new Date().getFullYear() === 2024; + }, []); +}; + export const AVCResultsBanner2024: React.FC<{ onDismiss: () => void }> = ({ onDismiss }) => { const { docLinks } = useKibana().services; const { euiTheme } = useEuiTheme(); diff --git a/packages/kbn-doc-links/src/get_doc_links.ts b/packages/kbn-doc-links/src/get_doc_links.ts index fef52545f8d2f..25c91238a7b6d 100644 --- a/packages/kbn-doc-links/src/get_doc_links.ts +++ b/packages/kbn-doc-links/src/get_doc_links.ts @@ -466,7 +466,7 @@ export const getDocLinks = ({ kibanaBranch, buildFlavor }: GetDocLinkOptions): D }, securitySolution: { artifactControl: `${SECURITY_SOLUTION_DOCS}artifact-control.html`, - avcResults: `${ELASTIC_WEBSITE_URL}blog/elastic-security-malware-protection-test-av-comparatives`, + avcResults: `${ELASTIC_WEBSITE_URL}blog/elastic-av-comparatives-business-security-test`, trustedApps: `${SECURITY_SOLUTION_DOCS}trusted-apps-ov.html`, eventFilters: `${SECURITY_SOLUTION_DOCS}event-filters.html`, blocklist: `${SECURITY_SOLUTION_DOCS}blocklist.html`, diff --git a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/overview/overview.tsx b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/overview/overview.tsx index 2859b0ff7d8ae..9fa6df1e9f8ca 100644 --- a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/overview/overview.tsx +++ b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/overview/overview.tsx @@ -22,7 +22,7 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { useKibana } from '@kbn/kibana-react-plugin/public'; -import { AVCResultsBanner2024 } from '@kbn/avc-banner'; +import { AVCResultsBanner2024, useIsStillYear2024 } from '@kbn/avc-banner'; import { isIntegrationPolicyTemplate, @@ -313,7 +313,7 @@ export const OverviewPage: React.FC = memo( {isUnverified && } - {isElasticDefend && showAVCBanner && ( + {useIsStillYear2024() && isElasticDefend && showAVCBanner && ( <> diff --git a/x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/onboarding.test.tsx b/x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/onboarding.test.tsx index c31b6a01f3372..feb77b0e64ab3 100644 --- a/x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/onboarding.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/onboarding.test.tsx @@ -88,6 +88,13 @@ describe('OnboardingComponent', () => { }); describe('AVC 2024 Results banner', () => { + beforeEach(() => { + (useKibana().services.storage.get as jest.Mock).mockReturnValue(true); + }); + afterEach(() => { + jest.clearAllMocks(); + jest.useRealTimers(); + }); it('should render on the page', () => { render(); expect(renderResult.getByTestId('avcResultsBanner')).toBeTruthy(); @@ -97,7 +104,7 @@ describe('OnboardingComponent', () => { render(); expect(renderResult.getByTestId('avcReadTheBlog')).toHaveAttribute( 'href', - 'https://www.elastic.co/blog/elastic-security-malware-protection-test-av-comparatives' + 'https://www.elastic.co/blog/elastic-av-comparatives-business-security-test' ); }); @@ -110,10 +117,23 @@ describe('OnboardingComponent', () => { false ); }); + it('should stay dismissed if it has been closed once', () => { - (useKibana().services.storage.get as jest.Mock).mockReturnValue(false); + (useKibana().services.storage.get as jest.Mock).mockReturnValueOnce(false); render(); expect(renderResult.queryByTestId('avcResultsBanner')).toBeNull(); }); + + it('should not be shown if the current date is January 1, 2025', () => { + jest.useFakeTimers().setSystemTime(new Date('2025-01-01T05:00:00.000Z')); + render(); + expect(renderResult.queryByTestId('avcResultsBanner')).toBeNull(); + jest.useRealTimers(); + }); + it('should be shown if the current date is before January 1, 2025', () => { + jest.useFakeTimers().setSystemTime(new Date('2024-12-31T05:00:00.000Z')); + render(); + expect(renderResult.queryByTestId('avcResultsBanner')).toBeTruthy(); + }); }); }); diff --git a/x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/onboarding.tsx b/x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/onboarding.tsx index 35754cda785cd..b5ec40b703895 100644 --- a/x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/onboarding.tsx +++ b/x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/onboarding.tsx @@ -6,7 +6,7 @@ */ import React, { useCallback, useMemo, useState } from 'react'; -import { AVCResultsBanner2024 } from '@kbn/avc-banner'; +import { AVCResultsBanner2024, useIsStillYear2024 } from '@kbn/avc-banner'; import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; import { TogglePanel } from './toggle_panel'; @@ -91,7 +91,7 @@ export const OnboardingComponent: React.FC = ({ return (
- {showAVCBanner && ( + {useIsStillYear2024() && showAVCBanner && ( From f0b05c65bf92f23cc587be2aaf8496af5ba8ee66 Mon Sep 17 00:00:00 2001 From: christineweng <18648970+christineweng@users.noreply.github.com> Date: Thu, 1 Aug 2024 15:09:23 -0500 Subject: [PATCH 14/25] [Security Solution] Remove alerts page KPI feature flag (#189424) ## Summary Alerts KPI charts were introduced in 8.7, removing the feature flag and cleaning up some unused code. Dependency: https://github.com/elastic/kibana/pull/189234 to be merged first ### 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 --- .../common/experimental_features.ts | 5 - .../alerts_count_panel/index.test.tsx | 62 ++---------- .../alerts_kpis/alerts_count_panel/index.tsx | 41 ++------ .../alerts_histogram_panel/index.test.tsx | 98 +++++++------------ .../alerts_histogram_panel/index.tsx | 34 ++----- .../index.test.tsx | 48 +-------- .../alerts_summary_charts_panel/index.tsx | 50 +++------- .../alerts_local_storage/index.test.tsx | 22 +---- .../alerts_local_storage/index.tsx | 6 +- .../chart_panels/chart_select/helpers.test.ts | 92 +---------------- .../chart_panels/chart_select/helpers.ts | 73 +------------- .../chart_panels/chart_select/index.test.tsx | 45 +-------- .../chart_panels/chart_select/index.tsx | 88 +++-------------- .../chart_panels/chart_select/translations.ts | 11 --- .../alerts_kpis/chart_panels/index.test.tsx | 18 +--- .../alerts_kpis/chart_panels/index.tsx | 57 ++++------- .../translations/translations/fr-FR.json | 2 - .../translations/translations/ja-JP.json | 2 - .../translations/translations/zh-CN.json | 2 - 19 files changed, 119 insertions(+), 637 deletions(-) diff --git a/x-pack/plugins/security_solution/common/experimental_features.ts b/x-pack/plugins/security_solution/common/experimental_features.ts index 5c09741dd067b..cc38eefffe5f2 100644 --- a/x-pack/plugins/security_solution/common/experimental_features.ts +++ b/x-pack/plugins/security_solution/common/experimental_features.ts @@ -98,11 +98,6 @@ export const allowedExperimentalValues = Object.freeze({ */ responseActionScanEnabled: false, - /** - * Enables top charts on Alerts Page - */ - alertsPageChartsEnabled: true, - /** * Enables new notes */ diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_count_panel/index.test.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_count_panel/index.test.tsx index 18d44abca441a..806be83a738d3 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_count_panel/index.test.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_count_panel/index.test.tsx @@ -12,15 +12,11 @@ import type { Action } from '@kbn/ui-actions-plugin/public'; import { AlertsCountPanel } from '.'; import type { Status } from '../../../../../common/api/detection_engine'; -import { useQueryToggle } from '../../../../common/containers/query_toggle'; import { DEFAULT_STACK_BY_FIELD, DEFAULT_STACK_BY_FIELD1 } from '../common/config'; import { TestProviders } from '../../../../common/mock'; import { ChartContextMenu } from '../chart_panels/chart_context_menu'; -import { TABLE } from '../chart_panels/chart_select/translations'; -import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features'; +import { COUNTS } from '../chart_panels/chart_select/translations'; import { VisualizationEmbeddable } from '../../../../common/components/visualization_actions/visualization_embeddable'; -import type { ExperimentalFeatures } from '../../../../../common/experimental_features'; -import { allowedExperimentalValues } from '../../../../../common/experimental_features'; const from = '2022-07-28T08:20:18.966Z'; const to = '2022-07-28T08:20:18.966Z'; @@ -40,7 +36,6 @@ jest.mock('react-router-dom', () => { return { ...actual, useLocation: jest.fn().mockReturnValue({ pathname: '' }) }; }); -jest.mock('../../../../common/hooks/use_experimental_features'); jest.mock('../../../../common/components/page/use_refetch_by_session'); jest.mock('../../../../common/components/visualization_actions/visualization_embeddable'); jest.mock('../../../../common/components/page/use_refetch_by_session'); @@ -48,38 +43,26 @@ jest.mock('../common/hooks', () => ({ useInspectButton: jest.fn(), useStackByFields: jest.fn().mockReturnValue(() => []), })); -const mockUseIsExperimentalFeatureEnabled = useIsExperimentalFeatureEnabled as jest.Mock; -const getMockUseIsExperimentalFeatureEnabled = - (mockMapping?: Partial) => (flag: keyof typeof allowedExperimentalValues) => - mockMapping ? mockMapping?.[flag] : allowedExperimentalValues?.[flag]; -jest.mock('../../../../common/hooks/use_experimental_features'); +const mockSetIsExpanded = jest.fn(); const defaultProps = { - inspectTitle: TABLE, + inspectTitle: COUNTS, signalIndexName: 'signalIndexName', stackByField0: DEFAULT_STACK_BY_FIELD, stackByField1: DEFAULT_STACK_BY_FIELD1, setStackByField0: jest.fn(), setStackByField1: jest.fn(), isExpanded: true, - setIsExpanded: jest.fn(), + setIsExpanded: mockSetIsExpanded, showBuildingBlockAlerts: false, showOnlyThreatIndicatorAlerts: false, status: 'open' as Status, extraActions: [{ id: 'resetGroupByFields' }] as Action[], }; -const mockSetToggle = jest.fn(); -const mockUseQueryToggle = useQueryToggle as jest.Mock; describe('AlertsCountPanel', () => { beforeEach(() => { jest.clearAllMocks(); - mockUseQueryToggle.mockReturnValue({ toggleStatus: true, setToggleStatus: mockSetToggle }); - mockUseIsExperimentalFeatureEnabled.mockImplementation( - getMockUseIsExperimentalFeatureEnabled({ - alertsPageChartsEnabled: false, - }) - ); }); it('renders correctly', async () => { @@ -155,37 +138,11 @@ describe('AlertsCountPanel', () => { ); wrapper.find('[data-test-subj="query-toggle-header"]').first().simulate('click'); - expect(mockSetToggle).toBeCalledWith(false); - }); - }); - it('alertsPageChartsEnabled is false and toggleStatus=true, render', async () => { - await act(async () => { - const wrapper = mount( - - - - ); - expect(wrapper.find('[data-test-subj="visualization-embeddable"]').exists()).toEqual(true); - }); - }); - it('alertsPageChartsEnabled is false and toggleStatus=false, hide', async () => { - mockUseQueryToggle.mockReturnValue({ toggleStatus: false, setToggleStatus: mockSetToggle }); - await act(async () => { - const wrapper = mount( - - - - ); - expect(wrapper.find('[data-test-subj="visualization-embeddable"]').exists()).toEqual(false); + expect(mockSetIsExpanded).toBeCalledWith(false); }); }); - it('alertsPageChartsEnabled is true and isExpanded=true, render', async () => { - mockUseIsExperimentalFeatureEnabled.mockImplementation( - getMockUseIsExperimentalFeatureEnabled({ - alertsPageChartsEnabled: true, - }) - ); + it('when isExpanded is true, render counts panel', async () => { await act(async () => { const wrapper = mount( @@ -195,12 +152,7 @@ describe('AlertsCountPanel', () => { expect(wrapper.find('[data-test-subj="visualization-embeddable"]').exists()).toEqual(true); }); }); - it('alertsPageChartsEnabled is true and isExpanded=false, hide', async () => { - mockUseIsExperimentalFeatureEnabled.mockImplementation( - getMockUseIsExperimentalFeatureEnabled({ - alertsPageChartsEnabled: true, - }) - ); + it('when isExpanded is false, hide counts panel', async () => { await act(async () => { const wrapper = mount( diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_count_panel/index.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_count_panel/index.tsx index 2ebbf29692f3d..18ba80752c398 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_count_panel/index.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_count_panel/index.tsx @@ -7,7 +7,7 @@ import type { EuiComboBox } from '@elastic/eui'; import type { Action } from '@kbn/ui-actions-plugin/public'; -import React, { memo, useMemo, useCallback } from 'react'; +import React, { memo, useMemo } from 'react'; import { v4 as uuidv4 } from 'uuid'; import type { Filter } from '@kbn/es-query'; @@ -18,9 +18,7 @@ import { InspectButtonContainer } from '../../../../common/components/inspect'; import * as i18n from './translations'; import { KpiPanel } from '../common/components'; -import { useQueryToggle } from '../../../../common/containers/query_toggle'; import { FieldSelection } from '../../../../common/components/field_selection'; -import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features'; import { getAlertsTableLensAttributes as getLensAttributes } from '../../../../common/components/visualization_actions/lens_attributes/common/alerts/alerts_table'; import { SourcererScopeName } from '../../../../sourcerer/store/model'; import { VisualizationEmbeddable } from '../../../../common/components/visualization_actions/visualization_embeddable'; @@ -44,8 +42,8 @@ interface AlertsCountPanelProps { stackByField1ComboboxRef?: React.RefObject>; stackByWidth?: number; title?: React.ReactNode; - isExpanded?: boolean; - setIsExpanded?: (status: boolean) => void; + isExpanded: boolean; + setIsExpanded: (status: boolean) => void; } const CHART_HEIGHT = 218; // px @@ -71,22 +69,8 @@ export const AlertsCountPanel = memo( setIsExpanded, }) => { const { to, from } = useGlobalTime(); - const isAlertsPageChartsEnabled = useIsExperimentalFeatureEnabled('alertsPageChartsEnabled'); // create a unique, but stable (across re-renders) query id const uniqueQueryId = useMemo(() => `${DETECTIONS_ALERTS_COUNT_ID}-${uuidv4()}`, []); - - const { toggleStatus, setToggleStatus } = useQueryToggle(DETECTIONS_ALERTS_COUNT_ID); - const toggleQuery = useCallback( - (newToggleStatus: boolean) => { - if (isAlertsPageChartsEnabled && setIsExpanded) { - setIsExpanded(newToggleStatus); - } else { - setToggleStatus(newToggleStatus); - } - }, - [setToggleStatus, setIsExpanded, isAlertsPageChartsEnabled] - ); - const timerange = useMemo(() => ({ from, to }), [from, to]); const extraVisualizationOptions = useMemo( @@ -97,19 +81,10 @@ export const AlertsCountPanel = memo( [filters, stackByField1] ); - const showCount = useMemo(() => { - if (isAlertsPageChartsEnabled) { - return isExpanded; - } - return toggleStatus; - }, [isAlertsPageChartsEnabled, toggleStatus, isExpanded]); - return ( - + ( titleSize="s" hideSubtitle showInspectButton={chartOptionsContextMenu == null} - toggleStatus={isAlertsPageChartsEnabled ? isExpanded : toggleStatus} - toggleQuery={toggleQuery} + toggleStatus={isExpanded} + toggleQuery={setIsExpanded} > ( useLensCompatibleFields={true} /> - {showCount && ( + {isExpanded && ( { }; }); -const mockUseIsExperimentalFeatureEnabled = jest.fn((feature: keyof ExperimentalFeatures) => { - if (feature === 'alertsPageChartsEnabled') return false; - return allowedExperimentalValues[feature]; -}); - -jest.mock('../../../../common/hooks/use_experimental_features'); jest.mock('../../../hooks/alerts_visualization/use_alert_histogram_count', () => ({ useAlertHistogramCount: jest.fn().mockReturnValue(999), })); @@ -120,6 +111,7 @@ jest.mock('../../../../common/components/visualization_actions/use_visualization }), })); +const mockSetIsExpanded = jest.fn(); const defaultProps = { setQuery: jest.fn(), showBuildingBlockAlerts: false, @@ -127,6 +119,8 @@ const defaultProps = { showTotalAlertsCount: true, signalIndexName: 'signalIndexName', updateDateRange: jest.fn(), + isExpanded: true, + setIsExpanded: mockSetIsExpanded, }; const mockSetToggle = jest.fn(); const mockUseQueryToggle = useQueryToggle as jest.Mock; @@ -136,10 +130,6 @@ describe('AlertsHistogramPanel', () => { beforeEach(() => { jest.clearAllMocks(); mockUseQueryToggle.mockReturnValue({ toggleStatus: true, setToggleStatus: mockSetToggle }); - - (useIsExperimentalFeatureEnabled as jest.Mock).mockImplementation( - mockUseIsExperimentalFeatureEnabled - ); }); test('renders correctly', () => { @@ -448,45 +438,40 @@ describe('AlertsHistogramPanel', () => { }); }); - describe('toggleQuery', () => { - it('toggles', async () => { - await act(async () => { - const wrapper = mount( - - - - ); - wrapper.find('[data-test-subj="query-toggle-header"]').first().simulate('click'); - expect(mockSetToggle).toBeCalledWith(false); - }); - }); - - describe('when alertsPageChartsEnabled = false', () => { - beforeEach(() => { - jest.clearAllMocks(); - mockUseIsExperimentalFeatureEnabled.mockReturnValueOnce(false); // for alertsPageChartsEnabled flag - }); - - it('toggleStatus=true, render', async () => { + describe('toggle button', () => { + describe('When setIsExpanded is available', () => { + it('toggles', async () => { await act(async () => { const wrapper = mount( ); + wrapper.find('[data-test-subj="query-toggle-header"]').first().simulate('click'); + expect(mockSetIsExpanded).toBeCalledWith(false); + expect(mockSetToggle).not.toBeCalled(); + }); + }); + it('when isExpanded is true, render histogram panel', async () => { + await act(async () => { + const wrapper = mount( + + + + ); expect(wrapper.find('[data-test-subj="panelFlexGroup"]').exists()).toEqual(true); expect(wrapper.find('[data-test-subj="embeddable-matrix-histogram"]').exists()).toEqual( true ); }); }); - it('toggleStatus=false, hide', async () => { - mockUseQueryToggle.mockReturnValue({ toggleStatus: false, setToggleStatus: mockSetToggle }); + + it('when isExpanded is false, hide histogram panel', async () => { await act(async () => { const wrapper = mount( - + ); expect(wrapper.find('[data-test-subj="panelFlexGroup"]').exists()).toEqual(false); @@ -497,43 +482,29 @@ describe('AlertsHistogramPanel', () => { }); }); - describe('when alertsPageChartsEnabled = true', () => { + describe('When setIsExpanded is not available, use toggleQuery', () => { beforeEach(() => { - jest.clearAllMocks(); - mockUseIsExperimentalFeatureEnabled.mockReturnValueOnce(true); // for alertsPageChartsEnabled flag + mockUseQueryToggle.mockReturnValue({ toggleStatus: true, setToggleStatus: mockSetToggle }); }); + const props = { ...defaultProps, setIsExpanded: undefined }; - it('isExpanded=true, render', async () => { + it('toggles', async () => { await act(async () => { const wrapper = mount( - + ); - expect(wrapper.find('[data-test-subj="panelFlexGroup"]').exists()).toEqual(true); - expect(wrapper.find('[data-test-subj="embeddable-matrix-histogram"]').exists()).toEqual( - true - ); + wrapper.find('[data-test-subj="query-toggle-header"]').first().simulate('click'); + expect(mockSetToggle).toBeCalledWith(false); }); }); - it('isExpanded=false, hide', async () => { - await act(async () => { - const wrapper = mount( - - - - ); - expect(wrapper.find('[data-test-subj="panelFlexGroup"]').exists()).toEqual(false); - expect(wrapper.find('[data-test-subj="embeddable-matrix-histogram"]').exists()).toEqual( - false - ); - }); - }); - it('isExpanded is not passed in and toggleStatus =true, render', async () => { + + it('when toggleStatus is true, render', async () => { await act(async () => { const wrapper = mount( - + ); expect(wrapper.find('[data-test-subj="panelFlexGroup"]').exists()).toEqual(true); @@ -542,12 +513,13 @@ describe('AlertsHistogramPanel', () => { ); }); }); - it('isExpanded is not passed in and toggleStatus =false, hide', async () => { + + it('when toggleStatus is false, hide', async () => { mockUseQueryToggle.mockReturnValue({ toggleStatus: false, setToggleStatus: mockSetToggle }); await act(async () => { const wrapper = mount( - + ); expect(wrapper.find('[data-test-subj="panelFlexGroup"]').exists()).toEqual(false); @@ -562,8 +534,6 @@ describe('AlertsHistogramPanel', () => { describe('VisualizationEmbeddable', () => { beforeEach(() => { jest.clearAllMocks(); - mockUseQueryToggle.mockReturnValue({ toggleStatus: true, setToggleStatus: mockSetToggle }); - mockUseIsExperimentalFeatureEnabled.mockReturnValueOnce(false); // for alertsPageChartsEnabled flag }); test('it renders the header with alerts count', () => { diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_histogram_panel/index.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_histogram_panel/index.tsx index c61e3b51521d6..c2f25b4b5c80c 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_histogram_panel/index.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_histogram_panel/index.tsx @@ -36,7 +36,6 @@ import { KpiPanel, StackByComboBox } from '../common/components'; import { useQueryToggle } from '../../../../common/containers/query_toggle'; import { GROUP_BY_TOP_LABEL } from '../common/translations'; -import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features'; import { getAlertsHistogramLensAttributes as getLensAttributes } from '../../../../common/components/visualization_actions/lens_attributes/common/alerts/alerts_histogram'; import { SourcererScopeName } from '../../../../sourcerer/store/model'; import { VisualizationEmbeddable } from '../../../../common/components/visualization_actions/visualization_embeddable'; @@ -118,7 +117,6 @@ export const AlertsHistogramPanel = memo( const [selectedStackByOption, setSelectedStackByOption] = useState( onlyField == null ? defaultStackByOption : onlyField ); - const isAlertsPageChartsEnabled = useIsExperimentalFeatureEnabled('alertsPageChartsEnabled'); const onSelect = useCallback( (field: string) => { @@ -136,15 +134,17 @@ export const AlertsHistogramPanel = memo( const { toggleStatus, setToggleStatus } = useQueryToggle(DETECTIONS_HISTOGRAM_ID); + // alerts page uses isExpanded from kpi panel + // rules detail page and overview uses the toggle query const toggleQuery = useCallback( - (newToggleStatus: boolean) => { - if (isAlertsPageChartsEnabled && setIsExpanded !== undefined) { - setIsExpanded(newToggleStatus); - } else { - setToggleStatus(newToggleStatus); - } - }, - [setToggleStatus, setIsExpanded, isAlertsPageChartsEnabled] + (newToggleStatus: boolean) => + setIsExpanded ? setIsExpanded(newToggleStatus) : setToggleStatus(newToggleStatus), + [setToggleStatus, setIsExpanded] + ); + + const showHistogram = useMemo( + () => (setIsExpanded ? Boolean(isExpanded) : toggleStatus), + [setIsExpanded, isExpanded, toggleStatus] ); const timerange = useMemo(() => ({ from, to }), [from, to]); @@ -202,20 +202,6 @@ export const AlertsHistogramPanel = memo( [onlyField, title] ); - const showHistogram = useMemo(() => { - if (isAlertsPageChartsEnabled) { - if (isExpanded !== undefined) { - // alerts page - return isExpanded; - } else { - // rule details page and overview page - return toggleStatus; - } - } else { - return toggleStatus; - } - }, [isAlertsPageChartsEnabled, isExpanded, toggleStatus]); - const { responses, loading } = useVisualizationResponse({ visualizationId, }); diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_summary_charts_panel/index.test.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_summary_charts_panel/index.test.tsx index f02043f3d7c55..4513a0591803a 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_summary_charts_panel/index.test.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_summary_charts_panel/index.test.tsx @@ -6,10 +6,8 @@ */ import { act, render, fireEvent, waitFor } from '@testing-library/react'; import React from 'react'; -import { useQueryToggle } from '../../../../common/containers/query_toggle'; import { TestProviders } from '../../../../common/mock'; import { AlertsSummaryChartsPanel } from '.'; -import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features'; import type { GroupBySelection } from '../alerts_progress_bar_panel/types'; jest.mock('../../../../common/lib/kibana'); @@ -20,23 +18,15 @@ jest.mock('react-router-dom', () => { return { ...actual, useLocation: jest.fn().mockReturnValue({ pathname: '' }) }; }); -const mockUseIsExperimentalFeatureEnabled = useIsExperimentalFeatureEnabled as jest.Mock; -jest.mock('../../../../common/hooks/use_experimental_features'); - describe('AlertsSummaryChartsPanel', () => { + const mockSetIsExpanded = jest.fn(); const defaultProps = { signalIndexName: 'signalIndexName', isExpanded: true, - setIsExpanded: jest.fn(), + setIsExpanded: mockSetIsExpanded, groupBySelection: 'host.name' as GroupBySelection, setGroupBySelection: jest.fn(), }; - const mockSetToggle = jest.fn(); - const mockUseQueryToggle = useQueryToggle as jest.Mock; - beforeEach(() => { - mockUseQueryToggle.mockReturnValue({ toggleStatus: true, setToggleStatus: mockSetToggle }); - mockUseIsExperimentalFeatureEnabled.mockReturnValue(false); - }); test('renders correctly', async () => { await act(async () => { @@ -95,11 +85,11 @@ describe('AlertsSummaryChartsPanel', () => { if (element) { fireEvent.click(element); } - expect(mockSetToggle).toBeCalledWith(false); + expect(mockSetIsExpanded).toBeCalledWith(false); }); }); - it('alertsPageChartsEnabled is false and toggleStatus=true, render', async () => { + it('when isExpanded is true, render summary chart', async () => { await act(async () => { const { container } = render( @@ -112,35 +102,7 @@ describe('AlertsSummaryChartsPanel', () => { }); }); - it('alertsPageChartsEnabled is false and toggleStatus=false, hide', async () => { - mockUseQueryToggle.mockReturnValue({ toggleStatus: false, setToggleStatus: mockSetToggle }); - await act(async () => { - const { container } = render( - - - - ); - expect( - container.querySelector('[data-test-subj="alerts-charts-container"]') - ).not.toBeInTheDocument(); - }); - }); - - it('alertsPageChartsEnabled is true and isExpanded=true, render', async () => { - mockUseIsExperimentalFeatureEnabled.mockReturnValue(true); - await act(async () => { - const { container } = render( - - - - ); - expect( - container.querySelector('[data-test-subj="alerts-charts-container"]') - ).toBeInTheDocument(); - }); - }); - it('alertsPageChartsEnabled is true and isExpanded=false, hide', async () => { - mockUseIsExperimentalFeatureEnabled.mockReturnValue(true); + it('when isExpanded is false, hide summary chart', async () => { await act(async () => { const { container } = render( diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_summary_charts_panel/index.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_summary_charts_panel/index.tsx index 9cdd6608f34f8..2cc5cda85436b 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_summary_charts_panel/index.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_summary_charts_panel/index.tsx @@ -5,7 +5,7 @@ * 2.0. */ import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; -import React, { useCallback, useMemo } from 'react'; +import React, { useCallback } from 'react'; import type { MappingRuntimeFields } from '@elastic/elasticsearch/lib/api/types'; import type { Filter, Query } from '@kbn/es-query'; import styled from 'styled-components'; @@ -15,8 +15,6 @@ import { HeaderSection } from '../../../../common/components/header_section'; import { SeverityLevelPanel } from '../severity_level_panel'; import { AlertsByRulePanel } from '../alerts_by_rule_panel'; import { AlertsProgressBarPanel } from '../alerts_progress_bar_panel'; -import { useQueryToggle } from '../../../../common/containers/query_toggle'; -import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features'; import type { GroupBySelection } from '../alerts_progress_bar_panel/types'; import type { AddFilterProps } from '../common/types'; @@ -28,8 +26,6 @@ const StyledFlexItem = styled(EuiFlexItem)` min-width: 355px; `; -const DETECTIONS_ALERTS_CHARTS_ID = 'detections-alerts-charts'; - interface Props { alignHeader?: 'center' | 'baseline' | 'stretch' | 'flexStart' | 'flexEnd'; filters?: Filter[]; @@ -39,8 +35,8 @@ interface Props { signalIndexName: string | null; title?: React.ReactNode; runtimeMappings?: MappingRuntimeFields; - isExpanded?: boolean; - setIsExpanded?: (status: boolean) => void; + isExpanded: boolean; + setIsExpanded: (status: boolean) => void; groupBySelection: GroupBySelection; setGroupBySelection: (groupBySelection: GroupBySelection) => void; } @@ -59,40 +55,16 @@ export const AlertsSummaryChartsPanel: React.FC = ({ groupBySelection, setGroupBySelection, }: Props) => { - const isAlertsPageChartsEnabled = useIsExperimentalFeatureEnabled('alertsPageChartsEnabled'); - - const { toggleStatus, setToggleStatus } = useQueryToggle(DETECTIONS_ALERTS_CHARTS_ID); const toggleQuery = useCallback( (status: boolean) => { - if (isAlertsPageChartsEnabled && setIsExpanded) { - setIsExpanded(status); - } else { - setToggleStatus(status); - } + setIsExpanded(status); }, - [setToggleStatus, setIsExpanded, isAlertsPageChartsEnabled] + [setIsExpanded] ); - const querySkip = useMemo( - () => (isAlertsPageChartsEnabled ? !isExpanded : !toggleStatus), - [isAlertsPageChartsEnabled, isExpanded, toggleStatus] - ); - - const status: boolean = useMemo(() => { - if (isAlertsPageChartsEnabled && isExpanded) { - return true; - } - if (!isAlertsPageChartsEnabled && toggleStatus) { - return true; - } - return false; - }, [isAlertsPageChartsEnabled, isExpanded, toggleStatus]); - return ( = ({ titleSize="s" hideSubtitle showInspectButton={false} - toggleStatus={isAlertsPageChartsEnabled ? isExpanded : toggleStatus} + toggleStatus={isExpanded} toggleQuery={toggleQuery} /> - {status && ( + {isExpanded && ( = ({ query={query} signalIndexName={signalIndexName} runtimeMappings={runtimeMappings} - skip={querySkip} + skip={!isExpanded} addFilter={addFilter} /> @@ -130,7 +102,7 @@ export const AlertsSummaryChartsPanel: React.FC = ({ query={query} signalIndexName={signalIndexName} runtimeMappings={runtimeMappings} - skip={querySkip} + skip={!isExpanded} /> @@ -139,7 +111,7 @@ export const AlertsSummaryChartsPanel: React.FC = ({ query={query} signalIndexName={signalIndexName} runtimeMappings={runtimeMappings} - skip={querySkip} + skip={!isExpanded} groupBySelection={groupBySelection} setGroupBySelection={setGroupBySelection} addFilter={addFilter} diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/alerts_local_storage/index.test.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/alerts_local_storage/index.test.tsx index 8145fcf698704..6fd125dd24092 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/alerts_local_storage/index.test.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/alerts_local_storage/index.test.tsx @@ -20,27 +20,7 @@ describe('useAlertsLocalStorage', () => { {children} ); - test('it returns the expected defaults when isAlertsPageCharts is disabled', () => { - mockUseIsExperimentalFeatureEnabled.mockReturnValue(false); - const { result } = renderHook(() => useAlertsLocalStorage(), { wrapper }); - - const defaults = Object.fromEntries( - Object.entries(result.current).filter((x) => typeof x[1] !== 'function') - ); - - expect(defaults).toEqual({ - alertViewSelection: 'trend', // default to the trend chart - countTableStackBy0: 'kibana.alert.rule.name', - countTableStackBy1: 'host.name', - groupBySelection: 'host.name', - isTreemapPanelExpanded: true, - riskChartStackBy0: 'kibana.alert.rule.name', - riskChartStackBy1: 'host.name', - trendChartStackBy: 'kibana.alert.rule.name', - }); - }); - - test('it returns the expected defaults when isAlertsPageCharts is enaabled', () => { + test('it returns the expected defaults', () => { mockUseIsExperimentalFeatureEnabled.mockReturnValue(true); const { result } = renderHook(() => useAlertsLocalStorage(), { wrapper }); diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/alerts_local_storage/index.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/alerts_local_storage/index.tsx index a7c795037df86..f4aac7a42cedd 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/alerts_local_storage/index.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/alerts_local_storage/index.tsx @@ -27,14 +27,12 @@ import { import { DEFAULT_STACK_BY_FIELD, DEFAULT_STACK_BY_FIELD1 } from '../../common/config'; import type { AlertsSettings } from './types'; import type { AlertViewSelection } from '../chart_select/helpers'; -import { CHARTS_ID, TREND_ID } from '../chart_select/helpers'; +import { CHARTS_ID } from '../chart_select/helpers'; import type { GroupBySelection } from '../../alerts_progress_bar_panel/types'; -import { useIsExperimentalFeatureEnabled } from '../../../../../common/hooks/use_experimental_features'; export const useAlertsLocalStorage = (): AlertsSettings => { - const isAlertsPageChartsEnabled = useIsExperimentalFeatureEnabled('alertsPageChartsEnabled'); const [alertViewSelection, setAlertViewSelection] = useLocalStorage({ - defaultValue: isAlertsPageChartsEnabled ? CHARTS_ID : TREND_ID, + defaultValue: CHARTS_ID, key: getSettingKey({ category: VIEW_CATEGORY, page: ALERTS_PAGE, diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/chart_select/helpers.test.ts b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/chart_select/helpers.test.ts index e842f998bd5c1..11e58253c94f0 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/chart_select/helpers.test.ts +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/chart_select/helpers.test.ts @@ -5,102 +5,12 @@ * 2.0. */ -import type { AlertViewSelection } from './helpers'; -import { - getButtonProperties, - getContextMenuPanels, - getOptionProperties, - TABLE_ID, - TREEMAP_ID, - TREND_ID, - CHARTS_ID, -} from './helpers'; +import { getOptionProperties, TABLE_ID, TREEMAP_ID, TREND_ID, CHARTS_ID } from './helpers'; import * as i18n from './translations'; describe('helpers', () => { beforeEach(() => jest.clearAllMocks()); - describe('getButtonProperties', () => { - test('it returns the expected properties when alertViewSelection is Trend', () => { - expect(getButtonProperties(TREND_ID)).toEqual({ - 'data-test-subj': TREND_ID, - icon: 'visBarVerticalStacked', - name: i18n.TREND, - }); - }); - - test('it returns the expected properties when alertViewSelection is Table', () => { - expect(getButtonProperties(TABLE_ID)).toEqual({ - 'data-test-subj': TABLE_ID, - icon: 'visTable', - name: i18n.TABLE, - }); - }); - - test('it returns the expected properties when alertViewSelection is Treemap', () => { - expect(getButtonProperties(TREEMAP_ID)).toEqual({ - 'data-test-subj': TREEMAP_ID, - icon: 'grid', - name: i18n.TREEMAP, - }); - }); - - test('it returns the expected properties when alertViewSelection is charts', () => { - expect(getButtonProperties(CHARTS_ID)).toEqual({ - 'data-test-subj': CHARTS_ID, - icon: 'visPie', - name: i18n.CHARTS, - }); - }); - }); - - describe('getContextMenuPanels', () => { - const alertViewSelections: AlertViewSelection[] = ['trend', 'table', 'treemap', 'charts']; - const closePopover = jest.fn(); - const setAlertViewSelection = jest.fn(); - - alertViewSelections.forEach((alertViewSelection) => { - test(`it returns the expected panel id when alertViewSelection is '${alertViewSelection}'`, () => { - const panels = getContextMenuPanels({ - alertViewSelection, - closePopover, - setAlertViewSelection, - isAlertsPageChartsEnabled: true, // remove after charts is implemented - }); - - expect(panels[0].id).toEqual(0); - }); - - test(`onClick invokes setAlertViewSelection with '${alertViewSelection}' item when alertViewSelection is '${alertViewSelection}'`, () => { - const panels = getContextMenuPanels({ - alertViewSelection, - closePopover, - setAlertViewSelection, - isAlertsPageChartsEnabled: true, // remove after charts is implemented - }); - - const item = panels[0].items?.find((x) => x['data-test-subj'] === alertViewSelection); - (item?.onClick as () => void)(); - - expect(setAlertViewSelection).toBeCalledWith(alertViewSelection); - }); - - test(`onClick invokes closePopover when alertViewSelection is '${alertViewSelection}'`, () => { - const panels = getContextMenuPanels({ - alertViewSelection, - closePopover, - setAlertViewSelection, - isAlertsPageChartsEnabled: true, // remove after charts is implemented - }); - - const item = panels[0].items?.find((x) => x['data-test-subj'] === alertViewSelection); - (item?.onClick as () => void)(); - - expect(closePopover).toBeCalled(); - }); - }); - }); - describe('getOptionProperties', () => { test('it returns the expected properties when alertViewSelection is Trend', () => { expect(getOptionProperties(TREND_ID)).toEqual({ diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/chart_select/helpers.ts b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/chart_select/helpers.ts index bc0deb426fe59..b47b8ea63bc82 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/chart_select/helpers.ts +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/chart_select/helpers.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { EuiContextMenuPanelDescriptor, EuiButtonGroupOptionProps } from '@elastic/eui'; +import type { EuiButtonGroupOptionProps } from '@elastic/eui'; import * as i18n from './translations'; @@ -22,77 +22,6 @@ export interface ButtonProperties { name: string; } -export const getButtonProperties = (alertViewSelection: AlertViewSelection): ButtonProperties => { - const table = { 'data-test-subj': alertViewSelection, icon: 'visTable', name: i18n.TABLE }; - - switch (alertViewSelection) { - case TABLE_ID: - return table; - case TREND_ID: - return { - 'data-test-subj': alertViewSelection, - icon: 'visBarVerticalStacked', - name: i18n.TREND, - }; - case TREEMAP_ID: - return { 'data-test-subj': alertViewSelection, icon: 'grid', name: i18n.TREEMAP }; - case CHARTS_ID: - return { 'data-test-subj': alertViewSelection, icon: 'visPie', name: i18n.CHARTS }; - default: - return table; - } -}; - -export const getContextMenuPanels = ({ - alertViewSelection, - closePopover, - setAlertViewSelection, - isAlertsPageChartsEnabled, -}: { - alertViewSelection: AlertViewSelection; - closePopover: () => void; - setAlertViewSelection: (alertViewSelection: AlertViewSelection) => void; - isAlertsPageChartsEnabled: boolean; -}): EuiContextMenuPanelDescriptor[] => [ - { - id: 0, - items: [ - { - ...getButtonProperties('table'), - onClick: () => { - closePopover(); - setAlertViewSelection('table'); - }, - }, - { - ...getButtonProperties('trend'), - onClick: () => { - closePopover(); - setAlertViewSelection('trend'); - }, - }, - { - ...getButtonProperties('treemap'), - onClick: () => { - closePopover(); - setAlertViewSelection('treemap'); - }, - }, - ...(isAlertsPageChartsEnabled - ? [ - { - ...getButtonProperties('charts'), - onClick: () => { - closePopover(); - setAlertViewSelection('charts'); - }, - }, - ] - : []), - ], - }, -]; - export const getOptionProperties = ( alertViewSelection: AlertViewSelection ): EuiButtonGroupOptionProps => { diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/chart_select/index.test.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/chart_select/index.test.tsx index 4d7798a4fcbe6..6801bae62f3fe 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/chart_select/index.test.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/chart_select/index.test.tsx @@ -5,56 +5,16 @@ * 2.0. */ import { render, screen, fireEvent } from '@testing-library/react'; -import { waitForEuiPopoverOpen } from '@elastic/eui/lib/test/rtl'; import React from 'react'; - import { TestProviders } from '../../../../../common/mock'; -import * as i18n from './translations'; import { ChartSelect } from '.'; -import { useIsExperimentalFeatureEnabled } from '../../../../../common/hooks/use_experimental_features'; - -const mockUseIsExperimentalFeatureEnabled = useIsExperimentalFeatureEnabled as jest.Mock; -jest.mock('../../../../../common/hooks/use_experimental_features'); describe('ChartSelect', () => { beforeEach(() => { jest.clearAllMocks(); }); - test('it renders the chart select button when alertsPageChartsEnabled is false', () => { - mockUseIsExperimentalFeatureEnabled.mockReturnValue(false); - render( - - - - ); - - expect( - screen.getByRole('button', { name: i18n.SELECT_A_CHART_ARIA_LABEL }) - ).toBeInTheDocument(); - }); - - test('it invokes `setAlertViewSelection` with the expected value when a chart is selected and alertsPageChartsEnabled is false', async () => { - mockUseIsExperimentalFeatureEnabled.mockReturnValue(false); - const setAlertViewSelection = jest.fn(); - render( - - - - ); - - const selectButton = screen.getByRole('button', { name: i18n.SELECT_A_CHART_ARIA_LABEL }); - selectButton.click(); - await waitForEuiPopoverOpen(); - - const treemapMenuItem = screen.getByRole('button', { name: i18n.TREEMAP }); - treemapMenuItem.click(); - - expect(setAlertViewSelection).toBeCalledWith('treemap'); - }); - - test('it renders the chart select tabs when alertsPageChartsEnabled is true', () => { - mockUseIsExperimentalFeatureEnabled.mockReturnValue(true); + test('it renders the chart select tabs', () => { render( @@ -65,8 +25,7 @@ describe('ChartSelect', () => { expect(screen.getByTitle('Trend')).toHaveAttribute('aria-pressed', 'true'); }); - test('changing selection render correctly when alertsPageChartsEnabled is true', () => { - mockUseIsExperimentalFeatureEnabled.mockReturnValue(true); + test('changing selection render correctly', () => { const setAlertViewSelection = jest.fn(); const { rerender } = render( diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/chart_select/index.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/chart_select/index.tsx index c31e04afeb301..58f3c4f6fe284 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/chart_select/index.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/chart_select/index.tsx @@ -5,95 +5,39 @@ * 2.0. */ -import type { EuiContextMenuPanelDescriptor } from '@elastic/eui'; -import { EuiButton, EuiContextMenu, EuiIcon, EuiPopover, EuiButtonGroup } from '@elastic/eui'; -import React, { useCallback, useMemo, useState } from 'react'; -import styled from 'styled-components'; - +import { EuiButtonGroup } from '@elastic/eui'; +import React, { useMemo } from 'react'; import type { AlertViewSelection } from './helpers'; -import { getButtonProperties, getContextMenuPanels, getOptionProperties } from './helpers'; +import { getOptionProperties } from './helpers'; import * as i18n from './translations'; -import { useIsExperimentalFeatureEnabled } from '../../../../../common/hooks/use_experimental_features'; + interface Props { alertViewSelection: AlertViewSelection; setAlertViewSelection: (alertViewSelection: AlertViewSelection) => void; } -const ChartTypeIcon = styled(EuiIcon)` - margin-right: ${({ theme }) => theme.eui.euiSizeS}; -`; const AlertViewOptions: AlertViewSelection[] = ['charts', 'trend', 'table', 'treemap']; -const ChartSelectComponent: React.FC = ({ +export const ChartSelect: React.FC = ({ alertViewSelection, setAlertViewSelection, }: Props) => { - const [isPopoverOpen, setIsPopoverOpen] = useState(false); - const closePopover = useCallback(() => setIsPopoverOpen(false), []); - const onButtonClick = useCallback(() => setIsPopoverOpen((currentVal) => !currentVal), []); - - const button = useMemo(() => { - const buttonProperties = getButtonProperties(alertViewSelection); - - return ( - - - {buttonProperties.name} - - ); - }, [alertViewSelection, onButtonClick]); - const isAlertsPageChartsEnabled = useIsExperimentalFeatureEnabled('alertsPageChartsEnabled'); const options = useMemo(() => { return AlertViewOptions.map((option: AlertViewSelection) => getOptionProperties(option)); }, []); - const panels: EuiContextMenuPanelDescriptor[] = useMemo( - () => - getContextMenuPanels({ - alertViewSelection, - closePopover, - setAlertViewSelection, - isAlertsPageChartsEnabled, - }), - [alertViewSelection, closePopover, setAlertViewSelection, isAlertsPageChartsEnabled] - ); - return ( - <> - {isAlertsPageChartsEnabled ? ( - setAlertViewSelection(id as AlertViewSelection)} - buttonSize="compressed" - color="primary" - data-test-subj="chart-select-tabs" - /> - ) : ( - - - - )} - + setAlertViewSelection(id as AlertViewSelection)} + buttonSize="compressed" + color="primary" + data-test-subj="chart-select-tabs" + /> ); }; -ChartSelectComponent.displayName = 'ChartSelectComponent'; - -export const ChartSelect = React.memo(ChartSelectComponent); +ChartSelect.displayName = 'ChartSelect'; diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/chart_select/translations.ts b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/chart_select/translations.ts index a18c1b25dc417..2da0abc04ec42 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/chart_select/translations.ts +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/chart_select/translations.ts @@ -7,17 +7,6 @@ import { i18n } from '@kbn/i18n'; -export const SELECT_A_CHART_ARIA_LABEL = i18n.translate( - 'xpack.securitySolution.components.chartSelect.selectAChartAriaLabel', - { - defaultMessage: 'Select a chart', - } -); - -export const TABLE = i18n.translate('xpack.securitySolution.components.chartSelect.tableOption', { - defaultMessage: 'Table', -}); - export const TREND = i18n.translate('xpack.securitySolution.components.chartSelect.trendOption', { defaultMessage: 'Trend', }); diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/index.test.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/index.test.tsx index dea6278dc5db9..2b75252f3d578 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/index.test.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/index.test.tsx @@ -149,7 +149,6 @@ const resetGroupByFields = () => { describe('ChartPanels', () => { beforeEach(() => { jest.clearAllMocks(); - mockUseIsExperimentalFeatureEnabled.mockReturnValue(false); mockUseQueryToggle.mockReturnValue({ toggleStatus: true, setToggleStatus: mockSetToggle }); (useSourcererDataView as jest.Mock).mockReturnValue({ @@ -163,19 +162,7 @@ describe('ChartPanels', () => { }); }); - test('it renders the chart selector when alertsPageChartsEnabled is false', async () => { - render( - - - - ); - - await waitFor(() => { - expect(screen.getByTestId('chartSelect')).toBeInTheDocument(); - }); - }); - - test('it renders the chart selector tabs when alertsPageChartsEnabled is true and toggle is true', async () => { + test('when toggle is true, renders the chart selector tabs', async () => { mockUseIsExperimentalFeatureEnabled.mockReturnValue(true); mockUseQueryToggle.mockReturnValue({ toggleStatus: true, setToggleStatus: mockSetToggle }); render( @@ -189,7 +176,7 @@ describe('ChartPanels', () => { }); }); - test('it renders the chart collapse when alertsPageChartsEnabled is true and toggle is false', async () => { + test('when toggle is false, renders the chart collapse', async () => { mockUseIsExperimentalFeatureEnabled.mockReturnValue(true); mockUseQueryToggle.mockReturnValue({ toggleStatus: false, setToggleStatus: mockSetToggle }); render( @@ -465,7 +452,6 @@ describe('ChartPanels', () => { ...defaultAlertSettings, alertViewSelection: 'charts', }); - mockUseIsExperimentalFeatureEnabled.mockReturnValue(true); render( diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/index.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/index.tsx index edbfe756acfd6..c37c7b0513a51 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/index.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/index.tsx @@ -9,8 +9,6 @@ import type { Filter, Query } from '@kbn/es-query'; import { EuiFlexItem, EuiSkeletonText } from '@elastic/eui'; import React, { useCallback, useMemo } from 'react'; import styled from 'styled-components'; - -import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features'; import { useAlertsLocalStorage } from './alerts_local_storage'; import type { AlertsSettings } from './alerts_local_storage/types'; import { ChartContextMenu } from './chart_context_menu'; @@ -65,21 +63,18 @@ const ChartPanelsComponent: React.FC = ({ const { toggleStatus: isExpanded, setToggleStatus: setIsExpanded } = useQueryToggle( DETECTIONS_ALERTS_CHARTS_PANEL_ID ); - const isAlertsPageChartsEnabled = useIsExperimentalFeatureEnabled('alertsPageChartsEnabled'); const { alertViewSelection, countTableStackBy0, countTableStackBy1, groupBySelection, - isTreemapPanelExpanded, riskChartStackBy0, riskChartStackBy1, setAlertViewSelection, setCountTableStackBy0, setCountTableStackBy1, setGroupBySelection, - setIsTreemapPanelExpanded, setRiskChartStackBy0, setRiskChartStackBy1, setTrendChartStackBy, @@ -149,37 +144,25 @@ const ChartPanelsComponent: React.FC = ({ ); const title = useMemo(() => { - if (isAlertsPageChartsEnabled) { - return isExpanded ? ( - - - - ) : ( - + - ); - } else { - return ( - - - - ); - } + + ) : ( + + ); }, [ alertViewSelection, setAlertViewSelection, - isAlertsPageChartsEnabled, isExpanded, groupBySelection, alertsDefaultFilters, @@ -230,7 +213,7 @@ const ChartPanelsComponent: React.FC = ({ chartOptionsContextMenu={chartOptionsContextMenu} extraActions={resetGroupByFieldAction} filters={alertsDefaultFilters} - inspectTitle={isAlertsPageChartsEnabled ? i18n.COUNTS : i18n.TABLE} + inspectTitle={i18n.COUNTS} panelHeight={CHART_PANEL_HEIGHT} setStackByField0={updateCommonStackBy0} setStackByField0ComboboxInputRef={setStackByField0ComboboxInputRef} @@ -259,13 +242,11 @@ const ChartPanelsComponent: React.FC = ({ chartOptionsContextMenu={chartOptionsContextMenu} height={CHART_PANEL_HEIGHT} inspectTitle={i18n.TREEMAP} - isPanelExpanded={isAlertsPageChartsEnabled ? isExpanded : isTreemapPanelExpanded} + isPanelExpanded={isExpanded} filters={alertsDefaultFilters} query={query} riskSubAggregationField="kibana.alert.risk_score" - setIsPanelExpanded={ - isAlertsPageChartsEnabled ? setIsExpanded : setIsTreemapPanelExpanded - } + setIsPanelExpanded={setIsExpanded} setStackByField0={updateCommonStackBy0} setStackByField0ComboboxInputRef={setStackByField0ComboboxInputRef} setStackByField1={updateCommonStackBy1} @@ -281,7 +262,7 @@ const ChartPanelsComponent: React.FC = ({ )} - {isAlertsPageChartsEnabled && alertViewSelection === 'charts' && ( + {alertViewSelection === 'charts' && ( {isLoadingIndexPattern ? ( diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index c744fa14eaec5..f2709b5c0cb4b 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -33353,8 +33353,6 @@ "xpack.securitySolution.components.chartSelect.chartsOption": "Graphiques", "xpack.securitySolution.components.chartSelect.chartsOptionTitle": "Résumé", "xpack.securitySolution.components.chartSelect.legendTitle": "Sélectionner un onglet", - "xpack.securitySolution.components.chartSelect.selectAChartAriaLabel": "Sélectionner un graphique", - "xpack.securitySolution.components.chartSelect.tableOption": "Tableau", "xpack.securitySolution.components.chartSelect.tableOptionTitle": "Comptes", "xpack.securitySolution.components.chartSelect.treemapOption": "Compartimentage", "xpack.securitySolution.components.chartSelect.trendOption": "Tendance", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 81c3c1b227630..0d1f2adf389b9 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -33226,8 +33226,6 @@ "xpack.securitySolution.components.chartSelect.chartsOption": "チャート", "xpack.securitySolution.components.chartSelect.chartsOptionTitle": "まとめ", "xpack.securitySolution.components.chartSelect.legendTitle": "タブを選択", - "xpack.securitySolution.components.chartSelect.selectAChartAriaLabel": "アラートを選択", - "xpack.securitySolution.components.chartSelect.tableOption": "表", "xpack.securitySolution.components.chartSelect.tableOptionTitle": "カウント", "xpack.securitySolution.components.chartSelect.treemapOption": "ツリーマップ", "xpack.securitySolution.components.chartSelect.trendOption": "傾向", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 8969e617a98f5..3fb4714874614 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -33393,8 +33393,6 @@ "xpack.securitySolution.components.chartSelect.chartsOption": "图表", "xpack.securitySolution.components.chartSelect.chartsOptionTitle": "摘要", "xpack.securitySolution.components.chartSelect.legendTitle": "选择选项卡", - "xpack.securitySolution.components.chartSelect.selectAChartAriaLabel": "选择图表", - "xpack.securitySolution.components.chartSelect.tableOption": "表", "xpack.securitySolution.components.chartSelect.tableOptionTitle": "计数", "xpack.securitySolution.components.chartSelect.treemapOption": "树状图", "xpack.securitySolution.components.chartSelect.trendOption": "趋势", From 8481715534e2a329308b576d161c0c15113718af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yulia=20=C4=8Cech?= <6585477+yuliacech@users.noreply.github.com> Date: Thu, 1 Aug 2024 22:15:52 +0200 Subject: [PATCH 15/25] [Console] Fix autocomplete suggestions after a comma (#189656) ## Summary Fixes https://github.com/elastic/kibana/issues/184442 This PR fixes a bug, where endpoint autocomplete suggestions were shown after a comma in the url. Only index names should be displayed in that case, since otherwise the url would be invalid. ### Screenshots #### Before Screenshot 2024-07-31 at 18 14 31 #### After Screenshot 2024-07-31 at 18 14 57 ### Checklist Delete any items that are not applicable to this PR. - [ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [ ] [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 - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [ ] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [ ] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker) - [ ] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [ ] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) ### Risk Matrix Delete this section if it is not applicable to this PR. Before closing this PR, invite QA, stakeholders, and other developers to identify risks that should be tested prior to the change/feature release. When forming the risk matrix, consider some of the following examples and how they may potentially impact the change: | Risk | Probability | Severity | Mitigation/Notes | |---------------------------|-------------|----------|-------------------------| | Multiple Spaces—unexpected behavior in non-default Kibana Space. | Low | High | Integration tests will verify that all features are still supported in non-default Kibana Space and when user switches between spaces. | | Multiple nodes—Elasticsearch polling might have race conditions when multiple Kibana nodes are polling for the same tasks. | High | Low | Tasks are idempotent, so executing them multiple times will not result in logical error, but will degrade performance. To test for this case we add plenty of unit tests around this logic and document manual testing procedure. | | Code should gracefully handle cases when feature X or plugin Y are disabled. | Medium | High | Unit tests will verify that any feature flag or plugin combination still results in our service operational. | | [See more potential risk examples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx) | ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- .../monaco/utils/autocomplete_utils.test.ts | 61 +++++++++++++++++++ .../editor/monaco/utils/autocomplete_utils.ts | 55 +++++++++-------- .../apps/console/monaco/_autocomplete.ts | 15 ----- 3 files changed, 92 insertions(+), 39 deletions(-) diff --git a/src/plugins/console/public/application/containers/editor/monaco/utils/autocomplete_utils.test.ts b/src/plugins/console/public/application/containers/editor/monaco/utils/autocomplete_utils.test.ts index c5a423e38902d..8822902627944 100644 --- a/src/plugins/console/public/application/containers/editor/monaco/utils/autocomplete_utils.test.ts +++ b/src/plugins/console/public/application/containers/editor/monaco/utils/autocomplete_utils.test.ts @@ -8,6 +8,8 @@ /* * Mock the function "populateContext" that accesses the autocomplete definitions */ +import { monaco } from '@kbn/monaco'; + const mockPopulateContext = jest.fn(); jest.mock('../../../../../lib/autocomplete/engine', () => { @@ -20,6 +22,7 @@ jest.mock('../../../../../lib/autocomplete/engine', () => { import { AutoCompleteContext } from '../../../../../lib/autocomplete/types'; import { getDocumentationLinkFromAutocomplete, + getUrlPathCompletionItems, shouldTriggerSuggestions, } from './autocomplete_utils'; @@ -136,4 +139,62 @@ describe('autocomplete_utils', () => { expect(actual).toBe(false); }); }); + + describe('getUrlPathCompletionItems', () => { + beforeEach(() => { + // mock autocomplete set with endpoints and index names + const mockAutocompleteSet = [ + { + name: '_cat', + }, + { + name: '_search', + }, + { + name: 'index1', + meta: 'index', + }, + { + name: 'index2', + meta: 'index', + }, + ] as AutoCompleteContext['autoCompleteSet']; + // mock the populateContext function that finds the correct autocomplete endpoint object and puts it into the context object + mockPopulateContext.mockImplementation((...args) => { + const context = args[0][1]; + context.autoCompleteSet = mockAutocompleteSet; + }); + }); + it('only suggests index items if there is a comma at the end of the line', () => { + const mockModel = { + getValueInRange: () => 'GET .kibana,', + getWordUntilPosition: () => ({ startColumn: 13 }), + } as unknown as monaco.editor.ITextModel; + const mockPosition = { lineNumber: 1, column: 13 } as unknown as monaco.Position; + const items = getUrlPathCompletionItems(mockModel, mockPosition); + expect(items.length).toBe(2); + expect(items.every((item) => item.detail === 'index')).toBe(true); + }); + + it('only suggests index items if there is a comma in the last url path token', () => { + const mockModel = { + getValueInRange: () => 'GET .kibana,index', + getWordUntilPosition: () => ({ startColumn: 13 }), + } as unknown as monaco.editor.ITextModel; + const mockPosition = { lineNumber: 1, column: 18 } as unknown as monaco.Position; + const items = getUrlPathCompletionItems(mockModel, mockPosition); + expect(items.length).toBe(2); + expect(items.every((item) => item.detail === 'index')).toBe(true); + }); + + it('suggest endpoints and index names if no comma', () => { + const mockModel = { + getValueInRange: () => 'GET _search', + getWordUntilPosition: () => ({ startColumn: 12 }), + } as unknown as monaco.editor.ITextModel; + const mockPosition = { lineNumber: 1, column: 12 } as unknown as monaco.Position; + const items = getUrlPathCompletionItems(mockModel, mockPosition); + expect(items.length).toBe(4); + }); + }); }); diff --git a/src/plugins/console/public/application/containers/editor/monaco/utils/autocomplete_utils.ts b/src/plugins/console/public/application/containers/editor/monaco/utils/autocomplete_utils.ts index 2bb3fdb248a0e..bbfa33d84e70e 100644 --- a/src/plugins/console/public/application/containers/editor/monaco/utils/autocomplete_utils.ts +++ b/src/plugins/console/public/application/containers/editor/monaco/utils/autocomplete_utils.ts @@ -121,43 +121,50 @@ export const getUrlPathCompletionItems = ( endColumn: column, }); + // flag to only suggest index names + let onlyIndexNames = false; // get the method and previous url parts for context const { method, urlPathTokens } = parseLine(lineContent); // if the line ends with /, then we use all url path tokens for autocomplete suggestions - // otherwise, we want to ignore the last token + // otherwise, we don't use the last token for populating the autocomplete context if (!lineContent.trim().endsWith('/')) { - urlPathTokens.pop(); + const lastToken = urlPathTokens.pop(); + // if the last token contains a comma, only suggest index names + if (lastToken?.includes(',')) { + onlyIndexNames = true; + } + } + let { autoCompleteSet } = populateContextForMethodAndUrl(method, urlPathTokens); + autoCompleteSet = autoCompleteSet ?? []; + // filter out non index names items if needed + if (onlyIndexNames) { + autoCompleteSet = autoCompleteSet.filter((term) => term.meta === 'index'); } - const { autoCompleteSet } = populateContextForMethodAndUrl(method, urlPathTokens); - const wordUntilPosition = model.getWordUntilPosition(position); const range = { - startLineNumber: position.lineNumber, + startLineNumber: lineNumber, // replace the whole word with the suggestion startColumn: lineContent.endsWith('.') ? // if there is a dot at the end of the content, it's ignored in the wordUntilPosition wordUntilPosition.startColumn - 1 : wordUntilPosition.startColumn, - endLineNumber: position.lineNumber, - endColumn: position.column, + endLineNumber: lineNumber, + endColumn: column, }; - if (autoCompleteSet && autoCompleteSet.length > 0) { - return ( - filterTermsWithoutName(autoCompleteSet) - // map autocomplete items to completion items - .map((item) => { - return { - label: item.name + '', - insertText: item.name + '', - detail: item.meta ?? i18nTexts.endpoint, - // the kind is only used to configure the icon - kind: monaco.languages.CompletionItemKind.Constant, - range, - }; - }) - ); - } - return []; + return ( + filterTermsWithoutName(autoCompleteSet) + // map autocomplete items to completion items + .map((item) => { + return { + label: item.name + '', + insertText: item.name + '', + detail: item.meta ?? i18nTexts.endpoint, + // the kind is only used to configure the icon + kind: monaco.languages.CompletionItemKind.Constant, + range, + }; + }) + ); }; /* diff --git a/test/functional/apps/console/monaco/_autocomplete.ts b/test/functional/apps/console/monaco/_autocomplete.ts index 755ffa0364a01..b949a979a49db 100644 --- a/test/functional/apps/console/monaco/_autocomplete.ts +++ b/test/functional/apps/console/monaco/_autocomplete.ts @@ -261,21 +261,6 @@ GET _search ); expect(await PageObjects.console.monaco.isAutocompleteVisible()).to.be.eql(true); }); - - // not fixed for monaco yet https://github.com/elastic/kibana/issues/184442 - it.skip('should not activate auto-complete after comma following endpoint in URL', async () => { - await PageObjects.console.monaco.enterText('GET _search'); - - await PageObjects.console.sleepForDebouncePeriod(); - log.debug('Key type ","'); - await PageObjects.console.monaco.enterText(','); // i.e. 'GET _search,' - - await PageObjects.console.sleepForDebouncePeriod(); - log.debug('Key type Ctrl+SPACE'); - await PageObjects.console.monaco.pressCtrlSpace(); - - expect(await PageObjects.console.monaco.isAutocompleteVisible()).to.be.eql(false); - }); }); // not implemented for monaco yet https://github.com/elastic/kibana/issues/184856 From e689da1bc69c92d77f6883d30fbe16a9e933f43a Mon Sep 17 00:00:00 2001 From: Kevin Delemme Date: Thu, 1 Aug 2024 16:22:00 -0400 Subject: [PATCH 16/25] feat(slo): create burn rate embeddable (#189429) --- .../slo/simple_burn_rate/burn_rate.tsx | 101 ++++++++++++ .../embeddable/slo/alerts/slo_selector.tsx | 1 + .../embeddable/slo/burn_rate/burn_rate.tsx | 152 ++++++++++++++++++ .../burn_rate_react_embeddable_factory.tsx | 116 +++++++++++++ .../slo/burn_rate/configuration.tsx | 140 ++++++++++++++++ .../embeddable/slo/burn_rate/constants.ts | 9 ++ .../slo/burn_rate/open_configuration.tsx | 54 +++++++ .../public/embeddable/slo/burn_rate/types.ts | 45 ++++++ .../slo/public/hooks/query_key_factory.ts | 3 +- .../public/hooks/use_fetch_slo_burn_rates.ts | 64 ++++---- .../slo/public/hooks/use_fetch_slo_details.ts | 4 +- .../slo_details/hooks/use_get_query_params.ts | 2 +- .../slo/public/plugin.ts | 37 ++++- .../create_burn_rate_panel_action.tsx | 57 +++++++ .../slo/public/ui_actions/index.ts | 3 + 15 files changed, 739 insertions(+), 49 deletions(-) create mode 100644 x-pack/plugins/observability_solution/slo/public/components/slo/simple_burn_rate/burn_rate.tsx create mode 100644 x-pack/plugins/observability_solution/slo/public/embeddable/slo/burn_rate/burn_rate.tsx create mode 100644 x-pack/plugins/observability_solution/slo/public/embeddable/slo/burn_rate/burn_rate_react_embeddable_factory.tsx create mode 100644 x-pack/plugins/observability_solution/slo/public/embeddable/slo/burn_rate/configuration.tsx create mode 100644 x-pack/plugins/observability_solution/slo/public/embeddable/slo/burn_rate/constants.ts create mode 100644 x-pack/plugins/observability_solution/slo/public/embeddable/slo/burn_rate/open_configuration.tsx create mode 100644 x-pack/plugins/observability_solution/slo/public/embeddable/slo/burn_rate/types.ts create mode 100644 x-pack/plugins/observability_solution/slo/public/ui_actions/create_burn_rate_panel_action.tsx diff --git a/x-pack/plugins/observability_solution/slo/public/components/slo/simple_burn_rate/burn_rate.tsx b/x-pack/plugins/observability_solution/slo/public/components/slo/simple_burn_rate/burn_rate.tsx new file mode 100644 index 0000000000000..4a9fc50ed9370 --- /dev/null +++ b/x-pack/plugins/observability_solution/slo/public/components/slo/simple_burn_rate/burn_rate.tsx @@ -0,0 +1,101 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiIcon, EuiLoadingChart, EuiStat, EuiTextColor, EuiToolTip } from '@elastic/eui'; +import numeral from '@elastic/numeral'; +import { i18n } from '@kbn/i18n'; +import { SLOWithSummaryResponse } from '@kbn/slo-schema'; +import moment from 'moment'; +import React from 'react'; +import { useFetchSloBurnRates } from '../../../hooks/use_fetch_slo_burn_rates'; +import { toDuration, toMinutes } from '../../../utils/slo/duration'; + +interface Props { + slo: SLOWithSummaryResponse; + duration: string; + lastRefreshTime?: number; +} + +export function SimpleBurnRate({ slo, duration, lastRefreshTime }: Props) { + const [refreshTime, setRefreshTime] = React.useState(lastRefreshTime); + const { isLoading, data, refetch } = useFetchSloBurnRates({ + slo, + windows: [{ name: 'burn_rate', duration }], + }); + + React.useEffect(() => { + if (lastRefreshTime !== refreshTime) { + setRefreshTime(lastRefreshTime); + refetch(); + } + }, [refreshTime, lastRefreshTime, refetch]); + + const durationLabel = i18n.translate('xpack.slo.burnRate.durationLabel', { + defaultMessage: 'Last {duration}', + values: { duration }, + }); + + if (isLoading || data === undefined) { + return ( + } + textAlign="left" + isLoading={isLoading} + titleColor={'subdued'} + description={ + + + {durationLabel} + + + } + /> + ); + } + + const burnRate = data.burnRates[0]; + const color = burnRate.burnRate > 1 ? 'danger' : 'success'; + const timeToExhaustLabel = i18n.translate('xpack.slo.burnRate.exhaustionTimeLabel', { + defaultMessage: 'At this rate, the entire error budget will be exhausted in {hour} hours.', + values: { + hour: numeral( + moment + .duration(toMinutes(toDuration(slo.timeWindow.duration)) / burnRate.burnRate, 'minutes') + .asHours() + ).format('0'), + }, + }); + + return ( + 1 ? ( + + + + {durationLabel} + + + + ) : ( + + + {durationLabel} + + + ) + } + /> + ); +} diff --git a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/alerts/slo_selector.tsx b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/alerts/slo_selector.tsx index 2a46e9404e52d..9835335e5e29f 100644 --- a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/alerts/slo_selector.tsx +++ b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/alerts/slo_selector.tsx @@ -29,6 +29,7 @@ export function SloSelector({ initialSlos, onSelected, hasError, singleSelection label: slo.instanceId !== ALL_VALUE ? `${slo.name} (${slo.instanceId})` : slo.name, value: `${slo.id}-${slo.instanceId}`, })) ?? []; + const [options, setOptions] = useState>>([]); const [selectedOptions, setSelectedOptions] = useState>>( mapSlosToOptions(initialSlos) diff --git a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/burn_rate/burn_rate.tsx b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/burn_rate/burn_rate.tsx new file mode 100644 index 0000000000000..bb92363359112 --- /dev/null +++ b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/burn_rate/burn_rate.tsx @@ -0,0 +1,152 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiBadge, EuiFlexGroup, EuiFlexItem, EuiLink, EuiLoadingChart } from '@elastic/eui'; +import { css } from '@emotion/css'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { SLOWithSummaryResponse } from '@kbn/slo-schema'; +import React, { useEffect, useRef, useState } from 'react'; +import { SimpleBurnRate } from '../../../components/slo/simple_burn_rate/burn_rate'; +import { useFetchSloDetails } from '../../../hooks/use_fetch_slo_details'; +import { SloOverviewDetails } from '../common/slo_overview_details'; +import { EmbeddableProps } from './types'; + +export function BurnRate({ sloId, sloInstanceId, duration, reloadSubject }: EmbeddableProps) { + const containerRef = useRef(null); + const [lastRefreshTime, setLastRefreshTime] = useState(undefined); + const [selectedSlo, setSelectedSlo] = useState(null); + const [showAllGroups, setShowAllGroups] = useState(false); + + const { isLoading, data: slo } = useFetchSloDetails({ + sloId, + instanceId: sloInstanceId, + }); + + useEffect(() => { + reloadSubject?.subscribe(() => { + setLastRefreshTime(Date.now()); + }); + + return () => { + reloadSubject?.unsubscribe(); + }; + }, [reloadSubject]); + + const isSloNotFound = !isLoading && slo === undefined; + + if (isLoading || !slo) { + return ( + + + + + + ); + } + + if (isSloNotFound) { + return ( + + + {i18n.translate('xpack.slo.sloEmbeddable.overview.sloNotFoundText', { + defaultMessage: + 'The SLO has been deleted. You can safely delete the widget from the dashboard.', + })} + + + ); + } + + const hasGroupings = Object.keys(slo.groupings).length > 0; + const firstGrouping = hasGroupings ? Object.entries(slo.groupings)[0] : undefined; + const firstGroupLabel = firstGrouping ? `${firstGrouping[0]}: ${firstGrouping[1]}` : null; + const hasMoreThanOneGrouping = Object.keys(slo.groupings).length > 1; + + return ( +
+ + + + { + setSelectedSlo(slo); + }} + > +

{slo.name}

+
+
+ {hasGroupings && ( + + + {firstGroupLabel} + + + {hasMoreThanOneGrouping && !showAllGroups ? ( + + setShowAllGroups(true)} + onClickAriaLabel={i18n.translate( + 'xpack.slo.burnRateEmbeddable.moreInstanceAriaLabel', + { defaultMessage: 'Show more' } + )} + > + + + + ) : null} + + {hasMoreThanOneGrouping && showAllGroups + ? Object.entries(slo.groupings) + .splice(1) + .map(([key, value]) => ( + + + {key}: {value} + + + )) + : null} + + )} +
+ + + + +
+ + +
+ ); +} + +const container = css` + height: 100%; +`; + +const link = css` + font-size: 16px; + font-weight: 700; +`; diff --git a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/burn_rate/burn_rate_react_embeddable_factory.tsx b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/burn_rate/burn_rate_react_embeddable_factory.tsx new file mode 100644 index 0000000000000..d0370877b511e --- /dev/null +++ b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/burn_rate/burn_rate_react_embeddable_factory.tsx @@ -0,0 +1,116 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { i18n } from '@kbn/i18n'; +import React, { useEffect } from 'react'; +import { Router } from '@kbn/shared-ux-router'; +import { createBrowserHistory } from 'history'; +import { ReactEmbeddableFactory } from '@kbn/embeddable-plugin/public'; +import { + initializeTitles, + useBatchedPublishingSubjects, + fetch$, +} from '@kbn/presentation-publishing'; +import { BehaviorSubject, Subject } from 'rxjs'; +import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { SLO_BURN_RATE_EMBEDDABLE_ID } from './constants'; +import { SloBurnRateEmbeddableState, SloEmbeddableDeps, BurnRateApi } from './types'; +import { BurnRate } from './burn_rate'; + +export const getTitle = () => + i18n.translate('xpack.slo.burnRateEmbeddable.title', { + defaultMessage: 'SLO Burn Rate', + }); + +const queryClient = new QueryClient(); + +export const getBurnRateEmbeddableFactory = (deps: SloEmbeddableDeps) => { + const factory: ReactEmbeddableFactory< + SloBurnRateEmbeddableState, + SloBurnRateEmbeddableState, + BurnRateApi + > = { + type: SLO_BURN_RATE_EMBEDDABLE_ID, + deserializeState: (state) => { + return state.rawState as SloBurnRateEmbeddableState; + }, + buildEmbeddable: async (state, buildApi, uuid, parentApi) => { + const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); + const defaultTitle$ = new BehaviorSubject(getTitle()); + const sloId$ = new BehaviorSubject(state.sloId); + const sloInstanceId$ = new BehaviorSubject(state.sloInstanceId); + const duration$ = new BehaviorSubject(state.duration); + const reload$ = new Subject(); + + const api = buildApi( + { + ...titlesApi, + defaultPanelTitle: defaultTitle$, + serializeState: () => { + return { + rawState: { + ...serializeTitles(), + sloId: sloId$.getValue(), + sloInstanceId: sloInstanceId$.getValue(), + duration: duration$.getValue(), + }, + }; + }, + }, + { + sloId: [sloId$, (value) => sloId$.next(value)], + sloInstanceId: [sloInstanceId$, (value) => sloInstanceId$.next(value)], + duration: [duration$, (value) => duration$.next(value)], + ...titleComparators, + } + ); + + const fetchSubscription = fetch$(api) + .pipe() + .subscribe((next) => { + reload$.next(next.isReload); + }); + + return { + api, + Component: () => { + const [sloId, sloInstanceId, duration] = useBatchedPublishingSubjects( + sloId$, + sloInstanceId$, + duration$ + ); + + const I18nContext = deps.i18n.Context; + + useEffect(() => { + return () => { + fetchSubscription.unsubscribe(); + }; + }, []); + + return ( + + + + + + + + + + ); + }, + }; + }, + }; + return factory; +}; diff --git a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/burn_rate/configuration.tsx b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/burn_rate/configuration.tsx new file mode 100644 index 0000000000000..55305f076d893 --- /dev/null +++ b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/burn_rate/configuration.tsx @@ -0,0 +1,140 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + EuiButton, + EuiButtonEmpty, + EuiFieldText, + EuiFlexGroup, + EuiFlexItem, + EuiFlyout, + EuiFlyoutBody, + EuiFlyoutFooter, + EuiFlyoutHeader, + EuiFormRow, + EuiIcon, + EuiTitle, + EuiToolTip, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { ALL_VALUE } from '@kbn/slo-schema'; +import React, { useState } from 'react'; +import { SloSelector } from '../alerts/slo_selector'; +import type { EmbeddableProps } from './types'; + +interface Props { + onCreate: (props: EmbeddableProps) => void; + onCancel: () => void; +} + +interface SloConfig { + sloId: string; + sloInstanceId: string; +} + +export function Configuration({ onCreate, onCancel }: Props) { + const [selectedSlo, setSelectedSlo] = useState(); + const [duration, setDuration] = useState('1h'); + const [hasError, setHasError] = useState(false); + + const isDurationValid = duration.match(/^\d+[mhd]$/); // matches 1m, 78m, 1h, 6h, 1d, 24d + + const isValid = !!selectedSlo && isDurationValid; + + const onConfirmClick = () => { + if (isValid) { + onCreate({ + sloId: selectedSlo.sloId, + sloInstanceId: selectedSlo.sloInstanceId, + duration, + }); + } + }; + + return ( + + + +

+ {i18n.translate('xpack.slo.burnRateEmbeddable.configuration.headerTitle', { + defaultMessage: 'Burn rate configuration', + })} +

+
+
+ + + + { + setHasError(slo === undefined); + if (slo && 'id' in slo) { + setSelectedSlo({ sloId: slo.id, sloInstanceId: slo.instanceId ?? ALL_VALUE }); + } + }} + /> + + + + setDuration(e.target.value)} + isInvalid={!isDurationValid} + append={ + + + + } + /> + + + + + + + + + + + + + + + +
+ ); +} diff --git a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/burn_rate/constants.ts b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/burn_rate/constants.ts new file mode 100644 index 0000000000000..b6147bb3f4145 --- /dev/null +++ b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/burn_rate/constants.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const SLO_BURN_RATE_EMBEDDABLE_ID = 'SLO_BURN_RATE_EMBEDDABLE'; +export const ADD_BURN_RATE_ACTION_ID = 'CREATE_SLO_BURN_RATE_EMBEDDABLE'; diff --git a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/burn_rate/open_configuration.tsx b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/burn_rate/open_configuration.tsx new file mode 100644 index 0000000000000..e8a7777b29a62 --- /dev/null +++ b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/burn_rate/open_configuration.tsx @@ -0,0 +1,54 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { CoreStart } from '@kbn/core/public'; +import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import { toMountPoint } from '@kbn/react-kibana-mount'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import React from 'react'; +import { SloPublicPluginsStart } from '../../..'; +import { Configuration } from './configuration'; +import type { EmbeddableProps, SloBurnRateEmbeddableState } from './types'; + +export async function openConfiguration( + coreStart: CoreStart, + pluginStart: SloPublicPluginsStart, + initialState?: SloBurnRateEmbeddableState +): Promise { + const { overlays } = coreStart; + const queryClient = new QueryClient(); + return new Promise(async (resolve, reject) => { + try { + const flyoutSession = overlays.openFlyout( + toMountPoint( + + + { + flyoutSession.close(); + resolve(update); + }} + onCancel={() => { + flyoutSession.close(); + reject(); + }} + /> + + , + coreStart + ) + ); + } catch (error) { + reject(error); + } + }); +} diff --git a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/burn_rate/types.ts b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/burn_rate/types.ts new file mode 100644 index 0000000000000..3e95151afb986 --- /dev/null +++ b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/burn_rate/types.ts @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { + ApplicationStart, + IUiSettingsClient, + NotificationsStart, + type CoreStart, +} from '@kbn/core/public'; +import { DefaultEmbeddableApi } from '@kbn/embeddable-plugin/public'; +import { + PublishesPanelTitle, + PublishesWritablePanelTitle, + SerializedTitles, +} from '@kbn/presentation-publishing'; +import { Subject } from 'rxjs'; + +export interface EmbeddableProps { + sloId: string; + sloInstanceId: string; + duration: string; + reloadSubject?: Subject; +} + +interface BurnRateCustomInput { + sloId: string; + sloInstanceId: string; + duration: string; +} + +export type SloBurnRateEmbeddableState = SerializedTitles & BurnRateCustomInput; +export type BurnRateApi = DefaultEmbeddableApi & + PublishesWritablePanelTitle & + PublishesPanelTitle; + +export interface SloEmbeddableDeps { + uiSettings: IUiSettingsClient; + http: CoreStart['http']; + i18n: CoreStart['i18n']; + application: ApplicationStart; + notifications: NotificationsStart; +} diff --git a/x-pack/plugins/observability_solution/slo/public/hooks/query_key_factory.ts b/x-pack/plugins/observability_solution/slo/public/hooks/query_key_factory.ts index 11f10b624106f..93f8a76b71db0 100644 --- a/x-pack/plugins/observability_solution/slo/public/hooks/query_key_factory.ts +++ b/x-pack/plugins/observability_solution/slo/public/hooks/query_key_factory.ts @@ -41,7 +41,8 @@ export const sloKeys = { groups: () => [...sloKeys.all, 'group'] as const, overview: (filters: SLOOverviewFilter) => ['overview', filters] as const, details: () => [...sloKeys.all, 'details'] as const, - detail: (sloId?: string) => [...sloKeys.details(), sloId] as const, + detail: (sloId: string, instanceId: string | undefined, remoteName: string | undefined) => + [...sloKeys.details(), { sloId, instanceId, remoteName }] as const, rules: () => [...sloKeys.all, 'rules'] as const, rule: (sloIds: string[]) => [...sloKeys.rules(), sloIds] as const, activeAlerts: () => [...sloKeys.all, 'activeAlerts'] as const, diff --git a/x-pack/plugins/observability_solution/slo/public/hooks/use_fetch_slo_burn_rates.ts b/x-pack/plugins/observability_solution/slo/public/hooks/use_fetch_slo_burn_rates.ts index 1623e6609b85b..3da6e09072dfd 100644 --- a/x-pack/plugins/observability_solution/slo/public/hooks/use_fetch_slo_burn_rates.ts +++ b/x-pack/plugins/observability_solution/slo/public/hooks/use_fetch_slo_burn_rates.ts @@ -4,23 +4,19 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ +import { ALL_VALUE, GetSLOBurnRatesResponse, SLOWithSummaryResponse } from '@kbn/slo-schema'; import { QueryObserverResult, RefetchOptions, RefetchQueryFilters, useQuery, } from '@tanstack/react-query'; -import { ALL_VALUE, GetSLOBurnRatesResponse, SLOWithSummaryResponse } from '@kbn/slo-schema'; +import { SLO_LONG_REFETCH_INTERVAL } from '../constants'; import { useKibana } from '../utils/kibana_react'; import { sloKeys } from './query_key_factory'; -import { SLO_LONG_REFETCH_INTERVAL } from '../constants'; export interface UseFetchSloBurnRatesResponse { - isInitialLoading: boolean; isLoading: boolean; - isRefetching: boolean; - isSuccess: boolean; - isError: boolean; data: GetSLOBurnRatesResponse | undefined; refetch: ( options?: (RefetchOptions & RefetchQueryFilters) | undefined @@ -39,41 +35,35 @@ export function useFetchSloBurnRates({ shouldRefetch, }: UseFetchSloBurnRatesParams): UseFetchSloBurnRatesResponse { const { http } = useKibana().services; - const { isInitialLoading, isLoading, isError, isSuccess, isRefetching, data, refetch } = useQuery( - { - queryKey: sloKeys.burnRates(slo.id, slo.instanceId, windows), - queryFn: async ({ signal }) => { - try { - const response = await http.post( - `/internal/observability/slos/${slo.id}/_burn_rates`, - { - body: JSON.stringify({ - windows, - instanceId: slo.instanceId ?? ALL_VALUE, - remoteName: slo.remote?.remoteName, - }), - signal, - } - ); + const { isLoading, data, refetch } = useQuery({ + queryKey: sloKeys.burnRates(slo.id, slo.instanceId, windows), + queryFn: async ({ signal }) => { + try { + const response = await http.post( + `/internal/observability/slos/${slo.id}/_burn_rates`, + { + body: JSON.stringify({ + windows, + instanceId: slo.instanceId ?? ALL_VALUE, + remoteName: slo.remote?.remoteName, + }), + signal, + } + ); - return response; - } catch (error) { - // ignore error - } - }, - refetchInterval: shouldRefetch ? SLO_LONG_REFETCH_INTERVAL : undefined, - refetchOnWindowFocus: false, - keepPreviousData: true, - } - ); + return response; + } catch (error) { + // ignore error + } + }, + refetchInterval: shouldRefetch ? SLO_LONG_REFETCH_INTERVAL : undefined, + refetchOnWindowFocus: false, + keepPreviousData: true, + }); return { data, - refetch, isLoading, - isRefetching, - isInitialLoading, - isSuccess, - isError, + refetch, }; } diff --git a/x-pack/plugins/observability_solution/slo/public/hooks/use_fetch_slo_details.ts b/x-pack/plugins/observability_solution/slo/public/hooks/use_fetch_slo_details.ts index 9f5e2ef718182..589701be319ae 100644 --- a/x-pack/plugins/observability_solution/slo/public/hooks/use_fetch_slo_details.ts +++ b/x-pack/plugins/observability_solution/slo/public/hooks/use_fetch_slo_details.ts @@ -36,14 +36,14 @@ export function useFetchSloDetails({ }: { sloId?: string; instanceId?: string; - remoteName?: string | null; + remoteName?: string; shouldRefetch?: boolean; }): UseFetchSloDetailsResponse { const { http } = useKibana().services; const { isInitialLoading, isLoading, isError, isSuccess, isRefetching, data, refetch } = useQuery( { - queryKey: sloKeys.detail(sloId), + queryKey: sloKeys.detail(sloId!, instanceId, remoteName), queryFn: async ({ signal }) => { try { const response = await http.get(`/api/observability/slos/${sloId}`, { diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slo_details/hooks/use_get_query_params.ts b/x-pack/plugins/observability_solution/slo/public/pages/slo_details/hooks/use_get_query_params.ts index bea5080d91884..163e2cd526a6a 100644 --- a/x-pack/plugins/observability_solution/slo/public/pages/slo_details/hooks/use_get_query_params.ts +++ b/x-pack/plugins/observability_solution/slo/public/pages/slo_details/hooks/use_get_query_params.ts @@ -52,7 +52,7 @@ export function useGetQueryParams() { return { instanceId: !!instanceId && instanceId !== ALL_VALUE ? instanceId : undefined, - remoteName, + remoteName: remoteName !== null ? remoteName : undefined, isDeletingSlo: deleteSlo === 'true', removeDeleteQueryParam, isResettingSlo: resetSlo === 'true', diff --git a/x-pack/plugins/observability_solution/slo/public/plugin.ts b/x-pack/plugins/observability_solution/slo/public/plugin.ts index 8147512e019e9..3e320238794bc 100644 --- a/x-pack/plugins/observability_solution/slo/public/plugin.ts +++ b/x-pack/plugins/observability_solution/slo/public/plugin.ts @@ -15,20 +15,21 @@ import { PluginInitializerContext, } from '@kbn/core/public'; import { BehaviorSubject, firstValueFrom } from 'rxjs'; -import { SloPublicPluginsSetup, SloPublicPluginsStart } from './types'; import { PLUGIN_NAME, sloAppId } from '../common'; -import type { SloPublicSetup, SloPublicStart } from './types'; +import { ExperimentalFeatures, SloConfig } from '../common/config'; +import { SLOS_BASE_PATH } from '../common/locators/paths'; +import { SLO_ALERTS_EMBEDDABLE_ID } from './embeddable/slo/alerts/constants'; +import { SLO_BURN_RATE_EMBEDDABLE_ID } from './embeddable/slo/burn_rate/constants'; +import { SLO_ERROR_BUDGET_ID } from './embeddable/slo/error_budget/constants'; +import { SLO_OVERVIEW_EMBEDDABLE_ID } from './embeddable/slo/overview/constants'; +import { SloOverviewEmbeddableState } from './embeddable/slo/overview/types'; import { SloDetailsLocatorDefinition } from './locators/slo_details'; import { SloEditLocatorDefinition } from './locators/slo_edit'; import { SloListLocatorDefinition } from './locators/slo_list'; -import { SLOS_BASE_PATH } from '../common/locators/paths'; import { getCreateSLOFlyoutLazy } from './pages/slo_edit/shared_flyout/get_create_slo_flyout'; import { registerBurnRateRuleType } from './rules/register_burn_rate_rule_type'; -import { ExperimentalFeatures, SloConfig } from '../common/config'; -import { SLO_OVERVIEW_EMBEDDABLE_ID } from './embeddable/slo/overview/constants'; -import { SloOverviewEmbeddableState } from './embeddable/slo/overview/types'; -import { SLO_ERROR_BUDGET_ID } from './embeddable/slo/error_budget/constants'; -import { SLO_ALERTS_EMBEDDABLE_ID } from './embeddable/slo/alerts/constants'; +import type { SloPublicSetup, SloPublicStart } from './types'; +import { SloPublicPluginsSetup, SloPublicPluginsStart } from './types'; export class SloPlugin implements Plugin @@ -95,6 +96,7 @@ export class SloPlugin const hasPlatinumLicense = license.hasAtLeast('platinum'); if (hasPlatinumLicense) { const [coreStart, pluginsStart] = await coreSetup.getStartServices(); + pluginsStart.dashboard.registerDashboardPanelPlacementSetting( SLO_OVERVIEW_EMBEDDABLE_ID, (serializedState: SloOverviewEmbeddableState | undefined) => { @@ -104,6 +106,7 @@ export class SloPlugin return { width: 12, height: 8 }; } ); + pluginsSetup.embeddable.registerReactEmbeddableFactory( SLO_OVERVIEW_EMBEDDABLE_ID, async () => { @@ -134,6 +137,24 @@ export class SloPlugin return getErrorBudgetEmbeddableFactory(deps); }); + pluginsStart.dashboard.registerDashboardPanelPlacementSetting( + SLO_BURN_RATE_EMBEDDABLE_ID, + () => { + return { width: 14, height: 7 }; + } + ); + pluginsSetup.embeddable.registerReactEmbeddableFactory( + SLO_BURN_RATE_EMBEDDABLE_ID, + async () => { + const deps = { ...coreStart, ...pluginsStart }; + + const { getBurnRateEmbeddableFactory } = await import( + './embeddable/slo/burn_rate/burn_rate_react_embeddable_factory' + ); + return getBurnRateEmbeddableFactory(deps); + } + ); + const registerAsyncSloUiActions = async () => { if (pluginsSetup.uiActions) { const { registerSloUiActions } = await import('./ui_actions'); diff --git a/x-pack/plugins/observability_solution/slo/public/ui_actions/create_burn_rate_panel_action.tsx b/x-pack/plugins/observability_solution/slo/public/ui_actions/create_burn_rate_panel_action.tsx new file mode 100644 index 0000000000000..0b00d33b4cf6a --- /dev/null +++ b/x-pack/plugins/observability_solution/slo/public/ui_actions/create_burn_rate_panel_action.tsx @@ -0,0 +1,57 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { CoreSetup } from '@kbn/core/public'; +import { i18n } from '@kbn/i18n'; +import { apiIsPresentationContainer } from '@kbn/presentation-containers'; +import { EmbeddableApiContext } from '@kbn/presentation-publishing'; +import { + IncompatibleActionError, + type UiActionsActionDefinition, +} from '@kbn/ui-actions-plugin/public'; +import { SloPublicPluginsStart, SloPublicStart } from '..'; +import { + ADD_BURN_RATE_ACTION_ID, + SLO_BURN_RATE_EMBEDDABLE_ID, +} from '../embeddable/slo/burn_rate/constants'; +import { COMMON_SLO_GROUPING } from '../embeddable/slo/common/constants'; + +export function createBurnRatePanelAction( + getStartServices: CoreSetup['getStartServices'] +): UiActionsActionDefinition { + return { + id: ADD_BURN_RATE_ACTION_ID, + grouping: COMMON_SLO_GROUPING, + order: 30, + getIconType: () => 'visGauge', + isCompatible: async ({ embeddable }) => { + return apiIsPresentationContainer(embeddable); + }, + execute: async ({ embeddable }) => { + if (!apiIsPresentationContainer(embeddable)) throw new IncompatibleActionError(); + const [coreStart, deps] = await getStartServices(); + try { + const { openConfiguration } = await import( + '../embeddable/slo/burn_rate/open_configuration' + ); + const initialState = await openConfiguration(coreStart, deps); + embeddable.addNewPanel( + { + panelType: SLO_BURN_RATE_EMBEDDABLE_ID, + initialState, + }, + true + ); + } catch (e) { + return Promise.reject(); + } + }, + getDisplayName: () => + i18n.translate('xpack.slo.burnRateEmbeddable.ariaLabel', { + defaultMessage: 'SLO Burn Rate', + }), + }; +} diff --git a/x-pack/plugins/observability_solution/slo/public/ui_actions/index.ts b/x-pack/plugins/observability_solution/slo/public/ui_actions/index.ts index 95c1f19a8842a..26411f02e753d 100644 --- a/x-pack/plugins/observability_solution/slo/public/ui_actions/index.ts +++ b/x-pack/plugins/observability_solution/slo/public/ui_actions/index.ts @@ -11,6 +11,7 @@ import { createOverviewPanelAction } from './create_overview_panel_action'; import { createAddErrorBudgetPanelAction } from './create_error_budget_action'; import { createAddAlertsPanelAction } from './create_alerts_panel_action'; import { SloPublicPluginsStart, SloPublicStart, SloPublicPluginsSetup } from '..'; +import { createBurnRatePanelAction } from './create_burn_rate_panel_action'; export function registerSloUiActions( core: CoreSetup, @@ -24,6 +25,7 @@ export function registerSloUiActions( const addOverviewPanelAction = createOverviewPanelAction(core.getStartServices); const addErrorBudgetPanelAction = createAddErrorBudgetPanelAction(core.getStartServices); const addAlertsPanelAction = createAddAlertsPanelAction(core.getStartServices); + const addBurnRatePanelAction = createBurnRatePanelAction(core.getStartServices); // Assign triggers // Only register these actions in stateful kibana, and the serverless observability project @@ -31,5 +33,6 @@ export function registerSloUiActions( uiActions.addTriggerAction(ADD_PANEL_TRIGGER, addOverviewPanelAction); uiActions.addTriggerAction(ADD_PANEL_TRIGGER, addErrorBudgetPanelAction); uiActions.addTriggerAction(ADD_PANEL_TRIGGER, addAlertsPanelAction); + uiActions.addTriggerAction(ADD_PANEL_TRIGGER, addBurnRatePanelAction); } } From 44ebd173538ba0e6e700b25b0187e79f5ecbe611 Mon Sep 17 00:00:00 2001 From: Cee Chen <549407+cee-chen@users.noreply.github.com> Date: Thu, 1 Aug 2024 13:28:41 -0700 Subject: [PATCH 17/25] Upgrade EUI to v95.5.0 (#189436) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `v95.4.0` ⏩ `v95.5.0` _[Questions? Please see our Kibana upgrade FAQ.](https://github.com/elastic/eui/blob/main/wiki/eui-team-processes/upgrading-kibana.md#faq-for-kibana-teams)_ --- ## [`v95.5.0`](https://github.com/elastic/eui/releases/v95.5.0) - Added `minusInSquare` and `plusInSquare` glyphs to `EuiIcon`. ([#7875](https://github.com/elastic/eui/pull/7875)) **Bug fixes** - Fixed `EuiSuperDatePicker` not correctly passing `refreshMinInterval` from the quick select popover ([#7905](https://github.com/elastic/eui/pull/7905)) **CSS-in-JS conversions** - Converted `EuiSuperDatePicker`'s form control to Emotion; ([#7904](https://github.com/elastic/eui/pull/7904)) - Removed `$euiSuperDatePickerWidth` - Removed `$euiSuperDatePickerButtonWidth` - Removed `$euiSuperDatePickerNeedsUpdatingBackgroundColor` - Removed `$euiSuperDatePickerNeedsUpdatingTextColor` - Removed `@euiSuperDatePickerText` mixin - Converted `EuiSuperDatePicker`'s date popover content to Emotion ([#7908](https://github.com/elastic/eui/pull/7908)) - Converted `EuiSuperDatePicker`'s quick select to Emotion ([#7909](https://github.com/elastic/eui/pull/7909)) --------- Co-authored-by: Elastic Machine --- package.json | 2 +- .../__snapshots__/i18n_service.test.tsx.snap | 6 ++- .../src/i18n_eui_mapping.tsx | 17 ++++-- src/dev/license_checker/config.ts | 2 +- .../public/query_string_input/query_bar.scss | 4 -- .../apps/dashboard/group5/embed_mode.ts | 2 +- .../components/time_controls.test.tsx | 7 ++- .../super_date_picker/index.test.tsx | 54 ++++++++++--------- .../translations/translations/fr-FR.json | 2 - .../translations/translations/ja-JP.json | 2 - .../translations/translations/zh-CN.json | 2 - .../page_objects/dataset_quality.ts | 2 +- .../services/transform/date_picker.ts | 4 +- yarn.lock | 8 +-- 14 files changed, 62 insertions(+), 52 deletions(-) diff --git a/package.json b/package.json index e76a42d2d68e3..5f56a05d67a83 100644 --- a/package.json +++ b/package.json @@ -114,7 +114,7 @@ "@elastic/ecs": "^8.11.1", "@elastic/elasticsearch": "^8.14.0", "@elastic/ems-client": "8.5.3", - "@elastic/eui": "95.4.0", + "@elastic/eui": "95.5.0", "@elastic/filesaver": "1.1.2", "@elastic/node-crypto": "1.2.1", "@elastic/numeral": "^2.5.1", diff --git a/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap b/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap index 51caec4b95289..ca90bcbdb67ba 100644 --- a/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap +++ b/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap @@ -263,7 +263,6 @@ exports[`#start() returns \`Context\` component 1`] = ` "euiProgress.valueText": [Function], "euiQuickSelect.applyButton": "Apply", "euiQuickSelect.fullDescription": [Function], - "euiQuickSelect.legendText": "Quick select a time range", "euiQuickSelect.nextLabel": "Next time window", "euiQuickSelect.previousLabel": "Previous time window", "euiQuickSelect.quickSelectTitle": "Quick select", @@ -275,7 +274,10 @@ exports[`#start() returns \`Context\` component 1`] = ` "euiRecentlyUsed.legend": "Recently used date ranges", "euiRefreshInterval.fullDescriptionOff": [Function], "euiRefreshInterval.fullDescriptionOn": [Function], - "euiRefreshInterval.legend": "Refresh every", + "euiRefreshInterval.toggleAriaLabel": "Toggle refresh", + "euiRefreshInterval.toggleLabel": "Refresh every", + "euiRefreshInterval.unitsAriaLabel": "Refresh interval units", + "euiRefreshInterval.valueAriaLabel": "Refresh interval value", "euiRelativeTab.dateInputError": "Must be a valid range", "euiRelativeTab.fullDescription": [Function], "euiRelativeTab.numberInputError": "Must be >= 0", diff --git a/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx b/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx index df6071e9d14ed..34e6ef5ab0380 100644 --- a/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx +++ b/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx @@ -1312,9 +1312,6 @@ export const getEuiContextMapping = (): EuiTokensObject => { defaultMessage: 'Currently set to {timeTense} {timeValue} {timeUnit}.', values: { timeTense, timeValue, timeUnit }, }), - 'euiQuickSelect.legendText': i18n.translate('core.euiQuickSelect.legendText', { - defaultMessage: 'Quick select a time range', - }), 'euiQuickSelect.nextLabel': i18n.translate('core.euiQuickSelect.nextLabel', { defaultMessage: 'Next time window', }), @@ -1339,9 +1336,21 @@ export const getEuiContextMapping = (): EuiTokensObject => { 'euiRecentlyUsed.legend': i18n.translate('core.euiRecentlyUsed.legend', { defaultMessage: 'Recently used date ranges', }), - 'euiRefreshInterval.legend': i18n.translate('core.euiRefreshInterval.legend', { + 'euiRefreshInterval.toggleLabel': i18n.translate('core.euiRefreshInterval.toggleLabel', { defaultMessage: 'Refresh every', }), + 'euiRefreshInterval.toggleAriaLabel': i18n.translate( + 'core.euiRefreshInterval.toggleAriaLabel', + { + defaultMessage: 'Toggle refresh', + } + ), + 'euiRefreshInterval.valueAriaLabel': i18n.translate('core.euiRefreshInterval.valueAriaLabel', { + defaultMessage: 'Refresh interval value', + }), + 'euiRefreshInterval.unitsAriaLabel': i18n.translate('core.euiRefreshInterval.unitsAriaLabel', { + defaultMessage: 'Refresh interval units', + }), 'euiRefreshInterval.fullDescriptionOff': ({ optionValue, optionText }: EuiValues) => i18n.translate('core.euiRefreshInterval.fullDescriptionOff', { defaultMessage: 'Refresh is off, interval set to {optionValue} {optionText}.', diff --git a/src/dev/license_checker/config.ts b/src/dev/license_checker/config.ts index b241cc96b8a83..989322e130dcd 100644 --- a/src/dev/license_checker/config.ts +++ b/src/dev/license_checker/config.ts @@ -86,7 +86,7 @@ export const LICENSE_OVERRIDES = { 'jsts@1.6.2': ['Eclipse Distribution License - v 1.0'], // cf. https://github.com/bjornharrtell/jsts '@mapbox/jsonlint-lines-primitives@2.0.2': ['MIT'], // license in readme https://github.com/tmcw/jsonlint '@elastic/ems-client@8.5.3': ['Elastic License 2.0'], - '@elastic/eui@95.4.0': ['SSPL-1.0 OR Elastic License 2.0'], + '@elastic/eui@95.5.0': ['SSPL-1.0 OR Elastic License 2.0'], 'language-subtag-registry@0.3.21': ['CC-BY-4.0'], // retired ODC‑By license https://github.com/mattcg/language-subtag-registry 'buffers@0.1.1': ['MIT'], // license in importing module https://www.npmjs.com/package/binary '@bufbuild/protobuf@1.2.1': ['Apache-2.0'], // license (Apache-2.0 AND BSD-3-Clause) diff --git a/src/plugins/unified_search/public/query_string_input/query_bar.scss b/src/plugins/unified_search/public/query_string_input/query_bar.scss index 2ecf27416a907..99e93d876ee50 100644 --- a/src/plugins/unified_search/public/query_string_input/query_bar.scss +++ b/src/plugins/unified_search/public/query_string_input/query_bar.scss @@ -3,7 +3,3 @@ background-image: euiFormControlGradient($euiColorDanger); } } -// increase the section height to avoid vertical scrolling -.euiQuickSelectPopover__section { - max-height: 142px; -} diff --git a/test/functional/apps/dashboard/group5/embed_mode.ts b/test/functional/apps/dashboard/group5/embed_mode.ts index 3c2cfbae77a9f..c819a05c8ceb2 100644 --- a/test/functional/apps/dashboard/group5/embed_mode.ts +++ b/test/functional/apps/dashboard/group5/embed_mode.ts @@ -126,7 +126,7 @@ export default function ({ 'dashboard_embed_mode_scrolling', updateBaselines ); - expect(percentDifference).to.be.lessThan(0.02); + expect(percentDifference).to.be.lessThan(0.021); }); }); diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metric_detail/components/time_controls.test.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metric_detail/components/time_controls.test.tsx index 959ded8e0cdbf..70dc780efe590 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metric_detail/components/time_controls.test.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metric_detail/components/time_controls.test.tsx @@ -44,10 +44,13 @@ describe('MetricsTimeControls', () => { /> ); component - .find('[data-test-subj="superDatePickerToggleQuickMenuButton"]') + .find('button[data-test-subj="superDatePickerToggleQuickMenuButton"]') .first() .simulate('click'); - component.find('[data-test-subj="superDatePickerCommonlyUsed_Today"]').last().simulate('click'); + component + .find('button[data-test-subj="superDatePickerCommonlyUsed_Today"]') + .last() + .simulate('click'); expect(handleTimeChange.mock.calls.length).toBe(1); const timeRangeInput = handleTimeChange.mock.calls[0][0]; expect(timeRangeInput.from).toBe('now/d'); diff --git a/x-pack/plugins/security_solution/public/common/components/super_date_picker/index.test.tsx b/x-pack/plugins/security_solution/public/common/components/super_date_picker/index.test.tsx index a2cbc508da56e..19e783064b763 100644 --- a/x-pack/plugins/security_solution/public/common/components/super_date_picker/index.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/super_date_picker/index.test.tsx @@ -103,12 +103,15 @@ describe('SIEM Super Date Picker', () => { ); wrapper - .find('[data-test-subj="superDatePickerToggleQuickMenuButton"]') + .find('button[data-test-subj="superDatePickerToggleQuickMenuButton"]') .first() .simulate('click'); wrapper.update(); - wrapper.find('button.euiQuickSelect__applyButton').first().simulate('click'); + wrapper + .find('button[data-test-subj="superDatePickerQuickSelectApplyButton"]') + .first() + .simulate('click'); wrapper.update(); }); @@ -123,15 +126,14 @@ describe('SIEM Super Date Picker', () => { test('Make Sure it is Today date is an absolute date', () => { wrapper - .find('[data-test-subj="superDatePickerToggleQuickMenuButton"]') + .find('button[data-test-subj="superDatePickerToggleQuickMenuButton"]') .first() .simulate('click'); wrapper.update(); wrapper - .find('[data-test-subj="superDatePickerCommonlyUsed_Today"]') + .find('button[data-test-subj="superDatePickerCommonlyUsed_Today"]') .first() - .find('button') .simulate('click'); wrapper.update(); expect(store.getState().inputs.global.timerange.kind).toBe('absolute'); @@ -139,7 +141,7 @@ describe('SIEM Super Date Picker', () => { test('Make Sure it is This Week date is an absolute date', () => { wrapper - .find('[data-test-subj="superDatePickerToggleQuickMenuButton"]') + .find('button[data-test-subj="superDatePickerToggleQuickMenuButton"]') .first() .simulate('click'); wrapper.update(); @@ -173,53 +175,57 @@ describe('SIEM Super Date Picker', () => { ); wrapper - .find('[data-test-subj="superDatePickerToggleQuickMenuButton"]') + .find('button[data-test-subj="superDatePickerToggleQuickMenuButton"]') .first() .simulate('click'); wrapper.update(); wrapper - .find('[data-test-subj="superDatePickerCommonlyUsed_Today"]') + .find('button[data-test-subj="superDatePickerCommonlyUsed_Today"]') .first() - .find('button') .simulate('click'); wrapper.update(); }); test('Today is in Recently used date ranges', () => { - expect(wrapper.find('div.euiQuickSelectPopover__section').at(1).text()).toBe('Today'); + expect( + wrapper.find('div[className*="euiQuickSelectPanel__section"]').at(1).text() + ).toContain('Today'); }); test('Today and "Last ${x} hours" where ${x} is in hours are in Recently used date ranges', () => { wrapper - .find('[data-test-subj="superDatePickerToggleQuickMenuButton"]') + .find('button[data-test-subj="superDatePickerToggleQuickMenuButton"]') .first() .simulate('click'); wrapper.update(); - wrapper.find('button.euiQuickSelect__applyButton').first().simulate('click'); + wrapper + .find('button[data-test-subj="superDatePickerQuickSelectApplyButton"]') + .first() + .simulate('click'); wrapper.update(); - expect(wrapper.find('div.euiQuickSelectPopover__section').at(1).text()).toMatch( - /^Last\s[0-9]+\s(.)+Today/ - ); + const ranges = wrapper.find('div[className*="euiQuickSelectPanel__section"]').at(1).text(); + expect(ranges).toContain('Today'); + expect(ranges).toContain('Last 24 hours'); }); test('Make sure that it does not add any duplicate if you click again on today', () => { wrapper - .find('[data-test-subj="superDatePickerToggleQuickMenuButton"]') + .find('button[data-test-subj="superDatePickerToggleQuickMenuButton"]') .first() .simulate('click'); wrapper.update(); wrapper - .find('[data-test-subj="superDatePickerCommonlyUsed_Today"]') + .find('button[data-test-subj="superDatePickerCommonlyUsed_Today"]') .first() - .find('button') .simulate('click'); wrapper.update(); - expect(wrapper.find('div.euiQuickSelectPopover__section').at(1).text()).toBe('Today'); + const text = wrapper.find('div[className*="euiQuickSelectPanel__section"]').at(1).text(); + expect(text.match(/Today/g)).toHaveLength(1); }); }); @@ -236,15 +242,14 @@ describe('SIEM Super Date Picker', () => { ); wrapper - .find('[data-test-subj="superDatePickerToggleQuickMenuButton"]') + .find('button[data-test-subj="superDatePickerToggleQuickMenuButton"]') .first() .simulate('click'); wrapper.update(); wrapper - .find('[data-test-subj="superDatePickerToggleRefreshButton"]') + .find('button[data-test-subj="superDatePickerToggleRefreshButton"]') .first() - .find('button') .simulate('click'); wrapper.update(); @@ -266,15 +271,14 @@ describe('SIEM Super Date Picker', () => { test('Make sure we can stop the stream live', () => { wrapper - .find('[data-test-subj="superDatePickerToggleQuickMenuButton"]') + .find('button[data-test-subj="superDatePickerToggleQuickMenuButton"]') .first() .simulate('click'); wrapper.update(); wrapper - .find('[data-test-subj="superDatePickerToggleRefreshButton"]') + .find('button[data-test-subj="superDatePickerToggleRefreshButton"]') .first() - .find('button') .simulate('click'); wrapper.update(); diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index f2709b5c0cb4b..fe71c9a7c2c8f 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -834,7 +834,6 @@ "core.euiProgress.valueText": "{value} %", "core.euiQuickSelect.applyButton": "Appliquer", "core.euiQuickSelect.fullDescription": "Actuellement défini sur {timeTense} {timeValue} {timeUnit}.", - "core.euiQuickSelect.legendText": "Sélection rapide d’une plage temporelle", "core.euiQuickSelect.nextLabel": "Fenêtre temporelle suivante", "core.euiQuickSelect.previousLabel": "Fenêtre temporelle précédente", "core.euiQuickSelect.quickSelectTitle": "Sélection rapide", @@ -846,7 +845,6 @@ "core.euiRecentlyUsed.legend": "Plages de dates récemment utilisées", "core.euiRefreshInterval.fullDescriptionOff": "L'actualisation est désactivée, intervalle défini sur {optionValue} {optionText}.", "core.euiRefreshInterval.fullDescriptionOn": "L'actualisation est activée, intervalle défini sur {optionValue} {optionText}.", - "core.euiRefreshInterval.legend": "Actualiser toutes les", "core.euiRelativeTab.dateInputError": "Doit être une plage valide", "core.euiRelativeTab.fullDescription": "L'unité peut être modifiée. Elle est actuellement définie sur {unit}.", "core.euiRelativeTab.numberInputError": "Doit être >= 0.", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 0d1f2adf389b9..26eaec66089e8 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -835,7 +835,6 @@ "core.euiProgress.valueText": "{value}%", "core.euiQuickSelect.applyButton": "適用", "core.euiQuickSelect.fullDescription": "現在 {timeTense} {timeValue} {timeUnit}に設定されています。", - "core.euiQuickSelect.legendText": "時間範囲をすばやく選択", "core.euiQuickSelect.nextLabel": "次の時間ウィンドウ", "core.euiQuickSelect.previousLabel": "前の時間ウィンドウ", "core.euiQuickSelect.quickSelectTitle": "すばやく選択", @@ -847,7 +846,6 @@ "core.euiRecentlyUsed.legend": "最近使用した日付範囲", "core.euiRefreshInterval.fullDescriptionOff": "更新はオフです。間隔は{optionValue} {optionText}に設定されています。", "core.euiRefreshInterval.fullDescriptionOn": "更新はオンです。間隔は{optionValue} {optionText}に設定されています。", - "core.euiRefreshInterval.legend": "以下の感覚ごとに更新", "core.euiRelativeTab.dateInputError": "有効な範囲でなければなりません", "core.euiRelativeTab.fullDescription": "単位は変更可能です。現在 {unit} に設定されています。", "core.euiRelativeTab.numberInputError": "0以上でなければなりません", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 3fb4714874614..2382265563a48 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -836,7 +836,6 @@ "core.euiProgress.valueText": "{value}%", "core.euiQuickSelect.applyButton": "应用", "core.euiQuickSelect.fullDescription": "当前设置为 {timeTense} {timeValue} {timeUnit}。", - "core.euiQuickSelect.legendText": "快选时间范围", "core.euiQuickSelect.nextLabel": "下一时间窗口", "core.euiQuickSelect.previousLabel": "上一时间窗口", "core.euiQuickSelect.quickSelectTitle": "快速选择", @@ -848,7 +847,6 @@ "core.euiRecentlyUsed.legend": "最近使用的日期范围", "core.euiRefreshInterval.fullDescriptionOff": "刷新已关闭,时间间隔设置为 {optionValue} {optionText}。", "core.euiRefreshInterval.fullDescriptionOn": "刷新已打开,时间间隔设置为 {optionValue} {optionText}。", - "core.euiRefreshInterval.legend": "刷新频率", "core.euiRelativeTab.dateInputError": "必须为有效范围", "core.euiRelativeTab.fullDescription": "单位可更改。当前设置为 {unit}。", "core.euiRelativeTab.numberInputError": "必须 >= 0", diff --git a/x-pack/test/functional/page_objects/dataset_quality.ts b/x-pack/test/functional/page_objects/dataset_quality.ts index 7f918ce3ba76f..b2d07161ddbaa 100644 --- a/x-pack/test/functional/page_objects/dataset_quality.ts +++ b/x-pack/test/functional/page_objects/dataset_quality.ts @@ -79,7 +79,7 @@ export function DatasetQualityPageObject({ getPageObjects, getService }: FtrProv datasetSearchInput: '[placeholder="Filter data sets"]', showFullDatasetNamesSwitch: 'button[aria-label="Show full data set names"]', showInactiveDatasetsNamesSwitch: 'button[aria-label="Show inactive data sets"]', - superDatePickerApplyButton: '.euiQuickSelect__applyButton', + superDatePickerApplyButton: '[data-test-subj="superDatePickerQuickSelectApplyButton"]', }; const testSubjectSelectors = { diff --git a/x-pack/test/functional/services/transform/date_picker.ts b/x-pack/test/functional/services/transform/date_picker.ts index 8752a398c2276..3da0c88fce6b7 100644 --- a/x-pack/test/functional/services/transform/date_picker.ts +++ b/x-pack/test/functional/services/transform/date_picker.ts @@ -37,7 +37,9 @@ export function TransformDatePickerProvider({ getService, getPageObjects }: FtrP await find.selectValue(`[aria-label*="Time unit"]`, timeUnit); // Apply - const applyButton = await quickMenuElement.findByClassName('euiQuickSelect__applyButton'); + const applyButton = await quickMenuElement.findByTestSubject( + 'superDatePickerQuickSelectApplyButton' + ); const actualApplyButtonText = await applyButton.getVisibleText(); expect(actualApplyButtonText).to.be('Apply'); diff --git a/yarn.lock b/yarn.lock index 3d2a400a9f70f..4dfc114ab6ec4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1767,10 +1767,10 @@ resolved "https://registry.yarnpkg.com/@elastic/eslint-plugin-eui/-/eslint-plugin-eui-0.0.2.tgz#56b9ef03984a05cc213772ae3713ea8ef47b0314" integrity sha512-IoxURM5zraoQ7C8f+mJb9HYSENiZGgRVcG4tLQxE61yHNNRDXtGDWTZh8N1KIHcsqN1CEPETjuzBXkJYF/fDiQ== -"@elastic/eui@95.4.0": - version "95.4.0" - resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-95.4.0.tgz#57ac111c2a3e8125db244928a95787bbb2f318c8" - integrity sha512-UXmn+xgJj4pwq6MV7xMjM79GN+taTv7LBfrtRfurGwhkmvXJrOjMXWq+mfR8rU44lOS2R4AwzH5gcCBjAafLsA== +"@elastic/eui@95.5.0": + version "95.5.0" + resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-95.5.0.tgz#a138a17279b06cd076bd400f246ef377afe44453" + integrity sha512-znXhppkr8UNuppxNFu1IGHq3Q8EfMBDtXTYXU/JK5ELgGz0Rd8Syhaw3TJSBoiwufATcmSrFbXCF2grXbY07Kw== dependencies: "@hello-pangea/dnd" "^16.6.0" "@types/lodash" "^4.14.202" From 3bd732df27ec111a368b08d53fe4dbb89dddd06a Mon Sep 17 00:00:00 2001 From: Philippe Oberti Date: Thu, 1 Aug 2024 22:35:37 +0200 Subject: [PATCH 18/25] [Security Solution][Alert details] - move threat intelligence to flyout folder (#189421) --- .../security_solution/cti/index.ts | 8 - .../common/utils/data_retrieval.test.ts | 26 --- .../common/utils/data_retrieval.ts | 15 -- .../enrichment_accordion_group.tsx | 138 ------------- .../enrichment_button_content.test.tsx | 28 --- .../cti_details/enrichment_button_content.tsx | 36 ---- .../cti_details/enrichment_icon.tsx | 30 --- .../cti_details/enrichment_no_data.tsx | 46 ----- .../cti_details/threat_details_view.test.tsx | 187 ----------------- .../cti_details/threat_details_view.tsx | 126 ------------ .../cti_details/threat_summary_table.tsx | 20 -- .../cti_details/threat_summary_title.tsx | 21 -- .../event_details/cti_details/translations.ts | 85 -------- .../containers/cti/event_enrichment/index.ts | 9 - .../cti/event_enrichment/translations.ts | 15 -- .../event_enrichment/use_event_enrichment.ts | 15 -- .../left/components/test_ids.ts | 24 ++- ...details_view_enrichment_accordion.test.tsx | 28 +++ ...reat_details_view_enrichment_accordion.tsx | 180 ++++++++++++++++ ..._view_enrichment_accordion_group.test.tsx} | 14 +- ...etails_view_enrichment_accordion_group.tsx | 37 ++++ ...ls_view_enrichment_button_content.test.tsx | 35 ++++ ...details_view_enrichment_button_content.tsx | 62 ++++++ ...t_details_view_enrichment_section.test.tsx | 93 +++++++++ ...threat_details_view_enrichment_section.tsx | 193 ++++++++++++++++++ .../threat_intelligence_details.test.tsx | 37 +++- .../threat_intelligence_details.tsx | 76 +++++-- ...nce_view_enrichment_range_picker.test.tsx} | 22 +- ...lligence_view_enrichment_range_picker.tsx} | 54 ++++- .../use_threat_intelligence_details.test.ts | 7 +- .../hooks/use_threat_intelligence_details.ts | 39 +++- .../mocks}/indicator_with_nested_objects.ts | 0 .../use_fetch_threat_intelligence.test.tsx | 4 +- .../hooks/use_fetch_threat_intelligence.ts | 6 +- .../use_investigation_enrichment.test.ts | 122 +++++++++++ .../hooks}/use_investigation_enrichment.ts | 63 +++++- .../shared/services/threat_intelligence.ts} | 25 ++- .../utils/threat_intelligence.test.tsx} | 2 +- .../shared/utils/threat_intelligence.tsx} | 91 ++++++--- .../translations/translations/fr-FR.json | 11 - .../translations/translations/ja-JP.json | 11 - .../translations/translations/zh-CN.json | 11 - .../alert_threat_enrichments.cy.ts | 45 ++-- .../cypress/screens/alerts_details.ts | 35 ++-- .../cypress/tasks/alerts.ts | 3 - 45 files changed, 1135 insertions(+), 1000 deletions(-) delete mode 100644 x-pack/plugins/security_solution/common/utils/data_retrieval.test.ts delete mode 100644 x-pack/plugins/security_solution/common/utils/data_retrieval.ts delete mode 100644 x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_accordion_group.tsx delete mode 100644 x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_button_content.test.tsx delete mode 100644 x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_button_content.tsx delete mode 100644 x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_icon.tsx delete mode 100644 x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_no_data.tsx delete mode 100644 x-pack/plugins/security_solution/public/common/components/event_details/cti_details/threat_details_view.test.tsx delete mode 100644 x-pack/plugins/security_solution/public/common/components/event_details/cti_details/threat_details_view.tsx delete mode 100644 x-pack/plugins/security_solution/public/common/components/event_details/cti_details/threat_summary_table.tsx delete mode 100644 x-pack/plugins/security_solution/public/common/components/event_details/cti_details/threat_summary_title.tsx delete mode 100644 x-pack/plugins/security_solution/public/common/components/event_details/cti_details/translations.ts delete mode 100644 x-pack/plugins/security_solution/public/common/containers/cti/event_enrichment/index.ts delete mode 100644 x-pack/plugins/security_solution/public/common/containers/cti/event_enrichment/translations.ts delete mode 100644 x-pack/plugins/security_solution/public/common/containers/cti/event_enrichment/use_event_enrichment.ts create mode 100644 x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_accordion.test.tsx create mode 100644 x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_accordion.tsx rename x-pack/plugins/security_solution/public/{common/components/event_details/cti_details/enrichment_accordion_group.test.tsx => flyout/document_details/left/components/threat_details_view_enrichment_accordion_group.test.tsx} (66%) create mode 100644 x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_accordion_group.tsx create mode 100644 x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_button_content.test.tsx create mode 100644 x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_button_content.tsx create mode 100644 x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_section.test.tsx create mode 100644 x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_section.tsx rename x-pack/plugins/security_solution/public/{common/components/event_details/cti_details/enrichment_range_picker.test.tsx => flyout/document_details/left/components/threat_intelligence_view_enrichment_range_picker.test.tsx} (60%) rename x-pack/plugins/security_solution/public/{common/components/event_details/cti_details/enrichment_range_picker.tsx => flyout/document_details/left/components/threat_intelligence_view_enrichment_range_picker.tsx} (62%) rename x-pack/plugins/security_solution/public/{common/components/event_details/__mocks__ => flyout/document_details/left/mocks}/indicator_with_nested_objects.ts (100%) create mode 100644 x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_investigation_enrichment.test.ts rename x-pack/plugins/security_solution/public/{common/containers/cti/event_enrichment => flyout/document_details/shared/hooks}/use_investigation_enrichment.ts (58%) rename x-pack/plugins/security_solution/public/{common/containers/cti/event_enrichment/api.ts => flyout/document_details/shared/services/threat_intelligence.ts} (68%) rename x-pack/plugins/security_solution/public/{common/components/event_details/cti_details/helpers.test.tsx => flyout/document_details/shared/utils/threat_intelligence.test.tsx} (99%) rename x-pack/plugins/security_solution/public/{common/components/event_details/cti_details/helpers.tsx => flyout/document_details/shared/utils/threat_intelligence.tsx} (71%) diff --git a/x-pack/plugins/security_solution/common/search_strategy/security_solution/cti/index.ts b/x-pack/plugins/security_solution/common/search_strategy/security_solution/cti/index.ts index 9efb295c13496..290cd6e57eb92 100644 --- a/x-pack/plugins/security_solution/common/search_strategy/security_solution/cti/index.ts +++ b/x-pack/plugins/security_solution/common/search_strategy/security_solution/cti/index.ts @@ -15,14 +15,6 @@ export { CtiQueries } from '../../../api/search_strategy'; export type CtiEnrichment = Record; export type EventFields = Record; -export interface CtiEnrichmentIdentifiers { - id: string | undefined; - field: string | undefined; - value: string | undefined; - type: string | undefined; - feedName: string | undefined; -} - export interface CtiEventEnrichmentStrategyResponse extends IEsSearchResponse { enrichments: CtiEnrichment[]; inspect: Inspect; diff --git a/x-pack/plugins/security_solution/common/utils/data_retrieval.test.ts b/x-pack/plugins/security_solution/common/utils/data_retrieval.test.ts deleted file mode 100644 index d7ab3986a14f9..0000000000000 --- a/x-pack/plugins/security_solution/common/utils/data_retrieval.test.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { getFirstElement } from './data_retrieval'; - -describe('getFirstElement', () => { - it('returns undefined if array is undefined', () => { - expect(getFirstElement(undefined)).toEqual(undefined); - }); - - it('returns undefined if array is empty', () => { - expect(getFirstElement([])).toEqual(undefined); - }); - - it('returns the first element if present', () => { - expect(getFirstElement(['hi mom'])).toEqual('hi mom'); - }); - - it('returns the first element of multiple', () => { - expect(getFirstElement(['hi mom', 'hello world'])).toEqual('hi mom'); - }); -}); diff --git a/x-pack/plugins/security_solution/common/utils/data_retrieval.ts b/x-pack/plugins/security_solution/common/utils/data_retrieval.ts deleted file mode 100644 index 04b6839b854b4..0000000000000 --- a/x-pack/plugins/security_solution/common/utils/data_retrieval.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -/** - * Retrieves the first element of the given array. - * - * @param array the array to retrieve a value from - * @returns the first element of the array, or undefined if the array is undefined - */ -export const getFirstElement: (array: T[] | undefined) => T | undefined = (array) => - array ? array[0] : undefined; diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_accordion_group.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_accordion_group.tsx deleted file mode 100644 index da9b26ddc4e4a..0000000000000 --- a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_accordion_group.tsx +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import React from 'react'; -import styled from 'styled-components'; -import type { EuiBasicTableColumn } from '@elastic/eui'; -import { - EuiAccordion, - EuiFlexGroup, - EuiFlexItem, - EuiLink, - EuiSpacer, - EuiToolTip, -} from '@elastic/eui'; - -import type { CtiEnrichment } from '../../../../../common/search_strategy/security_solution/cti'; -import type { ThreatDetailsRow } from './helpers'; -import { - getEnrichmentIdentifiers, - isInvestigationTimeEnrichment, - getFirstSeen, - buildThreatDetailsItems, -} from './helpers'; -import { EnrichmentButtonContent } from './enrichment_button_content'; -import { ThreatSummaryTitle } from './threat_summary_title'; -import { InspectButton } from '../../inspect'; -import { QUERY_ID } from '../../../containers/cti/event_enrichment'; -import * as i18n from './translations'; -import { ThreatSummaryTable } from './threat_summary_table'; -import { REFERENCE } from '../../../../../common/cti/constants'; - -const StyledEuiAccordion = styled(EuiAccordion)` - .euiAccordion__triggerWrapper { - background: ${({ theme }) => theme.eui.euiColorLightestShade}; - border-radius: ${({ theme }) => theme.eui.euiSizeXS}; - height: ${({ theme }) => theme.eui.euiSizeXL}; - margin-bottom: ${({ theme }) => theme.eui.euiSizeS}; - padding-left: ${({ theme }) => theme.eui.euiSizeS}; - } -`; - -const ThreatDetailsDescription: React.FC = ({ - fieldName, - value, -}) => { - const tooltipChild = fieldName.match(REFERENCE) ? ( - - {value} - - ) : ( - {value} - ); - return ( - - - {fieldName} - - - } - > - {tooltipChild} - - ); -}; - -const columns: Array> = [ - { - field: 'title', - truncateText: false, - render: ThreatSummaryTitle, - width: '220px', - name: '', - }, - { - field: 'description', - truncateText: false, - render: ThreatDetailsDescription, - name: '', - }, -]; - -const EnrichmentAccordion: React.FC<{ - enrichment: CtiEnrichment; - index: number; -}> = ({ enrichment, index }) => { - const { - id = `threat-details-item`, - field, - feedName, - type, - value, - } = getEnrichmentIdentifiers(enrichment); - const accordionId = `${id}${field}`; - return ( - } - extraAction={ - isInvestigationTimeEnrichment(type) && ( - - - - ) - } - > - - - ); -}; - -export const EnrichmentAccordionGroup: React.FC<{ enrichments: CtiEnrichment[] }> = ({ - enrichments, -}) => ( - <> - {enrichments - .sort((a, b) => getFirstSeen(b) - getFirstSeen(a)) - .map((enrichment, index) => ( - - - {index < enrichments.length - 1 && } - - ))} - -); diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_button_content.test.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_button_content.test.tsx deleted file mode 100644 index 2be7bdf76fcbf..0000000000000 --- a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_button_content.test.tsx +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import { mount } from 'enzyme'; -import { EnrichmentButtonContent } from './enrichment_button_content'; - -describe('EnrichmentButtonContent', () => { - it('renders string with feedName if feedName is present', () => { - const wrapper = mount( - - ); - expect(wrapper.find('[data-test-subj="enrichment-button-content"]').hostNodes().text()).toEqual( - 'source.ip 127.0.0.1 from eceintel' - ); - }); - - it('renders string without feedName if feedName is not present', () => { - const wrapper = mount(); - expect(wrapper.find('[data-test-subj="enrichment-button-content"]').hostNodes().text()).toEqual( - 'source.ip 127.0.0.1' - ); - }); -}); diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_button_content.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_button_content.tsx deleted file mode 100644 index b03e2f4a2d21a..0000000000000 --- a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_button_content.tsx +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import React from 'react'; -import styled from 'styled-components'; -import { EuiToolTip } from '@elastic/eui'; -import * as i18n from './translations'; - -const OverflowParent = styled.div` - display: inline-grid; -`; - -const OverflowContainer = styled.div` - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - font-weight: bold; -`; - -export const EnrichmentButtonContent: React.FC<{ - field?: string; - feedName?: string; - value?: string; -}> = ({ field = '', feedName = '', value = '' }) => { - const title = `${field} ${value}${feedName ? ` ${i18n.FEED_NAME_PREPOSITION} ${feedName}` : ''}`; - return ( - - - {title} - - - ); -}; diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_icon.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_icon.tsx deleted file mode 100644 index 9e6d876b2bcd3..0000000000000 --- a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_icon.tsx +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import { EuiIcon, EuiToolTip } from '@elastic/eui'; - -import * as i18n from './translations'; -import { isInvestigationTimeEnrichment } from './helpers'; - -export const getTooltipTitle = (type: string | undefined) => - isInvestigationTimeEnrichment(type) - ? i18n.INVESTIGATION_ENRICHMENT_TITLE - : i18n.INDICATOR_ENRICHMENT_TITLE; - -export const getTooltipContent = (type: string | undefined) => - isInvestigationTimeEnrichment(type) - ? i18n.INVESTIGATION_TOOLTIP_CONTENT - : i18n.INDICATOR_TOOLTIP_CONTENT; - -export const EnrichmentIcon: React.FC<{ type: string | undefined }> = ({ type }) => { - return ( - - - - ); -}; diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_no_data.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_no_data.tsx deleted file mode 100644 index 8241054ecc940..0000000000000 --- a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_no_data.tsx +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import React from 'react'; -import styled from 'styled-components'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { EuiLink } from '@elastic/eui'; -import * as i18n from './translations'; -import { ENRICHMENT_TYPES } from '../../../../../common/cti/constants'; - -const InlineBlock = styled.div` - display: inline-block; - line-height: 1.7em; -`; - -export const EnrichmentNoData: React.FC<{ type?: ENRICHMENT_TYPES }> = ({ type }) => { - if (!type) return null; - return ( - - {type === ENRICHMENT_TYPES.IndicatorMatchRule ? ( - i18n.NO_ENRICHMENTS_FOUND_DESCRIPTION - ) : ( - - - - ), - }} - /> - )} - - ); -}; diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/threat_details_view.test.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/threat_details_view.test.tsx deleted file mode 100644 index 2b1e73c1141c4..0000000000000 --- a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/threat_details_view.test.tsx +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import { mount } from 'enzyme'; - -import { TestProviders } from '../../../mock'; -import { buildEventEnrichmentMock } from '../../../../../common/search_strategy/security_solution/cti/index.mock'; -import { ThreatDetailsView } from './threat_details_view'; - -describe('ThreatDetailsView', () => { - it('renders a detail view for each enrichment', () => { - const enrichments = [ - buildEventEnrichmentMock(), - buildEventEnrichmentMock({ 'matched.id': ['other.id'], 'matched.field': ['other.field'] }), - ]; - - const wrapper = mount( - - - - ); - - expect(wrapper.find('[data-test-subj^="threat-details-view"]').hostNodes()).toHaveLength( - enrichments.length - ); - }); - - it('renders an anchor link for indicator.reference', () => { - const enrichments = [ - buildEventEnrichmentMock({ - 'threat.indicator.reference': ['http://foo.baz'], - }), - ]; - const wrapper = mount( - - - - ); - expect(wrapper.find('a').length).toEqual(1); - }); - - it('sorts same type of enrichments by first_seen descending', () => { - const mostRecentDate = '2021-04-25T18:17:00.000Z'; - const olderDate = '2021-03-25T18:17:00.000Z'; - // this simulates a legacy enrichment from the old indicator match rule, - // where first_seen is available at the top level - const existingEnrichment = buildEventEnrichmentMock({ - 'indicator.first_seen': [mostRecentDate], - }); - delete existingEnrichment['threat.indicator.first_seen']; - const newEnrichment = buildEventEnrichmentMock({ - 'matched.id': ['other.id'], - 'threat.indicator.first_seen': [olderDate], - }); - const enrichments = [existingEnrichment, newEnrichment]; - - const wrapper = mount( - - - - ); - - const firstSeenRows = wrapper - .find('.euiTableRow') - .hostNodes() - .filterWhere((node) => node.text().includes('first_seen')); - expect(firstSeenRows.map((node) => node.text())).toEqual([ - `indicator.first_seen${mostRecentDate}`, - `indicator.first_seen${olderDate}`, - ]); - }); - - it('groups enrichments by matched type', () => { - const indicatorMatch = buildEventEnrichmentMock({ - 'matched.type': ['indicator_match_rule'], - }); - const investigationEnrichment = buildEventEnrichmentMock({ - 'matched.type': ['investigation_time'], - }); - const enrichments = [indicatorMatch, investigationEnrichment]; - - const wrapper = mount( - - - - ); - - expect(wrapper.exists('[data-test-subj="threat-match-detected"]')).toEqual(true); - expect(wrapper.exists('[data-test-subj="enriched-with-threat-intel"]')).toEqual(true); - }); - - it('renders no data views', () => { - const wrapper = mount( - - - - ); - - expect( - wrapper.exists( - '[data-test-subj="threat-match-detected"] [data-test-subj="no-enrichments-found"]' - ) - ).toEqual(true); - expect( - wrapper.exists( - '[data-test-subj="enriched-with-threat-intel"] [data-test-subj="no-enrichments-found"]' - ) - ).toEqual(true); - }); - - it('renders loading state', () => { - const wrapper = mount( - - - - ); - - expect(wrapper.exists('[data-test-subj="loading-enrichments"]')).toEqual(true); - }); - - it('can hide investigation time enrichments', () => { - const investigationEnrichment = buildEventEnrichmentMock({ - 'matched.type': ['investigation_time'], - }); - - const wrapper = mount( - - - - ); - - expect(wrapper.exists('[data-test-subj="enriched-with-threat-intel"]')).toEqual(false); - }); - - it('renders children as a part of investigation time enrichment section', () => { - const wrapper = mount( - - -
- - - ); - - expect(wrapper.exists('.test-div')).toEqual(true); - }); - - it('does not render children id investigation time enrichment section is not showing', () => { - const wrapper = mount( - - -
- - - ); - - expect(wrapper.exists('.test-div')).toEqual(false); - }); -}); diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/threat_details_view.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/threat_details_view.tsx deleted file mode 100644 index d3a2785709802..0000000000000 --- a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/threat_details_view.tsx +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import { - EuiFlexGroup, - EuiFlexItem, - EuiHorizontalRule, - EuiSkeletonText, - EuiSpacer, - EuiTitle, -} from '@elastic/eui'; -import React from 'react'; -import { groupBy } from 'lodash'; - -import { ENRICHMENT_TYPES } from '../../../../../common/cti/constants'; -import type { CtiEnrichment } from '../../../../../common/search_strategy/security_solution/cti'; -import * as i18n from './translations'; -import { EnrichmentIcon } from './enrichment_icon'; -import { EnrichmentAccordionGroup } from './enrichment_accordion_group'; -import { EnrichmentNoData } from './enrichment_no_data'; - -const EnrichmentSectionHeader: React.FC<{ type?: ENRICHMENT_TYPES }> = ({ type }) => { - return type ? ( - <> - - - -

- {type === ENRICHMENT_TYPES.IndicatorMatchRule - ? i18n.INDICATOR_ENRICHMENT_TITLE - : i18n.INVESTIGATION_ENRICHMENT_TITLE} -

-
-
- - - -
- - - ) : null; -}; - -const EnrichmentSection: React.FC<{ - enrichments: CtiEnrichment[]; - type?: ENRICHMENT_TYPES; - loading?: boolean; - dataTestSubj: string; - children?: React.ReactNode; -}> = ({ enrichments, type, loading, dataTestSubj, children }) => { - return ( -
- - {children} - {Array.isArray(enrichments) ? ( - - ) : ( - <> - - {loading && ( - <> - - - - )} - - )} -
- ); -}; - -// TODO: MOVE TO FLYOUT FOLDER - https://github.com/elastic/security-team/issues/7462 -const ThreatDetailsViewComponent: React.FC<{ - enrichments: CtiEnrichment[]; - showInvestigationTimeEnrichments: boolean; - loading: boolean; - /** - * Slot to render something before the beforeHeader. - * NOTE: this was introduced to avoid alterting existing flyout and will be removed after - * new flyout implementation is ready (Expandable Flyout owned by the Investigations Team) - */ - before?: React.ReactNode; - children?: React.ReactNode; -}> = ({ enrichments, before = null, showInvestigationTimeEnrichments, loading, children }) => { - const { - [ENRICHMENT_TYPES.IndicatorMatchRule]: indicatorMatches, - [ENRICHMENT_TYPES.InvestigationTime]: threatIntelEnrichments, - undefined: matchesWithNoType, - } = groupBy(enrichments, 'matched.type'); - - return ( - <> - {before} - - {showInvestigationTimeEnrichments && ( - <> - - - {children} - - - )} - {matchesWithNoType && ( - <> - - {indicatorMatches && } - - - )} - - ); -}; - -export const ThreatDetailsView = React.memo(ThreatDetailsViewComponent); diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/threat_summary_table.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/threat_summary_table.tsx deleted file mode 100644 index 91a0a0397602f..0000000000000 --- a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/threat_summary_table.tsx +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type { AnyStyledComponent } from 'styled-components'; -import styled from 'styled-components'; -import { EuiInMemoryTable } from '@elastic/eui'; - -export const ThreatSummaryTable = styled(EuiInMemoryTable as unknown as AnyStyledComponent)` - .euiTableHeaderCell, - .euiTableRowCell { - border: none; - } - .euiTableHeaderCell .euiTableCellContent { - padding: 0; - } -`; diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/threat_summary_title.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/threat_summary_title.tsx deleted file mode 100644 index 71541c9d9ac1e..0000000000000 --- a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/threat_summary_title.tsx +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import styled from 'styled-components'; -import React from 'react'; -import { EuiTitle } from '@elastic/eui'; - -const StyledH5 = styled.h5` - line-height: 1.7rem; -`; - -export const ThreatSummaryTitle = (title: string) => ( - - {title} - -); -ThreatSummaryTitle.displayName = 'ThreatSummaryTitle'; diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/translations.ts b/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/translations.ts deleted file mode 100644 index b1d84eadc8c22..0000000000000 --- a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/translations.ts +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { i18n } from '@kbn/i18n'; -export * from '../../../../entity_analytics/components/risk_score/translations'; - -export const FEED_NAME_PREPOSITION = i18n.translate( - 'xpack.securitySolution.eventDetails.ctiSummary.feedNamePreposition', - { - defaultMessage: 'from', - } -); - -export const INDICATOR_ENRICHMENT_TITLE = i18n.translate( - 'xpack.securitySolution.eventDetails.ctiSummary.indicatorEnrichmentTitle', - { - defaultMessage: 'Threat match detected', - } -); - -export const INVESTIGATION_ENRICHMENT_TITLE = i18n.translate( - 'xpack.securitySolution.eventDetails.ctiSummary.investigationEnrichmentTitle', - { - defaultMessage: 'Enriched with threat intelligence', - } -); - -export const INDICATOR_TOOLTIP_CONTENT = i18n.translate( - 'xpack.securitySolution.eventDetails.ctiSummary.indicatorEnrichmentTooltipContent', - { - defaultMessage: 'Shows available threat indicator matches.', - } -); - -export const INVESTIGATION_TOOLTIP_CONTENT = i18n.translate( - 'xpack.securitySolution.eventDetails.ctiSummary.investigationEnrichmentTooltipContent', - { - defaultMessage: - 'Shows additional threat intelligence for the alert. The past 30 days were queried by default.', - } -); - -export const NO_ENRICHMENTS_FOUND_DESCRIPTION = i18n.translate( - 'xpack.securitySolution.alertDetails.noEnrichmentsFoundDescription', - { - defaultMessage: 'This alert does not have threat intelligence.', - } -); - -export const INVESTIGATION_QUERY_TITLE = i18n.translate( - 'xpack.securitySolution.alertDetails.investigationTimeQueryTitle', - { - defaultMessage: 'Enrichment with Threat Intelligence', - } -); - -export const ENRICHMENT_LOOKBACK_START_DATE = i18n.translate( - 'xpack.securitySolution.alertDetails.enrichmentQueryStartDate', - { - defaultMessage: 'Start date', - } -); - -export const ENRICHMENT_LOOKBACK_END_DATE = i18n.translate( - 'xpack.securitySolution.alertDetails.enrichmentQueryEndDate', - { - defaultMessage: 'End date', - } -); - -export const REFRESH = i18n.translate('xpack.securitySolution.alertDetails.refresh', { - defaultMessage: 'Refresh', -}); - -export const NESTED_OBJECT_VALUES_NOT_RENDERED = i18n.translate( - 'xpack.securitySolution.eventDetails.ctiSummary.investigationEnrichmentObjectValuesNotRendered', - { - defaultMessage: - 'This field contains nested object values, which are not rendered here. See the full document for all fields/values', - } -); diff --git a/x-pack/plugins/security_solution/public/common/containers/cti/event_enrichment/index.ts b/x-pack/plugins/security_solution/public/common/containers/cti/event_enrichment/index.ts deleted file mode 100644 index e8fb1a03045d9..0000000000000 --- a/x-pack/plugins/security_solution/public/common/containers/cti/event_enrichment/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -export * from './use_event_enrichment'; -export * from './use_investigation_enrichment'; diff --git a/x-pack/plugins/security_solution/public/common/containers/cti/event_enrichment/translations.ts b/x-pack/plugins/security_solution/public/common/containers/cti/event_enrichment/translations.ts deleted file mode 100644 index ff9130b288fa8..0000000000000 --- a/x-pack/plugins/security_solution/public/common/containers/cti/event_enrichment/translations.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { i18n } from '@kbn/i18n'; - -export const INVESTIGATION_ENRICHMENT_REQUEST_ERROR = i18n.translate( - 'xpack.securitySolution.investigationEnrichment.requestError', - { - defaultMessage: `An error occurred while requesting threat intelligence`, - } -); diff --git a/x-pack/plugins/security_solution/public/common/containers/cti/event_enrichment/use_event_enrichment.ts b/x-pack/plugins/security_solution/public/common/containers/cti/event_enrichment/use_event_enrichment.ts deleted file mode 100644 index b8565f9d3e13e..0000000000000 --- a/x-pack/plugins/security_solution/public/common/containers/cti/event_enrichment/use_event_enrichment.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { useObservable, withOptionalSignal } from '@kbn/securitysolution-hook-utils'; - -import { getEventEnrichmentComplete } from './api'; - -const getEventEnrichmentCompleteWithOptionalSignal = withOptionalSignal(getEventEnrichmentComplete); - -export const useEventEnrichmentComplete = () => - useObservable(getEventEnrichmentCompleteWithOptionalSignal); diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/test_ids.ts index 95ec61d66fff3..fc940979ae05f 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/test_ids.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/test_ids.ts @@ -61,9 +61,29 @@ export const HOST_DETAILS_INFO_TEST_ID = 'host-overview' as const; /* Threat Intelligence */ -export const THREAT_INTELLIGENCE_DETAILS_ENRICHMENTS_TEST_ID = `threat-match-detected` as const; +const THREAT_INTELLIGENCE_DETAILS_TEST_ID = `${PREFIX}ThreatIntelligenceDetails` as const; +export const THREAT_INTELLIGENCE_DETAILS_ENRICHMENTS_TEST_ID = + `${THREAT_INTELLIGENCE_DETAILS_TEST_ID}ThreatMatchDetected` as const; export const THREAT_INTELLIGENCE_DETAILS_LOADING_TEST_ID = - `${PREFIX}ThreatIntelligenceDetailsLoading` as const; + `${THREAT_INTELLIGENCE_DETAILS_TEST_ID}Loading` as const; +export const THREAT_INTELLIGENCE_ENRICHMENTS_TEST_ID = + `${THREAT_INTELLIGENCE_DETAILS_TEST_ID}EnrichedWithThreatIntel` as const; +export const THREAT_INTELLIGENCE_MATCHES_TEST_ID = + `${THREAT_INTELLIGENCE_DETAILS_TEST_ID}MatchesWithNoType` as const; +export const THREAT_INTELLIGENCE_NO_ENRICHMENTS_FOUND_TEST_ID = + `${THREAT_INTELLIGENCE_DETAILS_TEST_ID}NoEnrichmentFound` as const; +export const THREAT_INTELLIGENCE_ENRICHMENTS_TITLE_TEST_ID = + `${THREAT_INTELLIGENCE_DETAILS_TEST_ID}EnrichmentTitle` as const; +export const THREAT_INTELLIGENCE_LOADING_ENRICHMENTS_TEST_ID = + `${THREAT_INTELLIGENCE_DETAILS_TEST_ID}LoadingEnrichment` as const; +export const THREAT_INTELLIGENCE_ENRICHMENTS_BUTTON_CONTENT_TEST_ID = + `${THREAT_INTELLIGENCE_DETAILS_TEST_ID}EnrichmentButtonContent` as const; +export const THREAT_INTELLIGENCE_ENRICHMENTS_ACCORDION_TABLE_TEST_ID = + `${THREAT_INTELLIGENCE_DETAILS_TEST_ID}EnrichmentAccordionTable` as const; +export const THREAT_INTELLIGENCE_ENRICHMENTS_RANGE_PICKER_TEST_ID = + `${THREAT_INTELLIGENCE_DETAILS_TEST_ID}EnrichmentRangePicker` as const; +export const THREAT_INTELLIGENCE_ENRICHMENTS_REFRESH_BUTTON_TEST_ID = + `${THREAT_INTELLIGENCE_DETAILS_TEST_ID}EnrichmentRefreshButton` as const; /* Correlations */ diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_accordion.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_accordion.test.tsx new file mode 100644 index 0000000000000..81d971fa98af8 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_accordion.test.tsx @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { render } from '@testing-library/react'; +import { TestProviders } from '../../../../common/mock'; +import React from 'react'; +import { EnrichmentAccordion } from './threat_details_view_enrichment_accordion'; +import { indicatorWithNestedObjects } from '../mocks/indicator_with_nested_objects'; +import type { CtiEnrichment } from '../../../../../common/search_strategy'; + +describe('EnrichmentAccordion', () => { + it('should render', () => { + render( + + + + ); + + expect(true).toBeTruthy(); + }); +}); diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_accordion.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_accordion.tsx new file mode 100644 index 0000000000000..85b443682d34e --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_accordion.tsx @@ -0,0 +1,180 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React, { memo, useMemo } from 'react'; +import styled from '@emotion/styled'; +import type { EuiBasicTableColumn } from '@elastic/eui'; +import { + EuiAccordion, + EuiFlexGroup, + EuiFlexItem, + EuiLink, + EuiInMemoryTable, + EuiTitle, + EuiToolTip, + useEuiTheme, +} from '@elastic/eui'; +import { css } from '@emotion/react'; +import { i18n } from '@kbn/i18n'; +import { THREAT_INTELLIGENCE_ENRICHMENTS_ACCORDION_TABLE_TEST_ID } from './test_ids'; +import type { CtiEnrichment } from '../../../../../common/search_strategy'; +import { QUERY_ID } from '../../shared/hooks/use_investigation_enrichment'; +import { InspectButton } from '../../../../common/components/inspect'; +import { + getEnrichmentIdentifiers, + buildThreatDetailsItems, + isInvestigationTimeEnrichment, +} from '../../shared/utils/threat_intelligence'; +import { EnrichmentButtonContent } from './threat_details_view_enrichment_button_content'; +import { REFERENCE } from '../../../../../common/cti/constants'; + +const StyledH5 = styled.h5` + line-height: 1.7rem; +`; + +const INVESTIGATION_QUERY_TITLE = i18n.translate( + 'xpack.securitySolution.flyout.threatIntelligence.investigationTimeQueryTitle', + { + defaultMessage: 'Enrichment with Threat Intelligence', + } +); + +/** + * Defines the fields displayed on each row of the table + */ +export interface ThreatDetailsRow { + /** + * Field column showing a field of the enrichment + */ + title: string; + /** + * Description column + */ + description: { + /** + * Field of the enrichment + */ + fieldName: string; + /** + * Value of the enrichment + */ + value: string; + }; +} + +const columns: Array> = [ + { + field: 'title', + truncateText: false, + render: (title: string) => ( + + {title} + + ), + width: '220px', + name: '', + }, + { + field: 'description', + truncateText: false, + render: (description: ThreatDetailsRow['description']) => { + const { fieldName, value } = description; + const tooltipChild = fieldName.match(REFERENCE) ? ( + + {value} + + ) : ( + {value} + ); + return ( + + + {fieldName} + + + } + > + {tooltipChild} + + ); + }, + name: '', + }, +]; + +export interface EnrichmentAccordionProps { + /** + * Enrichment data + */ + enrichment: CtiEnrichment; + /** + * Index used to pass to the table data-test-subj + */ + index: number; +} + +/** + * Displays the enrichment data in an accordion + */ +export const EnrichmentAccordion = memo(({ enrichment, index }: EnrichmentAccordionProps) => { + const { euiTheme } = useEuiTheme(); + const { + id = `threat-details-item`, + field, + feedName, + type, + value, + } = getEnrichmentIdentifiers(enrichment); + const accordionId = `${id}${field}`; + const showInspectButton = useMemo(() => isInvestigationTimeEnrichment(type), [type]); + const items = useMemo(() => buildThreatDetailsItems(enrichment), [enrichment]); + + return ( + } + extraAction={ + showInspectButton && ( + + + + ) + } + css={css` + .euiAccordion__triggerWrapper { + background: ${euiTheme.colors.lightestShade}; + border-radius: ${euiTheme.size.xs}; + height: ${euiTheme.size.xl}; + margin-bottom: ${euiTheme.size.s}; + padding-left: ${euiTheme.size.s}; + `} + > + + + ); +}); + +EnrichmentAccordion.displayName = 'EnrichmentAccordion'; diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_accordion_group.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_accordion_group.test.tsx similarity index 66% rename from x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_accordion_group.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_accordion_group.test.tsx index 3462069e0aa16..3022c6aac8a44 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_accordion_group.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_accordion_group.test.tsx @@ -7,14 +7,15 @@ import React from 'react'; import { render } from '@testing-library/react'; -import { EnrichmentAccordionGroup } from './enrichment_accordion_group'; -import { TestProviders } from '../../../mock'; -import { indicatorWithNestedObjects } from '../__mocks__/indicator_with_nested_objects'; +import { EnrichmentAccordionGroup } from './threat_details_view_enrichment_accordion_group'; import type { CtiEnrichment } from '../../../../../common/search_strategy'; +import { TestProviders } from '../../../../common/mock'; +import { indicatorWithNestedObjects } from '../mocks/indicator_with_nested_objects'; +import { THREAT_INTELLIGENCE_ENRICHMENTS_ACCORDION_TABLE_TEST_ID } from './test_ids'; describe('EnrichmentAccordionGroup', () => { describe('with an indicator with an array of nested objects as a field value', () => { - it('renders the indicator without those fields', () => { + it('should render the indicator without those fields', () => { // @ts-expect-error this indicator intentionally does not conform to the CtiEnrichment type const enrichments = [indicatorWithNestedObjects] as CtiEnrichment[]; @@ -24,8 +25,9 @@ describe('EnrichmentAccordionGroup', () => { ); - const enrichmentView = getByTestId('threat-details-view-0'); - + const enrichmentView = getByTestId( + `${THREAT_INTELLIGENCE_ENRICHMENTS_ACCORDION_TABLE_TEST_ID}-0` + ); expect(enrichmentView).toBeInTheDocument(); expect(enrichmentView).toHaveTextContent('ipv4-addr'); }); diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_accordion_group.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_accordion_group.tsx new file mode 100644 index 0000000000000..60f7ad8d739cd --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_accordion_group.tsx @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React, { memo } from 'react'; +import { EuiSpacer } from '@elastic/eui'; + +import { EnrichmentAccordion } from './threat_details_view_enrichment_accordion'; +import type { CtiEnrichment } from '../../../../../common/search_strategy'; +import { getFirstSeen } from '../../shared/utils/threat_intelligence'; + +export interface EnrichmentAccordionGroupProps { + /** + * Enrichment data + */ + enrichments: CtiEnrichment[]; +} + +/** + * Displays multiple accordions that each show the enrichment data + */ +export const EnrichmentAccordionGroup = memo(({ enrichments }: EnrichmentAccordionGroupProps) => ( + <> + {enrichments + .sort((a, b) => getFirstSeen(b) - getFirstSeen(a)) + .map((enrichment, index) => ( + + + {index < enrichments.length - 1 && } + + ))} + +)); + +EnrichmentAccordionGroup.displayName = 'EnrichmentAccordionGroup'; diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_button_content.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_button_content.test.tsx new file mode 100644 index 0000000000000..5d9d39f266988 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_button_content.test.tsx @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { mount } from 'enzyme'; +import { EnrichmentButtonContent } from './threat_details_view_enrichment_button_content'; +import { THREAT_INTELLIGENCE_ENRICHMENTS_BUTTON_CONTENT_TEST_ID } from './test_ids'; + +describe('EnrichmentButtonContent', () => { + it('should render string with feedName if feedName is present', () => { + const wrapper = mount( + + ); + expect( + wrapper + .find(`[data-test-subj="${THREAT_INTELLIGENCE_ENRICHMENTS_BUTTON_CONTENT_TEST_ID}"]`) + .hostNodes() + .text() + ).toEqual('source.ip 127.0.0.1 from eceintel'); + }); + + it('should enders string without feedName if feedName is not present', () => { + const wrapper = mount(); + expect( + wrapper + .find(`[data-test-subj="${THREAT_INTELLIGENCE_ENRICHMENTS_BUTTON_CONTENT_TEST_ID}"]`) + .hostNodes() + .text() + ).toEqual('source.ip 127.0.0.1'); + }); +}); diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_button_content.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_button_content.tsx new file mode 100644 index 0000000000000..87fb0babbfad4 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_button_content.tsx @@ -0,0 +1,62 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React, { memo } from 'react'; +import styled from 'styled-components'; +import { EuiToolTip } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { THREAT_INTELLIGENCE_ENRICHMENTS_BUTTON_CONTENT_TEST_ID } from './test_ids'; + +const FEED_NAME_PREPOSITION = i18n.translate( + 'xpack.securitySolution.flyout.threatIntelligence.feedNamePreposition', + { + defaultMessage: 'from', + } +); + +const OverflowParent = styled.div` + display: inline-grid; +`; + +const OverflowContainer = styled.div` + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-weight: bold; +`; + +export interface EnrichmentButtonContentProps { + /** + * The field name of the enrichment (default to an empty string) + */ + field?: string; + /** + * The feed name of the enrichment (default to an empty string) + */ + feedName?: string; + /** + * The value of the enrichment (default to an empty string) + */ + value?: string; +} + +/** + * Displays the content of the button rendered in the accordion + */ +export const EnrichmentButtonContent = memo( + ({ field = '', feedName = '', value = '' }: EnrichmentButtonContentProps) => { + const title = `${field} ${value}${feedName ? ` ${FEED_NAME_PREPOSITION} ${feedName}` : ''}`; + return ( + + + {title} + + + ); + } +); + +EnrichmentButtonContent.displayName = 'EnrichmentButtonContent'; diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_section.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_section.test.tsx new file mode 100644 index 0000000000000..9670118785bd5 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_section.test.tsx @@ -0,0 +1,93 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { render } from '@testing-library/react'; +import { EnrichmentSection } from './threat_details_view_enrichment_section'; +import { TestProviders } from '../../../../common/mock'; +import { + THREAT_INTELLIGENCE_ENRICHMENTS_TITLE_TEST_ID, + THREAT_INTELLIGENCE_LOADING_ENRICHMENTS_TEST_ID, + THREAT_INTELLIGENCE_NO_ENRICHMENTS_FOUND_TEST_ID, +} from './test_ids'; +import { ENRICHMENT_TYPES } from '../../../../../common/cti/constants'; + +describe('EnrichmentSection', () => { + it('should render no data views for indicator match rule type', () => { + const { getByTestId } = render( + + + + ); + + expect(getByTestId(THREAT_INTELLIGENCE_NO_ENRICHMENTS_FOUND_TEST_ID)).toBeInTheDocument(); + expect(getByTestId(THREAT_INTELLIGENCE_NO_ENRICHMENTS_FOUND_TEST_ID)).toHaveTextContent( + 'This alert does not have threat intelligence.' + ); + }); + + it('should render no data views for other types', () => { + const { getByTestId } = render( + + + + ); + + expect(getByTestId(THREAT_INTELLIGENCE_NO_ENRICHMENTS_FOUND_TEST_ID)).toBeInTheDocument(); + expect(getByTestId(THREAT_INTELLIGENCE_NO_ENRICHMENTS_FOUND_TEST_ID)).toHaveTextContent( + "Additional threat intelligence wasn't found within the selected time frame" + ); + }); + + it('should render title for indicator match rule type', () => { + const { getByTestId } = render( + + + + ); + + expect(getByTestId(THREAT_INTELLIGENCE_ENRICHMENTS_TITLE_TEST_ID)).toBeInTheDocument(); + expect(getByTestId(THREAT_INTELLIGENCE_ENRICHMENTS_TITLE_TEST_ID)).toHaveTextContent( + 'Threat match detected' + ); + }); + + it('should render title for other types', () => { + const { getByTestId } = render( + + + + ); + + expect(getByTestId(THREAT_INTELLIGENCE_ENRICHMENTS_TITLE_TEST_ID)).toBeInTheDocument(); + expect(getByTestId(THREAT_INTELLIGENCE_ENRICHMENTS_TITLE_TEST_ID)).toHaveTextContent( + 'Enriched with threat intelligence' + ); + }); + + it('should render children props', () => { + const { getByTestId } = render( + + +
+ + + ); + + expect(getByTestId('test-child')).toBeInTheDocument(); + }); + + it('should render loading state', () => { + const { getByTestId } = render( + + + + ); + + expect(getByTestId(THREAT_INTELLIGENCE_LOADING_ENRICHMENTS_TEST_ID)).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_section.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_section.tsx new file mode 100644 index 0000000000000..b615ff8fa86d4 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_details_view_enrichment_section.tsx @@ -0,0 +1,193 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { memo, useMemo } from 'react'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiIcon, + EuiLink, + EuiSkeletonText, + EuiSpacer, + EuiTitle, + EuiToolTip, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import styled from 'styled-components'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { + THREAT_INTELLIGENCE_ENRICHMENTS_TITLE_TEST_ID, + THREAT_INTELLIGENCE_LOADING_ENRICHMENTS_TEST_ID, + THREAT_INTELLIGENCE_NO_ENRICHMENTS_FOUND_TEST_ID, +} from './test_ids'; +import { isInvestigationTimeEnrichment } from '../../shared/utils/threat_intelligence'; +import type { CtiEnrichment } from '../../../../../common/search_strategy'; +import { ENRICHMENT_TYPES } from '../../../../../common/cti/constants'; +import { EnrichmentAccordionGroup } from './threat_details_view_enrichment_accordion_group'; + +const INDICATOR_ENRICHMENT_TITLE = i18n.translate( + 'xpack.securitySolution.flyout.threatIntelligence.indicatorEnrichmentTitle', + { + defaultMessage: 'Threat match detected', + } +); + +const INVESTIGATION_ENRICHMENT_TITLE = i18n.translate( + 'xpack.securitySolution.flyout.threatIntelligence.investigationEnrichmentTitle', + { + defaultMessage: 'Enriched with threat intelligence', + } +); + +const INDICATOR_TOOLTIP_CONTENT = i18n.translate( + 'xpack.securitySolution.flyout.threatIntelligence.indicatorEnrichmentTooltipContent', + { + defaultMessage: 'Shows available threat indicator matches.', + } +); + +const INVESTIGATION_TOOLTIP_CONTENT = i18n.translate( + 'xpack.securitySolution.flyout.threatIntelligence.investigationEnrichmentTooltipContent', + { + defaultMessage: + 'Shows additional threat intelligence for the alert. The past 30 days were queried by default.', + } +); + +const NO_ENRICHMENTS_FOUND_DESCRIPTION = i18n.translate( + 'xpack.securitySolution.flyout.threatIntelligence.noEnrichmentsFoundDescription', + { + defaultMessage: 'This alert does not have threat intelligence.', + } +); + +const InlineBlock = styled.div` + display: inline-block; + line-height: 1.7em; +`; + +export interface EnrichmentSectionProps { + /** + * The enrichments to display + */ + enrichments: CtiEnrichment[] | undefined; + /** + * The type of enrichment (InvestigationTime or IndicatorMatchRule) + */ + type?: ENRICHMENT_TYPES; + /** + * Whether the enrichments are loading + */ + loading?: boolean; + /** + * The data-test-subj to apply to the component + */ + dataTestSubj?: string; + /** + * The children to render + */ + children?: React.ReactNode; +} + +/** + * Displays the enrichments in multiple accordions when data has loaded. + * While data is loading, it renders a skeleton. + * If no data is found, it displays a message. + * Also allows to render a component passed from the parent (currently used to render a range picker). + */ +export const EnrichmentSection = memo( + ({ enrichments, type, loading, dataTestSubj, children }: EnrichmentSectionProps) => { + const tooltip = useMemo( + () => + isInvestigationTimeEnrichment(type) + ? INVESTIGATION_TOOLTIP_CONTENT + : INDICATOR_TOOLTIP_CONTENT, + [type] + ); + + const noEnrichmentDataMessage = useMemo( + () => ( + + {type === ENRICHMENT_TYPES.IndicatorMatchRule ? ( + NO_ENRICHMENTS_FOUND_DESCRIPTION + ) : ( + + + + ), + }} + /> + )} + + ), + [type] + ); + + return ( +
+ {type ? ( + <> + + + +

+ {type === ENRICHMENT_TYPES.IndicatorMatchRule + ? INDICATOR_ENRICHMENT_TITLE + : INVESTIGATION_ENRICHMENT_TITLE} +

+
+
+ + + + + +
+ + + ) : null} + + {children} + + {Array.isArray(enrichments) ? ( + + ) : ( + <> + {type ? noEnrichmentDataMessage : null} + {loading && ( + <> + + + + )} + + )} +
+ ); + } +); + +EnrichmentSection.displayName = 'EnrichmentSection'; diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_intelligence_details.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_intelligence_details.test.tsx index c028b9194748f..a4e2ec73018a3 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_intelligence_details.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_intelligence_details.test.tsx @@ -16,6 +16,7 @@ import { } from './test_ids'; import { ThreatIntelligenceDetails } from './threat_intelligence_details'; import { useThreatIntelligenceDetails } from '../hooks/use_threat_intelligence_details'; +import { buildEventEnrichmentMock } from '../../../../../common/search_strategy/security_solution/cti/index.mock'; jest.mock('../../../../common/lib/kibana', () => { const originalModule = jest.requireActual('../../../../common/lib/kibana'); @@ -37,7 +38,6 @@ const defaultContextValue = { getFieldsData: () => 'id', } as unknown as DocumentDetailsContext; -// Renders System Under Test const renderThreatIntelligenceDetails = (contextValue: DocumentDetailsContext) => render( @@ -59,12 +59,9 @@ describe('', () => { eventFields: {}, }); - const wrapper = renderThreatIntelligenceDetails(defaultContextValue); - - expect( - wrapper.getByTestId(THREAT_INTELLIGENCE_DETAILS_ENRICHMENTS_TEST_ID) - ).toBeInTheDocument(); + const { getByTestId } = renderThreatIntelligenceDetails(defaultContextValue); + expect(getByTestId(THREAT_INTELLIGENCE_DETAILS_ENRICHMENTS_TEST_ID)).toBeInTheDocument(); expect(useThreatIntelligenceDetails).toHaveBeenCalled(); }); @@ -79,10 +76,32 @@ describe('', () => { eventFields: {}, }); - const wrapper = renderThreatIntelligenceDetails(defaultContextValue); - - expect(wrapper.getByTestId(THREAT_INTELLIGENCE_DETAILS_LOADING_TEST_ID)).toBeInTheDocument(); + const { getByTestId } = renderThreatIntelligenceDetails(defaultContextValue); + expect(getByTestId(THREAT_INTELLIGENCE_DETAILS_LOADING_TEST_ID)).toBeInTheDocument(); expect(useThreatIntelligenceDetails).toHaveBeenCalled(); }); + + it('should render enrichments section', () => { + const enrichments = [ + buildEventEnrichmentMock(), + buildEventEnrichmentMock({ 'matched.id': ['other.id'], 'matched.field': ['other.field'] }), + ]; + + jest.mocked(useThreatIntelligenceDetails).mockReturnValue({ + isLoading: true, + enrichments, + isEventDataLoading: false, + isEnrichmentsLoading: false, + range: { from: '', to: '' }, + setRange: () => {}, + eventFields: { + test: 'test', + }, + }); + + const { getByTestId } = renderThreatIntelligenceDetails(defaultContextValue); + + expect(getByTestId(THREAT_INTELLIGENCE_DETAILS_ENRICHMENTS_TEST_ID)).toBeInTheDocument(); + }); }); diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_intelligence_details.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_intelligence_details.tsx index 5a8b6984fb3be..f473ae2c3262b 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_intelligence_details.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_intelligence_details.tsx @@ -5,13 +5,20 @@ * 2.0. */ -import React from 'react'; -import { EuiSpacer } from '@elastic/eui'; +import React, { memo } from 'react'; +import { EuiHorizontalRule, EuiSpacer } from '@elastic/eui'; import isEmpty from 'lodash/isEmpty'; -import { EnrichmentRangePicker } from '../../../../common/components/event_details/cti_details/enrichment_range_picker'; -import { ThreatDetailsView } from '../../../../common/components/event_details/cti_details/threat_details_view'; +import { groupBy } from 'lodash'; +import { EnrichmentSection } from './threat_details_view_enrichment_section'; +import { ENRICHMENT_TYPES } from '../../../../../common/cti/constants'; +import { EnrichmentRangePicker } from './threat_intelligence_view_enrichment_range_picker'; import { useThreatIntelligenceDetails } from '../hooks/use_threat_intelligence_details'; -import { THREAT_INTELLIGENCE_DETAILS_LOADING_TEST_ID } from './test_ids'; +import { + THREAT_INTELLIGENCE_DETAILS_ENRICHMENTS_TEST_ID, + THREAT_INTELLIGENCE_DETAILS_LOADING_TEST_ID, + THREAT_INTELLIGENCE_ENRICHMENTS_TEST_ID, + THREAT_INTELLIGENCE_MATCHES_TEST_ID, +} from './test_ids'; import { FlyoutLoading } from '../../../shared/components/flyout_loading'; export const THREAT_INTELLIGENCE_TAB_ID = 'threatIntelligence'; @@ -19,7 +26,7 @@ export const THREAT_INTELLIGENCE_TAB_ID = 'threatIntelligence'; /** * Threat intelligence displayed in the document details expandable flyout left section under the Insights tab */ -export const ThreatIntelligenceDetails: React.FC = () => { +export const ThreatIntelligenceDetails = memo(() => { const { enrichments, eventFields, @@ -30,21 +37,54 @@ export const ThreatIntelligenceDetails: React.FC = () => { setRange, } = useThreatIntelligenceDetails(); + const showInvestigationTimeEnrichments = !isEmpty(eventFields); + const { + [ENRICHMENT_TYPES.IndicatorMatchRule]: indicatorMatches, + [ENRICHMENT_TYPES.InvestigationTime]: threatIntelEnrichments, + undefined: matchesWithNoType, + } = groupBy(enrichments, 'matched.type'); + return isEventDataLoading ? ( ) : ( - - <> - - - - + <> + + + {showInvestigationTimeEnrichments ? ( + <> + + + + + + + ) : null} + + {matchesWithNoType ? ( + <> + + {indicatorMatches && } + + + ) : null} + ); -}; +}); ThreatIntelligenceDetails.displayName = 'ThreatIntelligenceDetails'; diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_range_picker.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_intelligence_view_enrichment_range_picker.test.tsx similarity index 60% rename from x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_range_picker.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_intelligence_view_enrichment_range_picker.test.tsx index 867eaf73ef85e..483ef9e4fc597 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_range_picker.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_intelligence_view_enrichment_range_picker.test.tsx @@ -7,9 +7,12 @@ import React from 'react'; import { mount } from 'enzyme'; - -import { TestProviders } from '../../../mock'; -import { EnrichmentRangePicker } from './enrichment_range_picker'; +import { TestProviders } from '../../../../common/mock'; +import { EnrichmentRangePicker } from './threat_intelligence_view_enrichment_range_picker'; +import { + THREAT_INTELLIGENCE_ENRICHMENTS_RANGE_PICKER_TEST_ID, + THREAT_INTELLIGENCE_ENRICHMENTS_REFRESH_BUTTON_TEST_ID, +} from './test_ids'; describe('EnrichmentRangePicker', () => { const setRangeSpy = jest.fn(); @@ -27,8 +30,12 @@ describe('EnrichmentRangePicker', () => { ); - expect(wrapper.exists('[data-test-subj="enrichment-query-range-picker"]')).toEqual(true); - expect(wrapper.exists('[data-test-subj="enrichment-button"]')).toEqual(true); + expect( + wrapper.exists(`[data-test-subj="${THREAT_INTELLIGENCE_ENRICHMENTS_RANGE_PICKER_TEST_ID}"]`) + ).toEqual(true); + expect( + wrapper.exists(`[data-test-subj="${THREAT_INTELLIGENCE_ENRICHMENTS_REFRESH_BUTTON_TEST_ID}"]`) + ).toEqual(true); }); it('invokes setRange', () => { @@ -42,7 +49,10 @@ describe('EnrichmentRangePicker', () => { .find('input.start-picker') .first() .simulate('change', { target: { value: '08/10/2019 06:29 PM' } }); - wrapper.find('[data-test-subj="enrichment-button"]').hostNodes().simulate('click'); + wrapper + .find(`[data-test-subj="${THREAT_INTELLIGENCE_ENRICHMENTS_REFRESH_BUTTON_TEST_ID}"]`) + .hostNodes() + .simulate('click'); expect(setRangeSpy).toHaveBeenCalled(); }); diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_range_picker.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_intelligence_view_enrichment_range_picker.tsx similarity index 62% rename from x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_range_picker.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_intelligence_view_enrichment_range_picker.tsx index 3889823c3fc69..54401fdad1e11 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_range_picker.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_intelligence_view_enrichment_range_picker.tsx @@ -6,7 +6,7 @@ */ import moment from 'moment'; -import React, { useMemo, useState, useCallback } from 'react'; +import React, { memo, useMemo, useState, useCallback } from 'react'; import { EuiDatePicker, EuiDatePickerRange, @@ -15,19 +15,53 @@ import { EuiButton, } from '@elastic/eui'; -import * as i18n from './translations'; +import { i18n } from '@kbn/i18n'; +import { + THREAT_INTELLIGENCE_ENRICHMENTS_RANGE_PICKER_TEST_ID, + THREAT_INTELLIGENCE_ENRICHMENTS_REFRESH_BUTTON_TEST_ID, +} from './test_ids'; import { DEFAULT_EVENT_ENRICHMENT_FROM, DEFAULT_EVENT_ENRICHMENT_TO, } from '../../../../../common/cti/constants'; +const ENRICHMENT_LOOKBACK_START_DATE = i18n.translate( + 'xpack.securitySolution.flyout.threatIntelligence.enrichmentQueryStartDate', + { + defaultMessage: 'Start date', + } +); + +const ENRICHMENT_LOOKBACK_END_DATE = i18n.translate( + 'xpack.securitySolution.flyout.threatIntelligence.enrichmentQueryEndDate', + { + defaultMessage: 'End date', + } +); + +const REFRESH = i18n.translate('xpack.securitySolution.flyout.threatIntelligence.refresh', { + defaultMessage: 'Refresh', +}); + export interface RangePickerProps { + /** + * The range of the picker + */ range: { to: string; from: string }; + /** + * Set the range of the picker + */ setRange: ({ to, from }: { to: string; from: string }) => void; + /** + * Whether the picker is loading + */ loading: boolean; } -export const EnrichmentRangePicker: React.FC = ({ range, setRange, loading }) => { +/** + * A component that allows the user to select a range of dates for enrichment + */ +export const EnrichmentRangePicker = memo(({ range, setRange, loading }: RangePickerProps) => { const [startDate, setStartDate] = useState( range.from === DEFAULT_EVENT_ENRICHMENT_FROM ? moment().subtract(30, 'd') : moment(range.from) ); @@ -50,7 +84,7 @@ export const EnrichmentRangePicker: React.FC = ({ range, setRa = ({ range, setRa startDate={startDate} endDate={endDate} isInvalid={!isValid} - aria-label={i18n.ENRICHMENT_LOOKBACK_START_DATE} + aria-label={ENRICHMENT_LOOKBACK_START_DATE} showTimeSelect /> } @@ -71,7 +105,7 @@ export const EnrichmentRangePicker: React.FC = ({ range, setRa startDate={startDate} endDate={endDate} isInvalid={!isValid} - aria-label={i18n.ENRICHMENT_LOOKBACK_END_DATE} + aria-label={ENRICHMENT_LOOKBACK_END_DATE} showTimeSelect /> } @@ -82,12 +116,14 @@ export const EnrichmentRangePicker: React.FC = ({ range, setRa iconType={'refresh'} onClick={onButtonClick} isLoading={loading} - data-test-subj={'enrichment-button'} + data-test-subj={THREAT_INTELLIGENCE_ENRICHMENTS_REFRESH_BUTTON_TEST_ID} isDisabled={!isValid} > - {i18n.REFRESH} + {REFRESH} ); -}; +}); + +EnrichmentRangePicker.displayName = 'EnrichmentRangePicker'; diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_threat_intelligence_details.test.ts b/x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_threat_intelligence_details.test.ts index ae71c7f74c8d6..e4b067afb0921 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_threat_intelligence_details.test.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_threat_intelligence_details.test.ts @@ -7,13 +7,12 @@ import { useThreatIntelligenceDetails } from './use_threat_intelligence_details'; import { renderHook } from '@testing-library/react-hooks'; - +import { SecurityPageName } from '@kbn/deeplinks-security'; import { useTimelineEventsDetails } from '../../../../timelines/containers/details'; import { useSourcererDataView } from '../../../../sourcerer/containers'; import { useRouteSpy } from '../../../../common/utils/route/use_route_spy'; import { useDocumentDetailsContext } from '../../shared/context'; -import { useInvestigationTimeEnrichment } from '../../../../common/containers/cti/event_enrichment'; -import { SecurityPageName } from '../../../../../common/constants'; +import { useInvestigationTimeEnrichment } from '../../shared/hooks/use_investigation_enrichment'; import type { RouteSpyState } from '../../../../common/utils/route/types'; import { type GetBasicDataFromDetailsData, @@ -25,7 +24,7 @@ jest.mock('../../../../timelines/containers/details'); jest.mock('../../../../sourcerer/containers'); jest.mock('../../../../common/utils/route/use_route_spy'); jest.mock('../../shared/context'); -jest.mock('../../../../common/containers/cti/event_enrichment'); +jest.mock('../../shared/hooks/use_investigation_enrichment'); jest.mock('../../../../timelines/components/side_panel/event_details/helpers'); describe('useThreatIntelligenceDetails', () => { diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_threat_intelligence_details.ts b/x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_threat_intelligence_details.ts index 04a2bd0ddee47..cba0c25cb25ad 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_threat_intelligence_details.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_threat_intelligence_details.ts @@ -6,6 +6,7 @@ */ import { useMemo } from 'react'; +import { SecurityPageName } from '@kbn/deeplinks-security'; import type { RunTimeMappings } from '../../../../../common/api/search_strategy'; import type { CtiEnrichment, EventFields } from '../../../../../common/search_strategy'; import { useBasicDataFromDetailsData } from '../../../../timelines/components/side_panel/event_details/helpers'; @@ -14,26 +15,42 @@ import { getEnrichmentFields, parseExistingEnrichments, timelineDataToEnrichment, -} from '../../../../common/components/event_details/cti_details/helpers'; -import { SecurityPageName } from '../../../../../common/constants'; +} from '../../shared/utils/threat_intelligence'; import { SourcererScopeName } from '../../../../sourcerer/store/model'; - -import { useInvestigationTimeEnrichment } from '../../../../common/containers/cti/event_enrichment'; +import { useInvestigationTimeEnrichment } from '../../shared/hooks/use_investigation_enrichment'; import { useTimelineEventsDetails } from '../../../../timelines/containers/details'; import { useSourcererDataView } from '../../../../sourcerer/containers'; import { useRouteSpy } from '../../../../common/utils/route/use_route_spy'; import { useDocumentDetailsContext } from '../../shared/context'; -export interface ThreatIntelligenceDetailsValue { +export interface ThreatIntelligenceDetailsResult { + /** + * Enrichments extracted from the event data + */ enrichments: CtiEnrichment[]; + /** + * Fields extracted from the event data + */ eventFields: EventFields; + /** + * Whether enrichments are loading + */ isEnrichmentsLoading: boolean; + /** + * Whether event data is loading + */ isEventDataLoading: boolean; + /** + * Whether event or enrichment data is loading + */ isLoading: boolean; - range: { - from: string; - to: string; - }; + /** + * Range on the range picker to fetch enrichments + */ + range: { from: string; to: string }; + /** + * Set the range on the range picker to fetch enrichments + */ setRange: (range: { from: string; to: string }) => void; } @@ -42,7 +59,7 @@ export interface ThreatIntelligenceDetailsValue { * Reusing a bunch of hooks scattered across kibana, it makes it easier to mock the data layer * for component testing. */ -export const useThreatIntelligenceDetails = (): ThreatIntelligenceDetailsValue => { +export const useThreatIntelligenceDetails = (): ThreatIntelligenceDetailsResult => { const { indexName, eventId } = useDocumentDetailsContext(); const [{ pageName }] = useRouteSpy(); const sourcererScope = @@ -68,7 +85,7 @@ export const useThreatIntelligenceDetails = (): ThreatIntelligenceDetailsValue = loading: isEnrichmentsLoading, setRange, range, - } = useInvestigationTimeEnrichment(eventFields); + } = useInvestigationTimeEnrichment({ eventFields }); const existingEnrichments = useMemo( () => diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/__mocks__/indicator_with_nested_objects.ts b/x-pack/plugins/security_solution/public/flyout/document_details/left/mocks/indicator_with_nested_objects.ts similarity index 100% rename from x-pack/plugins/security_solution/public/common/components/event_details/__mocks__/indicator_with_nested_objects.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/left/mocks/indicator_with_nested_objects.ts diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_fetch_threat_intelligence.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_fetch_threat_intelligence.test.tsx index 8c7dac4829d1a..e778552dff613 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_fetch_threat_intelligence.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_fetch_threat_intelligence.test.tsx @@ -12,9 +12,9 @@ import type { UseThreatIntelligenceResult, } from './use_fetch_threat_intelligence'; import { useFetchThreatIntelligence } from './use_fetch_threat_intelligence'; -import { useInvestigationTimeEnrichment } from '../../../../common/containers/cti/event_enrichment'; +import { useInvestigationTimeEnrichment } from '../../shared/hooks/use_investigation_enrichment'; -jest.mock('../../../../common/containers/cti/event_enrichment'); +jest.mock('../../shared/hooks/use_investigation_enrichment'); const dataFormattedForFieldBrowser = [ { diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_fetch_threat_intelligence.ts b/x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_fetch_threat_intelligence.ts index 133fd43392c8a..ac59f6c802a87 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_fetch_threat_intelligence.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_fetch_threat_intelligence.ts @@ -15,8 +15,8 @@ import { getEnrichmentFields, parseExistingEnrichments, timelineDataToEnrichment, -} from '../../../../common/components/event_details/cti_details/helpers'; -import { useInvestigationTimeEnrichment } from '../../../../common/containers/cti/event_enrichment'; +} from '../../shared/utils/threat_intelligence'; +import { useInvestigationTimeEnrichment } from '../../shared/hooks/use_investigation_enrichment'; import { ENRICHMENT_TYPES } from '../../../../../common/cti/constants'; export interface UseThreatIntelligenceParams { @@ -76,7 +76,7 @@ export const useFetchThreatIntelligence = ({ ); // api call to retrieve all documents that match the eventFields - const { result: response, loading } = useInvestigationTimeEnrichment(eventFields); + const { result: response, loading } = useInvestigationTimeEnrichment({ eventFields }); // combine existing enrichment and enrichment from the api response // also removes the investigation-time enrichments if the exact indicator already exists diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_investigation_enrichment.test.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_investigation_enrichment.test.ts new file mode 100644 index 0000000000000..0e1cdbc845b38 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_investigation_enrichment.test.ts @@ -0,0 +1,122 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { renderHook } from '@testing-library/react-hooks'; +import { useInvestigationTimeEnrichment } from './use_investigation_enrichment'; +import { + DEFAULT_EVENT_ENRICHMENT_FROM, + DEFAULT_EVENT_ENRICHMENT_TO, +} from '../../../../../common/cti/constants'; +import { useEventEnrichmentComplete } from '../services/threat_intelligence'; + +jest.mock('../services/threat_intelligence'); +jest.mock('react-redux', () => { + const original = jest.requireActual('react-redux'); + return { + ...original, + useDispatch: () => jest.fn(), + }; +}); +jest.mock('../../../../common/hooks/use_app_toasts', () => ({ + useAppToasts: jest.fn().mockReturnValue({ + addError: jest.fn(), + }), +})); +jest.mock('../../../../common/lib/kibana', () => { + const originalModule = jest.requireActual('../../../../common/lib/kibana'); + return { + ...originalModule, + useKibana: jest.fn().mockReturnValue({ + services: { + data: { + search: { + search: () => ({ + subscribe: () => ({ + unsubscribe: jest.fn(), + }), + }), + }, + }, + uiSettings: { + get: jest.fn().mockReturnValue(''), + }, + }, + }), + }; +}); + +describe('useInvestigationTimeEnrichment', () => { + it('should return default range', () => { + (useEventEnrichmentComplete as jest.Mock).mockReturnValue({}); + + const { result } = renderHook(() => + useInvestigationTimeEnrichment({ + eventFields: {}, + }) + ); + + expect(result.current.range).toEqual({ + from: DEFAULT_EVENT_ENRICHMENT_FROM, + to: DEFAULT_EVENT_ENRICHMENT_TO, + }); + expect(typeof result.current.setRange).toBe('function'); + }); + + it('should return loading', () => { + (useEventEnrichmentComplete as jest.Mock).mockReturnValue({ + error: null, + result: undefined, + loading: true, + }); + + const { result } = renderHook(() => + useInvestigationTimeEnrichment({ + eventFields: {}, + }) + ); + + expect(result.current.loading).toEqual(true); + }); + + it('should return no enrichments', () => { + (useEventEnrichmentComplete as jest.Mock).mockReturnValue({}); + + const { result } = renderHook(() => + useInvestigationTimeEnrichment({ + eventFields: {}, + }) + ); + + expect(result.current.result).toEqual({ enrichments: [] }); + }); + + it('should return enrichments and loading false', () => { + (useEventEnrichmentComplete as jest.Mock).mockReturnValue({ + error: null, + result: { + enrichments: [{}], + inspect: { dsl: [] }, + totalCount: 0, + }, + loading: false, + start: jest.fn(), + }); + + const { result } = renderHook(() => + useInvestigationTimeEnrichment({ + eventFields: { test: 'test' }, + }) + ); + + expect(result.current.result).toEqual({ + enrichments: [{}], + inspect: { dsl: [] }, + totalCount: 0, + }); + expect(result.current.loading).toEqual(false); + }); +}); diff --git a/x-pack/plugins/security_solution/public/common/containers/cti/event_enrichment/use_investigation_enrichment.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_investigation_enrichment.ts similarity index 58% rename from x-pack/plugins/security_solution/public/common/containers/cti/event_enrichment/use_investigation_enrichment.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_investigation_enrichment.ts index c8a91c41cb847..34cabc044f469 100644 --- a/x-pack/plugins/security_solution/public/common/containers/cti/event_enrichment/use_investigation_enrichment.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_investigation_enrichment.ts @@ -9,26 +9,67 @@ import { useCallback, useEffect, useState } from 'react'; import { useDispatch } from 'react-redux'; import { isEmpty, isEqual } from 'lodash'; import usePrevious from 'react-use/lib/usePrevious'; - -import { InputsModelId } from '../../../store/inputs/constants'; -import type { EventFields } from '../../../../../common/search_strategy/security_solution/cti'; +import { i18n } from '@kbn/i18n'; +import { useEventEnrichmentComplete } from '../services/threat_intelligence'; +import type { + CtiEventEnrichmentStrategyResponse, + EventFields, +} from '../../../../../common/search_strategy'; +import { InputsModelId } from '../../../../common/store/inputs/constants'; import { DEFAULT_EVENT_ENRICHMENT_FROM, DEFAULT_EVENT_ENRICHMENT_TO, } from '../../../../../common/cti/constants'; -import { useAppToasts } from '../../../hooks/use_app_toasts'; -import { useKibana } from '../../../lib/kibana'; -import { inputsActions } from '../../../store/actions'; -import * as i18n from './translations'; -import { useEventEnrichmentComplete } from '.'; +import { useAppToasts } from '../../../../common/hooks/use_app_toasts'; +import { useKibana } from '../../../../common/lib/kibana'; +import { inputsActions } from '../../../../common/store/actions'; import { DEFAULT_THREAT_INDEX_KEY } from '../../../../../common/constants'; +const INVESTIGATION_ENRICHMENT_REQUEST_ERROR = i18n.translate( + 'xpack.securitySolution.flyout.threatIntelligence.requestError', + { + defaultMessage: `An error occurred while requesting threat intelligence`, + } +); + export const QUERY_ID = 'investigation_time_enrichment'; const noop = () => {}; const noEnrichments = { enrichments: [] }; -// TODO: MOVE TO FLYOUT FOLDER - https://github.com/elastic/security-team/issues/7462 -export const useInvestigationTimeEnrichment = (eventFields: EventFields) => { +export interface UseInvestigationTimeEnrichmentProps { + /** + * The event fields to fetch enrichment for + */ + eventFields: EventFields; +} + +export interface UseInvestigationTimeEnrichmentResult { + /** + * The result of the enrichment + */ + result: CtiEventEnrichmentStrategyResponse | undefined | typeof noEnrichments; + /** + * The range of the query + */ + range: { from: string; to: string }; + /** + * Function to set the range of the query + */ + setRange: (range: { from: string; to: string }) => void; + /** + * Whether the enrichment is loading + */ + loading: boolean; +} + +/** + * Hook to fetch the enrichment for a set of event fields. + * Holds the range of the query. + * Returns the result of the enrichment, the range of the query, the function to set it and the loading state. + */ +export const useInvestigationTimeEnrichment = ({ + eventFields, +}: UseInvestigationTimeEnrichmentProps): UseInvestigationTimeEnrichmentResult => { const { addError } = useAppToasts(); const { data, uiSettings } = useKibana().services; const defaultThreatIndices = uiSettings.get(DEFAULT_THREAT_INDEX_KEY); @@ -67,7 +108,7 @@ export const useInvestigationTimeEnrichment = (eventFields: EventFields) => { useEffect(() => { if (error) { - addError(error, { title: i18n.INVESTIGATION_ENRICHMENT_REQUEST_ERROR }); + addError(error, { title: INVESTIGATION_ENRICHMENT_REQUEST_ERROR }); } }, [addError, error]); diff --git a/x-pack/plugins/security_solution/public/common/containers/cti/event_enrichment/api.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/services/threat_intelligence.ts similarity index 68% rename from x-pack/plugins/security_solution/public/common/containers/cti/event_enrichment/api.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/services/threat_intelligence.ts index 736a170382dae..db51e0505917b 100644 --- a/x-pack/plugins/security_solution/public/common/containers/cti/event_enrichment/api.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/services/threat_intelligence.ts @@ -7,19 +7,28 @@ import type { Observable } from 'rxjs'; import { filter } from 'rxjs'; - import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; import { isRunningResponse } from '@kbn/data-plugin/common'; +import { useObservable, withOptionalSignal } from '@kbn/securitysolution-hook-utils'; +import { CtiQueries } from '../../../../../common/api/search_strategy'; +import type { CtiEventEnrichmentStrategyResponse } from '../../../../../common/search_strategy'; import type { EventEnrichmentRequestOptionsInput } from '../../../../../common/api/search_strategy'; -import type { CtiEventEnrichmentStrategyResponse } from '../../../../../common/search_strategy/security_solution/cti'; -import { CtiQueries } from '../../../../../common/search_strategy/security_solution/cti'; type GetEventEnrichmentProps = Omit & { + /** + * The data plugin start + */ data: DataPublicPluginStart; + /** + * An `AbortSignal` that allows the caller of `search` to abort a search request. + */ signal: AbortSignal; }; -export const getEventEnrichment = ({ +/** + * API call to retrieve the enrichments for a set of fields + */ +const getEventEnrichment = ({ data, defaultIndex, eventFields, @@ -41,7 +50,13 @@ export const getEventEnrichment = ({ } ); -export const getEventEnrichmentComplete = ( +/** + * Returns the enrichments for a set of fields, excluding the running response + */ +const getEventEnrichmentComplete = ( props: GetEventEnrichmentProps ): Observable => getEventEnrichment(props).pipe(filter((response) => !isRunningResponse(response))); + +export const useEventEnrichmentComplete = () => + useObservable(withOptionalSignal(getEventEnrichmentComplete)); diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/helpers.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/shared/utils/threat_intelligence.test.tsx similarity index 99% rename from x-pack/plugins/security_solution/public/common/components/event_details/cti_details/helpers.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/utils/threat_intelligence.test.tsx index b1573663313ee..fba86d76cedd7 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/helpers.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/utils/threat_intelligence.test.tsx @@ -13,7 +13,7 @@ import { parseExistingEnrichments, getEnrichmentIdentifiers, buildThreatDetailsItems, -} from './helpers'; +} from './threat_intelligence'; describe('parseExistingEnrichments', () => { it('returns an empty array if data is empty', () => { diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/helpers.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/shared/utils/threat_intelligence.tsx similarity index 71% rename from x-pack/plugins/security_solution/public/common/components/event_details/cti_details/helpers.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/utils/threat_intelligence.tsx index a242fa19d770d..2f5bd6510430b 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/helpers.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/utils/threat_intelligence.tsx @@ -6,6 +6,11 @@ */ import { groupBy, isObject } from 'lodash'; +import type { TimelineEventsDetailsItem } from '@kbn/timelines-plugin/common'; +import { i18n } from '@kbn/i18n'; +import type { ThreatDetailsRow } from '../../left/components/threat_details_view_enrichment_accordion'; +import type { CtiEnrichment, EventFields } from '../../../../../common/search_strategy'; +import { isValidEventField } from '../../../../../common/search_strategy'; import { getDataFromFieldsHits } from '../../../../../common/utils/field_formatters'; import { DEFAULT_INDICATOR_SOURCE_PATH, @@ -20,19 +25,33 @@ import { MATCHED_TYPE, FEED_NAME, } from '../../../../../common/cti/constants'; -import type { TimelineEventsDetailsItem } from '../../../../../common/search_strategy'; -import type { - CtiEnrichment, - CtiEnrichmentIdentifiers, - EventFields, -} from '../../../../../common/search_strategy/security_solution/cti'; -import { isValidEventField } from '../../../../../common/search_strategy/security_solution/cti'; -import { getFirstElement } from '../../../../../common/utils/data_retrieval'; -import * as i18n from './translations'; - -export const isInvestigationTimeEnrichment = (type: string | undefined) => + +const NESTED_OBJECT_VALUES_NOT_RENDERED = i18n.translate( + 'xpack.securitySolution.flyout.threatIntelligence.investigationEnrichmentObjectValuesNotRendered', + { + defaultMessage: + 'This field contains nested object values, which are not rendered here. See the full document for all fields/values', + } +); + +/** + * Retrieves the first element of the given array. + * + * @param array the array to retrieve a value from + * @returns the first element of the array, or undefined if the array is undefined + */ +const getFirstElement: (array: T[] | undefined) => T | undefined = (array) => + array ? array[0] : undefined; + +/** + * Returns true if the enrichment type is 'investigation_time' + */ +export const isInvestigationTimeEnrichment = (type: string | undefined): boolean => type === ENRICHMENT_TYPES.InvestigationTime; +/** + * Parses existing enrichments from the timeline data + */ export const parseExistingEnrichments = ( data: TimelineEventsDetailsItem[] ): TimelineEventsDetailsItem[][] => { @@ -62,12 +81,18 @@ export const parseExistingEnrichments = ( ); }; +/** + * Converts timeline data to a CtiEnrichment object + */ export const timelineDataToEnrichment = (data: TimelineEventsDetailsItem[]): CtiEnrichment => data.reduce((acc, item) => { acc[item.field] = item.originalValue; return acc; }, {}); +/** + * Extracts the first value from an enrichment field + */ export const getEnrichmentValue = (enrichment: CtiEnrichment, field: string) => getFirstElement(enrichment[field]) as string | undefined; @@ -82,7 +107,18 @@ export const getShimmedIndicatorValue = (enrichment: CtiEnrichment, field: strin getEnrichmentValue(enrichment, `threatintel.${field}`) || getEnrichmentValue(enrichment, `threat.${field}`); -export const getEnrichmentIdentifiers = (enrichment: CtiEnrichment): CtiEnrichmentIdentifiers => ({ +/** + * Extracts the identifiers from an enrichment + */ +export const getEnrichmentIdentifiers = ( + enrichment: CtiEnrichment +): { + id: string | undefined; + field: string | undefined; + value: string | undefined; + type: string | undefined; + feedName: string | undefined; +} => ({ id: getEnrichmentValue(enrichment, MATCHED_ID), field: getEnrichmentValue(enrichment, MATCHED_FIELD), value: getEnrichmentValue(enrichment, MATCHED_ATOMIC), @@ -90,6 +126,9 @@ export const getEnrichmentIdentifiers = (enrichment: CtiEnrichment): CtiEnrichme feedName: getShimmedIndicatorValue(enrichment, FEED_NAME), }); +/** + * Returns a string composed of the id and the field for the enrichment + */ const buildEnrichmentId = (enrichment: CtiEnrichment): string => { const { id, field } = getEnrichmentIdentifiers(enrichment); return `${id}${field}`; @@ -116,6 +155,9 @@ export const filterDuplicateEnrichments = (enrichments: CtiEnrichment[]): CtiEnr ); }; +/** + * Returns the fields from the enrichments + */ export const getEnrichmentFields = (items: TimelineEventsDetailsItem[]): EventFields => items.reduce((fields, item) => { if (isValidEventField(item.field)) { @@ -127,26 +169,19 @@ export const getEnrichmentFields = (items: TimelineEventsDetailsItem[]): EventFi return fields; }, {}); +/** + * Returns the first seen date from the enrichment + */ export const getFirstSeen = (enrichment: CtiEnrichment): number => { const firstSeenValue = getShimmedIndicatorValue(enrichment, FIRST_SEEN); const firstSeenDate = Date.parse(firstSeenValue ?? 'no date'); return Number.isInteger(firstSeenDate) ? firstSeenDate : new Date(-1).valueOf(); }; -export interface ThreatDetailsRow { - title: string; - description: { - fieldName: string; - value: string; - }; -} - -interface ThreatDetailItem { - title: string; - description: { fieldName: string; value: unknown }; -} - -export const buildThreatDetailsItems = (enrichment: CtiEnrichment): ThreatDetailItem[] => +/** + * Builds the threat details items for the summary table + */ +export const buildThreatDetailsItems = (enrichment: CtiEnrichment): ThreatDetailsRow[] => Object.keys(enrichment) .sort() .map((field) => { @@ -156,8 +191,8 @@ export const buildThreatDetailsItems = (enrichment: CtiEnrichment): ThreatDetail let value = getFirstElement(enrichment[field]); if (isObject(value)) { - value = i18n.NESTED_OBJECT_VALUES_NOT_RENDERED; + value = NESTED_OBJECT_VALUES_NOT_RENDERED; } - return { title, description: { fieldName: field, value } }; + return { title, description: { fieldName: field, value: value as string } }; }); diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index fe71c9a7c2c8f..822c1c00f8889 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -32895,14 +32895,9 @@ "xpack.securitySolution.alertCountByRuleByStatus.ruleName": "kibana.alert.rule.name", "xpack.securitySolution.alertCountByRuleByStatus.status": "Statut", "xpack.securitySolution.alertCountByRuleByStatus.tooltipTitle": "Nom de règle", - "xpack.securitySolution.alertDetails.enrichmentQueryEndDate": "Date de fin", - "xpack.securitySolution.alertDetails.enrichmentQueryStartDate": "Date de début", - "xpack.securitySolution.alertDetails.investigationTimeQueryTitle": "Enrichissement avec la Threat Intelligence", - "xpack.securitySolution.alertDetails.noEnrichmentsFoundDescription": "Cette alerte ne s'accompagne pas de Threat Intelligence.", "xpack.securitySolution.alertDetails.overview.hostRiskDataTitle": "Données de risque de {riskEntity}", "xpack.securitySolution.alertDetails.overview.insights.suppressedAlertsCountTechnicalPreview": "Version d'évaluation technique", "xpack.securitySolution.alertDetails.overview.investigationGuide": "Guide d'investigation", - "xpack.securitySolution.alertDetails.refresh": "Actualiser", "xpack.securitySolution.alertDetails.summary.readLess": "Lire moins", "xpack.securitySolution.alertDetails.summary.readMore": "En savoir plus", "xpack.securitySolution.alerts.badge.readOnly.tooltip": "Impossible de mettre à jour les alertes", @@ -35926,11 +35921,6 @@ "xpack.securitySolution.event.summary.threat_indicator.modal.close": "Fermer", "xpack.securitySolution.event.summary.threat_indicator.showMatches": "Afficher les {count} alertes de correspondance d'indicateur", "xpack.securitySolution.eventDetails.alertReason": "Raison d'alerte", - "xpack.securitySolution.eventDetails.ctiSummary.feedNamePreposition": "de", - "xpack.securitySolution.eventDetails.ctiSummary.indicatorEnrichmentTitle": "Correspondance de menace détectée", - "xpack.securitySolution.eventDetails.ctiSummary.indicatorEnrichmentTooltipContent": "Affiche les correspondances d'indicateur de menace détectées.", - "xpack.securitySolution.eventDetails.ctiSummary.investigationEnrichmentTitle": "Enrichi avec la Threat Intelligence", - "xpack.securitySolution.eventDetails.ctiSummary.investigationEnrichmentTooltipContent": "Affiche des renseignements supplémentaires sur les menaces (Threat Intelligence) concernant l'alerte. La recherche a porté sur les 30 derniers jours par défaut.", "xpack.securitySolution.eventDetails.description": "Description", "xpack.securitySolution.eventDetails.multiFieldBadge": "champ multiple", "xpack.securitySolution.eventDetails.multiFieldTooltipContent": "Les champs multiples peuvent avoir plusieurs valeurs.", @@ -36668,7 +36658,6 @@ "xpack.securitySolution.inspect.modal.somethingWentWrongDescription": "Désolé, un problème est survenu.", "xpack.securitySolution.inspectDescription": "Inspecter", "xpack.securitySolution.inspectPatternDifferent": "Cet élément possède un modèle d'indexation unique séparé du paramètre de vue de données.", - "xpack.securitySolution.investigationEnrichment.requestError": "Une erreur est survenue lors de la demande de Threat Intelligence", "xpack.securitySolution.ja3.fingerprint.ja3.fingerprintLabel": "ja3", "xpack.securitySolution.kpiHosts.hosts.title": "Hôtes", "xpack.securitySolution.kpiHosts.uniqueIps.destinationChartLabel": "Dest.", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 26eaec66089e8..c73289d0b156a 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -32768,14 +32768,9 @@ "xpack.securitySolution.alertCountByRuleByStatus.ruleName": "kibana.alert.rule.name", "xpack.securitySolution.alertCountByRuleByStatus.status": "ステータス", "xpack.securitySolution.alertCountByRuleByStatus.tooltipTitle": "ルール名", - "xpack.securitySolution.alertDetails.enrichmentQueryEndDate": "終了日", - "xpack.securitySolution.alertDetails.enrichmentQueryStartDate": "開始日", - "xpack.securitySolution.alertDetails.investigationTimeQueryTitle": "Threat Intelligenceで拡張", - "xpack.securitySolution.alertDetails.noEnrichmentsFoundDescription": "このアラートには脅威情報は含まれていません。", "xpack.securitySolution.alertDetails.overview.hostRiskDataTitle": "{riskEntity}リスクデータ", "xpack.securitySolution.alertDetails.overview.insights.suppressedAlertsCountTechnicalPreview": "テクニカルプレビュー", "xpack.securitySolution.alertDetails.overview.investigationGuide": "調査ガイド", - "xpack.securitySolution.alertDetails.refresh": "更新", "xpack.securitySolution.alertDetails.summary.readLess": "表示を減らす", "xpack.securitySolution.alertDetails.summary.readMore": "続きを読む", "xpack.securitySolution.alerts.badge.readOnly.tooltip": "アラートを更新できません", @@ -35796,11 +35791,6 @@ "xpack.securitySolution.event.summary.threat_indicator.modal.close": "閉じる", "xpack.securitySolution.event.summary.threat_indicator.showMatches": "すべての{count}件のインジケーター一致アラートを表示", "xpack.securitySolution.eventDetails.alertReason": "アラートの理由", - "xpack.securitySolution.eventDetails.ctiSummary.feedNamePreposition": "開始", - "xpack.securitySolution.eventDetails.ctiSummary.indicatorEnrichmentTitle": "脅威一致が検出されました", - "xpack.securitySolution.eventDetails.ctiSummary.indicatorEnrichmentTooltipContent": "利用可能な脅威インジケーターの一致を表示します。", - "xpack.securitySolution.eventDetails.ctiSummary.investigationEnrichmentTitle": "脅威インテリジェンスで強化", - "xpack.securitySolution.eventDetails.ctiSummary.investigationEnrichmentTooltipContent": "アラートに関する追加の脅威インテリジェンスを表示します。デフォルトでは過去30日分が照会されます。", "xpack.securitySolution.eventDetails.description": "説明", "xpack.securitySolution.eventDetails.multiFieldBadge": "複数フィールド", "xpack.securitySolution.eventDetails.multiFieldTooltipContent": "複数フィールドにはフィールドごとに複数の値を入力できます", @@ -36538,7 +36528,6 @@ "xpack.securitySolution.inspect.modal.somethingWentWrongDescription": "申し訳ございませんが、何か問題が発生しました。", "xpack.securitySolution.inspectDescription": "検査", "xpack.securitySolution.inspectPatternDifferent": "この要素には、データビュー設定とは別の固有のインデックスパターンがあります。", - "xpack.securitySolution.investigationEnrichment.requestError": "脅威インテリジェンスの要求中にエラーが発生しました", "xpack.securitySolution.ja3.fingerprint.ja3.fingerprintLabel": "ja3", "xpack.securitySolution.kpiHosts.hosts.title": "ホスト", "xpack.securitySolution.kpiHosts.uniqueIps.destinationChartLabel": "Dest.", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 2382265563a48..ca69f57bc25e1 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -32935,14 +32935,9 @@ "xpack.securitySolution.alertCountByRuleByStatus.ruleName": "kibana.alert.rule.name", "xpack.securitySolution.alertCountByRuleByStatus.status": "状态", "xpack.securitySolution.alertCountByRuleByStatus.tooltipTitle": "规则名称", - "xpack.securitySolution.alertDetails.enrichmentQueryEndDate": "结束日期", - "xpack.securitySolution.alertDetails.enrichmentQueryStartDate": "开始日期", - "xpack.securitySolution.alertDetails.investigationTimeQueryTitle": "使用威胁情报扩充", - "xpack.securitySolution.alertDetails.noEnrichmentsFoundDescription": "此告警没有威胁情报。", "xpack.securitySolution.alertDetails.overview.hostRiskDataTitle": "{riskEntity}风险数据", "xpack.securitySolution.alertDetails.overview.insights.suppressedAlertsCountTechnicalPreview": "技术预览", "xpack.securitySolution.alertDetails.overview.investigationGuide": "调查指南", - "xpack.securitySolution.alertDetails.refresh": "刷新", "xpack.securitySolution.alertDetails.summary.readLess": "阅读更少内容", "xpack.securitySolution.alertDetails.summary.readMore": "阅读更多内容", "xpack.securitySolution.alerts.badge.readOnly.tooltip": "无法更新告警", @@ -35966,11 +35961,6 @@ "xpack.securitySolution.event.summary.threat_indicator.modal.close": "关闭", "xpack.securitySolution.event.summary.threat_indicator.showMatches": "显示所有 {count} 个指标匹配告警", "xpack.securitySolution.eventDetails.alertReason": "告警原因", - "xpack.securitySolution.eventDetails.ctiSummary.feedNamePreposition": "来自", - "xpack.securitySolution.eventDetails.ctiSummary.indicatorEnrichmentTitle": "检测到威胁匹配", - "xpack.securitySolution.eventDetails.ctiSummary.indicatorEnrichmentTooltipContent": "显示可用的威胁指标匹配。", - "xpack.securitySolution.eventDetails.ctiSummary.investigationEnrichmentTitle": "已使用威胁情报扩充", - "xpack.securitySolution.eventDetails.ctiSummary.investigationEnrichmentTooltipContent": "显示该告警的其他威胁情报。默认会查询过去 30 天的数据。", "xpack.securitySolution.eventDetails.description": "描述", "xpack.securitySolution.eventDetails.multiFieldBadge": "多字段", "xpack.securitySolution.eventDetails.multiFieldTooltipContent": "多字段的每个字段可以有多个值", @@ -36707,7 +36697,6 @@ "xpack.securitySolution.inspect.modal.somethingWentWrongDescription": "抱歉,出现问题。", "xpack.securitySolution.inspectDescription": "检查", "xpack.securitySolution.inspectPatternDifferent": "此元素具有与数据视图设置不同的唯一索引模式。", - "xpack.securitySolution.investigationEnrichment.requestError": "请求威胁情报时发生错误", "xpack.securitySolution.ja3.fingerprint.ja3.fingerprintLabel": "ja3", "xpack.securitySolution.kpiHosts.hosts.title": "主机", "xpack.securitySolution.kpiHosts.uniqueIps.destinationChartLabel": "目标", diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/detection_alerts/enrichments/alert_threat_enrichments.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/detection_alerts/enrichments/alert_threat_enrichments.cy.ts index 71dd0387a6451..bf0bbea5ad6d9 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/detection_alerts/enrichments/alert_threat_enrichments.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/detection_alerts/enrichments/alert_threat_enrichments.cy.ts @@ -13,7 +13,7 @@ import { THREAT_DETAILS_VIEW, INDICATOR_MATCH_ENRICHMENT_SECTION, INVESTIGATION_TIME_ENRICHMENT_SECTION, - THREAT_DETAILS_ACCORDION, + ENRICHMENT_SECTION_BUTTON_CONTENT, } from '../../../../../screens/alerts_details'; import { TIMELINE_FIELD } from '../../../../../screens/rule_details'; import { expandFirstAlert, setEnrichmentDates } from '../../../../../tasks/alerts'; @@ -163,36 +163,39 @@ describe('Threat Match Enrichment', { tags: ['@ess', '@serverless', '@skipInServ }); it('Displays matched fields from both indicator match rules and investigation time enrichments on Threat Intel tab', () => { + expandFirstAlert(); + expandDocumentDetailsExpandableFlyoutLeftSection(); + openInsightsTab(); + openThreatIntelligenceTab(); + setEnrichmentDates('08/05/2018 10:00 AM'); + const indicatorMatchRuleEnrichment = { field: 'myhash.mysha256', value: 'a04ac6d98ad989312783d4fe3456c53730b212c79a426fb215708b6c6daa3de3', feedName: 'AbuseCH malware', }; + cy.get(`${INDICATOR_MATCH_ENRICHMENT_SECTION}`).within(() => { + cy.get(`${ENRICHMENT_SECTION_BUTTON_CONTENT}`) + .should('exist') + .should( + 'have.text', + `${indicatorMatchRuleEnrichment.field} ${indicatorMatchRuleEnrichment.value} from ${indicatorMatchRuleEnrichment.feedName}` + ); + }); + const investigationTimeEnrichment = { field: 'source.ip', value: '192.168.1.1', feedName: 'feed_name', }; - - expandFirstAlert(); - expandDocumentDetailsExpandableFlyoutLeftSection(); - openInsightsTab(); - openThreatIntelligenceTab(); - setEnrichmentDates('08/05/2018 10:00 AM'); - - cy.get(`${INDICATOR_MATCH_ENRICHMENT_SECTION} ${THREAT_DETAILS_ACCORDION}`) - .should('exist') - .should( - 'have.text', - `${indicatorMatchRuleEnrichment.field} ${indicatorMatchRuleEnrichment.value} from ${indicatorMatchRuleEnrichment.feedName}` - ); - - cy.get(`${INVESTIGATION_TIME_ENRICHMENT_SECTION} ${THREAT_DETAILS_ACCORDION}`) - .should('exist') - .should( - 'have.text', - `${investigationTimeEnrichment.field} ${investigationTimeEnrichment.value} from ${investigationTimeEnrichment.feedName}` - ); + cy.get(`${INVESTIGATION_TIME_ENRICHMENT_SECTION}`).within(() => { + cy.get(`${ENRICHMENT_SECTION_BUTTON_CONTENT}`) + .should('exist') + .should( + 'have.text', + `${investigationTimeEnrichment.field} ${investigationTimeEnrichment.value} from ${investigationTimeEnrichment.feedName}` + ); + }); }); }); }); diff --git a/x-pack/test/security_solution_cypress/cypress/screens/alerts_details.ts b/x-pack/test/security_solution_cypress/cypress/screens/alerts_details.ts index 6f9ee7b4aea77..bbae387497af7 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/alerts_details.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/alerts_details.ts @@ -5,11 +5,8 @@ * 2.0. */ -export const ALERT_FLYOUT = '[data-test-subj="timeline:details-panel:flyout"]'; - -export const CELL_TEXT = '.euiText'; - -export const ENRICHMENT_QUERY_RANGE_PICKER = '[data-test-subj="enrichment-query-range-picker"]'; +export const ENRICHMENT_QUERY_RANGE_PICKER = + '[data-test-subj="securitySolutionFlyoutThreatIntelligenceDetailsEnrichmentRangePicker"]'; export const ENRICHMENT_QUERY_START_INPUT = '.start-picker'; @@ -17,42 +14,34 @@ export const ENRICHMENT_QUERY_END_INPUT = '.end-picker'; export const FILTER_INPUT = '[data-test-subj="eventDetails"] .euiFieldSearch'; -export const INDICATOR_MATCH_ENRICHMENT_SECTION = '[data-test-subj="threat-match-detected"]'; +export const INDICATOR_MATCH_ENRICHMENT_SECTION = + '[data-test-subj="securitySolutionFlyoutThreatIntelligenceDetailsThreatMatchDetected"]'; export const INVESTIGATION_TIME_ENRICHMENT_SECTION = - '[data-test-subj="enriched-with-threat-intel"]'; + '[data-test-subj="securitySolutionFlyoutThreatIntelligenceDetailsEnrichedWithThreatIntel"]'; -export const JSON_VIEW_TAB = '[data-test-subj="jsonViewTab"]'; +export const ENRICHMENT_SECTION_BUTTON_CONTENT = + '[data-test-subj="securitySolutionFlyoutThreatIntelligenceDetailsEnrichmentButtonContent"]'; -export const JSON_TEXT = '[data-test-subj="kibanaCodeEditor"]'; - -export const OVERVIEW_RULE = '[data-test-subj="eventDetails"] [data-test-subj="ruleName"]'; +export const JSON_VIEW_TAB = '[data-test-subj="jsonViewTab"]'; export const OVERVIEW_STATUS = '[data-test-subj="eventDetails"] [data-test-subj="alertStatus"]'; export const EVENT_DETAILS_ALERT_STATUS_POPOVER = '[data-test-subj="event-details-alertStatusPopover"]'; -export const SUMMARY_VIEW = '[data-test-subj="summary-view"]'; - export const TABLE_CELL = '.euiTableRowCell'; export const CELL_EXPAND_VALUE = '[data-test-subj="euiDataGridCellExpandButton"]'; export const TABLE_TAB = '[data-test-subj="tableTab"]'; -export const TABLE_CONTAINER = '[data-test-subj="event-fields-browser"]'; - export const TABLE_ROWS = '.euiTableRow'; -export const THREAT_DETAILS_ACCORDION = '.euiAccordion__triggerWrapper'; - -export const THREAT_DETAILS_VIEW = '[data-test-subj="threat-details-view-0"]'; +export const THREAT_DETAILS_VIEW = + '[data-test-subj="securitySolutionFlyoutThreatIntelligenceDetailsEnrichmentAccordionTable-0"]'; -export const THREAT_INTEL_TAB = '[data-test-subj="threatIntelTab"]'; - -export const UPDATE_ENRICHMENT_RANGE_BUTTON = '[data-test-subj="enrichment-button"]'; +export const UPDATE_ENRICHMENT_RANGE_BUTTON = + '[data-test-subj="securitySolutionFlyoutThreatIntelligenceDetailsEnrichmentRefreshButton"]'; export const ENRICHED_DATA_ROW = `[data-test-subj='EnrichedDataRow']`; - -export const COPY_ALERT_FLYOUT_LINK = `[data-test-subj="copy-alert-flyout-link"]`; diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/alerts.ts b/x-pack/test/security_solution_cypress/cypress/tasks/alerts.ts index 2a3038b090240..abd405e1d6c73 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/alerts.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/alerts.ts @@ -60,7 +60,6 @@ import { ENRICHMENT_QUERY_END_INPUT, ENRICHMENT_QUERY_RANGE_PICKER, ENRICHMENT_QUERY_START_INPUT, - THREAT_INTEL_TAB, CELL_EXPAND_VALUE, } from '../screens/alerts_details'; import { FIELD_INPUT } from '../screens/exceptions'; @@ -154,8 +153,6 @@ export const hideMessageTooltip = () => { export const closeAlertFlyout = () => cy.get(CLOSE_FLYOUT).click(); -export const viewThreatIntelTab = () => cy.get(THREAT_INTEL_TAB).click(); - export const setEnrichmentDates = (from?: string, to?: string) => { cy.get(ENRICHMENT_QUERY_RANGE_PICKER).within(() => { if (from) { From 910b34e392d26282ef5764910dffc751e8e1ca4c Mon Sep 17 00:00:00 2001 From: Saarika Bhasi <55930906+saarikabhasi@users.noreply.github.com> Date: Thu, 1 Aug 2024 17:26:07 -0400 Subject: [PATCH 19/25] Revert "[Index management] Unskip api_integration tests for inference endpoints" (#189742) Reverts elastic/kibana#189664 In this PR, re-skipping the tests to ensure that reverting inference_id with model_id [PR](https://github.com/elastic/kibana/pull/189732) can be merged smoothly. --- .../apis/management/index_management/inference_endpoints.ts | 4 +++- .../common/index_management/inference_endpoints.ts | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/x-pack/test/api_integration/apis/management/index_management/inference_endpoints.ts b/x-pack/test/api_integration/apis/management/index_management/inference_endpoints.ts index 586c546414850..4960d9aad5c4f 100644 --- a/x-pack/test/api_integration/apis/management/index_management/inference_endpoints.ts +++ b/x-pack/test/api_integration/apis/management/index_management/inference_endpoints.ts @@ -20,7 +20,9 @@ export default function ({ getService }: FtrProviderContext) { const service = 'elser'; const modelId = '.elser_model_2'; - describe('Inference endpoints', function () { + // FLAKY: https://github.com/elastic/kibana/issues/189333 + // Failing: See https://github.com/elastic/kibana/issues/189333 + describe.skip('Inference endpoints', function () { after(async () => { try { log.debug(`Deleting underlying trained model`); diff --git a/x-pack/test_serverless/api_integration/test_suites/common/index_management/inference_endpoints.ts b/x-pack/test_serverless/api_integration/test_suites/common/index_management/inference_endpoints.ts index f5f712fc7d5a1..5828d5cc8fa59 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/index_management/inference_endpoints.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/index_management/inference_endpoints.ts @@ -26,7 +26,8 @@ export default function ({ getService }: FtrProviderContext) { let roleAuthc: RoleCredentials; let internalReqHeader: InternalRequestHeader; - describe('Inference endpoints', function () { + // FLAKY: https://github.com/elastic/kibana/issues/189464 + describe.skip('Inference endpoints', function () { before(async () => { roleAuthc = await svlUserManager.createM2mApiKeyWithRoleScope('admin'); internalReqHeader = svlCommonApi.getInternalRequestHeader(); From e87a06cdddce6ade486d7d3906baf72df0669a3b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 1 Aug 2024 17:38:01 -0500 Subject: [PATCH 20/25] Update dependency elastic-apm-node to ^4.7.2 (main) (#189735) --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 5f56a05d67a83..8bc048ee0901d 100644 --- a/package.json +++ b/package.json @@ -1044,7 +1044,7 @@ "deepmerge": "^4.2.2", "del": "^6.1.0", "diff": "^5.1.0", - "elastic-apm-node": "^4.7.1", + "elastic-apm-node": "^4.7.2", "email-addresses": "^5.0.0", "eventsource-parser": "^1.1.1", "execa": "^5.1.1", diff --git a/yarn.lock b/yarn.lock index 4dfc114ab6ec4..770ba1f29e2f5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16518,10 +16518,10 @@ elastic-apm-node@3.46.0: traverse "^0.6.6" unicode-byte-truncate "^1.0.0" -elastic-apm-node@^4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/elastic-apm-node/-/elastic-apm-node-4.7.1.tgz#39c30172db7d4d2e9af4dd87fc35f5f5171788b3" - integrity sha512-2OWhcjKD6O+S9ZuvywFiqXM7ifHnSUxaOTmCzprxEf/VfBonEBEfyyQ5Omymtm4xQ5Mqh18xKRUBNT74Xup0VQ== +elastic-apm-node@^4.7.2: + version "4.7.2" + resolved "https://registry.yarnpkg.com/elastic-apm-node/-/elastic-apm-node-4.7.2.tgz#880b3df8e2266aac70f6370f916b0e66d5063455" + integrity sha512-9jsvAeHU6wztM+qUWJvgJCgdCVUI1sfg6a9quXmgkcjUJmRDJG0trfTScELZrfK5VJBQ88LVl05Q0nJW2j6TsA== dependencies: "@elastic/ecs-pino-format" "^1.5.0" "@opentelemetry/api" "^1.4.1" From e13a1baf72bb8250375aaa52a371cb6f34d99d53 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Fri, 2 Aug 2024 00:11:46 +0100 Subject: [PATCH 21/25] Revert "chore(NA): skip defend workflows tests failing because of vagrant (#189723) (#189753) --- .../automated_response_actions/automated_response_actions.cy.ts | 2 +- .../public/management/cypress/e2e/endpoint_alerts.cy.ts | 2 +- .../public/management/cypress/e2e/endpoint_list/endpoints.cy.ts | 2 +- .../cypress/e2e/response_actions/alerts_response_console.cy.ts | 2 +- .../cypress/e2e/response_actions/document_signing.cy.ts | 2 +- .../e2e/response_actions/endpoints_list_response_console.cy.ts | 2 +- .../cypress/e2e/response_actions/response_console/execute.cy.ts | 2 +- .../e2e/response_actions/response_console/file_operations.cy.ts | 2 +- .../cypress/e2e/response_actions/response_console/isolate.cy.ts | 2 +- .../response_actions/response_console/process_operations.cy.ts | 2 +- .../cypress/e2e/response_actions/response_console/release.cy.ts | 2 +- .../cypress/e2e/response_actions/response_console/scan.cy.ts | 2 +- .../tamper_protection/disabled/unenroll_agent_from_fleet.cy.ts | 2 +- .../tamper_protection/disabled/uninstall_agent_from_host.cy.ts | 2 +- .../tamper_protection/enabled/unenroll_agent_from_fleet.cy.ts | 2 +- .../tamper_protection/enabled/uninstall_agent_from_host.cy.ts | 2 +- ...nt_from_fleet_changing_policy_from_disabled_to_enabled.cy.ts | 2 +- ...nt_from_fleet_changing_policy_from_enabled_to_disabled.cy.ts | 2 +- ...ent_from_fleet_changing_policy_from_enabled_to_enabled.cy.ts | 2 +- ...ent_from_host_changing_policy_from_disabled_to_enabled.cy.ts | 2 +- ...ent_from_host_changing_policy_from_enabled_to_disabled.cy.ts | 2 +- ...gent_from_host_changing_policy_from_enabled_to_enabled.cy.ts | 2 +- 22 files changed, 22 insertions(+), 22 deletions(-) diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/automated_response_actions.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/automated_response_actions.cy.ts index 7281a8b8f32cb..9da25023f0778 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/automated_response_actions.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/automated_response_actions.cy.ts @@ -20,7 +20,7 @@ import { createEndpointHost } from '../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../tasks/delete_all_endpoint_data'; import { enableAllPolicyProtections } from '../../tasks/endpoint_policy'; -describe.skip( +describe( 'Automated Response Actions', { tags: ['@ess', '@serverless'], diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_alerts.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_alerts.cy.ts index 7bfdb83b71dac..9df69b03e072c 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_alerts.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_alerts.cy.ts @@ -19,7 +19,7 @@ import { login, ROLE } from '../tasks/login'; import { EXECUTE_ROUTE } from '../../../../common/endpoint/constants'; import { waitForActionToComplete } from '../tasks/response_actions'; -describe.skip('Endpoint generated alerts', { tags: ['@ess', '@serverless'] }, () => { +describe('Endpoint generated alerts', { tags: ['@ess', '@serverless'] }, () => { let indexedPolicy: IndexedFleetEndpointPolicyResponse; let policy: PolicyData; let createdHost: CreateAndEnrollEndpointHostResponse; diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/endpoints.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/endpoints.cy.ts index 695618999ba9a..12cdfcfa6e09c 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/endpoints.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/endpoints.cy.ts @@ -28,7 +28,7 @@ import { createEndpointHost } from '../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../tasks/delete_all_endpoint_data'; import { enableAllPolicyProtections } from '../../tasks/endpoint_policy'; -describe.skip('Endpoints page', { tags: ['@ess', '@serverless'] }, () => { +describe('Endpoints page', { tags: ['@ess', '@serverless'] }, () => { let indexedPolicy: IndexedFleetEndpointPolicyResponse; let policy: PolicyData; let createdHost: CreateAndEnrollEndpointHostResponse; diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/alerts_response_console.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/alerts_response_console.cy.ts index 457a4a60f9850..d741c3a7f0e59 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/alerts_response_console.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/alerts_response_console.cy.ts @@ -27,7 +27,7 @@ import { enableAllPolicyProtections } from '../../tasks/endpoint_policy'; import { createEndpointHost } from '../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../tasks/delete_all_endpoint_data'; -describe.skip( +describe( 'Response console: From Alerts', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/document_signing.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/document_signing.cy.ts index a883b3af1491d..2ff96b249cfdb 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/document_signing.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/document_signing.cy.ts @@ -22,7 +22,7 @@ import { enableAllPolicyProtections } from '../../tasks/endpoint_policy'; import { createEndpointHost } from '../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../tasks/delete_all_endpoint_data'; -describe.skip('Document signing:', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { +describe('Document signing:', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { let indexedPolicy: IndexedFleetEndpointPolicyResponse; let policy: PolicyData; let createdHost: CreateAndEnrollEndpointHostResponse; diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/endpoints_list_response_console.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/endpoints_list_response_console.cy.ts index 7955fd15e3920..64cc11e553538 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/endpoints_list_response_console.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/endpoints_list_response_console.cy.ts @@ -20,7 +20,7 @@ import { enableAllPolicyProtections } from '../../tasks/endpoint_policy'; import { createEndpointHost } from '../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../tasks/delete_all_endpoint_data'; -describe.skip('Response console', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { +describe('Response console', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { beforeEach(() => { login(); }); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/execute.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/execute.cy.ts index e07e8f81a2777..042031b301185 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/execute.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/execute.cy.ts @@ -21,7 +21,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe.skip('Response console', { tags: ['@ess', '@serverless'] }, () => { +describe('Response console', { tags: ['@ess', '@serverless'] }, () => { beforeEach(() => { login(); }); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/file_operations.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/file_operations.cy.ts index 28cb2a89a9135..ef252cbce01aa 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/file_operations.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/file_operations.cy.ts @@ -21,7 +21,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe.skip('Response console', { tags: ['@ess', '@serverless'] }, () => { +describe('Response console', { tags: ['@ess', '@serverless'] }, () => { beforeEach(() => { login(); }); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/isolate.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/isolate.cy.ts index 7707e754c20c9..f89f2a6f62ecf 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/isolate.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/isolate.cy.ts @@ -26,7 +26,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe.skip('Response console', { tags: ['@ess', '@serverless'] }, () => { +describe('Response console', { tags: ['@ess', '@serverless'] }, () => { let indexedPolicy: IndexedFleetEndpointPolicyResponse; let policy: PolicyData; let createdHost: CreateAndEnrollEndpointHostResponse; diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/process_operations.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/process_operations.cy.ts index 291decb66f0f9..e09aa8dc9fc85 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/process_operations.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/process_operations.cy.ts @@ -26,7 +26,7 @@ import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_ const AGENT_BEAT_FILE_PATH_SUFFIX = '/components/agentbeat'; -describe.skip('Response console', { tags: ['@ess', '@serverless', '@skipInServerlessMKI'] }, () => { +describe('Response console', { tags: ['@ess', '@serverless', '@skipInServerlessMKI'] }, () => { beforeEach(() => { login(); }); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/release.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/release.cy.ts index 5c784213af04c..d11b7210713a8 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/release.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/release.cy.ts @@ -27,7 +27,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe.skip('Response console', { tags: ['@ess', '@serverless'] }, () => { +describe('Response console', { tags: ['@ess', '@serverless'] }, () => { let indexedPolicy: IndexedFleetEndpointPolicyResponse; let policy: PolicyData; let createdHost: CreateAndEnrollEndpointHostResponse; diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/scan.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/scan.cy.ts index 96cb436f421a8..ba105aa8cbc0a 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/scan.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/scan.cy.ts @@ -20,7 +20,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe.skip( +describe( 'Response console', { env: { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/disabled/unenroll_agent_from_fleet.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/disabled/unenroll_agent_from_fleet.cy.ts index 2d95850ef3f80..674ede811fc77 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/disabled/unenroll_agent_from_fleet.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/disabled/unenroll_agent_from_fleet.cy.ts @@ -20,7 +20,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe.skip( +describe( 'Unenroll agent from fleet with agent tamper protection is disabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/disabled/uninstall_agent_from_host.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/disabled/uninstall_agent_from_host.cy.ts index f853aaa664345..6f82d9c98a0cf 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/disabled/uninstall_agent_from_host.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/disabled/uninstall_agent_from_host.cy.ts @@ -21,7 +21,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe.skip( +describe( 'Uninstall agent from host when agent tamper protection is disabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/enabled/unenroll_agent_from_fleet.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/enabled/unenroll_agent_from_fleet.cy.ts index 8ce0c16abd2e7..0915cd578adc1 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/enabled/unenroll_agent_from_fleet.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/enabled/unenroll_agent_from_fleet.cy.ts @@ -20,7 +20,7 @@ import { login } from '../../../tasks/login'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe.skip( +describe( 'Unenroll agent from fleet when agent tamper protection is enabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/enabled/uninstall_agent_from_host.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/enabled/uninstall_agent_from_host.cy.ts index d3636437e4b39..286be75f745b3 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/enabled/uninstall_agent_from_host.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/enabled/uninstall_agent_from_host.cy.ts @@ -22,7 +22,7 @@ import { login } from '../../../tasks/login'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe.skip( +describe( 'Uninstall agent from host when agent tamper protection is enabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_disabled_to_enabled.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_disabled_to_enabled.cy.ts index bf623bc8972b9..67c71e4bd5ffb 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_disabled_to_enabled.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_disabled_to_enabled.cy.ts @@ -22,7 +22,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe.skip( +describe( 'Unenroll agent from fleet when agent tamper protection is disabled but then is switched to a policy with it enabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_enabled_to_disabled.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_enabled_to_disabled.cy.ts index a13bf0b53a27a..687b2a5924bea 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_enabled_to_disabled.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_enabled_to_disabled.cy.ts @@ -22,7 +22,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe.skip( +describe( 'Unenroll agent from fleet changing when agent tamper protection is enabled but then is switched to a policy with it disabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_enabled_to_enabled.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_enabled_to_enabled.cy.ts index 7ac5fb9d7470b..cf091cdccc60d 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_enabled_to_enabled.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_enabled_to_enabled.cy.ts @@ -21,7 +21,7 @@ import { login } from '../../../tasks/login'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe.skip( +describe( 'Unenroll agent from fleet changing agent policy when agent tamper protection is enabled but then is switched to a policy with it also enabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_disabled_to_enabled.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_disabled_to_enabled.cy.ts index 7205e4cfbad81..63f4715331514 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_disabled_to_enabled.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_disabled_to_enabled.cy.ts @@ -24,7 +24,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe.skip( +describe( 'Uninstall agent from host changing agent policy when agent tamper protection is disabled but then is switched to a policy with it enabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_enabled_to_disabled.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_enabled_to_disabled.cy.ts index 4967dfdb77e8c..45b278539d5b5 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_enabled_to_disabled.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_enabled_to_disabled.cy.ts @@ -23,7 +23,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe.skip( +describe( 'Uninstall agent from host changing agent policy when agent tamper protection is enabled but then is switched to a policy with it disabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_enabled_to_enabled.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_enabled_to_enabled.cy.ts index 4d6946916edd7..db49f448bc980 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_enabled_to_enabled.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_enabled_to_enabled.cy.ts @@ -23,7 +23,7 @@ import { login } from '../../../tasks/login'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe.skip( +describe( 'Uninstall agent from host changing agent policy when agent tamper protection is enabled but then is switched to a policy with it also enabled', { tags: ['@ess'] }, () => { From 7519285705add8de37d0f362c834f72911719983 Mon Sep 17 00:00:00 2001 From: Saikat Sarkar <132922331+saikatsarkar056@users.noreply.github.com> Date: Thu, 1 Aug 2024 19:51:42 -0600 Subject: [PATCH 22/25] Revert "Replace 'model_id' with 'inference_id' for inference endpoints" (#189732) Reverts elastic/kibana#189545 In order to make the serverless release smoothly next week, we require to revert this PR to only `main` branch, not `8.15 `branch. Co-authored-by: Elastic Machine --- .../src/constants/trained_models.ts | 2 +- .../index_details_page.test.tsx | 2 +- .../select_inference_id.test.tsx | 6 +++--- .../field_parameters/select_inference_id.tsx | 12 ++++++------ .../semantic_text/use_semantic_text.test.ts | 2 +- .../semantic_text/use_semantic_text.ts | 2 +- .../application/hooks/use_index_errors.ts | 2 +- ...ails_page_mappings_model_management.test.ts | 2 +- ...e_details_page_mappings_model_management.ts | 2 +- .../model_management/delete_models_modal.tsx | 2 +- .../model_management/force_stop_dialog.tsx | 4 ++-- .../model_management/inference_api_tab.tsx | 2 +- .../model_management/model_actions.tsx | 2 +- .../ml/server/routes/trained_models.test.ts | 4 ++-- .../plugins/ml/server/routes/trained_models.ts | 8 ++++---- .../actions/copy_id/copy_id_action.test.tsx | 4 ++-- .../actions/copy_id/copy_id_action.tsx | 14 +++++++------- .../actions/delete/delete_action.tsx | 4 ++-- .../render_endpoint/endpoint_info.test.tsx | 18 +++++++++--------- .../render_endpoint/endpoint_info.tsx | 2 +- .../tabular_page.test.tsx | 4 ++-- .../all_inference_endpoints/tabular_page.tsx | 2 +- .../public/hooks/use_table_data.test.tsx | 18 +++++++----------- .../public/hooks/use_table_data.tsx | 6 +++--- .../lib/fetch_inference_endpoints.test.ts | 8 ++++---- .../index_management/inference_endpoints.ts | 2 +- .../index_management/inference_endpoints.ts | 2 +- 27 files changed, 67 insertions(+), 71 deletions(-) diff --git a/x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts b/x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts index 53b17f737c9fa..dd8f6aef06141 100644 --- a/x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts +++ b/x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts @@ -273,7 +273,7 @@ export type InferenceServiceSettings = export type InferenceAPIConfigResponse = { // Refers to a deployment id - inference_id: string; + model_id: string; task_type: 'sparse_embedding' | 'text_embedding'; task_settings: { model?: string; diff --git a/x-pack/plugins/index_management/__jest__/client_integration/index_details_page/index_details_page.test.tsx b/x-pack/plugins/index_management/__jest__/client_integration/index_details_page/index_details_page.test.tsx index 76b8295b6b1f4..c4d366daa1d29 100644 --- a/x-pack/plugins/index_management/__jest__/client_integration/index_details_page/index_details_page.test.tsx +++ b/x-pack/plugins/index_management/__jest__/client_integration/index_details_page/index_details_page.test.tsx @@ -731,7 +731,7 @@ describe('', () => { httpRequestsMockHelpers.setInferenceModels({ data: [ { - inference_id: customInferenceModel, + model_id: customInferenceModel, task_type: 'sparse_embedding', service: 'elser', service_settings: { diff --git a/x-pack/plugins/index_management/__jest__/client_integration/index_details_page/select_inference_id.test.tsx b/x-pack/plugins/index_management/__jest__/client_integration/index_details_page/select_inference_id.test.tsx index ed5af67840513..75afa8c9455b2 100644 --- a/x-pack/plugins/index_management/__jest__/client_integration/index_details_page/select_inference_id.test.tsx +++ b/x-pack/plugins/index_management/__jest__/client_integration/index_details_page/select_inference_id.test.tsx @@ -71,9 +71,9 @@ jest.mock('../../../public/application/components/mappings_editor/mappings_state jest.mock('../../../public/application/services/api', () => ({ useLoadInferenceEndpoints: jest.fn().mockReturnValue({ data: [ - { inference_id: 'endpoint-1', task_type: 'text_embedding' }, - { inference_id: 'endpoint-2', task_type: 'sparse_embedding' }, - { inference_id: 'endpoint-3', task_type: 'completion' }, + { model_id: 'endpoint-1', task_type: 'text_embedding' }, + { model_id: 'endpoint-2', task_type: 'sparse_embedding' }, + { model_id: 'endpoint-3', task_type: 'completion' }, ] as InferenceAPIConfigResponse[], isLoading: false, error: null, diff --git a/x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/field_parameters/select_inference_id.tsx b/x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/field_parameters/select_inference_id.tsx index 15d5ee9ba72c0..672d64766e576 100644 --- a/x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/field_parameters/select_inference_id.tsx +++ b/x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/field_parameters/select_inference_id.tsx @@ -54,10 +54,10 @@ type SelectInferenceIdContentProps = SelectInferenceIdProps & { const defaultEndpoints = [ { - inference_id: 'elser_model_2', + model_id: 'elser_model_2', }, { - inference_id: 'e5', + model_id: 'e5', }, ]; @@ -135,15 +135,15 @@ const SelectInferenceIdContent: React.FC = ({ ); const missingDefaultEndpoints = defaultEndpoints.filter( - (endpoint) => !(filteredEndpoints || []).find((e) => e.inference_id === endpoint.inference_id) + (endpoint) => !(filteredEndpoints || []).find((e) => e.model_id === endpoint.model_id) ); const newOptions: EuiSelectableOption[] = [ ...(filteredEndpoints || []), ...missingDefaultEndpoints, ].map((endpoint) => ({ - label: endpoint.inference_id, - 'data-test-subj': `custom-inference_${endpoint.inference_id}`, - checked: value === endpoint.inference_id ? 'on' : undefined, + label: endpoint.model_id, + 'data-test-subj': `custom-inference_${endpoint.model_id}`, + checked: value === endpoint.model_id ? 'on' : undefined, })); if (value && !newOptions.find((option) => option.label === value)) { // Sometimes we create a new endpoint but the backend is slow in updating so we need to optimistically update diff --git a/x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/fields/create_field/semantic_text/use_semantic_text.test.ts b/x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/fields/create_field/semantic_text/use_semantic_text.test.ts index c4e668f9635d1..72e007b86f786 100644 --- a/x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/fields/create_field/semantic_text/use_semantic_text.test.ts +++ b/x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/fields/create_field/semantic_text/use_semantic_text.test.ts @@ -142,7 +142,7 @@ jest.mock('../../../../../../../services/api', () => ({ getInferenceEndpoints: jest.fn().mockResolvedValue({ data: [ { - inference_id: 'e5', + model_id: 'e5', task_type: 'text_embedding', service: 'elasticsearch', service_settings: { diff --git a/x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/fields/create_field/semantic_text/use_semantic_text.ts b/x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/fields/create_field/semantic_text/use_semantic_text.ts index 57871383149cf..5ef20e50cf00c 100644 --- a/x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/fields/create_field/semantic_text/use_semantic_text.ts +++ b/x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/fields/create_field/semantic_text/use_semantic_text.ts @@ -119,7 +119,7 @@ export function useSemanticText(props: UseSemanticTextProps) { dispatch({ type: 'field.add', value: data }); const inferenceEndpoints = await getInferenceEndpoints(); const hasInferenceEndpoint = inferenceEndpoints.data?.some( - (inference) => inference.inference_id === inferenceId + (inference) => inference.model_id === inferenceId ); // if inference endpoint exists already, do not create new inference endpoint if (hasInferenceEndpoint) { diff --git a/x-pack/plugins/index_management/public/application/hooks/use_index_errors.ts b/x-pack/plugins/index_management/public/application/hooks/use_index_errors.ts index 2130a449a1063..f6c7767b4e2d0 100644 --- a/x-pack/plugins/index_management/public/application/hooks/use_index_errors.ts +++ b/x-pack/plugins/index_management/public/application/hooks/use_index_errors.ts @@ -40,7 +40,7 @@ export const useIndexErrors = ( const semanticTextFieldsWithErrors = semanticTextFields .map((field) => { const model = endpoints.find( - (endpoint) => endpoint.inference_id === field.source.inference_id + (endpoint) => endpoint.model_id === field.source.inference_id ); if (!model) { return { diff --git a/x-pack/plugins/index_management/public/hooks/use_details_page_mappings_model_management.test.ts b/x-pack/plugins/index_management/public/hooks/use_details_page_mappings_model_management.test.ts index 62746791510c0..6e80bcea5c349 100644 --- a/x-pack/plugins/index_management/public/hooks/use_details_page_mappings_model_management.test.ts +++ b/x-pack/plugins/index_management/public/hooks/use_details_page_mappings_model_management.test.ts @@ -49,7 +49,7 @@ jest.mock('../application/services/api', () => ({ getInferenceEndpoints: jest.fn().mockResolvedValue({ data: [ { - inference_id: 'e5', + model_id: 'e5', task_type: 'text_embedding', service: 'elasticsearch', service_settings: { diff --git a/x-pack/plugins/index_management/public/hooks/use_details_page_mappings_model_management.ts b/x-pack/plugins/index_management/public/hooks/use_details_page_mappings_model_management.ts index 9ad3e74e96a9e..79d4c8f79cf33 100644 --- a/x-pack/plugins/index_management/public/hooks/use_details_page_mappings_model_management.ts +++ b/x-pack/plugins/index_management/public/hooks/use_details_page_mappings_model_management.ts @@ -45,7 +45,7 @@ const getCustomInferenceIdMap = ( isDownloading: false, modelStats: undefined, }; - inferenceMap[model.inference_id] = inferenceEntry; + inferenceMap[model.model_id] = inferenceEntry; return inferenceMap; }, {}); const defaultInferenceIds = { diff --git a/x-pack/plugins/ml/public/application/model_management/delete_models_modal.tsx b/x-pack/plugins/ml/public/application/model_management/delete_models_modal.tsx index 1e08ae9874567..2b48ab3fbb14e 100644 --- a/x-pack/plugins/ml/public/application/model_management/delete_models_modal.tsx +++ b/x-pack/plugins/ml/public/application/model_management/delete_models_modal.tsx @@ -49,7 +49,7 @@ export const DeleteModelsModal: FC = ({ models, onClose const modelsWithInferenceAPIs = models.filter((m) => m.hasInferenceServices); const inferenceAPIsIDs: string[] = modelsWithInferenceAPIs.flatMap((model) => { - return (model.inference_apis ?? []).map((inference) => inference.inference_id); + return (model.inference_apis ?? []).map((inference) => inference.model_id); }); const pipelinesCount = modelsWithPipelines.reduce((acc, curr) => { diff --git a/x-pack/plugins/ml/public/application/model_management/force_stop_dialog.tsx b/x-pack/plugins/ml/public/application/model_management/force_stop_dialog.tsx index 26583623c04f3..171143a581194 100644 --- a/x-pack/plugins/ml/public/application/model_management/force_stop_dialog.tsx +++ b/x-pack/plugins/ml/public/application/model_management/force_stop_dialog.tsx @@ -41,7 +41,7 @@ export const StopModelDeploymentsConfirmDialog: FC { if (!model.inference_apis) return true; - return !model.inference_apis.some((inference) => inference.inference_id === deploymentId); + return !model.inference_apis.some((inference) => inference.model_id === deploymentId); }) ); }, [model]); @@ -110,7 +110,7 @@ export const StopModelDeploymentsConfirmDialog: FC(() => { - return (model.inference_apis ?? []).map((inference) => inference.inference_id); + return (model.inference_apis ?? []).map((inference) => inference.model_id); }, [model]); return ( diff --git a/x-pack/plugins/ml/public/application/model_management/inference_api_tab.tsx b/x-pack/plugins/ml/public/application/model_management/inference_api_tab.tsx index dc86c359bb1aa..dba6621a269b5 100644 --- a/x-pack/plugins/ml/public/application/model_management/inference_api_tab.tsx +++ b/x-pack/plugins/ml/public/application/model_management/inference_api_tab.tsx @@ -28,7 +28,7 @@ export const InferenceApi: FC = ({ inferenceApis }) => { {inferenceApis.map((inferenceApi, i) => { const initialIsOpen = i <= 2; - const modelId = inferenceApi.inference_id; + const modelId = inferenceApi.model_id; return ( diff --git a/x-pack/plugins/ml/public/application/model_management/model_actions.tsx b/x-pack/plugins/ml/public/application/model_management/model_actions.tsx index 0bdd994be2b7f..b9f17084bd81f 100644 --- a/x-pack/plugins/ml/public/application/model_management/model_actions.tsx +++ b/x-pack/plugins/ml/public/application/model_management/model_actions.tsx @@ -332,7 +332,7 @@ export function useModelActions({ item.deployment_ids.some( (dId) => Array.isArray(item.inference_apis) && - !item.inference_apis.some((inference) => inference.inference_id === dId) + !item.inference_apis.some((inference) => inference.model_id === dId) )), enabled: (item) => !isLoading, onClick: async (item) => { diff --git a/x-pack/plugins/ml/server/routes/trained_models.test.ts b/x-pack/plugins/ml/server/routes/trained_models.test.ts index ca3eb19e757c6..ef2087c696a9f 100644 --- a/x-pack/plugins/ml/server/routes/trained_models.test.ts +++ b/x-pack/plugins/ml/server/routes/trained_models.test.ts @@ -33,7 +33,7 @@ describe('populateInferenceServicesProvider', () => { { model_id: 'model2' }, ] as TrainedModelConfigResponse[]; - client.asInternalUser.transport.request.mockResolvedValue({ endpoints: inferenceServices }); + client.asInternalUser.transport.request.mockResolvedValue({ models: inferenceServices }); jest.clearAllMocks(); }); @@ -44,7 +44,7 @@ describe('populateInferenceServicesProvider', () => { describe('when the user has required privileges', () => { beforeEach(() => { - client.asCurrentUser.transport.request.mockResolvedValue({ endpoints: inferenceServices }); + client.asCurrentUser.transport.request.mockResolvedValue({ models: inferenceServices }); }); test('should populate inference services for trained models', async () => { diff --git a/x-pack/plugins/ml/server/routes/trained_models.ts b/x-pack/plugins/ml/server/routes/trained_models.ts index a41967704136d..5b2441435268d 100644 --- a/x-pack/plugins/ml/server/routes/trained_models.ts +++ b/x-pack/plugins/ml/server/routes/trained_models.ts @@ -69,16 +69,16 @@ export const populateInferenceServicesProvider = (client: IScopedClusterClient) try { // Check if model is used by an inference service - const { endpoints } = await esClient.transport.request<{ - endpoints: InferenceAPIConfigResponse[]; + const { models } = await esClient.transport.request<{ + models: InferenceAPIConfigResponse[]; }>({ method: 'GET', path: `/_inference/_all`, }); const inferenceAPIMap = groupBy( - endpoints, - (endpoint) => endpoint.service === 'elser' && endpoint.service_settings.model_id + models, + (model) => model.service === 'elser' && model.service_settings.model_id ); for (const model of trainedModels) { diff --git a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/copy_id/copy_id_action.test.tsx b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/copy_id/copy_id_action.test.tsx index 693224b2f5015..288ba5089d367 100644 --- a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/copy_id/copy_id_action.test.tsx +++ b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/copy_id/copy_id_action.test.tsx @@ -13,7 +13,7 @@ import { CopyIDAction } from './copy_id_action'; const mockInferenceEndpoint = { deployment: 'not_applicable', endpoint: { - inference_id: 'hugging-face-embeddings', + model_id: 'hugging-face-embeddings', task_type: 'text_embedding', service: 'hugging_face', service_settings: { @@ -58,7 +58,7 @@ describe('CopyIDAction', () => { it('renders the label with correct text', () => { const TestComponent = () => { - return ; + return ; }; const { getByTestId } = render(); diff --git a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/copy_id/copy_id_action.tsx b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/copy_id/copy_id_action.tsx index bf3764cbc467a..4641899b59720 100644 --- a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/copy_id/copy_id_action.tsx +++ b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/copy_id/copy_id_action.tsx @@ -11,22 +11,22 @@ import React from 'react'; import { useKibana } from '../../../../../../hooks/use_kibana'; interface CopyIDActionProps { - inferenceId: string; + modelId: string; } -export const CopyIDAction = ({ inferenceId }: CopyIDActionProps) => { +export const CopyIDAction = ({ modelId }: CopyIDActionProps) => { const { services: { notifications }, } = useKibana(); const toasts = notifications?.toasts; return ( - + {(copy) => ( { copy(); toasts?.addSuccess({ title: i18n.translate('xpack.searchInferenceEndpoints.actions.copyIDSuccess', { - defaultMessage: 'Inference endpoint ID {inferenceId} copied', - values: { inferenceId }, + defaultMessage: 'Inference endpoint ID {modelId} copied', + values: { modelId }, }), }); }} diff --git a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/delete/delete_action.tsx b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/delete/delete_action.tsx index 7bc428f49affa..88a982fd0b76e 100644 --- a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/delete/delete_action.tsx +++ b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/delete/delete_action.tsx @@ -28,7 +28,7 @@ export const DeleteAction: React.FC = ({ selectedEndpoint }) deleteEndpoint({ type: selectedEndpoint.type, - id: selectedEndpoint.endpoint.inference_id, + id: selectedEndpoint.endpoint.model_id, }); }; @@ -37,7 +37,7 @@ export const DeleteAction: React.FC = ({ selectedEndpoint }) ({ describe('RenderEndpoint component tests', () => { describe('with cohere service', () => { const mockEndpoint = { - inference_id: 'cohere-2', + model_id: 'cohere-2', service: 'cohere', service_settings: { similarity: 'cosine', @@ -68,7 +68,7 @@ describe('RenderEndpoint component tests', () => { describe('with elasticsearch service', () => { const mockEndpoint = { - inference_id: 'model-123', + model_id: 'model-123', service: 'elasticsearch', service_settings: { num_allocations: 5, @@ -102,7 +102,7 @@ describe('RenderEndpoint component tests', () => { describe('with azureaistudio service', () => { const mockEndpoint = { - inference_id: 'azure-ai-1', + model_id: 'azure-ai-1', service: 'azureaistudio', service_settings: { target: 'westus', @@ -155,7 +155,7 @@ describe('RenderEndpoint component tests', () => { describe('with azureopenai service', () => { const mockEndpoint = { - inference_id: 'azure-openai-1', + model_id: 'azure-openai-1', service: 'azureopenai', service_settings: { resource_name: 'resource-xyz', @@ -174,7 +174,7 @@ describe('RenderEndpoint component tests', () => { describe('with mistral service', () => { const mockEndpoint = { - inference_id: 'mistral-ai-1', + model_id: 'mistral-ai-1', service: 'mistral', service_settings: { model: 'model-xyz', @@ -233,7 +233,7 @@ describe('RenderEndpoint component tests', () => { describe('with googleaistudio service', () => { const mockEndpoint = { - inference_id: 'google-ai-1', + model_id: 'google-ai-1', service: 'googleaistudio', service_settings: { model_id: 'model-abc', @@ -267,7 +267,7 @@ describe('RenderEndpoint component tests', () => { describe('with amazonbedrock service', () => { const mockEndpoint = { - inference_id: 'amazon-bedrock-1', + model_id: 'amazon-bedrock-1', service: 'amazonbedrock', service_settings: { region: 'us-west-1', @@ -287,7 +287,7 @@ describe('RenderEndpoint component tests', () => { describe('for MIT licensed models', () => { const mockEndpointWithMitLicensedModel = { - inference_id: 'model-123', + model_id: 'model-123', service: 'elasticsearch', service_settings: { num_allocations: 5, @@ -306,7 +306,7 @@ describe('RenderEndpoint component tests', () => { it('does not render the MIT license badge if the model is not eligible', () => { const mockEndpointWithNonMitLicensedModel = { - inference_id: 'model-123', + model_id: 'model-123', service: 'elasticsearch', service_settings: { num_allocations: 5, diff --git a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.tsx b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.tsx index b09b260e8cf15..1cb34a06ff997 100644 --- a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.tsx +++ b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.tsx @@ -23,7 +23,7 @@ export const EndpointInfo: React.FC = ({ endpoint }) => { return ( - {endpoint.inference_id} + {endpoint.model_id} diff --git a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.test.tsx b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.test.tsx index 096a36c5e56ec..70791287d9ae1 100644 --- a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.test.tsx +++ b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.test.tsx @@ -15,7 +15,7 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; const inferenceEndpoints = [ { - inference_id: 'my-elser-model-05', + model_id: 'my-elser-model-05', task_type: 'sparse_embedding', service: 'elser', service_settings: { @@ -26,7 +26,7 @@ const inferenceEndpoints = [ task_settings: {}, }, { - inference_id: 'my-elser-model-04', + model_id: 'my-elser-model-04', task_type: 'sparse_embedding', service: 'elser', service_settings: { diff --git a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.tsx b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.tsx index 9157e27c268cd..cb3b885659417 100644 --- a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.tsx +++ b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.tsx @@ -108,7 +108,7 @@ export const TabularPage: React.FC = ({ inferenceEndpoints }) actions: [ { render: (inferenceEndpoint: InferenceEndpointUI) => ( - + ), }, { diff --git a/x-pack/plugins/search_inference_endpoints/public/hooks/use_table_data.test.tsx b/x-pack/plugins/search_inference_endpoints/public/hooks/use_table_data.test.tsx index 3b10e2d56887d..df058df72fb42 100644 --- a/x-pack/plugins/search_inference_endpoints/public/hooks/use_table_data.test.tsx +++ b/x-pack/plugins/search_inference_endpoints/public/hooks/use_table_data.test.tsx @@ -16,7 +16,7 @@ import { TRAINED_MODEL_STATS_QUERY_KEY } from '../../common/constants'; const inferenceEndpoints = [ { - inference_id: 'my-elser-model-04', + model_id: 'my-elser-model-04', task_type: 'sparse_embedding', service: 'elser', service_settings: { @@ -27,7 +27,7 @@ const inferenceEndpoints = [ task_settings: {}, }, { - inference_id: 'my-elser-model-01', + model_id: 'my-elser-model-01', task_type: 'sparse_embedding', service: 'elser', service_settings: { @@ -38,7 +38,7 @@ const inferenceEndpoints = [ task_settings: {}, }, { - inference_id: 'my-elser-model-05', + model_id: 'my-elser-model-05', task_type: 'text_embedding', service: 'elasticsearch', service_settings: { @@ -110,13 +110,11 @@ describe('useTableData', () => { ); const expectedSortedData = [...inferenceEndpoints].sort((a, b) => - b.inference_id.localeCompare(a.inference_id) + b.model_id.localeCompare(a.model_id) ); - const sortedEndpoints = result.current.sortedTableData.map( - (item) => item.endpoint.inference_id - ); - const expectedModelIds = expectedSortedData.map((item) => item.inference_id); + const sortedEndpoints = result.current.sortedTableData.map((item) => item.endpoint.model_id); + const expectedModelIds = expectedSortedData.map((item) => item.model_id); expect(sortedEndpoints).toEqual(expectedModelIds); }); @@ -148,9 +146,7 @@ describe('useTableData', () => { { wrapper } ); const filteredData = result.current.sortedTableData; - expect( - filteredData.every((item) => item.endpoint.inference_id.includes(searchKey)) - ).toBeTruthy(); + expect(filteredData.every((item) => item.endpoint.model_id.includes(searchKey))).toBeTruthy(); }); it('should update deployment status based on deploymentStatus object', () => { diff --git a/x-pack/plugins/search_inference_endpoints/public/hooks/use_table_data.tsx b/x-pack/plugins/search_inference_endpoints/public/hooks/use_table_data.tsx index e5a6b1ca44d1f..1b3ce7814891f 100644 --- a/x-pack/plugins/search_inference_endpoints/public/hooks/use_table_data.tsx +++ b/x-pack/plugins/search_inference_endpoints/public/hooks/use_table_data.tsx @@ -64,7 +64,7 @@ export const useTableData = ( } return filteredEndpoints - .filter((endpoint) => endpoint.inference_id.includes(searchKey)) + .filter((endpoint) => endpoint.model_id.includes(searchKey)) .map((endpoint) => { const isElasticService = endpoint.service === ServiceProviderKeys.elasticsearch || @@ -94,9 +94,9 @@ export const useTableData = ( const bValue = b[queryParams.sortField]; if (queryParams.sortOrder === SortOrder.asc) { - return aValue.inference_id.localeCompare(bValue.inference_id); + return aValue.model_id.localeCompare(bValue.model_id); } else { - return bValue.inference_id.localeCompare(aValue.inference_id); + return bValue.model_id.localeCompare(aValue.model_id); } }); }, [tableData, queryParams]); diff --git a/x-pack/plugins/search_inference_endpoints/server/lib/fetch_inference_endpoints.test.ts b/x-pack/plugins/search_inference_endpoints/server/lib/fetch_inference_endpoints.test.ts index ce34edad3b86f..ee282f3056caa 100644 --- a/x-pack/plugins/search_inference_endpoints/server/lib/fetch_inference_endpoints.test.ts +++ b/x-pack/plugins/search_inference_endpoints/server/lib/fetch_inference_endpoints.test.ts @@ -12,28 +12,28 @@ import { fetchInferenceEndpoints } from './fetch_inference_endpoints'; describe('fetch indices', () => { const mockInferenceEndpointsResponse = [ { - inference_id: 'my-elser-model-03', + model_id: 'my-elser-model-03', task_type: 'sparse_embedding', service: 'elser', service_settings: { num_allocations: 1, num_threads: 1, model_id: '.elser_model_2' }, task_settings: {}, }, { - inference_id: 'my-elser-model-04', + model_id: 'my-elser-model-04', task_type: 'sparse_embedding', service: 'elser', service_settings: { num_allocations: 1, num_threads: 1, model_id: '.elser_model_2' }, task_settings: {}, }, { - inference_id: 'my-elser-model-05', + model_id: 'my-elser-model-05', task_type: 'sparse_embedding', service: 'elser', service_settings: { num_allocations: 1, num_threads: 1, model_id: '.elser_model_2' }, task_settings: {}, }, { - inference_id: 'my-elser-model-06', + model_id: 'my-elser-model-06', task_type: 'sparse_embedding', service: 'elser', service_settings: { num_allocations: 1, num_threads: 1, model_id: '.elser_model_2' }, diff --git a/x-pack/test/api_integration/apis/management/index_management/inference_endpoints.ts b/x-pack/test/api_integration/apis/management/index_management/inference_endpoints.ts index 4960d9aad5c4f..be28c5b43f7f2 100644 --- a/x-pack/test/api_integration/apis/management/index_management/inference_endpoints.ts +++ b/x-pack/test/api_integration/apis/management/index_management/inference_endpoints.ts @@ -54,7 +54,7 @@ export default function ({ getService }: FtrProviderContext) { expect(inferenceEndpoints).to.be.ok(); expect( inferenceEndpoints.some( - (endpoint: InferenceAPIConfigResponse) => endpoint.inference_id === inferenceId + (endpoint: InferenceAPIConfigResponse) => endpoint.model_id === inferenceId ) ).to.eql(true, `${inferenceId} not found in the GET _inference/_all response`); }); diff --git a/x-pack/test_serverless/api_integration/test_suites/common/index_management/inference_endpoints.ts b/x-pack/test_serverless/api_integration/test_suites/common/index_management/inference_endpoints.ts index 5828d5cc8fa59..c2b21e5c9cd83 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/index_management/inference_endpoints.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/index_management/inference_endpoints.ts @@ -65,7 +65,7 @@ export default function ({ getService }: FtrProviderContext) { expect(inferenceEndpoints).to.be.ok(); expect( inferenceEndpoints.some( - (endpoint: InferenceAPIConfigResponse) => endpoint.inference_id === inferenceId + (endpoint: InferenceAPIConfigResponse) => endpoint.model_id === inferenceId ) ).to.eql(true, `${inferenceId} not found in the GET _inference/_all response`); }); From 391926de6ab284355ad54628406707aee6a171c6 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Fri, 2 Aug 2024 15:01:01 +1000 Subject: [PATCH 23/25] [api-docs] 2024-08-02 Daily api_docs build (#189774) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/787 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- .../ai_assistant_management_selection.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.mdx | 2 +- api_docs/apm.devdocs.json | 64 +- api_docs/apm.mdx | 4 +- api_docs/apm_data_access.mdx | 2 +- api_docs/assets_data_access.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.mdx | 2 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_data_migration.mdx | 2 +- api_docs/cloud_defend.mdx | 2 +- api_docs/cloud_experiments.mdx | 2 +- api_docs/cloud_security_posture.mdx | 2 +- api_docs/console.mdx | 2 +- api_docs/content_management.mdx | 2 +- api_docs/controls.mdx | 2 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.mdx | 2 +- api_docs/data_quality.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.mdx | 2 +- api_docs/data_view_editor.mdx | 2 +- api_docs/data_view_field_editor.mdx | 2 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/dataset_quality.mdx | 2 +- api_docs/deprecations_by_api.mdx | 2 +- api_docs/deprecations_by_plugin.mdx | 2 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.mdx | 2 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/discover_shared.mdx | 2 +- api_docs/ecs_data_quality_dashboard.mdx | 2 +- api_docs/elastic_assistant.mdx | 2 +- api_docs/embeddable.mdx | 2 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/entity_manager.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/esql.mdx | 2 +- api_docs/esql_data_grid.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_annotation_listing.mdx | 2 +- api_docs/event_log.mdx | 2 +- api_docs/exploratory_view.mdx | 2 +- api_docs/expression_error.mdx | 2 +- api_docs/expression_gauge.mdx | 2 +- api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.mdx | 2 +- api_docs/expressions.mdx | 2 +- api_docs/features.mdx | 2 +- api_docs/field_formats.mdx | 2 +- api_docs/fields_metadata.mdx | 2 +- api_docs/file_upload.mdx | 2 +- api_docs/files.mdx | 2 +- api_docs/files_management.mdx | 2 +- api_docs/fleet.mdx | 2 +- api_docs/global_search.mdx | 2 +- api_docs/guided_onboarding.mdx | 2 +- api_docs/home.mdx | 2 +- api_docs/image_embeddable.mdx | 2 +- api_docs/index_lifecycle_management.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/infra.mdx | 2 +- api_docs/ingest_pipelines.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/integration_assistant.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/investigate.mdx | 2 +- api_docs/investigate_app.mdx | 2 +- api_docs/kbn_ace.mdx | 2 +- api_docs/kbn_actions_types.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_log_pattern_analysis.mdx | 2 +- api_docs/kbn_aiops_log_rate_analysis.mdx | 2 +- .../kbn_alerting_api_integration_helpers.mdx | 2 +- api_docs/kbn_alerting_comparators.mdx | 2 +- api_docs/kbn_alerting_state_types.mdx | 2 +- api_docs/kbn_alerting_types.mdx | 2 +- api_docs/kbn_alerts_as_data_utils.mdx | 2 +- api_docs/kbn_alerts_grouping.mdx | 2 +- api_docs/kbn_alerts_ui_shared.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_collection_utils.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_data_view.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_types.devdocs.json | 5073 +++++++++++++++++ api_docs/kbn_apm_types.mdx | 33 + api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_avc_banner.devdocs.json | 17 + api_docs/kbn_avc_banner.mdx | 4 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_bfetch_error.mdx | 2 +- api_docs/kbn_calculate_auto.mdx | 2 +- .../kbn_calculate_width_from_char_count.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mock.mdx | 2 +- api_docs/kbn_code_owners.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.mdx | 2 +- .../kbn_content_management_content_editor.mdx | 2 +- ...tent_management_tabbed_table_list_view.mdx | 2 +- ...kbn_content_management_table_list_view.mdx | 2 +- ...tent_management_table_list_view_common.mdx | 2 +- ...ntent_management_table_list_view_table.mdx | 2 +- .../kbn_content_management_user_profiles.mdx | 2 +- api_docs/kbn_content_management_utils.mdx | 2 +- .../kbn_core_analytics_browser.devdocs.json | 24 + api_docs/kbn_core_analytics_browser.mdx | 2 +- .../kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- .../kbn_core_analytics_server.devdocs.json | 24 + api_docs/kbn_core_analytics_server.mdx | 2 +- .../kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_application_browser.mdx | 2 +- .../kbn_core_application_browser_internal.mdx | 2 +- .../kbn_core_application_browser_mocks.mdx | 2 +- api_docs/kbn_core_application_common.mdx | 2 +- api_docs/kbn_core_apps_browser_internal.mdx | 2 +- api_docs/kbn_core_apps_browser_mocks.mdx | 2 +- api_docs/kbn_core_apps_server_internal.mdx | 2 +- api_docs/kbn_core_base_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_common.mdx | 2 +- api_docs/kbn_core_base_server_internal.mdx | 2 +- api_docs/kbn_core_base_server_mocks.mdx | 2 +- .../kbn_core_capabilities_browser_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_common.mdx | 2 +- api_docs/kbn_core_capabilities_server.mdx | 2 +- .../kbn_core_capabilities_server_mocks.mdx | 2 +- api_docs/kbn_core_chrome_browser.mdx | 2 +- api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +- api_docs/kbn_core_config_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser.mdx | 2 +- ..._core_custom_branding_browser_internal.mdx | 2 +- ...kbn_core_custom_branding_browser_mocks.mdx | 2 +- api_docs/kbn_core_custom_branding_common.mdx | 2 +- api_docs/kbn_core_custom_branding_server.mdx | 2 +- ...n_core_custom_branding_server_internal.mdx | 2 +- .../kbn_core_custom_branding_server_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_browser.mdx | 2 +- ...kbn_core_deprecations_browser_internal.mdx | 2 +- .../kbn_core_deprecations_browser_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_common.mdx | 2 +- api_docs/kbn_core_deprecations_server.mdx | 2 +- .../kbn_core_deprecations_server_internal.mdx | 2 +- .../kbn_core_deprecations_server_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- ...e_elasticsearch_client_server_internal.mdx | 2 +- ...core_elasticsearch_client_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- ...kbn_core_elasticsearch_server_internal.mdx | 2 +- .../kbn_core_elasticsearch_server_mocks.mdx | 2 +- .../kbn_core_environment_server_internal.mdx | 2 +- .../kbn_core_environment_server_mocks.mdx | 2 +- .../kbn_core_execution_context_browser.mdx | 2 +- ...ore_execution_context_browser_internal.mdx | 2 +- ...n_core_execution_context_browser_mocks.mdx | 2 +- .../kbn_core_execution_context_common.mdx | 2 +- .../kbn_core_execution_context_server.mdx | 2 +- ...core_execution_context_server_internal.mdx | 2 +- ...bn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- .../kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- .../kbn_core_http_context_server_mocks.mdx | 2 +- ...re_http_request_handler_context_server.mdx | 2 +- api_docs/kbn_core_http_resources_server.mdx | 2 +- ...bn_core_http_resources_server_internal.mdx | 2 +- .../kbn_core_http_resources_server_mocks.mdx | 2 +- .../kbn_core_http_router_server_internal.mdx | 2 +- .../kbn_core_http_router_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server.mdx | 2 +- api_docs/kbn_core_http_server_internal.mdx | 2 +- api_docs/kbn_core_http_server_mocks.mdx | 2 +- api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- api_docs/kbn_core_i18n_server.mdx | 2 +- api_docs/kbn_core_i18n_server_internal.mdx | 2 +- api_docs/kbn_core_i18n_server_mocks.mdx | 2 +- ...n_core_injected_metadata_browser_mocks.mdx | 2 +- ...kbn_core_integrations_browser_internal.mdx | 2 +- .../kbn_core_integrations_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_browser.mdx | 2 +- api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_server.mdx | 2 +- api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +- api_docs/kbn_core_logging_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- ...ore_metrics_collectors_server_internal.mdx | 2 +- ...n_core_metrics_collectors_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_server.mdx | 2 +- api_docs/kbn_core_metrics_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_server_mocks.mdx | 2 +- api_docs/kbn_core_mount_utils_browser.mdx | 2 +- api_docs/kbn_core_node_server.mdx | 2 +- api_docs/kbn_core_node_server_internal.mdx | 2 +- api_docs/kbn_core_node_server_mocks.mdx | 2 +- api_docs/kbn_core_notifications_browser.mdx | 2 +- ...bn_core_notifications_browser_internal.mdx | 2 +- .../kbn_core_notifications_browser_mocks.mdx | 2 +- api_docs/kbn_core_overlays_browser.mdx | 2 +- .../kbn_core_overlays_browser_internal.mdx | 2 +- api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_browser.mdx | 2 +- api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +- .../kbn_core_plugins_contracts_browser.mdx | 2 +- .../kbn_core_plugins_contracts_server.mdx | 2 +- api_docs/kbn_core_plugins_server.mdx | 2 +- api_docs/kbn_core_plugins_server_mocks.mdx | 2 +- api_docs/kbn_core_preboot_server.mdx | 2 +- api_docs/kbn_core_preboot_server_mocks.mdx | 2 +- api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +- .../kbn_core_rendering_server_internal.mdx | 2 +- api_docs/kbn_core_rendering_server_mocks.mdx | 2 +- api_docs/kbn_core_root_server_internal.mdx | 2 +- .../kbn_core_saved_objects_api_browser.mdx | 2 +- .../kbn_core_saved_objects_api_server.mdx | 2 +- ...bn_core_saved_objects_api_server_mocks.mdx | 2 +- ...ore_saved_objects_base_server_internal.mdx | 2 +- ...n_core_saved_objects_base_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_browser.mdx | 2 +- ...bn_core_saved_objects_browser_internal.mdx | 2 +- .../kbn_core_saved_objects_browser_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_common.mdx | 2 +- ..._objects_import_export_server_internal.mdx | 2 +- ...ved_objects_import_export_server_mocks.mdx | 2 +- ...aved_objects_migration_server_internal.mdx | 2 +- ...e_saved_objects_migration_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_server.mdx | 2 +- ...kbn_core_saved_objects_server_internal.mdx | 2 +- .../kbn_core_saved_objects_server_mocks.mdx | 2 +- .../kbn_core_saved_objects_utils_server.mdx | 2 +- api_docs/kbn_core_security_browser.mdx | 2 +- .../kbn_core_security_browser_internal.mdx | 2 +- api_docs/kbn_core_security_browser_mocks.mdx | 2 +- api_docs/kbn_core_security_common.mdx | 2 +- api_docs/kbn_core_security_server.mdx | 2 +- .../kbn_core_security_server_internal.mdx | 2 +- api_docs/kbn_core_security_server_mocks.mdx | 2 +- api_docs/kbn_core_status_common.mdx | 2 +- api_docs/kbn_core_status_common_internal.mdx | 2 +- api_docs/kbn_core_status_server.mdx | 2 +- api_docs/kbn_core_status_server_internal.mdx | 2 +- api_docs/kbn_core_status_server_mocks.mdx | 2 +- ...core_test_helpers_deprecations_getters.mdx | 2 +- ...n_core_test_helpers_http_setup_browser.mdx | 2 +- api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +- .../kbn_core_test_helpers_model_versions.mdx | 2 +- ...n_core_test_helpers_so_type_serializer.mdx | 2 +- api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +- api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_browser.mdx | 2 +- .../kbn_core_ui_settings_browser_internal.mdx | 2 +- .../kbn_core_ui_settings_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_common.mdx | 2 +- api_docs/kbn_core_ui_settings_server.mdx | 2 +- .../kbn_core_ui_settings_server_internal.mdx | 2 +- .../kbn_core_ui_settings_server_mocks.mdx | 2 +- api_docs/kbn_core_usage_data_server.mdx | 2 +- .../kbn_core_usage_data_server_internal.mdx | 2 +- api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_browser.mdx | 2 +- ...kbn_core_user_profile_browser_internal.mdx | 2 +- .../kbn_core_user_profile_browser_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_common.mdx | 2 +- api_docs/kbn_core_user_profile_server.mdx | 2 +- .../kbn_core_user_profile_server_internal.mdx | 2 +- .../kbn_core_user_profile_server_mocks.mdx | 2 +- api_docs/kbn_core_user_settings_server.mdx | 2 +- .../kbn_core_user_settings_server_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_custom_icons.mdx | 2 +- api_docs/kbn_custom_integrations.mdx | 2 +- api_docs/kbn_cypress_config.mdx | 2 +- api_docs/kbn_data_forge.mdx | 2 +- api_docs/kbn_data_service.mdx | 2 +- api_docs/kbn_data_stream_adapter.mdx | 2 +- api_docs/kbn_data_view_utils.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_deeplinks_analytics.mdx | 2 +- api_docs/kbn_deeplinks_devtools.mdx | 2 +- api_docs/kbn_deeplinks_fleet.mdx | 2 +- api_docs/kbn_deeplinks_management.mdx | 2 +- api_docs/kbn_deeplinks_ml.mdx | 2 +- api_docs/kbn_deeplinks_observability.mdx | 2 +- api_docs/kbn_deeplinks_search.mdx | 2 +- api_docs/kbn_deeplinks_security.mdx | 2 +- api_docs/kbn_deeplinks_shared.mdx | 2 +- api_docs/kbn_default_nav_analytics.mdx | 2 +- api_docs/kbn_default_nav_devtools.mdx | 2 +- api_docs/kbn_default_nav_management.mdx | 2 +- api_docs/kbn_default_nav_ml.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- api_docs/kbn_discover_utils.mdx | 2 +- api_docs/kbn_doc_links.mdx | 2 +- api_docs/kbn_docs_utils.mdx | 2 +- api_docs/kbn_dom_drag_drop.mdx | 2 +- api_docs/kbn_ebt_tools.mdx | 2 +- api_docs/kbn_ecs_data_quality_dashboard.mdx | 2 +- api_docs/kbn_elastic_agent_utils.devdocs.json | 4 +- api_docs/kbn_elastic_agent_utils.mdx | 2 +- api_docs/kbn_elastic_assistant.mdx | 2 +- api_docs/kbn_elastic_assistant_common.mdx | 2 +- api_docs/kbn_entities_schema.mdx | 2 +- api_docs/kbn_es.mdx | 2 +- api_docs/kbn_es_archiver.mdx | 2 +- api_docs/kbn_es_errors.mdx | 2 +- api_docs/kbn_es_query.mdx | 2 +- api_docs/kbn_es_types.mdx | 2 +- api_docs/kbn_eslint_plugin_imports.mdx | 2 +- api_docs/kbn_esql_ast.devdocs.json | 4 +- api_docs/kbn_esql_ast.mdx | 4 +- api_docs/kbn_esql_utils.devdocs.json | 24 +- api_docs/kbn_esql_utils.mdx | 2 +- ..._esql_validation_autocomplete.devdocs.json | 16 +- api_docs/kbn_esql_validation_autocomplete.mdx | 2 +- api_docs/kbn_event_annotation_common.mdx | 2 +- api_docs/kbn_event_annotation_components.mdx | 2 +- api_docs/kbn_expandable_flyout.mdx | 2 +- api_docs/kbn_field_types.mdx | 2 +- api_docs/kbn_field_utils.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- api_docs/kbn_formatters.mdx | 2 +- .../kbn_ftr_common_functional_services.mdx | 2 +- .../kbn_ftr_common_functional_ui_services.mdx | 2 +- api_docs/kbn_generate.mdx | 2 +- api_docs/kbn_generate_console_definitions.mdx | 2 +- api_docs/kbn_generate_csv.mdx | 2 +- api_docs/kbn_grouping.mdx | 2 +- api_docs/kbn_guided_onboarding.mdx | 2 +- api_docs/kbn_handlebars.mdx | 2 +- api_docs/kbn_hapi_mocks.mdx | 2 +- api_docs/kbn_health_gateway_server.mdx | 2 +- api_docs/kbn_home_sample_data_card.mdx | 2 +- api_docs/kbn_home_sample_data_tab.mdx | 2 +- api_docs/kbn_i18n.mdx | 2 +- api_docs/kbn_i18n_react.mdx | 2 +- api_docs/kbn_import_resolver.mdx | 2 +- api_docs/kbn_index_management.mdx | 2 +- api_docs/kbn_inference_integration_flyout.mdx | 2 +- api_docs/kbn_infra_forge.mdx | 2 +- api_docs/kbn_interpreter.mdx | 2 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_ipynb.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_journeys.mdx | 2 +- api_docs/kbn_json_ast.mdx | 2 +- api_docs/kbn_json_schemas.mdx | 2 +- api_docs/kbn_kibana_manifest_schema.mdx | 2 +- .../kbn_language_documentation_popover.mdx | 2 +- api_docs/kbn_lens_embeddable_utils.mdx | 2 +- api_docs/kbn_lens_formula_docs.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_content_badge.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_management_cards_navigation.mdx | 2 +- .../kbn_management_settings_application.mdx | 2 +- ...ent_settings_components_field_category.mdx | 2 +- ...gement_settings_components_field_input.mdx | 2 +- ...nagement_settings_components_field_row.mdx | 2 +- ...bn_management_settings_components_form.mdx | 2 +- ...n_management_settings_field_definition.mdx | 2 +- api_docs/kbn_management_settings_ids.mdx | 2 +- ...n_management_settings_section_registry.mdx | 2 +- api_docs/kbn_management_settings_types.mdx | 2 +- .../kbn_management_settings_utilities.mdx | 2 +- api_docs/kbn_management_storybook_config.mdx | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_maps_vector_tile_utils.mdx | 2 +- api_docs/kbn_ml_agg_utils.mdx | 2 +- api_docs/kbn_ml_anomaly_utils.mdx | 2 +- api_docs/kbn_ml_cancellable_search.mdx | 2 +- api_docs/kbn_ml_category_validator.mdx | 2 +- api_docs/kbn_ml_chi2test.mdx | 2 +- .../kbn_ml_data_frame_analytics_utils.mdx | 2 +- api_docs/kbn_ml_data_grid.mdx | 2 +- api_docs/kbn_ml_date_picker.mdx | 2 +- api_docs/kbn_ml_date_utils.mdx | 2 +- api_docs/kbn_ml_error_utils.mdx | 2 +- api_docs/kbn_ml_in_memory_table.mdx | 2 +- api_docs/kbn_ml_is_defined.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_kibana_theme.mdx | 2 +- api_docs/kbn_ml_local_storage.mdx | 2 +- api_docs/kbn_ml_nested_property.mdx | 2 +- api_docs/kbn_ml_number_utils.mdx | 2 +- api_docs/kbn_ml_query_utils.mdx | 2 +- api_docs/kbn_ml_random_sampler_utils.mdx | 2 +- api_docs/kbn_ml_route_utils.mdx | 2 +- api_docs/kbn_ml_runtime_field_utils.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_ml_time_buckets.mdx | 2 +- .../kbn_ml_trained_models_utils.devdocs.json | 2 +- api_docs/kbn_ml_trained_models_utils.mdx | 2 +- api_docs/kbn_ml_ui_actions.mdx | 2 +- api_docs/kbn_ml_url_state.mdx | 2 +- api_docs/kbn_mock_idp_utils.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_object_versioning.mdx | 2 +- api_docs/kbn_observability_alert_details.mdx | 2 +- .../kbn_observability_alerting_rule_utils.mdx | 2 +- .../kbn_observability_alerting_test_data.mdx | 2 +- ...ility_get_padded_alert_time_range_util.mdx | 2 +- api_docs/kbn_openapi_bundler.mdx | 2 +- api_docs/kbn_openapi_generator.mdx | 2 +- api_docs/kbn_optimizer.mdx | 2 +- api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +- api_docs/kbn_osquery_io_ts_types.mdx | 2 +- api_docs/kbn_panel_loader.mdx | 2 +- ..._performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_check.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_presentation_containers.mdx | 2 +- api_docs/kbn_presentation_publishing.mdx | 2 +- api_docs/kbn_profiling_utils.mdx | 2 +- api_docs/kbn_random_sampling.mdx | 2 +- api_docs/kbn_react_field.mdx | 2 +- api_docs/kbn_react_hooks.mdx | 2 +- api_docs/kbn_react_kibana_context_common.mdx | 2 +- api_docs/kbn_react_kibana_context_render.mdx | 2 +- api_docs/kbn_react_kibana_context_root.mdx | 2 +- api_docs/kbn_react_kibana_context_styled.mdx | 2 +- api_docs/kbn_react_kibana_context_theme.mdx | 2 +- api_docs/kbn_react_kibana_mount.mdx | 2 +- api_docs/kbn_recently_accessed.mdx | 2 +- api_docs/kbn_repo_file_maps.mdx | 2 +- api_docs/kbn_repo_linter.mdx | 2 +- api_docs/kbn_repo_path.mdx | 2 +- api_docs/kbn_repo_source_classifier.mdx | 2 +- api_docs/kbn_reporting_common.mdx | 2 +- api_docs/kbn_reporting_csv_share_panel.mdx | 2 +- api_docs/kbn_reporting_export_types_csv.mdx | 2 +- .../kbn_reporting_export_types_csv_common.mdx | 2 +- api_docs/kbn_reporting_export_types_pdf.mdx | 2 +- .../kbn_reporting_export_types_pdf_common.mdx | 2 +- api_docs/kbn_reporting_export_types_png.mdx | 2 +- .../kbn_reporting_export_types_png_common.mdx | 2 +- api_docs/kbn_reporting_mocks_server.mdx | 2 +- api_docs/kbn_reporting_public.mdx | 2 +- api_docs/kbn_reporting_server.mdx | 2 +- api_docs/kbn_resizable_layout.mdx | 2 +- .../kbn_response_ops_feature_flag_service.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_rollup.mdx | 2 +- api_docs/kbn_router_to_openapispec.mdx | 2 +- api_docs/kbn_router_utils.mdx | 2 +- api_docs/kbn_rrule.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- api_docs/kbn_saved_objects_settings.mdx | 2 +- api_docs/kbn_search_api_panels.mdx | 2 +- api_docs/kbn_search_connectors.devdocs.json | 200 + api_docs/kbn_search_connectors.mdx | 4 +- api_docs/kbn_search_errors.mdx | 2 +- api_docs/kbn_search_index_documents.mdx | 2 +- api_docs/kbn_search_response_warnings.mdx | 2 +- api_docs/kbn_search_types.mdx | 2 +- api_docs/kbn_security_api_key_management.mdx | 2 +- api_docs/kbn_security_form_components.mdx | 2 +- api_docs/kbn_security_hardening.mdx | 2 +- api_docs/kbn_security_plugin_types_common.mdx | 2 +- api_docs/kbn_security_plugin_types_public.mdx | 2 +- api_docs/kbn_security_plugin_types_server.mdx | 2 +- ...kbn_security_solution_distribution_bar.mdx | 2 +- api_docs/kbn_security_solution_features.mdx | 2 +- api_docs/kbn_security_solution_navigation.mdx | 2 +- api_docs/kbn_security_solution_side_nav.mdx | 2 +- ...kbn_security_solution_storybook_config.mdx | 2 +- .../kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_data_table.mdx | 2 +- api_docs/kbn_securitysolution_ecs.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- ...ritysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ..._securitysolution_io_ts_alerting_types.mdx | 2 +- .../kbn_securitysolution_io_ts_list_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +- api_docs/kbn_securitysolution_list_api.mdx | 2 +- .../kbn_securitysolution_list_constants.mdx | 2 +- api_docs/kbn_securitysolution_list_hooks.mdx | 2 +- api_docs/kbn_securitysolution_list_utils.mdx | 2 +- api_docs/kbn_securitysolution_rules.mdx | 2 +- api_docs/kbn_securitysolution_t_grid.mdx | 2 +- api_docs/kbn_securitysolution_utils.mdx | 2 +- api_docs/kbn_server_http_tools.mdx | 2 +- api_docs/kbn_server_route_repository.mdx | 2 +- .../kbn_server_route_repository_utils.mdx | 2 +- api_docs/kbn_serverless_common_settings.mdx | 2 +- .../kbn_serverless_observability_settings.mdx | 2 +- api_docs/kbn_serverless_project_switcher.mdx | 2 +- api_docs/kbn_serverless_search_settings.mdx | 2 +- api_docs/kbn_serverless_security_settings.mdx | 2 +- api_docs/kbn_serverless_storybook_config.mdx | 2 +- api_docs/kbn_shared_svg.mdx | 2 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +- ...n_shared_ux_chrome_navigation.devdocs.json | 49 +- api_docs/kbn_shared_ux_chrome_navigation.mdx | 7 +- api_docs/kbn_shared_ux_error_boundary.mdx | 2 +- api_docs/kbn_shared_ux_file_context.mdx | 2 +- api_docs/kbn_shared_ux_file_image.mdx | 2 +- api_docs/kbn_shared_ux_file_image_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_picker.mdx | 2 +- api_docs/kbn_shared_ux_file_types.mdx | 2 +- api_docs/kbn_shared_ux_file_upload.mdx | 2 +- api_docs/kbn_shared_ux_file_util.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +- .../kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +- api_docs/kbn_shared_ux_markdown.mdx | 2 +- api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +- .../kbn_shared_ux_page_analytics_no_data.mdx | 2 +- ...shared_ux_page_analytics_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_no_data.mdx | 2 +- ...bn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_template.mdx | 2 +- ...n_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- .../kbn_shared_ux_page_no_data_config.mdx | 2 +- ...bn_shared_ux_page_no_data_config_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- .../kbn_shared_ux_prompt_no_data_views.mdx | 2 +- ...n_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_tabbed_modal.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_some_dev_log.mdx | 2 +- api_docs/kbn_sort_predicates.mdx | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_synthetics_e2e.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_eui_helpers.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_text_based_editor.mdx | 2 +- api_docs/kbn_timerange.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_triggers_actions_ui_types.mdx | 2 +- api_docs/kbn_try_in_console.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_unified_data_table.mdx | 2 +- api_docs/kbn_unified_doc_viewer.mdx | 2 +- api_docs/kbn_unified_field_list.mdx | 2 +- api_docs/kbn_unsaved_changes_badge.mdx | 2 +- api_docs/kbn_unsaved_changes_prompt.mdx | 2 +- api_docs/kbn_use_tracked_promise.mdx | 2 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kbn_visualization_ui_components.mdx | 2 +- api_docs/kbn_visualization_utils.mdx | 2 +- api_docs/kbn_xstate_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kbn_zod.mdx | 2 +- api_docs/kbn_zod_helpers.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/links.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/logs_data_access.mdx | 2 +- api_docs/logs_explorer.mdx | 2 +- api_docs/logs_shared.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.mdx | 2 +- api_docs/maps_ems.mdx | 2 +- api_docs/metrics_data_access.devdocs.json | 34 +- api_docs/metrics_data_access.mdx | 4 +- api_docs/ml.mdx | 2 +- api_docs/mock_idp_plugin.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.devdocs.json | 4 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/no_data_page.mdx | 2 +- api_docs/notifications.mdx | 2 +- api_docs/observability.mdx | 2 +- api_docs/observability_a_i_assistant.mdx | 2 +- api_docs/observability_a_i_assistant_app.mdx | 2 +- .../observability_ai_assistant_management.mdx | 2 +- api_docs/observability_logs_explorer.mdx | 2 +- api_docs/observability_onboarding.mdx | 2 +- api_docs/observability_shared.mdx | 2 +- api_docs/osquery.mdx | 2 +- api_docs/painless_lab.mdx | 2 +- api_docs/plugin_directory.mdx | 23 +- api_docs/presentation_panel.mdx | 2 +- api_docs/presentation_util.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/profiling_data_access.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.mdx | 2 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_finder.mdx | 2 +- api_docs/saved_objects_management.mdx | 2 +- api_docs/saved_objects_tagging.mdx | 2 +- api_docs/saved_objects_tagging_oss.mdx | 2 +- api_docs/saved_search.mdx | 2 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/search_connectors.mdx | 2 +- api_docs/search_homepage.mdx | 2 +- api_docs/search_inference_endpoints.mdx | 2 +- api_docs/search_notebooks.mdx | 2 +- api_docs/search_playground.mdx | 2 +- api_docs/security.devdocs.json | 210 +- api_docs/security.mdx | 4 +- api_docs/security_solution.devdocs.json | 12 +- api_docs/security_solution.mdx | 2 +- api_docs/security_solution_ess.mdx | 2 +- api_docs/security_solution_serverless.mdx | 2 +- api_docs/serverless.mdx | 2 +- api_docs/serverless_observability.mdx | 2 +- api_docs/serverless_search.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/slo.mdx | 2 +- api_docs/snapshot_restore.mdx | 2 +- api_docs/spaces.devdocs.json | 62 +- api_docs/spaces.mdx | 4 +- api_docs/stack_alerts.mdx | 2 +- api_docs/stack_connectors.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_collection_xpack.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/threat_intelligence.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.mdx | 2 +- api_docs/ui_actions.mdx | 2 +- api_docs/ui_actions_enhanced.mdx | 2 +- api_docs/unified_doc_viewer.mdx | 2 +- api_docs/unified_histogram.mdx | 2 +- api_docs/unified_search.mdx | 2 +- api_docs/unified_search_autocomplete.mdx | 2 +- api_docs/uptime.mdx | 2 +- api_docs/url_forwarding.mdx | 2 +- api_docs/usage_collection.mdx | 2 +- api_docs/ux.mdx | 2 +- api_docs/vis_default_editor.mdx | 2 +- api_docs/vis_type_gauge.mdx | 2 +- api_docs/vis_type_heatmap.mdx | 2 +- api_docs/vis_type_pie.mdx | 2 +- api_docs/vis_type_table.mdx | 2 +- api_docs/vis_type_timelion.mdx | 2 +- api_docs/vis_type_timeseries.mdx | 2 +- api_docs/vis_type_vega.mdx | 2 +- api_docs/vis_type_vislib.mdx | 2 +- api_docs/vis_type_xy.mdx | 2 +- api_docs/visualizations.mdx | 2 +- 727 files changed, 6530 insertions(+), 784 deletions(-) create mode 100644 api_docs/kbn_apm_types.devdocs.json create mode 100644 api_docs/kbn_apm_types.mdx diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 63847b91b45ce..c6c66a6ff1427 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index c394dade7b1a7..751c0ba4c1886 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index e011f3cf5c85a..7799693ad3d9b 100644 --- a/api_docs/ai_assistant_management_selection.mdx +++ b/api_docs/ai_assistant_management_selection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementSelection title: "aiAssistantManagementSelection" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementSelection plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementSelection'] --- import aiAssistantManagementSelectionObj from './ai_assistant_management_selection.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index 195d461850caa..2eab910ef53e0 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.devdocs.json'; diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index e99c9cbc5265d..e8c1c74b310f6 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; diff --git a/api_docs/apm.devdocs.json b/api_docs/apm.devdocs.json index 1b0c2db678373..76a3bdfeded81 100644 --- a/api_docs/apm.devdocs.json +++ b/api_docs/apm.devdocs.json @@ -3996,7 +3996,13 @@ "; }>; }> | undefined; handler: ({}: ", "APMRouteHandlerResources", " & { params?: { query?: { 'service.name'?: string | undefined; 'service.environment'?: string | undefined; 'transaction.name'?: string | undefined; 'transaction.type'?: string | undefined; } | undefined; } | undefined; }) => Promise<", - "Transaction", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Transaction", + "text": "Transaction" + }, ">; } & ", "APMRouteCreateOptions", "; \"POST /internal/apm/settings/apm-indices/save\": { endpoint: \"POST /internal/apm/settings/apm-indices/save\"; params?: ", @@ -5254,7 +5260,13 @@ "; }>]>; }> | undefined; handler: ({}: ", "APMRouteHandlerResources", " & { params: { query: { start: number; end: number; } & { transactionName: string; serviceName: string; }; }; }) => Promise<{ transaction: ", - "Transaction", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Transaction", + "text": "Transaction" + }, "; }>; } & ", "APMRouteCreateOptions", "; \"GET /internal/apm/traces/{traceId}/spans/{spanId}\": { endpoint: \"GET /internal/apm/traces/{traceId}/spans/{spanId}\"; params?: ", @@ -5284,9 +5296,21 @@ "]>]>; }> | undefined; handler: ({}: ", "APMRouteHandlerResources", " & { params: { path: { traceId: string; spanId: string; }; query: { start: number; end: number; } & { parentTransactionId?: string | undefined; }; }; }) => Promise<{ span?: ", - "Span", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Span", + "text": "Span" + }, " | undefined; parentTransaction?: ", - "Transaction", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Transaction", + "text": "Transaction" + }, " | undefined; }>; } & ", "APMRouteCreateOptions", "; \"GET /internal/apm/traces/{traceId}/transactions/{transactionId}\": { endpoint: \"GET /internal/apm/traces/{traceId}/transactions/{transactionId}\"; params?: ", @@ -5306,7 +5330,13 @@ "; }>; }> | undefined; handler: ({}: ", "APMRouteHandlerResources", " & { params: { path: { traceId: string; transactionId: string; }; query: { start: number; end: number; }; }; }) => Promise<", - "Transaction", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Transaction", + "text": "Transaction" + }, ">; } & ", "APMRouteCreateOptions", "; \"POST /internal/apm/traces/aggregated_critical_path\": { endpoint: \"POST /internal/apm/traces/aggregated_critical_path\"; params?: ", @@ -5460,7 +5490,13 @@ "; }>; }> | undefined; handler: ({}: ", "APMRouteHandlerResources", " & { params: { path: { transactionId: string; }; query: { start: number; end: number; }; }; }) => Promise<{ transaction: ", - "Transaction", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Transaction", + "text": "Transaction" + }, "; }>; } & ", "APMRouteCreateOptions", "; \"GET /internal/apm/traces/{traceId}/root_transaction\": { endpoint: \"GET /internal/apm/traces/{traceId}/root_transaction\"; params?: ", @@ -5478,7 +5514,13 @@ "; }>; }> | undefined; handler: ({}: ", "APMRouteHandlerResources", " & { params: { path: { traceId: string; }; query: { start: number; end: number; }; }; }) => Promise<{ transaction: ", - "Transaction", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Transaction", + "text": "Transaction" + }, "; }>; } & ", "APMRouteCreateOptions", "; \"GET /internal/apm/traces\": { endpoint: \"GET /internal/apm/traces\"; params?: ", @@ -5562,7 +5604,13 @@ " & { params: { path: { traceId: string; }; query: { start: number; end: number; } & { entryTransactionId: string; } & { maxTraceItems?: number | undefined; }; }; }) => Promise<{ traceItems: ", "TraceItems", "; entryTransaction?: ", - "Transaction", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Transaction", + "text": "Transaction" + }, " | undefined; }>; } & ", "APMRouteCreateOptions", "; \"GET /internal/apm/suggestions\": { endpoint: \"GET /internal/apm/suggestions\"; params?: ", diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index f2bf80672c8de..aa32cbc7b355f 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/te | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 29 | 0 | 29 | 124 | +| 29 | 0 | 29 | 122 | ## Client diff --git a/api_docs/apm_data_access.mdx b/api_docs/apm_data_access.mdx index e41ed73fa4b8d..450a56902177a 100644 --- a/api_docs/apm_data_access.mdx +++ b/api_docs/apm_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apmDataAccess title: "apmDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the apmDataAccess plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/assets_data_access.mdx b/api_docs/assets_data_access.mdx index 7af6e6386bd64..0a6eb0d5f0cc0 100644 --- a/api_docs/assets_data_access.mdx +++ b/api_docs/assets_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetsDataAccess title: "assetsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the assetsDataAccess plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetsDataAccess'] --- import assetsDataAccessObj from './assets_data_access.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index fdb3e920c2bd1..c331c420357c6 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'banners'] --- import bannersObj from './banners.devdocs.json'; diff --git a/api_docs/bfetch.mdx b/api_docs/bfetch.mdx index a9a8766c35ad3..122b985fa5d59 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'bfetch'] --- import bfetchObj from './bfetch.devdocs.json'; diff --git a/api_docs/canvas.mdx b/api_docs/canvas.mdx index 68bf18b3f9b48..a36252f7ba098 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas'] --- import canvasObj from './canvas.devdocs.json'; diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx index a1e73caae4304..2d7f0907c9fa0 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases'] --- import casesObj from './cases.devdocs.json'; diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx index 5264a27e8d44f..2134398fb71a4 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'charts'] --- import chartsObj from './charts.devdocs.json'; diff --git a/api_docs/cloud.mdx b/api_docs/cloud.mdx index d1dfcc350a094..5c95adaba8589 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index 759ca5892ce4b..10c11b28456bd 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDataMigration'] --- import cloudDataMigrationObj from './cloud_data_migration.devdocs.json'; diff --git a/api_docs/cloud_defend.mdx b/api_docs/cloud_defend.mdx index 5eaca11ad270a..eb24ef6dbf291 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_experiments.mdx b/api_docs/cloud_experiments.mdx index 2fea3205a50fd..2a2c6d6faaeeb 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudExperiments'] --- import cloudExperimentsObj from './cloud_experiments.devdocs.json'; diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index 6b948f6657a03..7abb925374e49 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudSecurityPosture'] --- import cloudSecurityPostureObj from './cloud_security_posture.devdocs.json'; diff --git a/api_docs/console.mdx b/api_docs/console.mdx index 32de7c9e2c00f..e1101569a838a 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console'] --- import consoleObj from './console.devdocs.json'; diff --git a/api_docs/content_management.mdx b/api_docs/content_management.mdx index 7b35543c77910..45d2eeae3e8fc 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement'] --- import contentManagementObj from './content_management.devdocs.json'; diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index 46750afc630b2..a74a8ddf99fca 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls'] --- import controlsObj from './controls.devdocs.json'; diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx index 57c0cd4d7464c..d312414e98797 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] --- import customIntegrationsObj from './custom_integrations.devdocs.json'; diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index fed2ea68670d1..904f7fe79da0f 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] --- import dashboardObj from './dashboard.devdocs.json'; diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index a57f0edbc2092..71f6d37d60bef 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] --- import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json'; diff --git a/api_docs/data.mdx b/api_docs/data.mdx index 3595c44c72919..1a78cd4c5fbd7 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_quality.mdx b/api_docs/data_quality.mdx index 428236b2c71ab..b1647f24a6c54 100644 --- a/api_docs/data_quality.mdx +++ b/api_docs/data_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataQuality title: "dataQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the dataQuality plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataQuality'] --- import dataQualityObj from './data_quality.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 441470e2e3fc6..2e3a461d83970 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] --- import dataQueryObj from './data_query.devdocs.json'; diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index 9208e4135958b..695788530ea94 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index da8cae9763b85..973e36f03616a 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewEditor'] --- import dataViewEditorObj from './data_view_editor.devdocs.json'; diff --git a/api_docs/data_view_field_editor.mdx b/api_docs/data_view_field_editor.mdx index f1e246efa1fa5..363eae24568b1 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewFieldEditor'] --- import dataViewFieldEditorObj from './data_view_field_editor.devdocs.json'; diff --git a/api_docs/data_view_management.mdx b/api_docs/data_view_management.mdx index f088a1dd40d4b..4e05f21926d11 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] --- import dataViewManagementObj from './data_view_management.devdocs.json'; diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index dd78e6a4f4103..22ee16310ff5e 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViews'] --- import dataViewsObj from './data_views.devdocs.json'; diff --git a/api_docs/data_visualizer.mdx b/api_docs/data_visualizer.mdx index 1c55fbfac4067..784e535a73d34 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/dataset_quality.mdx b/api_docs/dataset_quality.mdx index 74420ce858df1..18d6b39ad74b8 100644 --- a/api_docs/dataset_quality.mdx +++ b/api_docs/dataset_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/datasetQuality title: "datasetQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the datasetQuality plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'datasetQuality'] --- import datasetQualityObj from './dataset_quality.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index 28ad1dbce6567..b77d4ea6e55c7 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 288d9092d1011..57cbcc786a191 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 8a86e1833baf5..69d6f94a85ff7 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index ab1606c9c1b35..9226a31089686 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index 5aa625a2605a2..c49734596f599 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover'] --- import discoverObj from './discover.devdocs.json'; diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx index 16c642b6eb6f6..b147ec8d7f504 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/discover_shared.mdx b/api_docs/discover_shared.mdx index 751c4e48ea500..377968df15ea0 100644 --- a/api_docs/discover_shared.mdx +++ b/api_docs/discover_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverShared title: "discoverShared" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverShared plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverShared'] --- import discoverSharedObj from './discover_shared.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index cc376175ae9d6..3bbf4965e7451 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index b049637feb903..b59f7647b8d1a 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 8fc543875542e..5f53999c0e16a 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable'] --- import embeddableObj from './embeddable.devdocs.json'; diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx index b999041af5f87..3d2a2e28fe29e 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddableEnhanced'] --- import embeddableEnhancedObj from './embeddable_enhanced.devdocs.json'; diff --git a/api_docs/encrypted_saved_objects.mdx b/api_docs/encrypted_saved_objects.mdx index 6602d24d2c96a..337926e09f3ed 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'encryptedSavedObjects'] --- import encryptedSavedObjectsObj from './encrypted_saved_objects.devdocs.json'; diff --git a/api_docs/enterprise_search.mdx b/api_docs/enterprise_search.mdx index a8e98c12ba6dc..1ab4672e6c631 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/entity_manager.mdx b/api_docs/entity_manager.mdx index a992b1003346c..345f5aad5eaf2 100644 --- a/api_docs/entity_manager.mdx +++ b/api_docs/entity_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entityManager title: "entityManager" image: https://source.unsplash.com/400x175/?github description: API docs for the entityManager plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entityManager'] --- import entityManagerObj from './entity_manager.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index 71c411556774d..f348a35cdc618 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/esql.mdx b/api_docs/esql.mdx index a2748717e7797..729e26d36da3f 100644 --- a/api_docs/esql.mdx +++ b/api_docs/esql.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esql title: "esql" image: https://source.unsplash.com/400x175/?github description: API docs for the esql plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esql'] --- import esqlObj from './esql.devdocs.json'; diff --git a/api_docs/esql_data_grid.mdx b/api_docs/esql_data_grid.mdx index e54bb5fc6a5ac..358008a6ca10e 100644 --- a/api_docs/esql_data_grid.mdx +++ b/api_docs/esql_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esqlDataGrid title: "esqlDataGrid" image: https://source.unsplash.com/400x175/?github description: API docs for the esqlDataGrid plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esqlDataGrid'] --- import esqlDataGridObj from './esql_data_grid.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 25b3e02bbf6f8..02174033b54b8 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_annotation_listing.mdx b/api_docs/event_annotation_listing.mdx index 15468790f84c0..f57b0ddfb493e 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotationListing'] --- import eventAnnotationListingObj from './event_annotation_listing.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index 5821e5f1419ed..a475caca9fbca 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/exploratory_view.mdx b/api_docs/exploratory_view.mdx index 9792e5ebb1b52..47d9114dea371 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'exploratoryView'] --- import exploratoryViewObj from './exploratory_view.devdocs.json'; diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx index b5aae123ab9ff..6005d9fd85399 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionError'] --- import expressionErrorObj from './expression_error.devdocs.json'; diff --git a/api_docs/expression_gauge.mdx b/api_docs/expression_gauge.mdx index f22a8cf506f62..0dd6d2cc631c6 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionGauge'] --- import expressionGaugeObj from './expression_gauge.devdocs.json'; diff --git a/api_docs/expression_heatmap.mdx b/api_docs/expression_heatmap.mdx index 448bc3fb19e3b..1b6a6dcee8620 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionHeatmap'] --- import expressionHeatmapObj from './expression_heatmap.devdocs.json'; diff --git a/api_docs/expression_image.mdx b/api_docs/expression_image.mdx index 556131a8d7615..17b91a87ff990 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionImage'] --- import expressionImageObj from './expression_image.devdocs.json'; diff --git a/api_docs/expression_legacy_metric_vis.mdx b/api_docs/expression_legacy_metric_vis.mdx index ce438cf419458..df86e1c9b54f4 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionLegacyMetricVis'] --- import expressionLegacyMetricVisObj from './expression_legacy_metric_vis.devdocs.json'; diff --git a/api_docs/expression_metric.mdx b/api_docs/expression_metric.mdx index 20bde4fd07615..e1e11e4cd8c1b 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetric'] --- import expressionMetricObj from './expression_metric.devdocs.json'; diff --git a/api_docs/expression_metric_vis.mdx b/api_docs/expression_metric_vis.mdx index 797174c8c51e2..0e7f705e5a538 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetricVis'] --- import expressionMetricVisObj from './expression_metric_vis.devdocs.json'; diff --git a/api_docs/expression_partition_vis.mdx b/api_docs/expression_partition_vis.mdx index c411b83bf2264..b730a3a65f552 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionPartitionVis'] --- import expressionPartitionVisObj from './expression_partition_vis.devdocs.json'; diff --git a/api_docs/expression_repeat_image.mdx b/api_docs/expression_repeat_image.mdx index 2f42031faffc4..5d32cd1776a26 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRepeatImage'] --- import expressionRepeatImageObj from './expression_repeat_image.devdocs.json'; diff --git a/api_docs/expression_reveal_image.mdx b/api_docs/expression_reveal_image.mdx index 1361c95024c9b..6acdadc3cb4e9 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRevealImage'] --- import expressionRevealImageObj from './expression_reveal_image.devdocs.json'; diff --git a/api_docs/expression_shape.mdx b/api_docs/expression_shape.mdx index 33dfed0238c32..8496249e4e06b 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionShape'] --- import expressionShapeObj from './expression_shape.devdocs.json'; diff --git a/api_docs/expression_tagcloud.mdx b/api_docs/expression_tagcloud.mdx index 53774caf41650..15a7d51287733 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionTagcloud'] --- import expressionTagcloudObj from './expression_tagcloud.devdocs.json'; diff --git a/api_docs/expression_x_y.mdx b/api_docs/expression_x_y.mdx index f740830bbc277..0f4797768ef3f 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY'] --- import expressionXYObj from './expression_x_y.devdocs.json'; diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx index 3493e67dac2be..f995fa6cdbfbe 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions'] --- import expressionsObj from './expressions.devdocs.json'; diff --git a/api_docs/features.mdx b/api_docs/features.mdx index 15a8a1cd216d4..59f3687f4085b 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'features'] --- import featuresObj from './features.devdocs.json'; diff --git a/api_docs/field_formats.mdx b/api_docs/field_formats.mdx index 2becb2f032a4a..ddff20dcad845 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/fields_metadata.mdx b/api_docs/fields_metadata.mdx index 320f5dc8d5309..4c9c8ed30ee1a 100644 --- a/api_docs/fields_metadata.mdx +++ b/api_docs/fields_metadata.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldsMetadata title: "fieldsMetadata" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldsMetadata plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldsMetadata'] --- import fieldsMetadataObj from './fields_metadata.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 9fdad3660c5a8..4800f3cab8c3d 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload'] --- import fileUploadObj from './file_upload.devdocs.json'; diff --git a/api_docs/files.mdx b/api_docs/files.mdx index 06ef242784597..d1697311894be 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'files'] --- import filesObj from './files.devdocs.json'; diff --git a/api_docs/files_management.mdx b/api_docs/files_management.mdx index 0072e379a6e71..cd1b96dd74b2d 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 253c0ede31062..59516dc0ed757 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] --- import fleetObj from './fleet.devdocs.json'; diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index 20c4709a63922..b37cc4abc7a55 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'globalSearch'] --- import globalSearchObj from './global_search.devdocs.json'; diff --git a/api_docs/guided_onboarding.mdx b/api_docs/guided_onboarding.mdx index 82eee29554ece..8d495f4bb7add 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'guidedOnboarding'] --- import guidedOnboardingObj from './guided_onboarding.devdocs.json'; diff --git a/api_docs/home.mdx b/api_docs/home.mdx index 3b1cc59bea371..5bf933dbf375f 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'home'] --- import homeObj from './home.devdocs.json'; diff --git a/api_docs/image_embeddable.mdx b/api_docs/image_embeddable.mdx index a6cc03bf651eb..e00fb63d3fcf8 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'imageEmbeddable'] --- import imageEmbeddableObj from './image_embeddable.devdocs.json'; diff --git a/api_docs/index_lifecycle_management.mdx b/api_docs/index_lifecycle_management.mdx index b7e563d27be89..891344eb65488 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement'] --- import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json'; diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index 10d933d6cd889..6864e4ed21d73 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index 10cbfdcf942fa..a3a4100f803a3 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/ingest_pipelines.mdx b/api_docs/ingest_pipelines.mdx index e915faf2f275e..d03f70313d94c 100644 --- a/api_docs/ingest_pipelines.mdx +++ b/api_docs/ingest_pipelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ingestPipelines title: "ingestPipelines" image: https://source.unsplash.com/400x175/?github description: API docs for the ingestPipelines plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ingestPipelines'] --- import ingestPipelinesObj from './ingest_pipelines.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index 8555a637ffc45..5997a1bf5ee16 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/integration_assistant.mdx b/api_docs/integration_assistant.mdx index 692fde1f7aafe..208552843ea23 100644 --- a/api_docs/integration_assistant.mdx +++ b/api_docs/integration_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/integrationAssistant title: "integrationAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the integrationAssistant plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'integrationAssistant'] --- import integrationAssistantObj from './integration_assistant.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index 0aee1d54c30c4..2a0ae370b5ade 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/investigate.mdx b/api_docs/investigate.mdx index e4643bad9f7b0..3b5361d569d9a 100644 --- a/api_docs/investigate.mdx +++ b/api_docs/investigate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigate title: "investigate" image: https://source.unsplash.com/400x175/?github description: API docs for the investigate plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigate'] --- import investigateObj from './investigate.devdocs.json'; diff --git a/api_docs/investigate_app.mdx b/api_docs/investigate_app.mdx index f9e29e443d87d..3edabbae44e7a 100644 --- a/api_docs/investigate_app.mdx +++ b/api_docs/investigate_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigateApp title: "investigateApp" image: https://source.unsplash.com/400x175/?github description: API docs for the investigateApp plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigateApp'] --- import investigateAppObj from './investigate_app.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index 7dd19612397d4..05e50f0936e9b 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_actions_types.mdx b/api_docs/kbn_actions_types.mdx index 6954cd0e26860..907a8f4e3a931 100644 --- a/api_docs/kbn_actions_types.mdx +++ b/api_docs/kbn_actions_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-actions-types title: "@kbn/actions-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/actions-types plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types'] --- import kbnActionsTypesObj from './kbn_actions_types.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index 391edd1e088f2..b5ec772bb5f41 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_pattern_analysis.mdx b/api_docs/kbn_aiops_log_pattern_analysis.mdx index 20e746c4d1359..d2bbee99b7ad3 100644 --- a/api_docs/kbn_aiops_log_pattern_analysis.mdx +++ b/api_docs/kbn_aiops_log_pattern_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-pattern-analysis title: "@kbn/aiops-log-pattern-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-pattern-analysis plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-pattern-analysis'] --- import kbnAiopsLogPatternAnalysisObj from './kbn_aiops_log_pattern_analysis.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_rate_analysis.mdx b/api_docs/kbn_aiops_log_rate_analysis.mdx index f37e270544a74..a0c69dae97e9a 100644 --- a/api_docs/kbn_aiops_log_rate_analysis.mdx +++ b/api_docs/kbn_aiops_log_rate_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-rate-analysis title: "@kbn/aiops-log-rate-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-rate-analysis plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-rate-analysis'] --- import kbnAiopsLogRateAnalysisObj from './kbn_aiops_log_rate_analysis.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index 5dd2cf1d579a4..40383f66efde5 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_comparators.mdx b/api_docs/kbn_alerting_comparators.mdx index 7de325c712393..6e0129cc8e6ab 100644 --- a/api_docs/kbn_alerting_comparators.mdx +++ b/api_docs/kbn_alerting_comparators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-comparators title: "@kbn/alerting-comparators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-comparators plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-comparators'] --- import kbnAlertingComparatorsObj from './kbn_alerting_comparators.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index 2ca543e2868b2..45a3afcf3b13f 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types'] --- import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json'; diff --git a/api_docs/kbn_alerting_types.mdx b/api_docs/kbn_alerting_types.mdx index 0dc5d17ebfeea..6ce42cd822d6a 100644 --- a/api_docs/kbn_alerting_types.mdx +++ b/api_docs/kbn_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-types title: "@kbn/alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-types plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-types'] --- import kbnAlertingTypesObj from './kbn_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index 9557f500103ef..7a0ba40b8e2d0 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_grouping.mdx b/api_docs/kbn_alerts_grouping.mdx index bebd66657c5d2..f02b2df0988e0 100644 --- a/api_docs/kbn_alerts_grouping.mdx +++ b/api_docs/kbn_alerts_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-grouping title: "@kbn/alerts-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-grouping plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-grouping'] --- import kbnAlertsGroupingObj from './kbn_alerts_grouping.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index b5418d1b665c9..a206741b34670 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-ui-shared'] --- import kbnAlertsUiSharedObj from './kbn_alerts_ui_shared.devdocs.json'; diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx index 97c3e909391a7..1cad124c0348c 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index c36b701433393..18c93cf083b4a 100644 --- a/api_docs/kbn_analytics_collection_utils.mdx +++ b/api_docs/kbn_analytics_collection_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-collection-utils title: "@kbn/analytics-collection-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-collection-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index d7891fe75514d..7f3ef862fb273 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_data_view.mdx b/api_docs/kbn_apm_data_view.mdx index c6d3530168b07..b2224a054dc95 100644 --- a/api_docs/kbn_apm_data_view.mdx +++ b/api_docs/kbn_apm_data_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-data-view title: "@kbn/apm-data-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-data-view plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-data-view'] --- import kbnApmDataViewObj from './kbn_apm_data_view.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index e2e251da6838a..fe696aa48cff8 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace'] --- import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace_client.mdx b/api_docs/kbn_apm_synthtrace_client.mdx index dcd9ef93e8dca..e24bfaa41fb52 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_types.devdocs.json b/api_docs/kbn_apm_types.devdocs.json new file mode 100644 index 0000000000000..ef9b75d32efdc --- /dev/null +++ b/api_docs/kbn_apm_types.devdocs.json @@ -0,0 +1,5073 @@ +{ + "id": "@kbn/apm-types", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Agent", + "type": "Interface", + "tags": [], + "label": "Agent", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/ui/fields/agent.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Agent.ephemeral_id", + "type": "string", + "tags": [], + "label": "ephemeral_id", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/ui/fields/agent.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Agent.name", + "type": "CompoundType", + "tags": [], + "label": "name", + "description": [], + "signature": [ + "\"java\" | \"ruby\" | \"go\" | \"dotnet\" | \"php\" | \"otlp\" | \"android/java\" | \"iOS/swift\" | \"rum-js\" | \"js-base\" | \"nodejs\" | \"python\" | \"opentelemetry/cpp\" | \"opentelemetry/dotnet\" | \"opentelemetry/erlang\" | \"opentelemetry/go\" | \"opentelemetry/java\" | \"opentelemetry/nodejs\" | \"opentelemetry/php\" | \"opentelemetry/python\" | \"opentelemetry/ruby\" | \"opentelemetry/rust\" | \"opentelemetry/swift\" | \"opentelemetry/android\" | \"opentelemetry/webjs\"" + ], + "path": "packages/kbn-apm-types/src/es_schemas/ui/fields/agent.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Agent.version", + "type": "string", + "tags": [], + "label": "version", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/ui/fields/agent.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.APMBaseDoc", + "type": "Interface", + "tags": [], + "label": "APMBaseDoc", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.APMBaseDoc.timestamp", + "type": "string", + "tags": [], + "label": "'@timestamp'", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.APMBaseDoc.agent", + "type": "Object", + "tags": [], + "label": "agent", + "description": [], + "signature": [ + "{ name: string; version: string; }" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.APMBaseDoc.parent", + "type": "Object", + "tags": [], + "label": "parent", + "description": [], + "signature": [ + "{ id: string; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.APMBaseDoc.trace", + "type": "Object", + "tags": [], + "label": "trace", + "description": [], + "signature": [ + "{ id: string; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.APMBaseDoc.labels", + "type": "Object", + "tags": [], + "label": "labels", + "description": [], + "signature": [ + "{ [key: string]: string | number | boolean; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.APMBaseDoc.observer", + "type": "Object", + "tags": [], + "label": "observer", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Observer", + "text": "Observer" + }, + " | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.APMError", + "type": "Interface", + "tags": [], + "label": "APMError", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.APMError", + "text": "APMError" + }, + " extends ", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.ErrorRaw", + "text": "ErrorRaw" + } + ], + "path": "packages/kbn-apm-types/src/es_schemas/ui/apm_error.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.APMError.agent", + "type": "Object", + "tags": [], + "label": "agent", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Agent", + "text": "Agent" + } + ], + "path": "packages/kbn-apm-types/src/es_schemas/ui/apm_error.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Cloud", + "type": "Interface", + "tags": [], + "label": "Cloud", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Cloud.availability_zone", + "type": "string", + "tags": [], + "label": "availability_zone", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Cloud.instance", + "type": "Object", + "tags": [], + "label": "instance", + "description": [], + "signature": [ + "{ name: string; id: string; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Cloud.machine", + "type": "Object", + "tags": [], + "label": "machine", + "description": [], + "signature": [ + "{ type: string; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Cloud.project", + "type": "Object", + "tags": [], + "label": "project", + "description": [], + "signature": [ + "{ id: string; name: string; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Cloud.provider", + "type": "string", + "tags": [], + "label": "provider", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Cloud.region", + "type": "string", + "tags": [], + "label": "region", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Cloud.account", + "type": "Object", + "tags": [], + "label": "account", + "description": [], + "signature": [ + "{ id: string; name: string; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Cloud.image", + "type": "Object", + "tags": [], + "label": "image", + "description": [], + "signature": [ + "{ id: string; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Cloud.service", + "type": "Object", + "tags": [], + "label": "service", + "description": [], + "signature": [ + "{ name: string; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Container", + "type": "Interface", + "tags": [], + "label": "Container", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/container.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Container.id", + "type": "CompoundType", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "string | null | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/container.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Container.image", + "type": "CompoundType", + "tags": [], + "label": "image", + "description": [], + "signature": [ + "string | null | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/container.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.ErrorRaw", + "type": "Interface", + "tags": [], + "label": "ErrorRaw", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.ErrorRaw", + "text": "ErrorRaw" + }, + " extends ", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.APMBaseDoc", + "text": "APMBaseDoc" + } + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.ErrorRaw.processor", + "type": "Object", + "tags": [], + "label": "processor", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Processor", + "text": "Processor" + } + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.ErrorRaw.timestamp", + "type": "Object", + "tags": [], + "label": "timestamp", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.TimestampUs", + "text": "TimestampUs" + } + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.ErrorRaw.transaction", + "type": "Object", + "tags": [], + "label": "transaction", + "description": [], + "signature": [ + "{ id: string; sampled?: boolean | undefined; type: string; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.ErrorRaw.error", + "type": "Object", + "tags": [], + "label": "error", + "description": [], + "signature": [ + "{ id: string; culprit?: string | undefined; grouping_key: string; exception?: ", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Exception", + "text": "Exception" + }, + "[] | undefined; page?: ", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Page", + "text": "Page" + }, + " | undefined; log?: ", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Log", + "text": "Log" + }, + " | undefined; stack_trace?: string | undefined; custom?: Record | undefined; }" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.ErrorRaw.container", + "type": "Object", + "tags": [], + "label": "container", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Container", + "text": "Container" + }, + " | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.ErrorRaw.host", + "type": "Object", + "tags": [], + "label": "host", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Host", + "text": "Host" + }, + " | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.ErrorRaw.http", + "type": "Object", + "tags": [], + "label": "http", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Http", + "text": "Http" + }, + " | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.ErrorRaw.kubernetes", + "type": "Object", + "tags": [], + "label": "kubernetes", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Kubernetes", + "text": "Kubernetes" + }, + " | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.ErrorRaw.process", + "type": "Object", + "tags": [], + "label": "process", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Process", + "text": "Process" + }, + " | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.ErrorRaw.service", + "type": "Object", + "tags": [], + "label": "service", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Service", + "text": "Service" + } + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.ErrorRaw.url", + "type": "Object", + "tags": [], + "label": "url", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Url", + "text": "Url" + }, + " | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.ErrorRaw.user", + "type": "Object", + "tags": [], + "label": "user", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.User", + "text": "User" + }, + " | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Event", + "type": "Interface", + "tags": [], + "label": "Event", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Event", + "text": "Event" + }, + " extends ", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.EventRaw", + "text": "EventRaw" + } + ], + "path": "packages/kbn-apm-types/src/es_schemas/ui/event.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Event.agent", + "type": "Object", + "tags": [], + "label": "agent", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Agent", + "text": "Agent" + } + ], + "path": "packages/kbn-apm-types/src/es_schemas/ui/event.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.EventRaw", + "type": "Interface", + "tags": [], + "label": "EventRaw", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.EventRaw", + "text": "EventRaw" + }, + " extends ", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.APMBaseDoc", + "text": "APMBaseDoc" + } + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/event_raw.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.EventRaw.timestamp", + "type": "Object", + "tags": [], + "label": "timestamp", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.TimestampUs", + "text": "TimestampUs" + } + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/event_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.EventRaw.transaction", + "type": "Object", + "tags": [], + "label": "transaction", + "description": [], + "signature": [ + "{ id: string; sampled?: boolean | undefined; type: string; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/event_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.EventRaw.log", + "type": "Object", + "tags": [], + "label": "log", + "description": [], + "signature": [ + "{ message?: string | undefined; }" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/event_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.EventRaw.event", + "type": "Object", + "tags": [], + "label": "event", + "description": [], + "signature": [ + "{ action: string; category: string; }" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/event_raw.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Exception", + "type": "Interface", + "tags": [], + "label": "Exception", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Exception.attributes", + "type": "Object", + "tags": [], + "label": "attributes", + "description": [], + "signature": [ + "{ response?: string | undefined; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Exception.code", + "type": "string", + "tags": [], + "label": "code", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Exception.message", + "type": "string", + "tags": [], + "label": "message", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Exception.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Exception.module", + "type": "string", + "tags": [], + "label": "module", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Exception.handled", + "type": "CompoundType", + "tags": [], + "label": "handled", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Exception.stacktrace", + "type": "Array", + "tags": [], + "label": "stacktrace", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Stackframe", + "text": "Stackframe" + }, + "[] | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Faas", + "type": "Interface", + "tags": [], + "label": "Faas", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/faas.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Faas.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/faas.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Faas.coldstart", + "type": "CompoundType", + "tags": [], + "label": "coldstart", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/faas.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Faas.execution", + "type": "string", + "tags": [], + "label": "execution", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/faas.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Faas.trigger", + "type": "Object", + "tags": [], + "label": "trigger", + "description": [], + "signature": [ + "{ type?: string | undefined; request_id?: string | undefined; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/faas.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Host", + "type": "Interface", + "tags": [], + "label": "Host", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/host.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Host.architecture", + "type": "string", + "tags": [], + "label": "architecture", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/host.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Host.hostname", + "type": "string", + "tags": [], + "label": "hostname", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/host.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Host.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/host.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Host.ip", + "type": "string", + "tags": [], + "label": "ip", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/host.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Host.os", + "type": "Object", + "tags": [], + "label": "os", + "description": [], + "signature": [ + "{ platform?: string | undefined; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/host.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Http", + "type": "Interface", + "tags": [], + "label": "Http", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/http.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Http.request", + "type": "Object", + "tags": [], + "label": "request", + "description": [], + "signature": [ + "{ [key: string]: unknown; method: string; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/http.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Http.response", + "type": "Object", + "tags": [], + "label": "response", + "description": [], + "signature": [ + "{ [key: string]: unknown; status_code: number; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/http.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Http.version", + "type": "string", + "tags": [], + "label": "version", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/http.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Kubernetes", + "type": "Interface", + "tags": [], + "label": "Kubernetes", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/kubernetes.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Kubernetes.pod", + "type": "Object", + "tags": [], + "label": "pod", + "description": [], + "signature": [ + "{ [key: string]: unknown; uid?: string | null | undefined; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/kubernetes.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Kubernetes.namespace", + "type": "string", + "tags": [], + "label": "namespace", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/kubernetes.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Kubernetes.replicaset", + "type": "Object", + "tags": [], + "label": "replicaset", + "description": [], + "signature": [ + "{ name?: string | undefined; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/kubernetes.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Kubernetes.deployment", + "type": "Object", + "tags": [], + "label": "deployment", + "description": [], + "signature": [ + "{ name?: string | undefined; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/kubernetes.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Kubernetes.container", + "type": "Object", + "tags": [], + "label": "container", + "description": [], + "signature": [ + "{ id?: string | undefined; name?: string | undefined; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/kubernetes.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Log", + "type": "Interface", + "tags": [], + "label": "Log", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Log.message", + "type": "string", + "tags": [], + "label": "message", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Log.stacktrace", + "type": "Array", + "tags": [], + "label": "stacktrace", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Stackframe", + "text": "Stackframe" + }, + "[] | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Observer", + "type": "Interface", + "tags": [], + "label": "Observer", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/observer.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Observer.ephemeral_id", + "type": "string", + "tags": [], + "label": "ephemeral_id", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/observer.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Observer.hostname", + "type": "string", + "tags": [], + "label": "hostname", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/observer.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Observer.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/observer.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Observer.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/observer.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Observer.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/observer.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Observer.version", + "type": "string", + "tags": [], + "label": "version", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/observer.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Observer.version_major", + "type": "number", + "tags": [], + "label": "version_major", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/observer.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Page", + "type": "Interface", + "tags": [], + "label": "Page", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/page.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Page.url", + "type": "string", + "tags": [], + "label": "url", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/page.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Process", + "type": "Interface", + "tags": [], + "label": "Process", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/process.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Process.args", + "type": "Array", + "tags": [], + "label": "args", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/process.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Process.pid", + "type": "number", + "tags": [], + "label": "pid", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/process.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Process.ppid", + "type": "number", + "tags": [], + "label": "ppid", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/process.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Process.title", + "type": "string", + "tags": [], + "label": "title", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/process.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Processor", + "type": "Interface", + "tags": [], + "label": "Processor", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Processor.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "signature": [ + "\"error\"" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Processor.event", + "type": "string", + "tags": [], + "label": "event", + "description": [], + "signature": [ + "\"error\"" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Service", + "type": "Interface", + "tags": [], + "label": "Service", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/service.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Service.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/service.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Service.environment", + "type": "string", + "tags": [], + "label": "environment", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/service.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Service.framework", + "type": "Object", + "tags": [], + "label": "framework", + "description": [], + "signature": [ + "{ name: string; version?: string | undefined; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/service.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Service.node", + "type": "Object", + "tags": [], + "label": "node", + "description": [], + "signature": [ + "{ name?: string | undefined; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/service.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Service.runtime", + "type": "Object", + "tags": [], + "label": "runtime", + "description": [], + "signature": [ + "{ name: string; version: string; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/service.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Service.language", + "type": "Object", + "tags": [], + "label": "language", + "description": [], + "signature": [ + "{ name: string; version?: string | undefined; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/service.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Service.version", + "type": "string", + "tags": [], + "label": "version", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/service.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Span", + "type": "Interface", + "tags": [], + "label": "Span", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Span", + "text": "Span" + }, + " extends ", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.SpanRaw", + "text": "SpanRaw" + } + ], + "path": "packages/kbn-apm-types/src/es_schemas/ui/span.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Span.agent", + "type": "Object", + "tags": [], + "label": "agent", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Agent", + "text": "Agent" + } + ], + "path": "packages/kbn-apm-types/src/es_schemas/ui/span.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SpanLink", + "type": "Interface", + "tags": [], + "label": "SpanLink", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/span_links.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SpanLink.trace", + "type": "Object", + "tags": [], + "label": "trace", + "description": [], + "signature": [ + "{ id: string; }" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/span_links.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SpanLink.span", + "type": "Object", + "tags": [], + "label": "span", + "description": [], + "signature": [ + "{ id: string; }" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/span_links.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SpanRaw", + "type": "Interface", + "tags": [], + "label": "SpanRaw", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.SpanRaw", + "text": "SpanRaw" + }, + " extends ", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.APMBaseDoc", + "text": "APMBaseDoc" + } + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SpanRaw.processor", + "type": "Object", + "tags": [], + "label": "processor", + "description": [], + "signature": [ + "Processor" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SpanRaw.trace", + "type": "Object", + "tags": [], + "label": "trace", + "description": [], + "signature": [ + "{ id: string; }" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SpanRaw.event", + "type": "Object", + "tags": [], + "label": "event", + "description": [], + "signature": [ + "{ outcome?: ", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.EventOutcome", + "text": "EventOutcome" + }, + " | undefined; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SpanRaw.service", + "type": "Object", + "tags": [], + "label": "service", + "description": [], + "signature": [ + "{ name: string; environment?: string | undefined; }" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SpanRaw.span", + "type": "Object", + "tags": [], + "label": "span", + "description": [], + "signature": [ + "{ destination?: { service: { resource: string; }; } | undefined; action?: string | undefined; duration: { us: number; }; id: string; name: string; stacktrace?: ", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Stackframe", + "text": "Stackframe" + }, + "[] | undefined; subtype?: string | undefined; sync?: boolean | undefined; type: string; http?: { url?: { original?: string | undefined; } | undefined; response: { status_code: number; }; method?: string | undefined; } | undefined; db?: { statement?: string | undefined; type?: string | undefined; } | undefined; message?: { queue?: { name: string; } | undefined; age?: { ms: number; } | undefined; body?: string | undefined; headers?: Record | undefined; } | undefined; composite?: { count: number; sum: { us: number; }; compression_strategy: string; } | undefined; links?: ", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.SpanLink", + "text": "SpanLink" + }, + "[] | undefined; }" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SpanRaw.timestamp", + "type": "Object", + "tags": [], + "label": "timestamp", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.TimestampUs", + "text": "TimestampUs" + } + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SpanRaw.transaction", + "type": "Object", + "tags": [], + "label": "transaction", + "description": [], + "signature": [ + "{ id: string; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SpanRaw.child", + "type": "Object", + "tags": [], + "label": "child", + "description": [], + "signature": [ + "{ id: string[]; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SpanRaw.code", + "type": "Object", + "tags": [], + "label": "code", + "description": [], + "signature": [ + "{ stacktrace?: string | undefined; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SpanRaw.http", + "type": "Object", + "tags": [], + "label": "http", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Http", + "text": "Http" + }, + " | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SpanRaw.url", + "type": "Object", + "tags": [], + "label": "url", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Url", + "text": "Url" + }, + " | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TimestampUs", + "type": "Interface", + "tags": [], + "label": "TimestampUs", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/timestamp_us.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TimestampUs.us", + "type": "number", + "tags": [], + "label": "us", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/timestamp_us.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Transaction", + "type": "Interface", + "tags": [], + "label": "Transaction", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Transaction", + "text": "Transaction" + }, + " extends ", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.TransactionRaw", + "text": "TransactionRaw" + } + ], + "path": "packages/kbn-apm-types/src/es_schemas/ui/transaction.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Transaction.agent", + "type": "Object", + "tags": [], + "label": "agent", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Agent", + "text": "Agent" + } + ], + "path": "packages/kbn-apm-types/src/es_schemas/ui/transaction.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Transaction.transaction", + "type": "Object", + "tags": [], + "label": "transaction", + "description": [], + "signature": [ + "InnerTransactionWithName" + ], + "path": "packages/kbn-apm-types/src/es_schemas/ui/transaction.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TransactionRaw", + "type": "Interface", + "tags": [], + "label": "TransactionRaw", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.TransactionRaw", + "text": "TransactionRaw" + }, + " extends ", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.APMBaseDoc", + "text": "APMBaseDoc" + } + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TransactionRaw.processor", + "type": "Object", + "tags": [], + "label": "processor", + "description": [], + "signature": [ + "Processor" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TransactionRaw.timestamp", + "type": "Object", + "tags": [], + "label": "timestamp", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.TimestampUs", + "text": "TimestampUs" + } + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TransactionRaw.trace", + "type": "Object", + "tags": [], + "label": "trace", + "description": [], + "signature": [ + "{ id: string; }" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TransactionRaw.event", + "type": "Object", + "tags": [], + "label": "event", + "description": [], + "signature": [ + "{ outcome?: ", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.EventOutcome", + "text": "EventOutcome" + }, + " | undefined; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TransactionRaw.transaction", + "type": "Object", + "tags": [], + "label": "transaction", + "description": [], + "signature": [ + "{ duration: { us: number; }; id: string; marks?: { agent?: { [name: string]: number; } | undefined; } | undefined; name?: string | undefined; page?: ", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Page", + "text": "Page" + }, + " | undefined; result?: string | undefined; sampled: boolean; span_count?: { started?: number | undefined; dropped?: number | undefined; } | undefined; type: string; custom?: Record | undefined; message?: { queue?: { name: string; } | undefined; age?: { ms: number; } | undefined; body?: string | undefined; headers?: Record | undefined; } | undefined; }" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TransactionRaw.container", + "type": "Object", + "tags": [], + "label": "container", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Container", + "text": "Container" + }, + " | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TransactionRaw.ecs", + "type": "Object", + "tags": [], + "label": "ecs", + "description": [], + "signature": [ + "{ version?: string | undefined; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TransactionRaw.host", + "type": "Object", + "tags": [], + "label": "host", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Host", + "text": "Host" + }, + " | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TransactionRaw.http", + "type": "Object", + "tags": [], + "label": "http", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Http", + "text": "Http" + }, + " | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TransactionRaw.kubernetes", + "type": "Object", + "tags": [], + "label": "kubernetes", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Kubernetes", + "text": "Kubernetes" + }, + " | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TransactionRaw.process", + "type": "Object", + "tags": [], + "label": "process", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Process", + "text": "Process" + }, + " | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TransactionRaw.service", + "type": "Object", + "tags": [], + "label": "service", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Service", + "text": "Service" + } + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TransactionRaw.url", + "type": "Object", + "tags": [], + "label": "url", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Url", + "text": "Url" + }, + " | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TransactionRaw.user", + "type": "Object", + "tags": [], + "label": "user", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.User", + "text": "User" + }, + " | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TransactionRaw.user_agent", + "type": "Object", + "tags": [], + "label": "user_agent", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.UserAgent", + "text": "UserAgent" + }, + " | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TransactionRaw.cloud", + "type": "Object", + "tags": [], + "label": "cloud", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Cloud", + "text": "Cloud" + }, + " | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TransactionRaw.faas", + "type": "Object", + "tags": [], + "label": "faas", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Faas", + "text": "Faas" + }, + " | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TransactionRaw.span", + "type": "Object", + "tags": [], + "label": "span", + "description": [], + "signature": [ + "{ links?: ", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.SpanLink", + "text": "SpanLink" + }, + "[] | undefined; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Url", + "type": "Interface", + "tags": [], + "label": "Url", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/url.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Url.domain", + "type": "string", + "tags": [], + "label": "domain", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/url.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Url.full", + "type": "string", + "tags": [], + "label": "full", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/url.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Url.original", + "type": "string", + "tags": [], + "label": "original", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/url.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.User", + "type": "Interface", + "tags": [], + "label": "User", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/user.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.User.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/user.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.UserAgent", + "type": "Interface", + "tags": [], + "label": "UserAgent", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.UserAgent.device", + "type": "Object", + "tags": [], + "label": "device", + "description": [], + "signature": [ + "{ name: string; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.UserAgent.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.UserAgent.original", + "type": "string", + "tags": [], + "label": "original", + "description": [], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.UserAgent.os", + "type": "Object", + "tags": [], + "label": "os", + "description": [], + "signature": [ + "{ name: string; version?: string | undefined; full?: string | undefined; } | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.UserAgent.version", + "type": "string", + "tags": [], + "label": "version", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.AGENT", + "type": "string", + "tags": [], + "label": "AGENT", + "description": [], + "signature": [ + "\"agent\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.AGENT_ACTIVATION_METHOD", + "type": "string", + "tags": [], + "label": "AGENT_ACTIVATION_METHOD", + "description": [], + "signature": [ + "\"agent.activation_method\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.AGENT_NAME", + "type": "string", + "tags": [], + "label": "AGENT_NAME", + "description": [], + "signature": [ + "\"agent.name\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.AGENT_VERSION", + "type": "string", + "tags": [], + "label": "AGENT_VERSION", + "description": [], + "signature": [ + "\"agent.version\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.AgentName", + "type": "Type", + "tags": [], + "label": "AgentName", + "description": [], + "signature": [ + "\"java\" | \"ruby\" | \"go\" | \"dotnet\" | \"php\" | \"otlp\" | \"android/java\" | \"iOS/swift\" | \"rum-js\" | \"js-base\" | \"nodejs\" | \"python\" | \"opentelemetry/cpp\" | \"opentelemetry/dotnet\" | \"opentelemetry/erlang\" | \"opentelemetry/go\" | \"opentelemetry/java\" | \"opentelemetry/nodejs\" | \"opentelemetry/php\" | \"opentelemetry/python\" | \"opentelemetry/ruby\" | \"opentelemetry/rust\" | \"opentelemetry/swift\" | \"opentelemetry/android\" | \"opentelemetry/webjs\"" + ], + "path": "packages/kbn-elastic-agent-utils/src/agent_names.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.APP_LAUNCH_TIME", + "type": "string", + "tags": [], + "label": "APP_LAUNCH_TIME", + "description": [], + "signature": [ + "\"application.launch.time\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.CHILD_ID", + "type": "string", + "tags": [], + "label": "CHILD_ID", + "description": [], + "signature": [ + "\"child.id\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.CLIENT_GEO_CITY_NAME", + "type": "string", + "tags": [], + "label": "CLIENT_GEO_CITY_NAME", + "description": [], + "signature": [ + "\"client.geo.city_name\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.CLIENT_GEO_COUNTRY_ISO_CODE", + "type": "string", + "tags": [], + "label": "CLIENT_GEO_COUNTRY_ISO_CODE", + "description": [], + "signature": [ + "\"client.geo.country_iso_code\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.CLIENT_GEO_COUNTRY_NAME", + "type": "string", + "tags": [], + "label": "CLIENT_GEO_COUNTRY_NAME", + "description": [], + "signature": [ + "\"client.geo.country_name\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.CLIENT_GEO_REGION_ISO_CODE", + "type": "string", + "tags": [], + "label": "CLIENT_GEO_REGION_ISO_CODE", + "description": [], + "signature": [ + "\"client.geo.region_iso_code\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.CLIENT_GEO_REGION_NAME", + "type": "string", + "tags": [], + "label": "CLIENT_GEO_REGION_NAME", + "description": [], + "signature": [ + "\"client.geo.region_name\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.CLOUD", + "type": "string", + "tags": [], + "label": "CLOUD", + "description": [], + "signature": [ + "\"cloud\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.CLOUD_ACCOUNT_ID", + "type": "string", + "tags": [], + "label": "CLOUD_ACCOUNT_ID", + "description": [], + "signature": [ + "\"cloud.account.id\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.CLOUD_AVAILABILITY_ZONE", + "type": "string", + "tags": [], + "label": "CLOUD_AVAILABILITY_ZONE", + "description": [], + "signature": [ + "\"cloud.availability_zone\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.CLOUD_INSTANCE_ID", + "type": "string", + "tags": [], + "label": "CLOUD_INSTANCE_ID", + "description": [], + "signature": [ + "\"cloud.instance.id\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.CLOUD_INSTANCE_NAME", + "type": "string", + "tags": [], + "label": "CLOUD_INSTANCE_NAME", + "description": [], + "signature": [ + "\"cloud.instance.name\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.CLOUD_MACHINE_TYPE", + "type": "string", + "tags": [], + "label": "CLOUD_MACHINE_TYPE", + "description": [], + "signature": [ + "\"cloud.machine.type\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.CLOUD_PROVIDER", + "type": "string", + "tags": [], + "label": "CLOUD_PROVIDER", + "description": [], + "signature": [ + "\"cloud.provider\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.CLOUD_REGION", + "type": "string", + "tags": [], + "label": "CLOUD_REGION", + "description": [], + "signature": [ + "\"cloud.region\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.CLOUD_SERVICE_NAME", + "type": "string", + "tags": [], + "label": "CLOUD_SERVICE_NAME", + "description": [], + "signature": [ + "\"cloud.service.name\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.CONTAINER", + "type": "string", + "tags": [], + "label": "CONTAINER", + "description": [], + "signature": [ + "\"container\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.CONTAINER_ID", + "type": "string", + "tags": [], + "label": "CONTAINER_ID", + "description": [], + "signature": [ + "\"container.id\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.CONTAINER_IMAGE", + "type": "string", + "tags": [], + "label": "CONTAINER_IMAGE", + "description": [], + "signature": [ + "\"container.image.name\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.DATA_STEAM_TYPE", + "type": "string", + "tags": [], + "label": "DATA_STEAM_TYPE", + "description": [], + "signature": [ + "\"data_stream.type\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.DESTINATION_ADDRESS", + "type": "string", + "tags": [], + "label": "DESTINATION_ADDRESS", + "description": [], + "signature": [ + "\"destination.address\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.DEVICE_MODEL_IDENTIFIER", + "type": "string", + "tags": [], + "label": "DEVICE_MODEL_IDENTIFIER", + "description": [], + "signature": [ + "\"device.model.identifier\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.ElasticAgentName", + "type": "Type", + "tags": [], + "label": "ElasticAgentName", + "description": [ + "\nWe cannot mark these arrays as const and derive their type\nbecause we need to be able to assign them as mutable entities for ES queries." + ], + "signature": [ + "\"java\" | \"ruby\" | \"go\" | \"dotnet\" | \"php\" | \"android/java\" | \"iOS/swift\" | \"rum-js\" | \"js-base\" | \"nodejs\" | \"python\"" + ], + "path": "packages/kbn-elastic-agent-utils/src/agent_names.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.ERROR_CULPRIT", + "type": "string", + "tags": [], + "label": "ERROR_CULPRIT", + "description": [], + "signature": [ + "\"error.culprit\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.ERROR_EXC_HANDLED", + "type": "string", + "tags": [], + "label": "ERROR_EXC_HANDLED", + "description": [], + "signature": [ + "\"error.exception.handled\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.ERROR_EXC_MESSAGE", + "type": "string", + "tags": [], + "label": "ERROR_EXC_MESSAGE", + "description": [], + "signature": [ + "\"error.exception.message\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.ERROR_EXC_TYPE", + "type": "string", + "tags": [], + "label": "ERROR_EXC_TYPE", + "description": [], + "signature": [ + "\"error.exception.type\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.ERROR_EXCEPTION", + "type": "string", + "tags": [], + "label": "ERROR_EXCEPTION", + "description": [], + "signature": [ + "\"error.exception\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.ERROR_GROUP_ID", + "type": "string", + "tags": [], + "label": "ERROR_GROUP_ID", + "description": [], + "signature": [ + "\"error.grouping_key\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.ERROR_GROUP_NAME", + "type": "string", + "tags": [], + "label": "ERROR_GROUP_NAME", + "description": [], + "signature": [ + "\"error.grouping_name\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.ERROR_ID", + "type": "string", + "tags": [], + "label": "ERROR_ID", + "description": [], + "signature": [ + "\"error.id\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.ERROR_LOG_LEVEL", + "type": "string", + "tags": [], + "label": "ERROR_LOG_LEVEL", + "description": [], + "signature": [ + "\"error.log.level\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.ERROR_LOG_MESSAGE", + "type": "string", + "tags": [], + "label": "ERROR_LOG_MESSAGE", + "description": [], + "signature": [ + "\"error.log.message\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.ERROR_PAGE_URL", + "type": "string", + "tags": [], + "label": "ERROR_PAGE_URL", + "description": [], + "signature": [ + "\"error.page.url\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.ERROR_TYPE", + "type": "string", + "tags": [], + "label": "ERROR_TYPE", + "description": [], + "signature": [ + "\"error.type\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.EVENT_NAME", + "type": "string", + "tags": [], + "label": "EVENT_NAME", + "description": [], + "signature": [ + "\"event.name\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.EVENT_OUTCOME", + "type": "string", + "tags": [], + "label": "EVENT_OUTCOME", + "description": [], + "signature": [ + "\"event.outcome\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.EVENT_SUCCESS_COUNT", + "type": "string", + "tags": [], + "label": "EVENT_SUCCESS_COUNT", + "description": [], + "signature": [ + "\"event.success_count\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.EventOutcome", + "type": "Type", + "tags": [], + "label": "EventOutcome", + "description": [], + "signature": [ + "\"unknown\" | \"success\" | \"failure\"" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/event_outcome.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.FAAS_BILLED_DURATION", + "type": "string", + "tags": [], + "label": "FAAS_BILLED_DURATION", + "description": [], + "signature": [ + "\"faas.billed_duration\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.FAAS_COLDSTART", + "type": "string", + "tags": [], + "label": "FAAS_COLDSTART", + "description": [], + "signature": [ + "\"faas.coldstart\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.FAAS_COLDSTART_DURATION", + "type": "string", + "tags": [], + "label": "FAAS_COLDSTART_DURATION", + "description": [], + "signature": [ + "\"faas.coldstart_duration\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.FAAS_DURATION", + "type": "string", + "tags": [], + "label": "FAAS_DURATION", + "description": [], + "signature": [ + "\"faas.duration\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.FAAS_ID", + "type": "string", + "tags": [], + "label": "FAAS_ID", + "description": [], + "signature": [ + "\"faas.id\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.FAAS_NAME", + "type": "string", + "tags": [], + "label": "FAAS_NAME", + "description": [], + "signature": [ + "\"faas.name\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.FAAS_TRIGGER_TYPE", + "type": "string", + "tags": [], + "label": "FAAS_TRIGGER_TYPE", + "description": [], + "signature": [ + "\"faas.trigger.type\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.HOST", + "type": "string", + "tags": [], + "label": "HOST", + "description": [], + "signature": [ + "\"host\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.HOST_ARCHITECTURE", + "type": "string", + "tags": [], + "label": "HOST_ARCHITECTURE", + "description": [], + "signature": [ + "\"host.architecture\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.HOST_HOSTNAME", + "type": "string", + "tags": [], + "label": "HOST_HOSTNAME", + "description": [], + "signature": [ + "\"host.hostname\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.HOST_NAME", + "type": "string", + "tags": [], + "label": "HOST_NAME", + "description": [], + "signature": [ + "\"host.name\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.HOST_OS_PLATFORM", + "type": "string", + "tags": [], + "label": "HOST_OS_PLATFORM", + "description": [], + "signature": [ + "\"host.os.platform\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.HOST_OS_VERSION", + "type": "string", + "tags": [], + "label": "HOST_OS_VERSION", + "description": [], + "signature": [ + "\"host.os.version\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.HTTP_REQUEST_METHOD", + "type": "string", + "tags": [], + "label": "HTTP_REQUEST_METHOD", + "description": [], + "signature": [ + "\"http.request.method\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.HTTP_RESPONSE_STATUS_CODE", + "type": "string", + "tags": [], + "label": "HTTP_RESPONSE_STATUS_CODE", + "description": [], + "signature": [ + "\"http.response.status_code\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.INDEX", + "type": "string", + "tags": [], + "label": "INDEX", + "description": [], + "signature": [ + "\"_index\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.KUBERNETES", + "type": "string", + "tags": [], + "label": "KUBERNETES", + "description": [], + "signature": [ + "\"kubernetes\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.KUBERNETES_POD_NAME", + "type": "string", + "tags": [], + "label": "KUBERNETES_POD_NAME", + "description": [], + "signature": [ + "\"kubernetes.pod.name\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.KUBERNETES_POD_UID", + "type": "string", + "tags": [], + "label": "KUBERNETES_POD_UID", + "description": [], + "signature": [ + "\"kubernetes.pod.uid\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.LABEL_GC", + "type": "string", + "tags": [], + "label": "LABEL_GC", + "description": [], + "signature": [ + "\"labels.gc\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.LABEL_LIFECYCLE_STATE", + "type": "string", + "tags": [], + "label": "LABEL_LIFECYCLE_STATE", + "description": [], + "signature": [ + "\"labels.lifecycle_state\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.LABEL_NAME", + "type": "string", + "tags": [], + "label": "LABEL_NAME", + "description": [], + "signature": [ + "\"labels.name\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.LABEL_TELEMETRY_AUTO_VERSION", + "type": "string", + "tags": [], + "label": "LABEL_TELEMETRY_AUTO_VERSION", + "description": [], + "signature": [ + "\"labels.telemetry_auto_version\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.LABEL_TYPE", + "type": "string", + "tags": [], + "label": "LABEL_TYPE", + "description": [], + "signature": [ + "\"labels.type\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Metric", + "type": "Type", + "tags": [], + "label": "Metric", + "description": [], + "signature": [ + "BaseMetric | ", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.SpanDestinationMetric", + "text": "SpanDestinationMetric" + }, + " | TransactionBreakdownMetric | SpanBreakdownMetric | TransactionDurationMetric | SystemMetric | JVMMetric" + ], + "path": "packages/kbn-apm-types/src/es_schemas/ui/metric.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.METRIC_CGROUP_MEMORY_LIMIT_BYTES", + "type": "string", + "tags": [], + "label": "METRIC_CGROUP_MEMORY_LIMIT_BYTES", + "description": [], + "signature": [ + "\"system.process.cgroup.memory.mem.limit.bytes\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.METRIC_CGROUP_MEMORY_USAGE_BYTES", + "type": "string", + "tags": [], + "label": "METRIC_CGROUP_MEMORY_USAGE_BYTES", + "description": [], + "signature": [ + "\"system.process.cgroup.memory.mem.usage.bytes\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.METRIC_JAVA_GC_COUNT", + "type": "string", + "tags": [], + "label": "METRIC_JAVA_GC_COUNT", + "description": [], + "signature": [ + "\"jvm.gc.count\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.METRIC_JAVA_GC_TIME", + "type": "string", + "tags": [], + "label": "METRIC_JAVA_GC_TIME", + "description": [], + "signature": [ + "\"jvm.gc.time\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.METRIC_JAVA_HEAP_MEMORY_COMMITTED", + "type": "string", + "tags": [], + "label": "METRIC_JAVA_HEAP_MEMORY_COMMITTED", + "description": [], + "signature": [ + "\"jvm.memory.heap.committed\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.METRIC_JAVA_HEAP_MEMORY_MAX", + "type": "string", + "tags": [], + "label": "METRIC_JAVA_HEAP_MEMORY_MAX", + "description": [], + "signature": [ + "\"jvm.memory.heap.max\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.METRIC_JAVA_HEAP_MEMORY_USED", + "type": "string", + "tags": [], + "label": "METRIC_JAVA_HEAP_MEMORY_USED", + "description": [], + "signature": [ + "\"jvm.memory.heap.used\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.METRIC_JAVA_NON_HEAP_MEMORY_COMMITTED", + "type": "string", + "tags": [], + "label": "METRIC_JAVA_NON_HEAP_MEMORY_COMMITTED", + "description": [], + "signature": [ + "\"jvm.memory.non_heap.committed\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.METRIC_JAVA_NON_HEAP_MEMORY_MAX", + "type": "string", + "tags": [], + "label": "METRIC_JAVA_NON_HEAP_MEMORY_MAX", + "description": [], + "signature": [ + "\"jvm.memory.non_heap.max\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.METRIC_JAVA_NON_HEAP_MEMORY_USED", + "type": "string", + "tags": [], + "label": "METRIC_JAVA_NON_HEAP_MEMORY_USED", + "description": [], + "signature": [ + "\"jvm.memory.non_heap.used\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.METRIC_JAVA_THREAD_COUNT", + "type": "string", + "tags": [], + "label": "METRIC_JAVA_THREAD_COUNT", + "description": [], + "signature": [ + "\"jvm.thread.count\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.METRIC_OTEL_JVM_GC_DURATION", + "type": "string", + "tags": [], + "label": "METRIC_OTEL_JVM_GC_DURATION", + "description": [], + "signature": [ + "\"process.runtime.jvm.gc.duration\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.METRIC_OTEL_JVM_PROCESS_CPU_PERCENT", + "type": "string", + "tags": [], + "label": "METRIC_OTEL_JVM_PROCESS_CPU_PERCENT", + "description": [], + "signature": [ + "\"process.runtime.jvm.cpu.utilization\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.METRIC_OTEL_JVM_PROCESS_MEMORY_COMMITTED", + "type": "string", + "tags": [], + "label": "METRIC_OTEL_JVM_PROCESS_MEMORY_COMMITTED", + "description": [], + "signature": [ + "\"process.runtime.jvm.memory.committed\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.METRIC_OTEL_JVM_PROCESS_MEMORY_LIMIT", + "type": "string", + "tags": [], + "label": "METRIC_OTEL_JVM_PROCESS_MEMORY_LIMIT", + "description": [], + "signature": [ + "\"process.runtime.jvm.memory.limit\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.METRIC_OTEL_JVM_PROCESS_MEMORY_USAGE", + "type": "string", + "tags": [], + "label": "METRIC_OTEL_JVM_PROCESS_MEMORY_USAGE", + "description": [], + "signature": [ + "\"process.runtime.jvm.memory.usage\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.METRIC_OTEL_JVM_PROCESS_THREADS_COUNT", + "type": "string", + "tags": [], + "label": "METRIC_OTEL_JVM_PROCESS_THREADS_COUNT", + "description": [], + "signature": [ + "\"process.runtime.jvm.threads.count\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.METRIC_OTEL_JVM_SYSTEM_CPU_PERCENT", + "type": "string", + "tags": [], + "label": "METRIC_OTEL_JVM_SYSTEM_CPU_PERCENT", + "description": [], + "signature": [ + "\"process.runtime.jvm.system.cpu.utilization\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.METRIC_OTEL_SYSTEM_CPU_UTILIZATION", + "type": "string", + "tags": [], + "label": "METRIC_OTEL_SYSTEM_CPU_UTILIZATION", + "description": [], + "signature": [ + "\"system.cpu.utilization\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.METRIC_OTEL_SYSTEM_MEMORY_UTILIZATION", + "type": "string", + "tags": [], + "label": "METRIC_OTEL_SYSTEM_MEMORY_UTILIZATION", + "description": [], + "signature": [ + "\"system.memory.utilization\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.METRIC_PROCESS_CPU_PERCENT", + "type": "string", + "tags": [], + "label": "METRIC_PROCESS_CPU_PERCENT", + "description": [], + "signature": [ + "\"system.process.cpu.total.norm.pct\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.METRIC_SYSTEM_CPU_PERCENT", + "type": "string", + "tags": [], + "label": "METRIC_SYSTEM_CPU_PERCENT", + "description": [], + "signature": [ + "\"system.cpu.total.norm.pct\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.METRIC_SYSTEM_FREE_MEMORY", + "type": "string", + "tags": [], + "label": "METRIC_SYSTEM_FREE_MEMORY", + "description": [], + "signature": [ + "\"system.memory.actual.free\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.METRIC_SYSTEM_TOTAL_MEMORY", + "type": "string", + "tags": [], + "label": "METRIC_SYSTEM_TOTAL_MEMORY", + "description": [], + "signature": [ + "\"system.memory.total\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.MetricRaw", + "type": "Type", + "tags": [], + "label": "MetricRaw", + "description": [], + "signature": [ + "BaseMetric | ", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.SpanDestinationMetric", + "text": "SpanDestinationMetric" + }, + " | TransactionBreakdownMetric | SpanBreakdownMetric | TransactionDurationMetric | SystemMetric | JVMMetric" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/metric_raw.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.METRICSET_INTERVAL", + "type": "string", + "tags": [], + "label": "METRICSET_INTERVAL", + "description": [], + "signature": [ + "\"metricset.interval\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.METRICSET_NAME", + "type": "string", + "tags": [], + "label": "METRICSET_NAME", + "description": [], + "signature": [ + "\"metricset.name\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.NETWORK_CONNECTION_TYPE", + "type": "string", + "tags": [], + "label": "NETWORK_CONNECTION_TYPE", + "description": [], + "signature": [ + "\"network.connection.type\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.OBSERVER_HOSTNAME", + "type": "string", + "tags": [], + "label": "OBSERVER_HOSTNAME", + "description": [], + "signature": [ + "\"observer.hostname\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.OBSERVER_LISTENING", + "type": "string", + "tags": [], + "label": "OBSERVER_LISTENING", + "description": [], + "signature": [ + "\"observer.listening\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.OpenTelemetryAgentName", + "type": "Type", + "tags": [], + "label": "OpenTelemetryAgentName", + "description": [], + "signature": [ + "\"otlp\" | \"opentelemetry/cpp\" | \"opentelemetry/dotnet\" | \"opentelemetry/erlang\" | \"opentelemetry/go\" | \"opentelemetry/java\" | \"opentelemetry/nodejs\" | \"opentelemetry/php\" | \"opentelemetry/python\" | \"opentelemetry/ruby\" | \"opentelemetry/rust\" | \"opentelemetry/swift\" | \"opentelemetry/android\" | \"opentelemetry/webjs\"" + ], + "path": "packages/kbn-elastic-agent-utils/src/agent_names.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.PARENT_ID", + "type": "string", + "tags": [], + "label": "PARENT_ID", + "description": [], + "signature": [ + "\"parent.id\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.PROCESSOR_EVENT", + "type": "string", + "tags": [], + "label": "PROCESSOR_EVENT", + "description": [], + "signature": [ + "\"processor.event\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SERVICE", + "type": "string", + "tags": [], + "label": "SERVICE", + "description": [], + "signature": [ + "\"service\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SERVICE_ENVIRONMENT", + "type": "string", + "tags": [], + "label": "SERVICE_ENVIRONMENT", + "description": [], + "signature": [ + "\"service.environment\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SERVICE_FRAMEWORK_NAME", + "type": "string", + "tags": [], + "label": "SERVICE_FRAMEWORK_NAME", + "description": [], + "signature": [ + "\"service.framework.name\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SERVICE_FRAMEWORK_VERSION", + "type": "string", + "tags": [], + "label": "SERVICE_FRAMEWORK_VERSION", + "description": [], + "signature": [ + "\"service.framework.version\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SERVICE_LANGUAGE_NAME", + "type": "string", + "tags": [], + "label": "SERVICE_LANGUAGE_NAME", + "description": [], + "signature": [ + "\"service.language.name\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SERVICE_LANGUAGE_VERSION", + "type": "string", + "tags": [], + "label": "SERVICE_LANGUAGE_VERSION", + "description": [], + "signature": [ + "\"service.language.version\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SERVICE_NAME", + "type": "string", + "tags": [], + "label": "SERVICE_NAME", + "description": [], + "signature": [ + "\"service.name\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SERVICE_NODE_NAME", + "type": "string", + "tags": [], + "label": "SERVICE_NODE_NAME", + "description": [], + "signature": [ + "\"service.node.name\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SERVICE_OVERFLOW_COUNT", + "type": "string", + "tags": [], + "label": "SERVICE_OVERFLOW_COUNT", + "description": [], + "signature": [ + "\"service_transaction.aggregation.overflow_count\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SERVICE_RUNTIME_NAME", + "type": "string", + "tags": [], + "label": "SERVICE_RUNTIME_NAME", + "description": [], + "signature": [ + "\"service.runtime.name\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SERVICE_RUNTIME_VERSION", + "type": "string", + "tags": [], + "label": "SERVICE_RUNTIME_VERSION", + "description": [], + "signature": [ + "\"service.runtime.version\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SERVICE_TARGET_TYPE", + "type": "string", + "tags": [], + "label": "SERVICE_TARGET_TYPE", + "description": [], + "signature": [ + "\"service.target.type\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SERVICE_VERSION", + "type": "string", + "tags": [], + "label": "SERVICE_VERSION", + "description": [], + "signature": [ + "\"service.version\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SESSION_ID", + "type": "string", + "tags": [], + "label": "SESSION_ID", + "description": [], + "signature": [ + "\"session.id\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SPAN_ACTION", + "type": "string", + "tags": [], + "label": "SPAN_ACTION", + "description": [], + "signature": [ + "\"span.action\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SPAN_COMPOSITE_COMPRESSION_STRATEGY", + "type": "string", + "tags": [], + "label": "SPAN_COMPOSITE_COMPRESSION_STRATEGY", + "description": [], + "signature": [ + "\"span.composite.compression_strategy\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SPAN_COMPOSITE_COUNT", + "type": "string", + "tags": [], + "label": "SPAN_COMPOSITE_COUNT", + "description": [], + "signature": [ + "\"span.composite.count\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SPAN_COMPOSITE_SUM", + "type": "string", + "tags": [], + "label": "SPAN_COMPOSITE_SUM", + "description": [], + "signature": [ + "\"span.composite.sum.us\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SPAN_DESTINATION_SERVICE_RESOURCE", + "type": "string", + "tags": [], + "label": "SPAN_DESTINATION_SERVICE_RESOURCE", + "description": [], + "signature": [ + "\"span.destination.service.resource\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SPAN_DESTINATION_SERVICE_RESPONSE_TIME_COUNT", + "type": "string", + "tags": [], + "label": "SPAN_DESTINATION_SERVICE_RESPONSE_TIME_COUNT", + "description": [], + "signature": [ + "\"span.destination.service.response_time.count\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SPAN_DESTINATION_SERVICE_RESPONSE_TIME_SUM", + "type": "string", + "tags": [], + "label": "SPAN_DESTINATION_SERVICE_RESPONSE_TIME_SUM", + "description": [], + "signature": [ + "\"span.destination.service.response_time.sum.us\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SPAN_DURATION", + "type": "string", + "tags": [], + "label": "SPAN_DURATION", + "description": [], + "signature": [ + "\"span.duration.us\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SPAN_ID", + "type": "string", + "tags": [], + "label": "SPAN_ID", + "description": [], + "signature": [ + "\"span.id\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SPAN_LINKS", + "type": "string", + "tags": [], + "label": "SPAN_LINKS", + "description": [], + "signature": [ + "\"span.links\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SPAN_LINKS_SPAN_ID", + "type": "string", + "tags": [], + "label": "SPAN_LINKS_SPAN_ID", + "description": [], + "signature": [ + "\"span.links.span.id\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SPAN_LINKS_TRACE_ID", + "type": "string", + "tags": [], + "label": "SPAN_LINKS_TRACE_ID", + "description": [], + "signature": [ + "\"span.links.trace.id\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SPAN_NAME", + "type": "string", + "tags": [], + "label": "SPAN_NAME", + "description": [], + "signature": [ + "\"span.name\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SPAN_SELF_TIME_SUM", + "type": "string", + "tags": [], + "label": "SPAN_SELF_TIME_SUM", + "description": [], + "signature": [ + "\"span.self_time.sum.us\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SPAN_SUBTYPE", + "type": "string", + "tags": [], + "label": "SPAN_SUBTYPE", + "description": [], + "signature": [ + "\"span.subtype\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SPAN_SYNC", + "type": "string", + "tags": [], + "label": "SPAN_SYNC", + "description": [], + "signature": [ + "\"span.sync\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SPAN_TYPE", + "type": "string", + "tags": [], + "label": "SPAN_TYPE", + "description": [], + "signature": [ + "\"span.type\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.SpanDestinationMetric", + "type": "Type", + "tags": [], + "label": "SpanDestinationMetric", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.APMBaseDoc", + "text": "APMBaseDoc" + }, + " & { processor: { name: \"metric\"; event: \"metric\"; }; cloud?: ", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Cloud", + "text": "Cloud" + }, + " | undefined; container?: ", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Container", + "text": "Container" + }, + " | undefined; kubernetes?: ", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Kubernetes", + "text": "Kubernetes" + }, + " | undefined; service?: ", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Service", + "text": "Service" + }, + " | undefined; host?: ", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Host", + "text": "Host" + }, + " | undefined; } & { span: { destination: { service: { resource: string; response_time: { count: number; sum: { us: number; }; }; }; }; }; }" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/metric_raw.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.Stackframe", + "type": "Type", + "tags": [], + "label": "Stackframe", + "description": [], + "signature": [ + "StackframeBase | ", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.StackframeWithLineContext", + "text": "StackframeWithLineContext" + } + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/stackframe.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.StackframeWithLineContext", + "type": "Type", + "tags": [], + "label": "StackframeWithLineContext", + "description": [], + "signature": [ + "StackframeBase & { line: Line & { context: string; }; }" + ], + "path": "packages/kbn-apm-types/src/es_schemas/raw/fields/stackframe.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TIER", + "type": "string", + "tags": [], + "label": "TIER", + "description": [], + "signature": [ + "\"_tier\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TIMESTAMP", + "type": "string", + "tags": [], + "label": "TIMESTAMP", + "description": [], + "signature": [ + "\"timestamp.us\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TRACE_ID", + "type": "string", + "tags": [], + "label": "TRACE_ID", + "description": [], + "signature": [ + "\"trace.id\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TRANSACTION_DURATION", + "type": "string", + "tags": [], + "label": "TRANSACTION_DURATION", + "description": [], + "signature": [ + "\"transaction.duration.us\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TRANSACTION_DURATION_HISTOGRAM", + "type": "string", + "tags": [], + "label": "TRANSACTION_DURATION_HISTOGRAM", + "description": [], + "signature": [ + "\"transaction.duration.histogram\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TRANSACTION_DURATION_SUMMARY", + "type": "string", + "tags": [], + "label": "TRANSACTION_DURATION_SUMMARY", + "description": [], + "signature": [ + "\"transaction.duration.summary\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TRANSACTION_FAILURE_COUNT", + "type": "string", + "tags": [], + "label": "TRANSACTION_FAILURE_COUNT", + "description": [], + "signature": [ + "\"transaction.failure_count\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TRANSACTION_ID", + "type": "string", + "tags": [], + "label": "TRANSACTION_ID", + "description": [], + "signature": [ + "\"transaction.id\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TRANSACTION_NAME", + "type": "string", + "tags": [], + "label": "TRANSACTION_NAME", + "description": [], + "signature": [ + "\"transaction.name\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TRANSACTION_OVERFLOW_COUNT", + "type": "string", + "tags": [], + "label": "TRANSACTION_OVERFLOW_COUNT", + "description": [], + "signature": [ + "\"transaction.aggregation.overflow_count\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TRANSACTION_PAGE_URL", + "type": "string", + "tags": [], + "label": "TRANSACTION_PAGE_URL", + "description": [], + "signature": [ + "\"transaction.page.url\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TRANSACTION_PROFILER_STACK_TRACE_IDS", + "type": "string", + "tags": [], + "label": "TRANSACTION_PROFILER_STACK_TRACE_IDS", + "description": [], + "signature": [ + "\"transaction.profiler_stack_trace_ids\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TRANSACTION_RESULT", + "type": "string", + "tags": [], + "label": "TRANSACTION_RESULT", + "description": [], + "signature": [ + "\"transaction.result\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TRANSACTION_ROOT", + "type": "string", + "tags": [], + "label": "TRANSACTION_ROOT", + "description": [], + "signature": [ + "\"transaction.root\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TRANSACTION_SAMPLED", + "type": "string", + "tags": [], + "label": "TRANSACTION_SAMPLED", + "description": [], + "signature": [ + "\"transaction.sampled\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TRANSACTION_SUCCESS_COUNT", + "type": "string", + "tags": [], + "label": "TRANSACTION_SUCCESS_COUNT", + "description": [], + "signature": [ + "\"transaction.success_count\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.TRANSACTION_TYPE", + "type": "string", + "tags": [], + "label": "TRANSACTION_TYPE", + "description": [], + "signature": [ + "\"transaction.type\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.URL_FULL", + "type": "string", + "tags": [], + "label": "URL_FULL", + "description": [], + "signature": [ + "\"url.full\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.USER_AGENT_NAME", + "type": "string", + "tags": [], + "label": "USER_AGENT_NAME", + "description": [], + "signature": [ + "\"user_agent.name\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.USER_AGENT_ORIGINAL", + "type": "string", + "tags": [], + "label": "USER_AGENT_ORIGINAL", + "description": [], + "signature": [ + "\"user_agent.original\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.USER_ID", + "type": "string", + "tags": [], + "label": "USER_ID", + "description": [], + "signature": [ + "\"user.id\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.VALUE_OTEL_JVM_PROCESS_MEMORY_HEAP", + "type": "string", + "tags": [], + "label": "VALUE_OTEL_JVM_PROCESS_MEMORY_HEAP", + "description": [], + "signature": [ + "\"heap\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.VALUE_OTEL_JVM_PROCESS_MEMORY_NON_HEAP", + "type": "string", + "tags": [], + "label": "VALUE_OTEL_JVM_PROCESS_MEMORY_NON_HEAP", + "description": [], + "signature": [ + "\"non_heap\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_apm_types.mdx b/api_docs/kbn_apm_types.mdx new file mode 100644 index 0000000000000..26da65b58012b --- /dev/null +++ b/api_docs/kbn_apm_types.mdx @@ -0,0 +1,33 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibKbnApmTypesPluginApi +slug: /kibana-dev-docs/api/kbn-apm-types +title: "@kbn/apm-types" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/apm-types plugin +date: 2024-08-02 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-types'] +--- +import kbnApmTypesObj from './kbn_apm_types.devdocs.json'; + + + +Contact [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 316 | 0 | 315 | 0 | + +## Common + +### Interfaces + + +### Consts, variables and types + + diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index 11fc4c3aaca31..86ab90462fb35 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_avc_banner.devdocs.json b/api_docs/kbn_avc_banner.devdocs.json index e86dac6904afb..84622adb07ab7 100644 --- a/api_docs/kbn_avc_banner.devdocs.json +++ b/api_docs/kbn_avc_banner.devdocs.json @@ -35,6 +35,23 @@ ], "returnComment": [], "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/avc-banner", + "id": "def-public.useIsStillYear2024", + "type": "Function", + "tags": [], + "label": "useIsStillYear2024", + "description": [], + "signature": [ + "() => boolean" + ], + "path": "packages/kbn-avc-banner/src/index.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false } ], "interfaces": [], diff --git a/api_docs/kbn_avc_banner.mdx b/api_docs/kbn_avc_banner.mdx index 77f658c1aa28b..14b2e62e75827 100644 --- a/api_docs/kbn_avc_banner.mdx +++ b/api_docs/kbn_avc_banner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-avc-banner title: "@kbn/avc-banner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/avc-banner plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/avc-banner'] --- import kbnAvcBannerObj from './kbn_avc_banner.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-defend-workflows](https://github.com/orgs/elastic/tea | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 2 | 0 | 2 | 0 | +| 3 | 0 | 3 | 0 | ## Client diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index 3963e33e3f91d..f136f0a162c36 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_bfetch_error.mdx b/api_docs/kbn_bfetch_error.mdx index 7979684006e64..22d8b2b43a96d 100644 --- a/api_docs/kbn_bfetch_error.mdx +++ b/api_docs/kbn_bfetch_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-bfetch-error title: "@kbn/bfetch-error" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/bfetch-error plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/bfetch-error'] --- import kbnBfetchErrorObj from './kbn_bfetch_error.devdocs.json'; diff --git a/api_docs/kbn_calculate_auto.mdx b/api_docs/kbn_calculate_auto.mdx index cb51561961230..7d7bb6a960054 100644 --- a/api_docs/kbn_calculate_auto.mdx +++ b/api_docs/kbn_calculate_auto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-auto title: "@kbn/calculate-auto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-auto plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-auto'] --- import kbnCalculateAutoObj from './kbn_calculate_auto.devdocs.json'; diff --git a/api_docs/kbn_calculate_width_from_char_count.mdx b/api_docs/kbn_calculate_width_from_char_count.mdx index 4ea28e92020d7..fa80e34b219c1 100644 --- a/api_docs/kbn_calculate_width_from_char_count.mdx +++ b/api_docs/kbn_calculate_width_from_char_count.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-width-from-char-count title: "@kbn/calculate-width-from-char-count" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-width-from-char-count plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-width-from-char-count'] --- import kbnCalculateWidthFromCharCountObj from './kbn_calculate_width_from_char_count.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index dc0b7573ccbd9..a64b85e0c497b 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index 7c73dede68129..059046e2874ae 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cell-actions'] --- import kbnCellActionsObj from './kbn_cell_actions.devdocs.json'; diff --git a/api_docs/kbn_chart_expressions_common.mdx b/api_docs/kbn_chart_expressions_common.mdx index 1bee56d7998c1..badf258a62114 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-expressions-common'] --- import kbnChartExpressionsCommonObj from './kbn_chart_expressions_common.devdocs.json'; diff --git a/api_docs/kbn_chart_icons.mdx b/api_docs/kbn_chart_icons.mdx index 820b98339caef..0453afbd7f356 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-icons'] --- import kbnChartIconsObj from './kbn_chart_icons.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_core.mdx b/api_docs/kbn_ci_stats_core.mdx index fd5581972dcb4..264b646ac3266 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-core'] --- import kbnCiStatsCoreObj from './kbn_ci_stats_core.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_performance_metrics.mdx b/api_docs/kbn_ci_stats_performance_metrics.mdx index 7686d6d38cff2..4f473f435beb4 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-performance-metrics'] --- import kbnCiStatsPerformanceMetricsObj from './kbn_ci_stats_performance_metrics.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_reporter.mdx b/api_docs/kbn_ci_stats_reporter.mdx index 46b425339690c..2d36adf2fef6c 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-reporter'] --- import kbnCiStatsReporterObj from './kbn_ci_stats_reporter.devdocs.json'; diff --git a/api_docs/kbn_cli_dev_mode.mdx b/api_docs/kbn_cli_dev_mode.mdx index 00c87906ea5a3..f5b5faae38d96 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index 8036fbb79e18f..cab2d009c3d77 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mock.mdx b/api_docs/kbn_code_editor_mock.mdx index bd352fb754b62..893cac2204124 100644 --- a/api_docs/kbn_code_editor_mock.mdx +++ b/api_docs/kbn_code_editor_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mock title: "@kbn/code-editor-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mock plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mock'] --- import kbnCodeEditorMockObj from './kbn_code_editor_mock.devdocs.json'; diff --git a/api_docs/kbn_code_owners.mdx b/api_docs/kbn_code_owners.mdx index b3ce4e08512ca..a393ba02af280 100644 --- a/api_docs/kbn_code_owners.mdx +++ b/api_docs/kbn_code_owners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-owners title: "@kbn/code-owners" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-owners plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-owners'] --- import kbnCodeOwnersObj from './kbn_code_owners.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index 9a5b94b724820..97d9e2a5f4d38 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring'] --- import kbnColoringObj from './kbn_coloring.devdocs.json'; diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx index ebfc90d0984e4..17fa284f2cad9 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config'] --- import kbnConfigObj from './kbn_config.devdocs.json'; diff --git a/api_docs/kbn_config_mocks.mdx b/api_docs/kbn_config_mocks.mdx index 6f371dc959cbb..25aea0984dbee 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks'] --- import kbnConfigMocksObj from './kbn_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx index a08ece7b7cab8..30f39e3f4cd5c 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-schema'] --- import kbnConfigSchemaObj from './kbn_config_schema.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_editor.mdx b/api_docs/kbn_content_management_content_editor.mdx index 391ff1a604c7d..64d782e27990e 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index 22e49932c4098..d31e5c4c9226a 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-tabbed-table-list-view'] --- import kbnContentManagementTabbedTableListViewObj from './kbn_content_management_tabbed_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view.mdx b/api_docs/kbn_content_management_table_list_view.mdx index 188e53504bb7e..035a1051cb340 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view'] --- import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_common.mdx b/api_docs/kbn_content_management_table_list_view_common.mdx index 02a3120275cb8..34ca76757517f 100644 --- a/api_docs/kbn_content_management_table_list_view_common.mdx +++ b/api_docs/kbn_content_management_table_list_view_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-common title: "@kbn/content-management-table-list-view-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-common plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-common'] --- import kbnContentManagementTableListViewCommonObj from './kbn_content_management_table_list_view_common.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index d8fbf620b43b1..a97d4f2b42742 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_user_profiles.mdx b/api_docs/kbn_content_management_user_profiles.mdx index cabf0c10e03dc..ced18d2e8b573 100644 --- a/api_docs/kbn_content_management_user_profiles.mdx +++ b/api_docs/kbn_content_management_user_profiles.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-user-profiles title: "@kbn/content-management-user-profiles" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-user-profiles plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-user-profiles'] --- import kbnContentManagementUserProfilesObj from './kbn_content_management_user_profiles.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index a917d0fc31164..8e649f8cb464f 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-utils'] --- import kbnContentManagementUtilsObj from './kbn_content_management_utils.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser.devdocs.json b/api_docs/kbn_core_analytics_browser.devdocs.json index 2ff35482ac18e..93fb88d726608 100644 --- a/api_docs/kbn_core_analytics_browser.devdocs.json +++ b/api_docs/kbn_core_analytics_browser.devdocs.json @@ -626,6 +626,18 @@ "plugin": "@kbn/cloud", "path": "packages/cloud/connection_details/kibana/kibana_connection_details_provider.tsx" }, + { + "plugin": "@kbn/shared-ux-chrome-navigation", + "path": "packages/shared-ux/chrome/navigation/src/analytics/event_tracker.ts" + }, + { + "plugin": "@kbn/shared-ux-chrome-navigation", + "path": "packages/shared-ux/chrome/navigation/src/services.tsx" + }, + { + "plugin": "spaces", + "path": "x-pack/plugins/spaces/public/analytics/event_tracker.ts" + }, { "plugin": "observabilityAIAssistant", "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/utils/recall/recall_and_score.ts" @@ -974,10 +986,18 @@ "plugin": "observabilityOnboarding", "path": "x-pack/plugins/observability_solution/observability_onboarding/public/application/app.tsx" }, + { + "plugin": "spaces", + "path": "x-pack/plugins/spaces/public/management/management_service.test.ts" + }, { "plugin": "observabilityAIAssistant", "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_chat_service.test.ts" }, + { + "plugin": "@kbn/shared-ux-chrome-navigation", + "path": "packages/shared-ux/chrome/navigation/mocks/storybook.ts" + }, { "plugin": "@kbn/core-analytics-browser-mocks", "path": "packages/core/analytics/core-analytics-browser-mocks/src/analytics_service.mock.ts" @@ -1596,6 +1616,10 @@ "plugin": "licensing", "path": "x-pack/plugins/licensing/common/register_analytics_context_provider.ts" }, + { + "plugin": "spaces", + "path": "x-pack/plugins/spaces/public/analytics/register_analytics_context.ts" + }, { "plugin": "security", "path": "x-pack/plugins/security/public/analytics/register_user_context.ts" diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index b5b2e3d91fd06..ffa4481066874 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser'] --- import kbnCoreAnalyticsBrowserObj from './kbn_core_analytics_browser.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_internal.mdx b/api_docs/kbn_core_analytics_browser_internal.mdx index c56c48961098f..21723c8490fce 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-internal'] --- import kbnCoreAnalyticsBrowserInternalObj from './kbn_core_analytics_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_mocks.mdx b/api_docs/kbn_core_analytics_browser_mocks.mdx index bfba4c9373fbf..32d2620dca3a9 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-mocks'] --- import kbnCoreAnalyticsBrowserMocksObj from './kbn_core_analytics_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server.devdocs.json b/api_docs/kbn_core_analytics_server.devdocs.json index d88810492946d..66392709bde01 100644 --- a/api_docs/kbn_core_analytics_server.devdocs.json +++ b/api_docs/kbn_core_analytics_server.devdocs.json @@ -634,6 +634,18 @@ "plugin": "@kbn/cloud", "path": "packages/cloud/connection_details/kibana/kibana_connection_details_provider.tsx" }, + { + "plugin": "@kbn/shared-ux-chrome-navigation", + "path": "packages/shared-ux/chrome/navigation/src/analytics/event_tracker.ts" + }, + { + "plugin": "@kbn/shared-ux-chrome-navigation", + "path": "packages/shared-ux/chrome/navigation/src/services.tsx" + }, + { + "plugin": "spaces", + "path": "x-pack/plugins/spaces/public/analytics/event_tracker.ts" + }, { "plugin": "observabilityAIAssistant", "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/utils/recall/recall_and_score.ts" @@ -982,10 +994,18 @@ "plugin": "observabilityOnboarding", "path": "x-pack/plugins/observability_solution/observability_onboarding/public/application/app.tsx" }, + { + "plugin": "spaces", + "path": "x-pack/plugins/spaces/public/management/management_service.test.ts" + }, { "plugin": "observabilityAIAssistant", "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_chat_service.test.ts" }, + { + "plugin": "@kbn/shared-ux-chrome-navigation", + "path": "packages/shared-ux/chrome/navigation/mocks/storybook.ts" + }, { "plugin": "@kbn/core-analytics-browser-mocks", "path": "packages/core/analytics/core-analytics-browser-mocks/src/analytics_service.mock.ts" @@ -1604,6 +1624,10 @@ "plugin": "licensing", "path": "x-pack/plugins/licensing/common/register_analytics_context_provider.ts" }, + { + "plugin": "spaces", + "path": "x-pack/plugins/spaces/public/analytics/register_analytics_context.ts" + }, { "plugin": "security", "path": "x-pack/plugins/security/public/analytics/register_user_context.ts" diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx index a3c023118b0ba..2a0f7fde69f32 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server'] --- import kbnCoreAnalyticsServerObj from './kbn_core_analytics_server.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_internal.mdx b/api_docs/kbn_core_analytics_server_internal.mdx index 7905d0f914028..aff70b43f5a3d 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-internal'] --- import kbnCoreAnalyticsServerInternalObj from './kbn_core_analytics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_mocks.mdx b/api_docs/kbn_core_analytics_server_mocks.mdx index 55091cf7ce397..155f6137d2101 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-mocks'] --- import kbnCoreAnalyticsServerMocksObj from './kbn_core_analytics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser.mdx b/api_docs/kbn_core_application_browser.mdx index 55701f01cd9a0..6f842059edd21 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser'] --- import kbnCoreApplicationBrowserObj from './kbn_core_application_browser.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_internal.mdx b/api_docs/kbn_core_application_browser_internal.mdx index 16e694f675ada..6875f6909b897 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-internal'] --- import kbnCoreApplicationBrowserInternalObj from './kbn_core_application_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_mocks.mdx b/api_docs/kbn_core_application_browser_mocks.mdx index eff713f8e2129..d4a3f98f1dbeb 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-mocks'] --- import kbnCoreApplicationBrowserMocksObj from './kbn_core_application_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_common.mdx b/api_docs/kbn_core_application_common.mdx index 6c20af0d4b716..22c88707b0cc7 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-common'] --- import kbnCoreApplicationCommonObj from './kbn_core_application_common.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_internal.mdx b/api_docs/kbn_core_apps_browser_internal.mdx index 85adee9fccc28..d38963643a503 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-internal'] --- import kbnCoreAppsBrowserInternalObj from './kbn_core_apps_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_mocks.mdx b/api_docs/kbn_core_apps_browser_mocks.mdx index 8e7b1b4cdd4ba..3caae162641d9 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-mocks'] --- import kbnCoreAppsBrowserMocksObj from './kbn_core_apps_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_apps_server_internal.mdx b/api_docs/kbn_core_apps_server_internal.mdx index bc4eddec94574..b09ca8d33e3dc 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-server-internal'] --- import kbnCoreAppsServerInternalObj from './kbn_core_apps_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_browser_mocks.mdx b/api_docs/kbn_core_base_browser_mocks.mdx index 671091c5b3e09..4e14c4d4238af 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-browser-mocks'] --- import kbnCoreBaseBrowserMocksObj from './kbn_core_base_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_base_common.mdx b/api_docs/kbn_core_base_common.mdx index 23fc874794842..e7c0fd85d334a 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-common'] --- import kbnCoreBaseCommonObj from './kbn_core_base_common.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_internal.mdx b/api_docs/kbn_core_base_server_internal.mdx index 70be07ac048d0..cc49ab56c4a6d 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-internal'] --- import kbnCoreBaseServerInternalObj from './kbn_core_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_mocks.mdx b/api_docs/kbn_core_base_server_mocks.mdx index 2fdcaac2bc28b..6852ee6709ed9 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-mocks'] --- import kbnCoreBaseServerMocksObj from './kbn_core_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_browser_mocks.mdx b/api_docs/kbn_core_capabilities_browser_mocks.mdx index 995ec4c0c7215..bc57f09b614b0 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-browser-mocks'] --- import kbnCoreCapabilitiesBrowserMocksObj from './kbn_core_capabilities_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_common.mdx b/api_docs/kbn_core_capabilities_common.mdx index 18a0249793d06..a18aa41d006cd 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-common'] --- import kbnCoreCapabilitiesCommonObj from './kbn_core_capabilities_common.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server.mdx b/api_docs/kbn_core_capabilities_server.mdx index a82dafb111cb2..45a70cf1775ee 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server'] --- import kbnCoreCapabilitiesServerObj from './kbn_core_capabilities_server.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server_mocks.mdx b/api_docs/kbn_core_capabilities_server_mocks.mdx index 511ad134eb3ee..11965b613298a 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server-mocks'] --- import kbnCoreCapabilitiesServerMocksObj from './kbn_core_capabilities_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser.mdx b/api_docs/kbn_core_chrome_browser.mdx index 9ea4040b2be4e..f1770f9d191ed 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser'] --- import kbnCoreChromeBrowserObj from './kbn_core_chrome_browser.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser_mocks.mdx b/api_docs/kbn_core_chrome_browser_mocks.mdx index ad230e21b0d49..1c4972c4b704a 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser-mocks'] --- import kbnCoreChromeBrowserMocksObj from './kbn_core_chrome_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_config_server_internal.mdx b/api_docs/kbn_core_config_server_internal.mdx index c0142235a9289..eb3a858816d65 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-config-server-internal'] --- import kbnCoreConfigServerInternalObj from './kbn_core_config_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser.mdx b/api_docs/kbn_core_custom_branding_browser.mdx index a28c2fe2d952d..79174bef7000f 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser'] --- import kbnCoreCustomBrandingBrowserObj from './kbn_core_custom_branding_browser.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_internal.mdx b/api_docs/kbn_core_custom_branding_browser_internal.mdx index aa0cfc36dc686..55240fd6bb63c 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-internal'] --- import kbnCoreCustomBrandingBrowserInternalObj from './kbn_core_custom_branding_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_mocks.mdx b/api_docs/kbn_core_custom_branding_browser_mocks.mdx index 9f274cb1bfa4c..eea9677cf0c9e 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-mocks'] --- import kbnCoreCustomBrandingBrowserMocksObj from './kbn_core_custom_branding_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_common.mdx b/api_docs/kbn_core_custom_branding_common.mdx index b4fcefb84695e..e5dd5edb01149 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-common'] --- import kbnCoreCustomBrandingCommonObj from './kbn_core_custom_branding_common.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server.mdx b/api_docs/kbn_core_custom_branding_server.mdx index a85323730c90b..86c1c06ca340f 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server'] --- import kbnCoreCustomBrandingServerObj from './kbn_core_custom_branding_server.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_internal.mdx b/api_docs/kbn_core_custom_branding_server_internal.mdx index 98f6a2cd33e97..c0f1f83edd785 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-internal'] --- import kbnCoreCustomBrandingServerInternalObj from './kbn_core_custom_branding_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_mocks.mdx b/api_docs/kbn_core_custom_branding_server_mocks.mdx index 164aa24a8a934..34ee2f44995eb 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-mocks'] --- import kbnCoreCustomBrandingServerMocksObj from './kbn_core_custom_branding_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser.mdx b/api_docs/kbn_core_deprecations_browser.mdx index d3e569853b085..832d77ea60ae3 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser'] --- import kbnCoreDeprecationsBrowserObj from './kbn_core_deprecations_browser.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_internal.mdx b/api_docs/kbn_core_deprecations_browser_internal.mdx index 231f5ae8ebf3a..8959e077186c1 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-internal'] --- import kbnCoreDeprecationsBrowserInternalObj from './kbn_core_deprecations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_mocks.mdx b/api_docs/kbn_core_deprecations_browser_mocks.mdx index 8978e230e74b3..92fbb1d32a864 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-mocks'] --- import kbnCoreDeprecationsBrowserMocksObj from './kbn_core_deprecations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_common.mdx b/api_docs/kbn_core_deprecations_common.mdx index ee7d93f6d1e08..fc3226b08cd33 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-common'] --- import kbnCoreDeprecationsCommonObj from './kbn_core_deprecations_common.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server.mdx b/api_docs/kbn_core_deprecations_server.mdx index 07a52e526f06e..190d908332074 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server'] --- import kbnCoreDeprecationsServerObj from './kbn_core_deprecations_server.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_internal.mdx b/api_docs/kbn_core_deprecations_server_internal.mdx index b1df0002797e9..057e6d9f90660 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-internal'] --- import kbnCoreDeprecationsServerInternalObj from './kbn_core_deprecations_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_mocks.mdx b/api_docs/kbn_core_deprecations_server_mocks.mdx index 6402bbf85035e..a91b82e6a2eec 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-mocks'] --- import kbnCoreDeprecationsServerMocksObj from './kbn_core_deprecations_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser.mdx b/api_docs/kbn_core_doc_links_browser.mdx index b7a12bfc2367f..c4c0c2a2b5353 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser'] --- import kbnCoreDocLinksBrowserObj from './kbn_core_doc_links_browser.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser_mocks.mdx b/api_docs/kbn_core_doc_links_browser_mocks.mdx index df3b388fe7a96..d8a3027bc0a26 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser-mocks'] --- import kbnCoreDocLinksBrowserMocksObj from './kbn_core_doc_links_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server.mdx b/api_docs/kbn_core_doc_links_server.mdx index e4bbb8e369753..7b741d77423ed 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server'] --- import kbnCoreDocLinksServerObj from './kbn_core_doc_links_server.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server_mocks.mdx b/api_docs/kbn_core_doc_links_server_mocks.mdx index e08a01ee02728..e1105444e6bcd 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server-mocks'] --- import kbnCoreDocLinksServerMocksObj from './kbn_core_doc_links_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx index 0a3fb1b17e173..93990e3c8ebd0 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-internal'] --- import kbnCoreElasticsearchClientServerInternalObj from './kbn_core_elasticsearch_client_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx index 007b5b750a051..f2df456ace9e9 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-mocks'] --- import kbnCoreElasticsearchClientServerMocksObj from './kbn_core_elasticsearch_client_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx index 1b2e74b3d560d..b0c0ef613339e 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server'] --- import kbnCoreElasticsearchServerObj from './kbn_core_elasticsearch_server.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_internal.mdx b/api_docs/kbn_core_elasticsearch_server_internal.mdx index bbfb4f72beb4d..a171587854188 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-internal'] --- import kbnCoreElasticsearchServerInternalObj from './kbn_core_elasticsearch_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_server_mocks.mdx index a46f9e036242e..627e3f920ab2c 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-mocks'] --- import kbnCoreElasticsearchServerMocksObj from './kbn_core_elasticsearch_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_internal.mdx b/api_docs/kbn_core_environment_server_internal.mdx index 3b5ce1c0505c6..6186eaadefc15 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-internal'] --- import kbnCoreEnvironmentServerInternalObj from './kbn_core_environment_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_mocks.mdx b/api_docs/kbn_core_environment_server_mocks.mdx index 93e9fa55c0daa..3fe378f6235db 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-mocks'] --- import kbnCoreEnvironmentServerMocksObj from './kbn_core_environment_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser.mdx b/api_docs/kbn_core_execution_context_browser.mdx index a04436c3af866..eab6df1b205ce 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser'] --- import kbnCoreExecutionContextBrowserObj from './kbn_core_execution_context_browser.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_internal.mdx b/api_docs/kbn_core_execution_context_browser_internal.mdx index d1ad2d13c3724..7ae71b994f53b 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-internal'] --- import kbnCoreExecutionContextBrowserInternalObj from './kbn_core_execution_context_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_mocks.mdx b/api_docs/kbn_core_execution_context_browser_mocks.mdx index 3dc7e66d5e79a..55891166f285f 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-mocks'] --- import kbnCoreExecutionContextBrowserMocksObj from './kbn_core_execution_context_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_common.mdx b/api_docs/kbn_core_execution_context_common.mdx index 3f237a5ab742e..351801ae0b6a0 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-common'] --- import kbnCoreExecutionContextCommonObj from './kbn_core_execution_context_common.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server.mdx b/api_docs/kbn_core_execution_context_server.mdx index 34e6095170721..2d022aeeddcfe 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server'] --- import kbnCoreExecutionContextServerObj from './kbn_core_execution_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_internal.mdx b/api_docs/kbn_core_execution_context_server_internal.mdx index 33d0b3250edd0..8c947f19e38fd 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-internal'] --- import kbnCoreExecutionContextServerInternalObj from './kbn_core_execution_context_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_mocks.mdx b/api_docs/kbn_core_execution_context_server_mocks.mdx index 0d67b764d10cb..9edce2493fa86 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-mocks'] --- import kbnCoreExecutionContextServerMocksObj from './kbn_core_execution_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser.mdx b/api_docs/kbn_core_fatal_errors_browser.mdx index 39143cbdffeba..cde16e2ce6751 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser'] --- import kbnCoreFatalErrorsBrowserObj from './kbn_core_fatal_errors_browser.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx index e84b9da070e93..9d48ebfded54f 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks'] --- import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index e597fbb890991..13bcd36537ea6 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser'] --- import kbnCoreHttpBrowserObj from './kbn_core_http_browser.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_internal.mdx b/api_docs/kbn_core_http_browser_internal.mdx index 734c54cbc5052..4392cb15a9b7e 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-internal'] --- import kbnCoreHttpBrowserInternalObj from './kbn_core_http_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_mocks.mdx b/api_docs/kbn_core_http_browser_mocks.mdx index c77b84d287c6a..a34320323658b 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-mocks'] --- import kbnCoreHttpBrowserMocksObj from './kbn_core_http_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_common.mdx b/api_docs/kbn_core_http_common.mdx index fae9d35eaa1e9..80619193436fc 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-common'] --- import kbnCoreHttpCommonObj from './kbn_core_http_common.devdocs.json'; diff --git a/api_docs/kbn_core_http_context_server_mocks.mdx b/api_docs/kbn_core_http_context_server_mocks.mdx index 5ea7a8bd28424..8b182e2e42aa1 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-context-server-mocks'] --- import kbnCoreHttpContextServerMocksObj from './kbn_core_http_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_request_handler_context_server.mdx b/api_docs/kbn_core_http_request_handler_context_server.mdx index e9c4c130f151e..4215a3f0751d9 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-request-handler-context-server'] --- import kbnCoreHttpRequestHandlerContextServerObj from './kbn_core_http_request_handler_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server.mdx b/api_docs/kbn_core_http_resources_server.mdx index 29019370253b1..55458cf9c726f 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server'] --- import kbnCoreHttpResourcesServerObj from './kbn_core_http_resources_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_internal.mdx b/api_docs/kbn_core_http_resources_server_internal.mdx index f3355a81da692..2e7c105232ac2 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-internal'] --- import kbnCoreHttpResourcesServerInternalObj from './kbn_core_http_resources_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_mocks.mdx b/api_docs/kbn_core_http_resources_server_mocks.mdx index 6fa02a6fb8f28..b30113678749a 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-mocks'] --- import kbnCoreHttpResourcesServerMocksObj from './kbn_core_http_resources_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_internal.mdx b/api_docs/kbn_core_http_router_server_internal.mdx index b88c895d42b8d..e395212564d2d 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-internal'] --- import kbnCoreHttpRouterServerInternalObj from './kbn_core_http_router_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_mocks.mdx b/api_docs/kbn_core_http_router_server_mocks.mdx index 9d9ce60eba564..cf4434989674c 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] --- import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 5baf450d5a3b4..33789bfa39a50 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server'] --- import kbnCoreHttpServerObj from './kbn_core_http_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx index 2115b79d86211..d26ea04d9d8c4 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-internal'] --- import kbnCoreHttpServerInternalObj from './kbn_core_http_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_mocks.mdx b/api_docs/kbn_core_http_server_mocks.mdx index c7c13d3f2a9c6..ae3d4b54907c8 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-mocks'] --- import kbnCoreHttpServerMocksObj from './kbn_core_http_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx index dbedd39795da9..9157c710b702c 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser'] --- import kbnCoreI18nBrowserObj from './kbn_core_i18n_browser.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser_mocks.mdx b/api_docs/kbn_core_i18n_browser_mocks.mdx index 4e251535c3bc7..c874a94046bc8 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser-mocks'] --- import kbnCoreI18nBrowserMocksObj from './kbn_core_i18n_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server.mdx b/api_docs/kbn_core_i18n_server.mdx index 49f586853d550..cb6260b302935 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server'] --- import kbnCoreI18nServerObj from './kbn_core_i18n_server.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_internal.mdx b/api_docs/kbn_core_i18n_server_internal.mdx index 6214001e8ee9f..7077ccb086a55 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-internal'] --- import kbnCoreI18nServerInternalObj from './kbn_core_i18n_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_mocks.mdx b/api_docs/kbn_core_i18n_server_mocks.mdx index f6856f68daf20..816a04a2fc546 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-mocks'] --- import kbnCoreI18nServerMocksObj from './kbn_core_i18n_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx index 500025ca6133d..e790cb9f3cd16 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser-mocks'] --- import kbnCoreInjectedMetadataBrowserMocksObj from './kbn_core_injected_metadata_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_internal.mdx b/api_docs/kbn_core_integrations_browser_internal.mdx index 951b96c2dfe2f..f15d507a9edc2 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-internal'] --- import kbnCoreIntegrationsBrowserInternalObj from './kbn_core_integrations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_mocks.mdx b/api_docs/kbn_core_integrations_browser_mocks.mdx index 085acb3c00b4a..e530bb091ee08 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-mocks'] --- import kbnCoreIntegrationsBrowserMocksObj from './kbn_core_integrations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser.mdx b/api_docs/kbn_core_lifecycle_browser.mdx index 524e138ceecd5..5b8db10fc6de1 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser'] --- import kbnCoreLifecycleBrowserObj from './kbn_core_lifecycle_browser.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser_mocks.mdx b/api_docs/kbn_core_lifecycle_browser_mocks.mdx index 9ee545865a254..e3e1bbc823bf1 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser-mocks'] --- import kbnCoreLifecycleBrowserMocksObj from './kbn_core_lifecycle_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server.mdx b/api_docs/kbn_core_lifecycle_server.mdx index b386e0557976c..5d28dfb2ed8a6 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server'] --- import kbnCoreLifecycleServerObj from './kbn_core_lifecycle_server.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server_mocks.mdx b/api_docs/kbn_core_lifecycle_server_mocks.mdx index 74795a91451a1..9740d6f913bd6 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server-mocks'] --- import kbnCoreLifecycleServerMocksObj from './kbn_core_lifecycle_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_browser_mocks.mdx b/api_docs/kbn_core_logging_browser_mocks.mdx index 23d0a042b988f..fb660ac44f545 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-browser-mocks'] --- import kbnCoreLoggingBrowserMocksObj from './kbn_core_logging_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_common_internal.mdx b/api_docs/kbn_core_logging_common_internal.mdx index 1715f707860fa..8777c4a48d308 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-common-internal'] --- import kbnCoreLoggingCommonInternalObj from './kbn_core_logging_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx index e1a9ae9e7d7a7..af5f9085f11bb 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server'] --- import kbnCoreLoggingServerObj from './kbn_core_logging_server.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_internal.mdx b/api_docs/kbn_core_logging_server_internal.mdx index 91e279957e0e2..5554e570931d9 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-internal'] --- import kbnCoreLoggingServerInternalObj from './kbn_core_logging_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_mocks.mdx b/api_docs/kbn_core_logging_server_mocks.mdx index c0b745d9469b1..06e7134f047c3 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-mocks'] --- import kbnCoreLoggingServerMocksObj from './kbn_core_logging_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_internal.mdx b/api_docs/kbn_core_metrics_collectors_server_internal.mdx index ebae1fd1a8084..7ded109b67a12 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-internal'] --- import kbnCoreMetricsCollectorsServerInternalObj from './kbn_core_metrics_collectors_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx index 4c7968d1e051b..13ea4550d8e0c 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-mocks'] --- import kbnCoreMetricsCollectorsServerMocksObj from './kbn_core_metrics_collectors_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server.mdx b/api_docs/kbn_core_metrics_server.mdx index e4d5327baa526..4d316355c0e95 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server'] --- import kbnCoreMetricsServerObj from './kbn_core_metrics_server.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server_internal.mdx b/api_docs/kbn_core_metrics_server_internal.mdx index c24a69bc6a10b..41cba3863d8f0 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-internal'] --- import kbnCoreMetricsServerInternalObj from './kbn_core_metrics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server_mocks.mdx b/api_docs/kbn_core_metrics_server_mocks.mdx index ce7d9ee4d4dc9..6a9ebe693b486 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-mocks'] --- import kbnCoreMetricsServerMocksObj from './kbn_core_metrics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_mount_utils_browser.mdx b/api_docs/kbn_core_mount_utils_browser.mdx index 3a7671f18aeb2..b403fecdac597 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-mount-utils-browser'] --- import kbnCoreMountUtilsBrowserObj from './kbn_core_mount_utils_browser.devdocs.json'; diff --git a/api_docs/kbn_core_node_server.mdx b/api_docs/kbn_core_node_server.mdx index 4d7e776afe1eb..4d13bf8d4b47b 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server'] --- import kbnCoreNodeServerObj from './kbn_core_node_server.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_internal.mdx b/api_docs/kbn_core_node_server_internal.mdx index 26dfeac08a5cf..43ea8a62beb9e 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-internal'] --- import kbnCoreNodeServerInternalObj from './kbn_core_node_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_mocks.mdx b/api_docs/kbn_core_node_server_mocks.mdx index cfd768dc24b86..de544436f950a 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-mocks'] --- import kbnCoreNodeServerMocksObj from './kbn_core_node_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser.mdx b/api_docs/kbn_core_notifications_browser.mdx index 68b225c332dc6..b981863c54745 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser'] --- import kbnCoreNotificationsBrowserObj from './kbn_core_notifications_browser.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_internal.mdx b/api_docs/kbn_core_notifications_browser_internal.mdx index d39cf23db48f6..5fcec0169f257 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-internal'] --- import kbnCoreNotificationsBrowserInternalObj from './kbn_core_notifications_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_mocks.mdx b/api_docs/kbn_core_notifications_browser_mocks.mdx index 37d3fc99ff219..b6ed5e181d229 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-mocks'] --- import kbnCoreNotificationsBrowserMocksObj from './kbn_core_notifications_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser.mdx b/api_docs/kbn_core_overlays_browser.mdx index 69f062ead8899..4afc3768ee482 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser'] --- import kbnCoreOverlaysBrowserObj from './kbn_core_overlays_browser.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_internal.mdx b/api_docs/kbn_core_overlays_browser_internal.mdx index 012fd10f153da..6f61cb4c37b80 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-internal'] --- import kbnCoreOverlaysBrowserInternalObj from './kbn_core_overlays_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_mocks.mdx b/api_docs/kbn_core_overlays_browser_mocks.mdx index e824ef11770d6..11847b68c0b01 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-mocks'] --- import kbnCoreOverlaysBrowserMocksObj from './kbn_core_overlays_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser.mdx b/api_docs/kbn_core_plugins_browser.mdx index 97a910ebce3d7..744a3e370661e 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser'] --- import kbnCorePluginsBrowserObj from './kbn_core_plugins_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser_mocks.mdx b/api_docs/kbn_core_plugins_browser_mocks.mdx index 41a7ebedd8f44..a38cf2fe2f49f 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_browser.mdx b/api_docs/kbn_core_plugins_contracts_browser.mdx index 4967aa98ad239..a632e1dbe4d39 100644 --- a/api_docs/kbn_core_plugins_contracts_browser.mdx +++ b/api_docs/kbn_core_plugins_contracts_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-browser title: "@kbn/core-plugins-contracts-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-browser plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-browser'] --- import kbnCorePluginsContractsBrowserObj from './kbn_core_plugins_contracts_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_server.mdx b/api_docs/kbn_core_plugins_contracts_server.mdx index 2a39f3aad360f..9b2ca3e020789 100644 --- a/api_docs/kbn_core_plugins_contracts_server.mdx +++ b/api_docs/kbn_core_plugins_contracts_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-server title: "@kbn/core-plugins-contracts-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-server'] --- import kbnCorePluginsContractsServerObj from './kbn_core_plugins_contracts_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index a7afcee2b6f0d..f2809e25b6287 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server'] --- import kbnCorePluginsServerObj from './kbn_core_plugins_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server_mocks.mdx b/api_docs/kbn_core_plugins_server_mocks.mdx index 5ea489116ec46..a165eaf5a6f77 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server-mocks'] --- import kbnCorePluginsServerMocksObj from './kbn_core_plugins_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server.mdx b/api_docs/kbn_core_preboot_server.mdx index 29146d6fc2aa8..e6aaca6503eee 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server'] --- import kbnCorePrebootServerObj from './kbn_core_preboot_server.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server_mocks.mdx b/api_docs/kbn_core_preboot_server_mocks.mdx index 077a5219aa2fa..c52cba0a3f46f 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server-mocks'] --- import kbnCorePrebootServerMocksObj from './kbn_core_preboot_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_browser_mocks.mdx b/api_docs/kbn_core_rendering_browser_mocks.mdx index 62745a0530a20..8048776fc9c3e 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-browser-mocks'] --- import kbnCoreRenderingBrowserMocksObj from './kbn_core_rendering_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_internal.mdx b/api_docs/kbn_core_rendering_server_internal.mdx index 31c33fbbc0b0b..a279592d22caf 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-internal'] --- import kbnCoreRenderingServerInternalObj from './kbn_core_rendering_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_mocks.mdx b/api_docs/kbn_core_rendering_server_mocks.mdx index b21a7545595e3..f511cbc575504 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-mocks'] --- import kbnCoreRenderingServerMocksObj from './kbn_core_rendering_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_root_server_internal.mdx b/api_docs/kbn_core_root_server_internal.mdx index a92b245497d2d..9d1cb93d12b5a 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-root-server-internal'] --- import kbnCoreRootServerInternalObj from './kbn_core_root_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx index 2917cf20409c6..fb163bd20730f 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-browser'] --- import kbnCoreSavedObjectsApiBrowserObj from './kbn_core_saved_objects_api_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server.mdx b/api_docs/kbn_core_saved_objects_api_server.mdx index 4dd973ec0fb7e..94af56f435b1d 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server'] --- import kbnCoreSavedObjectsApiServerObj from './kbn_core_saved_objects_api_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx index 690be2408f69e..b4d437c577ff9 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-mocks'] --- import kbnCoreSavedObjectsApiServerMocksObj from './kbn_core_saved_objects_api_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_internal.mdx b/api_docs/kbn_core_saved_objects_base_server_internal.mdx index 9c9e970ce4893..a47140b2307a7 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-internal'] --- import kbnCoreSavedObjectsBaseServerInternalObj from './kbn_core_saved_objects_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx index 34d0a626ad38a..f72fdf701ac7e 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-mocks'] --- import kbnCoreSavedObjectsBaseServerMocksObj from './kbn_core_saved_objects_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser.mdx b/api_docs/kbn_core_saved_objects_browser.mdx index 4d23578f78d70..101a58f0933cf 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser'] --- import kbnCoreSavedObjectsBrowserObj from './kbn_core_saved_objects_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_internal.mdx b/api_docs/kbn_core_saved_objects_browser_internal.mdx index 98ec26a82ad69..bdcb520ea64e5 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-internal'] --- import kbnCoreSavedObjectsBrowserInternalObj from './kbn_core_saved_objects_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_mocks.mdx b/api_docs/kbn_core_saved_objects_browser_mocks.mdx index 87b91fef56c4a..a7ff21cdfe29a 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-mocks'] --- import kbnCoreSavedObjectsBrowserMocksObj from './kbn_core_saved_objects_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx index a5b497a7bb419..02abc5d8ff5b5 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-common'] --- import kbnCoreSavedObjectsCommonObj from './kbn_core_saved_objects_common.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx index 558e2fb648b07..a42b014932419 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-internal'] --- import kbnCoreSavedObjectsImportExportServerInternalObj from './kbn_core_saved_objects_import_export_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx index 4e5deb1524f38..8dc2140bc026f 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-mocks'] --- import kbnCoreSavedObjectsImportExportServerMocksObj from './kbn_core_saved_objects_import_export_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx index 39dc535d6f194..814e7723a5370 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-internal'] --- import kbnCoreSavedObjectsMigrationServerInternalObj from './kbn_core_saved_objects_migration_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx index 1b8e9ecf30ed9..e874319d75565 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-mocks'] --- import kbnCoreSavedObjectsMigrationServerMocksObj from './kbn_core_saved_objects_migration_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx index cf5c4f599244d..e59735f669429 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server'] --- import kbnCoreSavedObjectsServerObj from './kbn_core_saved_objects_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_internal.mdx b/api_docs/kbn_core_saved_objects_server_internal.mdx index f2537964a457c..a97d0febd9b47 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-internal'] --- import kbnCoreSavedObjectsServerInternalObj from './kbn_core_saved_objects_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_mocks.mdx b/api_docs/kbn_core_saved_objects_server_mocks.mdx index 2c649e3a7105f..fca20e6ccfc21 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-mocks'] --- import kbnCoreSavedObjectsServerMocksObj from './kbn_core_saved_objects_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_utils_server.mdx b/api_docs/kbn_core_saved_objects_utils_server.mdx index bd3bff31a4969..50d02f032a374 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser.mdx b/api_docs/kbn_core_security_browser.mdx index 77695eeb5e8ef..5ca4df49fc403 100644 --- a/api_docs/kbn_core_security_browser.mdx +++ b/api_docs/kbn_core_security_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser title: "@kbn/core-security-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser'] --- import kbnCoreSecurityBrowserObj from './kbn_core_security_browser.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_internal.mdx b/api_docs/kbn_core_security_browser_internal.mdx index 98bfab9d27aeb..ed0f3c9542f70 100644 --- a/api_docs/kbn_core_security_browser_internal.mdx +++ b/api_docs/kbn_core_security_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-internal title: "@kbn/core-security-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-internal'] --- import kbnCoreSecurityBrowserInternalObj from './kbn_core_security_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_mocks.mdx b/api_docs/kbn_core_security_browser_mocks.mdx index 9f7c7f424c898..7934eae6874ef 100644 --- a/api_docs/kbn_core_security_browser_mocks.mdx +++ b/api_docs/kbn_core_security_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-mocks title: "@kbn/core-security-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-mocks'] --- import kbnCoreSecurityBrowserMocksObj from './kbn_core_security_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_security_common.mdx b/api_docs/kbn_core_security_common.mdx index fda8bea201dc9..73c49c983f61d 100644 --- a/api_docs/kbn_core_security_common.mdx +++ b/api_docs/kbn_core_security_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-common title: "@kbn/core-security-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-common plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-common'] --- import kbnCoreSecurityCommonObj from './kbn_core_security_common.devdocs.json'; diff --git a/api_docs/kbn_core_security_server.mdx b/api_docs/kbn_core_security_server.mdx index 7207dc9130f1b..964643f750622 100644 --- a/api_docs/kbn_core_security_server.mdx +++ b/api_docs/kbn_core_security_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server title: "@kbn/core-security-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server'] --- import kbnCoreSecurityServerObj from './kbn_core_security_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_internal.mdx b/api_docs/kbn_core_security_server_internal.mdx index ec46a4ec1a3ca..a971756c3bf65 100644 --- a/api_docs/kbn_core_security_server_internal.mdx +++ b/api_docs/kbn_core_security_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-internal title: "@kbn/core-security-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-internal'] --- import kbnCoreSecurityServerInternalObj from './kbn_core_security_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_mocks.mdx b/api_docs/kbn_core_security_server_mocks.mdx index 84e2bb642ef5a..e7d97b8ae735d 100644 --- a/api_docs/kbn_core_security_server_mocks.mdx +++ b/api_docs/kbn_core_security_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-mocks title: "@kbn/core-security-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-mocks'] --- import kbnCoreSecurityServerMocksObj from './kbn_core_security_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index b955e81200dc5..0bbcaf2e4525f 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common'] --- import kbnCoreStatusCommonObj from './kbn_core_status_common.devdocs.json'; diff --git a/api_docs/kbn_core_status_common_internal.mdx b/api_docs/kbn_core_status_common_internal.mdx index 2fe7aee9f2f7f..72b9402e4a35a 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common-internal'] --- import kbnCoreStatusCommonInternalObj from './kbn_core_status_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server.mdx b/api_docs/kbn_core_status_server.mdx index 968eeb9eed438..49c1e8327b226 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server'] --- import kbnCoreStatusServerObj from './kbn_core_status_server.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_internal.mdx b/api_docs/kbn_core_status_server_internal.mdx index 3adbc1626bfca..f26ddd2779702 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-internal'] --- import kbnCoreStatusServerInternalObj from './kbn_core_status_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_mocks.mdx b/api_docs/kbn_core_status_server_mocks.mdx index 4503715ee12ec..0ae91814b2b15 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-mocks'] --- import kbnCoreStatusServerMocksObj from './kbn_core_status_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx index a20e14d32879d..4a7202c38c198 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-deprecations-getters'] --- import kbnCoreTestHelpersDeprecationsGettersObj from './kbn_core_test_helpers_deprecations_getters.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx index 3772660ef4c38..e41d856a4190e 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-http-setup-browser'] --- import kbnCoreTestHelpersHttpSetupBrowserObj from './kbn_core_test_helpers_http_setup_browser.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_kbn_server.mdx b/api_docs/kbn_core_test_helpers_kbn_server.mdx index 16bd64136cd4c..47d8085ce898b 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server'] --- import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_model_versions.mdx b/api_docs/kbn_core_test_helpers_model_versions.mdx index 2c55e0d48cbf3..4d099c9c88f6f 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.mdx +++ b/api_docs/kbn_core_test_helpers_model_versions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-model-versions title: "@kbn/core-test-helpers-model-versions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-model-versions plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-model-versions'] --- import kbnCoreTestHelpersModelVersionsObj from './kbn_core_test_helpers_model_versions.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index 2d602d6959f54..02c8378382d7e 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-so-type-serializer'] --- import kbnCoreTestHelpersSoTypeSerializerObj from './kbn_core_test_helpers_so_type_serializer.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_test_utils.mdx b/api_docs/kbn_core_test_helpers_test_utils.mdx index 305fbd9d6aede..3097817fe05f5 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-test-utils'] --- import kbnCoreTestHelpersTestUtilsObj from './kbn_core_test_helpers_test_utils.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser.mdx b/api_docs/kbn_core_theme_browser.mdx index 024eda799383f..f7c8f2cc8709e 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] --- import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index bac57935e9e46..bb08a8cac8d73 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-mocks'] --- import kbnCoreThemeBrowserMocksObj from './kbn_core_theme_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser.mdx b/api_docs/kbn_core_ui_settings_browser.mdx index 3fc07fc9356ed..6e462bffaed5c 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser'] --- import kbnCoreUiSettingsBrowserObj from './kbn_core_ui_settings_browser.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser_internal.mdx b/api_docs/kbn_core_ui_settings_browser_internal.mdx index 95bca49e07c8f..f2f9a99cf378f 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-internal'] --- import kbnCoreUiSettingsBrowserInternalObj from './kbn_core_ui_settings_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser_mocks.mdx b/api_docs/kbn_core_ui_settings_browser_mocks.mdx index 5e669e63bf5fd..bd854b566e2b4 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-mocks'] --- import kbnCoreUiSettingsBrowserMocksObj from './kbn_core_ui_settings_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_common.mdx b/api_docs/kbn_core_ui_settings_common.mdx index 10a082b373faa..84e5aa7a5921a 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-common'] --- import kbnCoreUiSettingsCommonObj from './kbn_core_ui_settings_common.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server.mdx b/api_docs/kbn_core_ui_settings_server.mdx index 92056d70c1b03..3bd7af2e1cef3 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server'] --- import kbnCoreUiSettingsServerObj from './kbn_core_ui_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_internal.mdx b/api_docs/kbn_core_ui_settings_server_internal.mdx index 72a387376ebff..28db1afdc7bc5 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-internal'] --- import kbnCoreUiSettingsServerInternalObj from './kbn_core_ui_settings_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_mocks.mdx b/api_docs/kbn_core_ui_settings_server_mocks.mdx index 35c61959bf536..0110475f8e82c 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-mocks'] --- import kbnCoreUiSettingsServerMocksObj from './kbn_core_ui_settings_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server.mdx b/api_docs/kbn_core_usage_data_server.mdx index e92a4f924a25c..3ca8df7361387 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server'] --- import kbnCoreUsageDataServerObj from './kbn_core_usage_data_server.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_internal.mdx b/api_docs/kbn_core_usage_data_server_internal.mdx index 7b56de1a8b347..1c14ecddd6cd3 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-internal'] --- import kbnCoreUsageDataServerInternalObj from './kbn_core_usage_data_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_mocks.mdx b/api_docs/kbn_core_usage_data_server_mocks.mdx index cac8ab6b1ee51..378842c576f6f 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser.mdx b/api_docs/kbn_core_user_profile_browser.mdx index aea54b3c5b8fc..d7b29fa81552e 100644 --- a/api_docs/kbn_core_user_profile_browser.mdx +++ b/api_docs/kbn_core_user_profile_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser title: "@kbn/core-user-profile-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser'] --- import kbnCoreUserProfileBrowserObj from './kbn_core_user_profile_browser.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_internal.mdx b/api_docs/kbn_core_user_profile_browser_internal.mdx index 2dc3215493571..659f6fffff9d4 100644 --- a/api_docs/kbn_core_user_profile_browser_internal.mdx +++ b/api_docs/kbn_core_user_profile_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-internal title: "@kbn/core-user-profile-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-internal'] --- import kbnCoreUserProfileBrowserInternalObj from './kbn_core_user_profile_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_mocks.mdx b/api_docs/kbn_core_user_profile_browser_mocks.mdx index dfa7e9fc2e758..c6ae54bd8f82a 100644 --- a/api_docs/kbn_core_user_profile_browser_mocks.mdx +++ b/api_docs/kbn_core_user_profile_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-mocks title: "@kbn/core-user-profile-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-mocks'] --- import kbnCoreUserProfileBrowserMocksObj from './kbn_core_user_profile_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_common.mdx b/api_docs/kbn_core_user_profile_common.mdx index 2e06d121476ad..eae10c1984f51 100644 --- a/api_docs/kbn_core_user_profile_common.mdx +++ b/api_docs/kbn_core_user_profile_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-common title: "@kbn/core-user-profile-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-common plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-common'] --- import kbnCoreUserProfileCommonObj from './kbn_core_user_profile_common.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server.mdx b/api_docs/kbn_core_user_profile_server.mdx index c9b1d3f8bb631..7c5cdad5221d7 100644 --- a/api_docs/kbn_core_user_profile_server.mdx +++ b/api_docs/kbn_core_user_profile_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server title: "@kbn/core-user-profile-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server'] --- import kbnCoreUserProfileServerObj from './kbn_core_user_profile_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_internal.mdx b/api_docs/kbn_core_user_profile_server_internal.mdx index 42d4dfde74910..6d2bcc40c1497 100644 --- a/api_docs/kbn_core_user_profile_server_internal.mdx +++ b/api_docs/kbn_core_user_profile_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-internal title: "@kbn/core-user-profile-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-internal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-internal'] --- import kbnCoreUserProfileServerInternalObj from './kbn_core_user_profile_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_mocks.mdx b/api_docs/kbn_core_user_profile_server_mocks.mdx index b2b172ab7573c..44aca347c3979 100644 --- a/api_docs/kbn_core_user_profile_server_mocks.mdx +++ b/api_docs/kbn_core_user_profile_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-mocks title: "@kbn/core-user-profile-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-mocks'] --- import kbnCoreUserProfileServerMocksObj from './kbn_core_user_profile_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index 354e91babdd67..0a7572a62182b 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index 00cc0f33ff8ca..57cd358c7d06e 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-mocks'] --- import kbnCoreUserSettingsServerMocksObj from './kbn_core_user_settings_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_crypto.mdx b/api_docs/kbn_crypto.mdx index 5aebe415f2d64..bc90b62f89e17 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto'] --- import kbnCryptoObj from './kbn_crypto.devdocs.json'; diff --git a/api_docs/kbn_crypto_browser.mdx b/api_docs/kbn_crypto_browser.mdx index 851d0bdc2dc3a..396d00291749b 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_custom_icons.mdx b/api_docs/kbn_custom_icons.mdx index 1b90d8cb7fd8a..54df306b479f4 100644 --- a/api_docs/kbn_custom_icons.mdx +++ b/api_docs/kbn_custom_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-icons title: "@kbn/custom-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-icons plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-icons'] --- import kbnCustomIconsObj from './kbn_custom_icons.devdocs.json'; diff --git a/api_docs/kbn_custom_integrations.mdx b/api_docs/kbn_custom_integrations.mdx index 20b03159eb028..584d9e0971057 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-integrations'] --- import kbnCustomIntegrationsObj from './kbn_custom_integrations.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index c55234df617e8..83e59e947bfa9 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_data_forge.mdx b/api_docs/kbn_data_forge.mdx index 38759e9a766f6..05c2ca2f7dddc 100644 --- a/api_docs/kbn_data_forge.mdx +++ b/api_docs/kbn_data_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-forge title: "@kbn/data-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-forge plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-forge'] --- import kbnDataForgeObj from './kbn_data_forge.devdocs.json'; diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx index 3b65a80daa262..94e45831f4d61 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service'] --- import kbnDataServiceObj from './kbn_data_service.devdocs.json'; diff --git a/api_docs/kbn_data_stream_adapter.mdx b/api_docs/kbn_data_stream_adapter.mdx index 879bc689099bd..a74b5ccb49bfd 100644 --- a/api_docs/kbn_data_stream_adapter.mdx +++ b/api_docs/kbn_data_stream_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-stream-adapter title: "@kbn/data-stream-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-stream-adapter plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-stream-adapter'] --- import kbnDataStreamAdapterObj from './kbn_data_stream_adapter.devdocs.json'; diff --git a/api_docs/kbn_data_view_utils.mdx b/api_docs/kbn_data_view_utils.mdx index 61c7cd85c2e8a..ea1a0319b8d5e 100644 --- a/api_docs/kbn_data_view_utils.mdx +++ b/api_docs/kbn_data_view_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-view-utils title: "@kbn/data-view-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-view-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-view-utils'] --- import kbnDataViewUtilsObj from './kbn_data_view_utils.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 0a56f13311eda..e378991f2c433 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath'] --- import kbnDatemathObj from './kbn_datemath.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_analytics.mdx b/api_docs/kbn_deeplinks_analytics.mdx index a3fc2cc2cfce1..73c02ac3b54a8 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-analytics'] --- import kbnDeeplinksAnalyticsObj from './kbn_deeplinks_analytics.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_devtools.mdx b/api_docs/kbn_deeplinks_devtools.mdx index 3b5b138f9f123..4d165fdacd1e0 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_fleet.mdx b/api_docs/kbn_deeplinks_fleet.mdx index 72da07c03c3c5..04d44fa15c695 100644 --- a/api_docs/kbn_deeplinks_fleet.mdx +++ b/api_docs/kbn_deeplinks_fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-fleet title: "@kbn/deeplinks-fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-fleet plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-fleet'] --- import kbnDeeplinksFleetObj from './kbn_deeplinks_fleet.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index 3ffd767d46b58..c9cda1fc16ae4 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-management'] --- import kbnDeeplinksManagementObj from './kbn_deeplinks_management.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_ml.mdx b/api_docs/kbn_deeplinks_ml.mdx index 2c08b2a130fc6..838c13abd8400 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-ml'] --- import kbnDeeplinksMlObj from './kbn_deeplinks_ml.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_observability.mdx b/api_docs/kbn_deeplinks_observability.mdx index 1ba8d402e0b68..95151cf9fc809 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-observability'] --- import kbnDeeplinksObservabilityObj from './kbn_deeplinks_observability.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_search.mdx b/api_docs/kbn_deeplinks_search.mdx index 59efc45580545..2aa22ba931dba 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_security.mdx b/api_docs/kbn_deeplinks_security.mdx index 47708265bfbc9..b100ad24b978a 100644 --- a/api_docs/kbn_deeplinks_security.mdx +++ b/api_docs/kbn_deeplinks_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-security title: "@kbn/deeplinks-security" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-security plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-security'] --- import kbnDeeplinksSecurityObj from './kbn_deeplinks_security.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_shared.mdx b/api_docs/kbn_deeplinks_shared.mdx index 881ba3ef671a5..55cc8494c2a39 100644 --- a/api_docs/kbn_deeplinks_shared.mdx +++ b/api_docs/kbn_deeplinks_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-shared title: "@kbn/deeplinks-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-shared plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-shared'] --- import kbnDeeplinksSharedObj from './kbn_deeplinks_shared.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index feece7b451687..f3dda491684b1 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-analytics'] --- import kbnDefaultNavAnalyticsObj from './kbn_default_nav_analytics.devdocs.json'; diff --git a/api_docs/kbn_default_nav_devtools.mdx b/api_docs/kbn_default_nav_devtools.mdx index 1c8c332b72815..edf17160bf9cb 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-devtools'] --- import kbnDefaultNavDevtoolsObj from './kbn_default_nav_devtools.devdocs.json'; diff --git a/api_docs/kbn_default_nav_management.mdx b/api_docs/kbn_default_nav_management.mdx index 2fff94670b39d..0620c29675ef1 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-management'] --- import kbnDefaultNavManagementObj from './kbn_default_nav_management.devdocs.json'; diff --git a/api_docs/kbn_default_nav_ml.mdx b/api_docs/kbn_default_nav_ml.mdx index 5b596063fe405..15689b4a2e2be 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-ml'] --- import kbnDefaultNavMlObj from './kbn_default_nav_ml.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index a9633013803ee..d29478f694dc5 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-errors'] --- import kbnDevCliErrorsObj from './kbn_dev_cli_errors.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_runner.mdx b/api_docs/kbn_dev_cli_runner.mdx index c77ced15aeb4d..14b1571eb42d6 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-runner'] --- import kbnDevCliRunnerObj from './kbn_dev_cli_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_proc_runner.mdx b/api_docs/kbn_dev_proc_runner.mdx index a6518165afdd4..f674ca6688990 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-proc-runner'] --- import kbnDevProcRunnerObj from './kbn_dev_proc_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_utils.mdx b/api_docs/kbn_dev_utils.mdx index 4c582dfae3afd..0a26bedd20d50 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index 3702aa5c157f2..46ba519f18ea2 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index df696bff0b20e..c4adfd57e1f06 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/doc-links'] --- import kbnDocLinksObj from './kbn_doc_links.devdocs.json'; diff --git a/api_docs/kbn_docs_utils.mdx b/api_docs/kbn_docs_utils.mdx index 6639ee0673221..779d8f00b581e 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] --- import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json'; diff --git a/api_docs/kbn_dom_drag_drop.mdx b/api_docs/kbn_dom_drag_drop.mdx index 3a2016ae678c6..54a6a95e539ce 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dom-drag-drop'] --- import kbnDomDragDropObj from './kbn_dom_drag_drop.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index 78fd52bffc735..491a7743f3f9b 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index da3abe3790c23..390197578adcc 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/kbn_elastic_agent_utils.devdocs.json b/api_docs/kbn_elastic_agent_utils.devdocs.json index 9814a2afd0fa3..3212c7b28aacf 100644 --- a/api_docs/kbn_elastic_agent_utils.devdocs.json +++ b/api_docs/kbn_elastic_agent_utils.devdocs.json @@ -431,7 +431,7 @@ "label": "AgentName", "description": [], "signature": [ - "\"java\" | \"ruby\" | \"go\" | \"dotnet\" | \"php\" | \"otlp\" | \"android/java\" | \"iOS/swift\" | \"rum-js\" | \"js-base\" | \"opentelemetry/webjs\" | \"opentelemetry/java\" | \"nodejs\" | \"python\" | \"opentelemetry/cpp\" | \"opentelemetry/dotnet\" | \"opentelemetry/erlang\" | \"opentelemetry/go\" | \"opentelemetry/nodejs\" | \"opentelemetry/php\" | \"opentelemetry/python\" | \"opentelemetry/ruby\" | \"opentelemetry/rust\" | \"opentelemetry/swift\" | \"opentelemetry/android\"" + "\"java\" | \"ruby\" | \"go\" | \"dotnet\" | \"php\" | \"otlp\" | \"android/java\" | \"iOS/swift\" | \"rum-js\" | \"js-base\" | \"nodejs\" | \"python\" | \"opentelemetry/cpp\" | \"opentelemetry/dotnet\" | \"opentelemetry/erlang\" | \"opentelemetry/go\" | \"opentelemetry/java\" | \"opentelemetry/nodejs\" | \"opentelemetry/php\" | \"opentelemetry/python\" | \"opentelemetry/ruby\" | \"opentelemetry/rust\" | \"opentelemetry/swift\" | \"opentelemetry/android\" | \"opentelemetry/webjs\"" ], "path": "packages/kbn-elastic-agent-utils/src/agent_names.ts", "deprecated": false, @@ -544,7 +544,7 @@ "label": "OpenTelemetryAgentName", "description": [], "signature": [ - "\"otlp\" | \"opentelemetry/webjs\" | \"opentelemetry/java\" | \"opentelemetry/cpp\" | \"opentelemetry/dotnet\" | \"opentelemetry/erlang\" | \"opentelemetry/go\" | \"opentelemetry/nodejs\" | \"opentelemetry/php\" | \"opentelemetry/python\" | \"opentelemetry/ruby\" | \"opentelemetry/rust\" | \"opentelemetry/swift\" | \"opentelemetry/android\"" + "\"otlp\" | \"opentelemetry/cpp\" | \"opentelemetry/dotnet\" | \"opentelemetry/erlang\" | \"opentelemetry/go\" | \"opentelemetry/java\" | \"opentelemetry/nodejs\" | \"opentelemetry/php\" | \"opentelemetry/python\" | \"opentelemetry/ruby\" | \"opentelemetry/rust\" | \"opentelemetry/swift\" | \"opentelemetry/android\" | \"opentelemetry/webjs\"" ], "path": "packages/kbn-elastic-agent-utils/src/agent_names.ts", "deprecated": false, diff --git a/api_docs/kbn_elastic_agent_utils.mdx b/api_docs/kbn_elastic_agent_utils.mdx index 9272a8fe364c1..1cfcb820a466b 100644 --- a/api_docs/kbn_elastic_agent_utils.mdx +++ b/api_docs/kbn_elastic_agent_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-agent-utils title: "@kbn/elastic-agent-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-agent-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-agent-utils'] --- import kbnElasticAgentUtilsObj from './kbn_elastic_agent_utils.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index 54405de5f412d..78208a1e4abd7 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index a3be49909b28f..b1e90e8a9201f 100644 --- a/api_docs/kbn_elastic_assistant_common.mdx +++ b/api_docs/kbn_elastic_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant-common title: "@kbn/elastic-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant-common plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_entities_schema.mdx b/api_docs/kbn_entities_schema.mdx index 0e1d28098a824..06af44cc93c0a 100644 --- a/api_docs/kbn_entities_schema.mdx +++ b/api_docs/kbn_entities_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-entities-schema title: "@kbn/entities-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/entities-schema plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/entities-schema'] --- import kbnEntitiesSchemaObj from './kbn_entities_schema.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 214a8ad72f817..276f86c290fd2 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es'] --- import kbnEsObj from './kbn_es.devdocs.json'; diff --git a/api_docs/kbn_es_archiver.mdx b/api_docs/kbn_es_archiver.mdx index 5773b1879d55a..3db65a3973295 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-archiver'] --- import kbnEsArchiverObj from './kbn_es_archiver.devdocs.json'; diff --git a/api_docs/kbn_es_errors.mdx b/api_docs/kbn_es_errors.mdx index 6dbe382f3f03f..c98b0b3029785 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors'] --- import kbnEsErrorsObj from './kbn_es_errors.devdocs.json'; diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index 9b3298d3d8676..05cdf81efe1ab 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query'] --- import kbnEsQueryObj from './kbn_es_query.devdocs.json'; diff --git a/api_docs/kbn_es_types.mdx b/api_docs/kbn_es_types.mdx index 60356753323cd..5190df8c33050 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-types'] --- import kbnEsTypesObj from './kbn_es_types.devdocs.json'; diff --git a/api_docs/kbn_eslint_plugin_imports.mdx b/api_docs/kbn_eslint_plugin_imports.mdx index b7aa16b6b2e66..82ba3a744917b 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_esql_ast.devdocs.json b/api_docs/kbn_esql_ast.devdocs.json index 10c827a75121e..a58895e11ef34 100644 --- a/api_docs/kbn_esql_ast.devdocs.json +++ b/api_docs/kbn_esql_ast.devdocs.json @@ -2746,7 +2746,9 @@ "label": "ESQLLiteral", "description": [], "signature": [ - "ESQLNumberLiteral", + "ESQLDecimalLiteral", + " | ", + "ESQLIntegerLiteral", " | ", "ESQLBooleanLiteral", " | ", diff --git a/api_docs/kbn_esql_ast.mdx b/api_docs/kbn_esql_ast.mdx index bb4444bab7146..f550c7464b4a4 100644 --- a/api_docs/kbn_esql_ast.mdx +++ b/api_docs/kbn_esql_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-ast title: "@kbn/esql-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-ast plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 135 | 1 | 120 | 12 | +| 135 | 1 | 120 | 13 | ## Common diff --git a/api_docs/kbn_esql_utils.devdocs.json b/api_docs/kbn_esql_utils.devdocs.json index 6423998036e33..31e4e20dff262 100644 --- a/api_docs/kbn_esql_utils.devdocs.json +++ b/api_docs/kbn_esql_utils.devdocs.json @@ -1082,10 +1082,18 @@ "tags": [], "label": "getInitialESQLQuery", "description": [ - "\nBuilds an ES|QL query for the provided index or index pattern" + "\nBuilds an ES|QL query for the provided dataView\nIf there is @timestamp field in the index, we don't add the WHERE clause\nIf there is no @timestamp and there is a dataView timeFieldName, we add the WHERE clause with the timeFieldName" ], "signature": [ - "(indexOrIndexPattern: string) => string" + "(dataView: ", + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" + }, + ") => string" ], "path": "packages/kbn-esql-utils/src/utils/get_initial_esql_query.ts", "deprecated": false, @@ -1094,12 +1102,18 @@ { "parentPluginId": "@kbn/esql-utils", "id": "def-common.getInitialESQLQuery.$1", - "type": "string", + "type": "Object", "tags": [], - "label": "indexOrIndexPattern", + "label": "dataView", "description": [], "signature": [ - "string" + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" + } ], "path": "packages/kbn-esql-utils/src/utils/get_initial_esql_query.ts", "deprecated": false, diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index 70edfdeeee18f..13412bfc30144 100644 --- a/api_docs/kbn_esql_utils.mdx +++ b/api_docs/kbn_esql_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-utils title: "@kbn/esql-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_esql_validation_autocomplete.devdocs.json b/api_docs/kbn_esql_validation_autocomplete.devdocs.json index 7bf05bdd643e7..b5149b448e605 100644 --- a/api_docs/kbn_esql_validation_autocomplete.devdocs.json +++ b/api_docs/kbn_esql_validation_autocomplete.devdocs.json @@ -660,7 +660,9 @@ " | ", "ESQLList", " | ", - "ESQLNumberLiteral", + "ESQLDecimalLiteral", + " | ", + "ESQLIntegerLiteral", " | ", "ESQLBooleanLiteral", " | ", @@ -778,7 +780,9 @@ " | ", "ESQLList", " | ", - "ESQLNumberLiteral", + "ESQLDecimalLiteral", + " | ", + "ESQLIntegerLiteral", " | ", "ESQLBooleanLiteral", " | ", @@ -880,7 +884,9 @@ " | ", "ESQLList", " | ", - "ESQLNumberLiteral", + "ESQLDecimalLiteral", + " | ", + "ESQLIntegerLiteral", " | ", "ESQLBooleanLiteral", " | ", @@ -990,7 +996,9 @@ " | ", "ESQLList", " | ", - "ESQLNumberLiteral", + "ESQLDecimalLiteral", + " | ", + "ESQLIntegerLiteral", " | ", "ESQLBooleanLiteral", " | ", diff --git a/api_docs/kbn_esql_validation_autocomplete.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index 2f4602125a193..d4437d19d005a 100644 --- a/api_docs/kbn_esql_validation_autocomplete.mdx +++ b/api_docs/kbn_esql_validation_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-validation-autocomplete title: "@kbn/esql-validation-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-validation-autocomplete plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-validation-autocomplete'] --- import kbnEsqlValidationAutocompleteObj from './kbn_esql_validation_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index db36114f70d72..d864a234c61d8 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-common'] --- import kbnEventAnnotationCommonObj from './kbn_event_annotation_common.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_components.mdx b/api_docs/kbn_event_annotation_components.mdx index 9139481567930..e1e02eb2a3b4a 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-components'] --- import kbnEventAnnotationComponentsObj from './kbn_event_annotation_components.devdocs.json'; diff --git a/api_docs/kbn_expandable_flyout.mdx b/api_docs/kbn_expandable_flyout.mdx index 2049c52301262..f31168a023eb4 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/expandable-flyout'] --- import kbnExpandableFlyoutObj from './kbn_expandable_flyout.devdocs.json'; diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx index c0b0c5a080cef..19f0eed46779b 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_field_utils.mdx b/api_docs/kbn_field_utils.mdx index 59dc098e2d068..224740319bc33 100644 --- a/api_docs/kbn_field_utils.mdx +++ b/api_docs/kbn_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-utils title: "@kbn/field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-utils'] --- import kbnFieldUtilsObj from './kbn_field_utils.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index 48990a149ad1c..5c4b955316929 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_formatters.mdx b/api_docs/kbn_formatters.mdx index e34d143b66d96..1001cdcf1fa62 100644 --- a/api_docs/kbn_formatters.mdx +++ b/api_docs/kbn_formatters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-formatters title: "@kbn/formatters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/formatters plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/formatters'] --- import kbnFormattersObj from './kbn_formatters.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index 23dfe1b591029..e42003055fe16 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_ui_services.mdx b/api_docs/kbn_ftr_common_functional_ui_services.mdx index 871fe27927658..f3245d9b2ac34 100644 --- a/api_docs/kbn_ftr_common_functional_ui_services.mdx +++ b/api_docs/kbn_ftr_common_functional_ui_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-ui-services title: "@kbn/ftr-common-functional-ui-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-ui-services plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-ui-services'] --- import kbnFtrCommonFunctionalUiServicesObj from './kbn_ftr_common_functional_ui_services.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index fda7a7ac727b5..4c5e2531c9717 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] --- import kbnGenerateObj from './kbn_generate.devdocs.json'; diff --git a/api_docs/kbn_generate_console_definitions.mdx b/api_docs/kbn_generate_console_definitions.mdx index f6ec1aa4942ff..40de0da16f4ff 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-console-definitions'] --- import kbnGenerateConsoleDefinitionsObj from './kbn_generate_console_definitions.devdocs.json'; diff --git a/api_docs/kbn_generate_csv.mdx b/api_docs/kbn_generate_csv.mdx index 2211492963085..f23857cc2ff09 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_grouping.mdx b/api_docs/kbn_grouping.mdx index 26c22b58035c3..c08412e598293 100644 --- a/api_docs/kbn_grouping.mdx +++ b/api_docs/kbn_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grouping title: "@kbn/grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grouping plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grouping'] --- import kbnGroupingObj from './kbn_grouping.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index a7c6b987506a0..4ad2301083e29 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/guided-onboarding'] --- import kbnGuidedOnboardingObj from './kbn_guided_onboarding.devdocs.json'; diff --git a/api_docs/kbn_handlebars.mdx b/api_docs/kbn_handlebars.mdx index 61c6732cdfcd4..4745820a6a4cb 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/handlebars'] --- import kbnHandlebarsObj from './kbn_handlebars.devdocs.json'; diff --git a/api_docs/kbn_hapi_mocks.mdx b/api_docs/kbn_hapi_mocks.mdx index f565f144f55e0..ad2b6ad8bba20 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/hapi-mocks'] --- import kbnHapiMocksObj from './kbn_hapi_mocks.devdocs.json'; diff --git a/api_docs/kbn_health_gateway_server.mdx b/api_docs/kbn_health_gateway_server.mdx index 08d70dbda6cc4..8d591b5b4e5fa 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/health-gateway-server'] --- import kbnHealthGatewayServerObj from './kbn_health_gateway_server.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_card.mdx b/api_docs/kbn_home_sample_data_card.mdx index b5b2e23b0e391..63d4e847beaab 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-card'] --- import kbnHomeSampleDataCardObj from './kbn_home_sample_data_card.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_tab.mdx b/api_docs/kbn_home_sample_data_tab.mdx index 633e4743e068a..df600028d90b5 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-tab'] --- import kbnHomeSampleDataTabObj from './kbn_home_sample_data_tab.devdocs.json'; diff --git a/api_docs/kbn_i18n.mdx b/api_docs/kbn_i18n.mdx index 1567b6dc094a0..8cd8f915bafb2 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n'] --- import kbnI18nObj from './kbn_i18n.devdocs.json'; diff --git a/api_docs/kbn_i18n_react.mdx b/api_docs/kbn_i18n_react.mdx index 3c0c936343d50..5c5c9adf82a39 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n-react'] --- import kbnI18nReactObj from './kbn_i18n_react.devdocs.json'; diff --git a/api_docs/kbn_import_resolver.mdx b/api_docs/kbn_import_resolver.mdx index 6eb81da9ddf16..175f5b05dc5b5 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_index_management.mdx b/api_docs/kbn_index_management.mdx index b31e60a771f9a..39b5e67888db5 100644 --- a/api_docs/kbn_index_management.mdx +++ b/api_docs/kbn_index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-management title: "@kbn/index-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-management plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-management'] --- import kbnIndexManagementObj from './kbn_index_management.devdocs.json'; diff --git a/api_docs/kbn_inference_integration_flyout.mdx b/api_docs/kbn_inference_integration_flyout.mdx index 4ab881401629d..6a9416de41a3d 100644 --- a/api_docs/kbn_inference_integration_flyout.mdx +++ b/api_docs/kbn_inference_integration_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference_integration_flyout title: "@kbn/inference_integration_flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference_integration_flyout plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference_integration_flyout'] --- import kbnInferenceIntegrationFlyoutObj from './kbn_inference_integration_flyout.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index ab95f21675339..87bf6333d9dd2 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/infra-forge'] --- import kbnInfraForgeObj from './kbn_infra_forge.devdocs.json'; diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx index 9afb2ace22add..9c9dcd571344f 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index 2af389c7744bc..f011619eff697 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_ipynb.mdx b/api_docs/kbn_ipynb.mdx index bb4afd28e8217..414cc5c8a5cc5 100644 --- a/api_docs/kbn_ipynb.mdx +++ b/api_docs/kbn_ipynb.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ipynb title: "@kbn/ipynb" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ipynb plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ipynb'] --- import kbnIpynbObj from './kbn_ipynb.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 90b37498d26ae..bb6ef14add90c 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/jest-serializers'] --- import kbnJestSerializersObj from './kbn_jest_serializers.devdocs.json'; diff --git a/api_docs/kbn_journeys.mdx b/api_docs/kbn_journeys.mdx index 0e5eea496469a..67e0ec3adc6d9 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/journeys'] --- import kbnJourneysObj from './kbn_journeys.devdocs.json'; diff --git a/api_docs/kbn_json_ast.mdx b/api_docs/kbn_json_ast.mdx index 6ba93c58e4482..dfef04cbd8285 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_json_schemas.mdx b/api_docs/kbn_json_schemas.mdx index 19e7c60427595..3fe44e9d6dccb 100644 --- a/api_docs/kbn_json_schemas.mdx +++ b/api_docs/kbn_json_schemas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-schemas title: "@kbn/json-schemas" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-schemas plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-schemas'] --- import kbnJsonSchemasObj from './kbn_json_schemas.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index 3e95aba1cf0b9..88e47834b1537 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema'] --- import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json'; diff --git a/api_docs/kbn_language_documentation_popover.mdx b/api_docs/kbn_language_documentation_popover.mdx index e220688d38087..c3902c7bb5ad1 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover'] --- import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index 7670e0d43d0ad..19333ca1caedd 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-embeddable-utils'] --- import kbnLensEmbeddableUtilsObj from './kbn_lens_embeddable_utils.devdocs.json'; diff --git a/api_docs/kbn_lens_formula_docs.mdx b/api_docs/kbn_lens_formula_docs.mdx index 4ca520a65926b..93ab8a07bb24b 100644 --- a/api_docs/kbn_lens_formula_docs.mdx +++ b/api_docs/kbn_lens_formula_docs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-formula-docs title: "@kbn/lens-formula-docs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-formula-docs plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-formula-docs'] --- import kbnLensFormulaDocsObj from './kbn_lens_formula_docs.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index c5307109b670a..d37ac214e686e 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging'] --- import kbnLoggingObj from './kbn_logging.devdocs.json'; diff --git a/api_docs/kbn_logging_mocks.mdx b/api_docs/kbn_logging_mocks.mdx index cb90d4b810342..30da660d135a7 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_content_badge.mdx b/api_docs/kbn_managed_content_badge.mdx index 0467c4a466e17..b60d2ad6188a9 100644 --- a/api_docs/kbn_managed_content_badge.mdx +++ b/api_docs/kbn_managed_content_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-content-badge title: "@kbn/managed-content-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-content-badge plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-content-badge'] --- import kbnManagedContentBadgeObj from './kbn_managed_content_badge.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index 8086b61bb2e28..f8dfbd57f0fe6 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config'] --- import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json'; diff --git a/api_docs/kbn_management_cards_navigation.mdx b/api_docs/kbn_management_cards_navigation.mdx index 1cd7ba9911d9b..69e3084e09941 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-cards-navigation'] --- import kbnManagementCardsNavigationObj from './kbn_management_cards_navigation.devdocs.json'; diff --git a/api_docs/kbn_management_settings_application.mdx b/api_docs/kbn_management_settings_application.mdx index 30dffcc876a54..2735fc854259a 100644 --- a/api_docs/kbn_management_settings_application.mdx +++ b/api_docs/kbn_management_settings_application.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-application title: "@kbn/management-settings-application" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-application plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-application'] --- import kbnManagementSettingsApplicationObj from './kbn_management_settings_application.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_category.mdx b/api_docs/kbn_management_settings_components_field_category.mdx index 70763d0b25267..622398ad30610 100644 --- a/api_docs/kbn_management_settings_components_field_category.mdx +++ b/api_docs/kbn_management_settings_components_field_category.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-category title: "@kbn/management-settings-components-field-category" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-category plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-category'] --- import kbnManagementSettingsComponentsFieldCategoryObj from './kbn_management_settings_components_field_category.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_input.mdx b/api_docs/kbn_management_settings_components_field_input.mdx index 97fac3292f4c0..7c356d2816878 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-input'] --- import kbnManagementSettingsComponentsFieldInputObj from './kbn_management_settings_components_field_input.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_row.mdx b/api_docs/kbn_management_settings_components_field_row.mdx index 4c98218aaa495..2881253e1da8e 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-row'] --- import kbnManagementSettingsComponentsFieldRowObj from './kbn_management_settings_components_field_row.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_form.mdx b/api_docs/kbn_management_settings_components_form.mdx index 0923c34f8129e..1bd9e78d22056 100644 --- a/api_docs/kbn_management_settings_components_form.mdx +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-form title: "@kbn/management-settings-components-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-form plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-form'] --- import kbnManagementSettingsComponentsFormObj from './kbn_management_settings_components_form.devdocs.json'; diff --git a/api_docs/kbn_management_settings_field_definition.mdx b/api_docs/kbn_management_settings_field_definition.mdx index 84ebb57b997b4..336137b28a382 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-field-definition'] --- import kbnManagementSettingsFieldDefinitionObj from './kbn_management_settings_field_definition.devdocs.json'; diff --git a/api_docs/kbn_management_settings_ids.mdx b/api_docs/kbn_management_settings_ids.mdx index cd3360e9fa88b..c58143ff0b2da 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-ids'] --- import kbnManagementSettingsIdsObj from './kbn_management_settings_ids.devdocs.json'; diff --git a/api_docs/kbn_management_settings_section_registry.mdx b/api_docs/kbn_management_settings_section_registry.mdx index d8386339ed357..c48b07c61f4d3 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-section-registry'] --- import kbnManagementSettingsSectionRegistryObj from './kbn_management_settings_section_registry.devdocs.json'; diff --git a/api_docs/kbn_management_settings_types.mdx b/api_docs/kbn_management_settings_types.mdx index 25a47343eba81..9b1182fc09bdc 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-types'] --- import kbnManagementSettingsTypesObj from './kbn_management_settings_types.devdocs.json'; diff --git a/api_docs/kbn_management_settings_utilities.mdx b/api_docs/kbn_management_settings_utilities.mdx index 49641710d83dd..48b80b9979e87 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-utilities'] --- import kbnManagementSettingsUtilitiesObj from './kbn_management_settings_utilities.devdocs.json'; diff --git a/api_docs/kbn_management_storybook_config.mdx b/api_docs/kbn_management_storybook_config.mdx index 8e6d61bc9f487..cef3f9cab7531 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-storybook-config'] --- import kbnManagementStorybookConfigObj from './kbn_management_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index 03b640eb7b6e3..bcb20bec8cd03 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl'] --- import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json'; diff --git a/api_docs/kbn_maps_vector_tile_utils.mdx b/api_docs/kbn_maps_vector_tile_utils.mdx index 2bc705f8aee9a..195ef885fc4bd 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/maps-vector-tile-utils'] --- import kbnMapsVectorTileUtilsObj from './kbn_maps_vector_tile_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index 0371132f74f6d..65412d22841c5 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-agg-utils'] --- import kbnMlAggUtilsObj from './kbn_ml_agg_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_anomaly_utils.mdx b/api_docs/kbn_ml_anomaly_utils.mdx index 0ffa23e91f349..cc30f708024f9 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-anomaly-utils'] --- import kbnMlAnomalyUtilsObj from './kbn_ml_anomaly_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_cancellable_search.mdx b/api_docs/kbn_ml_cancellable_search.mdx index cf20fd2deb0eb..29e492f954e15 100644 --- a/api_docs/kbn_ml_cancellable_search.mdx +++ b/api_docs/kbn_ml_cancellable_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-cancellable-search title: "@kbn/ml-cancellable-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-cancellable-search plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-cancellable-search'] --- import kbnMlCancellableSearchObj from './kbn_ml_cancellable_search.devdocs.json'; diff --git a/api_docs/kbn_ml_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index 76218b1fc75f0..b397b2fbfb3ed 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-category-validator'] --- import kbnMlCategoryValidatorObj from './kbn_ml_category_validator.devdocs.json'; diff --git a/api_docs/kbn_ml_chi2test.mdx b/api_docs/kbn_ml_chi2test.mdx index 2f5032a4516bb..3d66cd78d8182 100644 --- a/api_docs/kbn_ml_chi2test.mdx +++ b/api_docs/kbn_ml_chi2test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-chi2test title: "@kbn/ml-chi2test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-chi2test plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-chi2test'] --- import kbnMlChi2testObj from './kbn_ml_chi2test.devdocs.json'; diff --git a/api_docs/kbn_ml_data_frame_analytics_utils.mdx b/api_docs/kbn_ml_data_frame_analytics_utils.mdx index 48fe5ab837721..1f140032228a2 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-frame-analytics-utils'] --- import kbnMlDataFrameAnalyticsUtilsObj from './kbn_ml_data_frame_analytics_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_data_grid.mdx b/api_docs/kbn_ml_data_grid.mdx index c024022721ff0..60aad85153703 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-grid'] --- import kbnMlDataGridObj from './kbn_ml_data_grid.devdocs.json'; diff --git a/api_docs/kbn_ml_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx index 65d4c142ae313..f3a33906725b8 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-picker'] --- import kbnMlDatePickerObj from './kbn_ml_date_picker.devdocs.json'; diff --git a/api_docs/kbn_ml_date_utils.mdx b/api_docs/kbn_ml_date_utils.mdx index c74c7e7db1049..e4684e0acfd7c 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-utils'] --- import kbnMlDateUtilsObj from './kbn_ml_date_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_error_utils.mdx b/api_docs/kbn_ml_error_utils.mdx index be163bdf86264..82ca21a2dcdca 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils'] --- import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index dfde51856a67c..942f3c3ef651f 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-in-memory-table'] --- import kbnMlInMemoryTableObj from './kbn_ml_in_memory_table.devdocs.json'; diff --git a/api_docs/kbn_ml_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index 32fdc5f6a5747..1fa46f0a1d50d 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-defined'] --- import kbnMlIsDefinedObj from './kbn_ml_is_defined.devdocs.json'; diff --git a/api_docs/kbn_ml_is_populated_object.mdx b/api_docs/kbn_ml_is_populated_object.mdx index a15bbde96f51a..044ac3f55c8ba 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-populated-object'] --- import kbnMlIsPopulatedObjectObj from './kbn_ml_is_populated_object.devdocs.json'; diff --git a/api_docs/kbn_ml_kibana_theme.mdx b/api_docs/kbn_ml_kibana_theme.mdx index 74652218b0d5d..13e160d174fbc 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-kibana-theme'] --- import kbnMlKibanaThemeObj from './kbn_ml_kibana_theme.devdocs.json'; diff --git a/api_docs/kbn_ml_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index ec9d380ee1744..4bffc35841c71 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-local-storage'] --- import kbnMlLocalStorageObj from './kbn_ml_local_storage.devdocs.json'; diff --git a/api_docs/kbn_ml_nested_property.mdx b/api_docs/kbn_ml_nested_property.mdx index 6798e7b4d65d6..8b47fb32fe1dd 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-nested-property'] --- import kbnMlNestedPropertyObj from './kbn_ml_nested_property.devdocs.json'; diff --git a/api_docs/kbn_ml_number_utils.mdx b/api_docs/kbn_ml_number_utils.mdx index 118b2e767db7b..f3f075c4a17cf 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-number-utils'] --- import kbnMlNumberUtilsObj from './kbn_ml_number_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index 024b172af528e..19d0762d8f6e5 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-query-utils'] --- import kbnMlQueryUtilsObj from './kbn_ml_query_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_random_sampler_utils.mdx b/api_docs/kbn_ml_random_sampler_utils.mdx index 27f912784b201..c6680045a8d3c 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-random-sampler-utils'] --- import kbnMlRandomSamplerUtilsObj from './kbn_ml_random_sampler_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_route_utils.mdx b/api_docs/kbn_ml_route_utils.mdx index 2fc1435757a5b..7b956aa063ee0 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-route-utils'] --- import kbnMlRouteUtilsObj from './kbn_ml_route_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_runtime_field_utils.mdx b/api_docs/kbn_ml_runtime_field_utils.mdx index 4df6c75f4cb85..160b9dc7b7843 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-runtime-field-utils'] --- import kbnMlRuntimeFieldUtilsObj from './kbn_ml_runtime_field_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx index 3c77532ed2288..6e97e486d5cdb 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_time_buckets.mdx b/api_docs/kbn_ml_time_buckets.mdx index 9033be728dc96..4b4de1d25c252 100644 --- a/api_docs/kbn_ml_time_buckets.mdx +++ b/api_docs/kbn_ml_time_buckets.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-time-buckets title: "@kbn/ml-time-buckets" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-time-buckets plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-time-buckets'] --- import kbnMlTimeBucketsObj from './kbn_ml_time_buckets.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.devdocs.json b/api_docs/kbn_ml_trained_models_utils.devdocs.json index e8158b9a149ec..ae77700bbd77e 100644 --- a/api_docs/kbn_ml_trained_models_utils.devdocs.json +++ b/api_docs/kbn_ml_trained_models_utils.devdocs.json @@ -459,7 +459,7 @@ "label": "InferenceAPIConfigResponse", "description": [], "signature": [ - "{ inference_id: string; task_type: \"sparse_embedding\" | \"text_embedding\"; task_settings: { model?: string | undefined; }; } & ", + "{ model_id: string; task_type: \"sparse_embedding\" | \"text_embedding\"; task_settings: { model?: string | undefined; }; } & ", "InferenceServiceSettings" ], "path": "x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts", diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index 14c75d20bf72e..a6c9272922aee 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils'] --- import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_ui_actions.mdx b/api_docs/kbn_ml_ui_actions.mdx index 3716fc0eb1187..21c6151e860a3 100644 --- a/api_docs/kbn_ml_ui_actions.mdx +++ b/api_docs/kbn_ml_ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-ui-actions title: "@kbn/ml-ui-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-ui-actions plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-ui-actions'] --- import kbnMlUiActionsObj from './kbn_ml_ui_actions.devdocs.json'; diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index b04874db14a9d..8f96e3eeb675c 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index 17112ef2122b9..bff4bbec4885b 100644 --- a/api_docs/kbn_mock_idp_utils.mdx +++ b/api_docs/kbn_mock_idp_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mock-idp-utils title: "@kbn/mock-idp-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mock-idp-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mock-idp-utils'] --- import kbnMockIdpUtilsObj from './kbn_mock_idp_utils.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index 26bc748ab2ed1..0587350b0bbfd 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_object_versioning.mdx b/api_docs/kbn_object_versioning.mdx index 88e051bf6492d..a402d2c011bb9 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index 929d7f97239a3..243ba29586828 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_rule_utils.mdx b/api_docs/kbn_observability_alerting_rule_utils.mdx index d5f3604bf61f8..4ec5ee7bfb6cc 100644 --- a/api_docs/kbn_observability_alerting_rule_utils.mdx +++ b/api_docs/kbn_observability_alerting_rule_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-rule-utils title: "@kbn/observability-alerting-rule-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-rule-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-rule-utils'] --- import kbnObservabilityAlertingRuleUtilsObj from './kbn_observability_alerting_rule_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index 54116c2d3cc2a..c92dfe30da892 100644 --- a/api_docs/kbn_observability_alerting_test_data.mdx +++ b/api_docs/kbn_observability_alerting_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-test-data title: "@kbn/observability-alerting-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-test-data plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-test-data'] --- import kbnObservabilityAlertingTestDataObj from './kbn_observability_alerting_test_data.devdocs.json'; diff --git a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx index 29d58c5478d84..3ae918a45bb0e 100644 --- a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx +++ b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-get-padded-alert-time-range-util title: "@kbn/observability-get-padded-alert-time-range-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-get-padded-alert-time-range-util plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-get-padded-alert-time-range-util'] --- import kbnObservabilityGetPaddedAlertTimeRangeUtilObj from './kbn_observability_get_padded_alert_time_range_util.devdocs.json'; diff --git a/api_docs/kbn_openapi_bundler.mdx b/api_docs/kbn_openapi_bundler.mdx index 63372b1210d96..cbd6bf2059f38 100644 --- a/api_docs/kbn_openapi_bundler.mdx +++ b/api_docs/kbn_openapi_bundler.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-bundler title: "@kbn/openapi-bundler" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-bundler plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-bundler'] --- import kbnOpenapiBundlerObj from './kbn_openapi_bundler.devdocs.json'; diff --git a/api_docs/kbn_openapi_generator.mdx b/api_docs/kbn_openapi_generator.mdx index ef42b97d161ed..9741b23f9cb77 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-generator'] --- import kbnOpenapiGeneratorObj from './kbn_openapi_generator.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 8ff9bf100e506..8e5af990de6c6 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer'] --- import kbnOptimizerObj from './kbn_optimizer.devdocs.json'; diff --git a/api_docs/kbn_optimizer_webpack_helpers.mdx b/api_docs/kbn_optimizer_webpack_helpers.mdx index 037622fd31c00..d3ece475d27f4 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer-webpack-helpers'] --- import kbnOptimizerWebpackHelpersObj from './kbn_optimizer_webpack_helpers.devdocs.json'; diff --git a/api_docs/kbn_osquery_io_ts_types.mdx b/api_docs/kbn_osquery_io_ts_types.mdx index ba5dce47ca90c..f906998c08b0f 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_panel_loader.mdx b/api_docs/kbn_panel_loader.mdx index afaefffa851a0..d0d46b747d677 100644 --- a/api_docs/kbn_panel_loader.mdx +++ b/api_docs/kbn_panel_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-panel-loader title: "@kbn/panel-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/panel-loader plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/panel-loader'] --- import kbnPanelLoaderObj from './kbn_panel_loader.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index ced9ea2096371..fc9c5c2b836e7 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_check.mdx b/api_docs/kbn_plugin_check.mdx index a304910a3b910..94421ddab92e4 100644 --- a/api_docs/kbn_plugin_check.mdx +++ b/api_docs/kbn_plugin_check.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-check title: "@kbn/plugin-check" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-check plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-check'] --- import kbnPluginCheckObj from './kbn_plugin_check.devdocs.json'; diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index d5bbad482ee41..9842ce1b2f199 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-generator'] --- import kbnPluginGeneratorObj from './kbn_plugin_generator.devdocs.json'; diff --git a/api_docs/kbn_plugin_helpers.mdx b/api_docs/kbn_plugin_helpers.mdx index 3c7a419673b26..5f4c512a0aeb0 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_presentation_containers.mdx b/api_docs/kbn_presentation_containers.mdx index 4e68a0fefd030..743e318fde08b 100644 --- a/api_docs/kbn_presentation_containers.mdx +++ b/api_docs/kbn_presentation_containers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-containers title: "@kbn/presentation-containers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-containers plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index ed6992cac46ed..a9dcc8c70ced0 100644 --- a/api_docs/kbn_presentation_publishing.mdx +++ b/api_docs/kbn_presentation_publishing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-publishing title: "@kbn/presentation-publishing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-publishing plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-publishing'] --- import kbnPresentationPublishingObj from './kbn_presentation_publishing.devdocs.json'; diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index e2fd9d147e53c..6bae68b32b7dc 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/profiling-utils'] --- import kbnProfilingUtilsObj from './kbn_profiling_utils.devdocs.json'; diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx index 50dd8c3b2b1e3..9931bb385a060 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/random-sampling'] --- import kbnRandomSamplingObj from './kbn_random_sampling.devdocs.json'; diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index 028e42093ac0c..28a045f4b2986 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_hooks.mdx b/api_docs/kbn_react_hooks.mdx index 9c5f50ccf4a76..2d905a4f4034b 100644 --- a/api_docs/kbn_react_hooks.mdx +++ b/api_docs/kbn_react_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-hooks title: "@kbn/react-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-hooks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-hooks'] --- import kbnReactHooksObj from './kbn_react_hooks.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index dccb65f1c17d0..ad3951a758e84 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-common'] --- import kbnReactKibanaContextCommonObj from './kbn_react_kibana_context_common.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_render.mdx b/api_docs/kbn_react_kibana_context_render.mdx index 94ef39a423494..f31c9d7556ff4 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-render'] --- import kbnReactKibanaContextRenderObj from './kbn_react_kibana_context_render.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_root.mdx b/api_docs/kbn_react_kibana_context_root.mdx index efc90b0f417cc..5c4d42c86d48d 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-root'] --- import kbnReactKibanaContextRootObj from './kbn_react_kibana_context_root.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_styled.mdx b/api_docs/kbn_react_kibana_context_styled.mdx index 441d7749cd2db..802677e79fac9 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-styled'] --- import kbnReactKibanaContextStyledObj from './kbn_react_kibana_context_styled.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_theme.mdx b/api_docs/kbn_react_kibana_context_theme.mdx index 0c164461e518d..5f5de3aa4b35a 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-theme'] --- import kbnReactKibanaContextThemeObj from './kbn_react_kibana_context_theme.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_mount.mdx b/api_docs/kbn_react_kibana_mount.mdx index ffafc49224a26..70702b54380f7 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_recently_accessed.mdx b/api_docs/kbn_recently_accessed.mdx index c7b17419dfd44..83a0ca3f4e365 100644 --- a/api_docs/kbn_recently_accessed.mdx +++ b/api_docs/kbn_recently_accessed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-recently-accessed title: "@kbn/recently-accessed" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/recently-accessed plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/recently-accessed'] --- import kbnRecentlyAccessedObj from './kbn_recently_accessed.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 7b6772c584e41..db93151b746bf 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-file-maps'] --- import kbnRepoFileMapsObj from './kbn_repo_file_maps.devdocs.json'; diff --git a/api_docs/kbn_repo_linter.mdx b/api_docs/kbn_repo_linter.mdx index 3d658d9ffdddd..93d7485c219ee 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-linter'] --- import kbnRepoLinterObj from './kbn_repo_linter.devdocs.json'; diff --git a/api_docs/kbn_repo_path.mdx b/api_docs/kbn_repo_path.mdx index fb99cfdec10b6..fad8b1c2d772f 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-path'] --- import kbnRepoPathObj from './kbn_repo_path.devdocs.json'; diff --git a/api_docs/kbn_repo_source_classifier.mdx b/api_docs/kbn_repo_source_classifier.mdx index 2d16f740bc07e..a76b6f8dc3286 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-source-classifier'] --- import kbnRepoSourceClassifierObj from './kbn_repo_source_classifier.devdocs.json'; diff --git a/api_docs/kbn_reporting_common.mdx b/api_docs/kbn_reporting_common.mdx index f351d40946874..294d2ff7978f6 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_csv_share_panel.mdx b/api_docs/kbn_reporting_csv_share_panel.mdx index 403f39c790a03..e33994a59a54e 100644 --- a/api_docs/kbn_reporting_csv_share_panel.mdx +++ b/api_docs/kbn_reporting_csv_share_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-csv-share-panel title: "@kbn/reporting-csv-share-panel" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-csv-share-panel plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-csv-share-panel'] --- import kbnReportingCsvSharePanelObj from './kbn_reporting_csv_share_panel.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index af23e79a469bb..3a0828365df95 100644 --- a/api_docs/kbn_reporting_export_types_csv.mdx +++ b/api_docs/kbn_reporting_export_types_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv title: "@kbn/reporting-export-types-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv'] --- import kbnReportingExportTypesCsvObj from './kbn_reporting_export_types_csv.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv_common.mdx b/api_docs/kbn_reporting_export_types_csv_common.mdx index b1d4296f5e470..8d0365fe788d6 100644 --- a/api_docs/kbn_reporting_export_types_csv_common.mdx +++ b/api_docs/kbn_reporting_export_types_csv_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv-common title: "@kbn/reporting-export-types-csv-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv-common plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv-common'] --- import kbnReportingExportTypesCsvCommonObj from './kbn_reporting_export_types_csv_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf.mdx b/api_docs/kbn_reporting_export_types_pdf.mdx index e7beab352a9d8..d730f262abe95 100644 --- a/api_docs/kbn_reporting_export_types_pdf.mdx +++ b/api_docs/kbn_reporting_export_types_pdf.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf title: "@kbn/reporting-export-types-pdf" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf'] --- import kbnReportingExportTypesPdfObj from './kbn_reporting_export_types_pdf.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf_common.mdx b/api_docs/kbn_reporting_export_types_pdf_common.mdx index cffb408f513cf..ae6efecdbefbe 100644 --- a/api_docs/kbn_reporting_export_types_pdf_common.mdx +++ b/api_docs/kbn_reporting_export_types_pdf_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf-common title: "@kbn/reporting-export-types-pdf-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf-common plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf-common'] --- import kbnReportingExportTypesPdfCommonObj from './kbn_reporting_export_types_pdf_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png.mdx b/api_docs/kbn_reporting_export_types_png.mdx index 303cf833316b1..347feaf82ae3f 100644 --- a/api_docs/kbn_reporting_export_types_png.mdx +++ b/api_docs/kbn_reporting_export_types_png.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png title: "@kbn/reporting-export-types-png" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png'] --- import kbnReportingExportTypesPngObj from './kbn_reporting_export_types_png.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png_common.mdx b/api_docs/kbn_reporting_export_types_png_common.mdx index 1a1566dfdb2de..f9ca60d83abd6 100644 --- a/api_docs/kbn_reporting_export_types_png_common.mdx +++ b/api_docs/kbn_reporting_export_types_png_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png-common title: "@kbn/reporting-export-types-png-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png-common plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png-common'] --- import kbnReportingExportTypesPngCommonObj from './kbn_reporting_export_types_png_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_mocks_server.mdx b/api_docs/kbn_reporting_mocks_server.mdx index c46ded0081348..cb5fbf9939e9a 100644 --- a/api_docs/kbn_reporting_mocks_server.mdx +++ b/api_docs/kbn_reporting_mocks_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-mocks-server title: "@kbn/reporting-mocks-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-mocks-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-mocks-server'] --- import kbnReportingMocksServerObj from './kbn_reporting_mocks_server.devdocs.json'; diff --git a/api_docs/kbn_reporting_public.mdx b/api_docs/kbn_reporting_public.mdx index 4f4dfad73e355..7e72b6c898b02 100644 --- a/api_docs/kbn_reporting_public.mdx +++ b/api_docs/kbn_reporting_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-public title: "@kbn/reporting-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-public plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-public'] --- import kbnReportingPublicObj from './kbn_reporting_public.devdocs.json'; diff --git a/api_docs/kbn_reporting_server.mdx b/api_docs/kbn_reporting_server.mdx index 83f3afe2c13e6..59cd9ad4827f7 100644 --- a/api_docs/kbn_reporting_server.mdx +++ b/api_docs/kbn_reporting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-server title: "@kbn/reporting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-server'] --- import kbnReportingServerObj from './kbn_reporting_server.devdocs.json'; diff --git a/api_docs/kbn_resizable_layout.mdx b/api_docs/kbn_resizable_layout.mdx index 293cdb3f68109..71f35e6cc8037 100644 --- a/api_docs/kbn_resizable_layout.mdx +++ b/api_docs/kbn_resizable_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-resizable-layout title: "@kbn/resizable-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/resizable-layout plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_response_ops_feature_flag_service.mdx b/api_docs/kbn_response_ops_feature_flag_service.mdx index 4393498ff91dc..a870ca38ad0fb 100644 --- a/api_docs/kbn_response_ops_feature_flag_service.mdx +++ b/api_docs/kbn_response_ops_feature_flag_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-feature-flag-service title: "@kbn/response-ops-feature-flag-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-feature-flag-service plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-feature-flag-service'] --- import kbnResponseOpsFeatureFlagServiceObj from './kbn_response_ops_feature_flag_service.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 3b29506dff6b4..719c67d6992e0 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rollup.mdx b/api_docs/kbn_rollup.mdx index 0867f1c9369bf..b3f2dec3efcde 100644 --- a/api_docs/kbn_rollup.mdx +++ b/api_docs/kbn_rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rollup title: "@kbn/rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rollup plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rollup'] --- import kbnRollupObj from './kbn_rollup.devdocs.json'; diff --git a/api_docs/kbn_router_to_openapispec.mdx b/api_docs/kbn_router_to_openapispec.mdx index d789d5bfd8a3a..57afbe0395e58 100644 --- a/api_docs/kbn_router_to_openapispec.mdx +++ b/api_docs/kbn_router_to_openapispec.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-to-openapispec title: "@kbn/router-to-openapispec" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-to-openapispec plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-to-openapispec'] --- import kbnRouterToOpenapispecObj from './kbn_router_to_openapispec.devdocs.json'; diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index 78b4382721823..aa2aca9c80a47 100644 --- a/api_docs/kbn_router_utils.mdx +++ b/api_docs/kbn_router_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-utils title: "@kbn/router-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-utils'] --- import kbnRouterUtilsObj from './kbn_router_utils.devdocs.json'; diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx index bda7ef8e0a1f0..28920e78588ef 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rrule'] --- import kbnRruleObj from './kbn_rrule.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index 7795583ec45dd..ab2e86a5841c7 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; diff --git a/api_docs/kbn_saved_objects_settings.mdx b/api_docs/kbn_saved_objects_settings.mdx index baadb225583bf..1736fd03cc2fb 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index 7d2c51b325582..b0d46f3af66b6 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-panels'] --- import kbnSearchApiPanelsObj from './kbn_search_api_panels.devdocs.json'; diff --git a/api_docs/kbn_search_connectors.devdocs.json b/api_docs/kbn_search_connectors.devdocs.json index 51f17627b7d52..969e55b8213b6 100644 --- a/api_docs/kbn_search_connectors.devdocs.json +++ b/api_docs/kbn_search_connectors.devdocs.json @@ -51905,6 +51905,206 @@ "deprecated": false, "trackAdoption": false, "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.sharepoint_server.configuration.authentication", + "type": "Object", + "tags": [], + "label": "authentication", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.sharepoint_server.configuration.authentication.default_value", + "type": "Uncategorized", + "tags": [], + "label": "default_value", + "description": [], + "signature": [ + "null" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.sharepoint_server.configuration.authentication.depends_on", + "type": "Array", + "tags": [], + "label": "depends_on", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.sharepoint_server.configuration.authentication.display", + "type": "string", + "tags": [], + "label": "display", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.DisplayType", + "text": "DisplayType" + }, + ".DROPDOWN" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.sharepoint_server.configuration.authentication.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.sharepoint_server.configuration.authentication.options", + "type": "Array", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "{ label: string; value: string; }[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.sharepoint_server.configuration.authentication.order", + "type": "number", + "tags": [], + "label": "order", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.sharepoint_server.configuration.authentication.required", + "type": "boolean", + "tags": [], + "label": "required", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.sharepoint_server.configuration.authentication.sensitive", + "type": "boolean", + "tags": [], + "label": "sensitive", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.sharepoint_server.configuration.authentication.tooltip", + "type": "Uncategorized", + "tags": [], + "label": "tooltip", + "description": [], + "signature": [ + "null" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.sharepoint_server.configuration.authentication.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.FieldType", + "text": "FieldType" + }, + ".STRING" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.sharepoint_server.configuration.authentication.ui_restrictions", + "type": "Array", + "tags": [], + "label": "ui_restrictions", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.sharepoint_server.configuration.authentication.validations", + "type": "Array", + "tags": [], + "label": "validations", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.sharepoint_server.configuration.authentication.value", + "type": "string", + "tags": [], + "label": "value", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, { "parentPluginId": "@kbn/search-connectors", "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.sharepoint_server.configuration.username", diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index 8a3844dadafb8..120d2ccd40116 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-ki | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 3915 | 0 | 3915 | 0 | +| 3929 | 0 | 3929 | 0 | ## Common diff --git a/api_docs/kbn_search_errors.mdx b/api_docs/kbn_search_errors.mdx index 564f4b36cb698..29db92a3fc068 100644 --- a/api_docs/kbn_search_errors.mdx +++ b/api_docs/kbn_search_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-errors title: "@kbn/search-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-errors plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-errors'] --- import kbnSearchErrorsObj from './kbn_search_errors.devdocs.json'; diff --git a/api_docs/kbn_search_index_documents.mdx b/api_docs/kbn_search_index_documents.mdx index 84fea22378875..4f7d852789a01 100644 --- a/api_docs/kbn_search_index_documents.mdx +++ b/api_docs/kbn_search_index_documents.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-index-documents title: "@kbn/search-index-documents" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-index-documents plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-index-documents'] --- import kbnSearchIndexDocumentsObj from './kbn_search_index_documents.devdocs.json'; diff --git a/api_docs/kbn_search_response_warnings.mdx b/api_docs/kbn_search_response_warnings.mdx index b191268b3cb33..7b37ae949f5a9 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_search_types.mdx b/api_docs/kbn_search_types.mdx index f394b99c94901..798a1c716d5a4 100644 --- a/api_docs/kbn_search_types.mdx +++ b/api_docs/kbn_search_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-types title: "@kbn/search-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-types plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-types'] --- import kbnSearchTypesObj from './kbn_search_types.devdocs.json'; diff --git a/api_docs/kbn_security_api_key_management.mdx b/api_docs/kbn_security_api_key_management.mdx index 2eb562193e339..60e2a99291c51 100644 --- a/api_docs/kbn_security_api_key_management.mdx +++ b/api_docs/kbn_security_api_key_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-api-key-management title: "@kbn/security-api-key-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-api-key-management plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-api-key-management'] --- import kbnSecurityApiKeyManagementObj from './kbn_security_api_key_management.devdocs.json'; diff --git a/api_docs/kbn_security_form_components.mdx b/api_docs/kbn_security_form_components.mdx index bf4a92d130b9e..966d58d935f64 100644 --- a/api_docs/kbn_security_form_components.mdx +++ b/api_docs/kbn_security_form_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-form-components title: "@kbn/security-form-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-form-components plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-form-components'] --- import kbnSecurityFormComponentsObj from './kbn_security_form_components.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index 2fcb13a1a3456..b01079a47c9ef 100644 --- a/api_docs/kbn_security_hardening.mdx +++ b/api_docs/kbn_security_hardening.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-hardening title: "@kbn/security-hardening" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-hardening plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-hardening'] --- import kbnSecurityHardeningObj from './kbn_security_hardening.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_common.mdx b/api_docs/kbn_security_plugin_types_common.mdx index 209c94c1cafd8..6ee7dacc9401e 100644 --- a/api_docs/kbn_security_plugin_types_common.mdx +++ b/api_docs/kbn_security_plugin_types_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-common title: "@kbn/security-plugin-types-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-common plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-common'] --- import kbnSecurityPluginTypesCommonObj from './kbn_security_plugin_types_common.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_public.mdx b/api_docs/kbn_security_plugin_types_public.mdx index 7efc0945c6521..649fba6442237 100644 --- a/api_docs/kbn_security_plugin_types_public.mdx +++ b/api_docs/kbn_security_plugin_types_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-public title: "@kbn/security-plugin-types-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-public plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-public'] --- import kbnSecurityPluginTypesPublicObj from './kbn_security_plugin_types_public.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_server.mdx b/api_docs/kbn_security_plugin_types_server.mdx index 110dab7edfefd..0ed414ae89659 100644 --- a/api_docs/kbn_security_plugin_types_server.mdx +++ b/api_docs/kbn_security_plugin_types_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-server title: "@kbn/security-plugin-types-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-server plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_solution_distribution_bar.mdx b/api_docs/kbn_security_solution_distribution_bar.mdx index a7ad5cee91d93..ae5436a716683 100644 --- a/api_docs/kbn_security_solution_distribution_bar.mdx +++ b/api_docs/kbn_security_solution_distribution_bar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-distribution-bar title: "@kbn/security-solution-distribution-bar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-distribution-bar plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-distribution-bar'] --- import kbnSecuritySolutionDistributionBarObj from './kbn_security_solution_distribution_bar.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index 058af61f8d3fc..2dc91af881ebd 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-features'] --- import kbnSecuritySolutionFeaturesObj from './kbn_security_solution_features.devdocs.json'; diff --git a/api_docs/kbn_security_solution_navigation.mdx b/api_docs/kbn_security_solution_navigation.mdx index 5eef877c71008..1feb5f6ad66f4 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-navigation'] --- import kbnSecuritySolutionNavigationObj from './kbn_security_solution_navigation.devdocs.json'; diff --git a/api_docs/kbn_security_solution_side_nav.mdx b/api_docs/kbn_security_solution_side_nav.mdx index 9c76278af9872..4f4d249f7a509 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-side-nav'] --- import kbnSecuritySolutionSideNavObj from './kbn_security_solution_side_nav.devdocs.json'; diff --git a/api_docs/kbn_security_solution_storybook_config.mdx b/api_docs/kbn_security_solution_storybook_config.mdx index 6f16696c117a2..0e3073a8a0551 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config'] --- import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index fee771529f127..b08d7cc14ffd7 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] --- import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_data_table.mdx b/api_docs/kbn_securitysolution_data_table.mdx index 2af0ae0037ad5..c1a54c1535010 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-data-table'] --- import kbnSecuritysolutionDataTableObj from './kbn_securitysolution_data_table.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_ecs.mdx b/api_docs/kbn_securitysolution_ecs.mdx index 500b77aaf7b1d..23c12e5acbe7c 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-ecs'] --- import kbnSecuritysolutionEcsObj from './kbn_securitysolution_ecs.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_es_utils.mdx b/api_docs/kbn_securitysolution_es_utils.mdx index 0a6cfd0d1b6d0..fb39579a986e1 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-es-utils'] --- import kbnSecuritysolutionEsUtilsObj from './kbn_securitysolution_es_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_exception_list_components.mdx b/api_docs/kbn_securitysolution_exception_list_components.mdx index b117d7c0ae109..58e54104e4ec2 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index fdc95a7810371..975814cb4ae38 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-hook-utils'] --- import kbnSecuritysolutionHookUtilsObj from './kbn_securitysolution_hook_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx index 28329127d58a1..2e9351e89c41b 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-alerting-types'] --- import kbnSecuritysolutionIoTsAlertingTypesObj from './kbn_securitysolution_io_ts_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_list_types.mdx b/api_docs/kbn_securitysolution_io_ts_list_types.mdx index 9b6b929396f09..f7dff5023806b 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-list-types'] --- import kbnSecuritysolutionIoTsListTypesObj from './kbn_securitysolution_io_ts_list_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_types.mdx b/api_docs/kbn_securitysolution_io_ts_types.mdx index 120fd26fba15f..b85a78c44a2e0 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-types'] --- import kbnSecuritysolutionIoTsTypesObj from './kbn_securitysolution_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_utils.mdx b/api_docs/kbn_securitysolution_io_ts_utils.mdx index 8c22e571f8960..ccb3907259a44 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-utils'] --- import kbnSecuritysolutionIoTsUtilsObj from './kbn_securitysolution_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_api.mdx b/api_docs/kbn_securitysolution_list_api.mdx index 48f000f70e0aa..2bea1bbbaef21 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-api'] --- import kbnSecuritysolutionListApiObj from './kbn_securitysolution_list_api.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_constants.mdx b/api_docs/kbn_securitysolution_list_constants.mdx index bf022848eecf6..9e76024b5891f 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-constants'] --- import kbnSecuritysolutionListConstantsObj from './kbn_securitysolution_list_constants.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_hooks.mdx b/api_docs/kbn_securitysolution_list_hooks.mdx index 7ee1d0ec68e11..1a3f4b763fa81 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-hooks'] --- import kbnSecuritysolutionListHooksObj from './kbn_securitysolution_list_hooks.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_utils.mdx b/api_docs/kbn_securitysolution_list_utils.mdx index e9fe834b133a9..f746af6e4c47d 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-utils'] --- import kbnSecuritysolutionListUtilsObj from './kbn_securitysolution_list_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_rules.mdx b/api_docs/kbn_securitysolution_rules.mdx index 81073b2927b1d..c8ba76dfc14a0 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-rules'] --- import kbnSecuritysolutionRulesObj from './kbn_securitysolution_rules.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_t_grid.mdx b/api_docs/kbn_securitysolution_t_grid.mdx index 8ccbaf0361813..7ea138439e86b 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-t-grid'] --- import kbnSecuritysolutionTGridObj from './kbn_securitysolution_t_grid.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_utils.mdx b/api_docs/kbn_securitysolution_utils.mdx index 6bb092a12ae7c..f9f3288764772 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-utils'] --- import kbnSecuritysolutionUtilsObj from './kbn_securitysolution_utils.devdocs.json'; diff --git a/api_docs/kbn_server_http_tools.mdx b/api_docs/kbn_server_http_tools.mdx index a0fe0bce4e42f..4bd879459d4ab 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-http-tools'] --- import kbnServerHttpToolsObj from './kbn_server_http_tools.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository.mdx b/api_docs/kbn_server_route_repository.mdx index 6349f2b4b11b5..463db4fa64737 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_utils.mdx b/api_docs/kbn_server_route_repository_utils.mdx index 81e983e6b57d7..36b4407e7c9fa 100644 --- a/api_docs/kbn_server_route_repository_utils.mdx +++ b/api_docs/kbn_server_route_repository_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-utils title: "@kbn/server-route-repository-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-utils'] --- import kbnServerRouteRepositoryUtilsObj from './kbn_server_route_repository_utils.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index 8b8c906355978..9ff91f4c280a1 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-common-settings'] --- import kbnServerlessCommonSettingsObj from './kbn_serverless_common_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_observability_settings.mdx b/api_docs/kbn_serverless_observability_settings.mdx index df533b85c5b19..37514091ff93d 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-observability-settings'] --- import kbnServerlessObservabilitySettingsObj from './kbn_serverless_observability_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_project_switcher.mdx b/api_docs/kbn_serverless_project_switcher.mdx index 69544abab6e7c..bba42257aefb3 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-project-switcher'] --- import kbnServerlessProjectSwitcherObj from './kbn_serverless_project_switcher.devdocs.json'; diff --git a/api_docs/kbn_serverless_search_settings.mdx b/api_docs/kbn_serverless_search_settings.mdx index d678e2306b550..359b959d445f7 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-search-settings'] --- import kbnServerlessSearchSettingsObj from './kbn_serverless_search_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_security_settings.mdx b/api_docs/kbn_serverless_security_settings.mdx index 1bebed52b87d9..44bfa1c00580f 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-security-settings'] --- import kbnServerlessSecuritySettingsObj from './kbn_serverless_security_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_storybook_config.mdx b/api_docs/kbn_serverless_storybook_config.mdx index 722a951d8351b..3d301a8f0ec21 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-storybook-config'] --- import kbnServerlessStorybookConfigObj from './kbn_serverless_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx index 5c89af7b238b8..9ae5f7fcb81ec 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-svg'] --- import kbnSharedSvgObj from './kbn_shared_svg.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_avatar_solution.mdx b/api_docs/kbn_shared_ux_avatar_solution.mdx index 5f8093e3e31ba..ae5f9e6400cdb 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index df6e0aea3a374..99dd917ac0cdf 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index 996484c227a74..87790db4fd710 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-toolbar'] --- import kbnSharedUxButtonToolbarObj from './kbn_shared_ux_button_toolbar.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data.mdx b/api_docs/kbn_shared_ux_card_no_data.mdx index 23a059e33a60c..cda6e4268b79c 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data'] --- import kbnSharedUxCardNoDataObj from './kbn_shared_ux_card_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx index 607c0bd176ff9..f4f26b682a9bc 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data-mocks'] --- import kbnSharedUxCardNoDataMocksObj from './kbn_shared_ux_card_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_chrome_navigation.devdocs.json b/api_docs/kbn_shared_ux_chrome_navigation.devdocs.json index cc5d573381a01..3b673465c3055 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.devdocs.json +++ b/api_docs/kbn_shared_ux_chrome_navigation.devdocs.json @@ -212,9 +212,11 @@ }, "[]>; }; getIsSideNavCollapsed$: () => ", "Observable", - "; }; http: { basePath: BasePathService; getLoadingCount$(): ", + "; }; http: { basePath: ", + "BasePathService", + "; getLoadingCount$(): ", "Observable", - "; }; }" + "; }; analytics: { reportEvent: (eventType: string, eventData: object) => void; }; }" ], "path": "packages/shared-ux/chrome/navigation/src/types.ts", "deprecated": false, @@ -267,7 +269,7 @@ "label": "basePath", "description": [], "signature": [ - "{ prepend: (url: string) => string; }" + "{ prepend: (url: string) => string; remove: (url: string) => string; }" ], "path": "packages/shared-ux/chrome/navigation/src/types.ts", "deprecated": false, @@ -397,6 +399,20 @@ "path": "packages/shared-ux/chrome/navigation/src/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/shared-ux-chrome-navigation", + "id": "def-public.NavigationServices.eventTracker", + "type": "Object", + "tags": [], + "label": "eventTracker", + "description": [], + "signature": [ + "EventTracker" + ], + "path": "packages/shared-ux/chrome/navigation/src/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -603,7 +619,20 @@ "initialIsOpen": false } ], - "enums": [], + "enums": [ + { + "parentPluginId": "@kbn/shared-ux-chrome-navigation", + "id": "def-public.FieldType", + "type": "Enum", + "tags": [], + "label": "FieldType", + "description": [], + "path": "packages/shared-ux/chrome/navigation/src/analytics/event_tracker.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], "misc": [ { "parentPluginId": "@kbn/shared-ux-chrome-navigation", @@ -640,6 +669,18 @@ } ], "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/shared-ux-chrome-navigation", + "id": "def-public.EventType", + "type": "string", + "tags": [], + "label": "EventType", + "description": [], + "path": "packages/shared-ux/chrome/navigation/src/analytics/event_tracker.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false } ], "objects": [] diff --git a/api_docs/kbn_shared_ux_chrome_navigation.mdx b/api_docs/kbn_shared_ux_chrome_navigation.mdx index f1c65abe9ff40..f7771a2afd61e 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation'] --- import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 32 | 0 | 23 | 0 | +| 35 | 0 | 26 | 2 | ## Client @@ -31,6 +31,9 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh ### Interfaces +### Enums + + ### Consts, variables and types diff --git a/api_docs/kbn_shared_ux_error_boundary.mdx b/api_docs/kbn_shared_ux_error_boundary.mdx index 20fdce1b2e1a8..162daaea47677 100644 --- a/api_docs/kbn_shared_ux_error_boundary.mdx +++ b/api_docs/kbn_shared_ux_error_boundary.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-error-boundary title: "@kbn/shared-ux-error-boundary" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-error-boundary plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-error-boundary'] --- import kbnSharedUxErrorBoundaryObj from './kbn_shared_ux_error_boundary.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index 17bbbd7cae18a..ec916df85cd93 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-context'] --- import kbnSharedUxFileContextObj from './kbn_shared_ux_file_context.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image.mdx b/api_docs/kbn_shared_ux_file_image.mdx index 026c09dde0a6f..8ace8e510aefa 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image'] --- import kbnSharedUxFileImageObj from './kbn_shared_ux_file_image.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image_mocks.mdx b/api_docs/kbn_shared_ux_file_image_mocks.mdx index d3bc2976b10d3..d5eceb5674201 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image-mocks'] --- import kbnSharedUxFileImageMocksObj from './kbn_shared_ux_file_image_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_mocks.mdx b/api_docs/kbn_shared_ux_file_mocks.mdx index 6c88df056d2b4..a04253cf5871c 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-mocks'] --- import kbnSharedUxFileMocksObj from './kbn_shared_ux_file_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_picker.mdx b/api_docs/kbn_shared_ux_file_picker.mdx index 9f2ce087132c6..9d466383e3a5e 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-picker'] --- import kbnSharedUxFilePickerObj from './kbn_shared_ux_file_picker.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_types.mdx b/api_docs/kbn_shared_ux_file_types.mdx index 2a5376b5c5b2f..f1ffdae60c5d4 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-types'] --- import kbnSharedUxFileTypesObj from './kbn_shared_ux_file_types.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_upload.mdx b/api_docs/kbn_shared_ux_file_upload.mdx index d257b36dc6693..45f936982cc77 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-upload'] --- import kbnSharedUxFileUploadObj from './kbn_shared_ux_file_upload.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_util.mdx b/api_docs/kbn_shared_ux_file_util.mdx index dfdba1b2c7abd..97231d50c09a4 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-util'] --- import kbnSharedUxFileUtilObj from './kbn_shared_ux_file_util.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app.mdx b/api_docs/kbn_shared_ux_link_redirect_app.mdx index e4f4b3f0bb641..8b7dfe82bf7b5 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app'] --- import kbnSharedUxLinkRedirectAppObj from './kbn_shared_ux_link_redirect_app.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx index 523c6314e8985..0638d364ded7d 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app-mocks'] --- import kbnSharedUxLinkRedirectAppMocksObj from './kbn_shared_ux_link_redirect_app_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown.mdx b/api_docs/kbn_shared_ux_markdown.mdx index 0a4b4035c90e7..ecabf8f358d00 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown'] --- import kbnSharedUxMarkdownObj from './kbn_shared_ux_markdown.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown_mocks.mdx b/api_docs/kbn_shared_ux_markdown_mocks.mdx index b5ec40633c53c..aabfa5e0e1dc4 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown-mocks'] --- import kbnSharedUxMarkdownMocksObj from './kbn_shared_ux_markdown_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx index a6ec49f1663a6..9e1621adabf1e 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data'] --- import kbnSharedUxPageAnalyticsNoDataObj from './kbn_shared_ux_page_analytics_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx index 9c3ff4a420a93..56a9adab2496b 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data-mocks'] --- import kbnSharedUxPageAnalyticsNoDataMocksObj from './kbn_shared_ux_page_analytics_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx index 25dcd6e69af3f..f616fa58afc1c 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data'] --- import kbnSharedUxPageKibanaNoDataObj from './kbn_shared_ux_page_kibana_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx index e805136792b6e..208b155e4b4a4 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data-mocks'] --- import kbnSharedUxPageKibanaNoDataMocksObj from './kbn_shared_ux_page_kibana_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template.mdx b/api_docs/kbn_shared_ux_page_kibana_template.mdx index ce0956dadffe1..43597d6845891 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template'] --- import kbnSharedUxPageKibanaTemplateObj from './kbn_shared_ux_page_kibana_template.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx index c16dd9bcd8a97..d1685e5cf7abf 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template-mocks'] --- import kbnSharedUxPageKibanaTemplateMocksObj from './kbn_shared_ux_page_kibana_template_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data.mdx b/api_docs/kbn_shared_ux_page_no_data.mdx index 62929995d0a8a..c04ffe2576ead 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data'] --- import kbnSharedUxPageNoDataObj from './kbn_shared_ux_page_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config.mdx b/api_docs/kbn_shared_ux_page_no_data_config.mdx index 5a3d12fbb9331..465f1b33fceed 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config'] --- import kbnSharedUxPageNoDataConfigObj from './kbn_shared_ux_page_no_data_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx index 88940cdfe3ee2..74ee00b272db8 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config-mocks'] --- import kbnSharedUxPageNoDataConfigMocksObj from './kbn_shared_ux_page_no_data_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx index d930fd497fe1d..0f1cabde97daf 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-mocks'] --- import kbnSharedUxPageNoDataMocksObj from './kbn_shared_ux_page_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_solution_nav.mdx b/api_docs/kbn_shared_ux_page_solution_nav.mdx index a7eae9f5c3ed2..2d2e2a3a507ca 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-solution-nav'] --- import kbnSharedUxPageSolutionNavObj from './kbn_shared_ux_page_solution_nav.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx index 42305ec6a12bb..3529437e2cdad 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views'] --- import kbnSharedUxPromptNoDataViewsObj from './kbn_shared_ux_prompt_no_data_views.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx index aea15e89b1a57..1ff7beb416389 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views-mocks'] --- import kbnSharedUxPromptNoDataViewsMocksObj from './kbn_shared_ux_prompt_no_data_views_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_not_found.mdx b/api_docs/kbn_shared_ux_prompt_not_found.mdx index dfd8806776503..baf2c4852913b 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-not-found'] --- import kbnSharedUxPromptNotFoundObj from './kbn_shared_ux_prompt_not_found.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router.mdx b/api_docs/kbn_shared_ux_router.mdx index a6a6bc3e93c9e..fbe92e518eccc 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router'] --- import kbnSharedUxRouterObj from './kbn_shared_ux_router.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router_mocks.mdx b/api_docs/kbn_shared_ux_router_mocks.mdx index 33a4372366999..52ad2cb196677 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router-mocks'] --- import kbnSharedUxRouterMocksObj from './kbn_shared_ux_router_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_config.mdx b/api_docs/kbn_shared_ux_storybook_config.mdx index 73d984f3eb530..1ac282eb0ae1f 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-config'] --- import kbnSharedUxStorybookConfigObj from './kbn_shared_ux_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_mock.mdx b/api_docs/kbn_shared_ux_storybook_mock.mdx index 570e4dc255e76..fd15039f31e45 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_tabbed_modal.mdx b/api_docs/kbn_shared_ux_tabbed_modal.mdx index cc41790677454..286fa9def3365 100644 --- a/api_docs/kbn_shared_ux_tabbed_modal.mdx +++ b/api_docs/kbn_shared_ux_tabbed_modal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-tabbed-modal title: "@kbn/shared-ux-tabbed-modal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-tabbed-modal plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-tabbed-modal'] --- import kbnSharedUxTabbedModalObj from './kbn_shared_ux_tabbed_modal.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 4eceae03d4422..2cf2ccccc847a 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-utility'] --- import kbnSharedUxUtilityObj from './kbn_shared_ux_utility.devdocs.json'; diff --git a/api_docs/kbn_slo_schema.mdx b/api_docs/kbn_slo_schema.mdx index 99c2cbb42a832..9d9473577febd 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index caea418957b06..9433ded8f1e47 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_sort_predicates.mdx b/api_docs/kbn_sort_predicates.mdx index 2a134eb795e31..0128b8f52d63d 100644 --- a/api_docs/kbn_sort_predicates.mdx +++ b/api_docs/kbn_sort_predicates.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sort-predicates title: "@kbn/sort-predicates" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sort-predicates plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates'] --- import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index 2ff937e13c85b..f10c2d4c9b83d 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/std'] --- import kbnStdObj from './kbn_std.devdocs.json'; diff --git a/api_docs/kbn_stdio_dev_helpers.mdx b/api_docs/kbn_stdio_dev_helpers.mdx index 3dd24aa4ecdea..230013e6336ac 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/stdio-dev-helpers'] --- import kbnStdioDevHelpersObj from './kbn_stdio_dev_helpers.devdocs.json'; diff --git a/api_docs/kbn_storybook.mdx b/api_docs/kbn_storybook.mdx index f1940c6d7b00d..f6b7a953ecf9f 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_synthetics_e2e.mdx b/api_docs/kbn_synthetics_e2e.mdx index 0beadefdcc823..49b64806ea63c 100644 --- a/api_docs/kbn_synthetics_e2e.mdx +++ b/api_docs/kbn_synthetics_e2e.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-e2e title: "@kbn/synthetics-e2e" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-e2e plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-e2e'] --- import kbnSyntheticsE2eObj from './kbn_synthetics_e2e.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index 48d32907a7633..4db88723a43eb 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools'] --- import kbnTelemetryToolsObj from './kbn_telemetry_tools.devdocs.json'; diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx index f1a0102f45b01..f72d0d80ef6de 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_eui_helpers.mdx b/api_docs/kbn_test_eui_helpers.mdx index ea7ee1c3b93cd..94c873e56aa00 100644 --- a/api_docs/kbn_test_eui_helpers.mdx +++ b/api_docs/kbn_test_eui_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-eui-helpers title: "@kbn/test-eui-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-eui-helpers plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-eui-helpers'] --- import kbnTestEuiHelpersObj from './kbn_test_eui_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index f49a4b32c4662..0499f41a6a24c 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-jest-helpers'] --- import kbnTestJestHelpersObj from './kbn_test_jest_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_subj_selector.mdx b/api_docs/kbn_test_subj_selector.mdx index 1a975da9dab0f..8889c84b2f067 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_text_based_editor.mdx b/api_docs/kbn_text_based_editor.mdx index 56cf5325ebd28..3016fe42c942f 100644 --- a/api_docs/kbn_text_based_editor.mdx +++ b/api_docs/kbn_text_based_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor title: "@kbn/text-based-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/text-based-editor plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor'] --- import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json'; diff --git a/api_docs/kbn_timerange.mdx b/api_docs/kbn_timerange.mdx index 5d2b0d03c0a27..45cc4aac46a7a 100644 --- a/api_docs/kbn_timerange.mdx +++ b/api_docs/kbn_timerange.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-timerange title: "@kbn/timerange" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/timerange plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/timerange'] --- import kbnTimerangeObj from './kbn_timerange.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 52b7d71162298..70054385e1f12 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_triggers_actions_ui_types.mdx b/api_docs/kbn_triggers_actions_ui_types.mdx index 5e8f1a20a3e29..a0abd80389d99 100644 --- a/api_docs/kbn_triggers_actions_ui_types.mdx +++ b/api_docs/kbn_triggers_actions_ui_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-triggers-actions-ui-types title: "@kbn/triggers-actions-ui-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/triggers-actions-ui-types plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json'; diff --git a/api_docs/kbn_try_in_console.mdx b/api_docs/kbn_try_in_console.mdx index 5e06938618aed..0ca17d060710e 100644 --- a/api_docs/kbn_try_in_console.mdx +++ b/api_docs/kbn_try_in_console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-try-in-console title: "@kbn/try-in-console" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/try-in-console plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/try-in-console'] --- import kbnTryInConsoleObj from './kbn_try_in_console.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 6fd82772eb35a..75b9691d8c0d8 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ts-projects'] --- import kbnTsProjectsObj from './kbn_ts_projects.devdocs.json'; diff --git a/api_docs/kbn_typed_react_router_config.mdx b/api_docs/kbn_typed_react_router_config.mdx index c4f8689fc5744..73336fc25b029 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/typed-react-router-config'] --- import kbnTypedReactRouterConfigObj from './kbn_typed_react_router_config.devdocs.json'; diff --git a/api_docs/kbn_ui_actions_browser.mdx b/api_docs/kbn_ui_actions_browser.mdx index 0845e505fc039..5144a7ab1c025 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-actions-browser'] --- import kbnUiActionsBrowserObj from './kbn_ui_actions_browser.devdocs.json'; diff --git a/api_docs/kbn_ui_shared_deps_src.mdx b/api_docs/kbn_ui_shared_deps_src.mdx index 05097a5a53c5d..5427cad2cfa49 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-shared-deps-src'] --- import kbnUiSharedDepsSrcObj from './kbn_ui_shared_deps_src.devdocs.json'; diff --git a/api_docs/kbn_ui_theme.mdx b/api_docs/kbn_ui_theme.mdx index 750cf483e1f9b..bae2f9b35e702 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index 040623daed125..d87fa9737fcae 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-data-table'] --- import kbnUnifiedDataTableObj from './kbn_unified_data_table.devdocs.json'; diff --git a/api_docs/kbn_unified_doc_viewer.mdx b/api_docs/kbn_unified_doc_viewer.mdx index 3698f4ae6522a..9348e9aa28f67 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-doc-viewer'] --- import kbnUnifiedDocViewerObj from './kbn_unified_doc_viewer.devdocs.json'; diff --git a/api_docs/kbn_unified_field_list.mdx b/api_docs/kbn_unified_field_list.mdx index 9586b19ef3c54..c2c40c3b1e9aa 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_badge.mdx b/api_docs/kbn_unsaved_changes_badge.mdx index f0ea72c2b5e73..482f1f618611e 100644 --- a/api_docs/kbn_unsaved_changes_badge.mdx +++ b/api_docs/kbn_unsaved_changes_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-badge title: "@kbn/unsaved-changes-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-badge plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_prompt.mdx b/api_docs/kbn_unsaved_changes_prompt.mdx index 1a8d360c1dca9..bd3439b7e9c43 100644 --- a/api_docs/kbn_unsaved_changes_prompt.mdx +++ b/api_docs/kbn_unsaved_changes_prompt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-prompt title: "@kbn/unsaved-changes-prompt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-prompt plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-prompt'] --- import kbnUnsavedChangesPromptObj from './kbn_unsaved_changes_prompt.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index e90cceb7197b1..faf803d129998 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/use-tracked-promise'] --- import kbnUseTrackedPromiseObj from './kbn_use_tracked_promise.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index 355d2c4f60152..60d2bb0163d2f 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/user-profile-components'] --- import kbnUserProfileComponentsObj from './kbn_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_utility_types.mdx b/api_docs/kbn_utility_types.mdx index 8475c36801278..135f2a08fd5d5 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types'] --- import kbnUtilityTypesObj from './kbn_utility_types.devdocs.json'; diff --git a/api_docs/kbn_utility_types_jest.mdx b/api_docs/kbn_utility_types_jest.mdx index 5b15749fa5539..dd87916ca8cf0 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types-jest'] --- import kbnUtilityTypesJestObj from './kbn_utility_types_jest.devdocs.json'; diff --git a/api_docs/kbn_utils.mdx b/api_docs/kbn_utils.mdx index 3e8f6d6d31ede..911b9ac5766ac 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_visualization_ui_components.mdx b/api_docs/kbn_visualization_ui_components.mdx index ce3695c5e3d8a..f9b937928bf8a 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; diff --git a/api_docs/kbn_visualization_utils.mdx b/api_docs/kbn_visualization_utils.mdx index 59512fbd07447..82b8738f93c9b 100644 --- a/api_docs/kbn_visualization_utils.mdx +++ b/api_docs/kbn_visualization_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-utils title: "@kbn/visualization-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-utils'] --- import kbnVisualizationUtilsObj from './kbn_visualization_utils.devdocs.json'; diff --git a/api_docs/kbn_xstate_utils.mdx b/api_docs/kbn_xstate_utils.mdx index c80379deb7e04..481255835ee62 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/xstate-utils'] --- import kbnXstateUtilsObj from './kbn_xstate_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index 3e9d8fb8d4767..7a65c4f171cf8 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod.mdx b/api_docs/kbn_zod.mdx index f7328c48bfe0d..bc35aed5367bb 100644 --- a/api_docs/kbn_zod.mdx +++ b/api_docs/kbn_zod.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod title: "@kbn/zod" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod'] --- import kbnZodObj from './kbn_zod.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index a7d420fe20770..2716303f06057 100644 --- a/api_docs/kbn_zod_helpers.mdx +++ b/api_docs/kbn_zod_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod-helpers title: "@kbn/zod-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod-helpers plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod-helpers'] --- import kbnZodHelpersObj from './kbn_zod_helpers.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index ad350fb11a12b..d509a1f1fc838 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index 66fcd75c06a70..c025da71cb1a8 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact'] --- import kibanaReactObj from './kibana_react.devdocs.json'; diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx index 0be9836d1d030..c23ed8717d8d5 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaUtils'] --- import kibanaUtilsObj from './kibana_utils.devdocs.json'; diff --git a/api_docs/kubernetes_security.mdx b/api_docs/kubernetes_security.mdx index 42a3031dd30c6..397512d37f6c9 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index 4589ba956f902..74c1cc0c397c7 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lens'] --- import lensObj from './lens.devdocs.json'; diff --git a/api_docs/license_api_guard.mdx b/api_docs/license_api_guard.mdx index be5eb71ecb725..681cdbc82c5f7 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseApiGuard'] --- import licenseApiGuardObj from './license_api_guard.devdocs.json'; diff --git a/api_docs/license_management.mdx b/api_docs/license_management.mdx index 8322c96ca7c6e..ad9ca39a4bf95 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseManagement'] --- import licenseManagementObj from './license_management.devdocs.json'; diff --git a/api_docs/licensing.mdx b/api_docs/licensing.mdx index 7e39844d48256..b7f379fd6b739 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/links.mdx b/api_docs/links.mdx index 2e6f4a9a90980..e7c350eab006e 100644 --- a/api_docs/links.mdx +++ b/api_docs/links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/links title: "links" image: https://source.unsplash.com/400x175/?github description: API docs for the links plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'links'] --- import linksObj from './links.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index 86d07e214acef..3cde98d90ad19 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/logs_data_access.mdx b/api_docs/logs_data_access.mdx index 0501691dfdcd2..130eea1c5b963 100644 --- a/api_docs/logs_data_access.mdx +++ b/api_docs/logs_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsDataAccess title: "logsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the logsDataAccess plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsDataAccess'] --- import logsDataAccessObj from './logs_data_access.devdocs.json'; diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index 9cf7b160dfb93..e2cbf9d1f7091 100644 --- a/api_docs/logs_explorer.mdx +++ b/api_docs/logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsExplorer title: "logsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logsExplorer plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsExplorer'] --- import logsExplorerObj from './logs_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index b33738e320389..d6c189edf0c04 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsShared'] --- import logsSharedObj from './logs_shared.devdocs.json'; diff --git a/api_docs/management.mdx b/api_docs/management.mdx index 8b042db3c541c..eddc2ea5f2a88 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index 44ec688a4d564..a975658c002ed 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps'] --- import mapsObj from './maps.devdocs.json'; diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx index d268e3ea1510a..eb91e3be238e2 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/metrics_data_access.devdocs.json b/api_docs/metrics_data_access.devdocs.json index 6f8f384c313d1..19c353e045c3d 100644 --- a/api_docs/metrics_data_access.devdocs.json +++ b/api_docs/metrics_data_access.devdocs.json @@ -745,7 +745,7 @@ "label": "hostSnapshotMetricTypes", "description": [], "signature": [ - "(\"memory\" | \"rx\" | \"normalizedLoad1m\" | \"memoryFree\" | \"tx\" | \"logRate\" | \"cpu\" | \"diskLatency\" | \"diskSpaceUsage\" | \"load\" | \"memoryTotal\")[]" + "(\"memory\" | \"rx\" | \"normalizedLoad1m\" | \"memoryFree\" | \"tx\" | \"logRate\" | \"cpu\" | \"diskLatency\" | \"diskSpaceUsage\" | \"load\" | \"memoryTotal\" | \"rxV2\" | \"txV2\")[]" ], "path": "x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/index.ts", "deprecated": false, @@ -1522,7 +1522,7 @@ "label": "SnapshotMetricType", "description": [], "signature": [ - "\"count\" | \"memory\" | \"custom\" | \"rx\" | \"normalizedLoad1m\" | \"memoryFree\" | \"tx\" | \"logRate\" | \"cpu\" | \"s3BucketSize\" | \"s3NumberOfObjects\" | \"s3TotalRequests\" | \"s3UploadBytes\" | \"s3DownloadBytes\" | \"diskLatency\" | \"diskSpaceUsage\" | \"load\" | \"memoryTotal\" | \"diskIOReadBytes\" | \"diskIOWriteBytes\" | \"rdsLatency\" | \"rdsConnections\" | \"rdsQueriesExecuted\" | \"rdsActiveTransactions\" | \"sqsMessagesVisible\" | \"sqsMessagesDelayed\" | \"sqsMessagesEmpty\" | \"sqsMessagesSent\" | \"sqsOldestMessage\"" + "\"count\" | \"memory\" | \"custom\" | \"rx\" | \"normalizedLoad1m\" | \"memoryFree\" | \"tx\" | \"logRate\" | \"cpu\" | \"s3BucketSize\" | \"s3NumberOfObjects\" | \"s3TotalRequests\" | \"s3UploadBytes\" | \"s3DownloadBytes\" | \"diskLatency\" | \"diskSpaceUsage\" | \"load\" | \"memoryTotal\" | \"rxV2\" | \"txV2\" | \"diskIOReadBytes\" | \"diskIOWriteBytes\" | \"rdsLatency\" | \"rdsConnections\" | \"rdsQueriesExecuted\" | \"rdsActiveTransactions\" | \"sqsMessagesVisible\" | \"sqsMessagesDelayed\" | \"sqsMessagesEmpty\" | \"sqsMessagesSent\" | \"sqsOldestMessage\"" ], "path": "x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/types.ts", "deprecated": false, @@ -2204,6 +2204,34 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "metricsDataAccess", + "id": "def-common.SnapshotMetricTypeKeys.txV2", + "type": "Uncategorized", + "tags": [], + "label": "txV2", + "description": [], + "signature": [ + "null" + ], + "path": "x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "metricsDataAccess", + "id": "def-common.SnapshotMetricTypeKeys.rxV2", + "type": "Uncategorized", + "tags": [], + "label": "rxV2", + "description": [], + "signature": [ + "null" + ], + "path": "x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "metricsDataAccess", "id": "def-common.SnapshotMetricTypeKeys.logRate", @@ -2468,7 +2496,7 @@ "description": [], "signature": [ "KeyofC", - "<{ count: null; cpu: null; diskLatency: null; diskSpaceUsage: null; load: null; memory: null; memoryFree: null; memoryTotal: null; normalizedLoad1m: null; tx: null; rx: null; logRate: null; diskIOReadBytes: null; diskIOWriteBytes: null; s3TotalRequests: null; s3NumberOfObjects: null; s3BucketSize: null; s3DownloadBytes: null; s3UploadBytes: null; rdsConnections: null; rdsQueriesExecuted: null; rdsActiveTransactions: null; rdsLatency: null; sqsMessagesVisible: null; sqsMessagesDelayed: null; sqsMessagesSent: null; sqsMessagesEmpty: null; sqsOldestMessage: null; custom: null; }>" + "<{ count: null; cpu: null; diskLatency: null; diskSpaceUsage: null; load: null; memory: null; memoryFree: null; memoryTotal: null; normalizedLoad1m: null; tx: null; rx: null; txV2: null; rxV2: null; logRate: null; diskIOReadBytes: null; diskIOWriteBytes: null; s3TotalRequests: null; s3NumberOfObjects: null; s3BucketSize: null; s3DownloadBytes: null; s3UploadBytes: null; rdsConnections: null; rdsQueriesExecuted: null; rdsActiveTransactions: null; rdsLatency: null; sqsMessagesVisible: null; sqsMessagesDelayed: null; sqsMessagesSent: null; sqsMessagesEmpty: null; sqsOldestMessage: null; custom: null; }>" ], "path": "x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/types.ts", "deprecated": false, diff --git a/api_docs/metrics_data_access.mdx b/api_docs/metrics_data_access.mdx index 77b2e3225986f..6321f06d9f01b 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs- | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 105 | 8 | 105 | 6 | +| 107 | 8 | 107 | 6 | ## Client diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index abb92576992d9..e5dee7ea4444b 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/mock_idp_plugin.mdx b/api_docs/mock_idp_plugin.mdx index 087715c8d5666..bc92849b1a230 100644 --- a/api_docs/mock_idp_plugin.mdx +++ b/api_docs/mock_idp_plugin.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mockIdpPlugin title: "mockIdpPlugin" image: https://source.unsplash.com/400x175/?github description: API docs for the mockIdpPlugin plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mockIdpPlugin'] --- import mockIdpPluginObj from './mock_idp_plugin.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index dbc516f4d7305..490808e61dcf9 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoring'] --- import monitoringObj from './monitoring.devdocs.json'; diff --git a/api_docs/monitoring_collection.mdx b/api_docs/monitoring_collection.mdx index b27ae4b42ddc0..98da57377c680 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoringCollection'] --- import monitoringCollectionObj from './monitoring_collection.devdocs.json'; diff --git a/api_docs/navigation.devdocs.json b/api_docs/navigation.devdocs.json index 9e1321c642012..504f4f9d7b14d 100644 --- a/api_docs/navigation.devdocs.json +++ b/api_docs/navigation.devdocs.json @@ -98,7 +98,7 @@ "label": "setup", "description": [], "signature": [ - "(_core: ", + "(core: ", { "pluginId": "@kbn/core-lifecycle-browser", "scope": "public", @@ -124,7 +124,7 @@ "id": "def-public.NavigationPublicPlugin.setup.$1", "type": "Object", "tags": [], - "label": "_core", + "label": "core", "description": [], "signature": [ { diff --git a/api_docs/navigation.mdx b/api_docs/navigation.mdx index 25d3aca4e4958..c330eb1447d4e 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'navigation'] --- import navigationObj from './navigation.devdocs.json'; diff --git a/api_docs/newsfeed.mdx b/api_docs/newsfeed.mdx index 6fc1783772d64..17235e1850daf 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/no_data_page.mdx b/api_docs/no_data_page.mdx index 10b589b7663c4..d23044f5c26d4 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'noDataPage'] --- import noDataPageObj from './no_data_page.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index 129bdcf64cef0..c1e8c3b2ec30d 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 560494a1d76ff..c42e41593b99f 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index 32f2b29f02f74..bc1a20ff6ef50 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant_app.mdx b/api_docs/observability_a_i_assistant_app.mdx index 62b78a0852563..a125a5538b55d 100644 --- a/api_docs/observability_a_i_assistant_app.mdx +++ b/api_docs/observability_a_i_assistant_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistantApp title: "observabilityAIAssistantApp" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistantApp plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistantApp'] --- import observabilityAIAssistantAppObj from './observability_a_i_assistant_app.devdocs.json'; diff --git a/api_docs/observability_ai_assistant_management.mdx b/api_docs/observability_ai_assistant_management.mdx index 72f60f083cae2..6346df0080e83 100644 --- a/api_docs/observability_ai_assistant_management.mdx +++ b/api_docs/observability_ai_assistant_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAiAssistantManagement title: "observabilityAiAssistantManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAiAssistantManagement plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAiAssistantManagement'] --- import observabilityAiAssistantManagementObj from './observability_ai_assistant_management.devdocs.json'; diff --git a/api_docs/observability_logs_explorer.mdx b/api_docs/observability_logs_explorer.mdx index a71eac4fbb9c9..0752b775f64b9 100644 --- a/api_docs/observability_logs_explorer.mdx +++ b/api_docs/observability_logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogsExplorer title: "observabilityLogsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogsExplorer plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogsExplorer'] --- import observabilityLogsExplorerObj from './observability_logs_explorer.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index 689ecd0e3f4e6..f9be3c3ee7d3d 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index 48a4b5df508f1..f727815309409 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index 2082ca6d4235f..a680ebd002437 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/painless_lab.mdx b/api_docs/painless_lab.mdx index cc36fdf0e1800..95b31e7763ef6 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'painlessLab'] --- import painlessLabObj from './painless_lab.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index e7ed5e8f1f393..8a8a923ac21ae 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -15,13 +15,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Count | Plugins or Packages with a
public API | Number of teams | |--------------|----------|------------------------| -| 826 | 702 | 44 | +| 827 | 703 | 44 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 51479 | 241 | 38448 | 1894 | +| 51825 | 241 | 38793 | 1895 | ## Plugin Directory @@ -32,7 +32,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 4 | 0 | 4 | 1 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 74 | 0 | 9 | 2 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 871 | 1 | 839 | 52 | -| | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | The user interface for Elastic APM | 29 | 0 | 29 | 124 | +| | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | The user interface for Elastic APM | 29 | 0 | 29 | 122 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 9 | 0 | 9 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 2 | 0 | 2 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 9 | 0 | 9 | 0 | @@ -140,7 +140,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 44 | 0 | 44 | 7 | | | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 209 | 0 | 205 | 28 | | | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 60 | 0 | 60 | 0 | -| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | Exposes utilities for accessing metrics data | 105 | 8 | 105 | 6 | +| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | Exposes utilities for accessing metrics data | 107 | 8 | 107 | 6 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the machine learning features provided by Elastic. | 154 | 3 | 67 | 102 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 2 | 0 | 2 | 0 | | | [@elastic/stack-monitoring](https://github.com/orgs/elastic/teams/stack-monitoring) | - | 15 | 3 | 13 | 1 | @@ -181,7 +181,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | Plugin to provide access to and rendering of python notebooks for use in the persistent developer console. | 8 | 0 | 8 | 1 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 15 | 0 | 9 | 1 | | searchprofiler | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 0 | 0 | 0 | 0 | -| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides authentication and authorization features, and exposes functionality to understand the capabilities of the currently authenticated user. | 438 | 0 | 222 | 1 | +| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides authentication and authorization features, and exposes functionality to understand the capabilities of the currently authenticated user. | 447 | 0 | 231 | 1 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 190 | 0 | 121 | 36 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | ESS customizations for Security Solution. | 6 | 0 | 6 | 0 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | Serverless customizations for security. | 7 | 0 | 7 | 0 | @@ -192,7 +192,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Adds URL Service and sharing capabilities to Kibana | 121 | 0 | 60 | 12 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 59 | 0 | 59 | 1 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 22 | 1 | 22 | 1 | -| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides the Spaces feature, which allows saved objects to be organized into meaningful categories. | 260 | 0 | 66 | 0 | +| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides the Spaces feature, which allows saved objects to be organized into meaningful categories. | 261 | 0 | 67 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 25 | 0 | 25 | 3 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 10 | 0 | 10 | 0 | | synthetics | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | This plugin visualizes data from Synthetics and Heartbeat, and integrates with other Observability solutions. | 0 | 0 | 0 | 1 | @@ -255,8 +255,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 4 | 0 | 4 | 0 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 49 | 0 | 49 | 8 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 200 | 0 | 200 | 31 | +| | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 316 | 0 | 315 | 0 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 11 | 0 | 11 | 0 | -| | [@elastic/security-defend-workflows](https://github.com/orgs/elastic/teams/security-defend-workflows) | - | 2 | 0 | 2 | 0 | +| | [@elastic/security-defend-workflows](https://github.com/orgs/elastic/teams/security-defend-workflows) | - | 3 | 0 | 3 | 0 | | | [@elastic/kibana-qa](https://github.com/orgs/elastic/teams/kibana-qa) | - | 12 | 0 | 12 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 4 | 0 | 1 | 0 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 10 | 0 | 10 | 0 | @@ -498,7 +499,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 269 | 1 | 209 | 15 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 27 | 0 | 27 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 1 | 0 | -| | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 135 | 1 | 120 | 12 | +| | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 135 | 1 | 120 | 13 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 65 | 0 | 61 | 0 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 194 | 0 | 183 | 10 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 40 | 0 | 40 | 0 | @@ -636,7 +637,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/security-detections-response](https://github.com/orgs/elastic/teams/security-detections-response) | - | 128 | 0 | 125 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 76 | 0 | 76 | 0 | -| | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 3915 | 0 | 3915 | 0 | +| | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 3929 | 0 | 3929 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 18 | 1 | 17 | 1 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 25 | 0 | 25 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 20 | 0 | 18 | 1 | @@ -684,7 +685,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 30 | 0 | 8 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 10 | 0 | 4 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 32 | 0 | 28 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 32 | 0 | 23 | 0 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 35 | 0 | 26 | 2 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 6 | 0 | 2 | 1 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 5 | 0 | 4 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 3 | 0 | 2 | 0 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index e573d3a289c6b..4c7691e6b2c16 100644 --- a/api_docs/presentation_panel.mdx +++ b/api_docs/presentation_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationPanel title: "presentationPanel" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationPanel plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationPanel'] --- import presentationPanelObj from './presentation_panel.devdocs.json'; diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index 9c46ec7318a27..b8d91857df685 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index ad050177e4060..77bfff21adfa2 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/profiling_data_access.mdx b/api_docs/profiling_data_access.mdx index ea0336757577b..e9830674efef1 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profilingDataAccess'] --- import profilingDataAccessObj from './profiling_data_access.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index 2c654b3342a8a..0e651bd52c4d8 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'remoteClusters'] --- import remoteClustersObj from './remote_clusters.devdocs.json'; diff --git a/api_docs/reporting.mdx b/api_docs/reporting.mdx index 3e758f52c440f..b2e5e9749e9c8 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting'] --- import reportingObj from './reporting.devdocs.json'; diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx index 296676d2f4694..ae0ec439e8a5f 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] --- import rollupObj from './rollup.devdocs.json'; diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index 3390c6a7db0e6..1601d9a38d85b 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ruleRegistry'] --- import ruleRegistryObj from './rule_registry.devdocs.json'; diff --git a/api_docs/runtime_fields.mdx b/api_docs/runtime_fields.mdx index 39c8d8e93b2ee..2ac3af0197fea 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'runtimeFields'] --- import runtimeFieldsObj from './runtime_fields.devdocs.json'; diff --git a/api_docs/saved_objects.mdx b/api_docs/saved_objects.mdx index 0fd60f971f1fc..b1d5e4bb6dd06 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjects'] --- import savedObjectsObj from './saved_objects.devdocs.json'; diff --git a/api_docs/saved_objects_finder.mdx b/api_docs/saved_objects_finder.mdx index 2525b57694e08..0396bf27a9250 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsFinder'] --- import savedObjectsFinderObj from './saved_objects_finder.devdocs.json'; diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx index 0044fb7f939d1..9b1568f364870 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsManagement'] --- import savedObjectsManagementObj from './saved_objects_management.devdocs.json'; diff --git a/api_docs/saved_objects_tagging.mdx b/api_docs/saved_objects_tagging.mdx index b2ac368c8277b..961c5d353f086 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTagging'] --- import savedObjectsTaggingObj from './saved_objects_tagging.devdocs.json'; diff --git a/api_docs/saved_objects_tagging_oss.mdx b/api_docs/saved_objects_tagging_oss.mdx index 783f60994d125..278e032c73ddc 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTaggingOss'] --- import savedObjectsTaggingOssObj from './saved_objects_tagging_oss.devdocs.json'; diff --git a/api_docs/saved_search.mdx b/api_docs/saved_search.mdx index b623228e1fa2f..8b727746e079f 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedSearch'] --- import savedSearchObj from './saved_search.devdocs.json'; diff --git a/api_docs/screenshot_mode.mdx b/api_docs/screenshot_mode.mdx index c89972a58b842..0493382e2d1db 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotMode'] --- import screenshotModeObj from './screenshot_mode.devdocs.json'; diff --git a/api_docs/screenshotting.mdx b/api_docs/screenshotting.mdx index bc1f29a7afa3b..bf509db820671 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_connectors.mdx b/api_docs/search_connectors.mdx index 8504887cdbc36..c6945c744e47f 100644 --- a/api_docs/search_connectors.mdx +++ b/api_docs/search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchConnectors title: "searchConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the searchConnectors plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchConnectors'] --- import searchConnectorsObj from './search_connectors.devdocs.json'; diff --git a/api_docs/search_homepage.mdx b/api_docs/search_homepage.mdx index 90527b6af2bbd..9d11e732148a8 100644 --- a/api_docs/search_homepage.mdx +++ b/api_docs/search_homepage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchHomepage title: "searchHomepage" image: https://source.unsplash.com/400x175/?github description: API docs for the searchHomepage plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchHomepage'] --- import searchHomepageObj from './search_homepage.devdocs.json'; diff --git a/api_docs/search_inference_endpoints.mdx b/api_docs/search_inference_endpoints.mdx index 4515a2e78f514..48f12f68194c6 100644 --- a/api_docs/search_inference_endpoints.mdx +++ b/api_docs/search_inference_endpoints.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchInferenceEndpoints title: "searchInferenceEndpoints" image: https://source.unsplash.com/400x175/?github description: API docs for the searchInferenceEndpoints plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchInferenceEndpoints'] --- import searchInferenceEndpointsObj from './search_inference_endpoints.devdocs.json'; diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx index 01188384b25cf..00b77d0d5eab7 100644 --- a/api_docs/search_notebooks.mdx +++ b/api_docs/search_notebooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNotebooks title: "searchNotebooks" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNotebooks plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNotebooks'] --- import searchNotebooksObj from './search_notebooks.devdocs.json'; diff --git a/api_docs/search_playground.mdx b/api_docs/search_playground.mdx index d7ec6fa6ea83b..4e72e71226060 100644 --- a/api_docs/search_playground.mdx +++ b/api_docs/search_playground.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchPlayground title: "searchPlayground" image: https://source.unsplash.com/400x175/?github description: API docs for the searchPlayground plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] --- import searchPlaygroundObj from './search_playground.devdocs.json'; diff --git a/api_docs/security.devdocs.json b/api_docs/security.devdocs.json index 7e1c6760e405a..e7af8f38e9928 100644 --- a/api_docs/security.devdocs.json +++ b/api_docs/security.devdocs.json @@ -7218,7 +7218,14 @@ "label": "rules", "description": [], "signature": [ - "{} | RoleMappingRule" + "{} | ", + { + "pluginId": "security", + "scope": "common", + "docId": "kibSecurityPluginApi", + "section": "def-common.RoleMappingRule", + "text": "RoleMappingRule" + } ], "path": "x-pack/plugins/security/common/model/role_mapping.ts", "deprecated": false, @@ -7241,6 +7248,162 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "security", + "id": "def-common.RoleMappingAllRule", + "type": "Interface", + "tags": [], + "label": "RoleMappingAllRule", + "description": [], + "path": "x-pack/plugins/security/common/model/role_mapping.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "security", + "id": "def-common.RoleMappingAllRule.all", + "type": "Array", + "tags": [], + "label": "all", + "description": [], + "signature": [ + { + "pluginId": "security", + "scope": "common", + "docId": "kibSecurityPluginApi", + "section": "def-common.RoleMappingRule", + "text": "RoleMappingRule" + }, + "[]" + ], + "path": "x-pack/plugins/security/common/model/role_mapping.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "security", + "id": "def-common.RoleMappingAnyRule", + "type": "Interface", + "tags": [], + "label": "RoleMappingAnyRule", + "description": [], + "path": "x-pack/plugins/security/common/model/role_mapping.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "security", + "id": "def-common.RoleMappingAnyRule.any", + "type": "Array", + "tags": [], + "label": "any", + "description": [], + "signature": [ + { + "pluginId": "security", + "scope": "common", + "docId": "kibSecurityPluginApi", + "section": "def-common.RoleMappingRule", + "text": "RoleMappingRule" + }, + "[]" + ], + "path": "x-pack/plugins/security/common/model/role_mapping.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "security", + "id": "def-common.RoleMappingExceptRule", + "type": "Interface", + "tags": [], + "label": "RoleMappingExceptRule", + "description": [], + "path": "x-pack/plugins/security/common/model/role_mapping.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "security", + "id": "def-common.RoleMappingExceptRule.except", + "type": "CompoundType", + "tags": [], + "label": "except", + "description": [], + "signature": [ + { + "pluginId": "security", + "scope": "common", + "docId": "kibSecurityPluginApi", + "section": "def-common.RoleMappingAnyRule", + "text": "RoleMappingAnyRule" + }, + " | ", + { + "pluginId": "security", + "scope": "common", + "docId": "kibSecurityPluginApi", + "section": "def-common.RoleMappingAllRule", + "text": "RoleMappingAllRule" + }, + " | ", + { + "pluginId": "security", + "scope": "common", + "docId": "kibSecurityPluginApi", + "section": "def-common.RoleMappingFieldRule", + "text": "RoleMappingFieldRule" + }, + " | ", + { + "pluginId": "security", + "scope": "common", + "docId": "kibSecurityPluginApi", + "section": "def-common.RoleMappingExceptRule", + "text": "RoleMappingExceptRule" + } + ], + "path": "x-pack/plugins/security/common/model/role_mapping.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "security", + "id": "def-common.RoleMappingFieldRule", + "type": "Interface", + "tags": [], + "label": "RoleMappingFieldRule", + "description": [], + "path": "x-pack/plugins/security/common/model/role_mapping.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "security", + "id": "def-common.RoleMappingFieldRule.field", + "type": "Object", + "tags": [], + "label": "field", + "description": [], + "signature": [ + "{ [x: string]: any; }" + ], + "path": "x-pack/plugins/security/common/model/role_mapping.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "security", "id": "def-common.RoleRemoteClusterPrivilege", @@ -8204,6 +8367,51 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "security", + "id": "def-common.RoleMappingRule", + "type": "Type", + "tags": [], + "label": "RoleMappingRule", + "description": [], + "signature": [ + { + "pluginId": "security", + "scope": "common", + "docId": "kibSecurityPluginApi", + "section": "def-common.RoleMappingAnyRule", + "text": "RoleMappingAnyRule" + }, + " | ", + { + "pluginId": "security", + "scope": "common", + "docId": "kibSecurityPluginApi", + "section": "def-common.RoleMappingAllRule", + "text": "RoleMappingAllRule" + }, + " | ", + { + "pluginId": "security", + "scope": "common", + "docId": "kibSecurityPluginApi", + "section": "def-common.RoleMappingFieldRule", + "text": "RoleMappingFieldRule" + }, + " | ", + { + "pluginId": "security", + "scope": "common", + "docId": "kibSecurityPluginApi", + "section": "def-common.RoleMappingExceptRule", + "text": "RoleMappingExceptRule" + } + ], + "path": "x-pack/plugins/security/common/model/role_mapping.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "security", "id": "def-common.RoleTemplate", diff --git a/api_docs/security.mdx b/api_docs/security.mdx index f5896c16d8ce1..25a28bcc22fb2 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana- | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 438 | 0 | 222 | 1 | +| 447 | 0 | 231 | 1 | ## Client diff --git a/api_docs/security_solution.devdocs.json b/api_docs/security_solution.devdocs.json index 4f45187b433b2..7b0f2da2157dc 100644 --- a/api_docs/security_solution.devdocs.json +++ b/api_docs/security_solution.devdocs.json @@ -485,7 +485,7 @@ "\nExperimental flag needed to enable the link" ], "signature": [ - "\"assistantKnowledgeBaseByDefault\" | \"assistantModelEvaluation\" | \"assistantBedrockChat\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsSentinelOneKillProcessEnabled\" | \"responseActionsSentinelOneProcessesEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"responseActionScanEnabled\" | \"alertsPageChartsEnabled\" | \"securitySolutionNotesEnabled\" | \"entityAlertPreviewDisabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineDisabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"valueListItemsModalEnabled\" | \"manualRuleRunEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | \"dataIngestionHubEnabled\" | undefined" + "\"assistantKnowledgeBaseByDefault\" | \"assistantModelEvaluation\" | \"assistantBedrockChat\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsSentinelOneKillProcessEnabled\" | \"responseActionsSentinelOneProcessesEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"responseActionScanEnabled\" | \"securitySolutionNotesEnabled\" | \"entityAlertPreviewDisabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineDisabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"valueListItemsModalEnabled\" | \"manualRuleRunEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | \"dataIngestionHubEnabled\" | undefined" ], "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -565,7 +565,7 @@ "\nExperimental flag needed to disable the link. Opposite of experimentalKey" ], "signature": [ - "\"assistantKnowledgeBaseByDefault\" | \"assistantModelEvaluation\" | \"assistantBedrockChat\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsSentinelOneKillProcessEnabled\" | \"responseActionsSentinelOneProcessesEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"responseActionScanEnabled\" | \"alertsPageChartsEnabled\" | \"securitySolutionNotesEnabled\" | \"entityAlertPreviewDisabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineDisabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"valueListItemsModalEnabled\" | \"manualRuleRunEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | \"dataIngestionHubEnabled\" | undefined" + "\"assistantKnowledgeBaseByDefault\" | \"assistantModelEvaluation\" | \"assistantBedrockChat\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsSentinelOneKillProcessEnabled\" | \"responseActionsSentinelOneProcessesEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"responseActionScanEnabled\" | \"securitySolutionNotesEnabled\" | \"entityAlertPreviewDisabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineDisabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"valueListItemsModalEnabled\" | \"manualRuleRunEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | \"dataIngestionHubEnabled\" | undefined" ], "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -1932,7 +1932,7 @@ "label": "experimentalFeatures", "description": [], "signature": [ - "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly responseActionScanEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly securitySolutionNotesEnabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly assistantBedrockChat: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly manualRuleRunEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; }" + "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly responseActionScanEnabled: boolean; readonly securitySolutionNotesEnabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly assistantBedrockChat: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly manualRuleRunEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/public/types.ts", "deprecated": false, @@ -3039,7 +3039,7 @@ "\nThe security solution generic experimental features" ], "signature": [ - "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly responseActionScanEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly securitySolutionNotesEnabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly assistantBedrockChat: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly manualRuleRunEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; }" + "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly responseActionScanEnabled: boolean; readonly securitySolutionNotesEnabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly assistantBedrockChat: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly manualRuleRunEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/server/plugin_contract.ts", "deprecated": false, @@ -3215,7 +3215,7 @@ "label": "ExperimentalFeatures", "description": [], "signature": [ - "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly responseActionScanEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly securitySolutionNotesEnabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly assistantBedrockChat: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly manualRuleRunEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; }" + "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly responseActionScanEnabled: boolean; readonly securitySolutionNotesEnabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly assistantBedrockChat: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly manualRuleRunEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/common/experimental_features.ts", "deprecated": false, @@ -3281,7 +3281,7 @@ "\nA list of allowed values that can be used in `xpack.securitySolution.enableExperimental`.\nThis object is then used to validate and parse the value entered." ], "signature": [ - "{ readonly excludePoliciesInFilterEnabled: false; readonly kubernetesEnabled: true; readonly donutChartEmbeddablesEnabled: false; readonly previewTelemetryUrlEnabled: false; readonly extendedRuleExecutionLoggingEnabled: false; readonly socTrendsEnabled: false; readonly responseActionsEnabled: true; readonly endpointResponseActionsEnabled: true; readonly responseActionUploadEnabled: true; readonly automatedProcessActionsEnabled: true; readonly responseActionsSentinelOneV1Enabled: true; readonly responseActionsSentinelOneV2Enabled: true; readonly responseActionsSentinelOneGetFileEnabled: true; readonly responseActionsSentinelOneKillProcessEnabled: false; readonly responseActionsSentinelOneProcessesEnabled: false; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: true; readonly responseActionScanEnabled: false; readonly alertsPageChartsEnabled: true; readonly securitySolutionNotesEnabled: false; readonly entityAlertPreviewDisabled: false; readonly assistantModelEvaluation: false; readonly assistantKnowledgeBaseByDefault: false; readonly assistantBedrockChat: true; readonly newUserDetailsFlyoutManagedUser: false; readonly riskScoringPersistence: true; readonly riskScoringRoutesEnabled: true; readonly esqlRulesDisabled: false; readonly protectionUpdatesEnabled: true; readonly disableTimelineSaveTour: false; readonly riskEnginePrivilegesRouteEnabled: true; readonly sentinelOneDataInAnalyzerEnabled: true; readonly sentinelOneManualHostActionsEnabled: true; readonly crowdstrikeDataInAnalyzerEnabled: true; readonly jamfDataInAnalyzerEnabled: false; readonly timelineEsqlTabDisabled: false; readonly unifiedComponentsInTimelineDisabled: false; readonly analyzerDatePickersAndSourcererDisabled: false; readonly prebuiltRulesCustomizationEnabled: false; readonly malwareOnWriteScanOptionAvailable: true; readonly unifiedManifestEnabled: true; readonly valueListItemsModalEnabled: true; readonly manualRuleRunEnabled: false; readonly filterProcessDescendantsForEventFiltersEnabled: false; readonly dataIngestionHubEnabled: false; }" + "{ readonly excludePoliciesInFilterEnabled: false; readonly kubernetesEnabled: true; readonly donutChartEmbeddablesEnabled: false; readonly previewTelemetryUrlEnabled: false; readonly extendedRuleExecutionLoggingEnabled: false; readonly socTrendsEnabled: false; readonly responseActionsEnabled: true; readonly endpointResponseActionsEnabled: true; readonly responseActionUploadEnabled: true; readonly automatedProcessActionsEnabled: true; readonly responseActionsSentinelOneV1Enabled: true; readonly responseActionsSentinelOneV2Enabled: true; readonly responseActionsSentinelOneGetFileEnabled: true; readonly responseActionsSentinelOneKillProcessEnabled: false; readonly responseActionsSentinelOneProcessesEnabled: false; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: true; readonly responseActionScanEnabled: false; readonly securitySolutionNotesEnabled: false; readonly entityAlertPreviewDisabled: false; readonly assistantModelEvaluation: false; readonly assistantKnowledgeBaseByDefault: false; readonly assistantBedrockChat: true; readonly newUserDetailsFlyoutManagedUser: false; readonly riskScoringPersistence: true; readonly riskScoringRoutesEnabled: true; readonly esqlRulesDisabled: false; readonly protectionUpdatesEnabled: true; readonly disableTimelineSaveTour: false; readonly riskEnginePrivilegesRouteEnabled: true; readonly sentinelOneDataInAnalyzerEnabled: true; readonly sentinelOneManualHostActionsEnabled: true; readonly crowdstrikeDataInAnalyzerEnabled: true; readonly jamfDataInAnalyzerEnabled: false; readonly timelineEsqlTabDisabled: false; readonly unifiedComponentsInTimelineDisabled: false; readonly analyzerDatePickersAndSourcererDisabled: false; readonly prebuiltRulesCustomizationEnabled: false; readonly malwareOnWriteScanOptionAvailable: true; readonly unifiedManifestEnabled: true; readonly valueListItemsModalEnabled: true; readonly manualRuleRunEnabled: false; readonly filterProcessDescendantsForEventFiltersEnabled: false; readonly dataIngestionHubEnabled: false; }" ], "path": "x-pack/plugins/security_solution/common/experimental_features.ts", "deprecated": false, diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index bc47994fc9efa..a64cf87cb85be 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/security_solution_ess.mdx b/api_docs/security_solution_ess.mdx index 52ebb64b02aeb..d7b785f2c41e4 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionEss'] --- import securitySolutionEssObj from './security_solution_ess.devdocs.json'; diff --git a/api_docs/security_solution_serverless.mdx b/api_docs/security_solution_serverless.mdx index f4b49f9f9d91c..f7fe52d3077ef 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionServerless'] --- import securitySolutionServerlessObj from './security_solution_serverless.devdocs.json'; diff --git a/api_docs/serverless.mdx b/api_docs/serverless.mdx index 126f38401b347..ed3c4a28d6d2e 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverless'] --- import serverlessObj from './serverless.devdocs.json'; diff --git a/api_docs/serverless_observability.mdx b/api_docs/serverless_observability.mdx index b73d5c1a84008..f7e3c5f52f9c0 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessObservability'] --- import serverlessObservabilityObj from './serverless_observability.devdocs.json'; diff --git a/api_docs/serverless_search.mdx b/api_docs/serverless_search.mdx index 0f6d7290ce003..ec3f3c0cd361e 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessSearch'] --- import serverlessSearchObj from './serverless_search.devdocs.json'; diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index 4fbd090371881..14787601c9f97 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView'] --- import sessionViewObj from './session_view.devdocs.json'; diff --git a/api_docs/share.mdx b/api_docs/share.mdx index 6ab160a03e05d..f033911fac468 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/slo.mdx b/api_docs/slo.mdx index ec4c3dcb85ab2..34cdcca154367 100644 --- a/api_docs/slo.mdx +++ b/api_docs/slo.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/slo title: "slo" image: https://source.unsplash.com/400x175/?github description: API docs for the slo plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'slo'] --- import sloObj from './slo.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index 876fcbea23741..b34c637e02066 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'snapshotRestore'] --- import snapshotRestoreObj from './snapshot_restore.devdocs.json'; diff --git a/api_docs/spaces.devdocs.json b/api_docs/spaces.devdocs.json index ec973ef3686f5..320429beae408 100644 --- a/api_docs/spaces.devdocs.json +++ b/api_docs/spaces.devdocs.json @@ -1794,13 +1794,13 @@ ], "signature": [ { - "pluginId": "cloud", + "pluginId": "spaces", "scope": "common", - "docId": "kibCloudPluginApi", - "section": "def-common.OnBoardingDefaultSolution", - "text": "OnBoardingDefaultSolution" + "docId": "kibSpacesPluginApi", + "section": "def-common.SolutionView", + "text": "SolutionView" }, - " | \"classic\" | undefined" + " | undefined" ], "path": "x-pack/plugins/spaces/common/types/space/v1.ts", "deprecated": false, @@ -1834,13 +1834,13 @@ "signature": [ "{ id?: string | undefined; name?: string | undefined; description?: string | undefined; color?: string | undefined; initials?: string | undefined; imageUrl?: string | undefined; disabledFeatures?: string[] | undefined; _reserved?: boolean | undefined; solution?: ", { - "pluginId": "cloud", + "pluginId": "spaces", "scope": "common", - "docId": "kibCloudPluginApi", - "section": "def-common.OnBoardingDefaultSolution", - "text": "OnBoardingDefaultSolution" + "docId": "kibSpacesPluginApi", + "section": "def-common.SolutionView", + "text": "SolutionView" }, - " | \"classic\" | undefined; }" + " | undefined; }" ], "path": "x-pack/plugins/spaces/public/space_avatar/types.ts", "deprecated": false, @@ -3717,13 +3717,13 @@ ], "signature": [ { - "pluginId": "cloud", + "pluginId": "spaces", "scope": "common", - "docId": "kibCloudPluginApi", - "section": "def-common.OnBoardingDefaultSolution", - "text": "OnBoardingDefaultSolution" + "docId": "kibSpacesPluginApi", + "section": "def-common.SolutionView", + "text": "SolutionView" }, - " | \"classic\" | undefined" + " | undefined" ], "path": "x-pack/plugins/spaces/common/types/space/v1.ts", "deprecated": false, @@ -4974,13 +4974,13 @@ ], "signature": [ { - "pluginId": "cloud", + "pluginId": "spaces", "scope": "common", - "docId": "kibCloudPluginApi", - "section": "def-common.OnBoardingDefaultSolution", - "text": "OnBoardingDefaultSolution" + "docId": "kibSpacesPluginApi", + "section": "def-common.SolutionView", + "text": "SolutionView" }, - " | \"classic\" | undefined" + " | undefined" ], "path": "x-pack/plugins/spaces/common/types/space/v1.ts", "deprecated": false, @@ -5058,6 +5058,28 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "spaces", + "id": "def-common.SolutionView", + "type": "Type", + "tags": [], + "label": "SolutionView", + "description": [], + "signature": [ + { + "pluginId": "cloud", + "scope": "common", + "docId": "kibCloudPluginApi", + "section": "def-common.OnBoardingDefaultSolution", + "text": "OnBoardingDefaultSolution" + }, + " | \"classic\"" + ], + "path": "x-pack/plugins/spaces/common/types/space/v1.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "spaces", "id": "def-common.SPACE_SEARCH_COUNT_THRESHOLD", diff --git a/api_docs/spaces.mdx b/api_docs/spaces.mdx index 2c1537cfa54ae..d4355cba92988 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'spaces'] --- import spacesObj from './spaces.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana- | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 260 | 0 | 66 | 0 | +| 261 | 0 | 67 | 0 | ## Client diff --git a/api_docs/stack_alerts.mdx b/api_docs/stack_alerts.mdx index 4e3c66e0a8e81..21c85bbecf70d 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackAlerts'] --- import stackAlertsObj from './stack_alerts.devdocs.json'; diff --git a/api_docs/stack_connectors.mdx b/api_docs/stack_connectors.mdx index a27dbaf7a9f76..e4d5df9bbb00c 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index b748756648d35..48fbbfbc00270 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager'] --- import taskManagerObj from './task_manager.devdocs.json'; diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx index c04570e6d31c2..84294467a0284 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetry'] --- import telemetryObj from './telemetry.devdocs.json'; diff --git a/api_docs/telemetry_collection_manager.mdx b/api_docs/telemetry_collection_manager.mdx index 9ff4ca1385337..9d622822261e5 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager'] --- import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json'; diff --git a/api_docs/telemetry_collection_xpack.mdx b/api_docs/telemetry_collection_xpack.mdx index 58430e970b49f..080bed65cdbb8 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionXpack'] --- import telemetryCollectionXpackObj from './telemetry_collection_xpack.devdocs.json'; diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx index a1903aff59002..4730cb32f31cf 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 8fff89ee6dec8..ba894fcf48dbc 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'threatIntelligence'] --- import threatIntelligenceObj from './threat_intelligence.devdocs.json'; diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx index f2ca6609d2bcc..277ccf95c1dbb 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines'] --- import timelinesObj from './timelines.devdocs.json'; diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx index 95df150988cc9..36b78020a6bd6 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index 3c73082ac97dd..c540dfed9014a 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index ac46711599f0e..fe4c040a5a57d 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActions'] --- import uiActionsObj from './ui_actions.devdocs.json'; diff --git a/api_docs/ui_actions_enhanced.mdx b/api_docs/ui_actions_enhanced.mdx index ff9a063159749..afb01a7a41d47 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_doc_viewer.mdx b/api_docs/unified_doc_viewer.mdx index ee16441e66b45..530d03167f8d6 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedDocViewer'] --- import unifiedDocViewerObj from './unified_doc_viewer.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index 600ae991b6ba8..9af877c2cee3c 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram'] --- import unifiedHistogramObj from './unified_histogram.devdocs.json'; diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index d287c7819a613..621402c442f44 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch'] --- import unifiedSearchObj from './unified_search.devdocs.json'; diff --git a/api_docs/unified_search_autocomplete.mdx b/api_docs/unified_search_autocomplete.mdx index f00034330ebce..6e201aee15329 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/uptime.mdx b/api_docs/uptime.mdx index 85cc363c0114e..5a6f67615a561 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uptime'] --- import uptimeObj from './uptime.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index ae54e4e5649a7..a081db3d83d2d 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding'] --- import urlForwardingObj from './url_forwarding.devdocs.json'; diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx index ee976cf2cdd2a..fd5eff32d49c0 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'usageCollection'] --- import usageCollectionObj from './usage_collection.devdocs.json'; diff --git a/api_docs/ux.mdx b/api_docs/ux.mdx index 1220278c061be..27c2e54a8302a 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ux'] --- import uxObj from './ux.devdocs.json'; diff --git a/api_docs/vis_default_editor.mdx b/api_docs/vis_default_editor.mdx index a4e674961a40b..d5991a02837f1 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visDefaultEditor'] --- import visDefaultEditorObj from './vis_default_editor.devdocs.json'; diff --git a/api_docs/vis_type_gauge.mdx b/api_docs/vis_type_gauge.mdx index f31f7cbfde210..e6103552e7615 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeGauge'] --- import visTypeGaugeObj from './vis_type_gauge.devdocs.json'; diff --git a/api_docs/vis_type_heatmap.mdx b/api_docs/vis_type_heatmap.mdx index 9e76049923243..32a885d07d453 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeHeatmap'] --- import visTypeHeatmapObj from './vis_type_heatmap.devdocs.json'; diff --git a/api_docs/vis_type_pie.mdx b/api_docs/vis_type_pie.mdx index e114470372ab6..4c5c0f335926d 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypePie'] --- import visTypePieObj from './vis_type_pie.devdocs.json'; diff --git a/api_docs/vis_type_table.mdx b/api_docs/vis_type_table.mdx index b2596325d3c2b..b90f779ce8555 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTable'] --- import visTypeTableObj from './vis_type_table.devdocs.json'; diff --git a/api_docs/vis_type_timelion.mdx b/api_docs/vis_type_timelion.mdx index 4b49c8a725594..5a30b7a93f380 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimelion'] --- import visTypeTimelionObj from './vis_type_timelion.devdocs.json'; diff --git a/api_docs/vis_type_timeseries.mdx b/api_docs/vis_type_timeseries.mdx index 5e9451ad9e730..d9c9a88211d50 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimeseries'] --- import visTypeTimeseriesObj from './vis_type_timeseries.devdocs.json'; diff --git a/api_docs/vis_type_vega.mdx b/api_docs/vis_type_vega.mdx index 26247a2c08163..0b4004c01070d 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVega'] --- import visTypeVegaObj from './vis_type_vega.devdocs.json'; diff --git a/api_docs/vis_type_vislib.mdx b/api_docs/vis_type_vislib.mdx index 395445ad212c8..ffa9f494e03df 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVislib'] --- import visTypeVislibObj from './vis_type_vislib.devdocs.json'; diff --git a/api_docs/vis_type_xy.mdx b/api_docs/vis_type_xy.mdx index d117a12c22196..c36d4974a29e7 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index eb96e26e0b104..33bcbf84e4d09 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2024-08-01 +date: 2024-08-02 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From 84c347233a4b7ce93b93cff8335d5b8815dc4deb Mon Sep 17 00:00:00 2001 From: Stratoula Kalafateli Date: Fri, 2 Aug 2024 07:52:07 +0200 Subject: [PATCH 24/25] [ES|QL][Discover] Hide null values from the document viewer (#189601) ## Summary Closes https://github.com/elastic/kibana/issues/188846 Added a switch to the docViewer that hides the fields with null values. It is visible both in ESQL and dataview mode. The selection is stored in the localStorage ![meow](https://github.com/user-attachments/assets/3a072081-e41c-482c-8c0f-2028f39a34cd) ### 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 --- .../components/doc_viewer_table/table.tsx | 41 +++++++++++++++- .../apps/discover/group3/_doc_viewer.ts | 49 ++++++++++++++++++- 2 files changed, 88 insertions(+), 2 deletions(-) diff --git a/src/plugins/unified_doc_viewer/public/components/doc_viewer_table/table.tsx b/src/plugins/unified_doc_viewer/public/components/doc_viewer_table/table.tsx index 62f5ed497067b..b6183c496342e 100644 --- a/src/plugins/unified_doc_viewer/public/components/doc_viewer_table/table.tsx +++ b/src/plugins/unified_doc_viewer/public/components/doc_viewer_table/table.tsx @@ -9,6 +9,7 @@ import './table.scss'; import React, { useCallback, useMemo, useState } from 'react'; import useWindowSize from 'react-use/lib/useWindowSize'; +import useLocalStorage from 'react-use/lib/useLocalStorage'; import { EuiFlexGroup, EuiFlexItem, @@ -22,6 +23,8 @@ import { EuiText, EuiCallOut, useResizeObserver, + EuiSwitch, + useEuiTheme, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { css } from '@emotion/react'; @@ -72,6 +75,7 @@ const DEFAULT_PAGE_SIZE = 25; const PINNED_FIELDS_KEY = 'discover:pinnedFields'; const PAGE_SIZE = 'discover:pageSize'; const SEARCH_TEXT = 'discover:searchText'; +const HIDE_NULL_VALUES = 'discover:hideNullValues'; const GRID_COLUMN_FIELD_NAME = 'name'; const GRID_COLUMN_FIELD_VALUE = 'value'; @@ -135,11 +139,13 @@ export const DocViewerTable = ({ columnsMeta, hit, dataView, + textBasedHits, filter, decreaseAvailableHeightBy, onAddColumn, onRemoveColumn, }: DocViewRenderProps) => { + const isEsqlMode = Array.isArray(textBasedHits); const [containerRef, setContainerRef] = useState(null); const { fieldFormats, storage, uiSettings, fieldsMetadata } = getUnifiedDocViewerServices(); const showMultiFields = uiSettings.get(SHOW_MULTIFIELDS); @@ -149,6 +155,9 @@ export const DocViewerTable = ({ const [pinnedFields, setPinnedFields] = useState( getPinnedFields(currentDataViewId, storage) ); + const [areNullValuesHidden, setAreNullValuesHidden] = useLocalStorage(HIDE_NULL_VALUES, false); + + const { euiTheme } = useEuiTheme(); const flattened = hit.flattened; const shouldShowFieldHandler = useMemo( @@ -265,7 +274,11 @@ export const DocViewerTable = ({ if (!shouldShowFieldHandler(curFieldName)) { return acc; } - + const shouldHideNullValue = + areNullValuesHidden && flattened[curFieldName] == null && isEsqlMode; + if (shouldHideNullValue) { + return acc; + } if (pinnedFields.includes(curFieldName)) { acc.pinnedItems.push(fieldToItem(curFieldName, true)); } else { @@ -358,6 +371,13 @@ export const DocViewerTable = ({ [fieldCellActions, fieldValueCellActions, containerWidth] ); + const onHideNullValuesChange = useCallback( + (e) => { + setAreNullValuesHidden(e.target.checked); + }, + [setAreNullValuesHidden] + ); + const renderCellValue: EuiDataGridProps['renderCellValue'] = useCallback( ({ rowIndex, columnId, isDetails }) => { const row = rows[rowIndex]; @@ -493,6 +513,25 @@ export const DocViewerTable = ({ + {isEsqlMode && ( + + + + )} { + await PageObjects.discover.selectTextBaseLang(); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + + const testQuery = 'from logstash-* | sort @timestamp | limit 10000'; + await monacoEditor.setCodeEditorValue(testQuery); + await testSubjects.click('querySubmitButton'); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await dataGrid.clickRowToggle(); + await PageObjects.discover.isShowingDocViewer(); + }); + + afterEach(async () => { + const fieldSearch = await testSubjects.find('clearSearchButton'); + await fieldSearch.click(); // clear search + const hideNullValuesSwitch = await testSubjects.find( + 'unifiedDocViewerHideNullValuesSwitch' + ); + await hideNullValuesSwitch.click(); // make sure the switch is off + }); + + it('should hide fields with null values ', async function () { + await PageObjects.discover.findFieldByNameInDocViewer('machine'); + const results = (await find.allByCssSelector('.kbnDocViewer__fieldName')).length; + const hideNullValuesSwitch = await testSubjects.find( + 'unifiedDocViewerHideNullValuesSwitch' + ); + await hideNullValuesSwitch.click(); + + await retry.waitFor('updates', async () => { + return (await find.allByCssSelector('.kbnDocViewer__fieldName')).length < results; + }); + }); + }); }); } From 5f34e5484c1abc7df74872c0cfc1fcb7032488e8 Mon Sep 17 00:00:00 2001 From: Irene Blanco Date: Fri, 2 Aug 2024 09:30:41 +0200 Subject: [PATCH 25/25] Display error message when failing to enable machine learning anomaly detection in Inventory (#189627) ## Summary Closes https://github.com/elastic/kibana/issues/170500 |Scenario|Before|After| |-|-|-| |**Single error**|Screenshot 2024-07-31 at 12 21
43|Screenshot 2024-07-31 at 12 21 21| |**Multiple errors**|Screenshot 2024-07-31 at 12
21 43|Screenshot 2024-07-31 at 12 20 54| --- .../ml/anomaly_detection/job_setup_screen.tsx | 10 ++- .../containers/ml/api/ml_setup_module_api.ts | 13 +++- .../ml/infra_ml_module_status.test.ts | 74 +++++++++++++++++++ .../containers/ml/infra_ml_module_status.tsx | 4 +- 4 files changed, 94 insertions(+), 7 deletions(-) create mode 100644 x-pack/plugins/observability_solution/infra/public/containers/ml/infra_ml_module_status.test.ts diff --git a/x-pack/plugins/observability_solution/infra/public/components/ml/anomaly_detection/job_setup_screen.tsx b/x-pack/plugins/observability_solution/infra/public/components/ml/anomaly_detection/job_setup_screen.tsx index 52150d0f9066a..87f58129ebf8b 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/ml/anomaly_detection/job_setup_screen.tsx +++ b/x-pack/plugins/observability_solution/infra/public/components/ml/anomaly_detection/job_setup_screen.tsx @@ -223,11 +223,13 @@ export const JobSetupScreen = (props: Props) => { /> {setupStatus.reasons.map((errorMessage, i) => ( - - {errorMessage} - + <> + + {errorMessage} + + + ))} - { + it('should handle failedSetup action with job and datafeed error reasons', () => { + const { result } = renderHook(() => useModuleStatus(['job'])); + const datafeedSetupResults = datafeedSetupResultsWithError('datafeed'); + const jobSetupResults = jobSetupResultsWithError('job'); + + act(() => { + result.current[1]({ + type: 'finishedSetup', + sourceId: 'sourceId', + spaceId: 'spaceId', + jobSetupResults, + jobSummaries: [], + datafeedSetupResults, + }); + }); + + expect(result.current[0].setupStatus).toEqual({ + type: 'failed', + reasons: [datafeedSetupResults[0].error.error.reason, jobSetupResults[0].error.error.reason], + }); + }); + + const setupResultError = (id: string) => { + const errorType = 'error'; + + return { + error: { + status: 500, + error: { + reason: `${id} failed`, + type: errorType, + root_cause: [ + { + reason: `${id} failed (root cause)`, + type: errorType, + }, + ], + }, + }, + }; + }; + + const datafeedSetupResultsWithError = (id: string) => { + return [ + { + id, + success: true, + started: true, + ...setupResultError(id), + }, + ]; + }; + + const jobSetupResultsWithError = (id: string) => { + return [ + { + id, + success: true, + ...setupResultError(id), + }, + ]; + }; +}); diff --git a/x-pack/plugins/observability_solution/infra/public/containers/ml/infra_ml_module_status.tsx b/x-pack/plugins/observability_solution/infra/public/containers/ml/infra_ml_module_status.tsx index ea222080d410c..26b8a51da6d2b 100644 --- a/x-pack/plugins/observability_solution/infra/public/containers/ml/infra_ml_module_status.tsx +++ b/x-pack/plugins/observability_solution/infra/public/containers/ml/infra_ml_module_status.tsx @@ -107,10 +107,10 @@ const createStatusReducer = reasons: [ ...Object.values(datafeedSetupResults) .filter(hasError) - .map((datafeed) => datafeed.error.msg), + .map((datafeed) => datafeed.error.error.reason), ...Object.values(jobSetupResults) .filter(hasError) - .map((job) => job.error.msg), + .map((job) => job.error.error.reason), ], };