From 5fcf787c64c5ee16d8b047b022610818f97bcba1 Mon Sep 17 00:00:00 2001 From: "opensearch-trigger-bot[bot]" <98922864+opensearch-trigger-bot[bot]@users.noreply.github.com> Date: Tue, 19 Apr 2022 15:51:28 -0700 Subject: [PATCH 01/30] Fix change availability bug (#667) (#671) Signed-off-by: Eugene Lee (cherry picked from commit aaeadb0e95979032a812d197691300d26f908eb0) Co-authored-by: Eugene Lee --- .../public/components/application_analytics/home.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dashboards-observability/public/components/application_analytics/home.tsx b/dashboards-observability/public/components/application_analytics/home.tsx index be405fa03..d3074da8b 100644 --- a/dashboards-observability/public/components/application_analytics/home.tsx +++ b/dashboards-observability/public/components/application_analytics/home.tsx @@ -200,7 +200,9 @@ export const Home = (props: HomeProps) => { .get(`${APP_ANALYTICS_API_PREFIX}/`) .then(async (res) => { // Want to calculate availability going down the table + const mainVisIdStore: Record = {}; for (let i = 0; i < res.data.length; i++) { + mainVisIdStore[res.data[i].id] = res.data[i].availability.mainVisId; res.data[i].availability = { name: 'loading', color: '', mainVisId: '' }; } setApplicationList(res.data); @@ -209,7 +211,7 @@ export const Home = (props: HomeProps) => { http, pplService, res.data[i], - res.data[i].availability.mainVisId, + mainVisIdStore[res.data[i].id], () => {} ); // Need to set state with new object to trigger re-render From 52ae188b9a38e96f1d666f51e56ed92998c1d745 Mon Sep 17 00:00:00 2001 From: "opensearch-trigger-bot[bot]" <98922864+opensearch-trigger-bot[bot]@users.noreply.github.com> Date: Thu, 21 Apr 2022 09:28:03 -0700 Subject: [PATCH 02/30] Add release notes for 2.0.0-rc1 (#674) (#675) Signed-off-by: Joshua Li (cherry picked from commit f0afa84dcb68be9ef096021da55de7b1c846ba93) Co-authored-by: Joshua Li --- ...observability.release-notes-2.0.0.0-rc1.md | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 release-notes/opensearch-observability.release-notes-2.0.0.0-rc1.md diff --git a/release-notes/opensearch-observability.release-notes-2.0.0.0-rc1.md b/release-notes/opensearch-observability.release-notes-2.0.0.0-rc1.md new file mode 100644 index 000000000..cbc88da32 --- /dev/null +++ b/release-notes/opensearch-observability.release-notes-2.0.0.0-rc1.md @@ -0,0 +1,51 @@ +## Version 2.0.0.0-rc1 Release Notes + +Compatible with OpenSearch 2.0.0.0-rc1 + +### Enhancements +* remove button toggle and add stop button ([#623](https://github.com/opensearch-project/observability/pull/623)) + +### Bug Fixes +* Edit visualization time change ([#617](https://github.com/opensearch-project/observability/pull/617)) +* Remove duplicated node dependencies ([#620](https://github.com/opensearch-project/observability/pull/620)) +* Bug fixes for application analytics ([#608](https://github.com/opensearch-project/observability/pull/608)) +* Fixes trace analytics invalid service map and increase span limit ([#629](https://github.com/opensearch-project/observability/pull/629)) +* Adding legacy UI route for traces ([#653](https://github.com/opensearch-project/observability/pull/653)) +* Fix change availability bug ([#667](https://github.com/opensearch-project/observability/pull/667)) +* Fix test to check for empty event analytics ([#669](https://github.com/opensearch-project/observability/pull/669)) +* Bump prismjs from 1.25.0 to 1.27.0 in /dashboards-observability ([#508](https://github.com/opensearch-project/observability/pull/508)) +* Bump minimist from 1.2.5 to 1.2.6 in /dashboards-observability ([#614](https://github.com/opensearch-project/observability/pull/614)) +* Bump moment from 2.29.1 to 2.29.2 in /dashboards-observability ([#636](https://github.com/opensearch-project/observability/pull/636)) +* Bump async from 3.2.1 to 3.2.3 in /dashboards-observability ([#654](https://github.com/opensearch-project/observability/pull/654)) + +### Infrastructure +* Bwc update ([#604](https://github.com/opensearch-project/observability/pull/604)) +* Event cypress tests ([#611](https://github.com/opensearch-project/observability/pull/611)) +* Test 2.0 ([#624](https://github.com/opensearch-project/observability/pull/624)) +* Updated panel flaky cypress tests ([#633](https://github.com/opensearch-project/observability/pull/633)) +* Updated notebook cypress tests ([#637](https://github.com/opensearch-project/observability/pull/637)) +* updated events flyout ui, unskip jest tests ([#638](https://github.com/opensearch-project/observability/pull/638)) +* Remove zips used by bwc tests ([#648](https://github.com/opensearch-project/observability/pull/648)) +* Fix trace analytics cypress ([#652](https://github.com/opensearch-project/observability/pull/652)) +* Event analytics jest tests ([#651](https://github.com/opensearch-project/observability/pull/651)) +* 2.0 cypress tests ([#658](https://github.com/opensearch-project/observability/pull/658)) +* Updated issue templates from .github. ([#662](https://github.com/opensearch-project/observability/pull/662)) +* Removing add sample data test from panels cypress ([#668](https://github.com/opensearch-project/observability/pull/668)) + +### Documentation +* Remove master and whitelist text ([#657](https://github.com/opensearch-project/observability/pull/657)) + +### Maintenance +* Bump plugins to 2.0 and support build.version_qualifier ([#602](https://github.com/opensearch-project/observability/pull/602)) +* Add alpha1 qualifier and JDK 17 for backend ([#607](https://github.com/opensearch-project/observability/pull/607)) +* Add alpha1 qualifiers for dashboards plugin ([#616](https://github.com/opensearch-project/observability/pull/616)) +* Tweak build.gradle to have the correct qualifiers in 2.0.0 ([#619](https://github.com/opensearch-project/observability/pull/619)) +* Change alpha1 to rc1 for first 2.0 release ([#635](https://github.com/opensearch-project/observability/pull/635)) +* Change 2.0-alpha1 to 2.0-rc1. ([#655](https://github.com/opensearch-project/observability/pull/655)) + +### Refactoring +* Modularize and cleanup traces ([#601](https://github.com/opensearch-project/observability/pull/601)) +* Modularize and cleanup panel ([#603](https://github.com/opensearch-project/observability/pull/603)) +* Modularize event Analytics live tail and fix bug ([#647](https://github.com/opensearch-project/observability/pull/647)) +* Fix lint and modularize dashboard ([#583](https://github.com/opensearch-project/observability/pull/583)) +* Modularize service and fix issues ([#595](https://github.com/opensearch-project/observability/pull/595)) \ No newline at end of file From d34e211a48a94250d4a4481318ecf76690c276b0 Mon Sep 17 00:00:00 2001 From: "opensearch-trigger-bot[bot]" <98922864+opensearch-trigger-bot[bot]@users.noreply.github.com> Date: Mon, 2 May 2022 09:58:07 -0700 Subject: [PATCH 03/30] Support integTestRemote with security enabled endpoint (#699) (#703) Signed-off-by: Joshua Li (cherry picked from commit 9ebb7d266250fd902567f9f804c425d5a4f9774f) Co-authored-by: Joshua Li --- .../observability/PluginRestTestCase.kt | 105 ++++++++---------- .../src/test/resources/security/sample.pem | 28 +++++ .../src/test/resources/security/test-kirk.jks | Bin 0 -> 3874 bytes 3 files changed, 72 insertions(+), 61 deletions(-) create mode 100644 opensearch-observability/src/test/resources/security/sample.pem create mode 100644 opensearch-observability/src/test/resources/security/test-kirk.jks diff --git a/opensearch-observability/src/test/kotlin/org/opensearch/observability/PluginRestTestCase.kt b/opensearch-observability/src/test/kotlin/org/opensearch/observability/PluginRestTestCase.kt index 33afa6e80..759674eef 100644 --- a/opensearch-observability/src/test/kotlin/org/opensearch/observability/PluginRestTestCase.kt +++ b/opensearch-observability/src/test/kotlin/org/opensearch/observability/PluginRestTestCase.kt @@ -6,17 +6,7 @@ package org.opensearch.observability import com.google.gson.JsonObject -import org.apache.http.Header import org.apache.http.HttpHost -import org.apache.http.auth.AuthScope -import org.apache.http.auth.UsernamePasswordCredentials -import org.apache.http.client.CredentialsProvider -import org.apache.http.client.config.RequestConfig -import org.apache.http.conn.ssl.NoopHostnameVerifier -import org.apache.http.impl.client.BasicCredentialsProvider -import org.apache.http.impl.nio.client.HttpAsyncClientBuilder -import org.apache.http.message.BasicHeader -import org.apache.http.ssl.SSLContextBuilder import org.junit.After import org.junit.AfterClass import org.junit.Before @@ -25,13 +15,14 @@ import org.opensearch.client.RequestOptions import org.opensearch.client.Response import org.opensearch.client.ResponseException import org.opensearch.client.RestClient -import org.opensearch.client.RestClientBuilder +import org.opensearch.client.WarningsHandler +import org.opensearch.common.io.PathUtils import org.opensearch.common.settings.Settings -import org.opensearch.common.unit.TimeValue -import org.opensearch.common.util.concurrent.ThreadContext import org.opensearch.common.xcontent.DeprecationHandler import org.opensearch.common.xcontent.NamedXContentRegistry import org.opensearch.common.xcontent.XContentType +import org.opensearch.commons.ConfigConstants +import org.opensearch.commons.rest.SecureRestClientBuilder import org.opensearch.test.rest.OpenSearchRestTestCase import java.io.BufferedReader import java.io.IOException @@ -39,7 +30,6 @@ import java.io.InputStreamReader import java.nio.charset.StandardCharsets import java.nio.file.Files import java.nio.file.Path -import java.security.cert.X509Certificate import javax.management.MBeanServerInvocationHandler import javax.management.ObjectName import javax.management.remote.JMXConnectorFactory @@ -79,63 +69,56 @@ abstract class PluginRestTestCase : OpenSearchRestTestCase() { val jsonObject: Map<*, *> = index as java.util.HashMap<*, *> val indexName: String = jsonObject["index"] as String // .opendistro_security isn't allowed to delete from cluster - if (indexName != ".opendistro_security") { - client().performRequest(Request("DELETE", "/$indexName")) + if (".opendistro_security" != indexName) { + val request = Request("DELETE", "/$indexName") + // TODO: remove PERMISSIVE option after moving system index access to REST API call + val options = RequestOptions.DEFAULT.toBuilder() + options.setWarningsHandler(WarningsHandler.PERMISSIVE) + request.options = options.build() + adminClient().performRequest(request) } } } } + /** + * Returns the REST client settings used for super-admin actions like cleaning up after the test has completed. + */ + override fun restAdminSettings(): Settings { + return Settings + .builder() + .put("http.port", 9200) + .put(ConfigConstants.OPENSEARCH_SECURITY_SSL_HTTP_ENABLED, isHttps()) + .put(ConfigConstants.OPENSEARCH_SECURITY_SSL_HTTP_PEMCERT_FILEPATH, "sample.pem") + .put(ConfigConstants.OPENSEARCH_SECURITY_SSL_HTTP_KEYSTORE_FILEPATH, "test-kirk.jks") + .put(ConfigConstants.OPENSEARCH_SECURITY_SSL_HTTP_KEYSTORE_PASSWORD, "changeit") + .put(ConfigConstants.OPENSEARCH_SECURITY_SSL_HTTP_KEYSTORE_KEYPASSWORD, "changeit") + .build() + } + @Throws(IOException::class) override fun buildClient(settings: Settings, hosts: Array): RestClient { - val builder = RestClient.builder(*hosts) if (isHttps()) { - configureHttpsClient(builder, settings) + val keystore = settings.get(ConfigConstants.OPENSEARCH_SECURITY_SSL_HTTP_KEYSTORE_FILEPATH) + return when (keystore != null) { + true -> { + // create adminDN (super-admin) client + val uri = javaClass.classLoader.getResource("security/sample.pem").toURI() + val configPath = PathUtils.get(uri).parent.toAbsolutePath() + SecureRestClientBuilder(settings, configPath).setSocketTimeout(60000).build() + } + false -> { + // create client with passed user + val userName = System.getProperty("user") + val password = System.getProperty("password") + SecureRestClientBuilder(hosts, isHttps(), userName, password).setSocketTimeout(60000).build() + } + } } else { + val builder = RestClient.builder(*hosts) configureClient(builder, settings) - } - builder.setStrictDeprecationMode(true) - return builder.build() - } - - @Throws(IOException::class) - protected open fun configureHttpsClient(builder: RestClientBuilder, settings: Settings) { - val headers = ThreadContext.buildDefaultHeaders(settings) - val defaultHeaders = arrayOfNulls
(headers.size) - var i = 0 - for ((key, value) in headers) { - defaultHeaders[i++] = BasicHeader(key, value) - } - builder.setDefaultHeaders(defaultHeaders) - builder.setHttpClientConfigCallback { httpClientBuilder: HttpAsyncClientBuilder -> - val userName = System.getProperty("user") - val password = System.getProperty("password") - val credentialsProvider: CredentialsProvider = BasicCredentialsProvider() - credentialsProvider.setCredentials(AuthScope.ANY, UsernamePasswordCredentials(userName, password)) - try { - return@setHttpClientConfigCallback httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider) - // disable the certificate since our testing cluster just uses the default security configuration - .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE) - .setSSLContext( - SSLContextBuilder.create() - .loadTrustMaterial(null) { _: Array?, _: String? -> true } - .build() - ) - } catch (e: Exception) { - throw RuntimeException(e) - } - } - val socketTimeoutString = settings[CLIENT_SOCKET_TIMEOUT] - val socketTimeout = TimeValue.parseTimeValue(socketTimeoutString ?: "60s", CLIENT_SOCKET_TIMEOUT) - builder.setRequestConfigCallback { conf: RequestConfig.Builder -> - conf.setSocketTimeout( - Math.toIntExact( - socketTimeout.millis - ) - ) - } - if (settings.hasValue(CLIENT_PATH_PREFIX)) { - builder.setPathPrefix(settings[CLIENT_PATH_PREFIX]) + builder.setStrictDeprecationMode(true) + return builder.build() } } diff --git a/opensearch-observability/src/test/resources/security/sample.pem b/opensearch-observability/src/test/resources/security/sample.pem new file mode 100644 index 000000000..fa785ca10 --- /dev/null +++ b/opensearch-observability/src/test/resources/security/sample.pem @@ -0,0 +1,28 @@ +-----BEGIN CERTIFICATE----- +MIIEyTCCA7GgAwIBAgIGAWLrc1O2MA0GCSqGSIb3DQEBCwUAMIGPMRMwEQYKCZIm +iZPyLGQBGRYDY29tMRcwFQYKCZImiZPyLGQBGRYHZXhhbXBsZTEZMBcGA1UECgwQ +RXhhbXBsZSBDb20gSW5jLjEhMB8GA1UECwwYRXhhbXBsZSBDb20gSW5jLiBSb290 +IENBMSEwHwYDVQQDDBhFeGFtcGxlIENvbSBJbmMuIFJvb3QgQ0EwHhcNMTgwNDIy +MDM0MzQ3WhcNMjgwNDE5MDM0MzQ3WjBeMRIwEAYKCZImiZPyLGQBGRYCZGUxDTAL +BgNVBAcMBHRlc3QxDTALBgNVBAoMBG5vZGUxDTALBgNVBAsMBG5vZGUxGzAZBgNV +BAMMEm5vZGUtMC5leGFtcGxlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAJa+f476vLB+AwK53biYByUwN+40D8jMIovGXm6wgT8+9Sbs899dDXgt +9CE1Beo65oP1+JUz4c7UHMrCY3ePiDt4cidHVzEQ2g0YoVrQWv0RedS/yx/DKhs8 +Pw1O715oftP53p/2ijD5DifFv1eKfkhFH+lwny/vMSNxellpl6NxJTiJVnQ9HYOL +gf2t971ITJHnAuuxUF48HcuNovW4rhtkXef8kaAN7cE3LU+A9T474ULNCKkEFPIl +ZAKN3iJNFdVsxrTU+CUBHzk73Do1cCkEvJZ0ZFjp0Z3y8wLY/gqWGfGVyA9l2CUq +eIZNf55PNPtGzOrvvONiui48vBKH1LsCAwEAAaOCAVkwggFVMIG8BgNVHSMEgbQw +gbGAFJI1DOAPHitF9k0583tfouYSl0BzoYGVpIGSMIGPMRMwEQYKCZImiZPyLGQB +GRYDY29tMRcwFQYKCZImiZPyLGQBGRYHZXhhbXBsZTEZMBcGA1UECgwQRXhhbXBs +ZSBDb20gSW5jLjEhMB8GA1UECwwYRXhhbXBsZSBDb20gSW5jLiBSb290IENBMSEw +HwYDVQQDDBhFeGFtcGxlIENvbSBJbmMuIFJvb3QgQ0GCAQEwHQYDVR0OBBYEFKyv +78ZmFjVKM9g7pMConYH7FVBHMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgXg +MCAGA1UdJQEB/wQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjA1BgNVHREELjAsiAUq +AwQFBYISbm9kZS0wLmV4YW1wbGUuY29tgglsb2NhbGhvc3SHBH8AAAEwDQYJKoZI +hvcNAQELBQADggEBAIOKuyXsFfGv1hI/Lkpd/73QNqjqJdxQclX57GOMWNbOM5H0 +5/9AOIZ5JQsWULNKN77aHjLRr4owq2jGbpc/Z6kAd+eiatkcpnbtbGrhKpOtoEZy +8KuslwkeixpzLDNISSbkeLpXz4xJI1ETMN/VG8ZZP1bjzlHziHHDu0JNZ6TnNzKr +XzCGMCohFfem8vnKNnKUneMQMvXd3rzUaAgvtf7Hc2LTBlf4fZzZF1EkwdSXhaMA +1lkfHiqOBxtgeDLxCHESZ2fqgVqsWX+t3qHQfivcPW6txtDyrFPRdJOGhiMGzT/t +e/9kkAtQRgpTb3skYdIOOUOV0WGQ60kJlFhAzIs= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/opensearch-observability/src/test/resources/security/test-kirk.jks b/opensearch-observability/src/test/resources/security/test-kirk.jks new file mode 100644 index 0000000000000000000000000000000000000000..174dbda656f41b10341adb78ab91a46afaae8a1c GIT binary patch literal 3874 zcmY+GcQhM}zs8e@RFtSn>{Y9_XzfvZl*TSQG6F9FNd(wu zFab99cRY+FKt2CO5E21u`*&mo0s{VisDB9%$qk|Z?*;}S1PKGv1*1XCugHHEKp;B6 z69Saqd|bch;ZdXcj@o48Or^T{VjiQWQ)um?koax&EW2Jd6%cmO+99&?<0M#TkhMY0 z>TOc9NNj$5o%GwnI2>ZpA<-syd;YVlrkqVstJxqe_w8#F0dlKW!#D3WVDWfwaN@uX z{)l!>hgv`=r)M_tPedAH8wS zrMCsCM3^vbf3iWkdUoK)O(h9`bxp3s^zq4CU5%IJN;Y04OLiLfXPS%;Duo}L?EKtE z$4DyO?uRf+Ovm@OBmMKYjcI;;3k(jA`wJ`_W&){Es6Nv(A-s;NYZhfPTZJ%tBZ{1@ zc|_(P(o|Du6c{sJ4@Q6w- zF)*aVb&dDqmGoH8(8Y;T2S?DR9+P|nUT>q8177|so}DjY7IWc!jB(9r?rJ%YyVvh5 z4`BJLeFX6F2g1N^WT?dWin3^|1>$*MQP~CSqFMgQ4m&bJp``1>I(!5Pe9&NB7{wXc z+p)Bs6Durb104tWmIOYRkBU~Waz;l#k`+@Fye00vbTIQq3dY*R{KBH-UF3%r{=+v` zqu(DD1~xv;*N0vqhN9l+bCm(5u37KF+&JF&or0qB&J%}ZmdviHekDmr#GlPK60J4Q zJ#vSZYt1pSxEPM~S27`bL-X}ig&?t1ubwy1&P?lEwQUs|t?a7>dqM7^&@^5tSL9pMp+&5H?jk>BGMj!JcQ+3*rxFcY4MY2z z4C?1*^xq&(g`+u7JnXS-Yuq8?$%DG-Zs#VDo=cTmcJRfEFTG1T4~(u1j$Snc+7Cs; zyB9?mE4rqbq_*xqj?#OlN%@YGt*PgH+-~Fy+blur5jn zu_S?>vGKl_57zp6>#CW5Q&HHKl|qVToNrM`8!zz5n*{CQ+r2#n4{2tk@;0m{ zM8pbY25rVQv1<0iw2CPT?uG+>NVZVLalVoRSZQdC(&M@`0$mC@6l?zxF&LAM8XHR1Ah3S zb?4&7@N$w<+PVC^0ws=h2pqrozQ!=b!?Zy2@uQjFh1)BEPT$JlDa9Q8(%YHT_r)w# z<4bW`j)gX^ktonho#Uf=U=ZH5QT!;ug%qe!Fi?N(OjphEVY3YTU5B*j^ZMOg+XmnL zPpT%`zoHjGCw~=w|5zC`KWOFwsF`=Jjwez^hwA2rgTt^ z^10Gp<3*%@mI37QZ>P3$*PX4;4LpFQqK9AnvMxAg!|B)unEQ{13w`0LO;;mgV22L5 z=Y8bwo8Fch2UFgZEqeTdMGZMKmz)4Uzb#-R)&H4zUC45?<4&g?`6XX-=`F2|(~Esf z4P+-+Y;J{*hV8L55?o`K^wL+ zE>e|WH7ZW48)vi%Zq4nbkLikeTd&2pCr5A#jJC9jypS>*@uF<#i}Xp$3X7~b0>bXQ zd@CV7FY-$A{IR_m5uZie z+ckdOpNC4bjck=wZ@3lTl5+`W3~_4oPuGx4#mk-f?CsbGulgu|BAb)LTI|hBYM==Q zPLdu6@x)I_O{qq^{%cI*Q`-C+WZjpp^GjGiWv(#7Vr(pZ@A532u&Rn|3@4+xgKqNc zMhtgDOn)7lv}KZc^U}jD!KU{3;=7as(>uBwDx5}ii8iIz!F(WDlbe(V`WH5PS-XhZ zPJFI;eV}4{aJ?&?Sv%?zMZJ9SRFL%?ZZ0C(FdozY2R@i=1>&&E< z<(hauSRE!6;QE6ujbYrYrWNm9;!ixJV`}*=J$7wZ^0l>rTb7|)`olK^*^m3Ex%nq2 zL({r^1)T=Q7qM>-F~1lC817t!PNhq1c&?{#kiAuiMtlDELuI?Ut6LMQ6()675@U5L z_g(P7&7MR-N3z!C5a+qZ$!xmrg0qbsQn*7vqc!v-^yqc6`tlc%aQl-Fe+IYP5Pe^K z^%zx2w*a+^&+F*;<~HZ&=XwRTB6z)Uec2XkH=^cl)cHs|VxGqSQStks&td*NQbTPW z@??ewN#dRVCH?t{p-$)JDIxkVF$#9Q?iS!Qqby9p zttQuw3k2_4Hs9`5TG}3Jwk97Nste6#I!jG)f$b(~xI#)Bs7nQ7es#6RzYPh=8vCY$@K;aE z0JYYxSm&6)?GS&eI-ibs8vhi$EXK)Yhv7%bHy2C$czjfz?F4J+b%lJkXj+1&h?Ti_R;#D>}h%qh-ltN3^kJE=J$q9lGN z97&*c`aeQNBG8(G3ADz4#|D3&4&?Ix=oLK>L?VDUkp%Gi|FbTdf2<2!*X4kUenR(; zb%6=se)ca%eZ zOyn3`1eb66NoONNlb!Qgq|BuMxwULjnW>4u2iuhj(ZUV8fC!eY=nsZF*}w6V0(LxJ zVJ|ew^cV0%UizR_Y1yOEtM1}iw*f#fPAX(#E)%*G)QD7W7O$XT5e!*pv0krMED!yw zv)_h?54B@8<=GZ6ukEmkmrx<@jaUud2Y%EQU-vBcCChZ&9Xf`1Rw3w4G=@{y>I<<5 zr)BfiiXe`(Z@ksE4@BqB5d!$>pA(N&9b7XX5GBfr?j{H(J6=OSr*~9Ff8Zh0^d;HS3|V9O<+-Py zxI&YAI-gM^t2+X1O6JyQ*^8SfuZ5{?m1F14fGg;0aeF|P)4c8tw{C;?*J)`bjV2~qOsSjk^$@gQ1{3jw}OGfYhan!3#Y zHIQX-5|4fmT69zTvDd3aW(AkQqj4t}?Md}bd>>Q>N!29V@klLOr#L%^gPrlgw8ASS>!fstf*6i;ka?xLu@MUq>?r_mf*HCZ0jHy2N^B`x>Y90Tt5-jn7*G)Ai~?r^6!i zChFK}Z-Np|s#K(ct1NYcNSoxM%p~ng6bf7}uXm#_v&(wHHp4Tljgd6EW$Kg0xZkkr zi&o;({o`MC#=#JXFx-Py14vyFMbGypX`-a>1F9n21b`MXKk|zU$zEO&>l1Rjkx$4Vg-UeUetqM3xCVt2 z#4}QY$t__sQxkuq9U8E_JbjM8#9JvlSK48A@`?q^I*~JnT-!@f$l49YlT>fpGqYJ9 zr+k*tw-oT8l~Dr<$GT8lt$6D+{n7Af1%CX7h0*}>N)s;I);DZqq{57a Date: Wed, 4 May 2022 10:25:59 -0700 Subject: [PATCH 04/30] Add data test subj to app analytics (#704) (#718) Signed-off-by: Eugene Lee --- .../integration/app_analytics.spec.js | 461 ++++++++---------- .../.cypress/utils/app_constants.js | 16 +- .../common/constants/application_analytics.ts | 12 +- .../__snapshots__/create.test.tsx.snap | 272 +++++++++-- .../__snapshots__/log_config.test.tsx.snap | 12 + .../service_config.test.tsx.snap | 42 +- .../__snapshots__/trace_config.test.tsx.snap | 42 +- .../components/app_table.tsx | 28 +- .../components/application.tsx | 22 +- .../config_components/log_config.tsx | 2 + .../config_components/service_config.tsx | 7 +- .../config_components/trace_config.tsx | 5 +- .../components/configuration.tsx | 3 +- .../components/create.tsx | 13 +- .../service_detail_flyout.tsx | 4 +- .../flyout_components/trace_detail_flyout.tsx | 4 +- .../application_analytics/helpers/utils.tsx | 1 + .../custom_panel_table.test.tsx.snap | 13 + .../custom_panel_view.test.tsx.snap | 20 + .../custom_panels/custom_panel_table.tsx | 10 +- .../custom_panels/custom_panel_view.tsx | 7 +- .../custom_input_model.test.tsx.snap | 4 + .../__snapshots__/utils.test.tsx.snap | 8 + .../helpers/add_visualization_popover.tsx | 1 + .../helpers/custom_input_modal.tsx | 15 +- .../helpers/modal_containers.tsx | 2 +- .../__snapshots__/empty_panel.test.tsx.snap | 12 + .../panel_modules/empty_panel.tsx | 2 +- .../visualization_container.test.tsx.snap | 2 + .../visualization_container.tsx | 9 +- .../event_analytics/explorer/explorer.tsx | 2 +- .../config_panel/config_panel.tsx | 6 +- .../config_controls/config_thresholds.tsx | 7 +- .../count_distribution.test.tsx.snap | 2 + .../components/event_analytics/home/home.tsx | 2 +- .../components/common/filters/filters.tsx | 4 +- .../service_map_scale.test.tsx.snap | 2 + .../dashboard_table.test.tsx.snap | 5 + .../components/dashboard/dashboard_table.tsx | 1 + .../flyout_list_item.test.tsx.snap | 1 + .../service_breakdown_panel.test.tsx.snap | 2 + .../span_detail_flyout.test.tsx.snap | 7 + .../span_detail_panel.test.tsx.snap | 2 + .../components/traces/flyout_list_item.tsx | 12 +- .../components/traces/span_detail_flyout.tsx | 8 +- .../__tests__/__snapshots__/bar.test.tsx.snap | 2 + .../__snapshots__/line.test.tsx.snap | 2 + .../__tests__/__snapshots__/pie.test.tsx.snap | 2 + .../__snapshots__/plotly.test.tsx.snap | 2 + .../components/visualizations/plotly/plot.tsx | 1 + 50 files changed, 757 insertions(+), 366 deletions(-) diff --git a/dashboards-observability/.cypress/integration/app_analytics.spec.js b/dashboards-observability/.cypress/integration/app_analytics.spec.js index 61dcbbef7..85b059e6b 100644 --- a/dashboards-observability/.cypress/integration/app_analytics.spec.js +++ b/dashboards-observability/.cypress/integration/app_analytics.spec.js @@ -39,28 +39,25 @@ describe('Creating application', () => { expectMessageOnHover('Name is required.'); cy.get('[data-test-subj="nameFormRow"]').type(nameOne); expectMessageOnHover('Provide at least one log source, service, entity or trace group.'); - cy.get('.euiAccordion').contains('Log source').trigger('mouseover').click(); - cy.get('[data-test-subj="searchAutocompleteTextArea"]').focus().type(baseQuery, {delay: TYPING_DELAY}); - cy.get('.euiButton').contains('Create').should('not.be.disabled'); - cy.get('[data-test-subj="searchAutocompleteTextArea"]').clear(); - expectMessageOnHover('Provide at least one log source, service, entity or trace group.'); - cy.get('.euiAccordion').contains('Services & entities').trigger('mouseover').click();; + cy.get('[data-test-subj="servicesEntitiesAccordion"]').trigger('mouseover').click(); cy.get('[data-test-subj="servicesEntitiesComboBox"]').trigger('mouseover').click(); cy.focused().type('{downArrow}'); cy.focused().type('{enter}'); - cy.get('.euiBadge').contains('1').should('exist'); - cy.get('.euiButton').contains('Create').should('not.be.disabled'); + cy.get('[data-test-subj="servicesEntitiesCountBadge"]').should('contain', '1'); + cy.get('[data-test-subj="createButton"]').should('not.be.disabled'); + cy.get('[data-test-subj="logSourceAccordion"]').trigger('mouseover').click(); cy.get('[data-test-subj="searchAutocompleteTextArea"]').focus().type(baseQuery, {delay: TYPING_DELAY}); - cy.get('.euiAccordion').contains('Trace groups').trigger('mouseover').click(); + cy.get('[data-test-subj="traceGroupsAccordion"]').scrollIntoView(); + cy.get('[data-test-subj="traceGroupsAccordion"]').trigger('mouseover').click(); cy.get('[data-test-subj="traceGroupsComboBox"]').scrollIntoView().type('http'); - cy.get('.euiFilterSelectItem').contains(trace_one).trigger('click') - cy.get('.euiFilterSelectItem').contains(trace_two).trigger('click'); - cy.get('.euiBadge').contains('2').should('exist'); - cy.get('.euiButton').contains('Create').should('not.be.disabled'); + cy.get('.euiFilterSelectItem').contains(trace_one).click({ force: true }); + cy.get('.euiFilterSelectItem').contains(trace_two).click({ force: true }); + cy.get('[data-test-subj="traceGroupsCountBadge"]').should('contain', '2'); + cy.get('[data-test-subj="createButton"]').should('not.be.disabled'); }); it('Suggests correct autocompletion', () => { - cy.get('.euiAccordion').contains('Log source').trigger('mouseover').click(); + cy.get('[data-test-subj="logSourceAccordion"]').trigger('mouseover').click(); cy.get('[data-test-subj="searchAutocompleteTextArea"]').click(); cy.get('.aa-List').find('.aa-Item').should('have.length', 1); cy.get('.aa-Item').contains('source').should('exist'); @@ -93,105 +90,98 @@ describe('Creating application', () => { it('Creates an application and redirects to application', () => { cy.get('[data-test-subj="nameFormRow"]').type(nameOne); cy.get('[data-test-subj="descriptionFormRow"]').type('This application is for testing.'); - cy.get('.euiAccordion').contains('Log source').trigger('mouseover').click(); - cy.get('[data-test-subj="searchAutocompleteTextArea"]').focus().type(baseQuery, {delay: TYPING_DELAY}); - cy.get('.euiAccordion').contains('Services & entities').trigger('mouseover').click(); + cy.get('[data-test-subj="servicesEntitiesAccordion"]').trigger('mouseover').click(); cy.get('[data-test-subj="servicesEntitiesComboBox"]').click(); cy.focused().type('{downArrow}'); cy.focused().type('{enter}'); - cy.get('.euiBadge').contains('1').should('exist'); - cy.get('.euiAccordion').contains('Trace groups').trigger('mouseover').click(); + cy.get('[data-test-subj="servicesEntitiesCountBadge"]').should('contain', '1'); + cy.get('[data-test-subj="logSourceAccordion"]').trigger('mouseover').click(); + cy.get('[data-test-subj="searchAutocompleteTextArea"]').focus().type(baseQuery, {delay: TYPING_DELAY}); + cy.get('[data-test-subj="traceGroupsAccordion"]').trigger('mouseover').click(); cy.get('[data-test-subj="traceGroupsComboBox"]').scrollIntoView().type('http'); cy.get('.euiFilterSelectItem').contains(trace_one).trigger('click'); cy.get('.euiFilterSelectItem').contains(trace_two).trigger('click'); - cy.get('.euiBadge').contains('2').should('exist'); - cy.get('.euiButton').contains('Create').should('not.be.disabled'); - cy.get('.euiButton').contains('Create').click(); - cy.wait(delay*3); - cy.get('.euiTitle').contains(nameOne).should('exist'); - cy.get('.euiTab').contains('Panel').click(); - cy.get('.euiText').contains('Start by adding your first visualization').should('exist'); + cy.get('[data-test-subj="traceGroupsCountBadge"]').should('contain', '2'); + cy.get('[data-test-subj="createButton"]').should('not.be.disabled'); + cy.get('[data-test-subj="createButton"]').click(); + cy.wait(delay * 3); + cy.get('[data-test-subj="applicationTitle"]').should('contain', nameOne); + cy.get('[data-test-subj="app-analytics-panelTab"]').click(); + cy.get('[data-test-subj="addFirstVisualizationText"]').should('exist'); }); it('Hides application panels in Operational Panels', () => { cy.visit( `${Cypress.env('opensearchDashboards')}/app/observability-dashboards#/operational_panels/` ); - cy.wait(delay*4); - if (cy.get('.euiButton').contains('Create panel').length < 2) { - cy.get('input.euiFieldSearch').type(`${nameOne}'s Panel`, {delay: TYPING_DELAY}); - cy.wait(delay); - cy.get('.euiTableCellContent__text').contains('No items found').should('exist'); - cy.get('.euiFormControlLayoutClearButton').click(); - cy.wait(delay); - } + cy.get('body').then(($body) => { + if ($body.find('[data-test-subj="customPanels__emptyCreateNewPanels"]').length == 1) { + cy.get('[data-test-subj="operationalPanelSearchBar"]').type(`${nameOne}'s Panel`, {delay: TYPING_DELAY}); + cy.wait(delay); + cy.get('.euiTableCellContent__text').contains('No items found').should('exist'); + cy.get('.euiFormControlLayoutClearButton').click(); + cy.wait(delay); + } + }); }); it('Redirects to home page on cancel', () => { - cy.get('.euiButton').contains('Cancel').click(); - cy.wait(delay); - cy.get('.euiTitle').contains('Applications').should('exist'); + cy.get('[data-test-subj="cancelCreateButton"]').contains('Cancel').click(); + cy.get('[data-test-subj="applicationHomePageTitle"]').should('exist'); }); it('Saves current input on reload', () => { cy.get('[data-test-subj="nameFormRow"]').type(nameOne); cy.get('[data-test-subj="descriptionFormRow"]').type(description); - cy.get('.euiAccordion').contains('Log source').trigger('mouseover').click(); + cy.get('[data-test-subj="logSourceAccordion"]').trigger('mouseover').click(); cy.get('[data-test-subj="searchAutocompleteTextArea"]').click(); cy .get('[data-test-subj="searchAutocompleteTextArea"]') .focus() .type(baseQuery, {delay: TYPING_DELAY}); - cy.get('.euiAccordion').contains('Services & entities').trigger('mouseover').click(); - cy.wait(delay); + cy.get('[data-test-subj="servicesEntitiesAccordion"]').trigger('mouseover').click(); + cy.get('[data-test-subj="servicesEntitiesComboBox"]').scrollIntoView(); cy.get('[data-test-subj="servicesEntitiesComboBox"]').trigger('mouseover').click(); - cy.wait(delay); - cy.get('.euiFilterSelectItem').contains(service_one).trigger('click'); - cy.get('.euiBadge').contains('1').should('exist'); - cy.get('.euiAccordion').contains('Trace groups').trigger('mouseover').click(); + cy.get('.euiFilterSelectItem').contains(service_one).click({ force: true }); + cy.get('[data-test-subj="servicesEntitiesCountBadge"]').should('contain', '1'); + cy.get('[data-test-subj="traceGroupsAccordion"]').trigger('mouseover').click(); cy.get('[data-test-subj="traceGroupsComboBox"]').scrollIntoView().type('http'); cy.get('.euiFilterSelectItem').contains(trace_one).trigger('click'); cy.get('.euiFilterSelectItem').contains(trace_two).trigger('click'); - cy.get('.euiBadge').contains('2').should('exist'); + cy.get('[data-test-subj="traceGroupsCountBadge"]').should('contain', '2'); cy.reload(); cy.wait(delay); cy.get('[data-test-subj="nameFormRow"]').find('.euiFieldText').should('contain.value', nameOne); cy.get('[data-test-subj="descriptionFormRow"]').find('.euiFieldText').should('contain.value', description); - cy.get('.euiAccordion').contains('Log source').trigger('mouseover').click(); + cy.get('[data-test-subj="logSourceAccordion"]').trigger('mouseover').click(); cy.get('[data-test-subj="searchAutocompleteTextArea"]').should('contain.value', baseQuery); - cy.get('.euiBadge').contains('1').should('exist'); - cy.get('.euiBadge').contains('2').should('exist'); + cy.get('[data-test-subj="servicesEntitiesCountBadge"]').should('contain', '1'); + cy.get('[data-test-subj="traceGroupsCountBadge"]').should('contain', '2'); }); it('Shows clear modals before clearing', () => { - cy.get('.euiAccordion').contains('Log source').click(); - cy.get('.euiButton-isDisabled').contains('Clear').should('exist'); + cy.get('[data-test-subj="logSourceAccordion"]').trigger('mouseover').click(); + cy.get('[data-test-subj="clearLogSourceButton"]').should('be.disabled'); cy.get('[data-test-subj="searchAutocompleteTextArea"]').focus().type(baseQuery, {delay: TYPING_DELAY}); - cy.get('.euiButton').contains('Clear').click(); + cy.get('[data-test-subj="clearLogSourceButton"]').click(); cy.get('.euiButton--danger').contains('Clear').click(); cy.get('[data-test-subj="searchAutocompleteTextArea"]').should('contain.value', ''); - cy.get('.euiAccordion').contains('Services & entities').trigger('mouseover').click(); + cy.get('[data-test-subj="servicesEntitiesAccordion"]').trigger('mouseover').click(); cy.get('[data-test-subj="servicesEntitiesComboBox"]').trigger('mouseover').click(); cy.get('.euiFilterSelectItem').contains(service_one).trigger('click'); - cy.get('.euiBadge').contains('1').should('exist'); - cy.get('.euiAccordion-isOpen').within(($service) => { - cy.get('.euiButton').contains('Clear all').click(); - }) + cy.get('[data-test-subj="servicesEntitiesCountBadge"]').should('contain', '1'); + cy.get('[data-test-subj="clearServicesEntitiesButton"]').click(); cy.get('.euiButton--danger').contains('Clear all').click(); - cy.get('.euiBadge').contains('1').should('not.exist'); - cy.get('.euiBadge').contains('0').should('exist'); - cy.get('.euiAccordion').contains('Services & entities').trigger('mouseover').click(); - cy.get('.euiAccordion').contains('Trace groups').trigger('mouseover').click(); + cy.get('[data-test-subj="servicesEntitiesCountBadge"]').should('contain', '0'); + cy.get('[data-test-subj="servicesEntitiesAccordion"]').trigger('mouseover').click(); + cy.get('[data-test-subj="traceGroupsAccordion"]').trigger('mouseover').click(); cy.get('[data-test-subj="traceGroupsComboBox"]').scrollIntoView().type('http'); cy.get('.euiFilterSelectItem').contains(trace_one).trigger('click'); cy.get('.euiFilterSelectItem').contains(trace_two).trigger('click'); - cy.get('.euiBadge').contains('2').should('exist'); - cy.get('.euiAccordion-isOpen').within(($trace) => { - cy.get('.euiButton').contains('Clear all').click(); - }) + cy.get('[data-test-subj="traceGroupsCountBadge"]').should('contain', '2'); + cy.get('[data-test-subj="clearTraceGroupsButton"]').click(); cy.get('.euiButton--danger').contains('Clear all').click(); - cy.get('.euiBadge').contains('2').should('not.exist'); - cy.get('.euiBadge').contains('0').should('exist'); + cy.get('[data-test-subj="traceGroupsCountBadge"]').should('contain', '0'); }); }); @@ -201,36 +191,33 @@ describe('Viewing application', () => { }); it('Has working breadcrumbs', () => { - cy.get('.euiBreadcrumb').contains('Cypress').click(); - cy.wait(delay); - cy.get('.euiTitle').contains(nameOne).should('exist'); - cy.get('.euiBreadcrumb').contains('Application analytics').click(); - cy.wait(delay); - cy.get('.euiTitle').contains('Applications').should('exist'); - cy.get('.euiBreadcrumb').contains('Observability').click(); - cy.wait(delay); - cy.get('.euiTitle').contains('Event analytics').should('exist'); + cy.get('.euiBreadcrumb').contains(nameOne).click(); + cy.get('[data-test-subj="applicationTitle"]').should('contain', nameOne); + cy.get('.euiBreadcrumb[href="#/application_analytics"]').click(); + cy.get('[data-test-subj="applicationHomePageTitle"]').should('contain', 'Applications'); + cy.get('.euiBreadcrumb[href="observability-dashboards#/"]').click(); + cy.get('[data-test-subj="eventHomePageTitle"]').should('contain', 'Event analytics'); }); it('Shares time range among tabs', () => { moveToApplication(nameOne); changeTimeTo24('months'); cy.get('[data-test-subj="superDatePickerShowDatesButton"]').should('contain', 'Last 24 months'); - cy.get('.euiTab').contains('Services').click(); + cy.get('[data-test-subj="app-analytics-serviceTab"]').click(); cy.get('[data-test-subj="superDatePickerShowDatesButton"]').should('contain', 'Last 24 months'); - cy.get('.euiTab').contains('Traces & Spans').click(); + cy.get('[data-test-subj="app-analytics-traceTab"]').click(); supressResizeObserverIssue(); cy.get('[data-test-subj="superDatePickerShowDatesButton"]').should('contain', 'Last 24 months'); - cy.get('.euiTab').contains('Log Events').click(); + cy.get('[data-test-subj="app-analytics-logTab"]').click(); cy.get('[data-test-subj="superDatePickerShowDatesButton"]').should('contain', 'Last 24 months'); - cy.get('.euiTab').contains('Panel').click(); + cy.get('[data-test-subj="app-analytics-panelTab"]').click(); cy.get('[data-test-subj="superDatePickerShowDatesButton"]').should('contain', 'Last 24 months'); }); it('Shows latency variance in dashboards table', () => { moveToApplication(nameOne); changeTimeTo24('months'); - cy.get('.euiBasicTable').first().within(($table) => { + cy.get('[data-test-subj="dashboardTable"]').first().within(($table) => { cy.get('.plot-container').should('have.length.at.least', 1); }) }); @@ -238,147 +225,135 @@ describe('Viewing application', () => { it('Saves time range for each application', () => { moveToCreatePage(); cy.get('[data-test-subj="nameFormRow"]').type(nameTwo); - cy.get('.euiAccordion').contains('Log source').trigger('mouseover').click(); + cy.get('[data-test-subj="logSourceAccordion"]').trigger('mouseover').click(); cy.get('[data-test-subj="searchAutocompleteTextArea"]').focus().type(baseQuery, {delay: TYPING_DELAY}); - cy.get('.euiButton').contains('Create').should('not.be.disabled'); - cy.get('.euiButton').contains('Create').click(); - cy.wait(delay); - cy.get('.euiTitle').contains(nameTwo).should('exist'); + cy.get('[data-test-subj="createButton"]').should('not.be.disabled'); + cy.get('[data-test-subj="createButton"]').click(); + cy.get('[data-test-subj="applicationTitle"]').should('contain', nameTwo); changeTimeTo24('weeks'); cy.get('[data-test-subj="superDatePickerShowDatesButton"]').should('contain', 'Last 24 weeks'); - cy.get('.euiBreadcrumb').contains('Application analytics').click(); + cy.get('.euiBreadcrumb[href="#/application_analytics"]').click(); cy.wait(delay); cy.get('.euiLink').contains(nameOne).click(); - cy.wait(delay); - cy.get('.euiTitle').contains(nameOne).should('exist'); + cy.get('[data-test-subj="applicationTitle"]').should('contain', nameOne); cy.get('[data-test-subj="superDatePickerShowDatesButton"]').should('contain', 'Last 24 months'); - cy.get('.euiBreadcrumb').contains('Application analytics').click(); - cy.wait(delay); + cy.get('.euiBreadcrumb[href="#/application_analytics"]').click(); cy.get('.euiLink').contains(nameTwo).click(); - cy.wait(delay); - cy.get('.euiTitle').contains(nameTwo).should('exist'); + cy.get('[data-test-subj="applicationTitle"]').should('contain', nameTwo); cy.get('[data-test-subj="superDatePickerShowDatesButton"]').should('contain', 'Last 24 weeks'); }); it('Adds filter when Trace group name is clicked', () => { moveToApplication(nameOne); - cy.get('.euiTab').contains('Overview').click(); - cy.wait(delay); + cy.get('[data-test-subj="app-analytics-overviewTab"]').click(); cy.get('.euiLink').contains('client_create_order').click(); cy.get('.euiTableRow').should('have.length', 1); - cy.get('.euiPopover').contains('traceGroup: client_create_order').should('exist'); - cy.get('[aria-label="Remove filter"]').click(); - cy.get('.euiPopover').contains('traceGroup: client_create_order').should('not.exist'); + cy.get('[data-test-subj="client_create_orderFilterBadge"]').should('exist'); + cy.get('[data-test-subj="filterBadge"]').click(); + cy.get('[data-test-subj="deleteFilterIcon"]').click(); + cy.get('[data-test-subj="client_create_orderFilterBadge"]').should('not.exist'); }); it('Opens service detail flyout when Service Name is clicked', () => { - cy.get('.euiTab').contains('Services').click(); + cy.get('[data-test-subj="app-analytics-serviceTab"]').click(); cy.wait(delay); cy.get('.euiLink').contains('authentication').click(); supressResizeObserverIssue(); - cy.wait(delay * 3); - cy.get('.euiFlyout').contains('Service detail').should('be.visible'); - cy.get('.euiFlyout').within(($flyout) => { - cy.get('.euiDescriptionList').contains('3.52').should('exist'); + cy.get('[data-test-subj="serviceDetailFlyoutTitle"]').should('be.visible'); + cy.get('[data-test-subj="serviceDetailFlyout"]').within(($flyout) => { + cy.get('[data-test-subj="Number of connected servicesDescriptionList"]').should('contain', '3'); cy.get('[data-text="Error rate"]').click(); cy.get('.ytitle').contains('Error rate').should('exist'); }); - cy.get('[data-test-subj="euiFlyoutCloseButton"]').click(); - cy.get('.euiFlyout').should('not.be.visible'); - cy.get('.euiLink').contains('authentication').click(); - supressResizeObserverIssue(); - cy.wait(delay * 3); - cy.get('.euiFlyout').contains('Service detail').scrollIntoView().should('be.visible'); cy.get('[data-test-subj="dataGridRowCell"] button').contains('718dc32a693c8a17').click(); - cy.get('.euiFlyout').contains('Span detail').should('be.visible'); + cy.get('[data-test-subj="spanDetailFlyout"]').contains('Span detail').should('be.visible'); + cy.get('[data-test-subj="ServiceDescriptionList"]').should('contain', 'authentication'); cy.get('[data-test-subj="euiFlyoutCloseButton"]').click(); - cy.get('.euiFlyout').should('not.be.visible'); + cy.get('[data-test-subj="serviceDetailFlyout"]').should('not.be.visible'); + cy.get('[data-test-subj="spanDetailFlyout"]').should('not.be.visible'); }); it('Opens trace detail flyout when Trace ID is clicked', () => { - cy.get('.euiTab').contains('Traces & Spans').click(); + cy.get('[data-test-subj="app-analytics-traceTab"]').click(); supressResizeObserverIssue(); cy.wait(delay); cy.get('[title="03f9c770db5ee2f1caac0afc36db49ba"]').click(); - cy.get('.euiFlyout').contains('Trace detail').should('be.visible'); - cy.get('.euiFlyout').within(($flyout) => { - cy.get('.euiDescriptionList').contains('224.99').should('exist'); + cy.get('[data-test-subj="traceDetailFlyoutTitle"]').should('be.visible'); + cy.get('[data-test-subj="traceDetailFlyout"]').within(($flyout) => { + cy.get('[data-test-subj="LatencyDescriptionList"]').should('contain', '224.99'); }); cy.get('[data-test-subj="euiFlyoutCloseButton"]').click(); cy.wait(delay); - cy.get('.euiFlyout').should('not.be.visible'); + cy.get('[data-test-subj="traceDetailFlyout"]').should('not.be.visible'); cy.get('[title="03f9c770db5ee2f1caac0afc36db49ba"]').click(); cy.get('[data-text="Span list"]').click(); cy.wait(delay); cy.get('[data-test-subj="dataGridRowCell"] button').contains('d67c5bb617ba9203').click(); - cy.get('.euiFlyout').contains('Span detail').should('be.visible'); + cy.get('[data-test-subj="spanDetailFlyout"]').should('be.visible'); cy.get('[data-test-subj="euiFlyoutCloseButton"]').click(); - cy.get('.euiFlyout').should('not.be.visible'); + cy.get('[data-test-subj="spanDetailFlyout"]').should('not.be.visible'); }); it('Opens span detail flyout when Span ID is clicked', () => { - cy.get('.euiTab').contains('Traces & Spans').click(); + cy.get('[data-test-subj="app-analytics-traceTab"]').click(); supressResizeObserverIssue(); cy.wait(delay); - cy.get('.euiLink').contains('5ff3516909562c60').click(); - cy.get('.euiFlyout').contains('Span detail').should('be.visible'); - cy.get('.euiFlyout').within(($flyout) => { - cy.get('.euiText').contains('HTTP GET').should('exist'); + cy.get('[data-test-subj="dataGridRowCell"]').contains('5ff3516909562c60').click(); + cy.get('[data-test-subj="spanDetailFlyout"]').should('be.visible'); + cy.get('[data-test-subj="spanDetailFlyout"]').within(($flyout) => { + cy.get('[data-test-subj="OperationDescriptionList"]').should('contain', 'HTTP GET'); }); cy.get('.euiText').contains('order').click(); cy.get('[aria-label="span-flyout-filter-icon"]').click(); cy.focused().blur(); cy.get('[data-test-subj="euiFlyoutCloseButton"]').click(); - cy.get('.euiPopover').contains('serviceName: order').should('exist'); + cy.get('[data-test-subj="filterBadge"][title="serviceName: order"]').should('exist'); cy.get('[aria-label="Remove filter"]').click(); - cy.get('.euiPopover').contains('serviceName: order').should('not.exist'); + cy.get('[data-test-subj="filterBadge"][title="serviceName: order"]').should('not.exist'); }); it('Shows base query', () => { - cy.get('.euiTab').contains('Log Events').click(); - cy.get('.euiBadge__text').contains('Base Query').should('exist'); + cy.get('[data-test-subj="app-analytics-logTab"]').click(); + cy.get('.euiBadge[title="Base Query"]').should('exist'); + cy.get('.euiBadge[title="Base Query"]').trigger('mouseover'); + cy.get('.euiToolTipPopover').contains('source = opensearch_dashboards_sample_data_flights').should('exist'); }); it('Saves visualization #1 to panel', () => { - cy.get('.euiTab').contains('Panel').click(); - cy.get('.euiButton').contains('Add').click(); + cy.get('[data-test-subj="app-analytics-panelTab"]').click(); + cy.get('[data-test-subj="addVisualizationButton"]').first().click(); cy.wait(delay); - cy.get('.plot-container').should('exist'); + cy.get('[id="explorerPlotComponent"]').should('exist'); cy.get('[data-test-subj="searchAutocompleteTextArea"]').click(); cy.get('.aa-List').find('.aa-Item').should('have.length', 11); - cy.get('[data-test-subj="searchAutocompleteTextArea"]').focus().type('x', {delay: TYPING_DELAY}); - cy.focused().clear(); - cy.get('[data-test-subj="searchAutocompleteTextArea"]').focus().type('where DestCityName = "Venice" | stats count() by span( timestamp , 6h )', {delay: TYPING_DELAY}); + cy.get('[data-test-subj="searchAutocompleteTextArea"]').focus().type(query_one, {delay: TYPING_DELAY}); changeTimeTo24('months'); cy.wait(delay * 2); - cy.get('.euiTab').contains('Visualizations').click(); + cy.get('[data-test-subj="main-content-visTab"]').click(); supressResizeObserverIssue(); cy.get('[data-test-subj="eventExplorer__saveManagementPopover"]').click(); cy.get('[data-test-subj="eventExplorer__querySaveName"]').click().type(visOneName); cy.wait(delay); cy.get('[data-test-subj="eventExplorer__querySaveConfirm"]').click(); + cy.get('[data-test-subj="app-analytics-panelTab"]').click(); cy.wait(delay); - cy.get('.euiTab').contains('Panel').click(); - cy.wait(delay); - cy.get('.js-plotly-plot').should('exist'); + cy.get('[data-test-subj="Flights to VeniceVisualizationPanel"]').should('exist'); + cy.get('[id="explorerPlotComponent"]').should('exist'); + cy.get('[class="trace bars"]').should('exist'); }); it('Adds availability level to visualization #1', () => { - cy.get('.euiTab').contains('Panel').click(); - cy.wait(delay); + cy.get('[data-test-subj="app-analytics-panelTab"]').click(); cy.get('[aria-label="actionMenuButton"]').click(); - cy.get('.euiContextMenuItem').contains('Edit').click(); + cy.get('[data-test-subj="editVizContextMenuItem"]').click(); supressResizeObserverIssue(); - cy.wait(delay); cy.get('[data-test-subj="superDatePickerShowDatesButton"]').should('contain', 'Last 24 months'); - cy.get('.euiBadge').contains('Bar').click(); + cy.get('[title="Bar"]').click(); cy.focused().type('{downArrow}'); cy.focused().type('{enter}'); - cy.wait(delay); - cy.get('.euiButton').contains('+ Add availability level').click(); + cy.get('[data-test-subj="addThresholdButton"]').click(); cy.get('[data-test-subj="euiColorPickerAnchor"]').click(); cy.get('[aria-label="Select #54B399 as the color"]').click(); - cy.wait(delay); cy.get('[data-test-subj="nameFieldText"]').click().type('Available'); cy.get('option').contains('≥').should('exist'); cy.get('option').contains('≤').should('exist'); @@ -389,39 +364,36 @@ describe('Viewing application', () => { cy.get('[data-test-subj="expressionSelect"]').select('>'); cy.get('[data-test-subj="valueFieldNumber"]').clear().type('0.5'); cy.get('[data-test-subj="visualizeEditorRenderButton"]').click(); - cy.wait(delay); cy.get('[data-test-subj="eventExplorer__saveManagementPopover"]').click(); cy.get('[data-test-subj="eventExplorer__querySaveConfirm"]').click(); - cy.wait(delay); - cy.get('.euiTab').contains('Panel').click(); - cy.wait(delay); - cy.get('.js-plotly-plot').should('exist'); + cy.get('[data-test-subj="app-analytics-panelTab"]').click(); + cy.get('[id="explorerPlotComponent"]').should('exist'); + cy.get('[class="lines"]').should('exist'); cy.get('.textpoint').contains('Available').should('exist'); - cy.get('.euiBreadcrumb').contains('Application analytics').click(); - cy.wait(delay); - cy.get('.euiBadge').contains('Available').should('exist'); - cy.get('[style="background-color: rgb(84, 179, 153); color: rgb(0, 0, 0);"]').should('exist'); + cy.get('.euiBreadcrumb[href="#/application_analytics"]').click(); + cy.get('[data-test-subj="AvailableAvailabilityBadge"]').should('contain', 'Available'); + cy.get('[data-test-subj="AvailableAvailabilityBadge"][style="background-color: rgb(84, 179, 153); color: rgb(0, 0, 0);"]').should('exist'); }); it('Saves visualization #2 to panel with availability level', () => { moveToApplication(nameOne); changeTimeTo24('months'); - cy.get('.euiTab').contains('Log Events').click(); + cy.get('[data-test-subj="app-analytics-logTab"]').click(); cy.wait(delay); - cy.get('.plot-container').should('exist'); + cy.get('[id="explorerPlotComponent"]').should('exist'); cy.get('[data-test-subj="searchAutocompleteTextArea"]').clear(); cy.get('[data-test-subj="searchAutocompleteTextArea"]').focus().type('x', {delay: TYPING_DELAY}); cy.focused().clear(); - cy.get('[data-test-subj="searchAutocompleteTextArea"]').focus().type('where DestCityName = "Venice" | stats count() by span( timestamp , 6h )', {delay: TYPING_DELAY}); - cy.get('.euiButton').contains('Refresh').click(); + cy.get('[data-test-subj="searchAutocompleteTextArea"]').focus().type(query_two, {delay: TYPING_DELAY}); + cy.get('[data-test-subj="superDatePickerApplyTimeButton"]').click(); cy.wait(delay); - cy.get('.euiTab').contains('Visualizations').click(); + cy.get('[data-test-subj="main-content-visTab"]').click(); supressResizeObserverIssue(); - cy.get('.euiBadge').contains('Bar').click(); + cy.get('[title="Bar"]').click(); cy.focused().type('{downArrow}'); cy.focused().type('{enter}'); cy.wait(delay); - cy.get('.euiButton').contains('+ Add availability level').click(); + cy.get('[data-test-subj="addThresholdButton"]').click(); cy.get('[data-test-subj="euiColorPickerAnchor"]').click(); cy.get('[aria-label="Select #9170B8 as the color"]').click(); cy.wait(delay); @@ -430,7 +402,7 @@ describe('Viewing application', () => { cy.get('[data-test-subj="valueFieldNumber"]').clear().type('5.5'); cy.get('[data-test-subj="visualizeEditorRenderButton"]').click(); cy.wait(delay); - cy.get('.euiButton').contains('+ Add availability level').click(); + cy.get('[data-test-subj="addThresholdButton"]').click(); cy.get('[data-test-subj="euiColorPickerAnchor"]').first().click(); cy.get('[aria-label="Select #CA8EAE as the color"]').click(); cy.wait(delay); @@ -444,20 +416,19 @@ describe('Viewing application', () => { cy.wait(delay); cy.get('[data-test-subj="eventExplorer__querySaveConfirm"]').click(); cy.wait(delay); - cy.get('.euiTab').contains('Panel').click(); + cy.get('[data-test-subj="app-analytics-panelTab"]').click(); cy.wait(delay); - cy.get('.js-plotly-plot').should('have.length', 2); + cy.get('[id="explorerPlotComponent"]').should('have.length', 2); moveToHomePage(); - cy.get('.euiBadge').contains('Super').should('exist'); - cy.get('[style="background-color: rgb(145, 112, 184); color: rgb(0, 0, 0);"]').should('exist'); + cy.get('[data-test-subj="SuperAvailabilityBadge"][style="background-color: rgb(145, 112, 184); color: rgb(0, 0, 0);"]').should('contain', 'Super'); }); it('Configuration tab shows details', () => { - cy.get('.euiLink').contains(nameOne).click(); + cy.get(`[data-test-subj="${nameOne}ApplicationLink"]`).click(); cy.wait(delay); - cy.get('.euiTab').contains('Configuration').click(); + cy.get('[data-test-subj="app-analytics-configTab"]').click(); cy.wait(delay); - cy.get('.euiCodeBlock__code').contains(baseQuery).should('exist'); + cy.get('[data-test-subj="configBaseQueryCode"]').should('contain', baseQuery); cy.get('[aria-label="List of services and entities"]').find('li').should('have.length', 1); cy.get('[aria-label="List of trace groups"]').find('li').should('have.length', 2); cy.get('option').should('have.length', 2); @@ -465,83 +436,78 @@ describe('Viewing application', () => { it('Changes availability visualization', () => { - cy.get('.euiTab').contains('Configuration').click(); + cy.get('[data-test-subj="app-analytics-configTab"]').click(); cy.wait(delay); cy.get('select').select(visOneName); cy.wait(delay); moveToHomePage(); - cy.get('.euiBadge').contains('Available').should('exist'); - cy.get('[style="background-color: rgb(84, 179, 153); color: rgb(0, 0, 0);"]').should('exist'); + cy.get('[data-test-subj="AvailableAvailabilityBadge"][style="background-color: rgb(84, 179, 153); color: rgb(0, 0, 0);"]').should('contain', 'Available'); moveToApplication(nameOne); - cy.get('.euiTab').contains('Configuration').click(); + cy.get('[data-test-subj="app-analytics-configTab"]').click(); cy.wait(delay); cy.get('select').find('option:selected').should('have.text', visOneName); }) it('Hides application visualizations in Event Analytics', () => { cy.visit(`${Cypress.env('opensearchDashboards')}/app/observability-dashboards#/event_analytics`); - cy.wait(delay*3); - if (cy.get('.euiFieldSearch').length > 1) { - cy.get('input.euiFieldSearch').type(visOneName, {delay: TYPING_DELAY}); - cy.wait(delay); - cy.get('.euiTableCellContent__text').contains('No items found').should('exist'); - cy.get('input.euiFieldSearch').clear().type(visTwoName, {delay: TYPING_DELAY}); - cy.wait(delay); - cy.get('.euiTableCellContent__text').contains('No items found').should('exist'); - cy.get('.euiFormControlLayoutClearButton').click(); - cy.wait(delay); - cy.get('[data-test-subj="tablePaginationPopoverButton"]').click(); - cy.get('.euiContextMenuItem__text').contains('50 rows').click(); - cy.get('.euiCheckbox__input[data-test-subj="checkboxSelectAll"]').click(); - cy.wait(delay); - cy.get('.euiButton__text').contains('Actions').click(); - cy.wait(delay); - cy.get('.euiContextMenuItem__text').contains('Delete').click(); - cy.wait(delay); - - cy.get('button.euiButton--danger').should('be.disabled'); - - cy.get('input.euiFieldText[placeholder="delete"]').type('delete'); - cy.get('button.euiButton--danger').should('not.be.disabled'); - cy.get('.euiButton__text').contains('Delete').click(); - cy.wait(delay); - } + cy.wait(delay * 3); + // When there are saved queries or visualizations there are two buttons + cy.get('body').then(($body) => { + if ($body.find('.euiButton').length == 2) { + cy.get('input.euiFieldSearch').type(visOneName, {delay: TYPING_DELAY}); + cy.wait(delay); + cy.get('.euiTableCellContent__text').contains('No items found').should('exist'); + cy.get('input.euiFieldSearch').clear().type(visTwoName, {delay: TYPING_DELAY}); + cy.wait(delay); + cy.get('.euiTableCellContent__text').contains('No items found').should('exist'); + cy.get('[class="euiFormControlLayoutClearButton"]').click(); + cy.wait(delay); + cy.get('[data-test-subj="tablePaginationPopoverButton"]').click(); + cy.get('.euiContextMenuItem__text').contains('50 rows').click(); + cy.get('.euiCheckbox__input[data-test-subj="checkboxSelectAll"]').click(); + cy.wait(delay); + cy.get('[data-test-subj="eventHomeAction"]').click(); + cy.wait(delay); + cy.get('[data-test-subj="eventHomeAction__delete"]').click(); + cy.wait(delay); + cy.get('[data-test-subj="popoverModal__deleteButton"]').should('be.disabled'); + cy.get('[data-test-subj="popoverModal__deleteTextInput"]').type('delete'); + cy.get('[data-test-subj="popoverModal__deleteButton"]').should('not.be.disabled'); + cy.get('[data-test-subj="popoverModal__deleteButton"]').click(); + cy.wait(delay); + } + }) }); it('Hides application visualizations in Operational Panels', () => { cy.visit( `${Cypress.env('opensearchDashboards')}/app/observability-dashboards#/operational_panels/` ); - cy.wait(delay*3); - cy.get('.euiButton__text').contains('Actions').click(); + cy.get('[data-test-subj="operationalPanelsActionsButton"]').click(); cy.wait(delay); - cy.get('.euiContextMenuItem__text').contains('Add samples').click(); + cy.get('[data-test-subj="addSampleContextMenuItem"]').click(); cy.wait(delay); - cy.get('.euiButton__text').contains('Yes').click(); - cy.wait(delay*2); + cy.get('[data-test-subj="confirmModalConfirmButton"]').click(); + cy.wait(delay * 2); cy.get('.euiLink').contains('[Logs] Web traffic Panel').first().click(); cy.wait(delay); - cy.get('.euiButton__text').contains('Add visualization').click(); + cy.get('[data-test-subj="addVisualizationButton"]').click(); cy.get('.euiContextMenuItem__text').contains('Select existing visualization').click(); cy.get('option').contains(visOneName).should('not.exist'); cy.get('option').contains(visTwoName).should('not.exist'); cy.visit( `${Cypress.env('opensearchDashboards')}/app/observability-dashboards#/operational_panels/` ); - cy.wait(delay*3); - cy.get('input.euiFieldSearch').type('[Logs] Web traffic Panel', {delay: TYPING_DELAY}); + cy.get('[data-test-subj="operationalPanelSearchBar"]').type('[Logs] Web traffic Panel', {delay: TYPING_DELAY}); cy.wait(delay); cy.get('.euiTableRow').first().within(($row) => { cy.get('.euiCheckbox').click(); }); - cy.get('.euiButton__text').contains('Actions').click(); - cy.wait(delay); - cy.get('.euiContextMenuItem__text').contains('Delete').click(); - cy.wait(delay); - cy.get('input.euiFieldText[placeholder="delete"]').type('delete'); - cy.get('button.euiButton--danger').should('not.be.disabled'); - cy.get('.euiButton__text').contains('Delete').click(); - cy.wait(delay); + cy.get('[data-test-subj="operationalPanelsActionsButton"]').click(); + cy.get('[data-test-subj="deleteContextMenuItem"]').click(); + cy.get('[data-test-subj="popoverModal__deleteTextInput"]').type('delete'); + cy.get('[data-test-subj="popoverModal__deleteButton"]').should('not.be.disabled'); + cy.get('[data-test-subj="popoverModal__deleteButton"]').click(); }); }); @@ -551,25 +517,23 @@ describe('Editing application', () => { }); it('Redirects to application after saving changes', () => { - cy.get('.euiAccordion').contains('Log source').click(); + cy.get('[data-test-subj="logSourceAccordion"]').trigger('mouseover').click(); cy.get('[data-test-subj="searchAutocompleteTextArea"]').should('be.disabled'); - cy.get('.euiAccordion').contains('Trace groups').click(); - cy.get('[data-test-subj="comboBoxToggleListButton"]').filter(':visible').click(); - cy.get('.euiFilterSelectItem').contains(trace_three).trigger('click'); - cy.get('.euiBadge').contains('3').should('exist'); - cy.get('.euiAccordion').contains('Trace groups').click(); - cy.get('.euiAccordion').contains('Services & entities').click(); + cy.get('[data-test-subj="servicesEntitiesAccordion"]').trigger('mouseover').click(); cy.get('[data-test-subj="servicesEntitiesComboBox"]').click(); - cy.get('.euiFilterSelectItem').contains(service_two).trigger('click'); - cy.get('.euiBadge').contains('2').should('exist'); - cy.get('.euiButton').contains('Save').click(); - cy.wait(delay); - cy.get('.euiTab').contains('Configuration').click(); - cy.wait(delay); - cy.get('.euiCodeBlock__code').contains(baseQuery).should('exist'); + cy.get('.euiFilterSelectItem').contains(service_two).click(); + cy.get('[data-test-subj="servicesEntitiesCountBadge"]').should('contain', '2'); + cy.get('[data-test-subj="traceGroupsAccordion"]').trigger('mouseover').click(); + cy.get('[data-test-subj="comboBoxToggleListButton"]').eq(1).click(); + cy.get('.euiFilterSelectItem').contains(trace_three).trigger('click'); + cy.get('[data-test-subj="traceGroupsCountBadge"]').should('contain', '3'); + cy.get('[data-test-subj="traceGroupsAccordion"]').trigger('mouseover').click(); + cy.get('[data-test-subj="createButton"]').click(); + cy.get('[data-test-subj="app-analytics-configTab"]').click(); + cy.get('[data-test-subj="configBaseQueryCode"]').should('contain', baseQuery); cy.get('[aria-label="List of services and entities"]').find('li').should('have.length', 2); cy.get('[aria-label="List of trace groups"]').find('li').should('have.length', 3); - cy.get('.euiTitle').contains(nameOne).should('exist'); + cy.get('[data-test-subj="applicationTitle"]').should('contain', nameOne); }); }); @@ -579,24 +543,22 @@ describe('Application Analytics home page', () => { }) it('Show correct information in table', () => { - cy.get('.euiLink').contains(nameOne).should('exist'); - cy.get('[data-test-subj="appAnalytics__compositionColumn"]').contains(composition).should('exist'); - cy.get('.euiBadge').contains('Available').should('exist'); - cy.get('[style="background-color: rgb(84, 179, 153); color: rgb(0, 0, 0);"]').should('exist'); + cy.get(`[data-test-subj="${nameOne}ApplicationLink"]`).should('exist'); + cy.get('[data-test-subj="appAnalytics__compositionColumn"]').should('contain', composition); + cy.get('[data-test-subj="AvailableAvailabilityBadge"][style="background-color: rgb(84, 179, 153); color: rgb(0, 0, 0);"]').should('contain', 'Available') }); it('Renames application', () => { - cy.get('.euiPopover').contains('Actions').click(); - cy.wait(delay); - cy.get('.euiContextMenuItem-isDisabled').contains('Rename').should('exist'); + cy.get('[data-test-subj="appAnalyticsActionsButton"]').click(); + cy.get('[data-test-subj="renameApplicationContextMenuItem"]').should('be.disabled'); + cy.get('[data-test-subj="appAnalyticsActionsButton"]').click(); cy.get('.euiTableRow').first().within(($row) => { cy.get('.euiCheckbox').click(); }); - cy.wait(delay); - cy.get('.euiPopover').contains('Actions').click(); - cy.get('.euiContextMenuItem').contains('Rename').click(); - cy.get('.euiFieldText').clear().focus().type(newName); - cy.get('.euiButton--fill').contains('Rename').click(); + cy.get('[data-test-subj="appAnalyticsActionsButton"]').click(); + cy.get('[data-test-subj="renameApplicationContextMenuItem"]').click(); + cy.get('[data-test-subj="customModalFieldText"]').clear().focus().type(newName); + cy.get('[data-test-subj="runModalButton"]').click(); cy.wait(delay); cy.get('.euiToast').contains(`Application successfully renamed to "${newName}"`); cy.get('.euiTableRow').first().within(($row) => { @@ -605,21 +567,20 @@ describe('Application Analytics home page', () => { }); it('Deletes application', () => { - cy.get('.euiPopover').contains('Actions').click(); - cy.get('.euiContextMenuItem-isDisabled').contains('Delete').should('exist'); - cy.get('.euiTableRow').eq(0).within(($row) => { + cy.get('[data-test-subj="appAnalyticsActionsButton"]').click(); + cy.get('[data-test-subj="deleteApplicationContextMenuItem"]').should('exist'); + cy.get('[data-test-subj="appAnalyticsActionsButton"]').click(); + cy.get('.euiTableRow').first().within(($row) => { cy.get('.euiCheckbox').click(); }); cy.get('.euiTableRow').eq(1).within(($row) => { cy.get('.euiCheckbox').click(); }); - cy.wait(delay); - cy.get('.euiPopover').contains('Actions').click(); - cy.wait(delay); - cy.get('.euiContextMenuItem').contains('Delete').click(); - cy.get('.euiButton--fill').contains('Delete').click(); + cy.get('[data-test-subj="appAnalyticsActionsButton"]').click(); + cy.get('[data-test-subj="deleteApplicationContextMenuItem"]').click(); + cy.get('[data-test-subj="confirmModalConfirmButton"]').click(); cy.wait(delay); cy.get('.euiToast').contains(`Applications successfully deleted!`); - cy.get('.euiLink').contains(newName).should('not.exist'); + cy.get(`[data-test-subj="${newName}ApplicationLink"]`).should('not.exist'); }); }); diff --git a/dashboards-observability/.cypress/utils/app_constants.js b/dashboards-observability/.cypress/utils/app_constants.js index bc3b7e856..b9a0ea823 100644 --- a/dashboards-observability/.cypress/utils/app_constants.js +++ b/dashboards-observability/.cypress/utils/app_constants.js @@ -17,30 +17,28 @@ export const moveToHomePage = () => { export const moveToCreatePage = () => { cy.visit(`${Cypress.env('opensearchDashboards')}/app/observability-dashboards#/application_analytics/`); - cy.wait(delay * 2); - cy.get('.euiButton__text').contains('Create application').click(); + cy.get('.euiButton[href="#/application_analytics/create"]').eq(0).click(); supressResizeObserverIssue(); - cy.wait(delay); - cy.get('.euiTitle').contains('Create application').should('exist'); + cy.get('[data-test-subj="createPageTitle"]').should('contain', 'Create application'); }; export const moveToApplication = (name) => { cy.visit(`${Cypress.env('opensearchDashboards')}/app/observability-dashboards#/application_analytics/`); supressResizeObserverIssue(); cy.wait(delay * 6); - cy.get('.euiLink').contains(name).click(); + cy.get(`[data-test-subj="${name}ApplicationLink"]`).click(); cy.wait(delay); - cy.get('.euiTitle').contains(name).should('exist'); + cy.get('[data-test-subj="applicationTitle"]').should('contain', name); changeTimeTo24('years'); }; export const moveToEditPage = () => { moveToApplication(nameOne); - cy.get('.euiTab').contains('Configuration').click(); - cy.get('.euiButton').contains('Edit').click(); + cy.get('[data-test-subj="app-analytics-configTab"]').click(); + cy.get('[data-test-subj="editApplicationButton"]').click(); supressResizeObserverIssue(); cy.wait(delay); - cy.get('.euiTitle').contains('Edit application'); + cy.get('[data-test-subj="createPageTitle"]').should('contain', 'Edit application'); }; export const changeTimeTo24 = (timeUnit) => { diff --git a/dashboards-observability/common/constants/application_analytics.ts b/dashboards-observability/common/constants/application_analytics.ts index dc24b495b..df675a704 100644 --- a/dashboards-observability/common/constants/application_analytics.ts +++ b/dashboards-observability/common/constants/application_analytics.ts @@ -3,12 +3,12 @@ * SPDX-License-Identifier: Apache-2.0 */ -export const TAB_OVERVIEW_ID_TXT_PFX = 'app-analytics-overview-'; -export const TAB_SERVICE_ID_TXT_PFX = 'app-analytics-service-'; -export const TAB_TRACE_ID_TXT_PFX = 'app-analytics-trace-'; -export const TAB_LOG_ID_TXT_PFX = 'app-analytics-log-'; -export const TAB_PANEL_ID_TXT_PFX = 'app-analytics-panel-'; -export const TAB_CONFIG_ID_TXT_PFX = 'app-analytics-config-'; +export const TAB_OVERVIEW_ID = 'app-analytics-overview'; +export const TAB_SERVICE_ID = 'app-analytics-service'; +export const TAB_TRACE_ID = 'app-analytics-trace'; +export const TAB_LOG_ID = 'app-analytics-log'; +export const TAB_PANEL_ID = 'app-analytics-panel'; +export const TAB_CONFIG_ID = 'app-analytics-config'; export const TAB_OVERVIEW_TITLE = 'Overview'; export const TAB_SERVICE_TITLE = 'Services'; export const TAB_TRACE_TITLE = 'Traces & Spans'; diff --git a/dashboards-observability/public/components/application_analytics/__tests__/__snapshots__/create.test.tsx.snap b/dashboards-observability/public/components/application_analytics/__tests__/__snapshots__/create.test.tsx.snap index c93d4518e..c8710d638 100644 --- a/dashboards-observability/public/components/application_analytics/__tests__/__snapshots__/create.test.tsx.snap +++ b/dashboards-observability/public/components/application_analytics/__tests__/__snapshots__/create.test.tsx.snap @@ -27,6 +27,7 @@ Object { >

Create application @@ -156,6 +157,7 @@ Object {
+
+ + + +
@@ -2325,7 +2349,7 @@ Object { class="euiToolTipAnchor" > + + @@ -3527,7 +3575,7 @@ Object { class="euiToolTipAnchor" > + + @@ -4670,7 +4742,7 @@ Object { class="euiToolTipAnchor" > + + @@ -5872,7 +5968,7 @@ Object { class="euiToolTipAnchor" > + + @@ -7015,7 +7135,7 @@ Object { class="euiToolTipAnchor" > + + @@ -8152,7 +8296,7 @@ Object { class="euiToolTipAnchor" > + + @@ -9232,7 +9400,7 @@ Object { class="euiToolTipAnchor" > + + @@ -10400,7 +10592,7 @@ Object { class="euiToolTipAnchor" > +
+ + + +
@@ -11510,7 +11725,7 @@ Object { class="euiToolTipAnchor" > +
+ + + +
@@ -12711,7 +12949,7 @@ Object { class="euiToolTipAnchor" > + + @@ -13854,7 +14116,7 @@ Object { class="euiToolTipAnchor" > + + @@ -15056,7 +15342,7 @@ Object { class="euiToolTipAnchor" > + + @@ -16199,7 +16509,7 @@ Object { class="euiToolTipAnchor" > + + @@ -17371,7 +17705,7 @@ Object { class="euiToolTipAnchor" > + + @@ -18596,7 +18954,7 @@ Object { class="euiToolTipAnchor" > + + diff --git a/dashboards-observability/public/components/application_analytics/components/app_table.tsx b/dashboards-observability/public/components/application_analytics/components/app_table.tsx index 5f6b33b37..27611aa76 100644 --- a/dashboards-observability/public/components/application_analytics/components/app_table.tsx +++ b/dashboards-observability/public/components/application_analytics/components/app_table.tsx @@ -39,6 +39,7 @@ import { getCustomModal } from '../../custom_panels/helpers/modal_containers'; import { getClearModal } from '../helpers/modal_containers'; import { pageStyles, UI_DATE_FORMAT } from '../../../../common/constants/shared'; import { ApplicationListType } from '../../../../common/types/app_analytics'; +import { AvailabilityType } from '../helpers/types'; interface AppTableProps extends AppAnalyticsComponentDeps { loading: boolean; @@ -47,6 +48,7 @@ interface AppTableProps extends AppAnalyticsComponentDeps { renameApplication: (newAppName: string, appId: string) => void; deleteApplication: (appList: string[], panelIdList: string[], toastMessage?: string) => void; clearStorage: () => void; + moveToApp: (id: string, type: string) => void; } export function AppTable(props: AppTableProps) { @@ -59,6 +61,7 @@ export function AppTable(props: AppTableProps) { deleteApplication, setFilters, clearStorage, + moveToApp, } = props; const [isModalVisible, setIsModalVisible] = useState(false); const [isActionsPopoverOpen, setIsActionsPopoverOpen] = useState(false); @@ -179,6 +182,34 @@ export function AppTable(props: AppTableProps) { // Add sample application, ]; + const renderAvailability = (value: AvailabilityType, record: ApplicationListType) => { + if (value.color === 'loading') { + return ; + } else if (value.name) { + return ( + + {value.name} + + ); + } else if (value.color === 'undefined') { + return No match; + } else if (value.color === 'null') { + return -; + } else { + return ( + moveToApp(record.id, 'createSetAvailability')} + > + Set Availability + + ); + } + }; + const tableColumns = [ { field: 'name', @@ -211,22 +242,7 @@ export function AppTable(props: AppTableProps) { field: 'availability', name: 'Current Availability', sortable: true, - render: (value, record) => { - if (value.name === 'loading') { - return ; - } else if (value.name) { - return ( - - {value.name} - - ); - } else { - return Undefined; - } - }, + render: renderAvailability, }, { field: 'dateModified', diff --git a/dashboards-observability/public/components/application_analytics/components/application.tsx b/dashboards-observability/public/components/application_analytics/components/application.tsx index a5d3c26d5..fb55a6ced 100644 --- a/dashboards-observability/public/components/application_analytics/components/application.tsx +++ b/dashboards-observability/public/components/application_analytics/components/application.tsx @@ -24,10 +24,10 @@ import PPLService from 'public/services/requests/ppl'; import SavedObjects from 'public/services/saved_objects/event_analytics/saved_objects'; import TimestampUtils from 'public/services/timestamp/timestamp'; import React, { ReactChild, useEffect, useState } from 'react'; -import { uniqueId } from 'lodash'; import { useHistory } from 'react-router-dom'; import { useDispatch } from 'react-redux'; import { last } from 'lodash'; +import { VisualizationType } from 'common/types/custom_panels'; import { TracesContent } from '../../../components/trace_analytics/components/traces/traces_content'; import { DashboardContent } from '../../../components/trace_analytics/components/dashboard/dashboard_content'; import { ServicesContent } from '../../trace_analytics/components/services/services_content'; @@ -75,14 +75,6 @@ const searchBarConfigs = { }, }; -export interface DetailTab { - id: string; - label: string; - description: string; - onClick: () => void; - testId: string; -} - interface AppDetailProps extends AppAnalyticsComponentDeps { disabled?: boolean; appId: string; @@ -93,6 +85,7 @@ interface AppDetailProps extends AppAnalyticsComponentDeps { notifications: NotificationsStart; updateApp: (appId: string, updateAppData: Partial, type: string) => void; setToasts: (title: string, color?: string, text?: ReactChild) => void; + callback: (childfunction: () => void) => void; } export function Application(props: AppDetailProps) { @@ -113,6 +106,7 @@ export function Application(props: AppDetailProps) { setAppConfigs, setToasts, setFilters, + callback, } = props; const [application, setApplication] = useState({ name: '', @@ -124,6 +118,7 @@ export function Application(props: AppDetailProps) { availabilityVisId: '', }); const dispatch = useDispatch(); + const [triggerAvailability, setTriggerAvailability] = useState(false); const [selectedTabId, setSelectedTab] = useState(TAB_OVERVIEW_ID); const [serviceFlyoutName, setServiceFlyoutName] = useState(''); const [traceFlyoutId, setTraceFlyoutId] = useState(''); @@ -206,6 +201,7 @@ export function Application(props: AppDetailProps) { ); const tabId = `application-analytics-tab-${appId}`; initializeTabData(dispatch, tabId, NEW_TAB); + callback(switchToEvent); }, [appId]); useEffect(() => { @@ -373,6 +369,8 @@ export function Application(props: AppDetailProps) { setStartTime={setStartTimeForApp} setEndTime={setEndTimeForApp} appBaseQuery={application.baseQuery} + callback={callback} + callbackInApp={callbackInApp} curSelectedTabId={selectedTabId} /> ); @@ -382,6 +380,12 @@ export function Application(props: AppDetailProps) { switchToEditViz(savedVisualizationId); }; + const updateAvailabilityVizId = (vizs: VisualizationType[]) => { + if (!vizs.map((viz) => viz.savedVisualizationId).includes(application.availabilityVisId)) { + updateApp(appId, { availabilityVisId: '' }, 'editAvailability'); + } + }; + const getPanel = () => { return ( { + switchToEvent(); + setTriggerAvailability(true); + }; + + const callbackInApp = (childFunc: () => void) => { + if (childFunc && triggerAvailability) { + childFunc(); + setTriggerAvailability(false); + } + }; + const getConfig = () => { return ( diff --git a/dashboards-observability/public/components/application_analytics/components/configuration.tsx b/dashboards-observability/public/components/application_analytics/components/configuration.tsx index c155b115f..c8c4ce2cb 100644 --- a/dashboards-observability/public/components/application_analytics/components/configuration.tsx +++ b/dashboards-observability/public/components/application_analytics/components/configuration.tsx @@ -11,6 +11,7 @@ import { EuiFlexGroup, EuiFlexItem, EuiHorizontalRule, + EuiLink, EuiPage, EuiPageBody, EuiPageContent, @@ -25,14 +26,14 @@ import { } from '@elastic/eui'; import { ApplicationType } from 'common/types/app_analytics'; import { last } from 'lodash'; -import React, { useEffect, useState } from 'react'; +import React, { useState } from 'react'; interface ConfigProps { appId: string; application: ApplicationType; parentBreadcrumbs: EuiBreadcrumb[]; visWithAvailability: EuiSelectOption[]; - switchToEditViz: (savedVizId: string) => void; + switchToAvailability: () => void; updateApp: (appId: string, updateAppData: Partial, type: string) => void; } @@ -43,12 +44,9 @@ export const Configuration = (props: ConfigProps) => { parentBreadcrumbs, visWithAvailability, updateApp, - switchToEditViz, + switchToAvailability, } = props; const [availabilityVisId, setAvailabilityVisId] = useState(application.availabilityVisId || ''); - useEffect(() => { - switchToEditViz(''); - }, []); const onAvailabilityVisChange = (event: any) => { setAvailabilityVisId(event.target.value); @@ -127,11 +125,20 @@ export const Configuration = (props: ConfigProps) => {

Availability

- + {visWithAvailability.length > 0 ? ( + + ) : ( + switchToAvailability()} + > + Set Availability + + )} diff --git a/dashboards-observability/public/components/application_analytics/components/create.tsx b/dashboards-observability/public/components/application_analytics/components/create.tsx index e247878de..390aa3612 100644 --- a/dashboards-observability/public/components/application_analytics/components/create.tsx +++ b/dashboards-observability/public/components/application_analytics/components/create.tsx @@ -39,7 +39,7 @@ interface CreateAppProps extends AppAnalyticsComponentDeps { dslService: DSLService; pplService: PPLService; setToasts: (title: string, color?: string, text?: ReactChild) => void; - createApp: (app: ApplicationType) => void; + createApp: (app: ApplicationType, type: string) => void; updateApp: (appId: string, updateAppData: Partial, type: string) => void; clearStorage: () => void; existingAppId: string; @@ -126,19 +126,21 @@ export const CreateApp = (props: CreateAppProps) => { const isDisabled = !name || (!query && !selectedTraces.length && !selectedServices.length); - const missingField = () => { - if (isDisabled) { - let popoverContent = ''; + const missingField = (needLog: boolean) => { + let popoverContent = ''; + if (isDisabled || (needLog && !query)) { if (!name) { popoverContent = 'Name is required.'; } else if (!query && !selectedServices.length && !selectedTraces.length) { popoverContent = 'Provide at least one log source, service, entity or trace group.'; + } else if (needLog && !query) { + popoverContent = 'Log source is required to set availability.'; } return

{popoverContent}

; } }; - const onCreate = () => { + const onCreate = (type: string) => { const appData = { name, description, @@ -148,7 +150,7 @@ export const CreateApp = (props: CreateAppProps) => { panelId: '', availabilityVisId: '', }; - createApp(appData); + createApp(appData, type); }; const onUpdate = () => { @@ -235,17 +237,31 @@ export const CreateApp = (props: CreateAppProps) => { - + onCreate('create')} + fill={editMode ? true : false} > {editMode ? 'Save' : 'Create'} + {editMode || ( + + + onCreate('createSetAvailability')} + > + Create and Set Availability + + + + )} diff --git a/dashboards-observability/public/components/application_analytics/helpers/types.tsx b/dashboards-observability/public/components/application_analytics/helpers/types.tsx new file mode 100644 index 000000000..07ac03c9d --- /dev/null +++ b/dashboards-observability/public/components/application_analytics/helpers/types.tsx @@ -0,0 +1,10 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +export interface AvailabilityType { + name: string; + color: string; + mainVisId: string; +} diff --git a/dashboards-observability/public/components/application_analytics/helpers/utils.tsx b/dashboards-observability/public/components/application_analytics/helpers/utils.tsx index 970957418..d956fb06b 100644 --- a/dashboards-observability/public/components/application_analytics/helpers/utils.tsx +++ b/dashboards-observability/public/components/application_analytics/helpers/utils.tsx @@ -18,7 +18,10 @@ import { VisualizationType } from '../../../../common/types/custom_panels'; import { NEW_SELECTED_QUERY_TAB, TAB_CREATED_TYPE } from '../../../../common/constants/explorer'; import { APP_ANALYTICS_API_PREFIX } from '../../../../common/constants/application_analytics'; import { HttpSetup } from '../../../../../../src/core/public'; -import { init as initFields, remove as removefields } from '../../event_analytics/redux/slices/field_slice'; +import { + init as initFields, + remove as removefields, +} from '../../event_analytics/redux/slices/field_slice'; import { init as initVisualizationConfig, reset as resetVisualizationConfig, @@ -33,6 +36,7 @@ import { remove as removeQueryResult, } from '../../event_analytics/redux/slices/query_result_slice'; import { addTab, removeTab } from '../../event_analytics/redux/slices/query_tab_slice'; +import { AvailabilityType } from './types'; // Name validation export const isNameValid = (name: string, existingNames: string[]) => { @@ -193,7 +197,7 @@ export const calculateAvailability = async ( application: ApplicationType | ApplicationListType, availabilityVisId: string, setVisWithAvailability: (visList: EuiSelectOption[]) => void -): Promise<{ name: string; color: string; mainVisId: string }> => { +): Promise => { let availability = { name: '', color: '', mainVisId: '' }; const panelId = application.panelId; if (!panelId) return availability; @@ -204,15 +208,18 @@ export const calculateAvailability = async ( const visWithAvailability = []; let availabilityFound = false; for (let i = 0; i < savedVisualizationsIds.length; i++) { - let hasAvailability = false; const visualizationId = savedVisualizationsIds[i]; // Fetches data for visualization const visData = await fetchVisualizationById(http, visualizationId, (value: string) => console.error(value) ); - // If there are thresholds, we get the current value - if (visData.user_configs.dataConfig?.hasOwnProperty('thresholds')) { - const thresholds = visData.user_configs.dataConfig.thresholds.reverse(); + // If there are levels, we get the current value + if (visData.user_configs.availabilityConfig?.hasOwnProperty('level')) { + // For every saved visualization with availability levels we push it to visWithAvailability + // This is used to populate the options in configuration + visWithAvailability.push({ value: visualizationId, text: visData.name }); + + const levels = visData.user_configs.availabilityConfig.level.reverse(); let currValue = Number.MIN_VALUE; const finalQuery = preprocessQuery({ rawQuery: visData.query, @@ -236,72 +243,76 @@ export const calculateAvailability = async ( .catch((err) => { console.error(err); }); - // We check each threshold if it has expression which means it is an availability level - for (let j = 0; j < thresholds.length; j++) { - const threshold = thresholds[j]; - if (threshold.hasOwnProperty('expression')) { - hasAvailability = true; - // If there is an availiabilityVisId selected we only want to compute availability based on that - if (availabilityVisId ? availabilityVisId === visualizationId : true) { - if (threshold.value !== null) { - if (!availabilityFound && threshold.expression) { - const expression = threshold.expression; + for (let j = 0; j < levels.length; j++) { + const level = levels[j]; + // If there is an availiabilityVisId selected we only want to compute availability based on that + if (availabilityVisId ? availabilityVisId === visualizationId : true) { + if (level.value !== null) { + if (currValue === null) { + availability = { + name: '', + color: 'null', + mainVisId: '', + }; + } else { + if (!availabilityFound) { + const expression = level.expression; switch (expression) { case '≥': - if (currValue >= parseFloat(threshold.value)) { + if (currValue >= parseFloat(level.value)) { availability = { - name: threshold.name, - color: threshold.color, + name: level.name, + color: level.color, mainVisId: visualizationId, }; availabilityFound = true; } break; case '≤': - if (currValue <= parseFloat(threshold.value)) { + if (currValue <= parseFloat(level.value)) { availability = { - name: threshold.name, - color: threshold.color, + name: level.name, + color: level.color, mainVisId: visualizationId, }; availabilityFound = true; } break; case '>': - if (currValue > parseFloat(threshold.value)) { + if (currValue > parseFloat(level.value)) { availability = { - name: threshold.name, - color: threshold.color, + name: level.name, + color: level.color, mainVisId: visualizationId, }; availabilityFound = true; } break; case '<': - if (currValue < parseFloat(threshold.value)) { + if (currValue < parseFloat(level.value)) { availability = { - name: threshold.name, - color: threshold.color, + name: level.name, + color: level.color, mainVisId: visualizationId, }; availabilityFound = true; } break; case '=': - if (currValue === parseFloat(threshold.value)) { + if (currValue === parseFloat(level.value)) { availability = { - name: threshold.name, - color: threshold.color, + name: level.name, + color: level.color, mainVisId: visualizationId, }; availabilityFound = true; } break; case '≠': - if (currValue !== parseFloat(threshold.value)) { + if (currValue !== parseFloat(level.value)) { availability = { - name: threshold.name, - color: threshold.color, + name: level.name, + color: level.color, mainVisId: visualizationId, }; availabilityFound = true; @@ -314,12 +325,10 @@ export const calculateAvailability = async ( } } } - // For every saved visualization with availability levels we push it to visWithAvailability - if (hasAvailability) { - // This is used to populate the options in configuration - visWithAvailability.push({ value: visualizationId, text: visData.name }); - } } setVisWithAvailability(visWithAvailability); + if (!availabilityFound && visWithAvailability.length > 0) { + return { name: '', color: 'undefined', mainVisId: '' }; + } return availability; }; diff --git a/dashboards-observability/public/components/application_analytics/home.tsx b/dashboards-observability/public/components/application_analytics/home.tsx index d3074da8b..1d837d437 100644 --- a/dashboards-observability/public/components/application_analytics/home.tsx +++ b/dashboards-observability/public/components/application_analytics/home.tsx @@ -67,6 +67,7 @@ export const Home = (props: HomeProps) => { chrome, notifications, } = props; + const [triggerSwitchToEvent, setTriggerSwitchToEvent] = useState(0); const dispatch = useDispatch(); const [applicationList, setApplicationList] = useState([]); const [toasts, setToasts] = useState([]); @@ -145,7 +146,14 @@ export const Home = (props: HomeProps) => { setQueryWithStorage(''); }; - const createPanelForApp = (applicationId: string, appName: string) => { + const moveToApp = (id: string, type: string) => { + window.location.assign(`${last(parentBreadcrumbs)!.href}application_analytics/${id}`); + if (type === 'createSetAvailability') { + setTriggerSwitchToEvent(2); + } + }; + + const createPanelForApp = (applicationId: string, appName: string, type: string) => { return http .post(`${CUSTOM_PANELS_API_PREFIX}/panels`, { body: JSON.stringify({ @@ -154,7 +162,7 @@ export const Home = (props: HomeProps) => { }), }) .then((res) => { - updateApp(applicationId, { panelId: res.newPanelId }, 'addPanel'); + updateApp(applicationId, { panelId: res.newPanelId }, type); }) .catch((err) => { setToast( @@ -203,7 +211,7 @@ export const Home = (props: HomeProps) => { const mainVisIdStore: Record = {}; for (let i = 0; i < res.data.length; i++) { mainVisIdStore[res.data[i].id] = res.data[i].availability.mainVisId; - res.data[i].availability = { name: 'loading', color: '', mainVisId: '' }; + res.data[i].availability = { name: '', color: 'loading', mainVisId: '' }; } setApplicationList(res.data); for (let i = res.data.length - 1; i > -1; i--) { @@ -228,7 +236,7 @@ export const Home = (props: HomeProps) => { }; // Create a new application - const createApp = (application: ApplicationType) => { + const createApp = (application: ApplicationType, type: string) => { const toast = isNameValid( application.name, applicationList.map((obj) => obj.name) @@ -252,7 +260,7 @@ export const Home = (props: HomeProps) => { body: JSON.stringify(requestBody), }) .then(async (res) => { - createPanelForApp(res.newAppId, application.name); + createPanelForApp(res.newAppId, application.name, type); setToast(`Application "${application.name}" successfully created!`); clearStorage(); }) @@ -314,11 +322,10 @@ export const Home = (props: HomeProps) => { if (type === 'update') { setToast('Application successfully updated.'); clearStorage(); + moveToApp(res.updatedAppId, type); } - if (type !== 'editAvailability') { - window.location.assign( - `${last(parentBreadcrumbs)!.href}application_analytics/${res.updatedAppId}` - ); + if (type.startsWith('create')) { + moveToApp(res.updatedAppId, type); } }) .catch((err) => { @@ -355,6 +362,13 @@ export const Home = (props: HomeProps) => { }); }; + const callback = (childFunc: () => void) => { + if (childFunc && triggerSwitchToEvent > 0) { + childFunc(); + setTriggerSwitchToEvent(triggerSwitchToEvent - 1); + } + }; + return (
{ renameApplication={renameApp} deleteApplication={deleteApp} clearStorage={clearStorage} + moveToApp={moveToApp} {...commonProps} /> @@ -412,6 +427,7 @@ export const Home = (props: HomeProps) => { notifications={notifications} setToasts={setToast} updateApp={updateApp} + callback={callback} {...commonProps} /> )} diff --git a/dashboards-observability/public/components/common/search/date_picker.tsx b/dashboards-observability/public/components/common/search/date_picker.tsx index 2d3ec8b19..75087c9f1 100644 --- a/dashboards-observability/public/components/common/search/date_picker.tsx +++ b/dashboards-observability/public/components/common/search/date_picker.tsx @@ -11,7 +11,7 @@ import { uiSettingsService } from '../../../../common/utils'; export function DatePicker(props: IDatePickerProps) { const { startTime, endTime, handleTimePickerChange, handleTimeRangePickerRefresh } = props; - const handleTimeChange = (e) => handleTimePickerChange([e.start, e.end]); + const handleTimeChange = (e: any) => handleTimePickerChange([e.start, e.end]); return ( void; setIsOutputStale: () => void; handleTimePickerChange: (timeRange: string[]) => any; + handleTimeRangePickerRefresh: () => any; } export const Search = (props: any) => { @@ -119,10 +120,10 @@ export const Search = (props: any) => { const liveButton = ( ); @@ -192,10 +193,7 @@ export const Search = (props: any) => { )} {isLiveTailOn && ( - + )} {showSaveButton && searchBarConfigs[selectedSubTabId]?.showSaveButton && ( diff --git a/dashboards-observability/public/components/custom_panels/custom_panel_view.tsx b/dashboards-observability/public/components/custom_panels/custom_panel_view.tsx index 4b248511f..54936c9bf 100644 --- a/dashboards-observability/public/components/custom_panels/custom_panel_view.tsx +++ b/dashboards-observability/public/components/custom_panels/custom_panel_view.tsx @@ -109,6 +109,7 @@ interface CustomPanelViewProps { setEndTime: any; childBreadcrumbs?: EuiBreadcrumb[]; appId?: string; + updateAvailabilityVizId?: any; onAddClick?: any; } @@ -127,6 +128,7 @@ export const CustomPanelView = (props: CustomPanelViewProps) => { endTime, setStartTime, setEndTime, + updateAvailabilityVizId, renameCustomPanel, deleteCustomPanel, cloneCustomPanel, @@ -643,6 +645,7 @@ export const CustomPanelView = (props: CustomPanelViewProps) => { >; editMode: boolean; @@ -64,6 +65,7 @@ export const PanelGrid = (props: PanelGridProps) => { http, chrome, panelId, + updateAvailabilityVizId, panelVisualizations, setPanelVisualizations, editMode, @@ -166,6 +168,9 @@ export const PanelGrid = (props: PanelGridProps) => { _.omit(layout, ['static', 'moved']) ); saveVisualizationLayouts(panelId, visualizationParams); + if (!_.isEmpty(updateAvailabilityVizId)) { + updateAvailabilityVizId(panelVisualizations); + } } }, [editActionType]); diff --git a/dashboards-observability/public/components/event_analytics/explorer/explorer.tsx b/dashboards-observability/public/components/event_analytics/explorer/explorer.tsx index e406a8d85..a7fd42262 100644 --- a/dashboards-observability/public/components/event_analytics/explorer/explorer.tsx +++ b/dashboards-observability/public/components/event_analytics/explorer/explorer.tsx @@ -3,7 +3,6 @@ * SPDX-License-Identifier: Apache-2.0 */ /* eslint-disable react-hooks/exhaustive-deps */ -/* eslint-disable no-console */ import './explorer.scss'; import React, { useState, useMemo, useEffect, useRef, useCallback, ReactElement } from 'react'; @@ -50,11 +49,15 @@ import { EVENT_ANALYTICS_DOCUMENTATION_URL, TAB_EVENT_ID, TAB_CHART_ID, - INDEX, - FINAL_QUERY, + DEFAULT_AVAILABILITY_QUERY, DATE_PICKER_FORMAT, } from '../../../../common/constants/explorer'; -import { PPL_STATS_REGEX, PPL_NEWLINE_REGEX, LIVE_OPTIONS, LIVE_END_TIME } from '../../../../common/constants/shared'; +import { + PPL_STATS_REGEX, + PPL_NEWLINE_REGEX, + LIVE_OPTIONS, + LIVE_END_TIME, +} from '../../../../common/constants/shared'; import { getIndexPatternFromRawQuery, preprocessQuery, buildQuery } from '../../../../common/utils'; import { useFetchEvents, useFetchVisualizations } from '../hooks'; import { changeQuery, changeDateRange, selectQueries } from '../redux/slices/query_slice'; @@ -71,10 +74,7 @@ import { change as updateVizConfig } from '../redux/slices/viualization_config_s import { IExplorerProps, IVisualizationContainerProps } from '../../../../common/types/explorer'; import { TabContext } from '../hooks'; import { getVizContainerProps } from '../../visualizations/charts/helpers'; -import { - parseGetSuggestions, - onItemSelect, -} from '../../common/search/autocomplete_logic'; +import { parseGetSuggestions, onItemSelect } from '../../common/search/autocomplete_logic'; import { formatError } from '../utils'; import { sleep } from '../../common/live_tail/live_tail_button'; @@ -103,6 +103,8 @@ export const Explorer = ({ endTime, setStartTime, setEndTime, + callback, + callbackInApp, }: IExplorerProps) => { const dispatch = useDispatch(); const requestParams = { tabId }; @@ -138,8 +140,11 @@ export const Explorer = ({ const [liveHits, setLiveHits] = useState(0); const [browserTabFocus, setBrowserTabFocus] = useState(true); const [liveTimestamp, setLiveTimestamp] = useState(DATE_PICKER_FORMAT); + const [triggerAvailability, setTriggerAvailability] = useState(false); const queryRef = useRef(); + const appBasedRef = useRef(''); + appBasedRef.current = appBaseQuery; const selectedPanelNameRef = useRef(''); const explorerFieldsRef = useRef(); const isLiveTailOnRef = useRef(false); @@ -159,7 +164,7 @@ export const Explorer = ({ const momentStart = dateMath.parse(start)!; const momentEnd = dateMath.parse(end)!; const diffSeconds = momentEnd.unix() - momentStart.unix(); - + // less than 1 second if (diffSeconds <= 1) minInterval = 'ms'; // less than 2 minutes @@ -174,7 +179,7 @@ export const Explorer = ({ else if (diffSeconds <= 86400 * 93) minInterval = 'w'; // less than 1 year else if (diffSeconds <= 86400 * 366) minInterval = 'M'; - + setTimeIntervalOptions([ { text: 'Auto', value: 'auto_' + minInterval }, ...TIME_INTERVAL_OPTIONS, @@ -182,11 +187,10 @@ export const Explorer = ({ }; useEffect(() => { - document.addEventListener("visibilitychange", function() { + document.addEventListener('visibilitychange', function () { if (document.hidden) { setBrowserTabFocus(false); - } - else { + } else { setBrowserTabFocus(true); } }); @@ -199,7 +203,7 @@ export const Explorer = ({ timeField: string, isLiveQuery: boolean ) => { - const fullQuery = buildQuery(appBaseQuery, curQuery![RAW_QUERY]); + const fullQuery = buildQuery(appBasedRef.current, curQuery![RAW_QUERY]); if (isEmpty(fullQuery)) return ''; return preprocessQuery({ rawQuery: fullQuery, @@ -224,7 +228,7 @@ export const Explorer = ({ const currQuery = appLogEvents ? objectData?.query.replace(appBaseQuery + '| ', '') : objectData?.query || ''; - + if (appLogEvents) { if (objectData?.selected_date_range?.start && objectData?.selected_date_range?.end) { setStartTime(objectData.selected_date_range.start); @@ -298,9 +302,9 @@ export const Explorer = ({ indexPattern: string ): Promise => await timestampUtils.getTimestamp(indexPattern); - const fetchData = async (startTime?: string, endTime?: string) => { + const fetchData = async (startingTime?: string, endingTime?: string) => { const curQuery = queryRef.current; - const rawQueryStr = buildQuery(appBaseQuery, curQuery![RAW_QUERY]); + const rawQueryStr = buildQuery(appBasedRef.current, curQuery![RAW_QUERY]); const curIndex = getIndexPatternFromRawQuery(rawQueryStr); if (isEmpty(rawQueryStr)) return; @@ -323,16 +327,16 @@ export const Explorer = ({ } } - if ((isEqual(typeof startTime, 'undefined')) && (isEqual(typeof endTime, 'undefined'))) { - startTime = curQuery![SELECTED_DATE_RANGE][0]; - endTime = curQuery![SELECTED_DATE_RANGE][1]; + if (isEqual(typeof startingTime, 'undefined') && isEqual(typeof endingTime, 'undefined')) { + startingTime = curQuery![SELECTED_DATE_RANGE][0]; + endingTime = curQuery![SELECTED_DATE_RANGE][1]; } // compose final query const finalQuery = composeFinalQuery( curQuery, - startTime, - endTime, + startingTime!, + endingTime!, curTimestamp, isLiveTailOnRef.current ); @@ -348,12 +352,12 @@ export const Explorer = ({ ); // search - if (rawQueryStr.match(PPL_STATS_REGEX)) { + if (finalQuery.match(PPL_STATS_REGEX)) { getVisualizations(); getAvailableFields(`search source=${curIndex}`); } else { findAutoInterval(startTime, endTime); - if (isLiveTailOnRef.current){ + if (isLiveTailOnRef.current) { getLiveTail(undefined, (error) => { const formattedError = formatError(error.name, error.message, error.body.message); notifications.toasts.addError(formattedError, { @@ -372,7 +376,7 @@ export const Explorer = ({ } // for comparing usage if for the same tab, user changed index from one to another - if (!isLiveTailOnRef.current){ + if (!isLiveTailOnRef.current) { setPrevIndex(curTimestamp); if (!queryRef.current!.isLoaded) { dispatch( @@ -394,6 +398,25 @@ export const Explorer = ({ await getSavedDataById(objectId); }; + const prepareAvailability = async () => { + setSelectedContentTab(TAB_CHART_ID); + setTriggerAvailability(true); + await setTempQuery(DEFAULT_AVAILABILITY_QUERY); + await updateQueryInStore(DEFAULT_AVAILABILITY_QUERY); + await handleTimeRangePickerRefresh(true); + }; + + useEffect(() => { + if (!isEmpty(appBasedRef.current)) { + if (callback) { + callback(() => prepareAvailability()); + } + if (callbackInApp) { + callbackInApp(() => prepareAvailability()); + } + } + }, [appBasedRef.current]); + useEffect(() => { if (queryRef.current!.isLoaded) return; let objectId; @@ -413,29 +436,10 @@ export const Explorer = ({ if (appLogEvents) { if (savedObjectId) { updateTabData(savedObjectId); - } else { - setTempQuery(''); - emptyTab(); } } }, [savedObjectId]); - const emptyTab = async () => { - await dispatch( - changeQuery({ - tabId, - query: { - [RAW_QUERY]: '', - [FINAL_QUERY]: '', - [INDEX]: '', - [SELECTED_TIMESTAMP]: '', - [SAVED_OBJECT_ID]: '', - }, - }) - ); - await fetchData(); - }; - const handleAddField = (field: IField) => toggleFields(field, AVAILABLE_FIELDS, SELECTED_FIELDS); const handleRemoveField = (field: IField) => @@ -467,8 +471,8 @@ export const Explorer = ({ ); }; - const handleTimeRangePickerRefresh = () => { - handleQuerySearch(); + const handleTimeRangePickerRefresh = (availability?: boolean) => { + handleQuerySearch(availability); }; /** @@ -535,17 +539,19 @@ export const Explorer = ({ }; const totalHits: number = useMemo(() => { - if (isLiveTailOn && countDistribution?.data) { - let hits = reduce( - countDistribution['data']['count()'], - (sum, n) => { - return sum + n; - }, - liveHits - ) - setLiveHits(hits); - return hits - }} , [countDistribution?.data]); + if (isLiveTailOn && countDistribution?.data) { + const hits = reduce( + countDistribution.data['count()'], + (sum, n) => { + return sum + n; + }, + liveHits + ); + setLiveHits(hits); + return hits; + } + return 0; + }, [countDistribution?.data]); const getMainContent = () => { return ( @@ -637,24 +643,24 @@ export const Explorer = ({

{isLiveTailOnRef.current && ( - <> - - - - -   Live streaming - - - { } } /> - - - since {liveTimestamp} - - - + <> + + + + +   Live streaming + + + {}} + /> + + since {liveTimestamp} + + + )} void) => { + if (childFunc && triggerAvailability) { + childFunc(); + setTriggerAvailability(false); + } + }; + const getExplorerVis = () => { return ( ); }; @@ -786,18 +801,23 @@ export const Explorer = ({ ); }; - const handleQuerySearch = useCallback(async () => { - // clear previous selected timestamp when index pattern changes - if ( - !isEmpty(tempQuery) && - !isEmpty(query[RAW_QUERY]) && - isIndexPatternChanged(tempQuery, query[RAW_QUERY]) - ) { - await updateCurrentTimeStamp(''); - } - await updateQueryInStore(tempQuery); - fetchData(); - }, [tempQuery, query[RAW_QUERY]]); + const handleQuerySearch = useCallback( + async (availability?: boolean) => { + // clear previous selected timestamp when index pattern changes + if ( + !isEmpty(tempQuery) && + !isEmpty(query[RAW_QUERY]) && + isIndexPatternChanged(tempQuery, query[RAW_QUERY]) + ) { + await updateCurrentTimeStamp(''); + } + if (availability !== true) { + await updateQueryInStore(tempQuery); + } + fetchData(); + }, + [tempQuery, query[RAW_QUERY]] + ); const handleQueryChange = async (newQuery: string) => { setTempQuery(newQuery); @@ -1019,21 +1039,21 @@ export const Explorer = ({ const liveTailLoop = async ( name: string, - startTime: string, - endTime: string, + startingTime: string, + endingTime: string, delayTime: number ) => { setLiveTailName(name); - setLiveTailTabId(curSelectedTabId.current); + setLiveTailTabId((curSelectedTabId.current as unknown) as string); setIsLiveTailOn(true); setToast('Live tail On', 'success'); setIsLiveTailPopoverOpen(false); - setLiveTimestamp(dateMath.parse(endTime)?.utc().format(DATE_PICKER_FORMAT)); + setLiveTimestamp(dateMath.parse(endingTime)?.utc().format(DATE_PICKER_FORMAT) || ''); setLiveHits(0); await sleep(2000); const curLiveTailname = liveTailNameRef.current; while (isLiveTailOnRef.current === true && curLiveTailname === liveTailNameRef.current) { - handleLiveTailSearch(startTime, endTime); + handleLiveTailSearch(startingTime, endingTime); if (liveTailTabIdRef.current !== curSelectedTabId.current) { setIsLiveTailOn(false); isLiveTailOnRef.current = false; @@ -1050,36 +1070,36 @@ export const Explorer = ({ setLiveHits(0); setIsLiveTailPopoverOpen(false); if (isLiveTailOnRef.current) setToast('Live tail Off', 'danger'); - } + }; useEffect(() => { - if ((isEqual(selectedContentTabId, TAB_CHART_ID)) || (!browserTabFocus)) { + if (isEqual(selectedContentTabId, TAB_CHART_ID) || !browserTabFocus) { stopLive(); } }, [selectedContentTabId, browserTabFocus]); - //stop live tail if the page is moved using breadcrumbs - let lastUrl = location.href; + // stop live tail if the page is moved using breadcrumbs + let lastUrl = location.href; new MutationObserver(() => { const url = location.href; - if (url !== lastUrl) { - lastUrl = url; - stopLive(); - } - }).observe(document, {subtree: true, childList: true}); + if (url !== lastUrl) { + lastUrl = url; + stopLive(); + } + }).observe(document, { subtree: true, childList: true }); const popoverItems: ReactElement[] = LIVE_OPTIONS.map((e) => { return ( - { - liveTailLoop(e.label, e.startTime, LIVE_END_TIME, e.delayTime); - }} - data-test-subj={'eventLiveTail__delay'+e.label} - > - {e.label} - - ) + { + liveTailLoop(e.label, e.startTime, LIVE_END_TIME, e.delayTime); + }} + data-test-subj={'eventLiveTail__delay' + e.label} + > + {e.label} + + ); }); const dateRange = @@ -1090,9 +1110,9 @@ export const Explorer = ({ : [startTime, endTime]; const handleLiveTailSearch = useCallback( - async (startTime: string, endTime: string) => { + async (startingTime: string, endingTime: string) => { await updateQueryInStore(tempQuery); - fetchData(startTime, endTime); + fetchData(startingTime, endingTime); }, [tempQuery] ); @@ -1153,4 +1173,4 @@ export const Explorer = ({
); -}; \ No newline at end of file +}; diff --git a/dashboards-observability/public/components/event_analytics/explorer/sidebar/sidebar.tsx b/dashboards-observability/public/components/event_analytics/explorer/sidebar/sidebar.tsx index 9a49ca926..c949c9e49 100644 --- a/dashboards-observability/public/components/event_analytics/explorer/sidebar/sidebar.tsx +++ b/dashboards-observability/public/components/event_analytics/explorer/sidebar/sidebar.tsx @@ -15,6 +15,7 @@ import { Field } from './field'; import { IExplorerFields, IField } from '../../../../../common/types/explorer'; interface ISidebarProps { + query: string; explorerFields: IExplorerFields; explorerData: any; selectedTimestamp: string; diff --git a/dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/__tests__/__snapshots__/config_panel.test.tsx.snap b/dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/__tests__/__snapshots__/config_panel.test.tsx.snap index 69eda470d..065ec0e9c 100644 --- a/dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/__tests__/__snapshots__/config_panel.test.tsx.snap +++ b/dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/__tests__/__snapshots__/config_panel.test.tsx.snap @@ -282,6 +282,12 @@ exports[`Config panel component Renders config panel with visualization data 1`] "mapTo": "layoutConfig", "name": "Layout", }, + Object { + "editor": [Function], + "id": "availability-panel", + "mapTo": "availabilityConfig", + "name": "Availability", + }, ], }, "fullLabel": "Bar", @@ -452,6 +458,12 @@ exports[`Config panel component Renders config panel with visualization data 1`] "mapTo": "layoutConfig", "name": "Layout", }, + Object { + "editor": [Function], + "id": "availability-panel", + "mapTo": "availabilityConfig", + "name": "Availability", + }, ], }, "fullLabel": "Bar", @@ -574,6 +586,12 @@ exports[`Config panel component Renders config panel with visualization data 1`] "mapTo": "layoutConfig", "name": "Layout", }, + Object { + "editor": [Function], + "id": "availability-panel", + "mapTo": "availabilityConfig", + "name": "Availability", + }, ], }, "fullLabel": "Line", @@ -1030,6 +1048,12 @@ exports[`Config panel component Renders config panel with visualization data 1`] "mapTo": "layoutConfig", "name": "Layout", }, + Object { + "editor": [Function], + "id": "availability-panel", + "mapTo": "availabilityConfig", + "name": "Availability", + }, ], }, "fullLabel": "Bar", @@ -1197,6 +1221,12 @@ exports[`Config panel component Renders config panel with visualization data 1`] "mapTo": "layoutConfig", "name": "Layout", }, + Object { + "editor": [Function], + "id": "availability-panel", + "mapTo": "availabilityConfig", + "name": "Availability", + }, ], }, "fullLabel": "Bar", @@ -1374,6 +1404,12 @@ exports[`Config panel component Renders config panel with visualization data 1`] "mapTo": "layoutConfig", "name": "Layout", }, + Object { + "editor": [Function], + "id": "availability-panel", + "mapTo": "availabilityConfig", + "name": "Availability", + }, ], } } @@ -1481,6 +1517,12 @@ exports[`Config panel component Renders config panel with visualization data 1`] "mapTo": "layoutConfig", "name": "Layout", }, + Object { + "editor": [Function], + "id": "availability-panel", + "mapTo": "availabilityConfig", + "name": "Availability", + }, ], }, "fullLabel": "Bar", @@ -1652,6 +1694,12 @@ exports[`Config panel component Renders config panel with visualization data 1`] "mapTo": "layoutConfig", "name": "Layout", }, + Object { + "editor": [Function], + "id": "availability-panel", + "mapTo": "availabilityConfig", + "name": "Availability", + }, ], } } @@ -1794,6 +1842,12 @@ exports[`Config panel component Renders config panel with visualization data 1`] "mapTo": "layoutConfig", "name": "Layout", }, + Object { + "editor": [Function], + "id": "availability-panel", + "mapTo": "availabilityConfig", + "name": "Availability", + }, ], } } @@ -2069,9 +2123,10 @@ exports[`Config panel component Renders config panel with visualization data 1`] className="euiPanel euiPanel--paddingSmall euiPanel--borderRadiusMedium euiPanel--plain euiPanel--hasShadow" > , + "id": "availability-panel", + "name": "Availability", + }, ] } >
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Override + + + + + + + Override + + + + + + + + + + + + + + + + + + + + + + @@ -3217,6 +3534,14 @@ exports[`Siderbar component Renders sidebar component 1`] = ` dataTestSubj="field-clientip-showDetails" fieldAction={ + + + + + + + + + + + + + + + + + + + Override + + + + + + + Override + + + + + + + + + + + + + + + + + + + + + + + Override + + + + + + + Override + + + + + + + + + + - - - + Override + + + + + + + + + @@ -4659,6 +5275,26 @@ exports[`Siderbar component Renders sidebar component 1`] = ` dataTestSubj="field-index-showDetails" fieldAction={ + + + + Override + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Override + + + + + + + Override + + + + + + + + + + + + + @@ -6101,6 +6992,14 @@ exports[`Siderbar component Renders sidebar component 1`] = ` dataTestSubj="field-phpmemory-showDetails" fieldAction={ + + + + + + + + + + Override + + + + + + + Override + + + + + + + + + + + + + + Override + + + + + + + Override + + + + + + + + + + + + + + Override + + + + + + + Override + + + + + + + + + + + + + + Override + + + + + + + Override + + + + + + + + + + + + + + + + + + + + + + + Override + + + + + + + Override + + + + + + + + + + + + + + + + + + + void; selectedTimestamp: string; isOverridingTimestamp: boolean; - handleOverrideTimestamp: (timestamp: { name: string; type: string }) => void; + handleOverrideTimestamp: (timestamp: IField) => void; selected: boolean; showToggleButton: boolean; showTimestampOverrideButton: boolean; @@ -40,6 +44,9 @@ export const Field = (props: IFieldProps) => { const { query, field, + selectedPattern, + isOverridingPattern, + handleOverridePattern, selectedTimestamp, isOverridingTimestamp, handleOverrideTimestamp, @@ -71,6 +78,31 @@ export const Field = (props: IFieldProps) => { const getFieldActionDOM = () => { return ( <> + + <> + {isEqual(field.type, 'string') ? ( + isEqual(selectedPattern, field.name) ? ( + + Default Pattern + + ) : isOverridingPattern ? ( + + ) : ( + handleOverridePattern(field)} + data-test-subj="eventExplorer__overrideDefaultPattern" + > + Override + + ) + ) : null} + + <> {showTimestampOverrideButton && isEqual(field.type, 'timestamp') ? ( diff --git a/dashboards-observability/public/components/event_analytics/explorer/sidebar/sidebar.tsx b/dashboards-observability/public/components/event_analytics/explorer/sidebar/sidebar.tsx index c949c9e49..c54b89baa 100644 --- a/dashboards-observability/public/components/event_analytics/explorer/sidebar/sidebar.tsx +++ b/dashboards-observability/public/components/event_analytics/explorer/sidebar/sidebar.tsx @@ -18,10 +18,13 @@ interface ISidebarProps { query: string; explorerFields: IExplorerFields; explorerData: any; + selectedPattern: string; + isOverridingPattern: boolean; selectedTimestamp: string; isOverridingTimestamp: boolean; isFieldToggleButtonDisabled: boolean; - handleOverrideTimestamp: (timestamp: { name: string; type: string }) => void; + handleOverridePattern: (pattern: IField) => void; + handleOverrideTimestamp: (timestamp: IField) => void; handleAddField: (field: IField) => void; handleRemoveField: (field: IField) => void; } @@ -31,9 +34,12 @@ export const Sidebar = (props: ISidebarProps) => { query, explorerFields, explorerData, + selectedPattern, + isOverridingPattern, selectedTimestamp, isOverridingTimestamp, isFieldToggleButtonDisabled, + handleOverridePattern, handleOverrideTimestamp, handleAddField, handleRemoveField, @@ -90,6 +96,10 @@ export const Sidebar = (props: ISidebarProps) => { { { { dispatch(initQueryResult({ tabId })); dispatch(initFields({ tabId })); dispatch(addTab({ tabId })); + dispatch(initPatterns({ tabId })); }); return tabId; diff --git a/dashboards-observability/public/components/event_analytics/hooks/use_fetch_events.ts b/dashboards-observability/public/components/event_analytics/hooks/use_fetch_events.ts index dba08fd2c..6e53693e7 100644 --- a/dashboards-observability/public/components/event_analytics/hooks/use_fetch_events.ts +++ b/dashboards-observability/public/components/event_analytics/hooks/use_fetch_events.ts @@ -16,6 +16,7 @@ import { QUERIED_FIELDS, } from '../../../../common/constants/explorer'; import { fetchSuccess, reset as queryResultReset } from '../redux/slices/query_result_slice'; +import { reset as patternsReset } from '../redux/slices/patterns_slice'; import { selectQueries } from '../redux/slices/query_slice'; import { reset as visualizationReset } from '../redux/slices/visualization_slice'; import { updateFields, sortFields, selectFields } from '../redux/slices/field_slice'; @@ -66,9 +67,9 @@ export const useFetchEvents = ({ pplService, requestParams }: IFetchEventsParams }; const dispatchOnGettingHis = (res: any) => { - const selectedFields: Array = fieldsRef.current![requestParams.tabId][ - SELECTED_FIELDS - ].map((field: IField) => field.name); + const selectedFields: string[] = fieldsRef.current![requestParams.tabId][SELECTED_FIELDS].map( + (field: IField) => field.name + ); setResponse(res); batch(() => { dispatch( @@ -90,15 +91,7 @@ export const useFetchEvents = ({ pplService, requestParams }: IFetchEventsParams data: { [UNSELECTED_FIELDS]: res?.schema ? [...res.schema] : [], [QUERIED_FIELDS]: [], - [AVAILABLE_FIELDS]: res?.schema - ? isEmpty(selectedFields) - ? [...res.schema] - : [ - ...res?.schema.filter( - (curField: IField) => !selectedFields.includes(curField.name) - ), - ] - : [], + [AVAILABLE_FIELDS]: res?.schema || [], }, }) ); @@ -146,6 +139,11 @@ export const useFetchEvents = ({ pplService, requestParams }: IFetchEventsParams tabId: requestParams.tabId, }) ); + dispatch( + patternsReset({ + tabId: requestParams.tabId, + }) + ); }); }; diff --git a/dashboards-observability/public/components/event_analytics/hooks/use_fetch_patterns.ts b/dashboards-observability/public/components/event_analytics/hooks/use_fetch_patterns.ts new file mode 100644 index 000000000..98ba7c624 --- /dev/null +++ b/dashboards-observability/public/components/event_analytics/hooks/use_fetch_patterns.ts @@ -0,0 +1,139 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { IField, PatternTableData } from 'common/types/explorer'; +import { isEmpty, isUndefined } from 'lodash'; +import PPLService from 'public/services/requests/ppl'; +import { useRef } from 'react'; +import { batch, useDispatch, useSelector } from 'react-redux'; +import { FINAL_QUERY, SELECTED_PATTERN } from '../../../../common/constants/explorer'; +import { setPatterns, reset as resetPatterns } from '../redux/slices/patterns_slice'; +import { changeQuery, selectQueries } from '../redux/slices/query_slice'; +import { useFetchEvents } from './use_fetch_events'; + +interface IFetchPatternsParams { + pplService: PPLService; + requestParams: { tabId: string }; +} + +export const useFetchPatterns = ({ pplService, requestParams }: IFetchPatternsParams) => { + const dispatch = useDispatch(); + const { fetchEvents } = useFetchEvents({ + pplService, + requestParams, + }); + const queries = useSelector(selectQueries); + const queriesRef = useRef(); + queriesRef.current = queries; + + const dispatchOnPatterns = (res: { patternTableData: PatternTableData[]; total: number[] }) => { + batch(() => { + dispatch( + resetPatterns({ + tabId: requestParams.tabId, + }) + ); + dispatch( + setPatterns({ + tabId: requestParams.tabId, + data: { + ...res, + }, + }) + ); + }); + }; + + const buildPatternDataQuery = (query: string, field: string) => { + return `${query.trim()} | patterns ${field} | stats count(), take(${field}, 1) by patterns_field`; + }; + + const getPatterns = (errorHandler: (error: any) => void, query?: string) => { + const cur = queriesRef.current; + const rawQuery = cur![requestParams.tabId][FINAL_QUERY]; + const searchQuery = isUndefined(query) ? rawQuery : query; + const patternField = cur![requestParams.tabId][SELECTED_PATTERN]; + const statsQuery = buildPatternDataQuery(searchQuery, patternField); + // Fetch patterns data for the current query results + fetchEvents( + { query: statsQuery }, + 'jdbc', + (res: { datarows: any[] }) => { + if (!isEmpty(res.datarows)) { + const formatToTableData = res.datarows.map((row: any) => { + return { + count: row[0], + pattern: row[2], + sampleLog: row[1][0], + } as PatternTableData; + }); + // Fetch total number of events to divide count by for ratio + fetchEvents( + { + query: `${rawQuery} | stats count()`, + }, + 'jdbc', + (countRes: any) => { + dispatchOnPatterns({ + patternTableData: formatToTableData, + total: countRes.datarows[0], + }); + }, + errorHandler + ); + } + }, + errorHandler + ); + }; + + const setDefaultPatternsField = async ( + index: string, + pattern: string, + errorHandler: (error: any) => void + ) => { + let patternField = pattern; + if (!pattern) { + if (!index) { + return; + } + const query = `source = ${index} | head 1`; + await fetchEvents( + { query }, + 'jdbc', + async (res: any) => { + // Create array of only string type fields + const textFields = res.schema.filter((field: IField) => field.type === 'string'); + // Loop through array and find field with longest value + let defaultPatternField = ''; + let maxLength = 0; + textFields.forEach((field: IField, i: number) => { + const curLength = res.jsonData[0][field.name].length; + if (curLength > maxLength) { + maxLength = curLength; + defaultPatternField = field.name; + } + }); + patternField = defaultPatternField; + }, + errorHandler + ); + } + // Set pattern to the pattern passed in or the default pattern field found if pattern is empty + await dispatch( + changeQuery({ + tabId: requestParams.tabId, + query: { + [SELECTED_PATTERN]: patternField, + }, + }) + ); + }; + + return { + getPatterns, + setDefaultPatternsField, + }; +}; diff --git a/dashboards-observability/public/components/event_analytics/hooks/use_fetch_visualizations.ts b/dashboards-observability/public/components/event_analytics/hooks/use_fetch_visualizations.ts index 866921201..93c05425a 100644 --- a/dashboards-observability/public/components/event_analytics/hooks/use_fetch_visualizations.ts +++ b/dashboards-observability/public/components/event_analytics/hooks/use_fetch_visualizations.ts @@ -18,6 +18,7 @@ import { render as renderExplorerVis } from '../redux/slices/visualization_slice import { updateFields, sortFields } from '../redux/slices/field_slice'; import PPLService from '../../../services/requests/ppl'; import { fetchSuccess } from '../redux/slices/query_result_slice'; +import { setPatterns, reset as patternsReset } from '../redux/slices/patterns_slice'; interface IFetchVisualizationsParams { pplService: PPLService; @@ -117,6 +118,11 @@ export const useFetchVisualizations = ({ data: [QUERIED_FIELDS], }) ); + dispatch( + patternsReset({ + tabId: requestParams.tabId, + }) + ); }); } ); diff --git a/dashboards-observability/public/components/event_analytics/redux/slices/patterns_slice.ts b/dashboards-observability/public/components/event_analytics/redux/slices/patterns_slice.ts new file mode 100644 index 000000000..6f6ebf4bd --- /dev/null +++ b/dashboards-observability/public/components/event_analytics/redux/slices/patterns_slice.ts @@ -0,0 +1,37 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ +/* eslint-disable import/no-default-export */ + +import { createSlice } from '@reduxjs/toolkit'; +import { fetchSuccess as fetchSuccessReducer } from '../reducers'; +import { initialTabId } from '../../../../framework/redux/store/shared_state'; +import { REDUX_EXPL_SLICE_PATTERNS } from '../../../../../common/constants/explorer'; + +const initialState = { + [initialTabId]: {}, +}; + +export const patternsSlice = createSlice({ + name: REDUX_EXPL_SLICE_PATTERNS, + initialState, + reducers: { + setPatterns: fetchSuccessReducer, + reset: (state, { payload }) => { + state[payload.tabId] = {}; + }, + init: (state, { payload }) => { + state[payload.tabId] = {}; + }, + remove: (state, { payload }) => { + delete state[payload.tabId]; + }, + }, +}); + +export const { setPatterns, remove, reset, init } = patternsSlice.actions; + +export const selectPatterns = (state) => state.patterns; + +export default patternsSlice.reducer; diff --git a/dashboards-observability/public/components/event_analytics/redux/slices/query_slice.ts b/dashboards-observability/public/components/event_analytics/redux/slices/query_slice.ts index 6d82265e1..ae033b910 100644 --- a/dashboards-observability/public/components/event_analytics/redux/slices/query_slice.ts +++ b/dashboards-observability/public/components/event_analytics/redux/slices/query_slice.ts @@ -13,12 +13,14 @@ import { INDEX, SELECTED_TIMESTAMP, APP_ANALYTICS_TAB_ID_REGEX, + SELECTED_PATTERN, } from '../../../../../common/constants/explorer'; const initialQueryState = { [RAW_QUERY]: '', [FINAL_QUERY]: '', [INDEX]: '', + [SELECTED_PATTERN]: '', [SELECTED_TIMESTAMP]: '', [SELECTED_DATE_RANGE]: ['now-15m', 'now'], }; @@ -27,6 +29,7 @@ const appBaseQueryState = { [RAW_QUERY]: '', [FINAL_QUERY]: '', [INDEX]: '', + [SELECTED_PATTERN]: '', [SELECTED_TIMESTAMP]: '', [SELECTED_DATE_RANGE]: ['now-24h', 'now'], }; diff --git a/dashboards-observability/public/framework/redux/reducers/index.ts b/dashboards-observability/public/framework/redux/reducers/index.ts index 1dfcf743c..14e27418e 100644 --- a/dashboards-observability/public/framework/redux/reducers/index.ts +++ b/dashboards-observability/public/framework/redux/reducers/index.ts @@ -12,6 +12,7 @@ import FieldsReducer from '../../../components/event_analytics/redux/slices/fiel import countDistributionReducer from '../../../components/event_analytics/redux/slices/count_distribution_slice'; import explorerVisualizationReducer from '../../../components/event_analytics/redux/slices/visualization_slice'; import explorerVisualizationConfigReducer from '../../../components/event_analytics/redux/slices/viualization_config_slice'; +import patternsReducer from '../../../components/event_analytics/redux/slices/patterns_slice'; const rootReducer = combineReducers({ // explorer reducers @@ -22,6 +23,7 @@ const rootReducer = combineReducers({ countDistribution: countDistributionReducer, explorerVisualization: explorerVisualizationReducer, explorerVisualizationConfig: explorerVisualizationConfigReducer, + patterns: patternsReducer, }); export type RootState = ReturnType; From 4b0a1fe06da4247312c4ade46630d3c2215f27aa Mon Sep 17 00:00:00 2001 From: "opensearch-trigger-bot[bot]" <98922864+opensearch-trigger-bot[bot]@users.noreply.github.com> Date: Fri, 4 Nov 2022 11:17:37 -0700 Subject: [PATCH 22/30] Release notes for 2.4.0 (#1259) (#1262) Signed-off-by: Rupal Mahajan (cherry picked from commit eef1979aeb083b25809be2873c76e23f77a22581) Co-authored-by: Rupal Mahajan --- ...rch-observability.release-notes-2.4.0.0.md | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 release-notes/opensearch-observability.release-notes-2.4.0.0.md diff --git a/release-notes/opensearch-observability.release-notes-2.4.0.0.md b/release-notes/opensearch-observability.release-notes-2.4.0.0.md new file mode 100644 index 000000000..95e893d20 --- /dev/null +++ b/release-notes/opensearch-observability.release-notes-2.4.0.0.md @@ -0,0 +1,39 @@ +## Version 2.4.0.0 Release Notes +Compatible with OpenSearch and OpenSearch Dashboards Version 2.4.0 + +### Features +* Add metrics ([#1234](https://github.com/opensearch-project/observability/pull/1234)) +* Add log pattern table ([#1212](https://github.com/opensearch-project/observability/pull/1212)) + +### Enhancements +* Change auto expand replicas to 0-2 for better availability ([#1186](https://github.com/opensearch-project/observability/pull/1186)) +* Add anomaly count and config to patterns table ([#1216](https://github.com/opensearch-project/observability/pull/1216)) +* Adding save functionality to metrics ([#1241](https://github.com/opensearch-project/observability/pull/1241)) +* Persist redux state in browser ([#1178](https://github.com/opensearch-project/observability/pull/1178)) +* UI changes for sidebar and update to PPL request ([#1246](https://github.com/opensearch-project/observability/pull/1246)) +* Backtick supports ([#1250](https://github.com/opensearch-project/observability/pull/1250)) +* Use in-memory count for total hits in patterns ratio ([#1254](https://github.com/opensearch-project/observability/pull/1254)) +* Show metrics in events homepage ([#1232](https://github.com/opensearch-project/observability/pull/1232)) +* Update Sidepanel ([#1230](https://github.com/opensearch-project/observability/pull/1230)) +* Added dummy search field, panel push button ([#1227](https://github.com/opensearch-project/observability/pull/1227)) +* Adding visualizations panel to metrics ([#1222](https://github.com/opensearch-project/observability/pull/1222)) +* Add metrics api events ([#1214](https://github.com/opensearch-project/observability/pull/1214)) + +### Bug Fixes +* Fix column spacing and pattern table highlighting ([#1218](https://github.com/opensearch-project/observability/pull/1218)) +* Fix filtered pattern selection ([#1236](https://github.com/opensearch-project/observability/pull/1236)) +* Fixes for BWC issues, updated grammar ([#1235](https://github.com/opensearch-project/observability/pull/1235)) +* Minor UI changes for sidebar ([#1237](https://github.com/opensearch-project/observability/pull/1237)) +* Update minimatch version to 3.0.5 ([#1228](https://github.com/opensearch-project/observability/pull/1228)) +* Update detekt version ([#1226](https://github.com/opensearch-project/observability/pull/1226)) +* Fix metrics visualization regression ([#1244](https://github.com/opensearch-project/observability/pull/1244)) +* Fix Prometheus Mappings ([#1242](https://github.com/opensearch-project/observability/pull/1242)) +* Metrics bug fixes ([#1248](https://github.com/opensearch-project/observability/pull/1248))([#1253](https://github.com/opensearch-project/observability/pull/1253)) +* Fix metrics switch ([#1247](https://github.com/opensearch-project/observability/pull/1247)) + +### Infrastructure +* Add groupId to pluginzip publication ([#1115](https://github.com/opensearch-project/observability/pull/1115)) +* Enable windows and macos builds ([#1108](https://github.com/opensearch-project/observability/pull/1108)) + +### Maintenance +* Bump version to 2.4.0 ([#1071](https://github.com/opensearch-project/observability/pull/1071)) \ No newline at end of file From fe9780447de43ed0d2414e03214da3a1c9dcacf2 Mon Sep 17 00:00:00 2001 From: Eric Wei Date: Fri, 18 Nov 2022 14:46:07 -0800 Subject: [PATCH 23/30] [BACKPORT] Backport 2.4 commits to 2.x (#1277) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [2.4] Add log pattern table (#1187) (#1212) (#1215) Signed-off-by: Joshua Li (cherry picked from commit 5a90273be61effb65d8e6fe0cd11db8e60bdcce8) Co-authored-by: Joshua Li * [Backport 2.4] Merge main to 2.4 (#1217) * removing add sample data test (#668) Signed-off-by: Shenoy Pratik * Fix change availability bug (#667) Signed-off-by: Eugene Lee * Fix test to check for empty event analytics (#669) Signed-off-by: Eugene Lee * Add release notes for 2.0.0-rc1 (#674) Signed-off-by: Joshua Li * remove candlestick from visualizations (#690) Signed-off-by: Mrunal Zambre * [OSD][Tests] add test subject to app title for app analytics (#686) * [OSD][Tests] add test subject to app title for app analytics Using a test subject we can find the specific element instead of trying to search the DOM for the class and hope the class is the right class that contains the element we are looking for. We can search the dom for this specific test subject and actually make the test runner wait until this test subject exists before executing the tests. Issue related: https://github.com/opensearch-project/observability/issues/679 Signed-off-by: Kawika Avilla * update one example for cypress tests Signed-off-by: Kawika Avilla * Support integTestRemote with security enabled endpoint (#699) Signed-off-by: Joshua Li * Add data test subj to app analytics (#704) Signed-off-by: Eugene Lee * integrate job-scheduler into observability (#609) Signed-off-by: Zhongnan Su * Add availability entry points (#731) Signed-off-by: Eugene Lee * Update availabilityVizId if visualization is removed from panel (#732) Signed-off-by: Eugene Lee * Remove rc1 reference (#730) Signed-off-by: Eugene Lee * Issue fix not a function error (#739) * Bump prismjs from 1.25.0 to 1.27.0 in /dashboards-observability (#508) (#574) Bumps [prismjs](https://github.com/PrismJS/prism) from 1.25.0 to 1.27.0. - [Release notes](https://github.com/PrismJS/prism/releases) - [Changelog](https://github.com/PrismJS/prism/blob/master/CHANGELOG.md) - [Commits](https://github.com/PrismJS/prism/compare/v1.25.0...v1.27.0) --- updated-dependencies: - dependency-name: prismjs dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> (cherry picked from commit b4f491a16f81725db6d63f604a3020e5b89dd720) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * change to support java 8 in compile and runtime (#575) (#576) Signed-off-by: Zhongnan Su (cherry picked from commit 5c43e9dac336b37fa4f6f002709e0965015383aa) Co-authored-by: Zhongnan Su * Add 1.3.0 release notes (#580) (#582) Signed-off-by: Eugene Lee * bug fixes Signed-off-by: Eric Wei Co-authored-by: opensearch-trigger-bot[bot] <98922864+opensearch-trigger-bot[bot]@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Zhongnan Su * Release notes 2.0.0.0 (#757) Signed-off-by: vamsi-amazon * Add availability help flyout (#734) Signed-off-by: Eugene Lee * Make common delete modal for components (#766) Signed-off-by: Eugene Lee * Sync app and app list types (#763) Signed-off-by: Eugene Lee * [WIP]: Cypress automation for Trace analytics dashboard application (#775) * Added cypress test cases for tooltip and search engine on Trace dashboard Signed-off-by: Pratibha Pandey * Added test cases for filters Signed-off-by: Pratibha Pandey * Added cypress test cases for tooltip and search engine on Trace dashboard Signed-off-by: Pratibha Pandey * Added test cases for filters Signed-off-by: Pratibha Pandey * Added test cases for Service page in Trace analytics Signed-off-by: Pratibha Pandey * Added Cypress test cases for trace analytics services spans table Signed-off-by: Deepak Nevde * Cypress test case for Traces Signed-off-by: Nidhi Singhai * Cypress test case for Traces Updated Signed-off-by: Nidhi Singhai * Worked on review comments Signed-off-by: Pratibha Pandey Co-authored-by: Deepak Nevde Co-authored-by: Nidhi Singhai * Feature/error toast on invalid valueoption selection 666 (#736) * rendered default axes selected and added error toasts on Save and Apply click if invalid value option selected Signed-off-by: rinku-kumar-psl * Cypress changes for error toasts on invalid value options selected Signed-off-by: rinku-kumar-psl * added constant VIZ_CONTAIN_XY_AXIS for x, y value axis Signed-off-by: rinku-kumar-psl * [Feature]: Treemap chart support in Event Analytics (#693) * Initial commit for treemap visualization Signed-off-by: Mrunal Zambre * changes to labelField, layout and config Signed-off-by: Mrunal Zambre * reverted changes of layoutConfig Signed-off-by: Mrunal Zambre * Cypress TestCase for TreeMap Signed-off-by: Nidhi Singhai * added new line Signed-off-by: Mrunal Zambre * updated test cases Signed-off-by: Mrunal Zambre * reverted snapshots Signed-off-by: Mrunal Zambre * implemented treemap config options Signed-off-by: Mrunal Zambre * added multicolored theme option Signed-off-by: Mrunal Zambre * updated snapshots Signed-off-by: Mrunal Zambre * Updated test scripts for multicolored section Signed-off-by: Pratibha Pandey * Fixed default selection for treemap Signed-off-by: Mrunal Zambre Co-authored-by: Nidhi Singhai Co-authored-by: Pratibha Pandey * Uses custom plugin to publish zips to maven (#786) Signed-off-by: Joshua Li * Cypress automation for Notebooks application (#809) * Added test cases for Notebooks application Signed-off-by: Pratibha Pandey * Added test cases for empty state of Notebooks table Signed-off-by: Pratibha Pandey * Feature/Pie chart legend, chart style, color theme and cypress test cases for same. (#776) * pie chart legends, chart color contrast and cypress test cases Signed-off-by: Deepak Nevde * Added color code in constants Signed-off-by: Deepak Nevde * Snapshots updated Signed-off-by: Deepak Nevde * Conflicts resolved Signed-off-by: Deepak Nevde * Review comment addressed Signed-off-by: Deepak Nevde * color variable changes Signed-off-by: Deepak Nevde * [Feature]: Heatmap- Color theme implementation in config panel (#778) * Implementation of color theme for heatmap Signed-off-by: ruchika-narang * refactoring code Signed-off-by: ruchika-narang * HeatMap Cypress TestCase Signed-off-by: Nidhi Singhai * Cypress TestCase for HeatMap Signed-off-by: Nidhi Singhai * Update Done according to Comment Signed-off-by: Nidhi Singhai * Refactored code Signed-off-by: ruchika-narang * Updated snapshot test case Signed-off-by: ruchika-narang * Fixed toast implementation and no result found for heatmap Signed-off-by: ruchika-narang * Undefined checks for value options Signed-off-by: ruchika-narang Co-authored-by: Nidhi Singhai * [Enhancement]: Pie Config Panel features v1 (#816) * updated dimensions and metrics UI for pie chart Signed-off-by: Mrunal Zambre * updated imports Signed-off-by: Mrunal Zambre * updated snapshots Signed-off-by: Mrunal Zambre * [Enhancement]: TreeMap Config Panel features v1 (#814) * added support for multiple parents in treemap Signed-off-by: Mrunal Zambre * minor type and position fixes Signed-off-by: Mrunal Zambre * added default values for color pickers Signed-off-by: Mrunal Zambre * resolved review comments Signed-off-by: Mrunal Zambre * TreeMap Enhancement TestCases Signed-off-by: Nidhi Singhai * TreeMap Enhancement TestCases Signed-off-by: Nidhi Singhai * TreeMap Enhancement TestCases Updated Signed-off-by: Nidhi Singhai * Update Done Signed-off-by: Nidhi Singhai * fixed default parent color pickers state Signed-off-by: Mrunal Zambre * fixed undefined check Signed-off-by: Mrunal Zambre * updated snapshots Signed-off-by: Mrunal Zambre Co-authored-by: Nidhi Singhai Co-authored-by: Subrat Pattnaik * Bar chart: Legend, Chart styles, and Color Theme features implementation on config panel - 697 (#780) * mode, orientation and rotate labels implementation under Chart style for Bar chart Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_button_group.tsx * LineWidth and Fill-opacity changes Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/event_analytics/utils/utils.tsx * Bar Group Width, Bar Width changes and rotated label hiding issue resolved Signed-off-by: rinku-kumar-psl * corner cases handled for bar with and group Width and conditionally rendered rotate label UI Signed-off-by: rinku-kumar-psl * Bar chart legend and color theme changes Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_legend.tsx * Snapshots updated Signed-off-by: rinku-kumar-psl * empty line added Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_button_group.tsx # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_legend.tsx * review comment addressed Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_legend.tsx * snapshot updated Signed-off-by: rinku-kumar-psl * PR review comment addressed. Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_button_group.tsx * add button constant added Signed-off-by: rinku-kumar-psl * changed rgba to rgb in bar.tsx Signed-off-by: rinku-kumar-psl * snapshot updated Signed-off-by: rinku-kumar-psl * bump version to 2.1.0 and bump gradle to 7.4.2 (#817) Signed-off-by: Kavitha Conjeevaram Mohan * 2.1 release notes (#839) Signed-off-by: Kavitha Conjeevaram Mohan * change 2.1 version bump PR under maintenance (#841) * change version bump to maintenance Signed-off-by: Kavitha Conjeevaram Mohan * change version bump to maintenance Signed-off-by: Kavitha Conjeevaram Mohan * Sprint1 : combine PR for visualization from Sprint1 (#824) * graph style section UI schema Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/visualizations/charts/lines/line_type.ts * changes for style mode and interpolation Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/visualizations/charts/lines/line_type.ts # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/index.ts # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/index.ts # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/index.ts * lineWidth integration for line mode Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/visualizations/charts/lines/line.tsx # dashboards-observability/public/components/visualizations/charts/lines/line_type.ts # Conflicts: # dashboards-observability/common/constants/shared.ts # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_style_slider.tsx * changes for Legend and Orientation in Line Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_button_group.tsx # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_legend.tsx # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/index.ts # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_style_slider.tsx * point size and Bar Alignment changes Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/visualizations/charts/lines/line.tsx # dashboards-observability/public/components/visualizations/charts/lines/line_type.ts # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/index.ts # Conflicts: # dashboards-observability/common/constants/shared.ts # dashboards-observability/common/types/explorer.ts * implemented fill opacity for line chart Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/visualizations/charts/lines/line.tsx # Conflicts: # dashboards-observability/public/components/event_analytics/utils/utils.tsx * changes for line width and fill opacity in bar mode and removed mode from chartOption Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/common/constants/shared.ts * updated bar mode opacity in line chart Signed-off-by: rinku-kumar-psl * refactored the config chart style code Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/index.ts # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/index.ts # Conflicts: # dashboards-observability/common/constants/shared.ts # dashboards-observability/common/types/explorer.ts * snapshot updated and code refactored Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/event_analytics/utils/utils.tsx * type added to new component Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_button_group.tsx # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_style_slider.tsx * review comments addressed Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/event_analytics/utils/utils.tsx # Conflicts: # dashboards-observability/common/constants/shared.ts * cypress test case added and resolve button label wraping issue Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/.cypress/integration/1_event_analytics.spec.js # dashboards-observability/.cypress/utils/event_constants.js # Conflicts: # dashboards-observability/.cypress/integration/1_event_analytics.spec.js # Conflicts: # dashboards-observability/.cypress/integration/1_event_analytics.spec.js * multi matrices changes for Line Signed-off-by: rinku-kumar-psl * dimensions and metrics UI changes for time-series Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/common/constants/explorer.ts # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/data_config_panel_item.tsx # dashboards-observability/public/components/event_analytics/explorer/visualizations/index.tsx * made data config pannel collapsable and initial fields render Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/data_config_panel_item.tsx # dashboards-observability/public/components/event_analytics/explorer/visualizations/index.tsx * code refactored Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/data_config_panel_item.tsx * snapshot updated and handled corner cases Signed-off-by: rinku-kumar-psl * code styling fixes and added TODO comment Signed-off-by: rinku-kumar-psl * table view: eui table replaced with ag-grid Signed-off-by: Ramneet Chopra * drag-drop issue fixed Signed-off-by: Ramneet Chopra * test case of data_table updated Signed-off-by: Ramneet Chopra * feedback comments resolved Signed-off-by: Ramneet Chopra * grid height issue:fixed Signed-off-by: Ramneet Chopra * column height, value getter for type double Signed-off-by: Ramneet Chopra * data_table elements moved to separate Signed-off-by: Ramneet Chopra * footer components Signed-off-by: Ramneet Chopra * cypress test cases for table view Signed-off-by: Ramneet Chopra * data config reviewed code added Signed-off-by: Deepak Nevde * Text correction Signed-off-by: Deepak Nevde * Conflicts resolved Signed-off-by: Deepak Nevde * enhancement for heatmap with new UI Signed-off-by: Shankha Das * line chart test cases Signed-off-by: Shankha Das * console logs removed Signed-off-by: Shankha Das * updated value options ui for treemap Signed-off-by: Mrunal Zambre * removed console Signed-off-by: Mrunal Zambre * sprint1-visualization-fixes. Signed-off-by: abasatwar * initialize default params for DimensonComponent and formatted the codes Signed-off-by: rinku-kumar-psl * code review changes done Signed-off-by: rinku-kumar-psl * added empty line at end. Signed-off-by: abasatwar Co-authored-by: rinku-kumar-psl Co-authored-by: Ramneet Chopra Co-authored-by: Deepak Nevde Co-authored-by: Shankha Das Co-authored-by: Mrunal Zambre * Bump moment from 2.29.2 to 2.29.4 in /dashboards-observability (#845) Bumps [moment](https://github.com/moment/moment) from 2.29.2 to 2.29.4. - [Release notes](https://github.com/moment/moment/releases) - [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md) - [Commits](https://github.com/moment/moment/compare/2.29.2...2.29.4) --- updated-dependencies: - dependency-name: moment dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Sprint2 (#47) (#868) * graph style section UI schema Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/visualizations/charts/lines/line_type.ts * changes for style mode and interpolation Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/visualizations/charts/lines/line_type.ts # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/index.ts # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/index.ts # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/index.ts * lineWidth integration for line mode Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/visualizations/charts/lines/line.tsx # dashboards-observability/public/components/visualizations/charts/lines/line_type.ts # Conflicts: # dashboards-observability/common/constants/shared.ts # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_style_slider.tsx * changes for Legend and Orientation in Line Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_button_group.tsx # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_legend.tsx # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/index.ts # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_style_slider.tsx * point size and Bar Alignment changes Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/visualizations/charts/lines/line.tsx # dashboards-observability/public/components/visualizations/charts/lines/line_type.ts # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/index.ts # Conflicts: # dashboards-observability/common/constants/shared.ts # dashboards-observability/common/types/explorer.ts * implemented fill opacity for line chart Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/visualizations/charts/lines/line.tsx # Conflicts: # dashboards-observability/public/components/event_analytics/utils/utils.tsx * changes for line width and fill opacity in bar mode and removed mode from chartOption Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/common/constants/shared.ts * updated bar mode opacity in line chart Signed-off-by: rinku-kumar-psl * refactored the config chart style code Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/index.ts # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/index.ts # Conflicts: # dashboards-observability/common/constants/shared.ts # dashboards-observability/common/types/explorer.ts * snapshot updated and code refactored Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/event_analytics/utils/utils.tsx * type added to new component Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_button_group.tsx # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_style_slider.tsx * review comments addressed Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/event_analytics/utils/utils.tsx # Conflicts: # dashboards-observability/common/constants/shared.ts * cypress test case added and resolve button label wraping issue Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/.cypress/integration/1_event_analytics.spec.js # dashboards-observability/.cypress/utils/event_constants.js # Conflicts: # dashboards-observability/.cypress/integration/1_event_analytics.spec.js # Conflicts: # dashboards-observability/.cypress/integration/1_event_analytics.spec.js * multi matrices changes for Line Signed-off-by: rinku-kumar-psl * dimensions and metrics UI changes for time-series Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/common/constants/explorer.ts # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/data_config_panel_item.tsx # dashboards-observability/public/components/event_analytics/explorer/visualizations/index.tsx * made data config pannel collapsable and initial fields render Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/data_config_panel_item.tsx # dashboards-observability/public/components/event_analytics/explorer/visualizations/index.tsx * code refactored Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/data_config_panel_item.tsx * snapshot updated and handled corner cases Signed-off-by: rinku-kumar-psl * code styling fixes and added TODO comment Signed-off-by: rinku-kumar-psl * sequence change for dimensions and metrics Signed-off-by: Deepak Nevde * Sprint1 (#14) * graph style section UI schema Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/visualizations/charts/lines/line_type.ts * changes for style mode and interpolation Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/visualizations/charts/lines/line_type.ts # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/index.ts # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/index.ts # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/index.ts * lineWidth integration for line mode Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/visualizations/charts/lines/line.tsx # dashboards-observability/public/components/visualizations/charts/lines/line_type.ts # Conflicts: # dashboards-observability/common/constants/shared.ts # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_style_slider.tsx * changes for Legend and Orientation in Line Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_button_group.tsx # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_legend.tsx # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/index.ts # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_style_slider.tsx * point size and Bar Alignment changes Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/visualizations/charts/lines/line.tsx # dashboards-observability/public/components/visualizations/charts/lines/line_type.ts # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/index.ts # Conflicts: # dashboards-observability/common/constants/shared.ts # dashboards-observability/common/types/explorer.ts * implemented fill opacity for line chart Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/visualizations/charts/lines/line.tsx # Conflicts: # dashboards-observability/public/components/event_analytics/utils/utils.tsx * changes for line width and fill opacity in bar mode and removed mode from chartOption Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/common/constants/shared.ts * updated bar mode opacity in line chart Signed-off-by: rinku-kumar-psl * refactored the config chart style code Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/index.ts # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/index.ts # Conflicts: # dashboards-observability/common/constants/shared.ts # dashboards-observability/common/types/explorer.ts * snapshot updated and code refactored Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/event_analytics/utils/utils.tsx * type added to new component Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_button_group.tsx # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_style_slider.tsx * review comments addressed Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/event_analytics/utils/utils.tsx # Conflicts: # dashboards-observability/common/constants/shared.ts * cypress test case added and resolve button label wraping issue Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/.cypress/integration/1_event_analytics.spec.js # dashboards-observability/.cypress/utils/event_constants.js # Conflicts: # dashboards-observability/.cypress/integration/1_event_analytics.spec.js # Conflicts: # dashboards-observability/.cypress/integration/1_event_analytics.spec.js * multi matrices changes for Line Signed-off-by: rinku-kumar-psl * dimensions and metrics UI changes for time-series Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/common/constants/explorer.ts # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/data_config_panel_item.tsx # dashboards-observability/public/components/event_analytics/explorer/visualizations/index.tsx * made data config pannel collapsable and initial fields render Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/data_config_panel_item.tsx # dashboards-observability/public/components/event_analytics/explorer/visualizations/index.tsx * code refactored Signed-off-by: rinku-kumar-psl # Conflicts: # dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/data_config_panel_item.tsx * snapshot updated and handled corner cases Signed-off-by: rinku-kumar-psl * code styling fixes and added TODO comment Signed-off-by: rinku-kumar-psl * data config reviewed code added Signed-off-by: Deepak Nevde * Text correction Signed-off-by: Deepak Nevde * Conflicts resolved Signed-off-by: Deepak Nevde * table view: eui table replaced with ag-grid Signed-off-by: Ramneet Chopra * drag-drop issue fixed Signed-off-by: Ramneet Chopra * test case of data_table updated Signed-off-by: Ramneet Chopra * feedback comments resolved Signed-off-by: Ramneet Chopra * grid height issue:fixed Signed-off-by: Ramneet Chopra * column height, value getter for type double Signed-off-by: Ramneet Chopra * data_table elements moved to separate Signed-off-by: Ramneet Chopra * footer components Signed-off-by: Ramneet Chopra * cypress test cases for table view Signed-off-by: Ramneet Chopra * enhancement for heatmap with new UI Signed-off-by: Shankha Das * line chart test cases Signed-off-by: Shankha Das * console logs removed Signed-off-by: Shankha Das * updated value options ui for treemap Signed-off-by: Mrunal Zambre * removed console Signed-off-by: Mrunal Zambre * Fixes of sprint1 for new ui implementation (#12) Signed-off-by: ruchika-narang Co-authored-by: rinku-kumar-psl Co-authored-by: Deepak Nevde Co-authored-by: Ramneet Chopra Co-authored-by: Shankha Das Co-authored-by: Mrunal Zambre Co-authored-by: ruchika-narang <79983862+ruchika-narang@users.noreply.github.com> * Latest code added Signed-off-by: Deepak Nevde * Collapsapable button position change to top Signed-off-by: Deepak Nevde * table view: eui table replaced with ag-grid Signed-off-by: Ramneet Chopra * drag-drop issue fixed Signed-off-by: Ramneet Chopra * test case of data_table updated Signed-off-by: Ramneet Chopra * feedback comments resolved Signed-off-by: Ramneet Chopra * grid height issue:fixed Signed-off-by: Ramneet Chopra * column height, value getter for type double Signed-off-by: Ramneet Chopra * data_table elements moved to separate Signed-off-by: Ramneet Chopra * footer components Signed-off-by: Ramneet Chopra * cypress test cases for table view Signed-off-by: Ramneet Chopra * data config reviewed code added Signed-off-by: Deepak Nevde * Text correction Signed-off-by: Deepak Nevde * Conflicts resolved Signed-off-by: Deepak Nevde * enhancement for heatmap with new UI Signed-off-by: Shankha Das * line chart test cases Signed-off-by: Shankha Das * console logs removed Signed-off-by: Shankha Das * updated value options ui for treemap Signed-off-by: Mrunal Zambre * removed console Signed-off-by: Mrunal Zambre * sprint1-visualization-fixes. Signed-off-by: abasatwar * added colorscale config options for treemap Signed-off-by: Mrunal Zambre * code review comment resolved Signed-off-by: Deepak Nevde * added config option to sort treemap sectors Signed-off-by: Mrunal Zambre * changes to resctct duplicte options Signed-off-by: rinku-kumar-psl * Updated and Added test scripts for Treemap chart along with data config and worked on reassembling the event_constants.js file Signed-off-by: Pratibha Pandey * Removed unwanted code Signed-off-by: Pratibha Pandey * implementation of histogram with new UI Signed-off-by: ruchika-narang * gauge chart added Signed-off-by: Ramneet Chopra * Pie chart enhancement, multi labels change Signed-off-by: Deepak Nevde * threshold text fix Signed-off-by: Ramneet Chopra * cypress test cases added Signed-off-by: Ramneet Chopra * Code review comment resolved Signed-off-by: Deepak Nevde * reset fixed, unused imports removed, PR checks fixed Signed-off-by: Ramneet Chopra * single timestamp dimension, no data dsiplay, label rotate, label/legend size Signed-off-by: Ramneet Chopra * layout fixed for primary y axis Signed-off-by: Ramneet Chopra * change of screen size of no data found and visualization Signed-off-by: Shankha Das * changes for restriction of duplicate fields on Data Config and only numeric field selection to metrics Signed-off-by: rinku-kumar-psl * line label replaced with time series Signed-off-by: Ramneet Chopra * snapshot tests Signed-off-by: Ramneet Chopra * Removed unwanted spaces Signed-off-by: Pratibha Pandey * initialize default params for DimensonComponent and formatted the codes Signed-off-by: rinku-kumar-psl * pr review feedback Signed-off-by: Ramneet Chopra * updated preview functionality for charts Signed-off-by: Mrunal Zambre * updated snapshots Signed-off-by: Mrunal Zambre * Worked on review comments Signed-off-by: Pratibha Pandey * changed variable names Signed-off-by: Mrunal Zambre * code review changes done Signed-off-by: rinku-kumar-psl * added empty line at end. Signed-off-by: abasatwar * updated variable names Signed-off-by: Mrunal Zambre * updated snapshots Signed-off-by: Mrunal Zambre * Added pie chart test cases Signed-off-by: Pratibha Pandey * updated snapshots Signed-off-by: ruchika-narang * Removed consoles Signed-off-by: ruchika-narang * Worked on conflicts Signed-off-by: Pratibha Pandey * color selector added Signed-off-by: Ramneet Chopra * updated snapshots Signed-off-by: ruchika-narang * UI updated as recommended Signed-off-by: Shankha Das * Added legend to heatmap Signed-off-by: ruchika-narang * data_config_panel_item timeseries code removed Signed-off-by: Ramneet Chopra * bar chart with multiple dimension and metrics, timestamp Signed-off-by: abasatwar * limit no. of gauge option added Signed-off-by: Ramneet Chopra * threshold limit added, gauge default parameters moved to constants/explorer Signed-off-by: Ramneet Chopra * legend placement added Signed-off-by: Ramneet Chopra * yarn test Signed-off-by: Ramneet Chopra * snapshot updated Signed-off-by: abasatwar * snapshot updated Signed-off-by: abasatwar * Resolving issues after removal of preview functionality Signed-off-by: ruchika-narang * updated snapshots Signed-off-by: ruchika-narang * Updated snapshots Signed-off-by: ruchika-narang * changes for default timestamp data for time-series and corner cases Signed-off-by: rinku-kumar-psl * code review comment addressed Signed-off-by: rinku-kumar-psl * pr feedback Signed-off-by: Ramneet Chopra * dimensions, metrics length checks refined Signed-off-by: Ramneet Chopra * updated as per review comments Signed-off-by: abasatwar * fixing of data config corner cases Signed-off-by: rinku-kumar-psl * snapshot updated Signed-off-by: abasatwar * pr feedback Signed-off-by: Ramneet Chopra Co-authored-by: rinku-kumar-psl Co-authored-by: Deepak Nevde Co-authored-by: Ramneet Chopra Co-authored-by: Shankha Das Co-authored-by: Mrunal Zambre Co-authored-by: ruchika-narang <79983862+ruchika-narang@users.noreply.github.com> Co-authored-by: Pratibha Pandey Co-authored-by: ruchika-narang Co-authored-by: Shankha Das Co-authored-by: rinku-kumar-psl Co-authored-by: Deepak Nevde Co-authored-by: Ramneet Chopra Co-authored-by: Shankha Das Co-authored-by: Mrunal Zambre Co-authored-by: ruchika-narang <79983862+ruchika-narang@users.noreply.github.com> Co-authored-by: Pratibha Pandey Co-authored-by: ruchika-narang Co-authored-by: Shankha Das * Staging for version increment automation (#848) * Version increment automation Signed-off-by: pgodithi * Version increment automation Signed-off-by: pgodithi * Version increment automation: task rename updateVersion Signed-off-by: pgodithi * Release Notes for 2.2.0 (#920) Signed-off-by: vamsi-amazon * Sprint2 code refactoring and warning minimization (#904) * changes to remove for unique key warning on Dom and code refactoring sprint2 Signed-off-by: rinku-kumar-psl * snapshot updated Signed-off-by: rinku-kumar-psl * no_results.test.tsx snapshot updated Signed-off-by: rinku-kumar-psl * added empty line at the end of the file Signed-off-by: rinku-kumar-psl * Bump to 2.2.0 (#918) (#928) * Bump to 2.2.0 Signed-off-by: vamsi-amazon * Update snapshots Signed-off-by: Joshua Li Co-authored-by: Joshua Li (cherry picked from commit da9e9c013e13e03afd09d324e06e025dbb207f0c) Co-authored-by: vamsi-amazon * Sprint3 alpha (#64) (#931) * Sprint3 alpha (#64) Signed-off-by: abasatwar * issues resolved and snapshots updated Signed-off-by: Shankha Das * 2 snapshots updated Signed-off-by: Shankha Das Signed-off-by: abasatwar Signed-off-by: Shankha Das Co-authored-by: Shankha Das * [ENHANCEMENT]: Movement of temporary visualization panel data into userconfig (#929) * Worked on movement of data to userConfigs Signed-off-by: ruchika-narang * Updated snapshots Signed-off-by: ruchika-narang * Updated snapshots Signed-off-by: ruchika-narang * Updated snapshots for failing checks Signed-off-by: ruchika-narang * resolved PR comments Signed-off-by: Shankha Das * visType added Signed-off-by: Shankha Das Signed-off-by: ruchika-narang Signed-off-by: Shankha Das Co-authored-by: Shankha Das * cypress test case for horizontal bar (#935) Signed-off-by: nidhisinghai Signed-off-by: nidhisinghai Co-authored-by: nidhisinghai * build error resolve (#923) Signed-off-by: nidhisinghai Signed-off-by: nidhisinghai Co-authored-by: nidhisinghai * [BUG] : Dimensions getting removed when no timeseries field is present (#944) * Fix for app crash and dimension disaapearing Signed-off-by: ruchika-narang * optimized the code and updated snapshots Signed-off-by: Shankha Das * resolved PR comments Signed-off-by: Shankha Das Signed-off-by: ruchika-narang Signed-off-by: Shankha Das Co-authored-by: Shankha Das * cypress test case for scatter chart (#930) Signed-off-by: nidhisinghai Signed-off-by: nidhisinghai Co-authored-by: nidhisinghai * Bug/logs-view-data-config: Added Columns in Data Configuration for Logs View (#955) * Fix for app crash and dimension disaapearing Signed-off-by: ruchika-narang * optimized the code and updated snapshots Signed-off-by: Shankha Das * resolved PR comments Signed-off-by: Shankha Das * resolved data configuration bug for logs view Signed-off-by: Shankha Das Signed-off-by: ruchika-narang Signed-off-by: Shankha Das Co-authored-by: ruchika-narang * Feature/tooltip-section: Added tooltip options for various charts (#952) * Fix for app crash and dimension disaapearing Signed-off-by: ruchika-narang * optimized the code and updated snapshots Signed-off-by: Shankha Das * resolved PR comments Signed-off-by: Shankha Das * added tooltip options Signed-off-by: Shankha Das * removed log Signed-off-by: Shankha Das Signed-off-by: ruchika-narang Signed-off-by: Shankha Das Co-authored-by: ruchika-narang * resolved color theme issue (#960) Signed-off-by: Shankha Das Signed-off-by: Shankha Das * Renamed data panel to style (#964) Signed-off-by: ruchika-narang Signed-off-by: ruchika-narang * Query Manager (#915) * Bump prismjs from 1.25.0 to 1.27.0 in /dashboards-observability (#508) (#574) Bumps [prismjs](https://github.com/PrismJS/prism) from 1.25.0 to 1.27.0. - [Release notes](https://github.com/PrismJS/prism/releases) - [Changelog](https://github.com/PrismJS/prism/blob/master/CHANGELOG.md) - [Commits](https://github.com/PrismJS/prism/compare/v1.25.0...v1.27.0) --- updated-dependencies: - dependency-name: prismjs dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> (cherry picked from commit b4f491a16f81725db6d63f604a3020e5b89dd720) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * change to support java 8 in compile and runtime (#575) (#576) Signed-off-by: Zhongnan Su (cherry picked from commit 5c43e9dac336b37fa4f6f002709e0965015383aa) Co-authored-by: Zhongnan Su * Add 1.3.0 release notes (#580) (#582) Signed-off-by: Eugene Lee * query manager Signed-off-by: Eric Wei * removed aggregations from dimensions Signed-off-by: Eric Wei * qm improvements Signed-off-by: Eric Wei * types/code cleanups/error corrections Signed-off-by: Eric Wei * fixed a undefined issue Signed-off-by: Eric Wei * qm fixes for query builder Signed-off-by: Eric Wei * viz timestamp selector Signed-off-by: Eric Wei * use postinstall for antlr output files Signed-off-by: Eric Wei * query building fixes Signed-off-by: Eric Wei * updated snapshots Signed-off-by: Eric Wei * remove output files Signed-off-by: Eric Wei * cherry-pick from integration branch Signed-off-by: Eric Wei * explicitly remove generated files Signed-off-by: Eric Wei Signed-off-by: Eugene Lee Signed-off-by: Eric Wei Co-authored-by: opensearch-trigger-bot[bot] <98922864+opensearch-trigger-bot[bot]@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Zhongnan Su * Query manager integration (#987) * Bump prismjs from 1.25.0 to 1.27.0 in /dashboards-observability (#508) (#574) Bumps [prismjs](https://github.com/PrismJS/prism) from 1.25.0 to 1.27.0. - [Release notes](https://github.com/PrismJS/prism/releases) - [Changelog](https://github.com/PrismJS/prism/blob/master/CHANGELOG.md) - [Commits](https://github.com/PrismJS/prism/compare/v1.25.0...v1.27.0) --- updated-dependencies: - dependency-name: prismjs dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> (cherry picked from commit b4f491a16f81725db6d63f604a3020e5b89dd720) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * change to support java 8 in compile and runtime (#575) (#576) Signed-off-by: Zhongnan Su (cherry picked from commit 5c43e9dac336b37fa4f6f002709e0965015383aa) Co-authored-by: Zhongnan Su * Add 1.3.0 release notes (#580) (#582) Signed-off-by: Eugene Lee * query manager Signed-off-by: Eric Wei * removed aggregations from dimensions Signed-off-by: Eric Wei * qm improvements Signed-off-by: Eric Wei * types/code cleanups/error corrections Signed-off-by: Eric Wei * qm fixes for query builder Signed-off-by: Eric Wei * viz timestamp selector Signed-off-by: Eric Wei * query manager integration with bar step 1 Signed-off-by: Eric Wei * span fix Signed-off-by: Eric Wei * use postinstall for antlr output files Signed-off-by: Eric Wei * query building fix Signed-off-by: Eric Wei * updated snapshots Signed-off-by: Eric Wei * fixed file not found issue Signed-off-by: Eric Wei * remove output files Signed-off-by: Eric Wei Signed-off-by: Eugene Lee Signed-off-by: Eric Wei Co-authored-by: opensearch-trigger-bot[bot] <98922864+opensearch-trigger-bot[bot]@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Zhongnan Su * Bug/color-theme-options: Resolved color theme issue #960 (#971) * Resolved to show only metrics in the dropdown instead of all the fields Signed-off-by: ruchika-narang * Removed unncessary import Signed-off-by: ruchika-narang * Updated snapshots after rebasing with main Signed-off-by: ruchika-narang Signed-off-by: ruchika-narang * cypress box plot (#983) * cypress box plot Signed-off-by: nidhisinghai * cypress box plot new Signed-off-by: nidhisinghai Signed-off-by: nidhisinghai Co-authored-by: nidhisinghai * fix: reset fontSize on click of reset (#986) Signed-off-by: SivaprasadAluri Signed-off-by: SivaprasadAluri * Cypress automation for Logs view (#995) * Added cypress scripts for Logs view Signed-off-by: Pratibha Pandey * Added screenshots files Signed-off-by: Pratibha Pandey * Added snapshots files Signed-off-by: Pratibha Pandey Signed-off-by: Pratibha Pandey * release notes for 2.3.0 (#1003) Signed-off-by: Eric Wei Signed-off-by: Eric Wei * Resolving conflicts after merge of antlr code (#1021) * Resolved initial render of bar chart Signed-off-by: ruchika-narang * Made the charts workable after merging of antlr code to main Signed-off-by: ruchika-narang * Changes of condition for userconfigs Signed-off-by: ruchika-narang * Worked on line chart, treemap with the new antlr code Signed-off-by: ruchika-narang Signed-off-by: ruchika-narang * tooltip for multiple traces: fixed (#1019) Signed-off-by: Ramneet Chopra Signed-off-by: Ramneet Chopra * Cypress automation for Pie chart (#1017) * Added cypress scripts for Logs view Signed-off-by: Pratibha Pandey * Added screenshots files Signed-off-by: Pratibha Pandey * Added snapshots files Signed-off-by: Pratibha Pandey * Added Pie chart file and cypress test cases Signed-off-by: Pratibha Pandey * Small name change Signed-off-by: Pratibha Pandey * Added pie chart test cases Signed-off-by: Pratibha Pandey * Added snapshots files Signed-off-by: Pratibha Pandey Signed-off-by: Pratibha Pandey * fix#921-README-forum-link-observability (#999) Signed-off-by: cwillum Signed-off-by: cwillum * Update developer guide (#961) * Update developer guide Signed-off-by: Joshua Li * Update wording Signed-off-by: Joshua Li Signed-off-by: Joshua Li * Cypress Automation for Stats Chart (#1016) * Added new branch code for cypress stats chart Signed-off-by: Naman Chaturvedi * Added screenshots files Signed-off-by: Naman Chaturvedi Signed-off-by: Naman Chaturvedi * Jest test cases (#985) * gauge chart test case added, event-anlytics utils test case added Signed-off-by: Ramneet Chopra * build error resolve: updated snapshots Signed-off-by: Ramneet Chopra Signed-off-by: Ramneet Chopra * [Bug]: Date Histogram 2 way sync issue fix (#1033) * Date-histogram 2 way sync issue fixed Signed-off-by: Dipra Aich * Test run snapshot update changes Signed-off-by: Dipra Aich Signed-off-by: Dipra Aich * [Feature]: Heatmap 2way sync (#1031) * Heatmap doesnt render if more than 1 metric or 2 dimensions are added Signed-off-by: Dipra Aich * Test cases resolution Signed-off-by: Dipra Aich * Eliminated unnecessary commented code Signed-off-by: Dipra Aich Signed-off-by: Dipra Aich * fixed backspace crashing UI issue (#1034) Signed-off-by: Vishal Kushwah Signed-off-by: Vishal Kushwah Co-authored-by: Vishal Kushwah * [Feature]: Timeseries/Scatter 2 way sync (#1030) * Fixed 2 way sync issues for line Signed-off-by: ruchika-narang * Updated snapshots Signed-off-by: ruchika-narang * Removed extra line Signed-off-by: ruchika-narang Signed-off-by: ruchika-narang * Move qm to plugins #1023 (#1036) * move qm: in progress Signed-off-by: Ramneet Chopra * qm instances prop adedd + yarn test Signed-off-by: Ramneet Chopra * main rebase Signed-off-by: Ramneet Chopra * explorereFields type fixed Signed-off-by: Ramneet Chopra * querymanager types added, renamed to qm Signed-off-by: Ramneet Chopra Signed-off-by: Ramneet Chopra * Pie chart 2way sync (#1029) * mode bug fixed code: added, 2 way changes testing: in progress Signed-off-by: Ramneet Chopra * pie two sync done Signed-off-by: Ramneet Chopra * yarn test Signed-off-by: Ramneet Chopra * pr feedback Signed-off-by: Ramneet Chopra * spaces added in between lines Signed-off-by: Ramneet Chopra * usememo removed from xlables Signed-off-by: Ramneet Chopra Signed-off-by: Ramneet Chopra * [BUG]: Revert code for treemap and histogram. (#1037) * Revert code for histogram and treemap after antlr merge because of crashes in app Signed-off-by: ruchika-narang * Fixes after rebasing with main and test cases failing Signed-off-by: ruchika-narang * Removed commented code Signed-off-by: ruchika-narang * Working on review comments, renaming metrics to series Signed-off-by: ruchika-narang … * fix column spacing and pattern table highlighting (#1218) * fix column spacing and pattern table highlighting Signed-off-by: Derek Ho * clean up PR Signed-off-by: Derek Ho * add comments on regex Signed-off-by: Derek Ho Signed-off-by: Derek Ho * Merge feature/metrics branch to 2.4 (#1234) * Adding Empty View and Side Bar (#1154) * Added Metrics Home Page and date picker Signed-off-by: Sean Li * Minor changes Signed-off-by: Sean Li * Adding empty view and sidebar Signed-off-by: Sean Li Signed-off-by: Sean Li * added empty view Signed-off-by: Shenoy Pratik * Adding Sidebar to Metrics Home (#1171) * Added Metrics Home Page and date picker Signed-off-by: Sean Li * Minor changes Signed-off-by: Sean Li * Adding empty view and sidebar Signed-off-by: Sean Li * Adding metrics reducer to redux store Signed-off-by: Sean Li * Adding functioning sidebar to home page Signed-off-by: Sean Li * Removing unnecessary function Signed-off-by: Sean Li Signed-off-by: Sean Li * [Events] Save panel (#1185) * Save panel Signed-off-by: Kavitha Conjeevaram Mohan * remove comments Signed-off-by: Kavitha Conjeevaram Mohan * remove milliseconds from constants Signed-off-by: Kavitha Conjeevaram Mohan Signed-off-by: Kavitha Conjeevaram Mohan * [Metrics] Adding API Connection to Metrics Sidebar (#1211) * Adding API connects Signed-off-by: Sean Li * Addressing constant chagne Signed-off-by: Sean Li Signed-off-by: Sean Li * Metrics api events (#1214) * Add schema to router in events Signed-off-by: Kavitha Conjeevaram Mohan * update Saved Visualization in backend to include metrics Signed-off-by: Kavitha Conjeevaram Mohan * add SelectedLabels class Signed-off-by: Kavitha Conjeevaram Mohan * Add Token class in saved visualization Signed-off-by: Kavitha Conjeevaram Mohan * update test Signed-off-by: Kavitha Conjeevaram Mohan * fix frontend API data Signed-off-by: Kavitha Conjeevaram Mohan * update default subtype state to viz Signed-off-by: Kavitha Conjeevaram Mohan * disabling labels on front end Signed-off-by: Kavitha Conjeevaram Mohan * remove console.log comments Signed-off-by: Kavitha Conjeevaram Mohan * remove logger comments Signed-off-by: Kavitha Conjeevaram Mohan Signed-off-by: Kavitha Conjeevaram Mohan * Adding visualizations panel to metrics (#1222) * adding vizualization components Signed-off-by: Shenoy Pratik * added metrics layout to redux Signed-off-by: Shenoy Pratik * removed comments and updated constants Signed-off-by: Shenoy Pratik * remove excess console.log Signed-off-by: Shenoy Pratik Signed-off-by: Shenoy Pratik * added dummy search field, panel push button (#1227) Signed-off-by: Shenoy Pratik Signed-off-by: Shenoy Pratik * Show metrics in events homepage (#1232) * Add Metrics to events home page and fix jest test Signed-off-by: Kavitha Conjeevaram Mohan * fix save_query_table jest test Signed-off-by: Kavitha Conjeevaram Mohan * fix backend test Signed-off-by: Kavitha Conjeevaram Mohan Signed-off-by: Kavitha Conjeevaram Mohan * Sidepanel update (#1230) * Updating sidepanel Signed-off-by: Sean Li * Removing mock metrics Signed-off-by: Sean Li * Allowing horizontal scroll on metric lists Signed-off-by: Sean Li * Minor changes Signed-off-by: Sean Li Signed-off-by: Sean Li * add metrics to nav bar Signed-off-by: Shenoy Pratik Signed-off-by: Sean Li Signed-off-by: Shenoy Pratik Signed-off-by: Kavitha Conjeevaram Mohan Co-authored-by: Sean Li Co-authored-by: Kavitha Conjeevaram Mohan * [2.4] Add anomaly count and config to patterns table (#1216) Signed-off-by: Joshua Li * Fix filtered pattern selection (#1236) Signed-off-by: Joshua Li * Fixes for BWC issues, grammar updating (#1235) * removed duplicate/unused availability Signed-off-by: Eric Wei * no user config support Signed-off-by: Eric Wei * updated grammar Signed-off-by: Eric Wei * BWC support for user_configs in saved visualziations Signed-off-by: Eric Wei * BWC support in panels Signed-off-by: Eric Wei * use const Signed-off-by: Eric Wei * update snapshots Signed-off-by: Eric Wei Signed-off-by: Eric Wei * Minor UI changes for sidebar (#1237) Signed-off-by: Sean Li Signed-off-by: Sean Li * Update minimatch version to 3.0.5 (#1228) * adding save functionality to metrics (#1241) Signed-off-by: Shenoy Pratik Signed-off-by: Shenoy Pratik * Remove unnecessary calls and errors in patterns (#1243) Signed-off-by: Joshua Li * Update detekt version (#1226) Signed-off-by: Rupal Mahajan * metrics visualization regression fix (#1244) Signed-off-by: Shenoy Pratik Signed-off-by: Shenoy Pratik * metrics bug fixes #1 (#1248) Signed-off-by: Shenoy Pratik Signed-off-by: Shenoy Pratik * Persist redux state in browser (#1178) (#1223) * persist redux state Signed-off-by: Eric Wei * switch to session storage Signed-off-by: Eric Wei Signed-off-by: Eric Wei (cherry picked from commit ceac84d51f85492ce4e6a263c583521ceebadd64) Co-authored-by: Eric Wei * Minor UI changes for sidebar and update to PPL request (#1246) Signed-off-by: Sean Li Signed-off-by: Sean Li * Backtick supports, issues fixes (#1250) * backtick supports Signed-off-by: Eric Wei * line to show timestamp field only for dimensions Signed-off-by: Eric Wei * issues fixes for all viz, add error message widget, no dimension rendering Signed-off-by: Eric Wei * pie backtick fix Signed-off-by: Eric Wei * update snapshots Signed-off-by: Eric Wei Signed-off-by: Eric Wei * Prometheus Mappings Fix (#1242) Signed-off-by: Vamsi Manohar Signed-off-by: Vamsi Manohar * Use in-memory count for total hits in patterns ratio (#1254) Signed-off-by: Joshua Li * Metrics bug fix and unit tests (#1253) * updated redux for metrics visualizations Signed-off-by: Shenoy Pratik * adding unit tests to metrics Signed-off-by: Shenoy Pratik Signed-off-by: Shenoy Pratik * Fix metrics switch (#1247) * switch works Signed-off-by: Kavitha Conjeevaram Mohan * change to euiselect Signed-off-by: Kavitha Conjeevaram Mohan * add merge confilct code Signed-off-by: Kavitha Conjeevaram Mohan * change order getMainContentTabs Signed-off-by: Kavitha Conjeevaram Mohan Signed-off-by: Kavitha Conjeevaram Mohan * remove span months/quarters (#1257) Signed-off-by: Shenoy Pratik Signed-off-by: Shenoy Pratik * Release notes for 2.4.0 (#1259) (#1263) Signed-off-by: Rupal Mahajan (cherry picked from commit eef1979aeb083b25809be2873c76e23f77a22581) Co-authored-by: Rupal Mahajan * remove metrics unit of measures (#1261) Signed-off-by: Shenoy Pratik Signed-off-by: Shenoy Pratik * Fix for app analytics crash (#1255) * fix for app analytics crash Signed-off-by: Eric Wei * updated snapshots Signed-off-by: Eric Wei * fix saved object issue and remove config options not in release Signed-off-by: Eric Wei * update snapshots Signed-off-by: Eric Wei Signed-off-by: Eric Wei * Remove measure field (#1258) * remove measure Signed-off-by: Kavitha Conjeevaram Mohan * remove comments Signed-off-by: Kavitha Conjeevaram Mohan * update jest test Signed-off-by: Kavitha Conjeevaram Mohan Signed-off-by: Kavitha Conjeevaram Mohan * [Metrics] Name Change (#1260) * Changing Metrics to Metrics Analytics Signed-off-by: Sean Li * Changing Metrics to Metrics Analytics Signed-off-by: Sean Li * Update dashboards test snapshots Signed-off-by: Sean Li Signed-off-by: Sean Li * Remove runtime antlr - ( workaround for 2.4 release. - we need to revert this ) (#1264) * antlr changes Signed-off-by: Eric Wei * updated snapshots Signed-off-by: Eric Wei Signed-off-by: Eric Wei * fix bug by keeping track of interval within the explorer (#1266) * [2.x] Add log pattern table (#1187) (#1212) Signed-off-by: Joshua Li * Release notes for 2.4.0 (#1259) (#1262) Signed-off-by: Rupal Mahajan (cherry picked from commit eef1979aeb083b25809be2873c76e23f77a22581) Co-authored-by: Rupal Mahajan * fix bug by keeping track of interval within the explorer Signed-off-by: Derek Ho * remove unecessary import Signed-off-by: Derek Ho * fix merge conflicts Signed-off-by: Derek Ho * fix test Signed-off-by: Derek Ho * fix test Signed-off-by: Derek Ho * fix rounding on datemath.parse and get rid of duplicate code Signed-off-by: Derek Ho * address pr review comments Signed-off-by: Derek Ho * replace length check wiht regex Signed-off-by: Derek Ho * resolve merge issues Signed-off-by: Derek Ho Signed-off-by: Joshua Li Signed-off-by: Derek Ho Co-authored-by: Joshua Li Co-authored-by: opensearch-trigger-bot[bot] <98922864+opensearch-trigger-bot[bot]@users.noreply.github.com> Co-authored-by: Rupal Mahajan * added one missed conflicts resolving Signed-off-by: Eric Wei Signed-off-by: Shenoy Pratik Signed-off-by: Eugene Lee Signed-off-by: Joshua Li Signed-off-by: Mrunal Zambre Signed-off-by: Kawika Avilla Signed-off-by: Zhongnan Su Signed-off-by: vamsi-amazon Signed-off-by: rinku-kumar-psl Signed-off-by: Pratibha Pandey Signed-off-by: Deepak Nevde Signed-off-by: Kavitha Conjeevaram Mohan Signed-off-by: pgodithi Signed-off-by: abasatwar Signed-off-by: Shankha Das Signed-off-by: ruchika-narang Signed-off-by: nidhisinghai Signed-off-by: Eric Wei Signed-off-by: SivaprasadAluri Signed-off-by: Ramneet Chopra Signed-off-by: cwillum Signed-off-by: Naman Chaturvedi Signed-off-by: Dipra Aich Signed-off-by: Vishal Kushwah Signed-off-by: Koustubh Karmalkar Signed-off-by: Saisanju Sreevalsakumar Signed-off-by: harshada.lingayat Signed-off-by: Abhay Pandey Signed-off-by: Derek Ho Signed-off-by: prudhvigodithi Signed-off-by: Anand6Kumar Signed-off-by: Sean Li Signed-off-by: Rupal Mahajan Signed-off-by: Vamsi Manohar Co-authored-by: opensearch-trigger-bot[bot] <98922864+opensearch-trigger-bot[bot]@users.noreply.github.com> Co-authored-by: Joshua Li Co-authored-by: Shenoy Pratik Co-authored-by: Eugene Lee Co-authored-by: Mrunal Zambre <79525611+mrunal-z@users.noreply.github.com> Co-authored-by: Kawika Avilla Co-authored-by: Zhongnan Su Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: vamsi-amazon <99925918+vamsi-amazon@users.noreply.github.com> Co-authored-by: Pratibha <103417380+pratibhapandey16@users.noreply.github.com> Co-authored-by: Deepak Nevde Co-authored-by: Nidhi Singhai Co-authored-by: Rinku Kumar <103560761+rinku-kumar-psl@users.noreply.github.com> Co-authored-by: Pratibha Pandey Co-authored-by: deepaknevdepsl <102342039+deepaknevdepsl@users.noreply.github.com> Co-authored-by: ruchika-narang <79983862+ruchika-narang@users.noreply.github.com> Co-authored-by: Subrat Pattnaik Co-authored-by: Kavitha Conjeevaram Mohan Co-authored-by: abasatwar Co-authored-by: rinku-kumar-psl Co-authored-by: Ramneet Chopra Co-authored-by: Shankha Das Co-authored-by: Mrunal Zambre Co-authored-by: ruchika-narang Co-authored-by: Shankha Das Co-authored-by: Prudhvi Godithi Co-authored-by: vamsi-amazon Co-authored-by: nidhisinghai <103416937+nidhisinghai@users.noreply.github.com> Co-authored-by: nidhisinghai Co-authored-by: shankha-das <93648901+shankha-das@users.noreply.github.com> Co-authored-by: SivaprasadAluri <110654651+SivaprasadAluri@users.noreply.github.com> Co-authored-by: ramneet-persistent <105915936+ramneet-persistent@users.noreply.github.com> Co-authored-by: Chris Moore <107723039+cwillum@users.noreply.github.com> Co-authored-by: NamanChaturvedi13 <78581256+NamanChaturvedi13@users.noreply.github.com> Co-authored-by: DipraAich <61182817+DipraAich@users.noreply.github.com> Co-authored-by: vkushwah <77838340+vkushwah@users.noreply.github.com> Co-authored-by: Vishal Kushwah Co-authored-by: Koustubh5585 <42600229+Koustubh5585@users.noreply.github.com> Co-authored-by: saisanju-s <43745923+saisanju-s@users.noreply.github.com> Co-authored-by: harshada8989 <60776775+harshada8989@users.noreply.github.com> Co-authored-by: Abhay Kumar Pandey <102669033+abhaypersistent@users.noreply.github.com> Co-authored-by: Derek Ho Co-authored-by: Anand6Kumar <97474549+Anand6Kumar@users.noreply.github.com> Co-authored-by: Sean Li Co-authored-by: Rupal Mahajan --- ...-observability-test-and-build-workflow.yml | 13 +- ...-observability-test-and-build-workflow.yml | 24 +- DEVELOPER_GUIDE.md | 17 +- README.md | 2 +- .../integration/1_event_analytics.spec.js | 498 +- .../.cypress/integration/2_notebooks.spec.js | 34 + .../.cypress/integration/3_panels.spec.js | 33 +- .../4_trace_analytics_dashboard.spec.js | 105 + .../5_trace_analytics_services.spec.js | 160 +- .../6_trace_analytics_traces.spec.js | 40 + .../10_scatter_chart.spec.js | 228 + .../11_horizontalBar_chart.spec.js | 244 + .../12_boxPlot_chart.spec.js | 248 + .../VisualizationCharts/13_logsView.spec.js | 241 + .../13_stats_chart.spec.js | 211 + .../VisualizationCharts/7_pie_chart.spec.js | 202 + .../9_coordinateMap_chart.spec.js | 195 + .../.cypress/utils/constants.js | 21 + .../.cypress/utils/event_constants.js | 199 +- .../common/constants/colors.ts | 188 + .../common/constants/data_table.ts | 16 + .../common/constants/explorer.ts | 227 +- .../common/constants/metrics.ts | 26 + .../common/constants/shared.ts | 92 +- .../adaptors/case_insensitive_char_stream.ts | 60 + .../antlr/grammar/OpenSearchPPLLexer.g4 | 371 + .../antlr/grammar/OpenSearchPPLParser.g4 | 572 + .../antlr/output/OpenSearchPPLLexer.interp | 945 + .../antlr/output/OpenSearchPPLLexer.tokens | 603 + .../antlr/output/OpenSearchPPLLexer.ts | 2072 ++ .../antlr/output/OpenSearchPPLParser.interp | 728 + .../antlr/output/OpenSearchPPLParser.tokens | 603 + .../antlr/output/OpenSearchPPLParser.ts | 11912 ++++++++++ .../output/OpenSearchPPLParserListener.ts | 1557 ++ .../output/OpenSearchPPLParserVisitor.ts | 1038 + .../query_manager/antlr/ppl_syntax_parser.ts | 30 + .../ast/builder/query_builder.ts | 8 + .../ast/builder/stats_ast_builder.ts | 232 + .../ast/builder/stats_builder.ts | 136 + .../ast/expression/AggregateFunction.ts | 37 + .../ast/expression/AggregateTerm.ts | 32 + .../query_manager/ast/expression/field.ts | 20 + .../query_manager/ast/expression/group_by.ts | 35 + .../query_manager/ast/expression/index.ts | 6 + .../query_manager/ast/expression/span.ts | 28 + .../ast/expression/spanExpression.ts | 30 + .../common/query_manager/ast/index.ts | 6 + .../common/query_manager/ast/node.ts | 31 + .../query_manager/ast/tree/aggragations.ts | 58 + .../common/query_manager/ast/types/index.ts | 17 + .../common/query_manager/ast/types/stats.ts | 75 + .../common/query_manager/index.ts | 6 + .../common/query_manager/ppl_query_manager.ts | 17 + .../query_manager/query_builder/index.ts | 6 + .../query_builder/ppl_query_builder.ts | 39 + .../query_manager/query_parser/index.ts | 6 + .../query_parser/ppl_query_parser.ts | 25 + .../common/query_manager/utils/index.ts | 48 + .../common/types/explorer.ts | 163 +- .../common/types/metrics.ts | 22 + .../common/utils/index.ts | 8 +- .../common/utils/query_utils.ts | 68 +- dashboards-observability/package.json | 13 +- dashboards-observability/public/.DS_Store | Bin 0 -> 6148 bytes .../public/components/app.tsx | 24 + .../config_components/trace_config.tsx | 2 +- .../common/field_button/field_button.scss | 42 + .../common/field_button/field_button.tsx | 1 + .../common/field_icon/field_icon.tsx | 5 +- .../language_structure/identifiers.ts | 4 +- .../components/common/search/autocomplete.tsx | 10 +- .../components/common/search/search.test.tsx | 6 + .../components/common/search/search.tsx | 32 +- .../public/components/common/side_nav.tsx | 9 +- .../__snapshots__/utils.test.tsx.snap | 4521 ++-- .../helpers/__tests__/utils.test.tsx | 24 +- .../custom_panels/helpers/utils.tsx | 144 +- .../visualization_container.tsx | 211 +- .../visualization_flyout.tsx | 1 + .../event_analytics/explorer/explorer.scss | 27 +- .../event_analytics/explorer/explorer.tsx | 469 +- .../explorer/log_explorer.scss | 4 + .../event_analytics/explorer/log_explorer.tsx | 2 + .../explorer/log_patterns/patterns_table.tsx | 70 +- .../event_analytics/explorer/no_results.tsx | 3 +- .../__snapshots__/save_panel.test.tsx.snap | 86 + .../save_panel/__tests__/save_panel.test.tsx | 8 + .../explorer/save_panel/save_panel.tsx | 74 +- .../__snapshots__/field.test.tsx.snap | 20 +- .../__snapshots__/sidebar.test.tsx.snap | 18211 +++++++-------- .../explorer/sidebar/field.tsx | 7 +- .../explorer/sidebar/field_insights.tsx | 6 +- .../explorer/sidebar/sidebar.scss | 58 +- .../explorer/sidebar/sidebar.tsx | 188 +- .../timechart_header.test.tsx.snap | 6 +- .../__tests__/timechart_header.test.tsx | 2 +- .../timechart_header/timechart_header.tsx | 14 +- .../explorer/visualizations/app.scss | 46 +- .../__snapshots__/config_panel.test.tsx.snap | 18645 +++++++++++----- .../__tests__/config_panel.test.tsx | 3 +- .../config_panel/config_panel.scss | 81 +- .../config_panel/config_panel.tsx | 162 +- .../config_panel/config_panel_footer.tsx | 19 - .../config_bar_chart_styles.tsx | 119 + .../config_controls/config_button_group.tsx | 40 + .../config_controls/config_chart_options.tsx | 187 +- .../config_color_palette_picker.tsx | 113 + .../config_controls/config_color_theme.tsx | 131 + .../config_controls/config_gauge_options.tsx | 8 +- .../config_heatmap_color_palette_picker.tsx | 43 + .../config_controls/config_legend.tsx | 65 + .../config_line_chart_styles.tsx | 131 + .../config_controls/config_logs_view.tsx | 110 + .../config_controls/config_number_input.tsx | 48 + .../config_controls/config_panel_item.tsx | 7 +- .../config_panel_option_gauge.tsx | 66 + .../config_controls/config_panel_options.tsx | 58 +- .../config_single_color_picker.tsx | 52 + .../config_controls/config_style_slider.tsx | 67 + .../config_controls/config_switch.tsx | 30 + .../config_controls/config_switch_button.tsx | 25 + .../config_controls/config_text_input.tsx | 48 + .../config_controls/config_thresholds.tsx | 42 +- .../config_controls/config_tooltip.tsx | 58 + .../config_treemap_parents.tsx | 77 + .../config_controls/config_value_options.tsx | 46 +- .../data_config_item_click_panel.tsx | 37 + .../data_config_panel_fields.tsx | 144 + .../data_configurations_panel.scss | 45 + .../data_configurations_panel.tsx | 592 + .../config_panes/config_controls/index.ts | 16 + .../logs_view_config_panel_item.tsx | 248 + .../treemap_config_panel_item.tsx | 277 + .../config_panes/default_vis_editor.tsx | 1 + .../count_distribution/count_distribution.tsx | 4 +- .../explorer/visualizations/index.tsx | 161 +- .../shared_components.test.tsx.snap | 14 +- .../shared_components/empty_placeholder.scss | 12 + .../shared_components/empty_placeholder.tsx | 22 +- .../visualizations/shared_components/index.ts | 2 +- .../vis_canvass_placeholder.tsx | 26 + .../workspace_panel/workspace_panel.scss | 18 +- .../workspace_panel/workspace_panel.tsx | 77 +- .../saved_query_table.test.tsx.snap | 20 + .../home/saved_objects_table.tsx | 11 +- .../components/event_analytics/hooks/index.ts | 2 + .../event_analytics/hooks/use_fetch_events.ts | 23 +- .../hooks/use_fetch_patterns.ts | 132 +- .../hooks/use_fetch_visualizations.ts | 28 +- .../hooks/use_render_visualizations.ts | 134 + .../components/event_analytics/index.tsx | 6 +- .../redux/slices/query_slice.ts | 23 +- .../utils/__tests__/utils.test.tsx | 83 + .../event_analytics/utils/index.tsx | 2 +- .../event_analytics/utils/utils.tsx | 202 +- .../public/components/index.tsx | 5 +- .../metrics/helpers/__tests__/utils.test.tsx | 100 + .../components/metrics/helpers/utils.tsx | 212 + .../public/components/metrics/index.scss | 24 + .../public/components/metrics/index.tsx | 221 + .../metrics/redux/slices/metrics_slice.ts | 157 + .../__snapshots__/searchbar.test.tsx.snap | 323 + .../__snapshots__/sidebar.test.tsx.snap | 427 + .../sidebar/__tests__/searchbar.test.tsx | 45 + .../sidebar/__tests__/sidebar.test.tsx | 40 + .../components/metrics/sidebar/search_bar.tsx | 59 + .../components/metrics/sidebar/sidebar.scss | 159 + .../components/metrics/sidebar/sidebar.tsx | 131 + .../metrics_export_panel.test.tsx.snap | 315 + .../__snapshots__/top_menu.test.tsx.snap | 3826 ++++ .../__tests__/metrics_export_panel.test.tsx | 63 + .../top_menu/__tests__/top_menu.test.tsx | 183 + .../metrics/top_menu/metrics_export_panel.tsx | 130 + .../components/metrics/top_menu/top_menu.scss | 20 + .../components/metrics/top_menu/top_menu.tsx | 309 + .../__snapshots__/empty_view.test.tsx.snap | 86 + .../__snapshots__/metrics_grid.test.tsx.snap | 1198 + .../view/__tests__/empty_view.test.tsx | 23 + .../view/__tests__/metrics_grid.test.tsx | 64 + .../components/metrics/view/empty_view.scss | 15 + .../components/metrics/view/empty_view.tsx | 28 + .../components/metrics/view/metrics_grid.scss | 8 + .../components/metrics/view/metrics_grid.tsx | 175 + .../components/common/helper_functions.tsx | 2 +- .../components/common/plots/box_plt.tsx | 7 +- .../common/plots/service_map_scale.tsx | 3 +- .../dashboard/dashboard_content.tsx | 2 +- .../__tests__/span_detail_panel.test.tsx | 5 +- .../requests/services_request_handler.ts | 2 +- .../requests/traces_request_handler.ts | 5 +- .../__tests__/__snapshots__/bar.test.tsx.snap | 485 +- .../__snapshots__/data_table.test.tsx.snap | 547 +- .../__snapshots__/gauge.test.tsx.snap | 465 + .../__snapshots__/heatmap.test.tsx.snap | 291 +- .../__snapshots__/histogram.test.tsx.snap | 661 + .../horizontal_bar.test.tsx.snap | 596 + .../__snapshots__/line.test.tsx.snap | 462 +- .../__snapshots__/logs_view.test.tsx.snap | 575 + .../__snapshots__/metrics.test.tsx.snap | 589 + .../__tests__/__snapshots__/pie.test.tsx.snap | 479 +- .../__snapshots__/text.test.tsx.snap | 266 +- .../__snapshots__/treemap.test.tsx.snap | 686 + .../charts/__tests__/bar.test.tsx | 4 +- .../charts/__tests__/data_table.test.tsx | 17 +- .../charts/__tests__/gauge.test.tsx | 30 + .../charts/__tests__/histogram.test.tsx | 30 + .../charts/__tests__/horizontal_bar.test.tsx | 34 + .../charts/__tests__/logs_view.test.tsx | 30 + .../charts/__tests__/metrics.test.tsx | 34 + .../charts/__tests__/treemap.test.tsx | 30 + .../visualizations/charts/bar/bar.tsx | 257 +- .../visualizations/charts/bar/bar_type.ts | 198 +- .../charts/bar/horizontal_bar_type.ts | 111 - .../charts/bubble/bubble_type.ts | 8 +- .../charts/data_table/data_table.scss | 63 + .../charts/data_table/data_table.tsx | 318 +- .../charts/data_table/data_table_footer.tsx | 126 + .../charts/data_table/data_table_header.tsx | 195 + .../charts/data_table/data_table_type.ts | 105 +- .../financial/candle_stick/candle_stick.tsx | 217 - .../candle_stick/candle_stick_type.ts | 81 - .../charts/financial/gauge/gauge.tsx | 228 +- .../charts/financial/gauge/gauge_type.ts | 95 +- .../charts/helpers/viz_types.ts | 255 +- .../charts/histogram/histogram.tsx | 125 +- .../charts/histogram/histogram_type.ts | 98 +- .../visualizations/charts/lines/line.tsx | 301 +- .../visualizations/charts/lines/line_type.ts | 241 +- .../charts/logs_view/logs_view.scss | 25 + .../charts/logs_view/logs_view.tsx | 40 + .../charts/logs_view/logs_view_type.ts | 69 + .../visualizations/charts/maps/heatmap.tsx | 131 +- .../charts/maps/heatmap_type.ts | 107 +- .../charts/maps/treemap_type.ts | 110 +- .../visualizations/charts/maps/treemaps.tsx | 241 +- .../visualizations/charts/metrics/metrics.tsx | 713 + .../charts/metrics/metrics_type.ts | 191 + .../visualizations/charts/pie/pie.tsx | 210 +- .../visualizations/charts/pie/pie_type.ts | 143 +- .../visualizations/charts/shared/common.ts | 103 + .../charts/shared/shared_configs.ts | 2 +- .../visualizations/charts/text/text_type.ts | 16 +- .../visualizations/charts/vis_types.ts | 8 +- .../components/visualizations/plotly/plot.tsx | 7 - .../visualizations/visualization.tsx | 18 +- .../visualizations/visualization_chart.tsx | 14 +- .../public/framework/redux/reducers/index.ts | 2 + .../public/framework/redux/store/index.ts | 32 +- dashboards-observability/public/plugin.ts | 8 +- .../public/services/requests/ppl.ts | 3 +- .../event_analytics/saved_objects.ts | 21 + .../public/services/timestamp/timestamp.ts | 52 +- .../custom_panels/custom_panel_adaptor.ts | 39 + .../custom_panels/visualizations_router.ts | 42 + .../event_analytics/event_analytics_router.ts | 10 + .../test/event_analytics_constants.ts | 261 +- .../test/metrics_contants.ts | 325 + .../test/panels_constants.tsx | 34 + dashboards-observability/yarn.lock | 104 +- opensearch-observability/build.gradle | 77 +- opensearch-observability/detekt.yml | 5 + .../observability/ObservabilityPlugin.kt | 27 +- .../observability/index/ObservabilityIndex.kt | 19 +- .../index/ObservabilityQueryHelper.kt | 4 - .../opensearch/observability/model/RestTag.kt | 4 + .../observability/model/SavedVisualization.kt | 191 +- .../observability/model/ScheduledJobDoc.kt | 171 + .../resthandler/SchedulerRestHandler.kt | 155 + .../scheduler/ObservabilityJobParser.kt | 22 + .../scheduler/ObservabilityJobRunner.kt | 37 + .../observability/security/SecurityAccess.kt | 2 +- .../observability/settings/PluginSettings.kt | 2 +- ...ch.jobscheduler.spi.JobSchedulerExtension} | 0 .../observability/ObservabilityPluginIT.kt | 4 + .../observability/ObservabilityPluginTests.kt | 12 - .../opensearch/observability/TestHelpers.kt | 4 +- .../CreateObservabilityObjectRequestTests.kt | 6 +- .../observability/model/NotebookTests.kt | 12 +- .../model/ObservabilityObjectDocTests.kt | 8 +- .../model/OperationalPanelTests.kt | 8 +- .../observability/model/SavedQueryTests.kt | 14 +- .../model/SavedVisualizationTests.kt | 24 +- .../observability/model/TimestampTests.kt | 3 +- .../bwc/job-scheduler}/.gitignore | 0 .../resources/bwc/observability/.gitignore | 4 + .../test/resources/job-scheduler/.gitignore | 4 + 286 files changed, 73838 insertions(+), 19874 deletions(-) create mode 100644 dashboards-observability/.cypress/integration/VisualizationCharts/10_scatter_chart.spec.js create mode 100644 dashboards-observability/.cypress/integration/VisualizationCharts/11_horizontalBar_chart.spec.js create mode 100644 dashboards-observability/.cypress/integration/VisualizationCharts/12_boxPlot_chart.spec.js create mode 100644 dashboards-observability/.cypress/integration/VisualizationCharts/13_logsView.spec.js create mode 100644 dashboards-observability/.cypress/integration/VisualizationCharts/13_stats_chart.spec.js create mode 100644 dashboards-observability/.cypress/integration/VisualizationCharts/7_pie_chart.spec.js create mode 100644 dashboards-observability/.cypress/integration/VisualizationCharts/9_coordinateMap_chart.spec.js create mode 100644 dashboards-observability/common/constants/colors.ts create mode 100644 dashboards-observability/common/constants/data_table.ts create mode 100644 dashboards-observability/common/constants/metrics.ts create mode 100644 dashboards-observability/common/query_manager/antlr/adaptors/case_insensitive_char_stream.ts create mode 100644 dashboards-observability/common/query_manager/antlr/grammar/OpenSearchPPLLexer.g4 create mode 100644 dashboards-observability/common/query_manager/antlr/grammar/OpenSearchPPLParser.g4 create mode 100644 dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLLexer.interp create mode 100644 dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLLexer.tokens create mode 100644 dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLLexer.ts create mode 100644 dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLParser.interp create mode 100644 dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLParser.tokens create mode 100644 dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLParser.ts create mode 100644 dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLParserListener.ts create mode 100644 dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLParserVisitor.ts create mode 100644 dashboards-observability/common/query_manager/antlr/ppl_syntax_parser.ts create mode 100644 dashboards-observability/common/query_manager/ast/builder/query_builder.ts create mode 100644 dashboards-observability/common/query_manager/ast/builder/stats_ast_builder.ts create mode 100644 dashboards-observability/common/query_manager/ast/builder/stats_builder.ts create mode 100644 dashboards-observability/common/query_manager/ast/expression/AggregateFunction.ts create mode 100644 dashboards-observability/common/query_manager/ast/expression/AggregateTerm.ts create mode 100644 dashboards-observability/common/query_manager/ast/expression/field.ts create mode 100644 dashboards-observability/common/query_manager/ast/expression/group_by.ts create mode 100644 dashboards-observability/common/query_manager/ast/expression/index.ts create mode 100644 dashboards-observability/common/query_manager/ast/expression/span.ts create mode 100644 dashboards-observability/common/query_manager/ast/expression/spanExpression.ts create mode 100644 dashboards-observability/common/query_manager/ast/index.ts create mode 100644 dashboards-observability/common/query_manager/ast/node.ts create mode 100644 dashboards-observability/common/query_manager/ast/tree/aggragations.ts create mode 100644 dashboards-observability/common/query_manager/ast/types/index.ts create mode 100644 dashboards-observability/common/query_manager/ast/types/stats.ts create mode 100644 dashboards-observability/common/query_manager/index.ts create mode 100644 dashboards-observability/common/query_manager/ppl_query_manager.ts create mode 100644 dashboards-observability/common/query_manager/query_builder/index.ts create mode 100644 dashboards-observability/common/query_manager/query_builder/ppl_query_builder.ts create mode 100644 dashboards-observability/common/query_manager/query_parser/index.ts create mode 100644 dashboards-observability/common/query_manager/query_parser/ppl_query_parser.ts create mode 100644 dashboards-observability/common/query_manager/utils/index.ts create mode 100644 dashboards-observability/common/types/metrics.ts create mode 100644 dashboards-observability/public/.DS_Store create mode 100644 dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_bar_chart_styles.tsx create mode 100644 dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_button_group.tsx create mode 100644 dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_color_palette_picker.tsx create mode 100644 dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_color_theme.tsx create mode 100644 dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_heatmap_color_palette_picker.tsx create mode 100644 dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_legend.tsx create mode 100644 dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_line_chart_styles.tsx create mode 100644 dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_logs_view.tsx create mode 100644 dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_number_input.tsx create mode 100644 dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_panel_option_gauge.tsx create mode 100644 dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_single_color_picker.tsx create mode 100644 dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_style_slider.tsx create mode 100644 dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_switch.tsx create mode 100644 dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_switch_button.tsx create mode 100644 dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_text_input.tsx create mode 100644 dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_tooltip.tsx create mode 100644 dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_treemap_parents.tsx create mode 100644 dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/data_config_item_click_panel.tsx create mode 100644 dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/data_config_panel_fields.tsx create mode 100644 dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/data_configurations_panel.scss create mode 100644 dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/data_configurations_panel.tsx create mode 100644 dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/logs_view_config_panel_item.tsx create mode 100644 dashboards-observability/public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/treemap_config_panel_item.tsx create mode 100644 dashboards-observability/public/components/event_analytics/explorer/visualizations/shared_components/empty_placeholder.scss create mode 100644 dashboards-observability/public/components/event_analytics/explorer/visualizations/shared_components/vis_canvass_placeholder.tsx create mode 100644 dashboards-observability/public/components/event_analytics/hooks/use_render_visualizations.ts create mode 100644 dashboards-observability/public/components/event_analytics/utils/__tests__/utils.test.tsx create mode 100644 dashboards-observability/public/components/metrics/helpers/__tests__/utils.test.tsx create mode 100644 dashboards-observability/public/components/metrics/helpers/utils.tsx create mode 100644 dashboards-observability/public/components/metrics/index.scss create mode 100644 dashboards-observability/public/components/metrics/index.tsx create mode 100644 dashboards-observability/public/components/metrics/redux/slices/metrics_slice.ts create mode 100644 dashboards-observability/public/components/metrics/sidebar/__tests__/__snapshots__/searchbar.test.tsx.snap create mode 100644 dashboards-observability/public/components/metrics/sidebar/__tests__/__snapshots__/sidebar.test.tsx.snap create mode 100644 dashboards-observability/public/components/metrics/sidebar/__tests__/searchbar.test.tsx create mode 100644 dashboards-observability/public/components/metrics/sidebar/__tests__/sidebar.test.tsx create mode 100644 dashboards-observability/public/components/metrics/sidebar/search_bar.tsx create mode 100644 dashboards-observability/public/components/metrics/sidebar/sidebar.scss create mode 100644 dashboards-observability/public/components/metrics/sidebar/sidebar.tsx create mode 100644 dashboards-observability/public/components/metrics/top_menu/__tests__/__snapshots__/metrics_export_panel.test.tsx.snap create mode 100644 dashboards-observability/public/components/metrics/top_menu/__tests__/__snapshots__/top_menu.test.tsx.snap create mode 100644 dashboards-observability/public/components/metrics/top_menu/__tests__/metrics_export_panel.test.tsx create mode 100644 dashboards-observability/public/components/metrics/top_menu/__tests__/top_menu.test.tsx create mode 100644 dashboards-observability/public/components/metrics/top_menu/metrics_export_panel.tsx create mode 100644 dashboards-observability/public/components/metrics/top_menu/top_menu.scss create mode 100644 dashboards-observability/public/components/metrics/top_menu/top_menu.tsx create mode 100644 dashboards-observability/public/components/metrics/view/__tests__/__snapshots__/empty_view.test.tsx.snap create mode 100644 dashboards-observability/public/components/metrics/view/__tests__/__snapshots__/metrics_grid.test.tsx.snap create mode 100644 dashboards-observability/public/components/metrics/view/__tests__/empty_view.test.tsx create mode 100644 dashboards-observability/public/components/metrics/view/__tests__/metrics_grid.test.tsx create mode 100644 dashboards-observability/public/components/metrics/view/empty_view.scss create mode 100644 dashboards-observability/public/components/metrics/view/empty_view.tsx create mode 100644 dashboards-observability/public/components/metrics/view/metrics_grid.scss create mode 100644 dashboards-observability/public/components/metrics/view/metrics_grid.tsx create mode 100644 dashboards-observability/public/components/visualizations/charts/__tests__/__snapshots__/gauge.test.tsx.snap create mode 100644 dashboards-observability/public/components/visualizations/charts/__tests__/__snapshots__/histogram.test.tsx.snap create mode 100644 dashboards-observability/public/components/visualizations/charts/__tests__/__snapshots__/horizontal_bar.test.tsx.snap create mode 100644 dashboards-observability/public/components/visualizations/charts/__tests__/__snapshots__/logs_view.test.tsx.snap create mode 100644 dashboards-observability/public/components/visualizations/charts/__tests__/__snapshots__/metrics.test.tsx.snap create mode 100644 dashboards-observability/public/components/visualizations/charts/__tests__/__snapshots__/treemap.test.tsx.snap create mode 100644 dashboards-observability/public/components/visualizations/charts/__tests__/gauge.test.tsx create mode 100644 dashboards-observability/public/components/visualizations/charts/__tests__/histogram.test.tsx create mode 100644 dashboards-observability/public/components/visualizations/charts/__tests__/horizontal_bar.test.tsx create mode 100644 dashboards-observability/public/components/visualizations/charts/__tests__/logs_view.test.tsx create mode 100644 dashboards-observability/public/components/visualizations/charts/__tests__/metrics.test.tsx create mode 100644 dashboards-observability/public/components/visualizations/charts/__tests__/treemap.test.tsx delete mode 100644 dashboards-observability/public/components/visualizations/charts/bar/horizontal_bar_type.ts create mode 100644 dashboards-observability/public/components/visualizations/charts/data_table/data_table.scss create mode 100644 dashboards-observability/public/components/visualizations/charts/data_table/data_table_footer.tsx create mode 100644 dashboards-observability/public/components/visualizations/charts/data_table/data_table_header.tsx delete mode 100644 dashboards-observability/public/components/visualizations/charts/financial/candle_stick/candle_stick.tsx delete mode 100644 dashboards-observability/public/components/visualizations/charts/financial/candle_stick/candle_stick_type.ts create mode 100644 dashboards-observability/public/components/visualizations/charts/logs_view/logs_view.scss create mode 100644 dashboards-observability/public/components/visualizations/charts/logs_view/logs_view.tsx create mode 100644 dashboards-observability/public/components/visualizations/charts/logs_view/logs_view_type.ts create mode 100644 dashboards-observability/public/components/visualizations/charts/metrics/metrics.tsx create mode 100644 dashboards-observability/public/components/visualizations/charts/metrics/metrics_type.ts create mode 100644 dashboards-observability/public/components/visualizations/charts/shared/common.ts create mode 100644 dashboards-observability/test/metrics_contants.ts create mode 100644 opensearch-observability/src/main/kotlin/org/opensearch/observability/model/ScheduledJobDoc.kt create mode 100644 opensearch-observability/src/main/kotlin/org/opensearch/observability/resthandler/SchedulerRestHandler.kt create mode 100644 opensearch-observability/src/main/kotlin/org/opensearch/observability/scheduler/ObservabilityJobParser.kt create mode 100644 opensearch-observability/src/main/kotlin/org/opensearch/observability/scheduler/ObservabilityJobRunner.kt rename opensearch-observability/src/main/resources/META-INF/services/{com.amazon.opendistroforelasticsearch.jobscheduler.spi.JobSchedulerExtension => org.opensearch.jobscheduler.spi.JobSchedulerExtension} (100%) delete mode 100644 opensearch-observability/src/test/kotlin/org/opensearch/observability/ObservabilityPluginTests.kt rename opensearch-observability/src/test/{kotlin/org/opensearch/observability/resources/bwc => resources/bwc/job-scheduler}/.gitignore (100%) create mode 100644 opensearch-observability/src/test/resources/bwc/observability/.gitignore create mode 100644 opensearch-observability/src/test/resources/job-scheduler/.gitignore diff --git a/.github/workflows/dashboards-observability-test-and-build-workflow.yml b/.github/workflows/dashboards-observability-test-and-build-workflow.yml index 4d25d77fe..057c6b399 100644 --- a/.github/workflows/dashboards-observability-test-and-build-workflow.yml +++ b/.github/workflows/dashboards-observability-test-and-build-workflow.yml @@ -11,8 +11,10 @@ env: jobs: build: - - runs-on: ubuntu-latest + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + runs-on: ${{ matrix.os }} steps: - name: Checkout Plugin @@ -57,13 +59,13 @@ jobs: yarn test --coverage - name: Upload coverage + if: ${{ matrix.os == 'ubuntu-latest' }} uses: codecov/codecov-action@v1 with: flags: dashboards-observability directory: ./OpenSearch-Dashboards/plugins/dashboards-observability token: ${{ secrets.CODECOV_TOKEN }} - # TODO remove hard coded version when observability is ready - name: Build Artifact run: | cd OpenSearch-Dashboards/plugins/dashboards-observability @@ -73,6 +75,5 @@ jobs: - name: Upload Artifact uses: actions/upload-artifact@v1 with: - name: dashboards-observability - path: ./OpenSearch-Dashboards/plugins/dashboards-observability/build - + name: dashboards-observability-${{ matrix.os }} + path: ./OpenSearch-Dashboards/plugins/dashboards-observability/build \ No newline at end of file diff --git a/.github/workflows/opensearch-observability-test-and-build-workflow.yml b/.github/workflows/opensearch-observability-test-and-build-workflow.yml index 5990f2b8e..9d70144f3 100644 --- a/.github/workflows/opensearch-observability-test-and-build-workflow.yml +++ b/.github/workflows/opensearch-observability-test-and-build-workflow.yml @@ -4,13 +4,18 @@ on: [pull_request, push] jobs: build: + env: + BUILD_ARGS: ${{ matrix.os_build_args }} strategy: matrix: - java: - - 11 - - 17 - - runs-on: ubuntu-latest + java: [11, 17] + os: [ubuntu-latest, windows-latest, macos-latest] + include: + - os: windows-latest + os_build_args: -x integTest -x jacocoTestReport + - os: macos-latest + os_build_args: -x integTest -x jacocoTestReport + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v1 @@ -21,6 +26,8 @@ jobs: java-version: ${{ matrix.java }} - name: Run Backwards Compatibility Tests + # Temporarily only do this for linux + if: ${{ matrix.os == 'ubuntu-latest' }} run: | cd opensearch-observability echo "Running backwards compatibility tests ..." @@ -29,9 +36,10 @@ jobs: - name: Build with Gradle run: | cd opensearch-observability - ./gradlew build + ./gradlew build ${{ env.BUILD_ARGS }} - name: Upload coverage + if: ${{ matrix.os == 'ubuntu-latest' }} uses: codecov/codecov-action@v1 with: flags: opensearch-observability @@ -46,5 +54,5 @@ jobs: - name: Upload Artifacts uses: actions/upload-artifact@v1 with: - name: opensearch-observability - path: opensearch-observability-builds + name: opensearch-observability-${{ matrix.os }} + path: opensearch-observability-builds \ No newline at end of file diff --git a/DEVELOPER_GUIDE.md b/DEVELOPER_GUIDE.md index 7a1fde32a..d9a257399 100644 --- a/DEVELOPER_GUIDE.md +++ b/DEVELOPER_GUIDE.md @@ -14,14 +14,13 @@ By default, tests use the same runtime as `JAVA_HOME`. ### Setup -1. Download OpenSearch for the version that matches the [OpenSearch Dashboards version specified in package.json](./dashboards-observability/package.json#L5). -1. Download the OpenSearch Dashboards source code for the [version specified in package.json](./dashboards-observability/package.json#L5) you want to set up. - +1. Download OpenSearch for the version that matches the [OpenSearch Dashboards version specified in opensearch_dashboards.json](./dashboards-observability/opensearch_dashboards.json#L4) from [opensearch.org](https://opensearch.org/downloads.html). +1. Download the OpenSearch Dashboards source code for the [version specified in opensearch_dashboards.json](./dashboards-observability/opensearch_dashboards.json#L4) you want to set up. 1. Change your node version to the version specified in `.node-version` inside the OpenSearch Dashboards root directory. -1. cd into `plugins` directory in the OpenSearch Dashboards source code directory. -1. Check out this package from version control into the `plugins` directory. +1. cd into `OpenSearch-Dashboards` and remove the `plugins` directory. +1. Check out this package from version control as the `plugins` directory. ```bash -git clone git@github.com:opensearch-project/observability.git plugins --no-checkout +git clone https://github.com/opensearch-project/observability plugins --no-checkout cd plugins echo 'dashboards-observability/*' >> .git/info/sparse-checkout git config core.sparseCheckout true @@ -46,9 +45,7 @@ Example output: `./build/observability*.zip` ### Run -- `yarn start` - - Starts OpenSearch Dashboards and includes this plugin. OpenSearch Dashboards will be available on `localhost:5601`. +cd back to `OpenSearch-Dashboards` directory and run `yarn start` to start OpenSearch Dashboards including this plugin. OpenSearch Dashboards will be available on `localhost:5601`. ### Submitting Changes @@ -60,4 +57,4 @@ The Github workflow in [`backport.yml`](.github/workflows/backport.yml) creates with an appropriate label `backport ` is merged to main with the backport workflow run successfully on the PR. For example, if a PR on main needs to be backported to `1.x` branch, add a label `backport 1.x` to the PR and make sure the backport workflow runs on the PR along with other checks. Once this PR is merged to main, the workflow will create a backport PR -to the `1.x` branch. \ No newline at end of file +to the `1.x` branch. diff --git a/README.md b/README.md index 87feb1c1e..ed0aa2544 100644 --- a/README.md +++ b/README.md @@ -126,7 +126,7 @@ See [developer guide](DEVELOPER_GUIDE.md) and [how to contribute to this project If you find a bug, or have a feature request, please don't hesitate to open an issue in this repository. -For more information, see [project website](https://opensearch.org/) and [documentation](https://opensearch.org/docs). If you need help and are unsure where to open an issue, try [forums](https://discuss.opendistrocommunity.dev/). +For more information, see [project website](https://opensearch.org/) and [documentation](https://opensearch.org/docs). If you need help and are unsure where to open an issue, try the [Forum](https://forum.opensearch.org/c/plugins/observability/49). ## Code of Conduct diff --git a/dashboards-observability/.cypress/integration/1_event_analytics.spec.js b/dashboards-observability/.cypress/integration/1_event_analytics.spec.js index 7a3a45352..3f43a6eb7 100644 --- a/dashboards-observability/.cypress/integration/1_event_analytics.spec.js +++ b/dashboards-observability/.cypress/integration/1_event_analytics.spec.js @@ -17,10 +17,68 @@ import { landOnEventHome, landOnEventExplorer, landOnEventVisualizations, - landOnPanels + landOnPanels, + renderTreeMapchart, + renderPieChart, + renderLineChartForDataConfig, + renderDataConfig, + aggregationValues, + DataConfigLineChart, + renderAddParent, + renderGaugeChart, + renderAddParent } from '../utils/event_constants'; import { supressResizeObserverIssue } from '../utils/constants'; +const renderHistogramChart = () => { + querySearch(TEST_QUERIES[5].query, TEST_QUERIES[5].dateRangeDOM); + cy.get('[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]').type('Histogram').type('{enter}'); + cy.wait(delay); + cy.get('g.draglayer.cursor-crosshair').should('exist'); + cy.get('#configPanel__panelOptions .euiFieldText').click().type('Histogram chart'); + cy.get('.euiFlexItem .euiFormRow [placeholder="Description"]').click().type('This is the description for Histogram chart'); + cy.get('.euiIEFlexWrapFix').eq(1).contains('Chart Styles').should('exist'); + cy.get('.euiFormLabel.euiFormRow__label').eq(2).contains('Bucket Size'); + cy.get('.euiFieldNumber').eq(0).type('4'); + cy.get('.euiFormLabel.euiFormRow__label').eq(3).contains('Bucket Offset'); + cy.get('.euiFieldNumber').eq(0).type('6'); +}; + +const vis_name_sub_string = Math.floor(Math.random() * 100); +const saveVisualizationAndVerify = () => { + cy.get('[data-test-subj="eventExplorer__saveManagementPopover"]').click(); + cy.get('[data-test-subj="eventExplorer__querySaveComboBox"]').click(); + cy.get('.euiComboBoxOptionsList__rowWrap .euiFilterSelectItem').eq(0).click(); + cy.get( + '.euiPopover__panel .euiFormControlLayoutIcons [data-test-subj="comboBoxToggleListButton"]' + ) + .eq(0) + .click(); + cy.get('.euiPopover__panel input') + .eq(1) + .type(`Test visualization` + vis_name_sub_string); + cy.get('[data-test-subj="eventExplorer__querySaveConfirm"]').click(); + cy.wait(delay); + cy.get('.euiHeaderBreadcrumbs a').eq(1).click(); + cy.get('.euiFlexGroup .euiFormControlLayout__childrenWrapper input') + .eq(0) + .type(`Test visualization` + vis_name_sub_string) + .type('{enter}'); + cy.get('.euiBasicTable .euiTableCellContent button').eq(0).click(); +}; +const deleteVisualization = () => { + cy.get('a[href = "#/event_analytics"]').click(); + cy.get('.euiFlexGroup .euiFormControlLayout__childrenWrapper input') + .eq(0) + .type(`Test visualization`) + .type('{enter}'); + cy.get('input[data-test-subj = "checkboxSelectAll"]').click(); + cy.get('.euiButtonContent.euiButtonContent--iconRight.euiButton__content').click(); + cy.get('.euiContextMenuItem .euiContextMenuItem__text').eq(0).click(); + cy.get('input[placeholder = "delete"]').clear().type('delete'); + cy.get('button[data-test-subj = "popoverModal__deleteButton"]').click(); + cy.get('.euiToastHeader').should('exist'); +}; describe('Adding sample data and visualization', () => { it('Adds sample flights data for event analytics', () => { cy.visit(`${Cypress.env('opensearchDashboards')}/app/home#/tutorial_directory/sampleData`); @@ -55,11 +113,14 @@ describe('Search a query on event home', () => { cy.get('[data-test-subj="superDatePickerToggleQuickMenuButton"]').click(); cy.get('[data-test-subj="superDatePickerCommonlyUsed_Year_to date"]').click(); cy.get('[data-test-subj="superDatePickerApplyTimeButton"]').contains('Refresh').click(); - cy.window().its('store').invoke('getState').then((state) => { - expect(Object.values(state.queries)[0]['rawQuery'].trim()).equal(TEST_QUERIES[0].query) - expect(Object.values(state.queries)[0]['selectedDateRange'][0]).equal("now/y"); - expect(Object.values(state.queries)[0]['selectedDateRange'][1]).equal("now"); - }); + cy.window() + .its('store') + .invoke('getState') + .then((state) => { + expect(Object.values(state.queries)[0]['rawQuery'].trim()).equal(TEST_QUERIES[0].query); + expect(Object.values(state.queries)[0]['selectedDateRange'][0]).equal('now/y'); + expect(Object.values(state.queries)[0]['selectedDateRange'][1]).equal('now'); + }); cy.wait(delay); cy.url().should('contain', '#/event_analytics/explorer'); @@ -76,16 +137,26 @@ describe('Open flyout for a data row to see details', () => { it('Should be able to open flyout and see data, json and traces', () => { cy.get('[data-test-subj="docTable"] tbody tr button.euiButtonIcon').first().click(); cy.get('.observability-flyout').should('exist'); - cy.get('.observability-flyout .osdDocViewer .euiTabs span.euiTab__content').contains('JSON').click(); - cy.get('.observability-flyout .osdDocViewer .euiTabs span.euiTab__content').contains('Traces').click(); - cy.get('.observability-flyout .osdDocViewer .euiTabs span.euiTab__content').contains('Table').click(); + cy.get('.observability-flyout .osdDocViewer .euiTabs span.euiTab__content') + .contains('JSON') + .click(); + cy.get('.observability-flyout .osdDocViewer .euiTabs span.euiTab__content') + .contains('Traces') + .click(); + cy.get('.observability-flyout .osdDocViewer .euiTabs span.euiTab__content') + .contains('Table') + .click(); }); it('Should be able to see srrounding docs', () => { cy.get('[data-test-subj="docTable"] tbody tr button.euiButtonIcon').first().click(); cy.get('.observability-flyout').should('exist'); - cy.get('.observability-flyout span.euiButton__text').contains('View surrounding events').click(); - cy.get('.observability-flyout #surroundingFyout').contains('View surrounding events').should('exist'); + cy.get('.observability-flyout span.euiButton__text') + .contains('View surrounding events') + .click(); + cy.get('.observability-flyout #surroundingFyout') + .contains('View surrounding events') + .should('exist'); }); }); @@ -252,7 +323,9 @@ describe('Saves a query on explorer page', () => { cy.get('button[id="main-content-vis"]').contains('Visualizations').click(); cy.get('[data-test-subj="eventExplorer__saveManagementPopover"]').click(); cy.wait(delay * 2); - cy.get('[data-test-subj="eventExplorer__querySaveComboBox"] [data-test-subj="comboBoxToggleListButton"]').click(); + cy.get( + '[data-test-subj="eventExplorer__querySaveComboBox"] [data-test-subj="comboBoxToggleListButton"]' + ).click(); cy.get('[data-test-subj="eventExplorer__querySaveName"]').type(SAVE_QUERY2); cy.get('[data-test-subj="eventExplorer__querySaveConfirm"]').click(); cy.wait(delay * 2); @@ -282,11 +355,15 @@ describe('Saves a query on explorer page', () => { cy.get('button[id="main-content-vis"]').contains('Visualizations').click(); cy.get('[data-test-subj="eventExplorer__saveManagementPopover"]').click(); cy.wait(delay * 2); - cy.get('[data-test-subj="eventExplorer__querySaveComboBox"] [data-test-subj="comboBoxToggleListButton"]').click(); + cy.get( + '[data-test-subj="eventExplorer__querySaveComboBox"] [data-test-subj="comboBoxToggleListButton"]' + ).click(); cy.get('[data-test-subj="eventExplorer__querySaveName"]').type(SAVE_QUERY3); cy.get('[data-test-subj="eventExplorer__querySaveComboBox"]').type(TESTING_PANEL); cy.get(`input[value="${TESTING_PANEL}"]`).click(); - cy.get('[data-test-subj="eventExplorer__querySaveComboBox"] [data-test-subj="comboBoxToggleListButton"]').click(); + cy.get( + '[data-test-subj="eventExplorer__querySaveComboBox"] [data-test-subj="comboBoxToggleListButton"]' + ).click(); cy.get('[data-test-subj="eventExplorer__querySaveConfirm"]').click(); cy.wait(delay); @@ -305,8 +382,11 @@ describe('Override timestamp for an index', () => { cy.wait(delay); cy.get('[data-attr-field="utc_time"] [data-test-subj="eventFields__default-timestamp-mark"') - .contains('Default Timestamp').should('exist'); - cy.get('[data-attr-field="timestamp"] [data-test-subj="eventFields__default-timestamp-mark"').should('not.exist'); + .contains('Default Timestamp') + .should('exist'); + cy.get( + '[data-attr-field="timestamp"] [data-test-subj="eventFields__default-timestamp-mark"' + ).should('not.exist'); }); }); @@ -369,20 +449,40 @@ describe('Click to view field insights', () => { it('Click a numerical field to view field insights', () => { cy.get('[data-test-subj="field-bytes-showDetails"]').click(); - cy.get('[data-test-subj="sidebarField__fieldInsights"] button').contains('Top values').should('exist'); - cy.get('[data-test-subj="sidebarField__fieldInsights"] button').contains('Rare values').should('exist'); - cy.get('[data-test-subj="sidebarField__fieldInsights"] button').contains('Average overtime').should('exist'); - cy.get('[data-test-subj="sidebarField__fieldInsights"] button').contains('Maximum overtime').should('exist'); - cy.get('[data-test-subj="sidebarField__fieldInsights"] button').contains('Minimum overtime').should('exist'); + cy.get('[data-test-subj="sidebarField__fieldInsights"] button') + .contains('Top values') + .should('exist'); + cy.get('[data-test-subj="sidebarField__fieldInsights"] button') + .contains('Rare values') + .should('exist'); + cy.get('[data-test-subj="sidebarField__fieldInsights"] button') + .contains('Average overtime') + .should('exist'); + cy.get('[data-test-subj="sidebarField__fieldInsights"] button') + .contains('Maximum overtime') + .should('exist'); + cy.get('[data-test-subj="sidebarField__fieldInsights"] button') + .contains('Minimum overtime') + .should('exist'); }); it('Click a non-numerical field to view insights', () => { cy.get('[data-test-subj="field-host-showDetails"]').click(); - cy.get('[data-test-subj="sidebarField__fieldInsights"] button').contains('Top values').should('exist'); - cy.get('[data-test-subj="sidebarField__fieldInsights"] button').contains('Rare values').should('exist'); - cy.get('[data-test-subj="sidebarField__fieldInsights"] button').contains('Average overtime').should('not.exist'); - cy.get('[data-test-subj="sidebarField__fieldInsights"] button').contains('Maximum overtime').should('not.exist'); - cy.get('[data-test-subj="sidebarField__fieldInsights"] button').contains('Minimum overtime').should('not.exist'); + cy.get('[data-test-subj="sidebarField__fieldInsights"] button') + .contains('Top values') + .should('exist'); + cy.get('[data-test-subj="sidebarField__fieldInsights"] button') + .contains('Rare values') + .should('exist'); + cy.get('[data-test-subj="sidebarField__fieldInsights"] button') + .contains('Average overtime') + .should('not.exist'); + cy.get('[data-test-subj="sidebarField__fieldInsights"] button') + .contains('Maximum overtime') + .should('not.exist'); + cy.get('[data-test-subj="sidebarField__fieldInsights"] button') + .contains('Minimum overtime') + .should('not.exist'); }); }); @@ -426,8 +526,8 @@ describe('Live tail stop automatically', () => { cy.get('[data-test-subj="eventExplorer__topLevelTabbing"]') .find('button.euiTab') .should('have.length', initialLength + 1); + }); }); -}); it('Click to switch to another tab', () => { cy.get('[data-test-subj="eventExplorer__addNewTab"]').click(); @@ -469,7 +569,9 @@ describe('Renders noresult chart', () => { }); it('It should render no result when there is no data', () => { - cy.get('[data-test-subj="vizWorkspace__noData"] p').contains('No results found').should('exist'); + cy.get('[data-test-subj="vizWorkspace__noData"] p') + .contains('No results found') + .should('exist'); }); }); @@ -480,7 +582,9 @@ describe('Renders bar charts', () => { it('Renders vertical bar chart', () => { querySearch(TEST_QUERIES[3].query, TEST_QUERIES[3].dateRangeDOM); - cy.get('[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]').click(); + cy.get( + '[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]' + ).click(); cy.wait(delay * 2); cy.get('[data-test-subj="comboBoxOptionsList "] span').contains('Bar').click(); cy.get('#configPanel__value_options [data-test-subj="comboBoxInput"]').first().click(); @@ -497,12 +601,16 @@ describe('Renders bar charts', () => { cy.get('[data-test-subj="comboBoxOptionsList "] button span').contains('Group').click(); cy.get('[data-test-subj="visualizeEditorRenderButton"]').click(); cy.wait(delay * 2); - cy.get('g.xaxislayer-above > g.xtick text[data-unformatted|="artifacts.opensearch.org"]').should('exist'); + cy.get( + 'g.xaxislayer-above > g.xtick text[data-unformatted|="artifacts.opensearch.org"]' + ).should('exist'); }); it('Renders horiztontal bar chart', () => { querySearch(TEST_QUERIES[3].query, TEST_QUERIES[3].dateRangeDOM); - cy.get('[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]').click(); + cy.get( + '[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]' + ).click(); cy.wait(delay * 2); cy.get('[data-test-subj="comboBoxOptionsList "] button span').contains('Bar').click(); cy.get('#configPanel__value_options [data-test-subj="comboBoxInput"]').first().click(); @@ -519,7 +627,9 @@ describe('Renders bar charts', () => { cy.get('[data-test-subj="comboBoxOptionsList "] button span').contains('Group').click(); cy.get('[data-test-subj="visualizeEditorRenderButton"]').click(); cy.wait(delay * 2); - cy.get('g.yaxislayer-above > g.ytick text[data-unformatted|="artifacts.opensearch.org"]').should('exist'); + cy.get( + 'g.yaxislayer-above > g.ytick text[data-unformatted|="artifacts.opensearch.org"]' + ).should('exist'); }); }); @@ -530,7 +640,9 @@ describe('Renders line charts', () => { it('Renders line chart with threshold', () => { querySearch(TEST_QUERIES[3].query, TEST_QUERIES[3].dateRangeDOM); - cy.get('[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]').click(); + cy.get( + '[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]' + ).click(); cy.get('[data-test-subj="comboBoxOptionsList "] button span').contains('Line').click(); cy.get('#configPanel__value_options [data-test-subj="comboBoxInput"]').first().click(); cy.get('[data-test-subj="comboBoxOptionsList "] button span').contains('host').click(); @@ -544,7 +656,9 @@ describe('Renders line charts', () => { cy.get('[data-test-subj="visualizeEditorRenderButton"]').click(); cy.wait(delay * 2); cy.get('g.text > g.textpoint text[data-unformatted|="Max"]').should('exist'); - cy.get('g.xaxislayer-above > g.xtick text[data-unformatted|="artifacts.opensearch.org"]').should('exist'); + cy.get( + 'g.xaxislayer-above > g.xtick text[data-unformatted|="artifacts.opensearch.org"]' + ).should('exist'); }); }); @@ -555,7 +669,9 @@ describe('Renders pie charts', () => { it('Renders pie chart', () => { querySearch(TEST_QUERIES[3].query, TEST_QUERIES[3].dateRangeDOM); - cy.get('[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]').click(); + cy.get( + '[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]' + ).click(); cy.get('[data-test-subj="comboBoxOptionsList "] button span').contains('Pie').click(); cy.wait(delay); cy.get('g.pielayer').should('exist'); @@ -569,7 +685,9 @@ describe('Renders heatmap chart', () => { it('Renders heatmap chart with different z-axes', () => { querySearch(TEST_QUERIES[4].query, TEST_QUERIES[4].dateRangeDOM); - cy.get('[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]').click(); + cy.get( + '[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]' + ).click(); cy.get('[data-test-subj="comboBoxOptionsList "] button span').contains('Heatmap').click(); cy.wait(delay * 2); cy.get('#configPanel__value_options [data-test-subj="comboBoxInput"]').click(); @@ -593,13 +711,17 @@ describe('Renders markdown chart', () => { it('Renders markdown chart with test title', () => { querySearch(TEST_QUERIES[3].query, TEST_QUERIES[3].dateRangeDOM); - cy.get('[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]').click(); + cy.get( + '[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]' + ).click(); cy.get('[data-test-subj="comboBoxOptionsList "] button span').contains('Text').click(); cy.get('[data-test-subj="workspace__viz_markdown"] h2').contains('Text').should('exist'); cy.get('textarea.euiMarkdownEditorTextArea').type('## testing title'); cy.get('[data-test-subj="visualizeEditorRenderButton"]').click(); cy.wait(delay * 2); - cy.get('[data-test-subj="workspace__viz_markdown"] h2').contains('testing title').should('exist'); + cy.get('[data-test-subj="workspace__viz_markdown"] h2') + .contains('testing title') + .should('exist'); }); }); @@ -615,4 +737,302 @@ describe('Renders data view', () => { cy.get('[data-test-subj="workspace__dataTableViewSwitch"]').click(); cy.get('[data-test-subj="workspace__dataTable"]').should('not.exist'); }); -}); \ No newline at end of file +}); + +describe('Renders chart and verify Toast message if X-axis and Y-axis values are empty', () => { + beforeEach(() => { + landOnEventVisualizations(); + }); + it('Renders chart, clear X-axis and Y-axis value and click on Apply button, Toast message should display with error message', () => { + querySearch(TEST_QUERIES[4].query, TEST_QUERIES[4].dateRangeDOM); + cy.get('[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]') + .type('Bar') + .type('{enter}'); + cy.wait(delay); + cy.get('#configPanel__value_options [data-test-subj="comboBoxClearButton"]') + .eq(0) + .click({ force: true }); + cy.get('#configPanel__value_options [data-test-subj="comboBoxToggleListButton"]').eq(0).click(); + cy.wait(delay); + cy.get('#configPanel__value_options [data-test-subj="comboBoxClearButton"]').click({ + multiple: true, + }); + cy.get('#configPanel__value_options [data-test-subj="comboBoxToggleListButton"]').eq(1).click(); + cy.get('#configPanel__value_options [data-test-subj="comboBoxInput"]') + .eq(0) + .should('have.value', ''); + cy.get('#configPanel__value_options [data-test-subj="comboBoxInput"]') + .eq(1) + .should('have.value', ''); + cy.get('[data-test-subj="visualizeEditorRenderButton"]').click(); + cy.get('[data-test-subj="euiToastHeader"]') + .contains('Invalid value options configuration selected.') + .should('exist'); + }); + + it('Renders chart, clear X-axis and Y-axis value and try to save visulization, Toast message should display with error message', () => { + querySearch(TEST_QUERIES[4].query, TEST_QUERIES[4].dateRangeDOM); + cy.get('[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]') + .type('Bar') + .type('{enter}'); + cy.wait(delay); + cy.get('#configPanel__value_options [data-test-subj="comboBoxClearButton"]') + .eq(0) + .click({ force: true }); + cy.get('#configPanel__value_options [data-test-subj="comboBoxToggleListButton"]').eq(0).click(); + cy.wait(delay); + cy.get('#configPanel__value_options [data-test-subj="comboBoxClearButton"]').click({ + multiple: true, + }); + cy.get('#configPanel__value_options [data-test-subj="comboBoxInput"]') + .eq(0) + .should('have.value', ''); + cy.get('#configPanel__value_options [data-test-subj="comboBoxInput"]') + .eq(1) + .should('have.value', ''); + cy.get('[data-test-subj="eventExplorer__saveManagementPopover"]').click(); + cy.get('[data-test-subj="eventExplorer__querySaveComboBox"]').click(); + cy.get('.euiComboBoxOptionsList__rowWrap .euiFilterSelectItem').eq(0).click(); + cy.get( + '.euiPopover__panel .euiFormControlLayoutIcons [data-test-subj="comboBoxToggleListButton"]' + ) + .eq(0) + .click(); + cy.get('.euiPopover__panel input').eq(1).type(`Test visulization_`); + cy.get('[data-test-subj="eventExplorer__querySaveConfirm"]').click(); + cy.get('[data-test-subj="euiToastHeader"]') + .contains('Invalid value options configuration selected.') + .should('exist'); + }); +}); + +describe('Render Table View', () => { + beforeEach(() => { + landOnEventVisualizations(); + querySearch(TEST_QUERIES[3].query, TEST_QUERIES[3].dateRangeDOM); + cy.get('[data-test-subj="workspace__dataTableViewSwitch"]').click(); + }); + + it('Switch visualization for table view and verify table data', () => { + cy.get('.ag-header-cell-text').contains('max(AvgTicketPrice)').should('exist'); + cy.get('.ag-header-cell-text').contains('DestCountry').should('exist'); + cy.get('.ag-header-cell-text').contains('DestCityName').should('exist'); + cy.get('.ag-header-cell-text').contains('Carrier').should('exist'); + }); + + it('Switch visualization for table view and change data table density', () => { + cy.get('.euiButtonEmpty__text').contains('Density').click(); + cy.get('.euiButtonIcon.euiButtonIcon--primary.euiButtonIcon--xSmall').eq(1).click(); + cy.get('.euiButtonIcon.euiButtonIcon--primary.euiButtonIcon--xSmall').eq(2).click(); + }); + + it('Switch visualization for table view and show and hide column', () => { + cy.get('.euiButtonEmpty__text').contains('Columns').click(); + cy.get('.euiSwitch__label').contains('DestCountry').click(); + cy.get('.ag-header-cell-text').contains('DestCountry').should('not.exist'); + cy.get('.euiSwitch__label').contains('Carrier').click(); + cy.get('.ag-header-cell-text').contains('Carrier').should('not.exist'); + cy.get('.euiSwitch__label').contains('DestCountry').click(); + cy.get('.ag-header-cell-text').contains('DestCountry').should('exist'); + }); + + it('Switch visualization for table view and see data in full screen', () => { + cy.get('.ag-header-cell-text').contains('max(AvgTicketPrice)').should('exist'); + cy.get('.ag-header-cell-text').contains('DestCountry').should('exist'); + cy.get('.ag-header-cell-text').contains('DestCityName').should('exist'); + cy.get('.ag-header-cell-text').contains('Carrier').should('exist'); + cy.get('.euiButtonEmpty__text').contains('Full screen').click(); + cy.wait(delay); + cy.get('body').type('{esc}'); + cy.wait(delay); + }); + + it('Switch visualization for table view and sort the column data', () => { + cy.get('.ag-header-cell-text').contains('max(AvgTicketPrice)').click(); + cy.get('.ag-cell-value').contains('125.49737').should('exist'); + cy.get('.ag-header-cell-text').contains('max(AvgTicketPrice)').click(); + cy.get('.ag-cell-value').contains('1199.729').should('exist'); + cy.get('.ag-header-cell-text').contains('DestCountry').click(); + cy.get('.ag-cell-value').contains('AE').should('exist'); + }); + + it('Switch visualization for table view and verify pagination link', () => { + cy.get('[aria-label="Next page"]').click(); + cy.get('.ag-cell-value').contains('Vienna').should('exist'); + cy.get('[aria-label="Previous page"]').click(); + cy.get('.ag-cell-value').contains('Dubai').should('exist'); + cy.get('[aria-label="Page 4"]').contains('4').click(); + cy.get('.ag-cell-value').contains('Edmonton').should('exist'); + }); + it('Switch visualization for table view and rows per page data', () => { + cy.get('.euiButtonEmpty__text').eq('6').click(); + cy.get('.euiContextMenuItem__text').eq(1).click(); + }); +}); + +describe('Render Time series chart/Line chart and verify Data configurations UI ', () => { + it('Render line chart and verify Data Configuration Panel', () => { + renderLineChartForDataConfig(); + DataConfigLineChart(); + }); +}); + +describe('Renders Data Configurations section for Pie chart', () => { + beforeEach(() => { + landOnEventVisualizations(); + }); + + it('Renders Dimensions and Metrics under Data Configurations for Pie chart', () => { + renderPieChart(); + renderDataConfig(); + }); + + it('Validate "Add" and "X" buttons', () => { + renderPieChart(); + cy.get('.euiResizablePanel.euiResizablePanel--middle').contains('Data Configurations'); + cy.get('.euiButton.euiButton--primary.euiButton--fullWidth').contains('Add').click(); + cy.get('.euiFormRow__fieldWrapper .euiComboBox').eq(3).click(); + cy.get('.euiComboBoxOption__content').eq(2).click(); + cy.get('.first-division .euiFormLabel.euiFormRow__label').eq(4).click(); + cy.get('.euiComboBoxOption__content').eq(1).click(); + cy.get('.euiFieldText[placeholder="Custom label"]').eq(1).type('Demo field'); + cy.get('.euiIcon.euiIcon--medium.euiIcon--danger').eq(1).click(); + cy.get('.euiButton.euiButton--primary.euiButton--fullWidth').contains('Add').should('exist'); + }); + + it('Verify drop down values for Aggregation', () => { + renderPieChart(); + cy.get('.euiResizablePanel.euiResizablePanel--middle').contains('Data Configurations'); + cy.get('.euiTitle.euiTitle--xxsmall').eq(1).contains('Dimensions').should('exist'); + cy.get('.first-division .euiFormLabel.euiFormRow__label').eq(0).contains('Aggregation'); + cy.get('[data-test-subj="comboBoxSearchInput"]').eq(0).click(); + aggregationValues.forEach(function (value){ + cy.get('.euiComboBoxOption__content').contains(value); + }); + }); + + it('Collapsible mode for Data Configuration panel', () => { + renderPieChart(); + cy.get('.euiResizablePanel.euiResizablePanel--middle').contains('Data Configurations'); + cy.get('.euiResizableButton.euiResizableButton--horizontal').eq(1).click(); + cy.get('[data-test-subj="panel-1-toggle"]').click(); + cy.get('[class*="euiResizableToggleButton-isCollapsed"]').eq(1).should('exist'); +describe('Renders Histogram chart', () => { + beforeEach(() => { + landOnEventVisualizations(); +}); + +it('Renders Histogram chart and save visualization', () => { + renderHistogramChart(); + cy.get('.euiFlexItem.euiFlexItem--flexGrowZero .euiButton__text').eq(2).click(); + cy.wait(delay); + saveVisualizationAndVerify(); + }); + + it('Delete Visualization for Histogram chart from list of saved Visualizations on Event analytics page', () =>{ + deleteVisualization(); + }) + + it('Renders Histogram chart, add value parameters and verify Reset button click is working', () => { + renderHistogramChart(); + cy.get('[data-test-subj="visualizeEditorResetButton"]').click(); + }); +}); +describe('Render Gauge Chart and verify if data gets render', () => { + it('Render gauge chart and verify by default no data gets render', () => { + renderGaugeChart(); + cy.get('.main-svg').contains('BeatsWest').should('not.exist'); + }); + + it('Render gauge chart and verify data gets render after click on update chart', () => { + renderGaugeChart(); + cy.get('.euiButton__text').contains('Update chart').click(); + cy.get('.main-svg').contains('BeatsWest').should('exist'); + }); +}); + +describe('Render Gauge Chart and work with chart styles', () => { + it('Render gauge chart and change orientation to vertical', () => { + renderGaugeChart(); + cy.get('.euiButton__text').contains('Update chart').click(); + cy.get('.euiButton__text').contains('Vertical').click(); + cy.get('.euiButton__text').contains('Preview').click(); + }); + + it('Render gauge chart and change title size then verify the update on chart', () => { + renderGaugeChart(); + cy.get('.euiButton__text').contains('Update chart').click(); + cy.get('[data-test-subj="valueFieldNumber"]').eq(0).click(); + cy.get('[data-test-subj="valueFieldNumber"]').eq(0).type('30'); + cy.get('.euiButton__text').contains('Preview').click(); + }); + + it('Render gauge chart and change value size then verify the update on chart', () => { + renderGaugeChart(); + cy.get('.euiButton__text').contains('Update chart').click(); + cy.get('[data-test-subj="valueFieldNumber"]').eq(1).click(); + cy.get('[data-test-subj="valueFieldNumber"]').eq(1).type('20'); + cy.get('.euiButton__text').contains('Preview').click(); + }); +}); + +describe('Render Gauge Chart and work with threshold', () => { + it('Render gauge chart and add threshold then verify by default the threshold is not seen', () => { + renderGaugeChart(); + cy.get('.euiButton__text').contains('Update chart').click(); + cy.get('.euiButton__text').contains('+ Add threshold').click(); + cy.get('[data-test-subj="nameFieldText"]').type('Gauge Threshold'); + cy.get('[data-test-subj="valueFieldNumber"]').eq(2).type('50'); + cy.get('.euiButton__text').contains('Preview').click(); + cy.get('[data-unformatted="Gauge Threshold"]').should('not.be.visible'); + }); + + it('Render gauge chart and add threshold then verify the threshold label are seen after show threshold button enabled ', () => { + renderGaugeChart(); + cy.get('.euiButton__text').contains('Update chart').click(); + cy.get('.euiButton__text').contains('+ Add threshold').click(); + cy.get('[data-test-subj="nameFieldText"]').type('Gauge Threshold'); + cy.get('[data-test-subj="valueFieldNumber"]').eq(2).type('50'); + cy.get('.euiSwitch__label').contains('Show threshold labels').click(); + cy.get('.euiButton__text').contains('Preview').click(); + cy.get('[data-unformatted="Gauge Threshold"]').should('be.visible'); + }); + + it('Render gauge chart and add threshold then verify the threshold marker are seen after show threshold button enabled ', () => { + renderGaugeChart(); + cy.get('.euiButton__text').contains('Update chart').click(); + cy.get('.euiButton__text').contains('+ Add threshold').click(); + cy.get('[data-test-subj="nameFieldText"]').type('Gauge Threshold'); + cy.get('[data-test-subj="valueFieldNumber"]').eq(2).type('50'); + cy.get('.euiSwitch__label').contains('Show threshold markers').click(); + cy.get('.euiButton__text').contains('Preview').click(); + cy.get('path[style*="rgb(252, 5, 5)"]').eq(1).should('exist'); + cy.get('.bg-arc').find('path[style*="rgb(252, 5, 5)"]').should('have.length',4); + }); +}); + +describe('Render gauge chart and verify if reset works properly', () => { + it('Render gauge chart with all feild data then click on reset and verify reset works properly', () => { + renderGaugeChart(); + cy.get('.euiButton__text').contains('Update chart').click(); + cy.get('input[placeholder="Title"]').type('Gauge Chart'); + cy.get('textarea[placeholder="Description"]').type('Description For Gauge Chart'); + cy.get('.euiButton__text').contains('Vertical').click(); + cy.get('[data-test-subj="valueFieldNumber"]').eq(0).click(); + cy.get('[data-test-subj="valueFieldNumber"]').eq(0).type('30'); + cy.get('[data-test-subj="valueFieldNumber"]').eq(1).click(); + cy.get('[data-test-subj="valueFieldNumber"]').eq(1).type('20'); + cy.get('.euiButton__text').contains('+ Add threshold').click(); + cy.get('[data-test-subj="nameFieldText"]').type('Gauge Threshold'); + cy.get('[data-test-subj="valueFieldNumber"]').eq(2).type('50'); + cy.get('.euiSwitch__label').contains('Show threshold labels').click(); + cy.get('.euiSwitch__label').contains('Show threshold markers').click(); + cy.get('.euiButton__text').contains('Preview').click(); + cy.get('.euiButtonEmpty__text').contains('Reset').click(); + cy.get('input[placeholder="Title"]').should('not.have.value','Gauge Chart'); + cy.get('textarea[placeholder="Description"]').should('not.have.value','Description For Gauge Chart') + cy.get('[data-test-subj="valueFieldNumber"]').eq(0).should('have.value',''); + cy.get('[data-test-subj="valueFieldNumber"]').eq(1).should('have.value',''); + cy.get('button.euiSwitch__button[aria-checked="false"]').should('exist').should('have.length',3); + }); +}); diff --git a/dashboards-observability/.cypress/integration/2_notebooks.spec.js b/dashboards-observability/.cypress/integration/2_notebooks.spec.js index ca0083249..3ba071215 100644 --- a/dashboards-observability/.cypress/integration/2_notebooks.spec.js +++ b/dashboards-observability/.cypress/integration/2_notebooks.spec.js @@ -12,6 +12,8 @@ import { SAMPLE_URL, SQL_QUERY_TEXT, PPL_QUERY_TEXT, + NOTEBOOK_TEXT, + OPENSEARCH_URL, } from '../utils/constants'; import { SAMPLE_PANEL } from '../utils/panel_constants'; @@ -63,6 +65,13 @@ describe('Testing notebooks table', () => { cy.visit(`${Cypress.env('opensearchDashboards')}/app/observability-dashboards#/notebooks`); }); + it('Notebooks table empty state', () => { + cy.get('#notebookArea').contains('Notebooks (0)').should('exist'); + cy.get('.euiTextAlign.euiTextAlign--center').contains('No notebooks'); + cy.get('.euiButton__text').eq(2).contains('Create notebook'); + cy.get('.euiButton__text').eq(3).contains('Add samples'); + }); + it('Displays error toast for invalid notebook name', () => { cy.get('.euiButton__text').contains('Create notebook').click(); cy.wait(delay); @@ -125,6 +134,21 @@ describe('Testing notebooks table', () => { .should('exist'); }); + it('Notebooks table columns headers and pagination', () => { + cy.get('.euiTitle.euiTitle--small').contains('Notebooks').should('exist'); + cy.get('.euiTableCellContent__text[title="Name"]').should('exist'); + cy.get('.euiTableCellContent__text[title="Last updated"]').should('exist'); + cy.get('.euiTableCellContent__text[title="Created"]').should('exist'); + cy.get('[data-test-subj="tablePaginationPopoverButton"]').should('exist'); + }); + + it('"Learn more" link under Notebooks header', () => { + cy.get('.euiTitle.euiTitle--small').contains('Notebooks'); + cy.get('.euiTextColor.euiTextColor--subdued').contains(NOTEBOOK_TEXT); + cy.get('a.euiLink.euiLink--primary').contains('Learn more').click(); + cy.get(`a[href="${OPENSEARCH_URL}"]`).should('exist'); + }); + it('Deletes notebooks', () => { cy.get('.euiCheckbox__input[data-test-subj="checkboxSelectAll"]').click(); cy.wait(delay); @@ -231,6 +255,16 @@ describe('Testing paragraphs', () => { cy.get('.euiTitle').contains('Event analytics').should('exist'); }); + it('Paragraph actions layout', () => { + cy.get('button[data-test-subj="notebook-paragraph-actions-button"]').should('exist').click(); + cy.get('.euiContextMenuPanelTitle').contains('Actions'); + cy.get('.euiContextMenuItem__text').eq(0).contains('Add paragraph to top'); + cy.get('.euiContextMenuItem__text').eq(1).contains('Add paragraph to bottom'); + cy.get('.euiContextMenuItem__text').eq(2).contains('Run all paragraphs'); + cy.get('.euiContextMenuItem__text').eq(3).contains('Clear all outputs'); + cy.get('.euiContextMenuItem__text').eq(4).contains('Delete all paragraphs'); + }); + it('Renders markdown', () => { cy.get('.euiTextArea').should('not.exist'); cy.get(`a[href="${SAMPLE_URL}"]`).should('exist'); diff --git a/dashboards-observability/.cypress/integration/3_panels.spec.js b/dashboards-observability/.cypress/integration/3_panels.spec.js index 730dd4040..e7b349633 100644 --- a/dashboards-observability/.cypress/integration/3_panels.spec.js +++ b/dashboards-observability/.cypress/integration/3_panels.spec.js @@ -502,37 +502,7 @@ describe('Testing a panel', () => { }); }); -describe('Add samples and clean up all test data', () => { - it('Add sample data', () => { - moveToPanelHome(); - cy.get('.euiButton__text').contains('Actions').trigger('mouseover').click(); - cy.wait(delay); - cy.get('.euiContextMenuItem__text').contains('Add samples').trigger('mouseover').click(); - cy.wait(delay * 3); - cy.get('.euiModalHeader__title[data-test-subj="confirmModalTitleText"]') - .contains('Add samples') - .should('exist'); - cy.wait(delay); - cy.get('.euiButton__text').contains('Yes').trigger('mouseover').click(); - cy.wait(delay * 5); - cy.route2('POST', '/addSamplePanels').as('removePage'); - cy.wait('@removePage').then(() => { - cy.get('.euiTableCellContent').contains(SAMPLE_PANEL).should('exist'); - }); - cy.wait(delay); - }); - - it('Validate sample data', () => { - moveToPanelHome(); - cy.get('.euiTableCellContent').contains(SAMPLE_PANEL).trigger('mouseover').click(); - cy.wait(delay * 3); - cy.get('h1').contains(SAMPLE_PANEL).should('exist'); - cy.wait(delay); - SAMPLE_VISUALIZATIONS_NAMES.forEach((vizName) => - cy.get('h5').contains(vizName).should('exist') - ); - cy.wait(delay); - }); +describe('Clean up all test data', () => { it('Delete visualizations from event analytics', () => { moveToEventsHome(); @@ -572,3 +542,4 @@ describe('Add samples and clean up all test data', () => { cy.get('.euiTextAlign').contains('No Operational Panels').should('exist'); }); }); + diff --git a/dashboards-observability/.cypress/integration/4_trace_analytics_dashboard.spec.js b/dashboards-observability/.cypress/integration/4_trace_analytics_dashboard.spec.js index 6e510a8d8..f9bfb5760 100644 --- a/dashboards-observability/.cypress/integration/4_trace_analytics_dashboard.spec.js +++ b/dashboards-observability/.cypress/integration/4_trace_analytics_dashboard.spec.js @@ -187,3 +187,108 @@ describe('Testing plots', () => { cy.get('text.annotation-text[data-unformatted="Now: 108"]').should('exist'); }); }); + +describe('Latency by trace group table', () =>{ + beforeEach(() => { + cy.visit('app/observability-dashboards#/trace_analytics/home', { + onBeforeLoad: (win) => { + win.sessionStorage.clear(); + }, + }); + setTimeFilter(); + }); + + it('Verify columns in Latency by trace group table along with pagination functionality', () => { + cy.get('span.panel-title').eq(0).should('exist'); + cy.wait(delay); + cy.get('span[title="Trace group name"]').should('exist'); + cy.get('span[title="Latency variance (ms)"]').should('exist'); + cy.get('span[title="Average latency (ms)"]').should('exist'); + cy.get('span[title="24-hour latency trend"]').should('exist'); + cy.get('span[title="Error rate"] .euiToolTipAnchor').should('exist'); + cy.get('span[title="Traces"] .euiToolTipAnchor').should('exist'); + cy.get('[data-test-subj="tablePaginationPopoverButton"]').click(); + cy.get('.euiIcon.euiIcon--medium.euiIcon--inherit.euiContextMenu__icon').eq(0).should('exist').click(); + cy.get('[data-test-subj="pagination-button-next"]').should('exist').click(); + cy.get('button[data-test-subj="dashboard-table-trace-group-name-button"]').contains('mysql').should('exist'); + }); + + it('Sorts the Latency by trace group table', () => { + cy.get('span[title*="Trace group name"]').click(); + cy.get('[data-test-subj="dashboard-table-trace-group-name-button"]').eq(0).contains('/**').should('exist'); + cy.wait(delay); + }); + + it('Verify tooltips in Latency by trace group table', () => { + cy.get('.euiIcon.euiIcon--small.euiIcon--subdued.euiIcon-isLoaded.eui-alignTop').eq(0).trigger('mouseover'); + cy.contains('Traces of all requests that share a common API and operation at the start of distributed tracing instrumentation.').should('be.visible'); + cy.get('.euiIcon.euiIcon--small.euiIcon--subdued.euiIcon-isLoaded.eui-alignTop').eq(1).trigger('mouseover'); + cy.contains('Range of latencies for traces within a trace group in the selected time range.').should('be.visible'); + cy.get('.euiIcon.euiIcon--small.euiIcon--subdued.euiIcon-isLoaded.eui-alignTop').eq(2).trigger('mouseover'); + cy.contains('Average latency of traces within a trace group in the selected time range.').should('be.visible'); + cy.get('.euiIcon.euiIcon--small.euiIcon--subdued.euiIcon-isLoaded.eui-alignTop').eq(3).trigger('mouseover'); + cy.contains('24 hour time series view of hourly average, hourly percentile, and hourly range of latency for traces within a trace group.').should('be.visible'); + cy.get('.euiIcon.euiIcon--small.euiIcon--subdued.euiIcon-isLoaded.eui-alignTop').eq(4).trigger('mouseover'); + cy.contains('Error rate based on count of trace errors within a trace group in the selected time range.').should('be.visible'); + cy.get('.euiIcon.euiIcon--small.euiIcon--subdued.euiIcon-isLoaded.eui-alignTop').eq(5).trigger('mouseover'); + cy.contains('Count of traces with unique trace identifiers in the selected time range.').should('be.visible'); + }); + + it('Verify Search engine on Trace dashboard', () => { + cy.get('.euiFieldSearch.euiFieldSearch--fullWidth').click().type('client_pay_order{enter}'); + cy.wait(delay); + cy.get('.euiTableCellContent.euiTableCellContent--alignRight.euiTableCellContent--overflowingContent').contains('211.04').should('exist'); + cy.get('button[data-test-subj="dashboard-table-trace-group-name-button"]').click(); + cy.get('.euiBadge.euiBadge--hollow.euiBadge--iconRight.globalFilterItem').click(); + cy.get('.euiIcon.euiIcon--medium.euiContextMenu__arrow').click(); + cy.get('.euiContextMenuPanelTitle').contains('Edit filter').should('exist'); + cy.get('.euiButton.euiButton--primary.euiButton--fill').click(); + cy.get('.euiBadge.euiBadge--hollow.euiBadge--iconRight.globalFilterItem').click(); + cy.get('.euiContextMenuItem__text').eq(1).contains('Exclude results').click(); + cy.get('.euiTextColor.euiTextColor--danger').should('exist'); + cy.get('.euiBadge.euiBadge--hollow.euiBadge--iconRight.globalFilterItem').click(); + cy.get('.euiContextMenuItem__text').eq(1).contains('Include results').click(); + cy.get('.euiBadge.euiBadge--hollow.euiBadge--iconRight.globalFilterItem').click(); + cy.get('.euiContextMenuItem__text').eq(2).contains('Temporarily disable').click(); + cy.get('.euiBadge.euiBadge--iconRight.globalFilterItem.globalFilterItem-isDisabled').should('exist').click(); + cy.get('.euiContextMenuItem__text').eq(2).contains('Re-enable').click(); + cy.get('.euiBadge.euiBadge--hollow.euiBadge--iconRight.globalFilterItem').click(); + cy.get('.euiContextMenuItem__text').eq(3).contains('Delete').click(); + }); +}); + +describe('Testing filters on trace analytics page', () =>{ + beforeEach(() => { + cy.visit('app/observability-dashboards#/trace_analytics/home', { + onBeforeLoad: (win) => { + win.sessionStorage.clear(); + }, + }); + setTimeFilter(); + }); + + it('Verify Change all filters', () =>{ + cy.get('.euiButtonIcon.euiButtonIcon--primary.euiButtonIcon--empty.euiButtonIcon--xSmall').click(); + cy.get('.euiContextMenuPanelTitle').contains('Change all filters').should('exist'); + cy.get('.euiContextMenuItem__text').eq(0).contains('Enable all'); + cy.get('.euiContextMenuItem__text').eq(1).contains('Disable all'); + cy.get('.euiContextMenuItem__text').eq(2).contains('Invert inclusion'); + cy.get('.euiContextMenuItem__text').eq(3).contains('Invert enabled/disabled'); + cy.get('.euiContextMenuItem__text').eq(4).contains('Remove all'); + }) + + it('Verify Add filter section', () => { + cy.get('.euiPopover.euiPopover--anchorDownLeft').contains('+ Add filter').click(); + cy.get('.euiPopoverTitle').contains('Add filter').should('exist'); + cy.wait(delay); + cy.get('.euiComboBox__inputWrap.euiComboBox__inputWrap--noWrap').eq(0).trigger('mouseover').click(); + cy.get('.euiComboBoxOption__content').eq(1).click(); + cy.get('.euiComboBox__inputWrap.euiComboBox__inputWrap--noWrap').eq(1).trigger('mouseover').click(); + cy.get('.euiComboBoxOption__content').eq(2).click(); + cy.get('.euiButton.euiButton--primary.euiButton--fill').contains('Save').click(); + cy.get('.euiBadge__content').should('exist').click(); + cy.get('.euiIcon.euiIcon--medium.euiContextMenu__arrow').click(); + cy.get('[data-test-subj="filter-popover-cancel-button"]').contains('Cancel').click(); + cy.get('.euiIcon.euiIcon--small.euiIcon--inherit.euiBadge__icon').click(); + }) +}); diff --git a/dashboards-observability/.cypress/integration/5_trace_analytics_services.spec.js b/dashboards-observability/.cypress/integration/5_trace_analytics_services.spec.js index b03e10e64..bd2cd4c41 100644 --- a/dashboards-observability/.cypress/integration/5_trace_analytics_services.spec.js +++ b/dashboards-observability/.cypress/integration/5_trace_analytics_services.spec.js @@ -5,7 +5,7 @@ /// -import { delay, SERVICE_NAME, SERVICE_SPAN_ID, setTimeFilter } from '../utils/constants'; +import { delay, SERVICE_NAME, SERVICE_SPAN_ID, setTimeFilter, verify_traces_spans_data_grid_cols_exists, count_table_row } from '../utils/constants'; describe('Testing services table empty state', () => { beforeEach(() => { @@ -46,6 +46,28 @@ describe('Testing services table', () => { cy.contains(' (1)').should('exist'); cy.contains('3.57%').should('exist'); }); + + it('Verify columns in Services table', () => { + cy.get('.euiFlexItem.euiFlexItem--flexGrow10 .panel-title').contains('Services').should('exist'); + cy.get('.euiTableCellContent__text[title="Name"]').should('exist'); + cy.get('.euiTableCellContent__text[title="Average latency (ms)"]').should('exist'); + cy.get('.euiTableCellContent__text[title="Error rate"]').should('exist'); + cy.get('.euiTableCellContent__text[title="Throughput"]').should('exist'); + cy.get('.euiTableCellContent__text[title="No. of connected services"]').should('exist'); + cy.get('.euiTableCellContent__text[title="Connected services"]').should('exist'); + cy.get('.euiTableCellContent__text[title="Traces"]').should('exist'); + cy.get('[data-test-subj="tablePaginationPopoverButton"]').click(); + cy.get('.euiIcon.euiIcon--medium.euiIcon--inherit.euiContextMenu__icon').eq(0).should('exist').click(); + cy.get('[data-test-subj="pagination-button-next"]').should('exist').click(); + cy.get('.euiLink.euiLink--primary').contains('order').should('exist'); + }) + + it('Navigate from Services to Traces', () => { + cy.get('.euiTableCellContent__text[title="Traces"]').should('exist'); + cy.contains('74').should('exist').click(); + cy.get('.euiText.euiText--medium .panel-title').should('exist'); + cy.get('.euiBadge__childButton[data-test-subj="filterBadge"]').should('exist'); + }) }); describe('Testing service view empty state', () => { @@ -115,9 +137,143 @@ describe('Testing service view', () => { cy.get('.euiTextColor').contains('Span ID').trigger('mouseover'); cy.get('.euiButtonIcon[aria-label="span-flyout-filter-icon"').click({ force: true }); cy.wait(delay); - cy.get('.euiBadge__text').contains('spanId: ').should('exist'); cy.get('[data-test-subj="euiFlyoutCloseButton"]').click({ force: true }); cy.contains('Spans (1)').should('exist'); }); }); + +describe('Testing Service map', () => { + beforeEach(() => { + cy.visit('app/observability-dashboards#/trace_analytics/services', { + onBeforeLoad: (win) => { + win.sessionStorage.clear(); + }, + }); + setTimeFilter(); + }); + + it('Render Service map', () => { + cy.get('.euiText.euiText--medium .panel-title').contains('Service map'); + cy.get('[data-test-subj="latency"]').should('exist'); + cy.get('.ytitle').contains('Latency (ms)'); + cy.get('[data-text = "Error rate"]').click(); + cy.contains('60%'); + cy.get('[data-text = "Throughput"]').click(); + cy.contains('100'); + cy.get('.euiText.euiText--medium').contains('Focus on').should('exist'); + cy.get('[placeholder="Service name"]').focus().type('database{enter}'); + }) +}); + +describe('Testing traces Spans table verify table headers functionality', () => { + beforeEach(() => { + cy.visit('app/observability-dashboards#/trace_analytics/services', { + onBeforeLoad: (win) => { + win.sessionStorage.clear(); + }, + }); + setTimeFilter(); + }); + + it('Renders the spans table and verify columns headers', () => { + cy.contains(' (8)').should('exist'); + cy.contains('analytics-service, frontend-client, recommendation').should('exist'); + cy.get('.euiLink.euiLink--primary').contains('authentication').should('exist').click(); + cy.get('.panel-title').contains('Spans').should('exist'); + cy.get('.panel-title-count').contains('5').should('exist'); + verify_traces_spans_data_grid_cols_exists(); + }); + + it('Toggle columns and verify the columns hidden text verify rows', () => { + cy.get('.euiLink.euiLink--primary').contains('authentication').should('exist').click(); + cy.get('[data-test-subj = "dataGridColumnSelectorButton"]').click(); + cy.get('.euiSwitch.euiSwitch--compressed.euiSwitch--mini .euiSwitch__button').eq(3).click(); + cy.get('.euiButtonEmpty__text').eq(3).click().should('have.text', '2 columns hidden'); + count_table_row(5); + }); + + it('Show all button Spans table', () => { + cy.get('.euiLink.euiLink--primary').contains('authentication').should('exist').click(); + cy.get('[data-test-subj = "dataGridColumnSelectorButton"]').click(); + cy.get('.euiPopoverFooter .euiFlexItem.euiFlexItem--flexGrowZero').eq(0).should('have.text', 'Show all').click(); + cy.get('.euiDataGrid__focusWrap').click().should('exist'); + verify_traces_spans_data_grid_cols_exists(); + }); + + it('Hide all button Spans table', () => { + cy.get('.euiLink.euiLink--primary').contains('authentication').should('exist').click(); + cy.get('[data-test-subj = "dataGridColumnSelectorButton"]').click(); + cy.get('.euiPopoverFooter .euiFlexItem.euiFlexItem--flexGrowZero').eq(1).should('have.text', 'Hide all').click(); + cy.get('.euiDataGrid__focusWrap').click().should('exist'); + cy.get('[data-test-subj="dataGridColumnSelectorPopover"]').should('have.text', '10 columns hidden'); + }); + + it('Render Spans table and change data table Density', () => { + cy.get('.euiLink.euiLink--primary').contains('authentication').should('exist').click(); + verify_traces_spans_data_grid_cols_exists(); + cy.get('.euiButtonEmpty__text').contains('Density').click(); + cy.get('.euiButtonContent__icon').eq(5).click(); + cy.get('.euiButtonContent__icon').eq(6).click(); + cy.get('.euiButtonContent__icon').eq(7).click(); + }); + + it('Render Spans table and and click on sort', () => { + cy.get('.euiLink.euiLink--primary').contains('authentication').should('exist').click(); + verify_traces_spans_data_grid_cols_exists(); + cy.get('[data-test-subj="dataGridColumnSortingButton"]').contains('Sort fields').should('exist').click(); + cy.get('[data-test-subj="dataGridColumnSortingPopoverColumnSelection"]').click(); + cy.get('[data-test-subj="dataGridColumnSortingPopoverColumnSelection-spanId').click(); + cy.get('[data-test-subj="dataGridColumnSortingPopoverColumnSelection-parentSpanId"]').click(); + cy.get('[data-test-subj="dataGridColumnSortingPopoverColumnSelection-traceId"]').click(); + cy.get('[data-test-subj="dataGridColumnSortingPopoverColumnSelection-traceGroup').click(); + cy.get('[data-test-subj="dataGridColumnSortingPopoverColumnSelection-durationInNanos"]').click(); + cy.get('[data-test-subj="dataGridColumnSortingPopoverColumnSelection-startTime"]').click(); + cy.get('[data-test-subj="dataGridColumnSortingPopoverColumnSelection-endTime').click(); + cy.get('[data-test-subj="dataGridColumnSortingPopoverColumnSelection-status.code"]').click(); + cy.get('.euiButtonEmpty__text').eq(5).contains('8 fields sorted').should('exist'); + cy.get('[data-test-subj="dataGridColumnSortingPopoverColumnSelection"]').click(); + cy.get('[data-test-subj="dataGridColumnSortingButton"]').should('exist').click(); + }); +}); + + +describe('Testing traces Spans table and verify columns functionality', () => { + beforeEach(() => { + cy.visit('app/observability-dashboards#/trace_analytics/services', { + onBeforeLoad: (win) => { + win.sessionStorage.clear(); + }, + }); + setTimeFilter(); + }); + + it('Renders the spans table and click on first span to verify details', () => { + cy.get('.euiLink.euiLink--primary').contains('authentication').should('exist').click(); + verify_traces_spans_data_grid_cols_exists(); + cy.get('.euiLink--primary').eq(4).click(); + cy.get('[data-test-subj="spanDetailFlyout"] .euiTitle.euiTitle--medium').contains('Span detail').should('exist'); + cy.get('.euiFlyoutBody .panel-title').contains('Overview').should('exist'); + cy.get('.euiTextColor.euiTextColor--subdued').contains('Span ID').should('exist'); + cy.get('.euiDescriptionList__description .euiFlexItem').eq(0).contains('d03fecfa0f55b77c').should('exist'); + cy.get('.euiFlyoutBody__overflowContent .panel-title').contains('Span attributes').should('exist'); + cy.get('.euiDescriptionList__description .euiFlexItem').eq(0).trigger('mouseover').click(); + cy.get('[aria-label="span-flyout-filter-icon"]').click(); + cy.get('.euiFlyout__closeButton.euiFlyout__closeButton--inside').click(); + cy.get('.euiBadge__content .euiBadge__text').contains('spanId: d03fecfa0f55b77c').should('exist'); + count_table_row(1); + cy.get('[aria-label="remove current filter"]').click(); + count_table_row(5); + }); + + it('Render Spans table and verify Column functionality', () => { + cy.get('.euiLink.euiLink--primary').contains('authentication').should('exist').click(); + verify_traces_spans_data_grid_cols_exists(); + cy.get('.euiDataGridHeaderCell__content').contains('Span ID').click(); + cy.get('.euiListGroupItem__label').contains('Hide column').click(); + cy.get('.euiDataGridHeaderCell__content').contains('Trace ID').click(); + cy.get('.euiListGroupItem__label').contains('Sort A-Z').click(); + cy.get('.euiDataGridHeaderCell__content').contains('Trace group').click(); + cy.get('.euiListGroupItem__label').contains('Move left').click(); + }); +}); diff --git a/dashboards-observability/.cypress/integration/6_trace_analytics_traces.spec.js b/dashboards-observability/.cypress/integration/6_trace_analytics_traces.spec.js index d8c5735fc..14f71ec10 100644 --- a/dashboards-observability/.cypress/integration/6_trace_analytics_traces.spec.js +++ b/dashboards-observability/.cypress/integration/6_trace_analytics_traces.spec.js @@ -113,3 +113,43 @@ describe('Testing trace view', () => { cy.contains('Spans (1)').should('exist'); }); }); + +describe('Testing traces table', () => { + beforeEach(() => { + cy.visit('app/observability-dashboards#/trace_analytics/traces', { + onBeforeLoad: (win) => { + win.sessionStorage.clear(); + }, + }); + setTimeFilter(); + }); + + it('Renders the traces table and verify Table Column, Pagination and Rows Data ', () => { + cy.get('.euiTableCellContent__text').contains('Trace ID').should('exist'); + cy.get('.euiTableCellContent__text').contains('Trace group').should('exist'); + cy.get('.euiTableCellContent__text').contains('Latency (ms)').should('exist'); + cy.get('.euiTableCellContent__text').contains('Percentile in trace group').should('exist'); + cy.get('.euiTableCellContent__text').contains('Errors').should('exist'); + cy.get('.euiTableCellContent__text').contains('Last updated').should('exist'); + cy.get('[data-test-subj="pagination-button-next"]').click(); + cy.contains('client_pay_order').should('exist'); + cy.get('[data-test-subj="pagination-button-previous"]').click(); + cy.contains('224.99').should('exist'); + cy.get('.euiButtonEmpty').contains('5').click(); + cy.contains('690d3c7af1a78cf89c43e...').should('exist'); + cy.contains('5be8370207cbb002a165d...').click(); + cy.contains('client_create_order').should('exist'); + cy.get('path[style*="rgb(116, 146, 231)"]').should('exist'); + cy.go('back'); + cy.wait(delay); + cy.get('.euiButtonEmpty__text').contains('Rows per page').click(); + cy.get('.euiContextMenuItem__text').contains('15 rows').click(); + let expected_row_count=15; + cy.get('.euiTable--auto') + .find("tr") + .then((row) => { + let total=row.length-1; + expect(total).to.equal(expected_row_count); + }); + }); +}); diff --git a/dashboards-observability/.cypress/integration/VisualizationCharts/10_scatter_chart.spec.js b/dashboards-observability/.cypress/integration/VisualizationCharts/10_scatter_chart.spec.js new file mode 100644 index 000000000..d84e23b00 --- /dev/null +++ b/dashboards-observability/.cypress/integration/VisualizationCharts/10_scatter_chart.spec.js @@ -0,0 +1,228 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +/// +import { + delay, + TEST_QUERIES, + querySearch, + landOnEventVisualizations + } from '../../utils/event_constants'; + + const numberOfWindow = 4; + const legendSize = 20; + const pointSize = 30; + const pointSizeUpdated = 35; + const lineWidth = 7; + const lineWidthUpdated = 9; + const fillOpacity = 10; + const fillOpacityUpdated = 50; + const rotateLevel = 45; + const thresholdValue = 50; + + const renderScatterChart = () => { + landOnEventVisualizations(); + querySearch(TEST_QUERIES[6].query, TEST_QUERIES[6].dateRangeDOM); + cy.get('[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]').type('scatter').type('{enter}'); + }; + + describe('Render scatter chart and verify default behaviour ', () => { + beforeEach(() => { + renderScatterChart(); + }); + + it('Render scatter chart and verify by default the data gets render', () => { + cy.get('.xy').should('exist'); + }); + + it('Render scatter chart and verify you see data configuration panel and chart panel', () => { + cy.get('.euiPanel.euiPanel--paddingSmall').should('have.length', numberOfWindow); + cy.get('.euiTitle.euiTitle--xxsmall').contains('Data Configurations').should('exist'); + cy.get('.euiTitle.euiTitle--xxsmall').contains('Dimensions').should('exist'); + cy.get('.euiTitle.euiTitle--xxsmall').contains('Metrics').should('exist'); + cy.get('.euiIEFlexWrapFix').contains('Panel options').click(); + cy.get('.euiIEFlexWrapFix').contains('Legend').click(); + cy.get('.euiIEFlexWrapFix').contains('Chart styles').click(); + cy.get('.euiIEFlexWrapFix').contains('Color theme').click(); + cy.get('.euiIEFlexWrapFix').contains('Thresholds').click(); + cy.get('[aria-label="Press to toggle this panel"]').eq(1).click(); + cy.get('[aria-label="Press to toggle this panel"]').eq(2).click(); + }); + + it('Render scatter chart and verify the data configuration panel and chart panel are collapsable', () => { + cy.get('.euiPanel.euiPanel--paddingSmall').should('have.length', numberOfWindow); + cy.get('[aria-label="Press to toggle this panel"]').eq(1).click(); + cy.get('[aria-label="Press to toggle this panel"]').eq(2).click(); + }); + }); + + describe('Render scatter chart for data configuration panel', () => { + beforeEach(() => { + renderScatterChart(); + }); + + it('Render scatter chart and verify data config panel', () => { + cy.get('.euiComboBoxPill.euiComboBoxPill--plainText').eq(0).should('contain', 'span(timestamp,1d)'); + cy.get('.euiComboBoxPill.euiComboBoxPill--plainText').eq(1).should('contain', 'count()'); + }); + + it('Render scatter chart and verify data config panel no result found if metric is missing', () => { + cy.get('[data-test-subj="comboBoxClearButton"]').eq(1).click(); + cy.get('.euiTextColor.euiTextColor--subdued').contains('No results found').should('exist'); + cy.get('.euiComboBoxOption__content').contains('count()').click(); + cy.get('.main-svg').contains('No results found').should('not.exist'); + }); + }); + + describe('Render scatter chart for panel options', () => { + beforeEach(() => { + renderScatterChart(); + }); + + it('Render scatter chart and verify the title gets updated according to user input ', () => { + cy.get('input[name="title"]').type("scatter Chart"); + cy.get('textarea[name="description"]').should('exist').click(); + cy.get('.gtitle').contains('scatter Chart').should('exist'); + }); + }); + + describe('Render scatter chart for legend', () => { + beforeEach(() => { + renderScatterChart(); + }); + + it('Render scatter chart and verify legends for Show and Hidden', () => { + cy.get('[data-text="Show"]').should('have.text', 'Show'); + cy.get('[data-text="Show"] [data-test-subj="show"]').should('have.attr', 'checked'); + cy.get('[data-text="Hidden"]').should('have.text', 'Hidden').click(); + cy.get('[data-text="Hidden"] [data-test-subj="hidden"]').should('not.have.attr', 'checked'); + cy.get('[data-unformatted="max(bytes)"]').should('not.exist'); + }); + + it('Render scatter chart and verify legends for position Right and Bottom', () => { + cy.get('[data-text="Right"] [data-test-subj="v"]').should('have.attr', 'checked'); + cy.get('[data-text="Bottom"]').should('have.text', 'Bottom').click(); + cy.get('[data-text="Bottom"] [data-test-subj="h"]').should('not.have.attr', 'checked'); + }); + + it('Render scatter chart and increase Legend Size', () => { + cy.get('[data-test-subj="valueFieldNumber"]').eq(0).click().type(legendSize); + cy.get('textarea[name="description"]').should('exist').click(); + cy.get('.legendtext').should('have.css', 'font-size', '20px'); + }); + }); + + describe('Render scatter chart for Chart Styles ', () => { + beforeEach(() => { + renderScatterChart(); + }); + + it('Render ltime serires and verify chart style of Marker Mode', () => { + cy.get('#configPanel__panelOptions .euiFieldText').click().type('scatter chart'); + cy.get('.euiFlexItem .euiFormRow [placeholder="Description"]').click().type('This is the description for scatter chart with chart style of Points'); + cy.get('[data-text="Marker"]').should('have.text', 'Marker').click(); + cy.get('[data-text="Marker"] [data-test-subj="markers"]').should('have.attr', 'checked'); + + }); + + it('Render scatter chart and verify chart style of Marker Mode with larger Point size', () => { + cy.get('#configPanel__panelOptions .euiFieldText').click().type('scatter chart'); + cy.get('.euiFlexItem .euiFormRow [placeholder="Description"]').click().type('This is the description for scatter chart with chart style of Points'); + cy.get('[data-text="Marker"]').should('have.text', 'Marker').click(); + cy.get('[data-text="Marker"] [data-test-subj="markers"]').should('have.attr', 'checked'); + cy.get('input[type="range"]') + .then($el => $el[0].stepUp(pointSize)) + .trigger('change') + cy.get('.euiRangeSlider').should('have.value', pointSizeUpdated) + + }); + + it('Render scatter chart and verify chart style of Lines+Marker Mode', () => { + cy.get('#configPanel__panelOptions .euiFieldText').click().type('scatter chart'); + cy.get('.euiFlexItem .euiFormRow [placeholder="Description"]').click().type('This is the description for scatter chart with chart style of Lines and Marker'); + cy.get('[data-text="Lines + Markers"]').should('have.text', 'Lines + Markers').click(); + cy.get('[data-text="Lines + Markers"] [data-test-subj="lines+markers"]').should('not.have.attr', 'checked'); + + }); + + it('Render scatter chart and verify chart style of Lines+Marker Mode with Line Width, Fill Opacity and Point Size', () => { + cy.get('#configPanel__panelOptions .euiFieldText').click().type('scatter chart'); + cy.get('.euiFlexItem .euiFormRow [placeholder="Description"]').click().type('This is the description for scatter chart with chart style of Lines and Marker'); + cy.get('[data-text="Lines + Markers"]').should('have.text', 'Lines + Markers').click(); + cy.get('[data-text="Lines + Markers"] [data-test-subj="lines+markers"]').should('not.have.attr', 'checked'); + cy.get('input[type="range"]').eq(0) + .then($el => $el[0].stepUp(lineWidth)) + .trigger('change') + cy.get('.euiRangeSlider').eq(0).should('have.value', lineWidthUpdated) + cy.get('input[type="range"]').eq(1) + .then($el => $el[0].stepUp(fillOpacity)) + .trigger('change') + cy.get('.euiRangeSlider').eq(1).should('have.value', fillOpacityUpdated) + cy.get('input[type="range"]').eq(2) + .then($el => $el[0].stepUp(pointSize)) + .trigger('change') + cy.get('.euiRangeSlider').eq(2).should('have.value', pointSizeUpdated) + cy.get('input[type="range"]').eq(3) + .then($el => $el[0].stepUp(rotateLevel)) + .trigger('change') + cy.get('.euiRangeSlider').eq(3).should('have.value', rotateLevel) + }); + }); + + describe('Render scatter chart for color theme', () => { + beforeEach(() => { + renderScatterChart(); + }); + + it('Render scatter chart and "Add Color theme"', () => { + cy.get('.euiButton__text').contains('+ Add color theme').click(); + cy.wait(delay); + cy.get('[data-test-subj="comboBoxInput"]').eq(5).click(); + cy.get('.euiComboBoxOption__content').contains('count()').click(); + cy.get('path[style*="rgb(252, 5, 5)"]').should('exist'); + + }); + }); + + describe('Render scatter chart and work with Thresholds', () => { + beforeEach(() => { + renderScatterChart(); + }); + + it('Render scatter chart and add threshold', () => { + cy.get('.euiButton__text').contains('+ Add threshold').click(); + cy.get('[data-test-subj="nameFieldText"]').type('scatter chart Threshold'); + cy.get('[data-test-subj="valueFieldNumber"]').eq(1).type(thresholdValue); + cy.get('[data-unformatted="scatter chart Threshold"]').should('be.visible'); + cy.get('path[style*="rgb(252, 5, 5)"]').should('exist'); + }); + }); + + describe('Render scatter chart and verify if reset works properly', () => { + beforeEach(() => { + renderScatterChart(); + }); + + it('Render scatter chart with all feild data then click on reset and verify reset works properly', () => { + cy.get('input[placeholder="Title"]').type('scatter chart'); + cy.get('textarea[placeholder="Description"]').type('Description For scatter chart'); + cy.get('[data-text="Hidden"]').should('have.text', 'Hidden').click(); + cy.get('[data-test-subj="valueFieldNumber"]').eq(0).click().type(legendSize); + cy.get('.euiButton__text').contains('+ Add color theme').click(); + cy.wait(delay); + cy.get('[data-test-subj="comboBoxInput"]').eq(5).click(); + cy.get('.euiComboBoxOption__content').contains('count()').click(); + cy.get('.euiButton__text').contains('+ Add threshold').click(); + cy.get('[data-test-subj="nameFieldText"]').type('scatter chart Threshold'); + cy.get('[data-test-subj="valueFieldNumber"]').eq(1).type(thresholdValue); + cy.get('.euiButtonEmpty__text').contains('Reset').click(); + cy.get('input[placeholder="Title"]').should('not.have.value', 'scatter chart'); + cy.get('textarea[placeholder="Description"]').should('not.have.value', 'Description For scatter chart') + cy.get('[data-text="Show"] [data-test-subj="show"]').should('have.attr', 'checked'); + cy.get('[data-text="Right"] [data-test-subj="v"]').should('have.attr', 'checked'); + cy.get('[data-test-subj="valueFieldNumber"]').eq(0).should('have.value', ''); + }); + }); + \ No newline at end of file diff --git a/dashboards-observability/.cypress/integration/VisualizationCharts/11_horizontalBar_chart.spec.js b/dashboards-observability/.cypress/integration/VisualizationCharts/11_horizontalBar_chart.spec.js new file mode 100644 index 000000000..a93030962 --- /dev/null +++ b/dashboards-observability/.cypress/integration/VisualizationCharts/11_horizontalBar_chart.spec.js @@ -0,0 +1,244 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +/// +import { + delay, + TEST_QUERIES, + querySearch, + landOnEventVisualizations, + } from '../../utils/event_constants'; + + const numberOfWindow = 4; + const labelSize = 20; + const rotateLevel = 45; + const groupWidth = 10; + const groupWidthUpdated = 0.8; + const barWidth = 10; + const barWidthUpdated = 80; + const lineWidth = 7; + const lineWidthUpdated = 8; + const fillOpacity = 10; + const fillOpacityUpdated = 90; + const numberOfColor = 24; + + const renderHorizontalBarChart = () => { + landOnEventVisualizations(); + querySearch(TEST_QUERIES[4].query, TEST_QUERIES[4].dateRangeDOM); + cy.get('[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]') + .type('Horizontal Bar') + .type('{enter}'); + }; + + describe('Render horizontal bar chart and verify default behaviour ', () => { + beforeEach(() => { + renderHorizontalBarChart(); + }); + + it('Render horizontal bar chart and verify by default the data gets render', () => { + cy.get('.xy').should('exist'); + }); + + it('Render horizontal bar chart and verify you see data configuration panel and chart panel', () => { + cy.get('.euiPanel.euiPanel--paddingSmall').should('have.length', numberOfWindow); + cy.get('.euiTitle.euiTitle--xxsmall').contains('Data Configurations').should('exist'); + cy.get('.euiTitle.euiTitle--xxsmall').contains('Dimensions').should('exist'); + cy.get('.euiTitle.euiTitle--xxsmall').contains('Metrics').should('exist'); + cy.get('.euiIEFlexWrapFix').contains('Panel options').click(); + cy.get('.euiIEFlexWrapFix').contains('Legend').click(); + cy.get('.euiIEFlexWrapFix').contains('Chart styles').click(); + cy.get('.euiIEFlexWrapFix').contains('Color theme').click(); + cy.get('[aria-label="Press to toggle this panel"]').eq(1).click(); + cy.get('[aria-label="Press to toggle this panel"]').eq(2).click(); + }); + + it('Render horizontal bar chart and verify the data configuration panel and chart panel are collapsable', () => { + cy.get('.euiPanel.euiPanel--paddingSmall').should('have.length', numberOfWindow); + cy.get('[aria-label="Press to toggle this panel"]').eq(1).click(); + cy.get('[aria-label="Press to toggle this panel"]').eq(2).click(); + }); + }); + + describe('Render horizontal bar chart for data configuration panel', () => { + beforeEach(() => { + renderHorizontalBarChart(); + }); + + it('Render horizontal bar chart and verify data config panel', () => { + cy.get('.euiComboBoxPill.euiComboBoxPill--plainText').eq(0).should('contain', 'tags'); + cy.get('.euiComboBoxPill.euiComboBoxPill--plainText').eq(1).should('contain', 'count()'); + cy.get('.euiComboBoxPill.euiComboBoxPill--plainText').eq(2).should('contain', 'avg(bytes)'); + cy.get('.euiComboBoxPill.euiComboBoxPill--plainText').eq(3).should('contain', 'host'); + }); + + it('Render horizontal bar chart and verify data config panel restrict user to select a duplicate field on dimension field', () => { + cy.get('[data-test-subj="comboBoxInput"]').eq(1).click(); + cy.get('[data-test-subj="comboBoxClearButton"]').eq(0).click(); + cy.get('[data-test-subj="comboBoxInput"]').eq(1).click(); + cy.get('.euiComboBoxOption__content').should('have.length', 1); + cy.get('.euiComboBoxOption__content').contains('tags'); + }); + + it('Render horizontal bar chart and verify data config panel Restrict user to select a duplicate field on Metrics field', () => { + cy.get('.euiText.euiText--extraSmall').eq(1).click(); + cy.get('[data-test-subj="comboBoxClearButton"]').eq(1).click(); + cy.get('[data-test-subj="comboBoxInput"]').eq(3).click(); + cy.get('.euiComboBoxOption__content').should('not.contain', 'tags'); + cy.get('.euiComboBoxOption__content').should('have.length', 2); + }); + + it('Render horizontal bar chart and verify data config panel no result found if metric is missing', () => { + cy.get('.euiText.euiText--extraSmall').eq(0).click(); + cy.get('.euiText.euiText--extraSmall').eq(1).click(); + cy.get('[data-test-subj="comboBoxClearButton"]').eq(1).click(); + cy.get('[data-test-subj="comboBoxInput"]').eq(0).click(); + cy.get('.euiButton__text').contains('Update chart').click(); + cy.get('.euiTextColor.euiTextColor--subdued').contains('No results found').should('exist'); + cy.get('[data-test-subj="comboBoxInput"]').eq(3).click(); + cy.get('.euiComboBoxOption__content').contains('avg(bytes)').click(); + cy.get('.euiButton__text').contains('Update chart').click(); + cy.get('.main-svg').contains('No results found').should('not.exist'); + }); + }); + + describe('Render horizontal bar chart for panel options', () => { + beforeEach(() => { + renderHorizontalBarChart(); + }); + + it('Render horizontal bar chart and verify the title gets updated according to user input ', () => { + cy.get('input[name="title"]').type('horizontal bar chart'); + cy.get('textarea[name="description"]').should('exist').click(); + cy.get('.gtitle').contains('horizontal bar chart').should('exist'); + }); + }); + + describe('Render horizontal bar chart for legend', () => { + beforeEach(() => { + renderHorizontalBarChart(); + }); + + it('Render horizontal bar chart and verify legends for Show and Hidden', () => { + cy.get('[data-text="Show"]').should('have.text', 'Show'); + cy.get('[data-text="Show"] [data-test-subj="show"]').should('have.attr', 'checked'); + cy.get('[data-text="Hidden"]').should('have.text', 'Hidden').click(); + cy.get('[data-text="Hidden"] [data-test-subj="hidden"]').should('not.have.attr', 'checked'); + cy.get('[data-unformatted="max(bytes)"]').should('not.exist'); + }); + + it('Render horizontal bar chart and verify legends for position Right and Bottom', () => { + cy.get('[data-text="Right"]').should('have.text', 'Right'); + cy.get('[data-text="Right"] [data-test-subj="v"]').should('have.attr', 'checked'); + cy.get('[data-text="Bottom"]').should('have.text', 'Bottom').click(); + cy.get('[data-text="Bottom"] [data-test-subj="h"]').should('not.have.attr', 'checked'); + }); + }); + + describe('Render horizontal bar chart for chart style options', () => { + beforeEach(() => { + renderHorizontalBarChart(); + }); + + it('Render horizontal bar chart and increase Label Size ', () => { + cy.get('[data-test-subj="valueFieldNumber"]').click().type(labelSize); + cy.get('textarea[name="description"]').should('exist').click(); + cy.get('[data-unformatted="login"]').should('have.css', 'font-size', '20px'); + }); + + it('Render horizontal bar chart and "Rotate bar labels"', () => { + cy.get('input[type="range"]') + .eq(0) + .then(($el) => $el[0].stepUp(rotateLevel)) + .trigger('change'); + cy.get('.euiRangeSlider').eq(0).should('have.value', rotateLevel); + }); + + it('Render horizontal bar chart and change "Group Width"', () => { + cy.get('input[type="range"]') + .eq(1) + .then(($el) => $el[0].stepUp(groupWidth)) + .trigger('change'); + cy.get('.euiRangeSlider').eq(1).should('have.value', groupWidthUpdated); + }); + + it('Render horizontal bar chart and change "Bar Width"', () => { + cy.get('input[type="range"]') + .eq(2) + .then(($el) => $el[0].stepDown(barWidth)) + .trigger('change'); + cy.get('.euiRangeSlider').eq(4).should('have.value', barWidthUpdated); + }); + + it('Render horizontal bar chart and change "Line Width"', () => { + cy.get('input[type="range"]') + .eq(3) + .then(($el) => $el[0].stepUp(lineWidth)) + .trigger('change'); + cy.get('.euiRangeSlider').eq(3).should('have.value', lineWidthUpdated); + }); + + it('Render horizontal bar chart and change "Fill Opacity"', () => { + cy.get('input[type="range"]') + .eq(4) + .then(($el) => $el[0].stepUp(fillOpacity)) + .trigger('change'); + cy.get('.euiRangeSlider').eq(4).should('have.value', fillOpacityUpdated); + }); + }); + + describe('Render horizontal bar chart for color theme', () => { + beforeEach(() => { + renderHorizontalBarChart(); + }); + + it('Render horizontal bar chart and "Add color theme"', () => { + cy.get('.euiButton__text').contains('+ Add color theme').click(); + cy.wait(delay); + cy.get('[data-test-subj="comboBoxInput"]').eq(9).click(); + cy.get('.euiComboBoxOption__content').contains('avg(bytes)').click(); + cy.get('.point').find('path[style*="rgb(252, 5, 5)"]').should('have.length', numberOfColor); + }); + }); + + describe('Render horizontal bar chart and verify if reset works properly', () => { + beforeEach(() => { + renderHorizontalBarChart(); + }); + + it('Render horizontal bar chart with all feild data then click on reset and verify reset works properly', () => { + cy.get('input[placeholder="Title"]').type('horizontal bar chart'); + cy.get('textarea[placeholder="Description"]').type('Description For horizontal bar chart'); + cy.get('.euiButton__text').contains('Hidden').click(); + cy.get('.euiButton__text').contains('Stack').click(); + cy.get('[data-test-subj="valueFieldNumber"]').click().type(labelSize); + cy.get('input[type="range"]') + .eq(0) + .then(($el) => $el[0].stepUp(rotateLevel)) + .trigger('change'); + cy.get('input[type="range"]') + .eq(1) + .then(($el) => $el[0].stepUp(groupWidth)) + .trigger('change'); + cy.get('input[type="range"]') + .eq(2) + .then(($el) => $el[0].stepDown(barWidth)) + .trigger('change'); + cy.get('input[type="range"]') + .eq(3) + .then(($el) => $el[0].stepUp(lineWidth)) + .trigger('change'); + cy.get('.euiButtonEmpty__text').contains('Reset').click(); + cy.get('input[placeholder="Title"]').should('not.have.value', 'horizontal bar chart'); + cy.get('textarea[placeholder="Description"]').should( + 'not.have.value', + 'Description For horizontal bar chart' + ); + cy.get('[data-text="Show"] [data-test-subj="show"]').should('have.attr', 'checked'); + cy.get('[data-text="Right"] [data-test-subj="v"]').should('have.attr', 'checked'); + cy.get('[data-text="Vertical"] [data-test-subj="v"]').should('have.attr', 'checked'); + cy.get('[data-text="Group"] [data-test-subj="group"]').should('have.attr', 'checked'); + cy.get('[data-test-subj="valueFieldNumber"]').should('have.value', ''); + }); + }); diff --git a/dashboards-observability/.cypress/integration/VisualizationCharts/12_boxPlot_chart.spec.js b/dashboards-observability/.cypress/integration/VisualizationCharts/12_boxPlot_chart.spec.js new file mode 100644 index 000000000..d4dae465e --- /dev/null +++ b/dashboards-observability/.cypress/integration/VisualizationCharts/12_boxPlot_chart.spec.js @@ -0,0 +1,248 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +/// +import { + delay, + TEST_QUERIES, + querySearch, + landOnEventVisualizations, +} from '../../utils/event_constants'; + +const numberOfWindow = 4; +const labelSize = 20; +const rotateLevel = 45; +const boxSize = 7; +const boxSizeUpdated = 1; +const markerSize = 5; +const markerSizeUpdated = 1; +const jitter = 2; +const jitterUpdated = .1; +const fillOpacity = 10; +const fillOpacityUpdated = 50; +const numberOfColor = 24; + +const renderBoxPlot = () => { + landOnEventVisualizations(); + querySearch(TEST_QUERIES[4].query, TEST_QUERIES[4].dateRangeDOM); + cy.get('[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]') + .type('Box plot') + .type('{enter}'); +}; + +describe('Render box plot and verify default behaviour ', () => { + beforeEach(() => { + renderBoxPlot(); + }); + + it('Render box plot and verify by default the data gets render', () => { + cy.get('.xy').should('exist'); + }); + + it('Render box plot and verify you see data configuration panel and chart panel', () => { + cy.get('.euiPanel.euiPanel--paddingSmall').should('have.length', numberOfWindow); + cy.get('.euiTitle.euiTitle--xxsmall').contains('Data Configurations').should('exist'); + cy.get('.euiTitle.euiTitle--xxsmall').contains('Dimensions').should('exist'); + cy.get('.euiTitle.euiTitle--xxsmall').contains('Metrics').should('exist'); + cy.get('.euiIEFlexWrapFix').contains('Panel options').click(); + cy.get('.euiIEFlexWrapFix').contains('Legend').click(); + cy.get('.euiIEFlexWrapFix').contains('Chart styles').click(); + cy.get('.euiIEFlexWrapFix').contains('Color Theme').click(); + cy.get('[aria-label="Press to toggle this panel"]').eq(1).click(); + cy.get('[aria-label="Press to toggle this panel"]').eq(2).click(); + }); + + it('Render box plot and verify the data configuration panel and chart panel are collapsable', () => { + cy.get('.euiPanel.euiPanel--paddingSmall').should('have.length', numberOfWindow); + cy.get('[aria-label="Press to toggle this panel"]').eq(1).click(); + cy.get('[aria-label="Press to toggle this panel"]').eq(2).click(); + }); +}); + +describe('Render box plot for data configuration panel', () => { + beforeEach(() => { + renderBoxPlot(); + }); + + it('Render box plot and verify data config panel', () => { + cy.get('.euiComboBoxPill.euiComboBoxPill--plainText').eq(0).should('contain', 'tags'); + cy.get('.euiComboBoxPill.euiComboBoxPill--plainText').eq(1).should('contain', 'count()'); + cy.get('.euiComboBoxPill.euiComboBoxPill--plainText').eq(2).should('contain', 'avg(bytes)'); + cy.get('.euiComboBoxPill.euiComboBoxPill--plainText').eq(3).should('contain', 'host'); + }); + + it('Render box plot and verify data config panel restrict user to select a duplicate field on dimension field', () => { + cy.get('[data-test-subj="comboBoxInput"]').eq(1).click(); + cy.get('[data-test-subj="comboBoxClearButton"]').eq(0).click(); + cy.get('[data-test-subj="comboBoxInput"]').eq(1).click(); + cy.get('.euiComboBoxOption__content').should('have.length', 1); + cy.get('.euiComboBoxOption__content').contains('tags'); + }); + + it('Render box plot and verify data config panel Restrict user to select a duplicate field on Metrics field', () => { + cy.get('.euiText.euiText--extraSmall').eq(1).click(); + cy.get('[data-test-subj="comboBoxClearButton"]').eq(1).click(); + cy.get('[data-test-subj="comboBoxInput"]').eq(3).click(); + cy.get('.euiComboBoxOption__content').should('not.contain', 'tags'); + cy.get('.euiComboBoxOption__content').should('have.length', 2); + }); + + it('Render box plot and verify data config panel no result found if metric is missing', () => { + cy.get('.euiText.euiText--extraSmall').eq(0).click(); + cy.get('.euiText.euiText--extraSmall').eq(1).click(); + cy.get('[data-test-subj="comboBoxClearButton"]').eq(1).click(); + cy.get('[data-test-subj="comboBoxInput"]').eq(0).click(); + cy.get('.euiButton__text').contains('Update chart').click(); + cy.get('.euiTextColor.euiTextColor--subdued').contains('No results found').should('exist'); + cy.get('[data-test-subj="comboBoxInput"]').eq(3).click(); + cy.get('.euiComboBoxOption__content').contains('avg(bytes)').click(); + cy.get('.euiButton__text').contains('Update chart').click(); + cy.get('.main-svg').contains('No results found').should('not.exist'); + }); +}); + +describe('Render box plot for panel options', () => { + beforeEach(() => { + renderBoxPlot(); + }); + + it('Render box plot and verify the title gets updated according to user input ', () => { + cy.get('input[name="title"]').type('box plot'); + cy.get('textarea[name="description"]').should('exist').click(); + cy.get('.gtitle').contains('box plot').should('exist'); + }); +}); + +describe('Render box plot for legend', () => { + beforeEach(() => { + renderBoxPlot(); + }); + + it('Render box plot and verify legends for Show and Hidden', () => { + cy.get('[data-text="Show"]').should('have.text', 'Show'); + cy.get('[data-text="Show"] [data-test-subj="show"]').should('have.attr', 'checked'); + cy.get('[data-text="Hidden"]').should('have.text', 'Hidden').click(); + cy.get('[data-text="Hidden"] [data-test-subj="hidden"]').should('not.have.attr', 'checked'); + cy.get('[data-unformatted="max(bytes)"]').should('not.exist'); + }); + + it('Render box plot and verify legends for position Right and Bottom', () => { + cy.get('[data-text="Right"]').should('have.text', 'Right'); + cy.get('[data-text="Right"] [data-test-subj="v"]').should('have.attr', 'checked'); + cy.get('[data-text="Bottom"]').should('have.text', 'Bottom').click(); + cy.get('[data-text="Bottom"] [data-test-subj="h"]').should('not.have.attr', 'checked'); + }); +}); + +describe('Render box plot for chart style options', () => { + beforeEach(() => { + renderBoxPlot(); + }); + + it('Render box plot and increase Label Size ', () => { + cy.get('[data-test-subj="valueFieldNumber"]').click().type(labelSize); + cy.get('textarea[name="description"]').should('exist').click(); + cy.get('[data-unformatted="count()"]').should('have.css', 'font-size', '20px'); + }); + + it('Render box plot and "Rotate box labels"', () => { + cy.get('input[type="range"]') + .eq(0) + .then(($el) => $el[0].stepUp(rotateLevel)) + .trigger('change'); + cy.get('.euiRangeSlider').eq(0).should('have.value', rotateLevel); + }); + + it('Render box plot and change "Box gap"', () => { + cy.get('input[type="range"]') + .eq(1) + .then(($el) => $el[0].stepUp(boxSize)) + .trigger('change'); + cy.get('.euiRangeSlider').eq(1).should('have.value', boxSizeUpdated); + }); + + it('Render box plot and change "Marker size"', () => { + cy.get('input[type="range"]') + .eq(2) + .then(($el) => $el[0].stepDown(markerSize)) + .trigger('change'); + cy.get('.euiRangeSlider').eq(2).should('have.value', markerSizeUpdated); + }); + + it('Render box plot and change "Jitter"', () => { + cy.get('input[type="range"]') + .eq(3) + .then(($el) => $el[0].stepDown(jitter)) + .trigger('change'); + cy.get('.euiRangeSlider').eq(3).should('have.value', jitterUpdated); + }); + + it('Render box plot and change "Fill opacity"', () => { + cy.get('input[type="range"]') + .eq(4) + .then(($el) => $el[0].stepUp(fillOpacity)) + .trigger('change'); + cy.get('.euiRangeSlider').eq(4).should('have.value', fillOpacityUpdated); + }); +}); + +describe('Render box plot for color theme', () => { + beforeEach(() => { + renderBoxPlot(); + }); + + it('Render box plot and "Add color theme"', () => { + cy.get('.euiButton__text').contains('+ Add color theme').click(); + cy.wait(delay); + cy.get('[data-test-subj="comboBoxInput"]').eq(9).click(); + cy.get('.euiComboBoxOption__content').contains('avg(bytes)').click(); + cy.get('.points').find('path[style*="rgb(252, 5, 5)"]').should('have.length', numberOfColor); + }); +}); + +describe('Render box plot and verify if reset works properly', () => { + beforeEach(() => { + renderBoxPlot(); + }); + + it('Render box plot with all feild data then click on reset and verify reset works properly', () => { + cy.get('input[placeholder="Title"]').type('box plot'); + cy.get('textarea[placeholder="Description"]').type('Description For box plot'); + cy.get('.euiButton__text').contains('Hidden').click(); + cy.get('.euiButton__text').contains('Horizontal').click(); + cy.get('[data-test-subj="valueFieldNumber"]').click().type(labelSize); + cy.get('input[type="range"]') + .eq(0) + .then(($el) => $el[0].stepUp(rotateLevel)) + .trigger('change'); + cy.get('input[type="range"]') + .eq(1) + .then(($el) => $el[0].stepUp(boxSize)) + .trigger('change'); + cy.get('input[type="range"]') + .eq(2) + .then(($el) => $el[0].stepDown(markerSize)) + .trigger('change'); + cy.get('input[type="range"]') + .eq(3) + .then(($el) => $el[0].stepUp(jitter)) + .trigger('change'); + cy.get('input[type="range"]') + .eq(4) + .then(($el) => $el[0].stepUp(fillOpacity)) + .trigger('change'); + cy.get('.euiButtonEmpty__text').contains('Reset').click(); + cy.get('input[placeholder="Title"]').should('not.have.value', 'box plot'); + cy.get('textarea[placeholder="Description"]').should( + 'not.have.value', + 'Description For box plot' + ); + cy.get('[data-text="Show"] [data-test-subj="show"]').should('have.attr', 'checked'); + cy.get('[data-text="Right"] [data-test-subj="v"]').should('have.attr', 'checked'); + cy.get('[data-text="Vertical"] [data-test-subj="v"]').should('have.attr', 'checked'); + cy.get('[data-text="Overlay"] [data-test-subj="overlay"]').should('have.attr', 'checked'); + cy.get('[data-test-subj="valueFieldNumber"]').should('have.value', ''); + }); +}); diff --git a/dashboards-observability/.cypress/integration/VisualizationCharts/13_logsView.spec.js b/dashboards-observability/.cypress/integration/VisualizationCharts/13_logsView.spec.js new file mode 100644 index 000000000..542e3d776 --- /dev/null +++ b/dashboards-observability/.cypress/integration/VisualizationCharts/13_logsView.spec.js @@ -0,0 +1,241 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +/// +import { + delay, + TEST_QUERIES, + querySearch, + landOnEventVisualizations, + saveVisualizationAndVerify, + deleteVisualization, +} from '../../utils/event_constants'; + +const renderLogsView = () => { + landOnEventVisualizations(); + querySearch(TEST_QUERIES[8].query, TEST_QUERIES[8].dateRangeDOM); + cy.get('[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]') + .type('Logs view') + .type('{enter}'); +}; + +const renderLogsViewChart = () => { + landOnEventVisualizations(); + querySearch(TEST_QUERIES[2].query, TEST_QUERIES[2].dateRangeDOM); + cy.get('[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]') + .type('Logs view') + .type('{enter}'); +}; + +const fieldName = 'host'; + +describe('Render Logs view and verify default behavior', () => { + beforeEach(() => { + renderLogsView(); + }); + + it('Render Logs view and verify the default data', () => { + cy.get('.logs-view-container').should('exist'); + }); + + it('Render Logs view and verify Data Configuration panel default behavior', () => { + cy.get('.euiTitle.euiTitle--xxsmall').contains('Data Configurations').should('exist'); + cy.get('.euiTitle.euiTitle--xxsmall').contains('Columns'); + cy.get('.euiFormLabel.euiFormRow__label').contains('Field'); + cy.get('.euiButton.euiButton--primary.euiButton--fullWidth.euiButton-isDisabled').should( + 'be.disabled' + ); + cy.get('[data-test-subj="visualizeEditorRenderButton"]').should('be.disabled'); + }); + + it('Render Logs view and verify Style section for Logs view', () => { + cy.get('.vis-config-tabs .euiTab__content').contains('Style').should('exist'); + cy.get('.euiAccordion__triggerWrapper').contains('Panel options').should('exist'); + cy.get('#configPanel__panelOptions .euiFormRow__labelWrapper') + .contains('Title') + .should('exist'); + cy.get('#configPanel__panelOptions .euiFormRow__labelWrapper') + .contains('Description') + .should('exist'); + }); + + it('Table view should be enabled for Logs view', () => { + cy.get('.euiSwitch__label').contains('Table view').should('exist'); + cy.get('[data-test-subj="workspace__dataTableViewSwitch"][aria-checked="false"]').click(); + cy.get('.ag-header.ag-pivot-off').should('exist'); + }); + + it('Verify Style section for Logs view', () => { + cy.get('#data-panel').contains('Style').should('exist'); + cy.get('.euiAccordion__button').contains('Panel options').should('exist'); + cy.get('#configPanel__panelOptions').contains('Title').should('exist'); + cy.get('.euiFormHelpText.euiFormRow__text').contains('Name your visualization').should('exist'); + cy.get('#configPanel__panelOptions').contains('Description').should('exist'); + }); + + it('Add and Remove toggle buttons for fields section', () => { + cy.get('#available_fields').contains('Available Fields').should('exist'); + cy.get('[aria-label="Add agent to table"]').should('be.disabled'); + cy.get('#selected_fields').contains('Query fields').should('exist'); + cy.get('[aria-label="Remove clientip from table"]').should('be.disabled'); + }); +}); + +describe('Save and Delete Visualization', () => { + beforeEach(() => { + renderLogsView(); + }); + + it('Render Logs view, Save and Delete Visualization', () => { + saveVisualizationAndVerify(); + deleteVisualization(); + }); +}); + +describe('Render Logs view with no stats section in the query', () => { + beforeEach(() => { + renderLogsViewChart(); + }); + + it('Disabled Table view toogle button', () => { + cy.get('[data-test-subj="workspace__dataTableViewSwitch"]').should('be.disabled'); + }); + + it('Save toast message', () => { + const vis_name_sub_string = Math.floor(Math.random() * 100); + cy.get('[data-test-subj="eventExplorer__saveManagementPopover"]').click(); + cy.get('[data-test-subj="eventExplorer__querySaveComboBox"]').click(); + cy.get('.euiComboBoxOptionsList__rowWrap .euiFilterSelectItem').eq(0).click(); + cy.get( + '.euiPopover__panel .euiFormControlLayoutIcons [data-test-subj="comboBoxToggleListButton"]' + ) + .eq(0) + .click(); + cy.get('.euiPopover__panel input') + .eq(1) + .type(`Test visualization` + vis_name_sub_string); + cy.get('[data-test-subj="eventExplorer__querySaveConfirm"]').click(); + cy.get('[data-test-subj="euiToastHeader"]') + .contains('There is no query or(and) visualization to save') + .should('exist'); + }); + + it('Verify Logs view details when PPL query does not have stats section ', () => { + cy.get('[data-test-subj="docTable"]').should('exist'); + cy.get('.osdDocTableHeader').contains('Time').should('exist'); + cy.get('.osdDocTableHeader').contains('_source').should('exist'); + }); + + it('Add and Remove toggle buttons for fields section should be enabled', () => { + //Add field + cy.get('[data-test-subj="fieldToggle-agent"]').click(); + cy.get('[data-test-subj="field-agent"]').should('exist'); + //Remove field + cy.get('[data-test-subj="fieldToggle-agent"]').click(); + cy.get('[aria-labelledby="selected_fields"] [data-test-subj="field-agent-showDetails"]').should( + 'not.exist' + ); + }); + + it('Search engine for fields under Visualizations', () => { + cy.get('[data-test-subj="eventExplorer__sidebarSearch"]').should('exist').type(fieldName); + cy.get('[data-test-subj="fieldToggle-host"]').click(); + cy.get('[data-test-subj="fieldList-selected"]').should('exist'); + }); + + it('View surrounding events button enabled', () => { + cy.get('.euiIcon.euiIcon--medium.euiIcon--inherit.euiButtonIcon__icon') + .eq(2) + .click({ force: true }); + cy.get('#eventsDocFyout').contains('Event Details').should('exist'); + cy.get('.euiButton__text').eq(4).should('not.be.disabled'); + }); +}); + +describe('Event Details overlay', () => { + beforeEach(() => { + renderLogsView(); + }); + + it('Verify Event Details overaly should get opened after clicking on details toggle button', () => { + cy.get('.euiIcon.euiIcon--medium.euiIcon--inherit.euiButtonIcon__icon') + .eq(2) + .click({ force: true }); + cy.get('#eventsDocFyout').contains('Event Details').should('exist'); + }); + + it('Options in Event Details overlay', () => { + cy.get('.euiIcon.euiIcon--medium.euiIcon--inherit.euiButtonIcon__icon') + .eq(2) + .click({ force: true }); + cy.get('#eventsDocFyout').contains('Event Details').should('exist'); + cy.get('.euiTabs .euiTab__content').contains('Table'); + cy.get('.table.table-condensed.osdDocViewerTable').should('exist'); + cy.get('.euiTabs .euiTab__content').contains('JSON').click(); + cy.get('.euiCodeBlock__code.json').should('exist'); + cy.get('.euiTabs .euiTab__content').contains('Traces').click(); + cy.get('.euiCallOutHeader__title').contains('No Trace Id found in the event.').should('exist'); + cy.get('.euiLink.euiLink--primary').contains('Trace Analytics').click(); + cy.get('#trace-analytics').contains('Trace Analytics').should('exist'); + cy.get('.euiLink.euiLink--primary').contains('Log Correlation').click(); + cy.get('#log-correlation').contains('Log Correlation').should('exist'); + }); + + it('View surrounding events button disabled', () => { + cy.get('.euiIcon.euiIcon--medium.euiIcon--inherit.euiButtonIcon__icon') + .eq(2) + .click({ force: true }); + cy.get('#eventsDocFyout').contains('Event Details').should('exist'); + cy.get('.euiButton.euiButton--primary.euiButton-isDisabled.header-button') + .contains('View surrounding events') + .should('be.disabled'); + }); + + it('Event Details overlay resizable and "X" buttons', () => { + cy.get('.euiIcon.euiIcon--medium.euiIcon--inherit.euiButtonIcon__icon') + .eq(2) + .click({ force: true }); + cy.get('#eventsDocFyout').contains('Event Details').should('exist'); + cy.get('[title="Resize"]').click(); + cy.get('.euiIcon.euiIcon--medium.euiIcon--inherit.euiButtonIcon__icon') + .eq(2) + .click({ force: true }); + cy.get('#eventsDocFyout').contains('Event Details').should('exist'); + cy.get('[data-test-subj="euiFlyoutCloseButton"]').should('exist').click(); + }); + + it('Table details on Event Details overlay', () => { + cy.get('.euiIcon.euiIcon--medium.euiIcon--inherit.euiButtonIcon__icon') + .eq(2) + .click({ force: true }); + cy.get('#eventsDocFyout').contains('Event Details').should('exist'); + cy.get('[data-test-subj="docTable"]').should('exist'); + }); +}); + +describe('Data Configuration panel when no stats in the query', () => { + beforeEach(() => { + renderLogsViewChart(); + }); + + it('Data Configuration panel default behavior', () => { + cy.get('.euiTitle.euiTitle--xxsmall').contains('Data Configurations').should('exist'); + cy.get('.euiTitle.euiTitle--xxsmall').contains('Columns').should('exist'); + cy.get('.euiButton__text').eq(2).contains('Add').should('not.be.disabled'); + cy.get('.euiButton__text').eq(3).contains('Update Chart').should('not.be.disabled'); + }); + + it('Add button in Data Configuration panel', () => { + cy.get('.euiTitle.euiTitle--xxsmall').contains('Data Configurations').should('exist'); + cy.get('.euiTitle.euiTitle--xxsmall').contains('Columns').should('exist'); + cy.get('.euiButton__text').eq(2).contains('Add').should('not.be.disabled').click(); + cy.get('.euiFormLabel.euiFormRow__label').contains('Field'); + cy.get('.euiIcon.euiIcon--medium.euiIcon--danger').should('exist'); + cy.get('[data-test-subj="comboBoxToggleListButton"]').eq(0).click(); + cy.get('.euiFlexItem.euiFilterSelectItem__content').eq(1).click(); + cy.get('.euiButton__text').contains('Update Chart').should('not.be.disabled').click(); + cy.get('[data-test-subj="docTable"]').should('exist'); + }); +}); diff --git a/dashboards-observability/.cypress/integration/VisualizationCharts/13_stats_chart.spec.js b/dashboards-observability/.cypress/integration/VisualizationCharts/13_stats_chart.spec.js new file mode 100644 index 000000000..43e071f1e --- /dev/null +++ b/dashboards-observability/.cypress/integration/VisualizationCharts/13_stats_chart.spec.js @@ -0,0 +1,211 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +/// +import { + delay, + TEST_QUERIES, + querySearch, + landOnEventVisualizations +} from '../../utils/event_constants'; + +const numberOfWindow = 4; +const metricsPrecisionUpdated = 2; +const metricUnit = 'cm' ; +const titleSize = '25.5px'; +const titleSizeUpdated = '40px'; +const valueSize = '60.8px'; +const valueSizeUpdated = '73.0px'; + +const renderStatsChart = () => { + landOnEventVisualizations(); + querySearch(TEST_QUERIES[4].query, TEST_QUERIES[4].dateRangeDOM); + cy.get('[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]').type('Stats').type('{enter}'); +}; + +describe('Render stats chart and verify default behaviour ', () => { + beforeEach(() => { + renderStatsChart(); + }); + + it('Render stats chart and verify by default the data gets render', () => { + cy.get('.xy').should('exist'); + }); + + it('Render scatter chart and verify you see data configuration panel and chart panel', () => { + cy.get('.euiPanel.euiPanel--paddingSmall').should('have.length', numberOfWindow); + cy.get('.euiTitle.euiTitle--xxsmall').contains('Data Configurations').should('exist'); + cy.get('.euiTitle.euiTitle--xxsmall').contains('Dimensions').should('exist'); + cy.get('.euiTitle.euiTitle--xxsmall').contains('Metrics').should('exist'); + cy.get('.euiIEFlexWrapFix').contains('Panel options').click(); + cy.get('.euiIEFlexWrapFix').contains('Chart styles').click(); + cy.get('.euiIEFlexWrapFix').contains('Thresholds').click(); + cy.get('[aria-label="Press to toggle this panel"]').eq(1).click(); + cy.get('[aria-label="Press to toggle this panel"]').eq(2).click(); + }); + + it('Render stats chart and verify the data configuration panel and chart panel are collapsable', () => { + cy.get('.euiPanel.euiPanel--paddingSmall').should('have.length', numberOfWindow); + cy.get('[aria-label="Press to toggle this panel"]').eq(1).click(); + cy.get('[aria-label="Press to toggle this panel"]').eq(2).click(); + }); +}); + +describe('Render stats chart for data configuration panel', () => { + beforeEach(() => { + renderStatsChart(); + }); + + it('Render stats chart and verify data config panel', () => { + cy.get('.euiComboBoxPill.euiComboBoxPill--plainText').eq(0).should('contain', 'tags'); + cy.get('.euiComboBoxPill.euiComboBoxPill--plainText').eq(1).should('contain', 'count()'); + cy.get('.euiComboBoxPill.euiComboBoxPill--plainText').eq(2).should('contain', 'avg(bytes)'); + cy.get('.euiComboBoxPill.euiComboBoxPill--plainText').eq(3).should('contain', 'host'); + }); + + it('Render stats chart and verify no result found message if the dimension is removed' , () => { + cy.get('[data-test-subj="comboBoxClearButton"]').eq(0).click(); + cy.get('[data-test-subj="visualizeEditorRenderButton"]').click(); + cy.get('.euiTextColor.euiTextColor--subdued').contains('No results found').should('exist'); + cy.get('[data-test-subj="comboBoxInput"]').eq(1).click(); + cy.get('.euiComboBoxOption__content').click(); + cy.get('[data-test-subj="visualizeEditorRenderButton"]').click(); + cy.get('.main-svg').contains('No results found').should('not.exist'); + }); + + it('Render stats chart and verify data config panel no result found if metric is missing', () => { + cy.get('.euiText.euiText--extraSmall').eq(0).click(); + cy.get('.euiText.euiText--extraSmall').eq(1).click(); + cy.get('[data-test-subj="comboBoxClearButton"]').eq(1).click(); + cy.get('[data-test-subj="comboBoxInput"]').eq(0).click(); + cy.get('.euiButton__text').contains('Update chart').click(); + cy.get('.euiTextColor.euiTextColor--subdued').contains('No results found').should('exist'); + cy.get('[data-test-subj="comboBoxInput"]').eq(3).click(); + cy.get('.euiComboBoxOption__content').contains('avg(bytes)').click(); + cy.get('.euiButton__text').contains('Update chart').click(); + cy.get('.main-svg').contains('No results found').should('not.exist'); + }); +}); + +describe('Render stats chart for panel options', () => { + beforeEach(() => { + renderStatsChart(); + }); + + it('Render stats chart and verify the title gets updated according to user input ', () => { + cy.get('input[name="title"]').type("stats chart"); + cy.get('textarea[name="description"]').should('exist').click(); + cy.get('.gtitle').contains('stats chart').should('exist'); + }); +}); + +describe('Render stats chart verfiy functionality for Tooltip mode', () => { + beforeEach(() => { + renderStatsChart(); + }); + + it('Render stats chart and verfiy the Show and Hidden Tooltip modes', () => { + cy.get('.euiButton__text.euiButtonGroupButton__textShift').eq(0).should('have.text', 'Show'); + cy.get('.euiButton__text.euiButtonGroupButton__textShift').eq(1).should('have.text', 'Hidden') + .click(); + }); +}); + +describe('Render stats chart verfiy functionality for Tooltip text', () => { + beforeEach(() => { + renderStatsChart(); + }); + + it('Render stats chart and verfiy the Tootltip text -> All , Dimension , Metric', () => { + cy.get('.euiButton__text.euiButtonGroupButton__textShift').eq(2).should('have.text', 'All'); + cy.get('.euiButton__text.euiButtonGroupButton__textShift').eq(3).should('have.text', 'Dimension') + .click(); + cy.get('.euiButton__text.euiButtonGroupButton__textShift').eq(4).should('have.text', 'Series') + .click(); + }); +}); + +describe('Render stats chart for Chart Styles ', () => { + beforeEach(() => { + renderStatsChart(); + }); + + it('Render stats chart and verify the various chart type selected', () => { + cy.get('.euiButton__text.euiButtonGroupButton__textShift').eq(5).should('have.text', 'Auto'); + cy.get('.euiButton__text.euiButtonGroupButton__textShift').eq(6).should('have.text', 'Horizontal').click(); + cy.get('.euiButton__text.euiButtonGroupButton__textShift').eq(7).should('have.text', 'Text mode').click(); + }); + + it('Render stats chart and verify the various chart orientation selected', () => { + cy.get('.euiButton__text.euiButtonGroupButton__textShift').eq(8).should('have.text', 'Auto'); + cy.get('.euiButton__text.euiButtonGroupButton__textShift').eq(9).should('have.text', 'Horizontal').click(); + cy.get('.euiButton__text.euiButtonGroupButton__textShift').eq(10).should('have.text', 'Vertical').click(); + }); + + it('Render stats chart and verify Metric unit and Metric Precision on chart ', () => { + cy.get('[data-test-subj="valueFieldText"]').click().type(metricUnit); + cy.get('.euiSpacer.euiSpacer--s').eq(12).click(); + cy.get('[data-test-subj="valueFieldNumber"]').eq(0).click().type(metricsPrecisionUpdated); + cy.get('.euiSpacer.euiSpacer--s').eq(12).click(); + }); + + it('Render stats chart and verify behaviour for Title size and Value size on chart ', () => { + cy.get('.annotation-text').eq(0).should('have.css', 'font-size', titleSize); + cy.get('.annotation-text').eq(2).should('have.css', 'font-size', titleSize); + cy.get('.annotation-text').eq(4).should('have.css', 'font-size', titleSize); + cy.get('[data-test-subj="valueFieldNumber"]').eq(1).click().type(titleSizeUpdated); + cy.get('.euiSpacer.euiSpacer--s').eq(12).click(); + cy.get('.annotation-text').eq(1).should('have.css', 'font-size', valueSize); + cy.get('.annotation-text').eq(3).should('have.css', 'font-size', valueSize); + cy.get('.annotation-text').eq(5).should('have.css', 'font-size', valueSize); + cy.get('[data-test-subj="valueFieldNumber"]').eq(2).click().type(valueSizeUpdated); + cy.get('.euiSpacer.euiSpacer--s').eq(12).click(); + }); +}); + +describe('Render stats chart and verify the Text Mode options' , () => { + beforeEach(() => { + renderStatsChart(); + }); + + it('Render stats chart and verify text modes ', () => { + cy.get('[data-text="Names"]').should('have.text', 'Names').click(); + cy.get('[data-text="Values"]').should('have.text', 'Values').click(); + cy.get('[data-text="Values + Names"]').should('have.text', 'Values + Names').click(); + cy.wait(delay); + }); +}); + +describe('Render stats chart and verify the +add threshold button option' , () => { + beforeEach(() => { + renderStatsChart(); + }); + + it('Render stats chart and verify the +Add Threshold button for color picker' , () => { + cy.get('[data-test-subj="euiColorPickerAnchor"]').click(); + cy.get('.euiColorPickerSwatch.euiColorPicker__swatchSelect').eq(5).click(); + cy.wait(delay); + }); +}); + +describe('Render stats chart and verify the reset button' , () => { + beforeEach(() => { + renderStatsChart(); + }); + + it('Render stats chart and test the Reset button functionality' , () => { + cy.get('[data-test-subj="valueFieldText"]').click().type(metricUnit); + cy.get('.euiSpacer.euiSpacer--s').eq(12).click(); + cy.get('[data-test-subj="valueFieldNumber"]').eq(0).click().type(metricsPrecisionUpdated); + cy.get('.euiSpacer.euiSpacer--s').eq(12).click(); + cy.get('[data-test-subj="valueFieldNumber"]').eq(1).click().type(titleSizeUpdated); + cy.get('.euiSpacer.euiSpacer--s').eq(12).click(); + cy.get('[data-test-subj="valueFieldNumber"]').eq(2).click().type(valueSizeUpdated); + cy.get('.euiSpacer.euiSpacer--s').eq(12).click(); + cy.get('[data-test-subj="euiColorPickerAnchor"]').click(); + cy.get('.euiColorPickerSwatch.euiColorPicker__swatchSelect').eq(5).click(); + cy.get('[data-test-subj="visualizeEditorResetButton"]').click(); + }); +}); \ No newline at end of file diff --git a/dashboards-observability/.cypress/integration/VisualizationCharts/7_pie_chart.spec.js b/dashboards-observability/.cypress/integration/VisualizationCharts/7_pie_chart.spec.js new file mode 100644 index 000000000..b731db10b --- /dev/null +++ b/dashboards-observability/.cypress/integration/VisualizationCharts/7_pie_chart.spec.js @@ -0,0 +1,202 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +/// +import { + delay, + TEST_QUERIES, + querySearch, + landOnEventVisualizations, + renderDataConfig, + saveVisualizationAndVerify, + deleteVisualization, + } from '../../utils/event_constants'; + + const renderPieChart = () => { + landOnEventVisualizations(); + querySearch(TEST_QUERIES[3].query, TEST_QUERIES[3].dateRangeDOM); + cy.get('[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]').click(); + cy.get('[data-test-subj="comboBoxOptionsList "] button span').contains('Pie').click(); + }; + + const aggregationValues = [ + 'COUNT', + 'SUM', + 'AVERAGE', + 'MAX', + 'MIN', + 'VAR_SAMP', + 'VAR_POP', + 'STDDEV_SAMP', + 'STDDEV_POP', + ]; + + describe.only('Render Pie chart and verify default behavior', () => { + beforeEach(() => { + renderPieChart(); + }); + + it('Render Pie chart and verify the default data', () => { + cy.get('.plot-container.plotly').should('exist'); + }); + + it('Render Pie chart and verify Data Configuration panel default behavior', () => { + cy.get('.euiTitle.euiTitle--xxsmall').contains('Data Configurations').should('exist'); + cy.get('.euiTitle.euiTitle--xxsmall').contains('Dimensions').should('exist'); + cy.get('.first-division .euiFormRow__labelWrapper').contains('Aggregation').should('exist'); + cy.get('.first-division .euiFormLabel.euiFormRow__label').contains('Field').should('exist'); + cy.get('.first-division .euiFormLabel.euiFormRow__label') + .contains('Custom label') + .should('exist'); + cy.get('.first-division .euiButton__text').contains('Add').should('exist'); + cy.get('.euiTitle.euiTitle--xxsmall').contains('Metrics').should('exist'); + cy.get('.euiButton__text').contains('Update chart').should('exist'); + }); + + it('Render Pie chart and verify Style section for Pie chart', () => { + cy.get('#data-panel').contains('Style').should('exist'); + cy.get('[aria-controls="configPanel__panelOptions"]').contains('Panel options').should('exist'); + cy.get('[aria-controls="configPanel__legend"]').contains('Legend').should('exist'); + cy.get('.euiForm.visEditorSidebar__form .euiIEFlexWrapFix') + .contains('Tooltip options') + .should('exist'); + cy.get('[aria-controls="configPanel__chartStyles"]').contains('Chart styles').should('exist'); + }); + + it('Options under Legend section', () => { + cy.get('#configPanel__legend').contains('Legend'); + cy.get('.euiTitle.euiTitle--xxsmall').eq(3).contains('Show legend'); + cy.get('[data-text="Show"]').eq(0).contains('Show'); + cy.get('[data-text="Hidden"]').eq(0).contains('Hidden'); + cy.get('.euiTitle.euiTitle--xxsmall').contains('Position'); + cy.get('[data-text="Right"]').contains('Right'); + cy.get('[data-text="Bottom"]').contains('Bottom'); + cy.get('.euiTitle.euiTitle--xxsmall').contains('Legend size').should('exist'); + }); + + it('Options under Tooltip options section', () => { + cy.get('.euiIEFlexWrapFix').contains('Tooltip options').should('exist'); + cy.get('[data-text="Show"]').eq(1).contains('Show'); + cy.get('[data-text="Hidden"]').eq(1).contains('Hidden'); + cy.get('.euiTitle.euiTitle--xxsmall').contains('Tooltip text'); + cy.get('[data-text="All"]').contains('All'); + cy.get('[data-text="Label"]').contains('Label'); + cy.get('[data-text="Value"]').contains('Value'); + cy.get('[data-text="Percent"]').contains('Percent'); + }); + + it('Options under Chart Styles section', () => { + cy.get('.euiIEFlexWrapFix').contains('Chart styles').should('exist'); + cy.get('#configPanel__chartStyles').contains('Mode'); + cy.get('.euiTitle.euiTitle--xxsmall').eq(9).contains('Label size'); + cy.get('.euiTitle.euiTitle--xxsmall').contains('Color theme'); + }); + + it('Table view should be enabled for Pie chart', () => { + cy.get('.euiSwitch__label').contains('Table view').should('exist'); + cy.get('[data-test-subj="workspace__dataTableViewSwitch"][aria-checked="false"]').click(); + cy.get('.ag-header.ag-pivot-off').should('exist'); + }); + + it('Render Pie chart and verify legends for Position Right and Bottom', () => { + cy.get('[data-text="Right"]').should('have.text', 'Right'); + cy.get('[data-text="Right"] [data-test-subj="v"]').should('have.attr', 'checked'); + cy.get('[data-text="Bottom"]').should('have.text', 'Bottom').click(); + cy.get('[data-text="Bottom"] [data-test-subj="h"]').should('not.have.attr', 'checked'); + cy.get('[data-test-subj="visualizeEditorRenderButton"]').click({ force: true, multiple: true }); + }); + + it('Render Pie chart and verify legends for Show and Hidden', () => { + cy.get('[data-text="Show"]').eq(0).should('have.text', 'Show'); + cy.get('[data-text="Show"] [data-test-subj="show"]').should('have.attr', 'checked'); + cy.get('[data-text="Hidden"]').eq(0).should('have.text', 'Hidden').click(); + cy.get('[data-text="Hidden"] [data-test-subj="hidden"]').should('not.have.attr', 'checked'); + cy.get('[data-test-subj="visualizeEditorRenderButton"]').click({ force: true, multiple: true }); + }); + }); + + describe('Save and Delete Visualization', () => { + beforeEach(() => { + renderPieChart(); + }); + + it('Render Pie chart, Save and Delete Visualization', () => { + saveVisualizationAndVerify(); + deleteVisualization(); + }); + }); + + describe('Color Theme section', () => { + beforeEach(() => { + renderPieChart(); + }); + + it('Default option in Color Theme', () => { + cy.get('.euiTitle.euiTitle--xxsmall') + .contains('Color Theme') + .scrollIntoView() + .should('be.visible'); + cy.get('.euiSuperSelectControl').contains('Default').should('exist'); + }); + + it('Render pie chart with single color option', () => { + cy.get('.euiTitle.euiTitle--xxsmall') + .contains('Color Theme') + .scrollIntoView() + .should('be.visible'); + cy.get('.euiSuperSelectControl').contains('Default').click(); + cy.get('.euiColorPalettePicker__item').contains('Single Color').click(); + cy.get('[data-test-subj="euiColorPickerAnchor"]').click(); + cy.get('.euiColorPickerSwatch.euiColorPicker__swatchSelect').eq(2).click(); + cy.get('.pielayer').should('exist'); + }); + }); + + describe('Renders Pie chart and Data Configurations section for Pie chart', () => { + beforeEach(() => { + landOnEventVisualizations(); + renderPieChart(); + }); + + it('Renders Dimensions and Metrics under Data Configurations for Pie chart', () => { + renderDataConfig(); + }); + + it('Validate "Add" and "X" buttons', () => { + cy.get('.euiResizablePanel.euiResizablePanel--middle').contains('Data Configurations'); + cy.get('.euiText.euiText--extraSmall').eq(0).click(); + cy.get('.euiButton.euiButton--primary.euiButton--fullWidth').contains('Add').click(); + cy.get('[data-test-subj="comboBoxInput"]').eq(2).click(); + cy.get('.euiComboBoxOption__content').eq(0).click(); + cy.get('.euiIcon.euiIcon--medium.euiIcon--danger').eq(1).click(); + cy.get('.first-division .euiFormLabel.euiFormRow__label').eq(4).click(); + cy.get('.euiComboBoxOption__content').eq(1).click(); + cy.get('.euiFieldText[placeholder="Custom label"]').eq(1).type('Demo field'); + cy.get('.euiIcon.euiIcon--medium.euiIcon--danger').eq(1).click(); + cy.get('.euiButton.euiButton--primary.euiButton--fullWidth').contains('Add').should('exist'); + }); + + it('Verify drop down values for Aggregation', () => { + cy.get('.euiResizablePanel.euiResizablePanel--middle').contains('Data Configurations'); + cy.get('.euiTitle.euiTitle--xxsmall').eq(1).contains('Dimensions').should('exist'); + cy.get('.first-division .euiFormLabel.euiFormRow__label').eq(0).contains('Aggregation'); + cy.get('.euiText.euiText--extraSmall').eq(0).click(); + cy.get('[data-test-subj="comboBoxSearchInput"]').eq(0).click(); + aggregationValues.forEach(function (value) { + cy.get('.euiComboBoxOption__content').contains(value); + }); + }); + + it('Collapsible mode for Data Configuration panel', () => { + cy.get('.euiResizablePanel.euiResizablePanel--middle').contains('Data Configurations'); + cy.get('.euiResizableButton.euiResizableButton--horizontal').eq(1).click(); + cy.get('[data-test-subj="panel-1-toggle"]').click(); + cy.get('[class*="euiResizableToggleButton-isCollapsed"]').eq(1).should('exist'); + cy.get('.euiResizablePanel.euiResizablePanel--middle') + .contains('Data Configurations') + .should('not.be.focused'); + }); + }); + \ No newline at end of file diff --git a/dashboards-observability/.cypress/integration/VisualizationCharts/9_coordinateMap_chart.spec.js b/dashboards-observability/.cypress/integration/VisualizationCharts/9_coordinateMap_chart.spec.js new file mode 100644 index 000000000..175011188 --- /dev/null +++ b/dashboards-observability/.cypress/integration/VisualizationCharts/9_coordinateMap_chart.spec.js @@ -0,0 +1,195 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +/// +import { + TEST_QUERIES, + querySearch, + landOnEventVisualizations +} from '../../utils/event_constants'; + +const numberOfWindow = 4; +const labelSize = 20; +const latitudeRangeMin = 40; +const latitudeRangeMax = 70; +const longitudeRangeMin = -130; +const longitudeRangeMax = -55; + +const renderCoordinateMap = () => { + landOnEventVisualizations(); + querySearch(TEST_QUERIES[0].query, TEST_QUERIES[0].dateRangeDOM); + cy.get('[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]').type('Coordinate Map').type('{enter}'); +}; + +const renderDataForCoordinateMap = () => { + cy.get('[data-test-subj="comboBoxInput"]').eq(1).click(); + cy.get('.euiComboBoxOption__content').contains('DestLocation').click(); + cy.get('[data-test-subj="comboBoxInput"]').eq(3).click(); + cy.get('.euiComboBoxOption__content').contains('AvgTicketPrice').click(); + cy.get('[data-test-subj="comboBoxInput"]').eq(4).click(); + cy.get('.euiComboBoxOption__content').contains('Dest').click(); + cy.get('.euiButton__text').contains('Update chart').click(); + cy.get('.layer.land').should('exist'); + cy.get('stop[stop-color="rgb(5, 10, 172)"]').should('exist'); +} + +describe('Render coordinate map and verify default behaviour ', () => { + beforeEach(() => { + renderCoordinateMap(); + }); + + it('Render coordinate map and verify by default the data dont gets render', () => { + cy.get('.layer.land').should('not.exist'); + cy.get('.euiTextColor.euiTextColor--subdued').contains('No results found').should('exist'); + }); + + it('Render coordinate map and verify you see data configuration panel and chart panel', () => { + cy.get('.euiPanel.euiPanel--paddingSmall').should('have.length', numberOfWindow); + cy.get('.euiTitle.euiTitle--xxsmall').contains('Data Configurations').should('exist'); + cy.get('.euiTitle.euiTitle--xxsmall').contains('Dimensions').should('exist'); + cy.get('.euiTitle.euiTitle--xxsmall').contains('Metrics').should('exist'); + cy.get('.euiIEFlexWrapFix').contains('Panel options').click(); + cy.get('.euiIEFlexWrapFix').contains('Text').click(); + cy.get('.euiIEFlexWrapFix').contains('Chart styles').click(); + cy.get('[aria-label="Press to toggle this panel"]').eq(1).click(); + cy.get('[aria-label="Press to toggle this panel"]').eq(2).click(); + }); + + it('Render coordinate map and verify the data configuration panel and chart panel are collapsable', () => { + cy.get('.euiPanel.euiPanel--paddingSmall').should('have.length', numberOfWindow); + cy.get('[aria-label="Press to toggle this panel"]').eq(1).click(); + cy.get('[aria-label="Press to toggle this panel"]').eq(2).click(); + }); +}); + +describe('Render coordinate map for data configuration panel', () => { + beforeEach(() => { + renderCoordinateMap(); + }); + + it('Render coordinate map and verify data config panel', () => { + cy.get('[data-test-subj="comboBoxInput"]').eq(1).contains('Select a field').should('exist'); + cy.get('[data-test-subj="comboBoxInput"]').eq(3).contains('Select a field').should('exist'); + cy.get('[data-test-subj="comboBoxInput"]').eq(4).contains('Select a field').should('exist'); + }); + + it('Render coordinate map and verify data gets render only after selecting the field value in data configuration panel', () => { + renderDataForCoordinateMap(); + }); + + it('Render coordinate map and verify data config dimensions panel "Field" contains only location', () => { + cy.get('[data-test-subj="comboBoxInput"]').eq(1).click(); + cy.get('.euiComboBoxOption__content').contains('DestLocation').should('exist'); + cy.get('.euiComboBoxOption__content').contains('OriginLocation').should('exist'); + }); + + it('Render coordinate map and verify data config metrics panel "Field" contains only value which return either integer or float value', () => { + cy.get('[data-test-subj="comboBoxInput"]').eq(3).click(); + cy.get('.euiComboBoxOption__content').contains('AvgTicketPrice').should('exist'); + cy.get('.euiComboBoxOption__content').contains('DistanceMiles').should('exist'); + cy.get('.euiComboBoxOption__content').should('not.contain', 'DestLocation'); + cy.get('.euiComboBoxOption__content').should('have.length', 6); + }); + + it('Render coordinate map and verify data config metric panel "Plot Label" contains a combination of string value and integer value', () => { + cy.get('[data-test-subj="comboBoxInput"]').eq(4).click(); + cy.get('.euiComboBoxOption__content').contains('AvgTicketPrice').should('exist'); + cy.get('.euiComboBoxOption__content').contains('Dest').should('exist'); + cy.get('.euiComboBoxOption__content').contains('DestLocation').should('exist'); + }); +}); + +describe('Render coordinate map for panel options', () => { + beforeEach(() => { + renderCoordinateMap(); + renderDataForCoordinateMap(); + }); + + it('Render coordinate map and verify the title gets updated according to user input ', () => { + cy.get('input[name="title"]').type("coordinate map"); + cy.get('textarea[name="description"]').should('exist').click(); + cy.get('.gtitle').contains('coordinate map').should('exist'); + }); +}); + +describe('Render coordinate map for text', () => { + beforeEach(() => { + renderCoordinateMap(); + renderDataForCoordinateMap(); + }); + + it('Render coordinate map and verify by default the "Show" is enabled for "Show Text"', () => { + cy.get('[data-text="Show"]').should('have.text', 'Show'); + cy.get('[data-text="Show"] [data-test-subj="show"]').should('have.attr', 'checked'); + cy.get('[data-unformatted="Duluth International Airport"]').should('exist'); + }); + + it('Render coordinate map and change "Show Text" to "Hidden"', () => { + cy.get('[data-text="Hidden"]').should('have.text', 'Hidden').click(); + cy.get('[data-text="Hidden"] [data-test-subj="hidden"]').should('not.have.attr', 'checked'); + cy.get('[data-unformatted="Duluth International Airport"]').should('not.exist'); + }); + + it('Render coordinate map and verify by default the "Top" is enabled for "Position"', () => { + cy.get('[data-text="Top"]').should('have.text', 'Top'); + cy.get('[data-text="Top"] [data-test-subj="top center"]').should('have.attr', 'checked'); + }); + + it('Render coordinate map and change "Position" to "Right", "Bottom" and "Left"', () => { + cy.get('[data-text="Right"]').should('have.text', 'Right').click(); + cy.get('[data-text="Right"] [data-test-subj="middle right"]').should('not.have.attr', 'checked'); + cy.get('[data-text="Bottom"]').should('have.text', 'Bottom').click(); + cy.get('[data-text="Bottom"] [data-test-subj="bottom center"]').should('not.have.attr', 'checked'); + cy.get('[data-text="Left"]').should('have.text', 'Left').click(); + cy.get('[data-text="Left"] [data-test-subj="middle left"]').should('not.have.attr', 'checked'); + }); +}); + +describe('Render coordinate map for chart style options', () => { + beforeEach(() => { + renderCoordinateMap(); + renderDataForCoordinateMap(); + }); + + it('Render coordinate map and change Label Size ', () => { + cy.get('[data-test-subj="valueFieldNumber"]').click().type(labelSize); + cy.get('textarea[name="description"]').should('exist').click(); + cy.get('[data-unformatted="Duluth International Airport"]').should('have.css', 'font-size', '20px'); + cy.get('[data-test-subj="valueFieldNumber"]').should('have.value', labelSize) + }); + + it('Render coordinate map and change "Latitude Range"', () => { + cy.get('input[type="number"]').eq(1).should('have.value', latitudeRangeMin); + cy.get('input[type="number"]').eq(2).should('have.value', latitudeRangeMax); + cy.get('input[type="number"]').eq(1).click().clear().type(30); + }); + + it('Render coordinate map and change "Longitude Range"', () => { + cy.get('input[type="number"]').eq(3).should('have.value', longitudeRangeMin); + cy.get('input[type="number"]').eq(4).should('have.value', longitudeRangeMax); + cy.get('input[type="number"]').eq(4).click().clear().type(40); + }); +}); + +describe('Render coordinate map and verify if reset works properly', () => { + beforeEach(() => { + renderCoordinateMap(); + renderDataForCoordinateMap(); + }); + + it('Render coordinate map with all feild data then click on reset and verify reset works properly', () => { + cy.get('input[placeholder="Title"]').type('coordinate map'); + cy.get('textarea[placeholder="Description"]').type('Description For coordinate map'); + cy.get('.euiButton__text').contains('Hidden').click(); + cy.get('.euiButton__text').contains('Right').click(); + cy.get('[data-test-subj="valueFieldNumber"]').click().type(labelSize); + cy.get('.euiButtonEmpty__text').contains('Reset').click(); + cy.get('input[placeholder="Title"]').should('not.have.value', 'coordinate map'); + cy.get('textarea[placeholder="Description"]').should('not.have.value', 'Description For coordinate map'); + cy.get('[data-text="Show"] [data-test-subj="show"]').should('have.attr', 'checked'); + cy.get('[data-text="Top"] [data-test-subj="top center"]').should('have.attr', 'checked'); + cy.get('[data-test-subj="valueFieldNumber"]').should('have.value', ''); + }); +}); diff --git a/dashboards-observability/.cypress/utils/constants.js b/dashboards-observability/.cypress/utils/constants.js index 75e343086..d67d3988f 100644 --- a/dashboards-observability/.cypress/utils/constants.js +++ b/dashboards-observability/.cypress/utils/constants.js @@ -60,6 +60,8 @@ export const setTimeFilter = (setEndTime = false, refresh = true) => { // notebooks export const TEST_NOTEBOOK = 'Test Notebook'; export const SAMPLE_URL = 'https://github.com/opensearch-project/sql/tree/main/sql-jdbc'; +export const NOTEBOOK_TEXT = 'Use Notebooks to interactively and collaboratively develop rich reports backed by live data. Common use cases for notebooks includes creating postmortem reports, designing run books, building live infrastructure reports, or even documentation.'; +export const OPENSEARCH_URL = 'https://opensearch.org/docs/latest/observability-plugin/notebooks/'; export const MARKDOWN_TEXT = `%md # Heading 1 @@ -100,3 +102,22 @@ export const supressResizeObserverIssue = () => { if (err.message.includes('ResizeObserver loop')) return false; }); }; + +export const verify_traces_spans_data_grid_cols_exists = () => { + cy.get('.euiDataGridHeaderCell__content').contains('Span ID').should('exist'); + cy.get('.euiDataGridHeaderCell__content').contains('Trace ID').should('exist'); + cy.get('.euiDataGridHeaderCell__content').contains('Operation').should('exist'); + cy.get('.euiDataGridHeaderCell__content').contains('Duration').should('exist'); + cy.get('.euiDataGridHeaderCell__content').contains('Start time').should('exist'); + cy.get('.euiDataGridHeaderCell__content').contains('End time').should('exist'); + cy.get('.euiDataGridHeaderCell__content').contains('Errors').should('exist'); +} + +export const count_table_row = (expected_row_count) => { + cy.get('.euiDataGridHeader [role="columnheader"]').then($el => { + let colmun_header_count = Cypress.$($el).length; + let table_grid_cell_count = Cypress.$('[data-test-subj="dataGridRowCell"]').length; + const total_row_count = table_grid_cell_count / colmun_header_count; + expect(total_row_count).to.equal(expected_row_count) + }); +} diff --git a/dashboards-observability/.cypress/utils/event_constants.js b/dashboards-observability/.cypress/utils/event_constants.js index 130d32590..9e0f89697 100644 --- a/dashboards-observability/.cypress/utils/event_constants.js +++ b/dashboards-observability/.cypress/utils/event_constants.js @@ -3,30 +3,53 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { supressResizeObserverIssue } from './constants' +import { supressResizeObserverIssue } from './constants'; export const delay = 1000; -export const YEAR_TO_DATE_DOM_ID = '[data-test-subj="superDatePickerCommonlyUsed_Year_to date"]' +export const YEAR_TO_DATE_DOM_ID = '[data-test-subj="superDatePickerCommonlyUsed_Year_to date"]'; export const TEST_QUERIES = [ { query: 'source = opensearch_dashboards_sample_data_flights', - dateRangeDOM: YEAR_TO_DATE_DOM_ID + dateRangeDOM: YEAR_TO_DATE_DOM_ID, }, { - query: 'source = opensearch_dashboards_sample_data_flights | stats avg(FlightDelayMin) by Carrier', - dateRangeDOM: YEAR_TO_DATE_DOM_ID + query: + 'source = opensearch_dashboards_sample_data_flights | stats avg(FlightDelayMin) by Carrier', + dateRangeDOM: YEAR_TO_DATE_DOM_ID, }, { - query: 'source = opensearch_dashboards_sample_data_logs' + query: 'source = opensearch_dashboards_sample_data_logs', }, { - query: 'source = opensearch_dashboards_sample_data_logs | stats count() by host', - dateRangeDOM: YEAR_TO_DATE_DOM_ID + query: + 'source=opensearch_dashboards_sample_data_flights | stats max(AvgTicketPrice) by DestCountry, DestCityName, Carrier', + dateRangeDOM: YEAR_TO_DATE_DOM_ID, }, { - query: 'source = opensearch_dashboards_sample_data_logs | stats count(), avg(bytes) by host, tags', - dateRangeDOM: YEAR_TO_DATE_DOM_ID + query: + 'source = opensearch_dashboards_sample_data_logs | stats count(), avg(bytes) by host, tags', + dateRangeDOM: YEAR_TO_DATE_DOM_ID, + }, + { + query: + 'source=opensearch_dashboards_sample_data_flights | stats avg(FlightDelayMin) by DestCountry, DestCityName', + dateRangeDOM: YEAR_TO_DATE_DOM_ID, + }, + { + query: + "source = opensearch_dashboards_sample_data_logs | where response='503' or response='404' | stats count() by span(timestamp,1d)", + dateRangeDOM: YEAR_TO_DATE_DOM_ID, + }, + { + query: + 'source=opensearch_dashboards_sample_data_flights |where FlightDelayMin > 0 | stats sum(FlightDelayMin) as total_delay_min, count() as total_delayed by Carrier |eval avg_delay=total_delay_min / total_delayed | sort - avg_delay', + dateRangeDOM: YEAR_TO_DATE_DOM_ID, + }, + { + query: + 'source = opensearch_dashboards_sample_data_logs | stats count(), max(bytes) by span(timestamp,1d), clientip, host', + dateRangeDOM: YEAR_TO_DATE_DOM_ID, }, ]; @@ -36,6 +59,18 @@ export const SAVE_QUERY2 = 'Mock Flight count by destination'; export const SAVE_QUERY3 = 'Mock Flight count by destination save to panel'; export const SAVE_QUERY4 = 'Mock Flight peek'; +export const aggregationValues = [ + 'COUNT', + 'SUM', + 'AVERAGE', + 'MAX', + 'MIN', + 'VAR_SAMP', + 'VAR_POP', + 'STDDEV_SAMP', + 'STDDEV_POP', +]; + export const querySearch = (query, rangeSelected) => { cy.get('[data-test-subj="searchAutocompleteTextArea"]').type(query); cy.get('[data-test-subj="superDatePickerToggleQuickMenuButton"]').click(); @@ -70,4 +105,146 @@ export const landOnPanels = () => { `${Cypress.env('opensearchDashboards')}/app/observability-dashboards#/operational_panels` ); cy.wait(delay); -}; \ No newline at end of file +}; + +const vis_name_sub_string = Math.floor(Math.random() * 100); +export const saveVisualizationAndVerify = () => { + cy.get('[data-test-subj="eventExplorer__saveManagementPopover"]').click(); + cy.get('[data-test-subj="eventExplorer__querySaveComboBox"]').click(); + cy.get('.euiComboBoxOptionsList__rowWrap .euiFilterSelectItem').eq(0).click(); + cy.get( + '.euiPopover__panel .euiFormControlLayoutIcons [data-test-subj="comboBoxToggleListButton"]' + ) + .eq(0) + .click(); + cy.get('.euiPopover__panel input') + .eq(1) + .type(`Test visualization` + vis_name_sub_string); + cy.get('[data-test-subj="eventExplorer__querySaveConfirm"]').click(); + cy.wait(delay); + cy.get('.euiHeaderBreadcrumbs a').eq(1).click(); + cy.get('.euiFlexGroup .euiFormControlLayout__childrenWrapper input') + .eq(0) + .type(`Test visualization` + vis_name_sub_string) + .type('{enter}'); + cy.get('.euiBasicTable .euiTableCellContent button').eq(0).click(); +}; + +export const deleteVisualization = () => { + cy.get('a[href = "#/event_analytics"]').click(); + cy.get('.euiFlexGroup .euiFormControlLayout__childrenWrapper input') + .eq(0) + .type(`Test visualization` + vis_name_sub_string) + .type('{enter}'); + cy.get('input[data-test-subj = "checkboxSelectAll"]').click(); + cy.get('.euiButtonContent.euiButtonContent--iconRight.euiButton__content').click(); + cy.get('.euiContextMenuItem .euiContextMenuItem__text').eq(0).click(); + cy.get('input[placeholder = "delete"]').clear().type('delete'); + cy.get('button[data-test-subj = "popoverModal__deleteButton"]').click(); + cy.get('.euiToastHeader').should('exist'); +}; + +export const renderTreeMapchart = () => { + querySearch(TEST_QUERIES[7].query, TEST_QUERIES[7].dateRangeDOM); + cy.get('[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]') + .type('Tree Map') + .type('{enter}'); + cy.get('#configPanel__panelOptions .euiFieldText').click().type('Tree Map'); + cy.get('.euiFlexItem .euiFormRow [placeholder="Description"]') + .click() + .type('This is the description for Tree Map'); + cy.get('.euiIEFlexWrapFix').eq(1).contains('Treemap').should('exist'); + cy.get('#configPanel__treemap_options').contains('Tiling Algorithm').should('exist'); + cy.get('[data-test-subj = "comboBoxInput"]').eq(3).click(); + cy.get('button[name="Slice Dice"]').click(); +}; + +export const renderPieChart = () => { + querySearch(TEST_QUERIES[5].query, TEST_QUERIES[5].dateRangeDOM); + cy.get('[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]').click(); + cy.get('[data-test-subj="comboBoxOptionsList "] button span').contains('Pie').click(); + cy.wait(delay); + cy.get('#configPanel__panelOptions .euiFieldText').click().type('Pie chart'); + cy.get('.euiFlexItem .euiFormRow [placeholder="Description"]') + .click() + .type('This is the description for Pie chart'); + cy.get('[aria-controls="configPanel__legend"]').contains('Legend').should('exist'); + cy.get('#configPanel__legend .euiTitle.euiTitle--xxsmall').eq(0).contains('Show Legend'); + cy.get('span[data-text="Show"]').contains('Show').should('exist'); + cy.get('#configPanel__legend .euiTitle.euiTitle--xxsmall').eq(1).contains('Position'); + cy.get('span[data-text="Right"]').contains('Right').should('exist'); + cy.get('#configPanel__legend .euiTitle.euiTitle--xxsmall').eq(2).contains('Legend Size'); + cy.get('[aria-controls="configPanel__chartStyles"]').contains('Chart Styles').should('exist'); + cy.get('#configPanel__chartStyles .euiTitle.euiTitle--xxsmall').eq(0).contains('Mode').click(); + cy.get( + '#configPanel__chartStyles .euiComboBox__inputWrap.euiComboBox__inputWrap--noWrap.euiComboBox__inputWrap-isClearable' + ).click(); + cy.get('.euiComboBoxOption__content').contains('Donut').click(); + cy.get('#configPanel__chartStyles .euiTitle.euiTitle--xxsmall').eq(1).contains('Label Size'); + cy.get('#configPanel__chartStyles input[type="number"]').click().type('10'); + cy.get('#configPanel__chartStyles .euiTitle.euiTitle--xxsmall').eq(2).contains('Color Theme'); + cy.get('.euiSuperSelectControl').click(); + cy.get('.euiColorPalettePicker__item').eq(1).contains('Single Color').click(); + cy.get('.euiFieldText.euiColorPicker__input.euiFieldText--withIcon').click(); + cy.get('[aria-label="Select #D36086 as the color"]').click(); + cy.get('.visEditorSidebar__controls [data-test-subj="visualizeEditorRenderButton"]') + .contains('Preview') + .click(); + cy.get('.plot-container.plotly').should('exist'); +}; + +export const renderDataConfig = () => { + cy.get('.euiResizablePanel.euiResizablePanel--middle').contains('Data Cofigurations'); + cy.get('.euiTitle.euiTitle--xxsmall').eq(1).contains('Dimensions').should('exist'); + cy.get('.first-division .euiFormLabel.euiFormRow__label').eq(0).contains('Aggregation'); + cy.get('[data-test-subj="comboBoxSearchInput"]').eq(0).click(); + cy.get('.euiComboBoxOption__content').eq(2).click(); + cy.get('.first-division .euiFormLabel.euiFormRow__label').eq(1).contains('Field'); + cy.get('[data-test-subj="comboBoxSearchInput"]').eq(1).click(); + cy.get('.euiComboBoxOption__content').eq(1).click(); + cy.get('.euiFieldText[placeholder="Custom label"]').eq(0).type('Average field'); + cy.get('.euiTitle.euiTitle--xxsmall').eq(2).contains('Metrics').should('exist'); + cy.get('.first-division .euiFormLabel.euiFormRow__label').eq(0).contains('Aggregation'); + cy.get('.euiFormRow__fieldWrapper .euiComboBox').eq(2).click(); + cy.get('.euiComboBoxOption__content').eq(4).click(); + cy.get('.first-division .euiFormLabel.euiFormRow__label').eq(4).click(); + cy.get('.euiComboBoxOption__content').eq(0).click(); + cy.get('.euiFieldText[placeholder="Custom label"]').eq(1).type('Min field'); + cy.get('.euiButton__text').contains('Right').click(); + cy.get('[data-test-subj="visualizeEditorRenderButton"]').contains('Update chart').click(); + cy.get('.js-plotly-plot').should('exist'); +}; + +export const renderLineChart = () => { + landOnEventVisualizations(); + querySearch(TEST_QUERIES[5].query, TEST_QUERIES[5].dateRangeDOM); + cy.get('[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]') + .type('Line') + .type('{enter}'); +}; + +export const renderAddParent = () => { + cy.get(' [data-test-subj="addParentButton"] .euiButton__text').contains('+ Add Parent').click(); + cy.get('.first-division .euiFormLabel.euiFormRow__label').contains('Parent 1').should('exist'); + cy.get('p.euiComboBoxPlaceholder').eq(0).click({ force: true }); + cy.get('.euiComboBoxOption__content').eq(0).click(); + cy.get(' [data-test-subj="addParentButton"] .euiButton__text').contains('+ Add Parent').click(); + cy.get('.first-division .euiFormLabel.euiFormRow__label').contains('Parent 2').should('exist'); + cy.get('p.euiComboBoxPlaceholder').click({ force: true }); + cy.get('.euiComboBoxOption__content').eq(1).click(); + cy.get(' [data-test-subj="addParentButton"] .euiButton__text').contains('+ Add Parent').click(); + cy.get('.first-division .euiFormLabel.euiFormRow__label').contains('Parent 3').should('exist'); + cy.get('p.euiComboBoxPlaceholder').click({ force: true }); + cy.get('.euiComboBoxOption__content').eq(2).click(); + cy.get('[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]') + .type('Line') + .type('{enter}'); +}; + +export const renderGaugeChart = () => { + landOnEventVisualizations(); + querySearch(TEST_QUERIES[1].query, TEST_QUERIES[1].dateRangeDOM); + cy.get('[data-test-subj="configPane__vizTypeSelector"] [data-test-subj="comboBoxInput"]') + .type('Gauge') + .type('{enter}'); +}; diff --git a/dashboards-observability/common/constants/colors.ts b/dashboards-observability/common/constants/colors.ts new file mode 100644 index 000000000..3845e41a0 --- /dev/null +++ b/dashboards-observability/common/constants/colors.ts @@ -0,0 +1,188 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { colorPalette } from '@elastic/eui'; + +export const BLUES_PALETTE = { + name: 'Blues', + label: 'Blues', + colors: [ + 'rgb(5,10,172)', + 'rgb(40,60,190)', + 'rgb(70,100,245)', + 'rgb(90,120,245)', + 'rgb(106,137,247)', + 'rgb(220,220,220)', + ], +}; + +export const REDS_PALETTE = { + name: 'Reds', + label: 'Reds', + colors: ['rgb(220,220,220)', 'rgb(245,195,157)', 'rgb(245,160,105)', 'rgb(178,10,28)'], +}; + +export const GREENS_PALETTE = { + name: 'Greens', + label: 'Greens', + colors: [ + 'rgb(0,68,27)', + 'rgb(0,109,44)', + 'rgb(35,139,69)', + 'rgb(65,171,93)', + 'rgb(116,196,118)', + 'rgb(161,217,155)', + 'rgb(199,233,192)', + 'rgb(229,245,224)', + 'rgb(247,252,245)', + ], +}; + +export const GREYS_PALETTE = { + name: 'Greys', + label: 'Greys', + colors: ['rgb(0,0,0)', 'rgb(255,255,255)'], +}; + +export const BLUE_RED_PALETTE = { + name: 'Bluered', + label: 'Blue-Red', + colors: ['rgb(0,0,255)', 'rgb(255,0,0)'], +}; + +export const RED_BLUE_PALETTE = { + name: 'RdBu', + label: 'Red-Blue', + colors: [ + 'rgb(5,10,172)', + 'rgb(106,137,247)', + 'rgb(190,190,190)', + 'rgb(220,170,132)', + 'rgb(230,145,90)', + 'rgb(178,10,28)', + ], +}; + +export const YELLOW_ORANGE_RED_PALETTE = { + name: 'YlOrRd', + label: 'Yellow-Orange-Red', + colors: [ + 'rgb(128,0,38)', + 'rgb(189,0,38)', + 'rgb(227,26,28)', + 'rgb(252,78,42)', + 'rgb(253,141,60)', + 'rgb(254,178,76)', + 'rgb(254,217,118)', + 'rgb(255,237,160)', + 'rgb(255,255,204)', + ], +}; + +export const YELLOW_GREEN_BLUE_PALETTE = { + name: 'YlGnBu', + label: 'Yellow-Green-Blue', + colors: [ + 'rgb(8,29,88)', + 'rgb(37,52,148)', + 'rgb(34,94,168)', + 'rgb(29,145,192)', + 'rgb(65,182,196)', + 'rgb(127,205,187)', + 'rgb(199,233,180)', + 'rgb(237,248,217)', + 'rgb(255,255,217)', + ], +}; + +export const DEFAULT_PALETTE = 'default'; +export const SINGLE_COLOR_PALETTE = 'singleColor'; +export const MULTI_COLOR_PALETTE = 'multicolor'; + +export const COLOR_PALETTES = [ + { + value: DEFAULT_PALETTE, + title: 'Default', + type: 'text', + }, + { + value: SINGLE_COLOR_PALETTE, + title: 'Single color', + type: 'text', + }, + { + value: MULTI_COLOR_PALETTE, + title: 'Multicolored', + type: 'text', + }, + { + value: BLUES_PALETTE.name, + title: BLUES_PALETTE.label, + palette: colorPalette(BLUES_PALETTE.colors, 20), + type: 'gradient', + }, + { + value: REDS_PALETTE.name, + title: REDS_PALETTE.label, + palette: colorPalette(REDS_PALETTE.colors, 20), + type: 'gradient', + }, + { + value: GREENS_PALETTE.name, + title: GREENS_PALETTE.label, + palette: colorPalette(GREENS_PALETTE.colors, 20), + type: 'gradient', + }, + { + value: GREYS_PALETTE.name, + title: GREYS_PALETTE.label, + palette: colorPalette(GREYS_PALETTE.colors, 20), + type: 'gradient', + }, + { + value: BLUE_RED_PALETTE.name, + title: BLUE_RED_PALETTE.label, + palette: colorPalette(BLUE_RED_PALETTE.colors, 20), + type: 'gradient', + }, + { + value: RED_BLUE_PALETTE.name, + title: RED_BLUE_PALETTE.label, + palette: colorPalette(RED_BLUE_PALETTE.colors, 20, true), + type: 'gradient', + }, + { + value: YELLOW_ORANGE_RED_PALETTE.name, + title: YELLOW_ORANGE_RED_PALETTE.label, + palette: colorPalette(YELLOW_ORANGE_RED_PALETTE.colors, 20), + type: 'gradient', + }, + { + value: YELLOW_GREEN_BLUE_PALETTE.name, + title: YELLOW_GREEN_BLUE_PALETTE.label, + palette: colorPalette(YELLOW_GREEN_BLUE_PALETTE.colors, 20), + type: 'gradient', + }, +]; +export const HEX_CONTRAST_COLOR = 0xffffff; +export const PIE_PALETTES = [ + { + value: DEFAULT_PALETTE, + title: 'Default', + type: 'text', + }, + { + value: SINGLE_COLOR_PALETTE, + title: 'Single Color', + type: 'text', + }, +]; + +export const HEATMAP_PALETTE_COLOR = { name: REDS_PALETTE.label, color: REDS_PALETTE.label }; +export const HEATMAP_SINGLE_COLOR = { name: 'singleColor', color: '#000000' }; +export const OPACITY = 'opacity'; +export const SPECTRUM = 'spectrum'; +export const COLOR_BLACK = 'rgb(0,0,0)'; +export const COLOR_WHITE = 'rgb(255,255,255)'; diff --git a/dashboards-observability/common/constants/data_table.ts b/dashboards-observability/common/constants/data_table.ts new file mode 100644 index 000000000..bbca653a7 --- /dev/null +++ b/dashboards-observability/common/constants/data_table.ts @@ -0,0 +1,16 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +export const GRID_HEADER_COLUMN_MAX_WIDTH = '150px'; +export const GRID_PAGE_RANGE_DISPLAY = 5; +export const COLUMN_DEFAULT_MIN_WIDTH = 100; +export const GRID_PAGE_SIZES = [10, 50, 100]; +export const ROW_DENSITIES = [ + { icon: 'tableDensityExpanded', height: 55, selected: false }, + { icon: 'tableDensityNormal', height: 45, selected: false }, + { icon: 'tableDensityCompact', height: 35, selected: true }, +]; + +export const HEADER_HEIGHT = 35; diff --git a/dashboards-observability/common/constants/explorer.ts b/dashboards-observability/common/constants/explorer.ts index aa769d3bb..75393f177 100644 --- a/dashboards-observability/common/constants/explorer.ts +++ b/dashboards-observability/common/constants/explorer.ts @@ -3,6 +3,10 @@ * SPDX-License-Identifier: Apache-2.0 */ +import { htmlIdGenerator } from '@elastic/eui'; +import { VIS_CHART_TYPES } from './shared'; +import { ThresholdUnitType } from '../../public/components/event_analytics/explorer/visualizations/config_panel/config_panes/config_controls/config_thresholds'; + export const EVENT_ANALYTICS_DOCUMENTATION_URL = 'https://opensearch.org/docs/latest/observability-plugin/event-analytics/'; export const OPEN_TELEMETRY_LOG_CORRELATION_LINK = @@ -11,7 +15,9 @@ export const RAW_QUERY = 'rawQuery'; export const FINAL_QUERY = 'finalQuery'; export const SELECTED_DATE_RANGE = 'selectedDateRange'; export const INDEX = 'index'; -export const SELECTED_PATTERN = 'selectedPattern'; +export const SELECTED_PATTERN_FIELD = 'selectedPatternField'; +export const PATTERN_REGEX = 'patternRegex'; +export const FILTERED_PATTERN = 'filteredPattern'; export const SELECTED_TIMESTAMP = 'selectedTimestamp'; export const SELECTED_FIELDS = 'selectedFields'; export const UNSELECTED_FIELDS = 'unselectedFields'; @@ -26,7 +32,7 @@ export const TAB_CHART_ID_TXT_PFX = 'main-content-vis-'; export const TAB_EVENT_ID = 'main-content-events'; export const TAB_CHART_ID = 'main-content-vis'; export const HAS_SAVED_TIMESTAMP = 'hasSavedTimestamp'; -export const FILTER_OPTIONS = ['Visualization', 'Query']; +export const FILTER_OPTIONS = ['Visualization', 'Query', 'Metric']; export const SAVED_QUERY = 'savedQuery'; export const SAVED_VISUALIZATION = 'savedVisualization'; export const SAVED_OBJECT_ID = 'savedObjectId'; @@ -76,7 +82,220 @@ export const REDUX_EXPL_SLICE_QUERY_TABS = 'queryTabs'; export const REDUX_EXPL_SLICE_VISUALIZATION = 'explorerVisualization'; export const REDUX_EXPL_SLICE_COUNT_DISTRIBUTION = 'countDistributionVisualization'; export const REDUX_EXPL_SLICE_PATTERNS = 'patterns'; -export const PLOTLY_GAUGE_COLUMN_NUMBER = 5; +export const PLOTLY_GAUGE_COLUMN_NUMBER = 4; export const APP_ANALYTICS_TAB_ID_REGEX = /application-analytics-tab.+/; export const DEFAULT_AVAILABILITY_QUERY = 'stats count() by span( timestamp, 1h )'; -export const PPL_PATTERNS_REGEX = /\|\s*patterns\s+\S+\s*\|\s*where\s+patterns_field\s*\=\s*'[^a-zA-Z0-9]+'/; +export const PPL_DEFAULT_PATTERN_REGEX_FILETER = '[a-zA-Z\\d]'; +// Greedily matches the longest substring for example (patterns referer | patterns pattern='[0-9]' message | where ...) used to modify the query for patterns table +export const PATTERNS_REGEX = /\|\s*patterns.+?\|.*\s*where\s+patterns_field\s*\=\s*'[^a-zA-Z0-9]+'/; +// Used to extract the initial pattern applied +export const PATTERNS_EXTRACTOR_REGEX = /patterns\s+(?\S+)/; +export const ADD_BUTTON_TEXT = '+ Add color theme'; +export const NUMBER_INPUT_MIN_LIMIT = 1; + +export const VIZ_CONTAIN_XY_AXIS = [ + VIS_CHART_TYPES.Bar, + VIS_CHART_TYPES.Histogram, + VIS_CHART_TYPES.Line, + VIS_CHART_TYPES.Pie, + VIS_CHART_TYPES.Scatter, + VIS_CHART_TYPES.HorizontalBar, +]; + +// default ppl aggregation method options +export const AGGREGATION_OPTIONS = [ + { + label: 'count', + }, + { + label: 'sum', + }, + { + label: 'avg', + }, + { + label: 'max', + }, + { + label: 'min', + }, + { + label: 'var_samp', + }, + { + label: 'var_pop', + }, + { + label: 'stddev_samp', + }, + { + label: 'stddev_pop', + }, +]; + +// numeric fields type for metrics +export const NUMERICAL_TYPES = [ + 'float', + 'double', + 'bigint', + 'long', + 'octet', + 'short', + 'byte', + 'integer', +]; +// Data table constants +export const GRID_HEADER_COLUMN_MAX_WIDTH = '150px'; +export const GRID_PAGE_RANGE_DISPLAY = 5; +export const COLUMN_DEFAULT_MIN_WIDTH = 100; +export const GRID_PAGE_SIZES = [10, 50, 100]; +export const ROW_DENSITIES = [ + { icon: 'tableDensityExpanded', height: 55, selected: false }, + { icon: 'tableDensityNormal', height: 45, selected: false }, + { icon: 'tableDensityCompact', height: 35, selected: true }, +]; + +export const HEADER_HEIGHT = 35; + +// gauge chart default parameters +export interface DefaultGaugeChartParametersProps { + GaugeTitleSize: number; + DisplayDefaultGauges: number; + OrientationDefault: string; + TickLength: number; + LegendPlacement: string; + ThresholdsMaxLimit: number; +} + +export const DEFAULT_GAUGE_CHART_PARAMETERS: DefaultGaugeChartParametersProps = { + GaugeTitleSize: 14, + DisplayDefaultGauges: 1, + OrientationDefault: 'h', + TickLength: 5, + LegendPlacement: 'center', + ThresholdsMaxLimit: 1, +}; + +// pie chart default parameters +export const PLOTLY_PIE_COLUMN_NUMBER = 2; +export const PIE_XAXIS_GAP = 0.2; +export const PIE_YAXIS_GAP = 0.1; +export interface DefaultPieChartParameterProps { + DefaultMode: string; +} + +export const DEFAULT_PIE_CHART_PARAMETERS: DefaultPieChartParameterProps = { + DefaultMode: 'pie', +}; +export const GROUPBY = 'dimensions'; +export const AGGREGATIONS = 'series'; +export const PARENTFIELDS = 'parentFields'; +export const VALUEFIELD = 'valueField'; +export const CHILDFIELD = 'childField'; +export const TIMESTAMP = 'timestamp'; + +// metrics constants +export const METRICS_GRID_SPACE_BETWEEN_X_AXIS = 0.01; +export const METRICS_GRID_SPACE_BETWEEN_Y_AXIS = 100; +export const METRICS_REDUCE_VALUE_SIZE_PERCENTAGE = 0.08; +export const METRICS_REDUCE_TITLE_SIZE_PERCENTAGE = 0.05; +export const METRICS_REDUCE_SERIES_UNIT_SIZE_PERCENTAGE = 0.2; +export const METRICS_SERIES_UNIT_SUBSTRING_LENGTH = 3; +export const METRICS_AXIS_MARGIN = { + l: 0, + r: 0, + b: 0, + t: 80, +}; + +export const METRICS_ANNOTATION = { + xref: 'paper', + yref: 'paper', + showarrow: false, +}; + +export interface DefaultMetricsChartParametersProps { + DefaultTextMode: string; + DefaultOrientation: string; + DefaultTitleSize: number; + DefaultChartType: string; + TextAlignment: string; + DefaultPrecision: number; + DefaultValueSize: number; + BaseThreshold: ThresholdUnitType; + DefaultTextColor: string; +} + +export const DEFAULT_METRICS_CHART_PARAMETERS: DefaultMetricsChartParametersProps = { + DefaultTextMode: 'auto', + DefaultOrientation: 'auto', + DefaultTitleSize: 30, + DefaultValueSize: 80, + DefaultChartType: 'auto', + TextAlignment: 'auto', + DefaultPrecision: 1, + BaseThreshold: { + thid: htmlIdGenerator('thr')(), + name: 'Base', + color: '#3CA1C7', + value: 0, + isReadOnly: true, + }, + DefaultTextColor: '#FFFFFF', +}; +export interface DefaultBarChartStylesProps { + BarMode: string; + GroupWidth: number; + BarWidth: number; + LabelSize: number; +} + +export const DEFAULT_BAR_CHART_STYLES: DefaultBarChartStylesProps = { + BarMode: 'group', + GroupWidth: 0.7, + BarWidth: 0.97, + LabelSize: 12, +}; + +export const SIMILAR_VIZ_TYPES = [ + VIS_CHART_TYPES.Line, + VIS_CHART_TYPES.Scatter, + VIS_CHART_TYPES.HorizontalBar, + VIS_CHART_TYPES.Bar, +]; + +export enum ConfigChartOptionsEnum { + palettePicker = 'palettePicker', + singleColorPicker = 'singleColorPicker', + colorpicker = 'colorpicker', + treemapColorPicker = 'treemapColorPicker', + input = 'input', + textInput = 'textInput', + slider = 'slider', + switchButton = 'switchButton', + buttons = 'buttons', +} + +export const CUSTOM_LABEL = 'customLabel'; +export const BREAKDOWNS = 'breakdowns'; +export const SPAN = 'span'; +export const TIME_FIELD = 'time_field'; +export const DISABLED_COLOUR = '#fafbfd'; +export const DATA_CONFIG_HINTS_INFO = { + [AGGREGATIONS]: + 'Series is an aggregation function (mandatory). The argument of an aggregation must be a field.', + [GROUPBY]: + "Dimensions are 'by' clauses. They are fields or expressions like scalar and aggregation functions. Besides, the span clause for a dimension can be used to split a specific field into buckets in the same interval, the stats then does the aggregation by these span buckets.", + [BREAKDOWNS]: + "Defines how each series is broken down. Breakdowns are 'by' clauses that subdivide the existing series.", +}; + +// Metrics constants +export const UNITS_OF_MEASURE = [ + 'seconds (s)', + 'hours (h)', + 'celsius (C)', + 'farenheit (F)', + 'meters (m)', + 'kilometers (k)', +] diff --git a/dashboards-observability/common/constants/metrics.ts b/dashboards-observability/common/constants/metrics.ts new file mode 100644 index 000000000..dbe64b88b --- /dev/null +++ b/dashboards-observability/common/constants/metrics.ts @@ -0,0 +1,26 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +// requests constants +export const VISUALIZATION = 'viz'; +export const SAVED_VISUALIZATION = 'savedVisualization'; +export const PPL_DATASOURCES_REQUEST = + 'show datasources | where CONNECTOR_TYPE="PROMETHEUS" | fields DATASOURCE_NAME'; + +// redux +export const REDUX_SLICE_METRICS = 'metrics'; + +export const resolutionOptions = [ + { value: 's', text: 'seconds' }, + { value: 'm', text: 'minutes' }, + { value: 'h', text: 'hours' }, + { value: 'd', text: 'days' }, + // { value: 'M', text: 'Months' }, // commenting it here as prometheus doesn't have support + // { value: 'q', text: 'quarters' }, + { value: 'y', text: 'years' }, +]; + +export const DEFAULT_METRIC_HEIGHT = 2; +export const DEFAULT_METRIC_WIDTH = 12; diff --git a/dashboards-observability/common/constants/shared.ts b/dashboards-observability/common/constants/shared.ts index 19c0fb8fd..c24e76fcc 100644 --- a/dashboards-observability/common/constants/shared.ts +++ b/dashboards-observability/common/constants/shared.ts @@ -2,8 +2,8 @@ * Copyright OpenSearch Contributors * SPDX-License-Identifier: Apache-2.0 */ - import CSS from 'csstype'; +import { IField } from '../../common/types/explorer'; // Client route export const PPL_BASE = '/api/ppl'; @@ -31,6 +31,8 @@ export const observabilityPluginOrder = 6000; export const SQL_DOCUMENTATION_URL = 'https://opensearch.org/docs/latest/search-plugins/sql/index/'; export const PPL_DOCUMENTATION_URL = 'https://opensearch.org/docs/latest/observability-plugin/ppl/commands/'; +export const PPL_PATTERNS_DOCUMENTATION_URL = + 'https://github.com/opensearch-project/sql/blob/2.x/docs/user/ppl/cmd/patterns.rst#description'; export const UI_DATE_FORMAT = 'MM/DD/YYYY hh:mm A'; export const PPL_DATE_FORMAT = 'YYYY-MM-DD HH:mm:ss.SSSSSS'; export const SPAN_REGEX = /span/; @@ -71,57 +73,121 @@ export const pageStyles: CSS.Properties = { maxWidth: '1130px', }; +export enum VIS_CHART_TYPES { + Bar = 'bar', + HorizontalBar = 'horizontal_bar', + Line = 'line', + Pie = 'pie', + HeatMap = 'heatmap', + Text = 'text', +} + export const NUMERICAL_FIELDS = ['short', 'integer', 'long', 'float', 'double']; -export const ENABLED_VIS_TYPES = ['bar', 'horizontal_bar', 'line', 'pie', 'heatmap', 'text']; +export const ENABLED_VIS_TYPES = [ + VIS_CHART_TYPES.Bar, + VIS_CHART_TYPES.HorizontalBar, + VIS_CHART_TYPES.Line, + VIS_CHART_TYPES.Pie, + VIS_CHART_TYPES.HeatMap, + VIS_CHART_TYPES.Text, +]; -//Live tail constants +// Live tail constants export const LIVE_OPTIONS = [ { - label:'5s', + label: '5s', startTime: 'now-5s', delayTime: 5000, }, { - label:'10s', + label: '10s', startTime: 'now-10s', delayTime: 10000, }, { - label:'30s', + label: '30s', startTime: 'now-30s', delayTime: 30000, }, { - label:'1m', + label: '1m', startTime: 'now-1m', delayTime: 60000, }, { - label:'5m', + label: '5m', startTime: 'now-5m', delayTime: 60000 * 5, }, { - label:'15m', + label: '15m', startTime: 'now-15m', delayTime: 60000 * 15, }, { - label:'30m', + label: '30m', startTime: 'now-30m', delayTime: 60000 * 30, }, { - label:'1h', + label: '1h', startTime: 'now-1h', delayTime: 60000 * 60, }, { - label:'2h', + label: '2h', startTime: 'now-2h', delayTime: 60000 * 120, }, ]; -export const LIVE_END_TIME ='now'; \ No newline at end of file +export const LIVE_END_TIME = 'now'; +export interface DefaultChartStylesProps { + DefaultModeLine: string; + Interpolation: string; + LineWidth: number; + FillOpacity: number; + MarkerSize: number; + ShowLegend: string; + LegendPosition: string; + LabelAngle: number; + DefaultSortSectors: string; + DefaultModeScatter: string; +} + +export const DEFAULT_CHART_STYLES: DefaultChartStylesProps = { + DefaultModeLine: 'lines', + Interpolation: 'spline', + LineWidth: 2, + FillOpacity: 70, + MarkerSize: 5, + ShowLegend: 'show', + LegendPosition: 'v', + LabelAngle: 0, + DefaultSortSectors: 'largest_to_smallest', + DefaultModeScatter: 'markers', +}; + +export const FILLOPACITY_DIV_FACTOR = 200; +export const SLIDER_MIN_VALUE = 0; +export const SLIDER_MAX_VALUE = 100; +export const SLIDER_STEP = 1; +export const THRESHOLD_LINE_WIDTH = 3; +export const THRESHOLD_LINE_OPACITY = 0.7; +export const MAX_BUCKET_LENGTH = 16; + +export enum BarOrientation { + horizontal = 'h', + vertical = 'v', +} + +export const PLOT_MARGIN = { + l: 30, + r: 5, + b: 30, + t: 50, + pad: 4, +}; + +export const WAITING_TIME_ON_USER_ACTIONS = 300; diff --git a/dashboards-observability/common/query_manager/antlr/adaptors/case_insensitive_char_stream.ts b/dashboards-observability/common/query_manager/antlr/adaptors/case_insensitive_char_stream.ts new file mode 100644 index 000000000..6c3414f35 --- /dev/null +++ b/dashboards-observability/common/query_manager/antlr/adaptors/case_insensitive_char_stream.ts @@ -0,0 +1,60 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { CharStream } from 'antlr4ts'; + +export class CaseInsensitiveCharStream { + private stream: CharStream; + + get index(): number { + return this.stream.index; + } + + get size(): number { + return this.stream.size; + } + + get sourceName(): string { + return 'pplquery'; + } + + constructor(stream: CharStream) { + this.stream = stream; + } + + LA(offset: number): number { + const c: number = this.stream.LA(offset); + if (c <= 0) { + return c; + } + + // case insensitivity support for PPL + return String.fromCodePoint(c).toUpperCase().codePointAt(0)!; + } + + consume(): void { + this.stream.consume(); + } + + mark(): number { + return this.stream.mark(); + } + + release(marker: number): void { + this.stream.release(marker); + } + + seek(index: number): void { + this.stream.seek(index); + } + + getText(interval: any): string { + return this.stream.getText(interval); + } + + toString(): string { + return this.stream.toString(); + } +} diff --git a/dashboards-observability/common/query_manager/antlr/grammar/OpenSearchPPLLexer.g4 b/dashboards-observability/common/query_manager/antlr/grammar/OpenSearchPPLLexer.g4 new file mode 100644 index 000000000..f51386796 --- /dev/null +++ b/dashboards-observability/common/query_manager/antlr/grammar/OpenSearchPPLLexer.g4 @@ -0,0 +1,371 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + + +lexer grammar OpenSearchPPLLexer; + +channels { WHITESPACE, ERRORCHANNEL } + + +// COMMAND KEYWORDS +SEARCH: 'SEARCH'; +DESCRIBE: 'DESCRIBE'; +SHOW: 'SHOW'; +FROM: 'FROM'; +WHERE: 'WHERE'; +FIELDS: 'FIELDS'; +RENAME: 'RENAME'; +STATS: 'STATS'; +DEDUP: 'DEDUP'; +SORT: 'SORT'; +EVAL: 'EVAL'; +HEAD: 'HEAD'; +TOP: 'TOP'; +RARE: 'RARE'; +PARSE: 'PARSE'; +METHOD: 'METHOD'; +REGEX: 'REGEX'; +PUNCT: 'PUNCT'; +GROK: 'GROK'; +PATTERN: 'PATTERN'; +PATTERNS: 'PATTERNS'; +NEW_FIELD: 'NEW_FIELD'; +KMEANS: 'KMEANS'; +AD: 'AD'; +ML: 'ML'; + +// COMMAND ASSIST KEYWORDS +AS: 'AS'; +BY: 'BY'; +SOURCE: 'SOURCE'; +INDEX: 'INDEX'; +D: 'D'; +DESC: 'DESC'; +CATALOGS: 'CATALOGS'; + +// CLAUSE KEYWORDS +SORTBY: 'SORTBY'; + +// FIELD KEYWORDS +AUTO: 'AUTO'; +STR: 'STR'; +IP: 'IP'; +NUM: 'NUM'; + +// ARGUMENT KEYWORDS +KEEPEMPTY: 'KEEPEMPTY'; +CONSECUTIVE: 'CONSECUTIVE'; +DEDUP_SPLITVALUES: 'DEDUP_SPLITVALUES'; +PARTITIONS: 'PARTITIONS'; +ALLNUM: 'ALLNUM'; +DELIM: 'DELIM'; +CENTROIDS: 'CENTROIDS'; +ITERATIONS: 'ITERATIONS'; +DISTANCE_TYPE: 'DISTANCE_TYPE'; +NUMBER_OF_TREES: 'NUMBER_OF_TREES'; +SHINGLE_SIZE: 'SHINGLE_SIZE'; +SAMPLE_SIZE: 'SAMPLE_SIZE'; +OUTPUT_AFTER: 'OUTPUT_AFTER'; +TIME_DECAY: 'TIME_DECAY'; +ANOMALY_RATE: 'ANOMALY_RATE'; +CATEGORY_FIELD: 'CATEGORY_FIELD'; +TIME_FIELD: 'TIME_FIELD'; +TIME_ZONE: 'TIME_ZONE'; +TRAINING_DATA_SIZE: 'TRAINING_DATA_SIZE'; +ANOMALY_SCORE_THRESHOLD: 'ANOMALY_SCORE_THRESHOLD'; + +// COMPARISON FUNCTION KEYWORDS +CASE: 'CASE'; +IN: 'IN'; + +// LOGICAL KEYWORDS +NOT: 'NOT'; +OR: 'OR'; +AND: 'AND'; +XOR: 'XOR'; +TRUE: 'TRUE'; +FALSE: 'FALSE'; +REGEXP: 'REGEXP'; + +// DATETIME, INTERVAL AND UNIT KEYWORDS +DATETIME: 'DATETIME'; +INTERVAL: 'INTERVAL'; +MICROSECOND: 'MICROSECOND'; +MILLISECOND: 'MILLISECOND'; +SECOND: 'SECOND'; +MINUTE: 'MINUTE'; +HOUR: 'HOUR'; +DAY: 'DAY'; +WEEK: 'WEEK'; +MONTH: 'MONTH'; +QUARTER: 'QUARTER'; +YEAR: 'YEAR'; +SECOND_MICROSECOND: 'SECOND_MICROSECOND'; +MINUTE_MICROSECOND: 'MINUTE_MICROSECOND'; +MINUTE_SECOND: 'MINUTE_SECOND'; +HOUR_MICROSECOND: 'HOUR_MICROSECOND'; +HOUR_SECOND: 'HOUR_SECOND'; +HOUR_MINUTE: 'HOUR_MINUTE'; +DAY_MICROSECOND: 'DAY_MICROSECOND'; +DAY_SECOND: 'DAY_SECOND'; +DAY_MINUTE: 'DAY_MINUTE'; +DAY_HOUR: 'DAY_HOUR'; +YEAR_MONTH: 'YEAR_MONTH'; +CONVERT_TZ: 'CONVERT_TZ'; + +// DATASET TYPES +DATAMODEL: 'DATAMODEL'; +LOOKUP: 'LOOKUP'; +SAVEDSEARCH: 'SAVEDSEARCH'; + +// CONVERTED DATA TYPES +INT: 'INT'; +INTEGER: 'INTEGER'; +DOUBLE: 'DOUBLE'; +LONG: 'LONG'; +FLOAT: 'FLOAT'; +STRING: 'STRING'; +BOOLEAN: 'BOOLEAN'; + +// SPECIAL CHARACTERS AND OPERATORS +PIPE: '|'; +COMMA: ','; +DOT: '.'; +EQUAL: '='; +GREATER: '>'; +LESS: '<'; +NOT_GREATER: '<' '='; +NOT_LESS: '>' '='; +NOT_EQUAL: '!' '='; +PLUS: '+'; +MINUS: '-'; +STAR: '*'; +DIVIDE: '/'; +MODULE: '%'; +EXCLAMATION_SYMBOL: '!'; +COLON: ':'; +LT_PRTHS: '('; +RT_PRTHS: ')'; +LT_SQR_PRTHS: '['; +RT_SQR_PRTHS: ']'; +SINGLE_QUOTE: '\''; +DOUBLE_QUOTE: '"'; +BACKTICK: '`'; + +// Operators. Bit + +BIT_NOT_OP: '~'; +BIT_AND_OP: '&'; +BIT_XOR_OP: '^'; + +// AGGREGATIONS +AVG: 'AVG'; +COUNT: 'COUNT'; +DISTINCT_COUNT: 'DISTINCT_COUNT'; +ESTDC: 'ESTDC'; +ESTDC_ERROR: 'ESTDC_ERROR'; +MAX: 'MAX'; +MEAN: 'MEAN'; +MEDIAN: 'MEDIAN'; +MIN: 'MIN'; +MODE: 'MODE'; +RANGE: 'RANGE'; +STDEV: 'STDEV'; +STDEVP: 'STDEVP'; +SUM: 'SUM'; +SUMSQ: 'SUMSQ'; +VAR_SAMP: 'VAR_SAMP'; +VAR_POP: 'VAR_POP'; +STDDEV_SAMP: 'STDDEV_SAMP'; +STDDEV_POP: 'STDDEV_POP'; +PERCENTILE: 'PERCENTILE'; +TAKE: 'TAKE'; +FIRST: 'FIRST'; +LAST: 'LAST'; +LIST: 'LIST'; +VALUES: 'VALUES'; +EARLIEST: 'EARLIEST'; +EARLIEST_TIME: 'EARLIEST_TIME'; +LATEST: 'LATEST'; +LATEST_TIME: 'LATEST_TIME'; +PER_DAY: 'PER_DAY'; +PER_HOUR: 'PER_HOUR'; +PER_MINUTE: 'PER_MINUTE'; +PER_SECOND: 'PER_SECOND'; +RATE: 'RATE'; +SPARKLINE: 'SPARKLINE'; +C: 'C'; +DC: 'DC'; + +// BASIC FUNCTIONS +ABS: 'ABS'; +CEIL: 'CEIL'; +CEILING: 'CEILING'; +CONV: 'CONV'; +CRC32: 'CRC32'; +E: 'E'; +EXP: 'EXP'; +FLOOR: 'FLOOR'; +LN: 'LN'; +LOG: 'LOG'; +LOG10: 'LOG10'; +LOG2: 'LOG2'; +MOD: 'MOD'; +PI: 'PI'; +POW: 'POW'; +POWER: 'POWER'; +RAND: 'RAND'; +ROUND: 'ROUND'; +SIGN: 'SIGN'; +SQRT: 'SQRT'; +TRUNCATE: 'TRUNCATE'; + +// TRIGONOMETRIC FUNCTIONS +ACOS: 'ACOS'; +ASIN: 'ASIN'; +ATAN: 'ATAN'; +ATAN2: 'ATAN2'; +COS: 'COS'; +COT: 'COT'; +DEGREES: 'DEGREES'; +RADIANS: 'RADIANS'; +SIN: 'SIN'; +TAN: 'TAN'; + +// DATE AND TIME FUNCTIONS +ADDDATE: 'ADDDATE'; +CURDATE: 'CURDATE'; +CURRENT_DATE: 'CURRENT_DATE'; +CURRENT_TIME: 'CURRENT_TIME'; +CURRENT_TIMESTAMP: 'CURRENT_TIMESTAMP'; +CURTIME: 'CURTIME'; +DATE: 'DATE'; +DATE_ADD: 'DATE_ADD'; +DATE_FORMAT: 'DATE_FORMAT'; +DATE_SUB: 'DATE_SUB'; +DAYNAME: 'DAYNAME'; +DAYOFMONTH: 'DAYOFMONTH'; +DAYOFWEEK: 'DAYOFWEEK'; +DAYOFYEAR: 'DAYOFYEAR'; +FROM_DAYS: 'FROM_DAYS'; +LOCALTIME: 'LOCALTIME'; +LOCALTIMESTAMP: 'LOCALTIMESTAMP'; +FROM_UNIXTIME: 'FROM_UNIXTIME'; +MAKEDATE: 'MAKEDATE'; +MAKETIME: 'MAKETIME'; +MONTHNAME: 'MONTHNAME'; +NOW: 'NOW'; +PERIOD_ADD: 'PERIOD_ADD'; +PERIOD_DIFF: 'PERIOD_DIFF'; +SUBDATE: 'SUBDATE'; +SYSDATE: 'SYSDATE'; +TIME: 'TIME'; +TIME_TO_SEC: 'TIME_TO_SEC'; +TIMESTAMP: 'TIMESTAMP'; +TO_DAYS: 'TO_DAYS'; +UTC_DATE: 'UTC_DATE'; +UTC_TIME: 'UTC_TIME'; +UTC_TIMESTAMP: 'UTC_TIMESTAMP'; +UNIX_TIMESTAMP: 'UNIX_TIMESTAMP'; + +// TEXT FUNCTIONS +SUBSTR: 'SUBSTR'; +SUBSTRING: 'SUBSTRING'; +LTRIM: 'LTRIM'; +RTRIM: 'RTRIM'; +TRIM: 'TRIM'; +TO: 'TO'; +LOWER: 'LOWER'; +UPPER: 'UPPER'; +CONCAT: 'CONCAT'; +CONCAT_WS: 'CONCAT_WS'; +LENGTH: 'LENGTH'; +STRCMP: 'STRCMP'; +RIGHT: 'RIGHT'; +LEFT: 'LEFT'; +ASCII: 'ASCII'; +LOCATE: 'LOCATE'; +REPLACE: 'REPLACE'; +CAST: 'CAST'; + +// BOOL FUNCTIONS +LIKE: 'LIKE'; +ISNULL: 'ISNULL'; +ISNOTNULL: 'ISNOTNULL'; + +// FLOWCONTROL FUNCTIONS +IFNULL: 'IFNULL'; +NULLIF: 'NULLIF'; +IF: 'IF'; +TYPEOF: 'TYPEOF'; + +// RELEVANCE FUNCTIONS AND PARAMETERS +MATCH: 'MATCH'; +MATCH_PHRASE: 'MATCH_PHRASE'; +MATCH_PHRASE_PREFIX: 'MATCH_PHRASE_PREFIX'; +MATCH_BOOL_PREFIX: 'MATCH_BOOL_PREFIX'; +SIMPLE_QUERY_STRING: 'SIMPLE_QUERY_STRING'; +MULTI_MATCH: 'MULTI_MATCH'; +QUERY_STRING: 'QUERY_STRING'; + +ALLOW_LEADING_WILDCARD: 'ALLOW_LEADING_WILDCARD'; +ANALYZE_WILDCARD: 'ANALYZE_WILDCARD'; +ANALYZER: 'ANALYZER'; +AUTO_GENERATE_SYNONYMS_PHRASE_QUERY:'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY'; +BOOST: 'BOOST'; +CUTOFF_FREQUENCY: 'CUTOFF_FREQUENCY'; +DEFAULT_FIELD: 'DEFAULT_FIELD'; +DEFAULT_OPERATOR: 'DEFAULT_OPERATOR'; +ENABLE_POSITION_INCREMENTS: 'ENABLE_POSITION_INCREMENTS'; +ESCAPE: 'ESCAPE'; +FLAGS: 'FLAGS'; +FUZZY_MAX_EXPANSIONS: 'FUZZY_MAX_EXPANSIONS'; +FUZZY_PREFIX_LENGTH: 'FUZZY_PREFIX_LENGTH'; +FUZZY_TRANSPOSITIONS: 'FUZZY_TRANSPOSITIONS'; +FUZZY_REWRITE: 'FUZZY_REWRITE'; +FUZZINESS: 'FUZZINESS'; +LENIENT: 'LENIENT'; +LOW_FREQ_OPERATOR: 'LOW_FREQ_OPERATOR'; +MAX_DETERMINIZED_STATES: 'MAX_DETERMINIZED_STATES'; +MAX_EXPANSIONS: 'MAX_EXPANSIONS'; +MINIMUM_SHOULD_MATCH: 'MINIMUM_SHOULD_MATCH'; +OPERATOR: 'OPERATOR'; +PHRASE_SLOP: 'PHRASE_SLOP'; +PREFIX_LENGTH: 'PREFIX_LENGTH'; +QUOTE_ANALYZER: 'QUOTE_ANALYZER'; +QUOTE_FIELD_SUFFIX: 'QUOTE_FIELD_SUFFIX'; +REWRITE: 'REWRITE'; +SLOP: 'SLOP'; +TIE_BREAKER: 'TIE_BREAKER'; +TYPE: 'TYPE'; +ZERO_TERMS_QUERY: 'ZERO_TERMS_QUERY'; + +// SPAN KEYWORDS +SPAN: 'SPAN'; +MS: 'MS'; +S: 'S'; +M: 'M'; +H: 'H'; +W: 'W'; +Q: 'Q'; +Y: 'Y'; + + +// LITERALS AND VALUES +//STRING_LITERAL: DQUOTA_STRING | SQUOTA_STRING | BQUOTA_STRING; +ID: ID_LITERAL; +INTEGER_LITERAL: DEC_DIGIT+; +DECIMAL_LITERAL: (DEC_DIGIT+)? '.' DEC_DIGIT+; + +fragment DATE_SUFFIX: ([\-.][*0-9]+)*; +fragment ID_LITERAL: [@*A-Z]+?[*A-Z_\-0-9]*; +ID_DATE_SUFFIX: ID_LITERAL DATE_SUFFIX; +DQUOTA_STRING: '"' ( '\\'. | '""' | ~('"'| '\\') )* '"'; +SQUOTA_STRING: '\'' ('\\'. | '\'\'' | ~('\'' | '\\'))* '\''; +BQUOTA_STRING: '`' ( '\\'. | '``' | ~('`'|'\\'))* '`'; +fragment DEC_DIGIT: [0-9]; + + +ERROR_RECOGNITION: . -> channel(ERRORCHANNEL); \ No newline at end of file diff --git a/dashboards-observability/common/query_manager/antlr/grammar/OpenSearchPPLParser.g4 b/dashboards-observability/common/query_manager/antlr/grammar/OpenSearchPPLParser.g4 new file mode 100644 index 000000000..3909cef29 --- /dev/null +++ b/dashboards-observability/common/query_manager/antlr/grammar/OpenSearchPPLParser.g4 @@ -0,0 +1,572 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + + + +parser grammar OpenSearchPPLParser; +options { tokenVocab=OpenSearchPPLLexer; } + +root + : pplStatement? EOF + ; + +/** statement */ +pplStatement + : pplCommands (PIPE commands)* + ; + +/** commands */ +pplCommands + : searchCommand + | describeCommand + | showCatalogsCommand + ; + +commands + : whereCommand | fieldsCommand | renameCommand | statsCommand | dedupCommand | sortCommand | evalCommand | headCommand + | topCommand | rareCommand | grokCommand | parseCommand | patternsCommand | kmeansCommand | adCommand | mlCommand; + +searchCommand + : (SEARCH)? fromClause #searchFrom + | (SEARCH)? fromClause logicalExpression #searchFromFilter + | (SEARCH)? logicalExpression fromClause #searchFilterFrom + ; + +describeCommand + : DESCRIBE tableSourceClause + ; + +showCatalogsCommand + : SHOW CATALOGS + ; + +whereCommand + : WHERE logicalExpression + ; + +fieldsCommand + : FIELDS (PLUS | MINUS)? fieldList + ; + +renameCommand + : RENAME renameClasue (COMMA renameClasue)* + ; + +statsCommand + : STATS + (PARTITIONS EQUAL partitions=integerLiteral)? + (ALLNUM EQUAL allnum=booleanLiteral)? + (DELIM EQUAL delim=stringLiteral)? + statsAggTerm (COMMA statsAggTerm)* + (statsByClause)? + (DEDUP_SPLITVALUES EQUAL dedupsplit=booleanLiteral)? + ; + +dedupCommand + : DEDUP + (number=integerLiteral)? + fieldList + (KEEPEMPTY EQUAL keepempty=booleanLiteral)? + (CONSECUTIVE EQUAL consecutive=booleanLiteral)? + ; + +sortCommand + : SORT sortbyClause + ; + +evalCommand + : EVAL evalClause (COMMA evalClause)* + ; + +headCommand + : HEAD + (number=integerLiteral)? + (FROM from=integerLiteral)? + ; + +topCommand + : TOP + (number=integerLiteral)? + fieldList + (byClause)? + ; + +rareCommand + : RARE + fieldList + (byClause)? + ; + +grokCommand + : GROK (source_field=expression) (pattern=stringLiteral) + ; + +parseCommand + : PARSE (source_field=expression) (pattern=stringLiteral) + ; + +patternsCommand + : PATTERNS (patternsParameter)* (source_field=expression) + ; + +patternsParameter + : (NEW_FIELD EQUAL new_field=stringLiteral) + | (PATTERN EQUAL pattern=stringLiteral) + ; + +patternsMethod + : PUNCT | REGEX + ; + +kmeansCommand + : KMEANS (kmeansParameter)* + ; + +kmeansParameter + : (CENTROIDS EQUAL centroids=integerLiteral) + | (ITERATIONS EQUAL iterations=integerLiteral) + | (DISTANCE_TYPE EQUAL distance_type=stringLiteral) + ; + +adCommand + : AD (adParameter)* + ; + +adParameter + : (NUMBER_OF_TREES EQUAL number_of_trees=integerLiteral) + | (SHINGLE_SIZE EQUAL shingle_size=integerLiteral) + | (SAMPLE_SIZE EQUAL sample_size=integerLiteral) + | (OUTPUT_AFTER EQUAL output_after=integerLiteral) + | (TIME_DECAY EQUAL time_decay=decimalLiteral) + | (ANOMALY_RATE EQUAL anomaly_rate=decimalLiteral) + | (CATEGORY_FIELD EQUAL category_field=stringLiteral) + | (TIME_FIELD EQUAL time_field=stringLiteral) + | (DATE_FORMAT EQUAL date_format=stringLiteral) + | (TIME_ZONE EQUAL time_zone=stringLiteral) + | (TRAINING_DATA_SIZE EQUAL training_data_size=integerLiteral) + | (ANOMALY_SCORE_THRESHOLD EQUAL anomaly_score_threshold=decimalLiteral) + ; + +mlCommand + : ML (mlArg)* + ; + +mlArg + : (argName=ident EQUAL argValue=literalValue) + ; + +/** clauses */ +fromClause + : SOURCE EQUAL tableSourceClause + | INDEX EQUAL tableSourceClause + | SOURCE EQUAL tableFunction + | INDEX EQUAL tableFunction + ; + +tableSourceClause + : tableSource (COMMA tableSource)* + ; + +renameClasue + : orignalField=wcFieldExpression AS renamedField=wcFieldExpression + ; + +byClause + : BY fieldList + ; + +statsByClause + : BY fieldList + | BY bySpanClause + | BY bySpanClause COMMA fieldList + ; + +bySpanClause + : spanClause (AS alias=qualifiedName)? + ; + +spanClause + : SPAN LT_PRTHS fieldExpression COMMA value=literalValue (unit=timespanUnit)? RT_PRTHS + ; + +sortbyClause + : sortField (COMMA sortField)* + ; + +evalClause + : fieldExpression EQUAL expression + ; + +/** aggregation terms */ +statsAggTerm + : statsFunction (AS alias=wcFieldExpression)? + ; + +/** aggregation functions */ +statsFunction + : statsFunctionName LT_PRTHS valueExpression RT_PRTHS #statsFunctionCall + | COUNT LT_PRTHS RT_PRTHS #countAllFunctionCall + | (DISTINCT_COUNT | DC) LT_PRTHS valueExpression RT_PRTHS #distinctCountFunctionCall + | percentileAggFunction #percentileAggFunctionCall + | takeAggFunction #takeAggFunctionCall + ; + +statsFunctionName + : AVG | COUNT | SUM | MIN | MAX | VAR_SAMP | VAR_POP | STDDEV_SAMP | STDDEV_POP + ; + +takeAggFunction + : TAKE LT_PRTHS fieldExpression (COMMA size=integerLiteral)? RT_PRTHS + ; + +percentileAggFunction + : PERCENTILE LESS value=integerLiteral GREATER LT_PRTHS aggField=fieldExpression RT_PRTHS + ; + +/** expressions */ +expression + : logicalExpression + | comparisonExpression + | valueExpression + ; + +logicalExpression + : comparisonExpression #comparsion + | NOT logicalExpression #logicalNot + | left=logicalExpression OR right=logicalExpression #logicalOr + | left=logicalExpression (AND)? right=logicalExpression #logicalAnd + | left=logicalExpression XOR right=logicalExpression #logicalXor + | booleanExpression #booleanExpr + | relevanceExpression #relevanceExpr + ; + +comparisonExpression + : left=valueExpression comparisonOperator right=valueExpression #compareExpr + | valueExpression IN valueList #inExpr + ; + +valueExpression + : left=valueExpression binaryOperator right=valueExpression #binaryArithmetic + | LT_PRTHS left=valueExpression binaryOperator + right=valueExpression RT_PRTHS #parentheticBinaryArithmetic + | primaryExpression #valueExpressionDefault + ; + +primaryExpression + : evalFunctionCall + | dataTypeFunctionCall + | fieldExpression + | literalValue + | constantFunction + ; + +constantFunction + : constantFunctionName LT_PRTHS functionArgs? RT_PRTHS + ; + +booleanExpression + : booleanFunctionCall + ; + +relevanceExpression + : singleFieldRelevanceFunction | multiFieldRelevanceFunction + ; + +// Field is a single column +singleFieldRelevanceFunction + : singleFieldRelevanceFunctionName LT_PRTHS + field=relevanceField COMMA query=relevanceQuery + (COMMA relevanceArg)* RT_PRTHS + ; + +// Field is a list of columns +multiFieldRelevanceFunction + : multiFieldRelevanceFunctionName LT_PRTHS + LT_SQR_PRTHS field=relevanceFieldAndWeight (COMMA field=relevanceFieldAndWeight)* RT_SQR_PRTHS + COMMA query=relevanceQuery (COMMA relevanceArg)* RT_PRTHS + ; + +/** tables */ +tableSource + : qualifiedName + | ID_DATE_SUFFIX + ; + +tableFunction + : qualifiedName LT_PRTHS functionArgs RT_PRTHS + ; + +/** fields */ +fieldList + : fieldExpression (COMMA fieldExpression)* + ; + +wcFieldList + : wcFieldExpression (COMMA wcFieldExpression)* + ; + +sortField + : (PLUS | MINUS)? sortFieldExpression + ; + +sortFieldExpression + : fieldExpression + | AUTO LT_PRTHS fieldExpression RT_PRTHS + | STR LT_PRTHS fieldExpression RT_PRTHS + | IP LT_PRTHS fieldExpression RT_PRTHS + | NUM LT_PRTHS fieldExpression RT_PRTHS + ; + +fieldExpression + : qualifiedName + ; + +wcFieldExpression + : wcQualifiedName + ; + +/** functions */ +evalFunctionCall + : evalFunctionName LT_PRTHS functionArgs RT_PRTHS + ; + +/** cast function */ +dataTypeFunctionCall + : CAST LT_PRTHS expression AS convertedDataType RT_PRTHS + ; + +/** boolean functions */ +booleanFunctionCall + : conditionFunctionBase LT_PRTHS functionArgs RT_PRTHS + ; + +convertedDataType + : typeName=DATE + | typeName=TIME + | typeName=TIMESTAMP + | typeName=INT + | typeName=INTEGER + | typeName=DOUBLE + | typeName=LONG + | typeName=FLOAT + | typeName=STRING + | typeName=BOOLEAN + ; + +evalFunctionName + : mathematicalFunctionBase + | dateAndTimeFunctionBase + | textFunctionBase + | conditionFunctionBase + | systemFunctionBase + ; + +functionArgs + : (functionArg (COMMA functionArg)*)? + ; + +functionArg + : (ident EQUAL)? valueExpression + ; + +relevanceArg + : relevanceArgName EQUAL relevanceArgValue + ; + +relevanceArgName + : ALLOW_LEADING_WILDCARD | ANALYZER | ANALYZE_WILDCARD | AUTO_GENERATE_SYNONYMS_PHRASE_QUERY + | BOOST | CUTOFF_FREQUENCY | DEFAULT_FIELD | DEFAULT_OPERATOR | ENABLE_POSITION_INCREMENTS + | ESCAPE | FIELDS | FLAGS | FUZZINESS | FUZZY_MAX_EXPANSIONS | FUZZY_PREFIX_LENGTH + | FUZZY_REWRITE | FUZZY_TRANSPOSITIONS | LENIENT | LOW_FREQ_OPERATOR | MAX_DETERMINIZED_STATES + | MAX_EXPANSIONS | MINIMUM_SHOULD_MATCH | OPERATOR | PHRASE_SLOP | PREFIX_LENGTH + | QUOTE_ANALYZER | QUOTE_FIELD_SUFFIX | REWRITE | SLOP | TIE_BREAKER | TIME_ZONE | TYPE + | ZERO_TERMS_QUERY + ; + +relevanceFieldAndWeight + : field=relevanceField + | field=relevanceField weight=relevanceFieldWeight + | field=relevanceField BIT_XOR_OP weight=relevanceFieldWeight + ; + +relevanceFieldWeight + : integerLiteral + | decimalLiteral + ; + +relevanceField + : qualifiedName + | stringLiteral + ; + +relevanceQuery + : relevanceArgValue + ; + +relevanceArgValue + : qualifiedName + | literalValue + ; + +mathematicalFunctionBase + : ABS | CEIL | CEILING | CONV | CRC32 | E | EXP | FLOOR | LN | LOG | LOG10 | LOG2 | MOD | PI |POW | POWER + | RAND | ROUND | SIGN | SQRT | TRUNCATE + | trigonometricFunctionName + ; + +trigonometricFunctionName + : ACOS | ASIN | ATAN | ATAN2 | COS | COT | DEGREES | RADIANS | SIN | TAN + ; + +dateAndTimeFunctionBase + : ADDDATE | CONVERT_TZ | DATE | DATE_ADD | DATE_FORMAT | DATE_SUB + | DATETIME | DAY | DAYNAME | DAYOFMONTH | DAYOFWEEK | DAYOFYEAR | FROM_DAYS | FROM_UNIXTIME + | HOUR | MAKEDATE | MAKETIME | MICROSECOND | MINUTE | MONTH | MONTHNAME | PERIOD_ADD + | PERIOD_DIFF | QUARTER | SECOND | SUBDATE | SYSDATE | TIME | TIME_TO_SEC + | TIMESTAMP | TO_DAYS | UNIX_TIMESTAMP | WEEK | YEAR + ; + +// Functions which value could be cached in scope of a single query +constantFunctionName + : CURRENT_DATE | CURRENT_TIME | CURRENT_TIMESTAMP | LOCALTIME | LOCALTIMESTAMP | UTC_TIMESTAMP | UTC_DATE | UTC_TIME + | CURDATE | CURTIME | NOW + ; + +/** condition function return boolean value */ +conditionFunctionBase + : LIKE + | IF | ISNULL | ISNOTNULL | IFNULL | NULLIF + ; + +systemFunctionBase + : TYPEOF + ; + +textFunctionBase + : SUBSTR | SUBSTRING | TRIM | LTRIM | RTRIM | LOWER | UPPER | CONCAT | CONCAT_WS | LENGTH | STRCMP + | RIGHT | LEFT | ASCII | LOCATE | REPLACE + ; + +/** operators */ +comparisonOperator + : EQUAL | NOT_EQUAL | LESS | NOT_LESS | GREATER | NOT_GREATER | REGEXP + ; + +binaryOperator + : PLUS | MINUS | STAR | DIVIDE | MODULE + ; + + +singleFieldRelevanceFunctionName + : MATCH + | MATCH_PHRASE + | MATCH_BOOL_PREFIX + | MATCH_PHRASE_PREFIX + ; + +multiFieldRelevanceFunctionName + : SIMPLE_QUERY_STRING + | MULTI_MATCH + | QUERY_STRING + ; + +/** literals and values*/ +literalValue + : intervalLiteral + | stringLiteral + | integerLiteral + | decimalLiteral + | booleanLiteral + | datetimeLiteral //#datetime + ; + +intervalLiteral + : INTERVAL valueExpression intervalUnit + ; + +stringLiteral + : DQUOTA_STRING | SQUOTA_STRING + ; + +integerLiteral + : (PLUS | MINUS)? INTEGER_LITERAL + ; + +decimalLiteral + : (PLUS | MINUS)? DECIMAL_LITERAL + ; + +booleanLiteral + : TRUE | FALSE + ; + +// Date and Time Literal, follow ANSI 92 +datetimeLiteral + : dateLiteral + | timeLiteral + | timestampLiteral + ; + +dateLiteral + : DATE date=stringLiteral + ; + +timeLiteral + : TIME time=stringLiteral + ; + +timestampLiteral + : TIMESTAMP timestamp=stringLiteral + ; + +intervalUnit + : MICROSECOND | SECOND | MINUTE | HOUR | DAY | WEEK | MONTH | QUARTER | YEAR | SECOND_MICROSECOND + | MINUTE_MICROSECOND | MINUTE_SECOND | HOUR_MICROSECOND | HOUR_SECOND | HOUR_MINUTE | DAY_MICROSECOND + | DAY_SECOND | DAY_MINUTE | DAY_HOUR | YEAR_MONTH + ; + +timespanUnit + : MS | S | M | H | D | W | Q | Y + | MILLISECOND | SECOND | MINUTE | HOUR | DAY | WEEK | MONTH | QUARTER | YEAR + ; + + +valueList + : LT_PRTHS literalValue (COMMA literalValue)* RT_PRTHS + ; + +qualifiedName + : ident (DOT ident)* #identsAsQualifiedName + ; + +wcQualifiedName + : wildcard (DOT wildcard)* #identsAsWildcardQualifiedName + ; + +ident + : (DOT)? ID + | BACKTICK ident BACKTICK + | BQUOTA_STRING + | keywordsCanBeId + ; + +wildcard + : ident (MODULE ident)* (MODULE)? + | SINGLE_QUOTE wildcard SINGLE_QUOTE + | DOUBLE_QUOTE wildcard DOUBLE_QUOTE + | BACKTICK wildcard BACKTICK + ; + +keywordsCanBeId + : D // OD SQL and ODBC special + | statsFunctionName + | TIMESTAMP | DATE | TIME + | FIRST | LAST + | timespanUnit | SPAN + | constantFunctionName + | dateAndTimeFunctionBase + | textFunctionBase + | mathematicalFunctionBase + ; \ No newline at end of file diff --git a/dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLLexer.interp b/dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLLexer.interp new file mode 100644 index 000000000..22eb5e912 --- /dev/null +++ b/dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLLexer.interp @@ -0,0 +1,945 @@ +token literal names: +null +'SEARCH' +'DESCRIBE' +'SHOW' +'FROM' +'WHERE' +'FIELDS' +'RENAME' +'STATS' +'DEDUP' +'SORT' +'EVAL' +'HEAD' +'TOP' +'RARE' +'PARSE' +'METHOD' +'REGEX' +'PUNCT' +'GROK' +'PATTERN' +'PATTERNS' +'NEW_FIELD' +'KMEANS' +'AD' +'ML' +'AS' +'BY' +'SOURCE' +'INDEX' +'D' +'DESC' +'CATALOGS' +'SORTBY' +'AUTO' +'STR' +'IP' +'NUM' +'KEEPEMPTY' +'CONSECUTIVE' +'DEDUP_SPLITVALUES' +'PARTITIONS' +'ALLNUM' +'DELIM' +'CENTROIDS' +'ITERATIONS' +'DISTANCE_TYPE' +'NUMBER_OF_TREES' +'SHINGLE_SIZE' +'SAMPLE_SIZE' +'OUTPUT_AFTER' +'TIME_DECAY' +'ANOMALY_RATE' +'CATEGORY_FIELD' +'TIME_FIELD' +'TIME_ZONE' +'TRAINING_DATA_SIZE' +'ANOMALY_SCORE_THRESHOLD' +'CASE' +'IN' +'NOT' +'OR' +'AND' +'XOR' +'TRUE' +'FALSE' +'REGEXP' +'DATETIME' +'INTERVAL' +'MICROSECOND' +'MILLISECOND' +'SECOND' +'MINUTE' +'HOUR' +'DAY' +'WEEK' +'MONTH' +'QUARTER' +'YEAR' +'SECOND_MICROSECOND' +'MINUTE_MICROSECOND' +'MINUTE_SECOND' +'HOUR_MICROSECOND' +'HOUR_SECOND' +'HOUR_MINUTE' +'DAY_MICROSECOND' +'DAY_SECOND' +'DAY_MINUTE' +'DAY_HOUR' +'YEAR_MONTH' +'CONVERT_TZ' +'DATAMODEL' +'LOOKUP' +'SAVEDSEARCH' +'INT' +'INTEGER' +'DOUBLE' +'LONG' +'FLOAT' +'STRING' +'BOOLEAN' +'|' +',' +'.' +'=' +'>' +'<' +null +null +null +'+' +'-' +'*' +'/' +'%' +'!' +':' +'(' +')' +'[' +']' +'\'' +'"' +'`' +'~' +'&' +'^' +'AVG' +'COUNT' +'DISTINCT_COUNT' +'ESTDC' +'ESTDC_ERROR' +'MAX' +'MEAN' +'MEDIAN' +'MIN' +'MODE' +'RANGE' +'STDEV' +'STDEVP' +'SUM' +'SUMSQ' +'VAR_SAMP' +'VAR_POP' +'STDDEV_SAMP' +'STDDEV_POP' +'PERCENTILE' +'TAKE' +'FIRST' +'LAST' +'LIST' +'VALUES' +'EARLIEST' +'EARLIEST_TIME' +'LATEST' +'LATEST_TIME' +'PER_DAY' +'PER_HOUR' +'PER_MINUTE' +'PER_SECOND' +'RATE' +'SPARKLINE' +'C' +'DC' +'ABS' +'CEIL' +'CEILING' +'CONV' +'CRC32' +'E' +'EXP' +'FLOOR' +'LN' +'LOG' +'LOG10' +'LOG2' +'MOD' +'PI' +'POW' +'POWER' +'RAND' +'ROUND' +'SIGN' +'SQRT' +'TRUNCATE' +'ACOS' +'ASIN' +'ATAN' +'ATAN2' +'COS' +'COT' +'DEGREES' +'RADIANS' +'SIN' +'TAN' +'ADDDATE' +'CURDATE' +'CURRENT_DATE' +'CURRENT_TIME' +'CURRENT_TIMESTAMP' +'CURTIME' +'DATE' +'DATE_ADD' +'DATE_FORMAT' +'DATE_SUB' +'DAYNAME' +'DAYOFMONTH' +'DAYOFWEEK' +'DAYOFYEAR' +'FROM_DAYS' +'LOCALTIME' +'LOCALTIMESTAMP' +'FROM_UNIXTIME' +'MAKEDATE' +'MAKETIME' +'MONTHNAME' +'NOW' +'PERIOD_ADD' +'PERIOD_DIFF' +'SUBDATE' +'SYSDATE' +'TIME' +'TIME_TO_SEC' +'TIMESTAMP' +'TO_DAYS' +'UTC_DATE' +'UTC_TIME' +'UTC_TIMESTAMP' +'UNIX_TIMESTAMP' +'SUBSTR' +'SUBSTRING' +'LTRIM' +'RTRIM' +'TRIM' +'TO' +'LOWER' +'UPPER' +'CONCAT' +'CONCAT_WS' +'LENGTH' +'STRCMP' +'RIGHT' +'LEFT' +'ASCII' +'LOCATE' +'REPLACE' +'CAST' +'LIKE' +'ISNULL' +'ISNOTNULL' +'IFNULL' +'NULLIF' +'IF' +'TYPEOF' +'MATCH' +'MATCH_PHRASE' +'MATCH_PHRASE_PREFIX' +'MATCH_BOOL_PREFIX' +'SIMPLE_QUERY_STRING' +'MULTI_MATCH' +'QUERY_STRING' +'ALLOW_LEADING_WILDCARD' +'ANALYZE_WILDCARD' +'ANALYZER' +'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY' +'BOOST' +'CUTOFF_FREQUENCY' +'DEFAULT_FIELD' +'DEFAULT_OPERATOR' +'ENABLE_POSITION_INCREMENTS' +'ESCAPE' +'FLAGS' +'FUZZY_MAX_EXPANSIONS' +'FUZZY_PREFIX_LENGTH' +'FUZZY_TRANSPOSITIONS' +'FUZZY_REWRITE' +'FUZZINESS' +'LENIENT' +'LOW_FREQ_OPERATOR' +'MAX_DETERMINIZED_STATES' +'MAX_EXPANSIONS' +'MINIMUM_SHOULD_MATCH' +'OPERATOR' +'PHRASE_SLOP' +'PREFIX_LENGTH' +'QUOTE_ANALYZER' +'QUOTE_FIELD_SUFFIX' +'REWRITE' +'SLOP' +'TIE_BREAKER' +'TYPE' +'ZERO_TERMS_QUERY' +'SPAN' +'MS' +'S' +'M' +'H' +'W' +'Q' +'Y' +null +null +null +null +null +null +null +null + +token symbolic names: +null +SEARCH +DESCRIBE +SHOW +FROM +WHERE +FIELDS +RENAME +STATS +DEDUP +SORT +EVAL +HEAD +TOP +RARE +PARSE +METHOD +REGEX +PUNCT +GROK +PATTERN +PATTERNS +NEW_FIELD +KMEANS +AD +ML +AS +BY +SOURCE +INDEX +D +DESC +CATALOGS +SORTBY +AUTO +STR +IP +NUM +KEEPEMPTY +CONSECUTIVE +DEDUP_SPLITVALUES +PARTITIONS +ALLNUM +DELIM +CENTROIDS +ITERATIONS +DISTANCE_TYPE +NUMBER_OF_TREES +SHINGLE_SIZE +SAMPLE_SIZE +OUTPUT_AFTER +TIME_DECAY +ANOMALY_RATE +CATEGORY_FIELD +TIME_FIELD +TIME_ZONE +TRAINING_DATA_SIZE +ANOMALY_SCORE_THRESHOLD +CASE +IN +NOT +OR +AND +XOR +TRUE +FALSE +REGEXP +DATETIME +INTERVAL +MICROSECOND +MILLISECOND +SECOND +MINUTE +HOUR +DAY +WEEK +MONTH +QUARTER +YEAR +SECOND_MICROSECOND +MINUTE_MICROSECOND +MINUTE_SECOND +HOUR_MICROSECOND +HOUR_SECOND +HOUR_MINUTE +DAY_MICROSECOND +DAY_SECOND +DAY_MINUTE +DAY_HOUR +YEAR_MONTH +CONVERT_TZ +DATAMODEL +LOOKUP +SAVEDSEARCH +INT +INTEGER +DOUBLE +LONG +FLOAT +STRING +BOOLEAN +PIPE +COMMA +DOT +EQUAL +GREATER +LESS +NOT_GREATER +NOT_LESS +NOT_EQUAL +PLUS +MINUS +STAR +DIVIDE +MODULE +EXCLAMATION_SYMBOL +COLON +LT_PRTHS +RT_PRTHS +LT_SQR_PRTHS +RT_SQR_PRTHS +SINGLE_QUOTE +DOUBLE_QUOTE +BACKTICK +BIT_NOT_OP +BIT_AND_OP +BIT_XOR_OP +AVG +COUNT +DISTINCT_COUNT +ESTDC +ESTDC_ERROR +MAX +MEAN +MEDIAN +MIN +MODE +RANGE +STDEV +STDEVP +SUM +SUMSQ +VAR_SAMP +VAR_POP +STDDEV_SAMP +STDDEV_POP +PERCENTILE +TAKE +FIRST +LAST +LIST +VALUES +EARLIEST +EARLIEST_TIME +LATEST +LATEST_TIME +PER_DAY +PER_HOUR +PER_MINUTE +PER_SECOND +RATE +SPARKLINE +C +DC +ABS +CEIL +CEILING +CONV +CRC32 +E +EXP +FLOOR +LN +LOG +LOG10 +LOG2 +MOD +PI +POW +POWER +RAND +ROUND +SIGN +SQRT +TRUNCATE +ACOS +ASIN +ATAN +ATAN2 +COS +COT +DEGREES +RADIANS +SIN +TAN +ADDDATE +CURDATE +CURRENT_DATE +CURRENT_TIME +CURRENT_TIMESTAMP +CURTIME +DATE +DATE_ADD +DATE_FORMAT +DATE_SUB +DAYNAME +DAYOFMONTH +DAYOFWEEK +DAYOFYEAR +FROM_DAYS +LOCALTIME +LOCALTIMESTAMP +FROM_UNIXTIME +MAKEDATE +MAKETIME +MONTHNAME +NOW +PERIOD_ADD +PERIOD_DIFF +SUBDATE +SYSDATE +TIME +TIME_TO_SEC +TIMESTAMP +TO_DAYS +UTC_DATE +UTC_TIME +UTC_TIMESTAMP +UNIX_TIMESTAMP +SUBSTR +SUBSTRING +LTRIM +RTRIM +TRIM +TO +LOWER +UPPER +CONCAT +CONCAT_WS +LENGTH +STRCMP +RIGHT +LEFT +ASCII +LOCATE +REPLACE +CAST +LIKE +ISNULL +ISNOTNULL +IFNULL +NULLIF +IF +TYPEOF +MATCH +MATCH_PHRASE +MATCH_PHRASE_PREFIX +MATCH_BOOL_PREFIX +SIMPLE_QUERY_STRING +MULTI_MATCH +QUERY_STRING +ALLOW_LEADING_WILDCARD +ANALYZE_WILDCARD +ANALYZER +AUTO_GENERATE_SYNONYMS_PHRASE_QUERY +BOOST +CUTOFF_FREQUENCY +DEFAULT_FIELD +DEFAULT_OPERATOR +ENABLE_POSITION_INCREMENTS +ESCAPE +FLAGS +FUZZY_MAX_EXPANSIONS +FUZZY_PREFIX_LENGTH +FUZZY_TRANSPOSITIONS +FUZZY_REWRITE +FUZZINESS +LENIENT +LOW_FREQ_OPERATOR +MAX_DETERMINIZED_STATES +MAX_EXPANSIONS +MINIMUM_SHOULD_MATCH +OPERATOR +PHRASE_SLOP +PREFIX_LENGTH +QUOTE_ANALYZER +QUOTE_FIELD_SUFFIX +REWRITE +SLOP +TIE_BREAKER +TYPE +ZERO_TERMS_QUERY +SPAN +MS +S +M +H +W +Q +Y +ID +INTEGER_LITERAL +DECIMAL_LITERAL +ID_DATE_SUFFIX +DQUOTA_STRING +SQUOTA_STRING +BQUOTA_STRING +ERROR_RECOGNITION + +rule names: +SEARCH +DESCRIBE +SHOW +FROM +WHERE +FIELDS +RENAME +STATS +DEDUP +SORT +EVAL +HEAD +TOP +RARE +PARSE +METHOD +REGEX +PUNCT +GROK +PATTERN +PATTERNS +NEW_FIELD +KMEANS +AD +ML +AS +BY +SOURCE +INDEX +D +DESC +CATALOGS +SORTBY +AUTO +STR +IP +NUM +KEEPEMPTY +CONSECUTIVE +DEDUP_SPLITVALUES +PARTITIONS +ALLNUM +DELIM +CENTROIDS +ITERATIONS +DISTANCE_TYPE +NUMBER_OF_TREES +SHINGLE_SIZE +SAMPLE_SIZE +OUTPUT_AFTER +TIME_DECAY +ANOMALY_RATE +CATEGORY_FIELD +TIME_FIELD +TIME_ZONE +TRAINING_DATA_SIZE +ANOMALY_SCORE_THRESHOLD +CASE +IN +NOT +OR +AND +XOR +TRUE +FALSE +REGEXP +DATETIME +INTERVAL +MICROSECOND +MILLISECOND +SECOND +MINUTE +HOUR +DAY +WEEK +MONTH +QUARTER +YEAR +SECOND_MICROSECOND +MINUTE_MICROSECOND +MINUTE_SECOND +HOUR_MICROSECOND +HOUR_SECOND +HOUR_MINUTE +DAY_MICROSECOND +DAY_SECOND +DAY_MINUTE +DAY_HOUR +YEAR_MONTH +CONVERT_TZ +DATAMODEL +LOOKUP +SAVEDSEARCH +INT +INTEGER +DOUBLE +LONG +FLOAT +STRING +BOOLEAN +PIPE +COMMA +DOT +EQUAL +GREATER +LESS +NOT_GREATER +NOT_LESS +NOT_EQUAL +PLUS +MINUS +STAR +DIVIDE +MODULE +EXCLAMATION_SYMBOL +COLON +LT_PRTHS +RT_PRTHS +LT_SQR_PRTHS +RT_SQR_PRTHS +SINGLE_QUOTE +DOUBLE_QUOTE +BACKTICK +BIT_NOT_OP +BIT_AND_OP +BIT_XOR_OP +AVG +COUNT +DISTINCT_COUNT +ESTDC +ESTDC_ERROR +MAX +MEAN +MEDIAN +MIN +MODE +RANGE +STDEV +STDEVP +SUM +SUMSQ +VAR_SAMP +VAR_POP +STDDEV_SAMP +STDDEV_POP +PERCENTILE +TAKE +FIRST +LAST +LIST +VALUES +EARLIEST +EARLIEST_TIME +LATEST +LATEST_TIME +PER_DAY +PER_HOUR +PER_MINUTE +PER_SECOND +RATE +SPARKLINE +C +DC +ABS +CEIL +CEILING +CONV +CRC32 +E +EXP +FLOOR +LN +LOG +LOG10 +LOG2 +MOD +PI +POW +POWER +RAND +ROUND +SIGN +SQRT +TRUNCATE +ACOS +ASIN +ATAN +ATAN2 +COS +COT +DEGREES +RADIANS +SIN +TAN +ADDDATE +CURDATE +CURRENT_DATE +CURRENT_TIME +CURRENT_TIMESTAMP +CURTIME +DATE +DATE_ADD +DATE_FORMAT +DATE_SUB +DAYNAME +DAYOFMONTH +DAYOFWEEK +DAYOFYEAR +FROM_DAYS +LOCALTIME +LOCALTIMESTAMP +FROM_UNIXTIME +MAKEDATE +MAKETIME +MONTHNAME +NOW +PERIOD_ADD +PERIOD_DIFF +SUBDATE +SYSDATE +TIME +TIME_TO_SEC +TIMESTAMP +TO_DAYS +UTC_DATE +UTC_TIME +UTC_TIMESTAMP +UNIX_TIMESTAMP +SUBSTR +SUBSTRING +LTRIM +RTRIM +TRIM +TO +LOWER +UPPER +CONCAT +CONCAT_WS +LENGTH +STRCMP +RIGHT +LEFT +ASCII +LOCATE +REPLACE +CAST +LIKE +ISNULL +ISNOTNULL +IFNULL +NULLIF +IF +TYPEOF +MATCH +MATCH_PHRASE +MATCH_PHRASE_PREFIX +MATCH_BOOL_PREFIX +SIMPLE_QUERY_STRING +MULTI_MATCH +QUERY_STRING +ALLOW_LEADING_WILDCARD +ANALYZE_WILDCARD +ANALYZER +AUTO_GENERATE_SYNONYMS_PHRASE_QUERY +BOOST +CUTOFF_FREQUENCY +DEFAULT_FIELD +DEFAULT_OPERATOR +ENABLE_POSITION_INCREMENTS +ESCAPE +FLAGS +FUZZY_MAX_EXPANSIONS +FUZZY_PREFIX_LENGTH +FUZZY_TRANSPOSITIONS +FUZZY_REWRITE +FUZZINESS +LENIENT +LOW_FREQ_OPERATOR +MAX_DETERMINIZED_STATES +MAX_EXPANSIONS +MINIMUM_SHOULD_MATCH +OPERATOR +PHRASE_SLOP +PREFIX_LENGTH +QUOTE_ANALYZER +QUOTE_FIELD_SUFFIX +REWRITE +SLOP +TIE_BREAKER +TYPE +ZERO_TERMS_QUERY +SPAN +MS +S +M +H +W +Q +Y +ID +INTEGER_LITERAL +DECIMAL_LITERAL +DATE_SUFFIX +ID_LITERAL +ID_DATE_SUFFIX +DQUOTA_STRING +SQUOTA_STRING +BQUOTA_STRING +DEC_DIGIT +ERROR_RECOGNITION + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN +null +null +WHITESPACE +ERRORCHANNEL + +mode names: +DEFAULT_MODE + +atn: +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 2, 309, 3131, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 4, 126, 9, 126, 4, 127, 9, 127, 4, 128, 9, 128, 4, 129, 9, 129, 4, 130, 9, 130, 4, 131, 9, 131, 4, 132, 9, 132, 4, 133, 9, 133, 4, 134, 9, 134, 4, 135, 9, 135, 4, 136, 9, 136, 4, 137, 9, 137, 4, 138, 9, 138, 4, 139, 9, 139, 4, 140, 9, 140, 4, 141, 9, 141, 4, 142, 9, 142, 4, 143, 9, 143, 4, 144, 9, 144, 4, 145, 9, 145, 4, 146, 9, 146, 4, 147, 9, 147, 4, 148, 9, 148, 4, 149, 9, 149, 4, 150, 9, 150, 4, 151, 9, 151, 4, 152, 9, 152, 4, 153, 9, 153, 4, 154, 9, 154, 4, 155, 9, 155, 4, 156, 9, 156, 4, 157, 9, 157, 4, 158, 9, 158, 4, 159, 9, 159, 4, 160, 9, 160, 4, 161, 9, 161, 4, 162, 9, 162, 4, 163, 9, 163, 4, 164, 9, 164, 4, 165, 9, 165, 4, 166, 9, 166, 4, 167, 9, 167, 4, 168, 9, 168, 4, 169, 9, 169, 4, 170, 9, 170, 4, 171, 9, 171, 4, 172, 9, 172, 4, 173, 9, 173, 4, 174, 9, 174, 4, 175, 9, 175, 4, 176, 9, 176, 4, 177, 9, 177, 4, 178, 9, 178, 4, 179, 9, 179, 4, 180, 9, 180, 4, 181, 9, 181, 4, 182, 9, 182, 4, 183, 9, 183, 4, 184, 9, 184, 4, 185, 9, 185, 4, 186, 9, 186, 4, 187, 9, 187, 4, 188, 9, 188, 4, 189, 9, 189, 4, 190, 9, 190, 4, 191, 9, 191, 4, 192, 9, 192, 4, 193, 9, 193, 4, 194, 9, 194, 4, 195, 9, 195, 4, 196, 9, 196, 4, 197, 9, 197, 4, 198, 9, 198, 4, 199, 9, 199, 4, 200, 9, 200, 4, 201, 9, 201, 4, 202, 9, 202, 4, 203, 9, 203, 4, 204, 9, 204, 4, 205, 9, 205, 4, 206, 9, 206, 4, 207, 9, 207, 4, 208, 9, 208, 4, 209, 9, 209, 4, 210, 9, 210, 4, 211, 9, 211, 4, 212, 9, 212, 4, 213, 9, 213, 4, 214, 9, 214, 4, 215, 9, 215, 4, 216, 9, 216, 4, 217, 9, 217, 4, 218, 9, 218, 4, 219, 9, 219, 4, 220, 9, 220, 4, 221, 9, 221, 4, 222, 9, 222, 4, 223, 9, 223, 4, 224, 9, 224, 4, 225, 9, 225, 4, 226, 9, 226, 4, 227, 9, 227, 4, 228, 9, 228, 4, 229, 9, 229, 4, 230, 9, 230, 4, 231, 9, 231, 4, 232, 9, 232, 4, 233, 9, 233, 4, 234, 9, 234, 4, 235, 9, 235, 4, 236, 9, 236, 4, 237, 9, 237, 4, 238, 9, 238, 4, 239, 9, 239, 4, 240, 9, 240, 4, 241, 9, 241, 4, 242, 9, 242, 4, 243, 9, 243, 4, 244, 9, 244, 4, 245, 9, 245, 4, 246, 9, 246, 4, 247, 9, 247, 4, 248, 9, 248, 4, 249, 9, 249, 4, 250, 9, 250, 4, 251, 9, 251, 4, 252, 9, 252, 4, 253, 9, 253, 4, 254, 9, 254, 4, 255, 9, 255, 4, 256, 9, 256, 4, 257, 9, 257, 4, 258, 9, 258, 4, 259, 9, 259, 4, 260, 9, 260, 4, 261, 9, 261, 4, 262, 9, 262, 4, 263, 9, 263, 4, 264, 9, 264, 4, 265, 9, 265, 4, 266, 9, 266, 4, 267, 9, 267, 4, 268, 9, 268, 4, 269, 9, 269, 4, 270, 9, 270, 4, 271, 9, 271, 4, 272, 9, 272, 4, 273, 9, 273, 4, 274, 9, 274, 4, 275, 9, 275, 4, 276, 9, 276, 4, 277, 9, 277, 4, 278, 9, 278, 4, 279, 9, 279, 4, 280, 9, 280, 4, 281, 9, 281, 4, 282, 9, 282, 4, 283, 9, 283, 4, 284, 9, 284, 4, 285, 9, 285, 4, 286, 9, 286, 4, 287, 9, 287, 4, 288, 9, 288, 4, 289, 9, 289, 4, 290, 9, 290, 4, 291, 9, 291, 4, 292, 9, 292, 4, 293, 9, 293, 4, 294, 9, 294, 4, 295, 9, 295, 4, 296, 9, 296, 4, 297, 9, 297, 4, 298, 9, 298, 4, 299, 9, 299, 4, 300, 9, 300, 4, 301, 9, 301, 4, 302, 9, 302, 4, 303, 9, 303, 4, 304, 9, 304, 4, 305, 9, 305, 4, 306, 9, 306, 4, 307, 9, 307, 4, 308, 9, 308, 4, 309, 9, 309, 4, 310, 9, 310, 4, 311, 9, 311, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 95, 3, 95, 3, 95, 3, 95, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 102, 3, 102, 3, 103, 3, 103, 3, 104, 3, 104, 3, 105, 3, 105, 3, 106, 3, 106, 3, 107, 3, 107, 3, 108, 3, 108, 3, 108, 3, 109, 3, 109, 3, 109, 3, 110, 3, 110, 3, 110, 3, 111, 3, 111, 3, 112, 3, 112, 3, 113, 3, 113, 3, 114, 3, 114, 3, 115, 3, 115, 3, 116, 3, 116, 3, 117, 3, 117, 3, 118, 3, 118, 3, 119, 3, 119, 3, 120, 3, 120, 3, 121, 3, 121, 3, 122, 3, 122, 3, 123, 3, 123, 3, 124, 3, 124, 3, 125, 3, 125, 3, 126, 3, 126, 3, 127, 3, 127, 3, 128, 3, 128, 3, 128, 3, 128, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 133, 3, 133, 3, 133, 3, 133, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 136, 3, 136, 3, 136, 3, 136, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 139, 3, 139, 3, 139, 3, 139, 3, 139, 3, 139, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 141, 3, 141, 3, 141, 3, 141, 3, 142, 3, 142, 3, 142, 3, 142, 3, 142, 3, 142, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 149, 3, 149, 3, 149, 3, 149, 3, 149, 3, 149, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 155, 3, 155, 3, 155, 3, 155, 3, 155, 3, 155, 3, 155, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 157, 3, 157, 3, 157, 3, 157, 3, 157, 3, 157, 3, 157, 3, 157, 3, 158, 3, 158, 3, 158, 3, 158, 3, 158, 3, 158, 3, 158, 3, 158, 3, 158, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 161, 3, 161, 3, 161, 3, 161, 3, 161, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 163, 3, 163, 3, 164, 3, 164, 3, 164, 3, 165, 3, 165, 3, 165, 3, 165, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 170, 3, 170, 3, 171, 3, 171, 3, 171, 3, 171, 3, 172, 3, 172, 3, 172, 3, 172, 3, 172, 3, 172, 3, 173, 3, 173, 3, 173, 3, 174, 3, 174, 3, 174, 3, 174, 3, 175, 3, 175, 3, 175, 3, 175, 3, 175, 3, 175, 3, 176, 3, 176, 3, 176, 3, 176, 3, 176, 3, 177, 3, 177, 3, 177, 3, 177, 3, 178, 3, 178, 3, 178, 3, 179, 3, 179, 3, 179, 3, 179, 3, 180, 3, 180, 3, 180, 3, 180, 3, 180, 3, 180, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 183, 3, 183, 3, 183, 3, 183, 3, 183, 3, 184, 3, 184, 3, 184, 3, 184, 3, 184, 3, 185, 3, 185, 3, 185, 3, 185, 3, 185, 3, 185, 3, 185, 3, 185, 3, 185, 3, 186, 3, 186, 3, 186, 3, 186, 3, 186, 3, 187, 3, 187, 3, 187, 3, 187, 3, 187, 3, 188, 3, 188, 3, 188, 3, 188, 3, 188, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 190, 3, 190, 3, 190, 3, 190, 3, 191, 3, 191, 3, 191, 3, 191, 3, 192, 3, 192, 3, 192, 3, 192, 3, 192, 3, 192, 3, 192, 3, 192, 3, 193, 3, 193, 3, 193, 3, 193, 3, 193, 3, 193, 3, 193, 3, 193, 3, 194, 3, 194, 3, 194, 3, 194, 3, 195, 3, 195, 3, 195, 3, 195, 3, 196, 3, 196, 3, 196, 3, 196, 3, 196, 3, 196, 3, 196, 3, 196, 3, 197, 3, 197, 3, 197, 3, 197, 3, 197, 3, 197, 3, 197, 3, 197, 3, 198, 3, 198, 3, 198, 3, 198, 3, 198, 3, 198, 3, 198, 3, 198, 3, 198, 3, 198, 3, 198, 3, 198, 3, 198, 3, 199, 3, 199, 3, 199, 3, 199, 3, 199, 3, 199, 3, 199, 3, 199, 3, 199, 3, 199, 3, 199, 3, 199, 3, 199, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 201, 3, 201, 3, 201, 3, 201, 3, 201, 3, 201, 3, 201, 3, 201, 3, 202, 3, 202, 3, 202, 3, 202, 3, 202, 3, 203, 3, 203, 3, 203, 3, 203, 3, 203, 3, 203, 3, 203, 3, 203, 3, 203, 3, 204, 3, 204, 3, 204, 3, 204, 3, 204, 3, 204, 3, 204, 3, 204, 3, 204, 3, 204, 3, 204, 3, 204, 3, 205, 3, 205, 3, 205, 3, 205, 3, 205, 3, 205, 3, 205, 3, 205, 3, 205, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 208, 3, 208, 3, 208, 3, 208, 3, 208, 3, 208, 3, 208, 3, 208, 3, 208, 3, 208, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 211, 3, 211, 3, 211, 3, 211, 3, 211, 3, 211, 3, 211, 3, 211, 3, 211, 3, 211, 3, 212, 3, 212, 3, 212, 3, 212, 3, 212, 3, 212, 3, 212, 3, 212, 3, 212, 3, 212, 3, 212, 3, 212, 3, 212, 3, 212, 3, 212, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 214, 3, 214, 3, 214, 3, 214, 3, 214, 3, 214, 3, 214, 3, 214, 3, 214, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 217, 3, 217, 3, 217, 3, 217, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 220, 3, 220, 3, 220, 3, 220, 3, 220, 3, 220, 3, 220, 3, 220, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 232, 3, 232, 3, 232, 3, 232, 3, 232, 3, 232, 3, 233, 3, 233, 3, 233, 3, 233, 3, 233, 3, 233, 3, 234, 3, 234, 3, 234, 3, 234, 3, 234, 3, 235, 3, 235, 3, 235, 3, 236, 3, 236, 3, 236, 3, 236, 3, 236, 3, 236, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 3, 240, 3, 240, 3, 240, 3, 240, 3, 240, 3, 240, 3, 240, 3, 241, 3, 241, 3, 241, 3, 241, 3, 241, 3, 241, 3, 241, 3, 242, 3, 242, 3, 242, 3, 242, 3, 242, 3, 242, 3, 243, 3, 243, 3, 243, 3, 243, 3, 243, 3, 244, 3, 244, 3, 244, 3, 244, 3, 244, 3, 244, 3, 245, 3, 245, 3, 245, 3, 245, 3, 245, 3, 245, 3, 245, 3, 246, 3, 246, 3, 246, 3, 246, 3, 246, 3, 246, 3, 246, 3, 246, 3, 247, 3, 247, 3, 247, 3, 247, 3, 247, 3, 248, 3, 248, 3, 248, 3, 248, 3, 248, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 251, 3, 251, 3, 251, 3, 251, 3, 251, 3, 251, 3, 251, 3, 252, 3, 252, 3, 252, 3, 252, 3, 252, 3, 252, 3, 252, 3, 253, 3, 253, 3, 253, 3, 254, 3, 254, 3, 254, 3, 254, 3, 254, 3, 254, 3, 254, 3, 255, 3, 255, 3, 255, 3, 255, 3, 255, 3, 255, 3, 256, 3, 256, 3, 256, 3, 256, 3, 256, 3, 256, 3, 256, 3, 256, 3, 256, 3, 256, 3, 256, 3, 256, 3, 256, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 263, 3, 263, 3, 263, 3, 263, 3, 263, 3, 263, 3, 263, 3, 263, 3, 263, 3, 263, 3, 263, 3, 263, 3, 263, 3, 263, 3, 263, 3, 263, 3, 263, 3, 264, 3, 264, 3, 264, 3, 264, 3, 264, 3, 264, 3, 264, 3, 264, 3, 264, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 266, 3, 266, 3, 266, 3, 266, 3, 266, 3, 266, 3, 267, 3, 267, 3, 267, 3, 267, 3, 267, 3, 267, 3, 267, 3, 267, 3, 267, 3, 267, 3, 267, 3, 267, 3, 267, 3, 267, 3, 267, 3, 267, 3, 267, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 269, 3, 269, 3, 269, 3, 269, 3, 269, 3, 269, 3, 269, 3, 269, 3, 269, 3, 269, 3, 269, 3, 269, 3, 269, 3, 269, 3, 269, 3, 269, 3, 269, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 271, 3, 271, 3, 271, 3, 271, 3, 271, 3, 271, 3, 271, 3, 272, 3, 272, 3, 272, 3, 272, 3, 272, 3, 272, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 274, 3, 274, 3, 274, 3, 274, 3, 274, 3, 274, 3, 274, 3, 274, 3, 274, 3, 274, 3, 274, 3, 274, 3, 274, 3, 274, 3, 274, 3, 274, 3, 274, 3, 274, 3, 274, 3, 274, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 276, 3, 276, 3, 276, 3, 276, 3, 276, 3, 276, 3, 276, 3, 276, 3, 276, 3, 276, 3, 276, 3, 276, 3, 276, 3, 276, 3, 277, 3, 277, 3, 277, 3, 277, 3, 277, 3, 277, 3, 277, 3, 277, 3, 277, 3, 277, 3, 278, 3, 278, 3, 278, 3, 278, 3, 278, 3, 278, 3, 278, 3, 278, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 283, 3, 283, 3, 283, 3, 283, 3, 283, 3, 283, 3, 283, 3, 283, 3, 283, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 285, 3, 285, 3, 285, 3, 285, 3, 285, 3, 285, 3, 285, 3, 285, 3, 285, 3, 285, 3, 285, 3, 285, 3, 285, 3, 285, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 289, 3, 289, 3, 289, 3, 289, 3, 289, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 291, 3, 291, 3, 291, 3, 291, 3, 291, 3, 292, 3, 292, 3, 292, 3, 292, 3, 292, 3, 292, 3, 292, 3, 292, 3, 292, 3, 292, 3, 292, 3, 292, 3, 292, 3, 292, 3, 292, 3, 292, 3, 292, 3, 293, 3, 293, 3, 293, 3, 293, 3, 293, 3, 294, 3, 294, 3, 294, 3, 295, 3, 295, 3, 296, 3, 296, 3, 297, 3, 297, 3, 298, 3, 298, 3, 299, 3, 299, 3, 300, 3, 300, 3, 301, 3, 301, 3, 302, 6, 302, 3045, 10, 302, 13, 302, 14, 302, 3046, 3, 303, 6, 303, 3050, 10, 303, 13, 303, 14, 303, 3051, 5, 303, 3054, 10, 303, 3, 303, 3, 303, 6, 303, 3058, 10, 303, 13, 303, 14, 303, 3059, 3, 304, 3, 304, 6, 304, 3064, 10, 304, 13, 304, 14, 304, 3065, 7, 304, 3068, 10, 304, 12, 304, 14, 304, 3071, 11, 304, 3, 305, 6, 305, 3074, 10, 305, 13, 305, 14, 305, 3075, 3, 305, 7, 305, 3079, 10, 305, 12, 305, 14, 305, 3082, 11, 305, 3, 306, 3, 306, 3, 306, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 7, 307, 3093, 10, 307, 12, 307, 14, 307, 3096, 11, 307, 3, 307, 3, 307, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 7, 308, 3106, 10, 308, 12, 308, 14, 308, 3109, 11, 308, 3, 308, 3, 308, 3, 309, 3, 309, 3, 309, 3, 309, 3, 309, 3, 309, 7, 309, 3119, 10, 309, 12, 309, 14, 309, 3122, 11, 309, 3, 309, 3, 309, 3, 310, 3, 310, 3, 311, 3, 311, 3, 311, 3, 311, 3, 3075, 2, 2, 312, 3, 2, 3, 5, 2, 4, 7, 2, 5, 9, 2, 6, 11, 2, 7, 13, 2, 8, 15, 2, 9, 17, 2, 10, 19, 2, 11, 21, 2, 12, 23, 2, 13, 25, 2, 14, 27, 2, 15, 29, 2, 16, 31, 2, 17, 33, 2, 18, 35, 2, 19, 37, 2, 20, 39, 2, 21, 41, 2, 22, 43, 2, 23, 45, 2, 24, 47, 2, 25, 49, 2, 26, 51, 2, 27, 53, 2, 28, 55, 2, 29, 57, 2, 30, 59, 2, 31, 61, 2, 32, 63, 2, 33, 65, 2, 34, 67, 2, 35, 69, 2, 36, 71, 2, 37, 73, 2, 38, 75, 2, 39, 77, 2, 40, 79, 2, 41, 81, 2, 42, 83, 2, 43, 85, 2, 44, 87, 2, 45, 89, 2, 46, 91, 2, 47, 93, 2, 48, 95, 2, 49, 97, 2, 50, 99, 2, 51, 101, 2, 52, 103, 2, 53, 105, 2, 54, 107, 2, 55, 109, 2, 56, 111, 2, 57, 113, 2, 58, 115, 2, 59, 117, 2, 60, 119, 2, 61, 121, 2, 62, 123, 2, 63, 125, 2, 64, 127, 2, 65, 129, 2, 66, 131, 2, 67, 133, 2, 68, 135, 2, 69, 137, 2, 70, 139, 2, 71, 141, 2, 72, 143, 2, 73, 145, 2, 74, 147, 2, 75, 149, 2, 76, 151, 2, 77, 153, 2, 78, 155, 2, 79, 157, 2, 80, 159, 2, 81, 161, 2, 82, 163, 2, 83, 165, 2, 84, 167, 2, 85, 169, 2, 86, 171, 2, 87, 173, 2, 88, 175, 2, 89, 177, 2, 90, 179, 2, 91, 181, 2, 92, 183, 2, 93, 185, 2, 94, 187, 2, 95, 189, 2, 96, 191, 2, 97, 193, 2, 98, 195, 2, 99, 197, 2, 100, 199, 2, 101, 201, 2, 102, 203, 2, 103, 205, 2, 104, 207, 2, 105, 209, 2, 106, 211, 2, 107, 213, 2, 108, 215, 2, 109, 217, 2, 110, 219, 2, 111, 221, 2, 112, 223, 2, 113, 225, 2, 114, 227, 2, 115, 229, 2, 116, 231, 2, 117, 233, 2, 118, 235, 2, 119, 237, 2, 120, 239, 2, 121, 241, 2, 122, 243, 2, 123, 245, 2, 124, 247, 2, 125, 249, 2, 126, 251, 2, 127, 253, 2, 128, 255, 2, 129, 257, 2, 130, 259, 2, 131, 261, 2, 132, 263, 2, 133, 265, 2, 134, 267, 2, 135, 269, 2, 136, 271, 2, 137, 273, 2, 138, 275, 2, 139, 277, 2, 140, 279, 2, 141, 281, 2, 142, 283, 2, 143, 285, 2, 144, 287, 2, 145, 289, 2, 146, 291, 2, 147, 293, 2, 148, 295, 2, 149, 297, 2, 150, 299, 2, 151, 301, 2, 152, 303, 2, 153, 305, 2, 154, 307, 2, 155, 309, 2, 156, 311, 2, 157, 313, 2, 158, 315, 2, 159, 317, 2, 160, 319, 2, 161, 321, 2, 162, 323, 2, 163, 325, 2, 164, 327, 2, 165, 329, 2, 166, 331, 2, 167, 333, 2, 168, 335, 2, 169, 337, 2, 170, 339, 2, 171, 341, 2, 172, 343, 2, 173, 345, 2, 174, 347, 2, 175, 349, 2, 176, 351, 2, 177, 353, 2, 178, 355, 2, 179, 357, 2, 180, 359, 2, 181, 361, 2, 182, 363, 2, 183, 365, 2, 184, 367, 2, 185, 369, 2, 186, 371, 2, 187, 373, 2, 188, 375, 2, 189, 377, 2, 190, 379, 2, 191, 381, 2, 192, 383, 2, 193, 385, 2, 194, 387, 2, 195, 389, 2, 196, 391, 2, 197, 393, 2, 198, 395, 2, 199, 397, 2, 200, 399, 2, 201, 401, 2, 202, 403, 2, 203, 405, 2, 204, 407, 2, 205, 409, 2, 206, 411, 2, 207, 413, 2, 208, 415, 2, 209, 417, 2, 210, 419, 2, 211, 421, 2, 212, 423, 2, 213, 425, 2, 214, 427, 2, 215, 429, 2, 216, 431, 2, 217, 433, 2, 218, 435, 2, 219, 437, 2, 220, 439, 2, 221, 441, 2, 222, 443, 2, 223, 445, 2, 224, 447, 2, 225, 449, 2, 226, 451, 2, 227, 453, 2, 228, 455, 2, 229, 457, 2, 230, 459, 2, 231, 461, 2, 232, 463, 2, 233, 465, 2, 234, 467, 2, 235, 469, 2, 236, 471, 2, 237, 473, 2, 238, 475, 2, 239, 477, 2, 240, 479, 2, 241, 481, 2, 242, 483, 2, 243, 485, 2, 244, 487, 2, 245, 489, 2, 246, 491, 2, 247, 493, 2, 248, 495, 2, 249, 497, 2, 250, 499, 2, 251, 501, 2, 252, 503, 2, 253, 505, 2, 254, 507, 2, 255, 509, 2, 256, 511, 2, 257, 513, 2, 258, 515, 2, 259, 517, 2, 260, 519, 2, 261, 521, 2, 262, 523, 2, 263, 525, 2, 264, 527, 2, 265, 529, 2, 266, 531, 2, 267, 533, 2, 268, 535, 2, 269, 537, 2, 270, 539, 2, 271, 541, 2, 272, 543, 2, 273, 545, 2, 274, 547, 2, 275, 549, 2, 276, 551, 2, 277, 553, 2, 278, 555, 2, 279, 557, 2, 280, 559, 2, 281, 561, 2, 282, 563, 2, 283, 565, 2, 284, 567, 2, 285, 569, 2, 286, 571, 2, 287, 573, 2, 288, 575, 2, 289, 577, 2, 290, 579, 2, 291, 581, 2, 292, 583, 2, 293, 585, 2, 294, 587, 2, 295, 589, 2, 296, 591, 2, 297, 593, 2, 298, 595, 2, 299, 597, 2, 300, 599, 2, 301, 601, 2, 302, 603, 2, 303, 605, 2, 304, 607, 2, 2, 609, 2, 2, 611, 2, 305, 613, 2, 306, 615, 2, 307, 617, 2, 308, 619, 2, 2, 621, 2, 309, 3, 2, 10, 3, 2, 47, 48, 4, 2, 44, 44, 50, 59, 4, 2, 44, 44, 66, 92, 7, 2, 44, 44, 47, 47, 50, 59, 67, 92, 97, 97, 4, 2, 36, 36, 94, 94, 4, 2, 41, 41, 94, 94, 4, 2, 94, 94, 98, 98, 3, 2, 50, 59, 2, 3144, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, 3, 2, 2, 2, 2, 165, 3, 2, 2, 2, 2, 167, 3, 2, 2, 2, 2, 169, 3, 2, 2, 2, 2, 171, 3, 2, 2, 2, 2, 173, 3, 2, 2, 2, 2, 175, 3, 2, 2, 2, 2, 177, 3, 2, 2, 2, 2, 179, 3, 2, 2, 2, 2, 181, 3, 2, 2, 2, 2, 183, 3, 2, 2, 2, 2, 185, 3, 2, 2, 2, 2, 187, 3, 2, 2, 2, 2, 189, 3, 2, 2, 2, 2, 191, 3, 2, 2, 2, 2, 193, 3, 2, 2, 2, 2, 195, 3, 2, 2, 2, 2, 197, 3, 2, 2, 2, 2, 199, 3, 2, 2, 2, 2, 201, 3, 2, 2, 2, 2, 203, 3, 2, 2, 2, 2, 205, 3, 2, 2, 2, 2, 207, 3, 2, 2, 2, 2, 209, 3, 2, 2, 2, 2, 211, 3, 2, 2, 2, 2, 213, 3, 2, 2, 2, 2, 215, 3, 2, 2, 2, 2, 217, 3, 2, 2, 2, 2, 219, 3, 2, 2, 2, 2, 221, 3, 2, 2, 2, 2, 223, 3, 2, 2, 2, 2, 225, 3, 2, 2, 2, 2, 227, 3, 2, 2, 2, 2, 229, 3, 2, 2, 2, 2, 231, 3, 2, 2, 2, 2, 233, 3, 2, 2, 2, 2, 235, 3, 2, 2, 2, 2, 237, 3, 2, 2, 2, 2, 239, 3, 2, 2, 2, 2, 241, 3, 2, 2, 2, 2, 243, 3, 2, 2, 2, 2, 245, 3, 2, 2, 2, 2, 247, 3, 2, 2, 2, 2, 249, 3, 2, 2, 2, 2, 251, 3, 2, 2, 2, 2, 253, 3, 2, 2, 2, 2, 255, 3, 2, 2, 2, 2, 257, 3, 2, 2, 2, 2, 259, 3, 2, 2, 2, 2, 261, 3, 2, 2, 2, 2, 263, 3, 2, 2, 2, 2, 265, 3, 2, 2, 2, 2, 267, 3, 2, 2, 2, 2, 269, 3, 2, 2, 2, 2, 271, 3, 2, 2, 2, 2, 273, 3, 2, 2, 2, 2, 275, 3, 2, 2, 2, 2, 277, 3, 2, 2, 2, 2, 279, 3, 2, 2, 2, 2, 281, 3, 2, 2, 2, 2, 283, 3, 2, 2, 2, 2, 285, 3, 2, 2, 2, 2, 287, 3, 2, 2, 2, 2, 289, 3, 2, 2, 2, 2, 291, 3, 2, 2, 2, 2, 293, 3, 2, 2, 2, 2, 295, 3, 2, 2, 2, 2, 297, 3, 2, 2, 2, 2, 299, 3, 2, 2, 2, 2, 301, 3, 2, 2, 2, 2, 303, 3, 2, 2, 2, 2, 305, 3, 2, 2, 2, 2, 307, 3, 2, 2, 2, 2, 309, 3, 2, 2, 2, 2, 311, 3, 2, 2, 2, 2, 313, 3, 2, 2, 2, 2, 315, 3, 2, 2, 2, 2, 317, 3, 2, 2, 2, 2, 319, 3, 2, 2, 2, 2, 321, 3, 2, 2, 2, 2, 323, 3, 2, 2, 2, 2, 325, 3, 2, 2, 2, 2, 327, 3, 2, 2, 2, 2, 329, 3, 2, 2, 2, 2, 331, 3, 2, 2, 2, 2, 333, 3, 2, 2, 2, 2, 335, 3, 2, 2, 2, 2, 337, 3, 2, 2, 2, 2, 339, 3, 2, 2, 2, 2, 341, 3, 2, 2, 2, 2, 343, 3, 2, 2, 2, 2, 345, 3, 2, 2, 2, 2, 347, 3, 2, 2, 2, 2, 349, 3, 2, 2, 2, 2, 351, 3, 2, 2, 2, 2, 353, 3, 2, 2, 2, 2, 355, 3, 2, 2, 2, 2, 357, 3, 2, 2, 2, 2, 359, 3, 2, 2, 2, 2, 361, 3, 2, 2, 2, 2, 363, 3, 2, 2, 2, 2, 365, 3, 2, 2, 2, 2, 367, 3, 2, 2, 2, 2, 369, 3, 2, 2, 2, 2, 371, 3, 2, 2, 2, 2, 373, 3, 2, 2, 2, 2, 375, 3, 2, 2, 2, 2, 377, 3, 2, 2, 2, 2, 379, 3, 2, 2, 2, 2, 381, 3, 2, 2, 2, 2, 383, 3, 2, 2, 2, 2, 385, 3, 2, 2, 2, 2, 387, 3, 2, 2, 2, 2, 389, 3, 2, 2, 2, 2, 391, 3, 2, 2, 2, 2, 393, 3, 2, 2, 2, 2, 395, 3, 2, 2, 2, 2, 397, 3, 2, 2, 2, 2, 399, 3, 2, 2, 2, 2, 401, 3, 2, 2, 2, 2, 403, 3, 2, 2, 2, 2, 405, 3, 2, 2, 2, 2, 407, 3, 2, 2, 2, 2, 409, 3, 2, 2, 2, 2, 411, 3, 2, 2, 2, 2, 413, 3, 2, 2, 2, 2, 415, 3, 2, 2, 2, 2, 417, 3, 2, 2, 2, 2, 419, 3, 2, 2, 2, 2, 421, 3, 2, 2, 2, 2, 423, 3, 2, 2, 2, 2, 425, 3, 2, 2, 2, 2, 427, 3, 2, 2, 2, 2, 429, 3, 2, 2, 2, 2, 431, 3, 2, 2, 2, 2, 433, 3, 2, 2, 2, 2, 435, 3, 2, 2, 2, 2, 437, 3, 2, 2, 2, 2, 439, 3, 2, 2, 2, 2, 441, 3, 2, 2, 2, 2, 443, 3, 2, 2, 2, 2, 445, 3, 2, 2, 2, 2, 447, 3, 2, 2, 2, 2, 449, 3, 2, 2, 2, 2, 451, 3, 2, 2, 2, 2, 453, 3, 2, 2, 2, 2, 455, 3, 2, 2, 2, 2, 457, 3, 2, 2, 2, 2, 459, 3, 2, 2, 2, 2, 461, 3, 2, 2, 2, 2, 463, 3, 2, 2, 2, 2, 465, 3, 2, 2, 2, 2, 467, 3, 2, 2, 2, 2, 469, 3, 2, 2, 2, 2, 471, 3, 2, 2, 2, 2, 473, 3, 2, 2, 2, 2, 475, 3, 2, 2, 2, 2, 477, 3, 2, 2, 2, 2, 479, 3, 2, 2, 2, 2, 481, 3, 2, 2, 2, 2, 483, 3, 2, 2, 2, 2, 485, 3, 2, 2, 2, 2, 487, 3, 2, 2, 2, 2, 489, 3, 2, 2, 2, 2, 491, 3, 2, 2, 2, 2, 493, 3, 2, 2, 2, 2, 495, 3, 2, 2, 2, 2, 497, 3, 2, 2, 2, 2, 499, 3, 2, 2, 2, 2, 501, 3, 2, 2, 2, 2, 503, 3, 2, 2, 2, 2, 505, 3, 2, 2, 2, 2, 507, 3, 2, 2, 2, 2, 509, 3, 2, 2, 2, 2, 511, 3, 2, 2, 2, 2, 513, 3, 2, 2, 2, 2, 515, 3, 2, 2, 2, 2, 517, 3, 2, 2, 2, 2, 519, 3, 2, 2, 2, 2, 521, 3, 2, 2, 2, 2, 523, 3, 2, 2, 2, 2, 525, 3, 2, 2, 2, 2, 527, 3, 2, 2, 2, 2, 529, 3, 2, 2, 2, 2, 531, 3, 2, 2, 2, 2, 533, 3, 2, 2, 2, 2, 535, 3, 2, 2, 2, 2, 537, 3, 2, 2, 2, 2, 539, 3, 2, 2, 2, 2, 541, 3, 2, 2, 2, 2, 543, 3, 2, 2, 2, 2, 545, 3, 2, 2, 2, 2, 547, 3, 2, 2, 2, 2, 549, 3, 2, 2, 2, 2, 551, 3, 2, 2, 2, 2, 553, 3, 2, 2, 2, 2, 555, 3, 2, 2, 2, 2, 557, 3, 2, 2, 2, 2, 559, 3, 2, 2, 2, 2, 561, 3, 2, 2, 2, 2, 563, 3, 2, 2, 2, 2, 565, 3, 2, 2, 2, 2, 567, 3, 2, 2, 2, 2, 569, 3, 2, 2, 2, 2, 571, 3, 2, 2, 2, 2, 573, 3, 2, 2, 2, 2, 575, 3, 2, 2, 2, 2, 577, 3, 2, 2, 2, 2, 579, 3, 2, 2, 2, 2, 581, 3, 2, 2, 2, 2, 583, 3, 2, 2, 2, 2, 585, 3, 2, 2, 2, 2, 587, 3, 2, 2, 2, 2, 589, 3, 2, 2, 2, 2, 591, 3, 2, 2, 2, 2, 593, 3, 2, 2, 2, 2, 595, 3, 2, 2, 2, 2, 597, 3, 2, 2, 2, 2, 599, 3, 2, 2, 2, 2, 601, 3, 2, 2, 2, 2, 603, 3, 2, 2, 2, 2, 605, 3, 2, 2, 2, 2, 611, 3, 2, 2, 2, 2, 613, 3, 2, 2, 2, 2, 615, 3, 2, 2, 2, 2, 617, 3, 2, 2, 2, 2, 621, 3, 2, 2, 2, 3, 623, 3, 2, 2, 2, 5, 630, 3, 2, 2, 2, 7, 639, 3, 2, 2, 2, 9, 644, 3, 2, 2, 2, 11, 649, 3, 2, 2, 2, 13, 655, 3, 2, 2, 2, 15, 662, 3, 2, 2, 2, 17, 669, 3, 2, 2, 2, 19, 675, 3, 2, 2, 2, 21, 681, 3, 2, 2, 2, 23, 686, 3, 2, 2, 2, 25, 691, 3, 2, 2, 2, 27, 696, 3, 2, 2, 2, 29, 700, 3, 2, 2, 2, 31, 705, 3, 2, 2, 2, 33, 711, 3, 2, 2, 2, 35, 718, 3, 2, 2, 2, 37, 724, 3, 2, 2, 2, 39, 730, 3, 2, 2, 2, 41, 735, 3, 2, 2, 2, 43, 743, 3, 2, 2, 2, 45, 752, 3, 2, 2, 2, 47, 762, 3, 2, 2, 2, 49, 769, 3, 2, 2, 2, 51, 772, 3, 2, 2, 2, 53, 775, 3, 2, 2, 2, 55, 778, 3, 2, 2, 2, 57, 781, 3, 2, 2, 2, 59, 788, 3, 2, 2, 2, 61, 794, 3, 2, 2, 2, 63, 796, 3, 2, 2, 2, 65, 801, 3, 2, 2, 2, 67, 810, 3, 2, 2, 2, 69, 817, 3, 2, 2, 2, 71, 822, 3, 2, 2, 2, 73, 826, 3, 2, 2, 2, 75, 829, 3, 2, 2, 2, 77, 833, 3, 2, 2, 2, 79, 843, 3, 2, 2, 2, 81, 855, 3, 2, 2, 2, 83, 873, 3, 2, 2, 2, 85, 884, 3, 2, 2, 2, 87, 891, 3, 2, 2, 2, 89, 897, 3, 2, 2, 2, 91, 907, 3, 2, 2, 2, 93, 918, 3, 2, 2, 2, 95, 932, 3, 2, 2, 2, 97, 948, 3, 2, 2, 2, 99, 961, 3, 2, 2, 2, 101, 973, 3, 2, 2, 2, 103, 986, 3, 2, 2, 2, 105, 997, 3, 2, 2, 2, 107, 1010, 3, 2, 2, 2, 109, 1025, 3, 2, 2, 2, 111, 1036, 3, 2, 2, 2, 113, 1046, 3, 2, 2, 2, 115, 1065, 3, 2, 2, 2, 117, 1089, 3, 2, 2, 2, 119, 1094, 3, 2, 2, 2, 121, 1097, 3, 2, 2, 2, 123, 1101, 3, 2, 2, 2, 125, 1104, 3, 2, 2, 2, 127, 1108, 3, 2, 2, 2, 129, 1112, 3, 2, 2, 2, 131, 1117, 3, 2, 2, 2, 133, 1123, 3, 2, 2, 2, 135, 1130, 3, 2, 2, 2, 137, 1139, 3, 2, 2, 2, 139, 1148, 3, 2, 2, 2, 141, 1160, 3, 2, 2, 2, 143, 1172, 3, 2, 2, 2, 145, 1179, 3, 2, 2, 2, 147, 1186, 3, 2, 2, 2, 149, 1191, 3, 2, 2, 2, 151, 1195, 3, 2, 2, 2, 153, 1200, 3, 2, 2, 2, 155, 1206, 3, 2, 2, 2, 157, 1214, 3, 2, 2, 2, 159, 1219, 3, 2, 2, 2, 161, 1238, 3, 2, 2, 2, 163, 1257, 3, 2, 2, 2, 165, 1271, 3, 2, 2, 2, 167, 1288, 3, 2, 2, 2, 169, 1300, 3, 2, 2, 2, 171, 1312, 3, 2, 2, 2, 173, 1328, 3, 2, 2, 2, 175, 1339, 3, 2, 2, 2, 177, 1350, 3, 2, 2, 2, 179, 1359, 3, 2, 2, 2, 181, 1370, 3, 2, 2, 2, 183, 1381, 3, 2, 2, 2, 185, 1391, 3, 2, 2, 2, 187, 1398, 3, 2, 2, 2, 189, 1410, 3, 2, 2, 2, 191, 1414, 3, 2, 2, 2, 193, 1422, 3, 2, 2, 2, 195, 1429, 3, 2, 2, 2, 197, 1434, 3, 2, 2, 2, 199, 1440, 3, 2, 2, 2, 201, 1447, 3, 2, 2, 2, 203, 1455, 3, 2, 2, 2, 205, 1457, 3, 2, 2, 2, 207, 1459, 3, 2, 2, 2, 209, 1461, 3, 2, 2, 2, 211, 1463, 3, 2, 2, 2, 213, 1465, 3, 2, 2, 2, 215, 1467, 3, 2, 2, 2, 217, 1470, 3, 2, 2, 2, 219, 1473, 3, 2, 2, 2, 221, 1476, 3, 2, 2, 2, 223, 1478, 3, 2, 2, 2, 225, 1480, 3, 2, 2, 2, 227, 1482, 3, 2, 2, 2, 229, 1484, 3, 2, 2, 2, 231, 1486, 3, 2, 2, 2, 233, 1488, 3, 2, 2, 2, 235, 1490, 3, 2, 2, 2, 237, 1492, 3, 2, 2, 2, 239, 1494, 3, 2, 2, 2, 241, 1496, 3, 2, 2, 2, 243, 1498, 3, 2, 2, 2, 245, 1500, 3, 2, 2, 2, 247, 1502, 3, 2, 2, 2, 249, 1504, 3, 2, 2, 2, 251, 1506, 3, 2, 2, 2, 253, 1508, 3, 2, 2, 2, 255, 1510, 3, 2, 2, 2, 257, 1514, 3, 2, 2, 2, 259, 1520, 3, 2, 2, 2, 261, 1535, 3, 2, 2, 2, 263, 1541, 3, 2, 2, 2, 265, 1553, 3, 2, 2, 2, 267, 1557, 3, 2, 2, 2, 269, 1562, 3, 2, 2, 2, 271, 1569, 3, 2, 2, 2, 273, 1573, 3, 2, 2, 2, 275, 1578, 3, 2, 2, 2, 277, 1584, 3, 2, 2, 2, 279, 1590, 3, 2, 2, 2, 281, 1597, 3, 2, 2, 2, 283, 1601, 3, 2, 2, 2, 285, 1607, 3, 2, 2, 2, 287, 1616, 3, 2, 2, 2, 289, 1624, 3, 2, 2, 2, 291, 1636, 3, 2, 2, 2, 293, 1647, 3, 2, 2, 2, 295, 1658, 3, 2, 2, 2, 297, 1663, 3, 2, 2, 2, 299, 1669, 3, 2, 2, 2, 301, 1674, 3, 2, 2, 2, 303, 1679, 3, 2, 2, 2, 305, 1686, 3, 2, 2, 2, 307, 1695, 3, 2, 2, 2, 309, 1709, 3, 2, 2, 2, 311, 1716, 3, 2, 2, 2, 313, 1728, 3, 2, 2, 2, 315, 1736, 3, 2, 2, 2, 317, 1745, 3, 2, 2, 2, 319, 1756, 3, 2, 2, 2, 321, 1767, 3, 2, 2, 2, 323, 1772, 3, 2, 2, 2, 325, 1782, 3, 2, 2, 2, 327, 1784, 3, 2, 2, 2, 329, 1787, 3, 2, 2, 2, 331, 1791, 3, 2, 2, 2, 333, 1796, 3, 2, 2, 2, 335, 1804, 3, 2, 2, 2, 337, 1809, 3, 2, 2, 2, 339, 1815, 3, 2, 2, 2, 341, 1817, 3, 2, 2, 2, 343, 1821, 3, 2, 2, 2, 345, 1827, 3, 2, 2, 2, 347, 1830, 3, 2, 2, 2, 349, 1834, 3, 2, 2, 2, 351, 1840, 3, 2, 2, 2, 353, 1845, 3, 2, 2, 2, 355, 1849, 3, 2, 2, 2, 357, 1852, 3, 2, 2, 2, 359, 1856, 3, 2, 2, 2, 361, 1862, 3, 2, 2, 2, 363, 1867, 3, 2, 2, 2, 365, 1873, 3, 2, 2, 2, 367, 1878, 3, 2, 2, 2, 369, 1883, 3, 2, 2, 2, 371, 1892, 3, 2, 2, 2, 373, 1897, 3, 2, 2, 2, 375, 1902, 3, 2, 2, 2, 377, 1907, 3, 2, 2, 2, 379, 1913, 3, 2, 2, 2, 381, 1917, 3, 2, 2, 2, 383, 1921, 3, 2, 2, 2, 385, 1929, 3, 2, 2, 2, 387, 1937, 3, 2, 2, 2, 389, 1941, 3, 2, 2, 2, 391, 1945, 3, 2, 2, 2, 393, 1953, 3, 2, 2, 2, 395, 1961, 3, 2, 2, 2, 397, 1974, 3, 2, 2, 2, 399, 1987, 3, 2, 2, 2, 401, 2005, 3, 2, 2, 2, 403, 2013, 3, 2, 2, 2, 405, 2018, 3, 2, 2, 2, 407, 2027, 3, 2, 2, 2, 409, 2039, 3, 2, 2, 2, 411, 2048, 3, 2, 2, 2, 413, 2056, 3, 2, 2, 2, 415, 2067, 3, 2, 2, 2, 417, 2077, 3, 2, 2, 2, 419, 2087, 3, 2, 2, 2, 421, 2097, 3, 2, 2, 2, 423, 2107, 3, 2, 2, 2, 425, 2122, 3, 2, 2, 2, 427, 2136, 3, 2, 2, 2, 429, 2145, 3, 2, 2, 2, 431, 2154, 3, 2, 2, 2, 433, 2164, 3, 2, 2, 2, 435, 2168, 3, 2, 2, 2, 437, 2179, 3, 2, 2, 2, 439, 2191, 3, 2, 2, 2, 441, 2199, 3, 2, 2, 2, 443, 2207, 3, 2, 2, 2, 445, 2212, 3, 2, 2, 2, 447, 2224, 3, 2, 2, 2, 449, 2234, 3, 2, 2, 2, 451, 2242, 3, 2, 2, 2, 453, 2251, 3, 2, 2, 2, 455, 2260, 3, 2, 2, 2, 457, 2274, 3, 2, 2, 2, 459, 2289, 3, 2, 2, 2, 461, 2296, 3, 2, 2, 2, 463, 2306, 3, 2, 2, 2, 465, 2312, 3, 2, 2, 2, 467, 2318, 3, 2, 2, 2, 469, 2323, 3, 2, 2, 2, 471, 2326, 3, 2, 2, 2, 473, 2332, 3, 2, 2, 2, 475, 2338, 3, 2, 2, 2, 477, 2345, 3, 2, 2, 2, 479, 2355, 3, 2, 2, 2, 481, 2362, 3, 2, 2, 2, 483, 2369, 3, 2, 2, 2, 485, 2375, 3, 2, 2, 2, 487, 2380, 3, 2, 2, 2, 489, 2386, 3, 2, 2, 2, 491, 2393, 3, 2, 2, 2, 493, 2401, 3, 2, 2, 2, 495, 2406, 3, 2, 2, 2, 497, 2411, 3, 2, 2, 2, 499, 2418, 3, 2, 2, 2, 501, 2428, 3, 2, 2, 2, 503, 2435, 3, 2, 2, 2, 505, 2442, 3, 2, 2, 2, 507, 2445, 3, 2, 2, 2, 509, 2452, 3, 2, 2, 2, 511, 2458, 3, 2, 2, 2, 513, 2471, 3, 2, 2, 2, 515, 2491, 3, 2, 2, 2, 517, 2509, 3, 2, 2, 2, 519, 2529, 3, 2, 2, 2, 521, 2541, 3, 2, 2, 2, 523, 2554, 3, 2, 2, 2, 525, 2577, 3, 2, 2, 2, 527, 2594, 3, 2, 2, 2, 529, 2603, 3, 2, 2, 2, 531, 2639, 3, 2, 2, 2, 533, 2645, 3, 2, 2, 2, 535, 2662, 3, 2, 2, 2, 537, 2676, 3, 2, 2, 2, 539, 2693, 3, 2, 2, 2, 541, 2720, 3, 2, 2, 2, 543, 2727, 3, 2, 2, 2, 545, 2733, 3, 2, 2, 2, 547, 2754, 3, 2, 2, 2, 549, 2774, 3, 2, 2, 2, 551, 2795, 3, 2, 2, 2, 553, 2809, 3, 2, 2, 2, 555, 2819, 3, 2, 2, 2, 557, 2827, 3, 2, 2, 2, 559, 2845, 3, 2, 2, 2, 561, 2869, 3, 2, 2, 2, 563, 2884, 3, 2, 2, 2, 565, 2905, 3, 2, 2, 2, 567, 2914, 3, 2, 2, 2, 569, 2926, 3, 2, 2, 2, 571, 2940, 3, 2, 2, 2, 573, 2955, 3, 2, 2, 2, 575, 2974, 3, 2, 2, 2, 577, 2982, 3, 2, 2, 2, 579, 2987, 3, 2, 2, 2, 581, 2999, 3, 2, 2, 2, 583, 3004, 3, 2, 2, 2, 585, 3021, 3, 2, 2, 2, 587, 3026, 3, 2, 2, 2, 589, 3029, 3, 2, 2, 2, 591, 3031, 3, 2, 2, 2, 593, 3033, 3, 2, 2, 2, 595, 3035, 3, 2, 2, 2, 597, 3037, 3, 2, 2, 2, 599, 3039, 3, 2, 2, 2, 601, 3041, 3, 2, 2, 2, 603, 3044, 3, 2, 2, 2, 605, 3053, 3, 2, 2, 2, 607, 3069, 3, 2, 2, 2, 609, 3073, 3, 2, 2, 2, 611, 3083, 3, 2, 2, 2, 613, 3086, 3, 2, 2, 2, 615, 3099, 3, 2, 2, 2, 617, 3112, 3, 2, 2, 2, 619, 3125, 3, 2, 2, 2, 621, 3127, 3, 2, 2, 2, 623, 624, 7, 85, 2, 2, 624, 625, 7, 71, 2, 2, 625, 626, 7, 67, 2, 2, 626, 627, 7, 84, 2, 2, 627, 628, 7, 69, 2, 2, 628, 629, 7, 74, 2, 2, 629, 4, 3, 2, 2, 2, 630, 631, 7, 70, 2, 2, 631, 632, 7, 71, 2, 2, 632, 633, 7, 85, 2, 2, 633, 634, 7, 69, 2, 2, 634, 635, 7, 84, 2, 2, 635, 636, 7, 75, 2, 2, 636, 637, 7, 68, 2, 2, 637, 638, 7, 71, 2, 2, 638, 6, 3, 2, 2, 2, 639, 640, 7, 85, 2, 2, 640, 641, 7, 74, 2, 2, 641, 642, 7, 81, 2, 2, 642, 643, 7, 89, 2, 2, 643, 8, 3, 2, 2, 2, 644, 645, 7, 72, 2, 2, 645, 646, 7, 84, 2, 2, 646, 647, 7, 81, 2, 2, 647, 648, 7, 79, 2, 2, 648, 10, 3, 2, 2, 2, 649, 650, 7, 89, 2, 2, 650, 651, 7, 74, 2, 2, 651, 652, 7, 71, 2, 2, 652, 653, 7, 84, 2, 2, 653, 654, 7, 71, 2, 2, 654, 12, 3, 2, 2, 2, 655, 656, 7, 72, 2, 2, 656, 657, 7, 75, 2, 2, 657, 658, 7, 71, 2, 2, 658, 659, 7, 78, 2, 2, 659, 660, 7, 70, 2, 2, 660, 661, 7, 85, 2, 2, 661, 14, 3, 2, 2, 2, 662, 663, 7, 84, 2, 2, 663, 664, 7, 71, 2, 2, 664, 665, 7, 80, 2, 2, 665, 666, 7, 67, 2, 2, 666, 667, 7, 79, 2, 2, 667, 668, 7, 71, 2, 2, 668, 16, 3, 2, 2, 2, 669, 670, 7, 85, 2, 2, 670, 671, 7, 86, 2, 2, 671, 672, 7, 67, 2, 2, 672, 673, 7, 86, 2, 2, 673, 674, 7, 85, 2, 2, 674, 18, 3, 2, 2, 2, 675, 676, 7, 70, 2, 2, 676, 677, 7, 71, 2, 2, 677, 678, 7, 70, 2, 2, 678, 679, 7, 87, 2, 2, 679, 680, 7, 82, 2, 2, 680, 20, 3, 2, 2, 2, 681, 682, 7, 85, 2, 2, 682, 683, 7, 81, 2, 2, 683, 684, 7, 84, 2, 2, 684, 685, 7, 86, 2, 2, 685, 22, 3, 2, 2, 2, 686, 687, 7, 71, 2, 2, 687, 688, 7, 88, 2, 2, 688, 689, 7, 67, 2, 2, 689, 690, 7, 78, 2, 2, 690, 24, 3, 2, 2, 2, 691, 692, 7, 74, 2, 2, 692, 693, 7, 71, 2, 2, 693, 694, 7, 67, 2, 2, 694, 695, 7, 70, 2, 2, 695, 26, 3, 2, 2, 2, 696, 697, 7, 86, 2, 2, 697, 698, 7, 81, 2, 2, 698, 699, 7, 82, 2, 2, 699, 28, 3, 2, 2, 2, 700, 701, 7, 84, 2, 2, 701, 702, 7, 67, 2, 2, 702, 703, 7, 84, 2, 2, 703, 704, 7, 71, 2, 2, 704, 30, 3, 2, 2, 2, 705, 706, 7, 82, 2, 2, 706, 707, 7, 67, 2, 2, 707, 708, 7, 84, 2, 2, 708, 709, 7, 85, 2, 2, 709, 710, 7, 71, 2, 2, 710, 32, 3, 2, 2, 2, 711, 712, 7, 79, 2, 2, 712, 713, 7, 71, 2, 2, 713, 714, 7, 86, 2, 2, 714, 715, 7, 74, 2, 2, 715, 716, 7, 81, 2, 2, 716, 717, 7, 70, 2, 2, 717, 34, 3, 2, 2, 2, 718, 719, 7, 84, 2, 2, 719, 720, 7, 71, 2, 2, 720, 721, 7, 73, 2, 2, 721, 722, 7, 71, 2, 2, 722, 723, 7, 90, 2, 2, 723, 36, 3, 2, 2, 2, 724, 725, 7, 82, 2, 2, 725, 726, 7, 87, 2, 2, 726, 727, 7, 80, 2, 2, 727, 728, 7, 69, 2, 2, 728, 729, 7, 86, 2, 2, 729, 38, 3, 2, 2, 2, 730, 731, 7, 73, 2, 2, 731, 732, 7, 84, 2, 2, 732, 733, 7, 81, 2, 2, 733, 734, 7, 77, 2, 2, 734, 40, 3, 2, 2, 2, 735, 736, 7, 82, 2, 2, 736, 737, 7, 67, 2, 2, 737, 738, 7, 86, 2, 2, 738, 739, 7, 86, 2, 2, 739, 740, 7, 71, 2, 2, 740, 741, 7, 84, 2, 2, 741, 742, 7, 80, 2, 2, 742, 42, 3, 2, 2, 2, 743, 744, 7, 82, 2, 2, 744, 745, 7, 67, 2, 2, 745, 746, 7, 86, 2, 2, 746, 747, 7, 86, 2, 2, 747, 748, 7, 71, 2, 2, 748, 749, 7, 84, 2, 2, 749, 750, 7, 80, 2, 2, 750, 751, 7, 85, 2, 2, 751, 44, 3, 2, 2, 2, 752, 753, 7, 80, 2, 2, 753, 754, 7, 71, 2, 2, 754, 755, 7, 89, 2, 2, 755, 756, 7, 97, 2, 2, 756, 757, 7, 72, 2, 2, 757, 758, 7, 75, 2, 2, 758, 759, 7, 71, 2, 2, 759, 760, 7, 78, 2, 2, 760, 761, 7, 70, 2, 2, 761, 46, 3, 2, 2, 2, 762, 763, 7, 77, 2, 2, 763, 764, 7, 79, 2, 2, 764, 765, 7, 71, 2, 2, 765, 766, 7, 67, 2, 2, 766, 767, 7, 80, 2, 2, 767, 768, 7, 85, 2, 2, 768, 48, 3, 2, 2, 2, 769, 770, 7, 67, 2, 2, 770, 771, 7, 70, 2, 2, 771, 50, 3, 2, 2, 2, 772, 773, 7, 79, 2, 2, 773, 774, 7, 78, 2, 2, 774, 52, 3, 2, 2, 2, 775, 776, 7, 67, 2, 2, 776, 777, 7, 85, 2, 2, 777, 54, 3, 2, 2, 2, 778, 779, 7, 68, 2, 2, 779, 780, 7, 91, 2, 2, 780, 56, 3, 2, 2, 2, 781, 782, 7, 85, 2, 2, 782, 783, 7, 81, 2, 2, 783, 784, 7, 87, 2, 2, 784, 785, 7, 84, 2, 2, 785, 786, 7, 69, 2, 2, 786, 787, 7, 71, 2, 2, 787, 58, 3, 2, 2, 2, 788, 789, 7, 75, 2, 2, 789, 790, 7, 80, 2, 2, 790, 791, 7, 70, 2, 2, 791, 792, 7, 71, 2, 2, 792, 793, 7, 90, 2, 2, 793, 60, 3, 2, 2, 2, 794, 795, 7, 70, 2, 2, 795, 62, 3, 2, 2, 2, 796, 797, 7, 70, 2, 2, 797, 798, 7, 71, 2, 2, 798, 799, 7, 85, 2, 2, 799, 800, 7, 69, 2, 2, 800, 64, 3, 2, 2, 2, 801, 802, 7, 69, 2, 2, 802, 803, 7, 67, 2, 2, 803, 804, 7, 86, 2, 2, 804, 805, 7, 67, 2, 2, 805, 806, 7, 78, 2, 2, 806, 807, 7, 81, 2, 2, 807, 808, 7, 73, 2, 2, 808, 809, 7, 85, 2, 2, 809, 66, 3, 2, 2, 2, 810, 811, 7, 85, 2, 2, 811, 812, 7, 81, 2, 2, 812, 813, 7, 84, 2, 2, 813, 814, 7, 86, 2, 2, 814, 815, 7, 68, 2, 2, 815, 816, 7, 91, 2, 2, 816, 68, 3, 2, 2, 2, 817, 818, 7, 67, 2, 2, 818, 819, 7, 87, 2, 2, 819, 820, 7, 86, 2, 2, 820, 821, 7, 81, 2, 2, 821, 70, 3, 2, 2, 2, 822, 823, 7, 85, 2, 2, 823, 824, 7, 86, 2, 2, 824, 825, 7, 84, 2, 2, 825, 72, 3, 2, 2, 2, 826, 827, 7, 75, 2, 2, 827, 828, 7, 82, 2, 2, 828, 74, 3, 2, 2, 2, 829, 830, 7, 80, 2, 2, 830, 831, 7, 87, 2, 2, 831, 832, 7, 79, 2, 2, 832, 76, 3, 2, 2, 2, 833, 834, 7, 77, 2, 2, 834, 835, 7, 71, 2, 2, 835, 836, 7, 71, 2, 2, 836, 837, 7, 82, 2, 2, 837, 838, 7, 71, 2, 2, 838, 839, 7, 79, 2, 2, 839, 840, 7, 82, 2, 2, 840, 841, 7, 86, 2, 2, 841, 842, 7, 91, 2, 2, 842, 78, 3, 2, 2, 2, 843, 844, 7, 69, 2, 2, 844, 845, 7, 81, 2, 2, 845, 846, 7, 80, 2, 2, 846, 847, 7, 85, 2, 2, 847, 848, 7, 71, 2, 2, 848, 849, 7, 69, 2, 2, 849, 850, 7, 87, 2, 2, 850, 851, 7, 86, 2, 2, 851, 852, 7, 75, 2, 2, 852, 853, 7, 88, 2, 2, 853, 854, 7, 71, 2, 2, 854, 80, 3, 2, 2, 2, 855, 856, 7, 70, 2, 2, 856, 857, 7, 71, 2, 2, 857, 858, 7, 70, 2, 2, 858, 859, 7, 87, 2, 2, 859, 860, 7, 82, 2, 2, 860, 861, 7, 97, 2, 2, 861, 862, 7, 85, 2, 2, 862, 863, 7, 82, 2, 2, 863, 864, 7, 78, 2, 2, 864, 865, 7, 75, 2, 2, 865, 866, 7, 86, 2, 2, 866, 867, 7, 88, 2, 2, 867, 868, 7, 67, 2, 2, 868, 869, 7, 78, 2, 2, 869, 870, 7, 87, 2, 2, 870, 871, 7, 71, 2, 2, 871, 872, 7, 85, 2, 2, 872, 82, 3, 2, 2, 2, 873, 874, 7, 82, 2, 2, 874, 875, 7, 67, 2, 2, 875, 876, 7, 84, 2, 2, 876, 877, 7, 86, 2, 2, 877, 878, 7, 75, 2, 2, 878, 879, 7, 86, 2, 2, 879, 880, 7, 75, 2, 2, 880, 881, 7, 81, 2, 2, 881, 882, 7, 80, 2, 2, 882, 883, 7, 85, 2, 2, 883, 84, 3, 2, 2, 2, 884, 885, 7, 67, 2, 2, 885, 886, 7, 78, 2, 2, 886, 887, 7, 78, 2, 2, 887, 888, 7, 80, 2, 2, 888, 889, 7, 87, 2, 2, 889, 890, 7, 79, 2, 2, 890, 86, 3, 2, 2, 2, 891, 892, 7, 70, 2, 2, 892, 893, 7, 71, 2, 2, 893, 894, 7, 78, 2, 2, 894, 895, 7, 75, 2, 2, 895, 896, 7, 79, 2, 2, 896, 88, 3, 2, 2, 2, 897, 898, 7, 69, 2, 2, 898, 899, 7, 71, 2, 2, 899, 900, 7, 80, 2, 2, 900, 901, 7, 86, 2, 2, 901, 902, 7, 84, 2, 2, 902, 903, 7, 81, 2, 2, 903, 904, 7, 75, 2, 2, 904, 905, 7, 70, 2, 2, 905, 906, 7, 85, 2, 2, 906, 90, 3, 2, 2, 2, 907, 908, 7, 75, 2, 2, 908, 909, 7, 86, 2, 2, 909, 910, 7, 71, 2, 2, 910, 911, 7, 84, 2, 2, 911, 912, 7, 67, 2, 2, 912, 913, 7, 86, 2, 2, 913, 914, 7, 75, 2, 2, 914, 915, 7, 81, 2, 2, 915, 916, 7, 80, 2, 2, 916, 917, 7, 85, 2, 2, 917, 92, 3, 2, 2, 2, 918, 919, 7, 70, 2, 2, 919, 920, 7, 75, 2, 2, 920, 921, 7, 85, 2, 2, 921, 922, 7, 86, 2, 2, 922, 923, 7, 67, 2, 2, 923, 924, 7, 80, 2, 2, 924, 925, 7, 69, 2, 2, 925, 926, 7, 71, 2, 2, 926, 927, 7, 97, 2, 2, 927, 928, 7, 86, 2, 2, 928, 929, 7, 91, 2, 2, 929, 930, 7, 82, 2, 2, 930, 931, 7, 71, 2, 2, 931, 94, 3, 2, 2, 2, 932, 933, 7, 80, 2, 2, 933, 934, 7, 87, 2, 2, 934, 935, 7, 79, 2, 2, 935, 936, 7, 68, 2, 2, 936, 937, 7, 71, 2, 2, 937, 938, 7, 84, 2, 2, 938, 939, 7, 97, 2, 2, 939, 940, 7, 81, 2, 2, 940, 941, 7, 72, 2, 2, 941, 942, 7, 97, 2, 2, 942, 943, 7, 86, 2, 2, 943, 944, 7, 84, 2, 2, 944, 945, 7, 71, 2, 2, 945, 946, 7, 71, 2, 2, 946, 947, 7, 85, 2, 2, 947, 96, 3, 2, 2, 2, 948, 949, 7, 85, 2, 2, 949, 950, 7, 74, 2, 2, 950, 951, 7, 75, 2, 2, 951, 952, 7, 80, 2, 2, 952, 953, 7, 73, 2, 2, 953, 954, 7, 78, 2, 2, 954, 955, 7, 71, 2, 2, 955, 956, 7, 97, 2, 2, 956, 957, 7, 85, 2, 2, 957, 958, 7, 75, 2, 2, 958, 959, 7, 92, 2, 2, 959, 960, 7, 71, 2, 2, 960, 98, 3, 2, 2, 2, 961, 962, 7, 85, 2, 2, 962, 963, 7, 67, 2, 2, 963, 964, 7, 79, 2, 2, 964, 965, 7, 82, 2, 2, 965, 966, 7, 78, 2, 2, 966, 967, 7, 71, 2, 2, 967, 968, 7, 97, 2, 2, 968, 969, 7, 85, 2, 2, 969, 970, 7, 75, 2, 2, 970, 971, 7, 92, 2, 2, 971, 972, 7, 71, 2, 2, 972, 100, 3, 2, 2, 2, 973, 974, 7, 81, 2, 2, 974, 975, 7, 87, 2, 2, 975, 976, 7, 86, 2, 2, 976, 977, 7, 82, 2, 2, 977, 978, 7, 87, 2, 2, 978, 979, 7, 86, 2, 2, 979, 980, 7, 97, 2, 2, 980, 981, 7, 67, 2, 2, 981, 982, 7, 72, 2, 2, 982, 983, 7, 86, 2, 2, 983, 984, 7, 71, 2, 2, 984, 985, 7, 84, 2, 2, 985, 102, 3, 2, 2, 2, 986, 987, 7, 86, 2, 2, 987, 988, 7, 75, 2, 2, 988, 989, 7, 79, 2, 2, 989, 990, 7, 71, 2, 2, 990, 991, 7, 97, 2, 2, 991, 992, 7, 70, 2, 2, 992, 993, 7, 71, 2, 2, 993, 994, 7, 69, 2, 2, 994, 995, 7, 67, 2, 2, 995, 996, 7, 91, 2, 2, 996, 104, 3, 2, 2, 2, 997, 998, 7, 67, 2, 2, 998, 999, 7, 80, 2, 2, 999, 1000, 7, 81, 2, 2, 1000, 1001, 7, 79, 2, 2, 1001, 1002, 7, 67, 2, 2, 1002, 1003, 7, 78, 2, 2, 1003, 1004, 7, 91, 2, 2, 1004, 1005, 7, 97, 2, 2, 1005, 1006, 7, 84, 2, 2, 1006, 1007, 7, 67, 2, 2, 1007, 1008, 7, 86, 2, 2, 1008, 1009, 7, 71, 2, 2, 1009, 106, 3, 2, 2, 2, 1010, 1011, 7, 69, 2, 2, 1011, 1012, 7, 67, 2, 2, 1012, 1013, 7, 86, 2, 2, 1013, 1014, 7, 71, 2, 2, 1014, 1015, 7, 73, 2, 2, 1015, 1016, 7, 81, 2, 2, 1016, 1017, 7, 84, 2, 2, 1017, 1018, 7, 91, 2, 2, 1018, 1019, 7, 97, 2, 2, 1019, 1020, 7, 72, 2, 2, 1020, 1021, 7, 75, 2, 2, 1021, 1022, 7, 71, 2, 2, 1022, 1023, 7, 78, 2, 2, 1023, 1024, 7, 70, 2, 2, 1024, 108, 3, 2, 2, 2, 1025, 1026, 7, 86, 2, 2, 1026, 1027, 7, 75, 2, 2, 1027, 1028, 7, 79, 2, 2, 1028, 1029, 7, 71, 2, 2, 1029, 1030, 7, 97, 2, 2, 1030, 1031, 7, 72, 2, 2, 1031, 1032, 7, 75, 2, 2, 1032, 1033, 7, 71, 2, 2, 1033, 1034, 7, 78, 2, 2, 1034, 1035, 7, 70, 2, 2, 1035, 110, 3, 2, 2, 2, 1036, 1037, 7, 86, 2, 2, 1037, 1038, 7, 75, 2, 2, 1038, 1039, 7, 79, 2, 2, 1039, 1040, 7, 71, 2, 2, 1040, 1041, 7, 97, 2, 2, 1041, 1042, 7, 92, 2, 2, 1042, 1043, 7, 81, 2, 2, 1043, 1044, 7, 80, 2, 2, 1044, 1045, 7, 71, 2, 2, 1045, 112, 3, 2, 2, 2, 1046, 1047, 7, 86, 2, 2, 1047, 1048, 7, 84, 2, 2, 1048, 1049, 7, 67, 2, 2, 1049, 1050, 7, 75, 2, 2, 1050, 1051, 7, 80, 2, 2, 1051, 1052, 7, 75, 2, 2, 1052, 1053, 7, 80, 2, 2, 1053, 1054, 7, 73, 2, 2, 1054, 1055, 7, 97, 2, 2, 1055, 1056, 7, 70, 2, 2, 1056, 1057, 7, 67, 2, 2, 1057, 1058, 7, 86, 2, 2, 1058, 1059, 7, 67, 2, 2, 1059, 1060, 7, 97, 2, 2, 1060, 1061, 7, 85, 2, 2, 1061, 1062, 7, 75, 2, 2, 1062, 1063, 7, 92, 2, 2, 1063, 1064, 7, 71, 2, 2, 1064, 114, 3, 2, 2, 2, 1065, 1066, 7, 67, 2, 2, 1066, 1067, 7, 80, 2, 2, 1067, 1068, 7, 81, 2, 2, 1068, 1069, 7, 79, 2, 2, 1069, 1070, 7, 67, 2, 2, 1070, 1071, 7, 78, 2, 2, 1071, 1072, 7, 91, 2, 2, 1072, 1073, 7, 97, 2, 2, 1073, 1074, 7, 85, 2, 2, 1074, 1075, 7, 69, 2, 2, 1075, 1076, 7, 81, 2, 2, 1076, 1077, 7, 84, 2, 2, 1077, 1078, 7, 71, 2, 2, 1078, 1079, 7, 97, 2, 2, 1079, 1080, 7, 86, 2, 2, 1080, 1081, 7, 74, 2, 2, 1081, 1082, 7, 84, 2, 2, 1082, 1083, 7, 71, 2, 2, 1083, 1084, 7, 85, 2, 2, 1084, 1085, 7, 74, 2, 2, 1085, 1086, 7, 81, 2, 2, 1086, 1087, 7, 78, 2, 2, 1087, 1088, 7, 70, 2, 2, 1088, 116, 3, 2, 2, 2, 1089, 1090, 7, 69, 2, 2, 1090, 1091, 7, 67, 2, 2, 1091, 1092, 7, 85, 2, 2, 1092, 1093, 7, 71, 2, 2, 1093, 118, 3, 2, 2, 2, 1094, 1095, 7, 75, 2, 2, 1095, 1096, 7, 80, 2, 2, 1096, 120, 3, 2, 2, 2, 1097, 1098, 7, 80, 2, 2, 1098, 1099, 7, 81, 2, 2, 1099, 1100, 7, 86, 2, 2, 1100, 122, 3, 2, 2, 2, 1101, 1102, 7, 81, 2, 2, 1102, 1103, 7, 84, 2, 2, 1103, 124, 3, 2, 2, 2, 1104, 1105, 7, 67, 2, 2, 1105, 1106, 7, 80, 2, 2, 1106, 1107, 7, 70, 2, 2, 1107, 126, 3, 2, 2, 2, 1108, 1109, 7, 90, 2, 2, 1109, 1110, 7, 81, 2, 2, 1110, 1111, 7, 84, 2, 2, 1111, 128, 3, 2, 2, 2, 1112, 1113, 7, 86, 2, 2, 1113, 1114, 7, 84, 2, 2, 1114, 1115, 7, 87, 2, 2, 1115, 1116, 7, 71, 2, 2, 1116, 130, 3, 2, 2, 2, 1117, 1118, 7, 72, 2, 2, 1118, 1119, 7, 67, 2, 2, 1119, 1120, 7, 78, 2, 2, 1120, 1121, 7, 85, 2, 2, 1121, 1122, 7, 71, 2, 2, 1122, 132, 3, 2, 2, 2, 1123, 1124, 7, 84, 2, 2, 1124, 1125, 7, 71, 2, 2, 1125, 1126, 7, 73, 2, 2, 1126, 1127, 7, 71, 2, 2, 1127, 1128, 7, 90, 2, 2, 1128, 1129, 7, 82, 2, 2, 1129, 134, 3, 2, 2, 2, 1130, 1131, 7, 70, 2, 2, 1131, 1132, 7, 67, 2, 2, 1132, 1133, 7, 86, 2, 2, 1133, 1134, 7, 71, 2, 2, 1134, 1135, 7, 86, 2, 2, 1135, 1136, 7, 75, 2, 2, 1136, 1137, 7, 79, 2, 2, 1137, 1138, 7, 71, 2, 2, 1138, 136, 3, 2, 2, 2, 1139, 1140, 7, 75, 2, 2, 1140, 1141, 7, 80, 2, 2, 1141, 1142, 7, 86, 2, 2, 1142, 1143, 7, 71, 2, 2, 1143, 1144, 7, 84, 2, 2, 1144, 1145, 7, 88, 2, 2, 1145, 1146, 7, 67, 2, 2, 1146, 1147, 7, 78, 2, 2, 1147, 138, 3, 2, 2, 2, 1148, 1149, 7, 79, 2, 2, 1149, 1150, 7, 75, 2, 2, 1150, 1151, 7, 69, 2, 2, 1151, 1152, 7, 84, 2, 2, 1152, 1153, 7, 81, 2, 2, 1153, 1154, 7, 85, 2, 2, 1154, 1155, 7, 71, 2, 2, 1155, 1156, 7, 69, 2, 2, 1156, 1157, 7, 81, 2, 2, 1157, 1158, 7, 80, 2, 2, 1158, 1159, 7, 70, 2, 2, 1159, 140, 3, 2, 2, 2, 1160, 1161, 7, 79, 2, 2, 1161, 1162, 7, 75, 2, 2, 1162, 1163, 7, 78, 2, 2, 1163, 1164, 7, 78, 2, 2, 1164, 1165, 7, 75, 2, 2, 1165, 1166, 7, 85, 2, 2, 1166, 1167, 7, 71, 2, 2, 1167, 1168, 7, 69, 2, 2, 1168, 1169, 7, 81, 2, 2, 1169, 1170, 7, 80, 2, 2, 1170, 1171, 7, 70, 2, 2, 1171, 142, 3, 2, 2, 2, 1172, 1173, 7, 85, 2, 2, 1173, 1174, 7, 71, 2, 2, 1174, 1175, 7, 69, 2, 2, 1175, 1176, 7, 81, 2, 2, 1176, 1177, 7, 80, 2, 2, 1177, 1178, 7, 70, 2, 2, 1178, 144, 3, 2, 2, 2, 1179, 1180, 7, 79, 2, 2, 1180, 1181, 7, 75, 2, 2, 1181, 1182, 7, 80, 2, 2, 1182, 1183, 7, 87, 2, 2, 1183, 1184, 7, 86, 2, 2, 1184, 1185, 7, 71, 2, 2, 1185, 146, 3, 2, 2, 2, 1186, 1187, 7, 74, 2, 2, 1187, 1188, 7, 81, 2, 2, 1188, 1189, 7, 87, 2, 2, 1189, 1190, 7, 84, 2, 2, 1190, 148, 3, 2, 2, 2, 1191, 1192, 7, 70, 2, 2, 1192, 1193, 7, 67, 2, 2, 1193, 1194, 7, 91, 2, 2, 1194, 150, 3, 2, 2, 2, 1195, 1196, 7, 89, 2, 2, 1196, 1197, 7, 71, 2, 2, 1197, 1198, 7, 71, 2, 2, 1198, 1199, 7, 77, 2, 2, 1199, 152, 3, 2, 2, 2, 1200, 1201, 7, 79, 2, 2, 1201, 1202, 7, 81, 2, 2, 1202, 1203, 7, 80, 2, 2, 1203, 1204, 7, 86, 2, 2, 1204, 1205, 7, 74, 2, 2, 1205, 154, 3, 2, 2, 2, 1206, 1207, 7, 83, 2, 2, 1207, 1208, 7, 87, 2, 2, 1208, 1209, 7, 67, 2, 2, 1209, 1210, 7, 84, 2, 2, 1210, 1211, 7, 86, 2, 2, 1211, 1212, 7, 71, 2, 2, 1212, 1213, 7, 84, 2, 2, 1213, 156, 3, 2, 2, 2, 1214, 1215, 7, 91, 2, 2, 1215, 1216, 7, 71, 2, 2, 1216, 1217, 7, 67, 2, 2, 1217, 1218, 7, 84, 2, 2, 1218, 158, 3, 2, 2, 2, 1219, 1220, 7, 85, 2, 2, 1220, 1221, 7, 71, 2, 2, 1221, 1222, 7, 69, 2, 2, 1222, 1223, 7, 81, 2, 2, 1223, 1224, 7, 80, 2, 2, 1224, 1225, 7, 70, 2, 2, 1225, 1226, 7, 97, 2, 2, 1226, 1227, 7, 79, 2, 2, 1227, 1228, 7, 75, 2, 2, 1228, 1229, 7, 69, 2, 2, 1229, 1230, 7, 84, 2, 2, 1230, 1231, 7, 81, 2, 2, 1231, 1232, 7, 85, 2, 2, 1232, 1233, 7, 71, 2, 2, 1233, 1234, 7, 69, 2, 2, 1234, 1235, 7, 81, 2, 2, 1235, 1236, 7, 80, 2, 2, 1236, 1237, 7, 70, 2, 2, 1237, 160, 3, 2, 2, 2, 1238, 1239, 7, 79, 2, 2, 1239, 1240, 7, 75, 2, 2, 1240, 1241, 7, 80, 2, 2, 1241, 1242, 7, 87, 2, 2, 1242, 1243, 7, 86, 2, 2, 1243, 1244, 7, 71, 2, 2, 1244, 1245, 7, 97, 2, 2, 1245, 1246, 7, 79, 2, 2, 1246, 1247, 7, 75, 2, 2, 1247, 1248, 7, 69, 2, 2, 1248, 1249, 7, 84, 2, 2, 1249, 1250, 7, 81, 2, 2, 1250, 1251, 7, 85, 2, 2, 1251, 1252, 7, 71, 2, 2, 1252, 1253, 7, 69, 2, 2, 1253, 1254, 7, 81, 2, 2, 1254, 1255, 7, 80, 2, 2, 1255, 1256, 7, 70, 2, 2, 1256, 162, 3, 2, 2, 2, 1257, 1258, 7, 79, 2, 2, 1258, 1259, 7, 75, 2, 2, 1259, 1260, 7, 80, 2, 2, 1260, 1261, 7, 87, 2, 2, 1261, 1262, 7, 86, 2, 2, 1262, 1263, 7, 71, 2, 2, 1263, 1264, 7, 97, 2, 2, 1264, 1265, 7, 85, 2, 2, 1265, 1266, 7, 71, 2, 2, 1266, 1267, 7, 69, 2, 2, 1267, 1268, 7, 81, 2, 2, 1268, 1269, 7, 80, 2, 2, 1269, 1270, 7, 70, 2, 2, 1270, 164, 3, 2, 2, 2, 1271, 1272, 7, 74, 2, 2, 1272, 1273, 7, 81, 2, 2, 1273, 1274, 7, 87, 2, 2, 1274, 1275, 7, 84, 2, 2, 1275, 1276, 7, 97, 2, 2, 1276, 1277, 7, 79, 2, 2, 1277, 1278, 7, 75, 2, 2, 1278, 1279, 7, 69, 2, 2, 1279, 1280, 7, 84, 2, 2, 1280, 1281, 7, 81, 2, 2, 1281, 1282, 7, 85, 2, 2, 1282, 1283, 7, 71, 2, 2, 1283, 1284, 7, 69, 2, 2, 1284, 1285, 7, 81, 2, 2, 1285, 1286, 7, 80, 2, 2, 1286, 1287, 7, 70, 2, 2, 1287, 166, 3, 2, 2, 2, 1288, 1289, 7, 74, 2, 2, 1289, 1290, 7, 81, 2, 2, 1290, 1291, 7, 87, 2, 2, 1291, 1292, 7, 84, 2, 2, 1292, 1293, 7, 97, 2, 2, 1293, 1294, 7, 85, 2, 2, 1294, 1295, 7, 71, 2, 2, 1295, 1296, 7, 69, 2, 2, 1296, 1297, 7, 81, 2, 2, 1297, 1298, 7, 80, 2, 2, 1298, 1299, 7, 70, 2, 2, 1299, 168, 3, 2, 2, 2, 1300, 1301, 7, 74, 2, 2, 1301, 1302, 7, 81, 2, 2, 1302, 1303, 7, 87, 2, 2, 1303, 1304, 7, 84, 2, 2, 1304, 1305, 7, 97, 2, 2, 1305, 1306, 7, 79, 2, 2, 1306, 1307, 7, 75, 2, 2, 1307, 1308, 7, 80, 2, 2, 1308, 1309, 7, 87, 2, 2, 1309, 1310, 7, 86, 2, 2, 1310, 1311, 7, 71, 2, 2, 1311, 170, 3, 2, 2, 2, 1312, 1313, 7, 70, 2, 2, 1313, 1314, 7, 67, 2, 2, 1314, 1315, 7, 91, 2, 2, 1315, 1316, 7, 97, 2, 2, 1316, 1317, 7, 79, 2, 2, 1317, 1318, 7, 75, 2, 2, 1318, 1319, 7, 69, 2, 2, 1319, 1320, 7, 84, 2, 2, 1320, 1321, 7, 81, 2, 2, 1321, 1322, 7, 85, 2, 2, 1322, 1323, 7, 71, 2, 2, 1323, 1324, 7, 69, 2, 2, 1324, 1325, 7, 81, 2, 2, 1325, 1326, 7, 80, 2, 2, 1326, 1327, 7, 70, 2, 2, 1327, 172, 3, 2, 2, 2, 1328, 1329, 7, 70, 2, 2, 1329, 1330, 7, 67, 2, 2, 1330, 1331, 7, 91, 2, 2, 1331, 1332, 7, 97, 2, 2, 1332, 1333, 7, 85, 2, 2, 1333, 1334, 7, 71, 2, 2, 1334, 1335, 7, 69, 2, 2, 1335, 1336, 7, 81, 2, 2, 1336, 1337, 7, 80, 2, 2, 1337, 1338, 7, 70, 2, 2, 1338, 174, 3, 2, 2, 2, 1339, 1340, 7, 70, 2, 2, 1340, 1341, 7, 67, 2, 2, 1341, 1342, 7, 91, 2, 2, 1342, 1343, 7, 97, 2, 2, 1343, 1344, 7, 79, 2, 2, 1344, 1345, 7, 75, 2, 2, 1345, 1346, 7, 80, 2, 2, 1346, 1347, 7, 87, 2, 2, 1347, 1348, 7, 86, 2, 2, 1348, 1349, 7, 71, 2, 2, 1349, 176, 3, 2, 2, 2, 1350, 1351, 7, 70, 2, 2, 1351, 1352, 7, 67, 2, 2, 1352, 1353, 7, 91, 2, 2, 1353, 1354, 7, 97, 2, 2, 1354, 1355, 7, 74, 2, 2, 1355, 1356, 7, 81, 2, 2, 1356, 1357, 7, 87, 2, 2, 1357, 1358, 7, 84, 2, 2, 1358, 178, 3, 2, 2, 2, 1359, 1360, 7, 91, 2, 2, 1360, 1361, 7, 71, 2, 2, 1361, 1362, 7, 67, 2, 2, 1362, 1363, 7, 84, 2, 2, 1363, 1364, 7, 97, 2, 2, 1364, 1365, 7, 79, 2, 2, 1365, 1366, 7, 81, 2, 2, 1366, 1367, 7, 80, 2, 2, 1367, 1368, 7, 86, 2, 2, 1368, 1369, 7, 74, 2, 2, 1369, 180, 3, 2, 2, 2, 1370, 1371, 7, 69, 2, 2, 1371, 1372, 7, 81, 2, 2, 1372, 1373, 7, 80, 2, 2, 1373, 1374, 7, 88, 2, 2, 1374, 1375, 7, 71, 2, 2, 1375, 1376, 7, 84, 2, 2, 1376, 1377, 7, 86, 2, 2, 1377, 1378, 7, 97, 2, 2, 1378, 1379, 7, 86, 2, 2, 1379, 1380, 7, 92, 2, 2, 1380, 182, 3, 2, 2, 2, 1381, 1382, 7, 70, 2, 2, 1382, 1383, 7, 67, 2, 2, 1383, 1384, 7, 86, 2, 2, 1384, 1385, 7, 67, 2, 2, 1385, 1386, 7, 79, 2, 2, 1386, 1387, 7, 81, 2, 2, 1387, 1388, 7, 70, 2, 2, 1388, 1389, 7, 71, 2, 2, 1389, 1390, 7, 78, 2, 2, 1390, 184, 3, 2, 2, 2, 1391, 1392, 7, 78, 2, 2, 1392, 1393, 7, 81, 2, 2, 1393, 1394, 7, 81, 2, 2, 1394, 1395, 7, 77, 2, 2, 1395, 1396, 7, 87, 2, 2, 1396, 1397, 7, 82, 2, 2, 1397, 186, 3, 2, 2, 2, 1398, 1399, 7, 85, 2, 2, 1399, 1400, 7, 67, 2, 2, 1400, 1401, 7, 88, 2, 2, 1401, 1402, 7, 71, 2, 2, 1402, 1403, 7, 70, 2, 2, 1403, 1404, 7, 85, 2, 2, 1404, 1405, 7, 71, 2, 2, 1405, 1406, 7, 67, 2, 2, 1406, 1407, 7, 84, 2, 2, 1407, 1408, 7, 69, 2, 2, 1408, 1409, 7, 74, 2, 2, 1409, 188, 3, 2, 2, 2, 1410, 1411, 7, 75, 2, 2, 1411, 1412, 7, 80, 2, 2, 1412, 1413, 7, 86, 2, 2, 1413, 190, 3, 2, 2, 2, 1414, 1415, 7, 75, 2, 2, 1415, 1416, 7, 80, 2, 2, 1416, 1417, 7, 86, 2, 2, 1417, 1418, 7, 71, 2, 2, 1418, 1419, 7, 73, 2, 2, 1419, 1420, 7, 71, 2, 2, 1420, 1421, 7, 84, 2, 2, 1421, 192, 3, 2, 2, 2, 1422, 1423, 7, 70, 2, 2, 1423, 1424, 7, 81, 2, 2, 1424, 1425, 7, 87, 2, 2, 1425, 1426, 7, 68, 2, 2, 1426, 1427, 7, 78, 2, 2, 1427, 1428, 7, 71, 2, 2, 1428, 194, 3, 2, 2, 2, 1429, 1430, 7, 78, 2, 2, 1430, 1431, 7, 81, 2, 2, 1431, 1432, 7, 80, 2, 2, 1432, 1433, 7, 73, 2, 2, 1433, 196, 3, 2, 2, 2, 1434, 1435, 7, 72, 2, 2, 1435, 1436, 7, 78, 2, 2, 1436, 1437, 7, 81, 2, 2, 1437, 1438, 7, 67, 2, 2, 1438, 1439, 7, 86, 2, 2, 1439, 198, 3, 2, 2, 2, 1440, 1441, 7, 85, 2, 2, 1441, 1442, 7, 86, 2, 2, 1442, 1443, 7, 84, 2, 2, 1443, 1444, 7, 75, 2, 2, 1444, 1445, 7, 80, 2, 2, 1445, 1446, 7, 73, 2, 2, 1446, 200, 3, 2, 2, 2, 1447, 1448, 7, 68, 2, 2, 1448, 1449, 7, 81, 2, 2, 1449, 1450, 7, 81, 2, 2, 1450, 1451, 7, 78, 2, 2, 1451, 1452, 7, 71, 2, 2, 1452, 1453, 7, 67, 2, 2, 1453, 1454, 7, 80, 2, 2, 1454, 202, 3, 2, 2, 2, 1455, 1456, 7, 126, 2, 2, 1456, 204, 3, 2, 2, 2, 1457, 1458, 7, 46, 2, 2, 1458, 206, 3, 2, 2, 2, 1459, 1460, 7, 48, 2, 2, 1460, 208, 3, 2, 2, 2, 1461, 1462, 7, 63, 2, 2, 1462, 210, 3, 2, 2, 2, 1463, 1464, 7, 64, 2, 2, 1464, 212, 3, 2, 2, 2, 1465, 1466, 7, 62, 2, 2, 1466, 214, 3, 2, 2, 2, 1467, 1468, 7, 62, 2, 2, 1468, 1469, 7, 63, 2, 2, 1469, 216, 3, 2, 2, 2, 1470, 1471, 7, 64, 2, 2, 1471, 1472, 7, 63, 2, 2, 1472, 218, 3, 2, 2, 2, 1473, 1474, 7, 35, 2, 2, 1474, 1475, 7, 63, 2, 2, 1475, 220, 3, 2, 2, 2, 1476, 1477, 7, 45, 2, 2, 1477, 222, 3, 2, 2, 2, 1478, 1479, 7, 47, 2, 2, 1479, 224, 3, 2, 2, 2, 1480, 1481, 7, 44, 2, 2, 1481, 226, 3, 2, 2, 2, 1482, 1483, 7, 49, 2, 2, 1483, 228, 3, 2, 2, 2, 1484, 1485, 7, 39, 2, 2, 1485, 230, 3, 2, 2, 2, 1486, 1487, 7, 35, 2, 2, 1487, 232, 3, 2, 2, 2, 1488, 1489, 7, 60, 2, 2, 1489, 234, 3, 2, 2, 2, 1490, 1491, 7, 42, 2, 2, 1491, 236, 3, 2, 2, 2, 1492, 1493, 7, 43, 2, 2, 1493, 238, 3, 2, 2, 2, 1494, 1495, 7, 93, 2, 2, 1495, 240, 3, 2, 2, 2, 1496, 1497, 7, 95, 2, 2, 1497, 242, 3, 2, 2, 2, 1498, 1499, 7, 41, 2, 2, 1499, 244, 3, 2, 2, 2, 1500, 1501, 7, 36, 2, 2, 1501, 246, 3, 2, 2, 2, 1502, 1503, 7, 98, 2, 2, 1503, 248, 3, 2, 2, 2, 1504, 1505, 7, 128, 2, 2, 1505, 250, 3, 2, 2, 2, 1506, 1507, 7, 40, 2, 2, 1507, 252, 3, 2, 2, 2, 1508, 1509, 7, 96, 2, 2, 1509, 254, 3, 2, 2, 2, 1510, 1511, 7, 67, 2, 2, 1511, 1512, 7, 88, 2, 2, 1512, 1513, 7, 73, 2, 2, 1513, 256, 3, 2, 2, 2, 1514, 1515, 7, 69, 2, 2, 1515, 1516, 7, 81, 2, 2, 1516, 1517, 7, 87, 2, 2, 1517, 1518, 7, 80, 2, 2, 1518, 1519, 7, 86, 2, 2, 1519, 258, 3, 2, 2, 2, 1520, 1521, 7, 70, 2, 2, 1521, 1522, 7, 75, 2, 2, 1522, 1523, 7, 85, 2, 2, 1523, 1524, 7, 86, 2, 2, 1524, 1525, 7, 75, 2, 2, 1525, 1526, 7, 80, 2, 2, 1526, 1527, 7, 69, 2, 2, 1527, 1528, 7, 86, 2, 2, 1528, 1529, 7, 97, 2, 2, 1529, 1530, 7, 69, 2, 2, 1530, 1531, 7, 81, 2, 2, 1531, 1532, 7, 87, 2, 2, 1532, 1533, 7, 80, 2, 2, 1533, 1534, 7, 86, 2, 2, 1534, 260, 3, 2, 2, 2, 1535, 1536, 7, 71, 2, 2, 1536, 1537, 7, 85, 2, 2, 1537, 1538, 7, 86, 2, 2, 1538, 1539, 7, 70, 2, 2, 1539, 1540, 7, 69, 2, 2, 1540, 262, 3, 2, 2, 2, 1541, 1542, 7, 71, 2, 2, 1542, 1543, 7, 85, 2, 2, 1543, 1544, 7, 86, 2, 2, 1544, 1545, 7, 70, 2, 2, 1545, 1546, 7, 69, 2, 2, 1546, 1547, 7, 97, 2, 2, 1547, 1548, 7, 71, 2, 2, 1548, 1549, 7, 84, 2, 2, 1549, 1550, 7, 84, 2, 2, 1550, 1551, 7, 81, 2, 2, 1551, 1552, 7, 84, 2, 2, 1552, 264, 3, 2, 2, 2, 1553, 1554, 7, 79, 2, 2, 1554, 1555, 7, 67, 2, 2, 1555, 1556, 7, 90, 2, 2, 1556, 266, 3, 2, 2, 2, 1557, 1558, 7, 79, 2, 2, 1558, 1559, 7, 71, 2, 2, 1559, 1560, 7, 67, 2, 2, 1560, 1561, 7, 80, 2, 2, 1561, 268, 3, 2, 2, 2, 1562, 1563, 7, 79, 2, 2, 1563, 1564, 7, 71, 2, 2, 1564, 1565, 7, 70, 2, 2, 1565, 1566, 7, 75, 2, 2, 1566, 1567, 7, 67, 2, 2, 1567, 1568, 7, 80, 2, 2, 1568, 270, 3, 2, 2, 2, 1569, 1570, 7, 79, 2, 2, 1570, 1571, 7, 75, 2, 2, 1571, 1572, 7, 80, 2, 2, 1572, 272, 3, 2, 2, 2, 1573, 1574, 7, 79, 2, 2, 1574, 1575, 7, 81, 2, 2, 1575, 1576, 7, 70, 2, 2, 1576, 1577, 7, 71, 2, 2, 1577, 274, 3, 2, 2, 2, 1578, 1579, 7, 84, 2, 2, 1579, 1580, 7, 67, 2, 2, 1580, 1581, 7, 80, 2, 2, 1581, 1582, 7, 73, 2, 2, 1582, 1583, 7, 71, 2, 2, 1583, 276, 3, 2, 2, 2, 1584, 1585, 7, 85, 2, 2, 1585, 1586, 7, 86, 2, 2, 1586, 1587, 7, 70, 2, 2, 1587, 1588, 7, 71, 2, 2, 1588, 1589, 7, 88, 2, 2, 1589, 278, 3, 2, 2, 2, 1590, 1591, 7, 85, 2, 2, 1591, 1592, 7, 86, 2, 2, 1592, 1593, 7, 70, 2, 2, 1593, 1594, 7, 71, 2, 2, 1594, 1595, 7, 88, 2, 2, 1595, 1596, 7, 82, 2, 2, 1596, 280, 3, 2, 2, 2, 1597, 1598, 7, 85, 2, 2, 1598, 1599, 7, 87, 2, 2, 1599, 1600, 7, 79, 2, 2, 1600, 282, 3, 2, 2, 2, 1601, 1602, 7, 85, 2, 2, 1602, 1603, 7, 87, 2, 2, 1603, 1604, 7, 79, 2, 2, 1604, 1605, 7, 85, 2, 2, 1605, 1606, 7, 83, 2, 2, 1606, 284, 3, 2, 2, 2, 1607, 1608, 7, 88, 2, 2, 1608, 1609, 7, 67, 2, 2, 1609, 1610, 7, 84, 2, 2, 1610, 1611, 7, 97, 2, 2, 1611, 1612, 7, 85, 2, 2, 1612, 1613, 7, 67, 2, 2, 1613, 1614, 7, 79, 2, 2, 1614, 1615, 7, 82, 2, 2, 1615, 286, 3, 2, 2, 2, 1616, 1617, 7, 88, 2, 2, 1617, 1618, 7, 67, 2, 2, 1618, 1619, 7, 84, 2, 2, 1619, 1620, 7, 97, 2, 2, 1620, 1621, 7, 82, 2, 2, 1621, 1622, 7, 81, 2, 2, 1622, 1623, 7, 82, 2, 2, 1623, 288, 3, 2, 2, 2, 1624, 1625, 7, 85, 2, 2, 1625, 1626, 7, 86, 2, 2, 1626, 1627, 7, 70, 2, 2, 1627, 1628, 7, 70, 2, 2, 1628, 1629, 7, 71, 2, 2, 1629, 1630, 7, 88, 2, 2, 1630, 1631, 7, 97, 2, 2, 1631, 1632, 7, 85, 2, 2, 1632, 1633, 7, 67, 2, 2, 1633, 1634, 7, 79, 2, 2, 1634, 1635, 7, 82, 2, 2, 1635, 290, 3, 2, 2, 2, 1636, 1637, 7, 85, 2, 2, 1637, 1638, 7, 86, 2, 2, 1638, 1639, 7, 70, 2, 2, 1639, 1640, 7, 70, 2, 2, 1640, 1641, 7, 71, 2, 2, 1641, 1642, 7, 88, 2, 2, 1642, 1643, 7, 97, 2, 2, 1643, 1644, 7, 82, 2, 2, 1644, 1645, 7, 81, 2, 2, 1645, 1646, 7, 82, 2, 2, 1646, 292, 3, 2, 2, 2, 1647, 1648, 7, 82, 2, 2, 1648, 1649, 7, 71, 2, 2, 1649, 1650, 7, 84, 2, 2, 1650, 1651, 7, 69, 2, 2, 1651, 1652, 7, 71, 2, 2, 1652, 1653, 7, 80, 2, 2, 1653, 1654, 7, 86, 2, 2, 1654, 1655, 7, 75, 2, 2, 1655, 1656, 7, 78, 2, 2, 1656, 1657, 7, 71, 2, 2, 1657, 294, 3, 2, 2, 2, 1658, 1659, 7, 86, 2, 2, 1659, 1660, 7, 67, 2, 2, 1660, 1661, 7, 77, 2, 2, 1661, 1662, 7, 71, 2, 2, 1662, 296, 3, 2, 2, 2, 1663, 1664, 7, 72, 2, 2, 1664, 1665, 7, 75, 2, 2, 1665, 1666, 7, 84, 2, 2, 1666, 1667, 7, 85, 2, 2, 1667, 1668, 7, 86, 2, 2, 1668, 298, 3, 2, 2, 2, 1669, 1670, 7, 78, 2, 2, 1670, 1671, 7, 67, 2, 2, 1671, 1672, 7, 85, 2, 2, 1672, 1673, 7, 86, 2, 2, 1673, 300, 3, 2, 2, 2, 1674, 1675, 7, 78, 2, 2, 1675, 1676, 7, 75, 2, 2, 1676, 1677, 7, 85, 2, 2, 1677, 1678, 7, 86, 2, 2, 1678, 302, 3, 2, 2, 2, 1679, 1680, 7, 88, 2, 2, 1680, 1681, 7, 67, 2, 2, 1681, 1682, 7, 78, 2, 2, 1682, 1683, 7, 87, 2, 2, 1683, 1684, 7, 71, 2, 2, 1684, 1685, 7, 85, 2, 2, 1685, 304, 3, 2, 2, 2, 1686, 1687, 7, 71, 2, 2, 1687, 1688, 7, 67, 2, 2, 1688, 1689, 7, 84, 2, 2, 1689, 1690, 7, 78, 2, 2, 1690, 1691, 7, 75, 2, 2, 1691, 1692, 7, 71, 2, 2, 1692, 1693, 7, 85, 2, 2, 1693, 1694, 7, 86, 2, 2, 1694, 306, 3, 2, 2, 2, 1695, 1696, 7, 71, 2, 2, 1696, 1697, 7, 67, 2, 2, 1697, 1698, 7, 84, 2, 2, 1698, 1699, 7, 78, 2, 2, 1699, 1700, 7, 75, 2, 2, 1700, 1701, 7, 71, 2, 2, 1701, 1702, 7, 85, 2, 2, 1702, 1703, 7, 86, 2, 2, 1703, 1704, 7, 97, 2, 2, 1704, 1705, 7, 86, 2, 2, 1705, 1706, 7, 75, 2, 2, 1706, 1707, 7, 79, 2, 2, 1707, 1708, 7, 71, 2, 2, 1708, 308, 3, 2, 2, 2, 1709, 1710, 7, 78, 2, 2, 1710, 1711, 7, 67, 2, 2, 1711, 1712, 7, 86, 2, 2, 1712, 1713, 7, 71, 2, 2, 1713, 1714, 7, 85, 2, 2, 1714, 1715, 7, 86, 2, 2, 1715, 310, 3, 2, 2, 2, 1716, 1717, 7, 78, 2, 2, 1717, 1718, 7, 67, 2, 2, 1718, 1719, 7, 86, 2, 2, 1719, 1720, 7, 71, 2, 2, 1720, 1721, 7, 85, 2, 2, 1721, 1722, 7, 86, 2, 2, 1722, 1723, 7, 97, 2, 2, 1723, 1724, 7, 86, 2, 2, 1724, 1725, 7, 75, 2, 2, 1725, 1726, 7, 79, 2, 2, 1726, 1727, 7, 71, 2, 2, 1727, 312, 3, 2, 2, 2, 1728, 1729, 7, 82, 2, 2, 1729, 1730, 7, 71, 2, 2, 1730, 1731, 7, 84, 2, 2, 1731, 1732, 7, 97, 2, 2, 1732, 1733, 7, 70, 2, 2, 1733, 1734, 7, 67, 2, 2, 1734, 1735, 7, 91, 2, 2, 1735, 314, 3, 2, 2, 2, 1736, 1737, 7, 82, 2, 2, 1737, 1738, 7, 71, 2, 2, 1738, 1739, 7, 84, 2, 2, 1739, 1740, 7, 97, 2, 2, 1740, 1741, 7, 74, 2, 2, 1741, 1742, 7, 81, 2, 2, 1742, 1743, 7, 87, 2, 2, 1743, 1744, 7, 84, 2, 2, 1744, 316, 3, 2, 2, 2, 1745, 1746, 7, 82, 2, 2, 1746, 1747, 7, 71, 2, 2, 1747, 1748, 7, 84, 2, 2, 1748, 1749, 7, 97, 2, 2, 1749, 1750, 7, 79, 2, 2, 1750, 1751, 7, 75, 2, 2, 1751, 1752, 7, 80, 2, 2, 1752, 1753, 7, 87, 2, 2, 1753, 1754, 7, 86, 2, 2, 1754, 1755, 7, 71, 2, 2, 1755, 318, 3, 2, 2, 2, 1756, 1757, 7, 82, 2, 2, 1757, 1758, 7, 71, 2, 2, 1758, 1759, 7, 84, 2, 2, 1759, 1760, 7, 97, 2, 2, 1760, 1761, 7, 85, 2, 2, 1761, 1762, 7, 71, 2, 2, 1762, 1763, 7, 69, 2, 2, 1763, 1764, 7, 81, 2, 2, 1764, 1765, 7, 80, 2, 2, 1765, 1766, 7, 70, 2, 2, 1766, 320, 3, 2, 2, 2, 1767, 1768, 7, 84, 2, 2, 1768, 1769, 7, 67, 2, 2, 1769, 1770, 7, 86, 2, 2, 1770, 1771, 7, 71, 2, 2, 1771, 322, 3, 2, 2, 2, 1772, 1773, 7, 85, 2, 2, 1773, 1774, 7, 82, 2, 2, 1774, 1775, 7, 67, 2, 2, 1775, 1776, 7, 84, 2, 2, 1776, 1777, 7, 77, 2, 2, 1777, 1778, 7, 78, 2, 2, 1778, 1779, 7, 75, 2, 2, 1779, 1780, 7, 80, 2, 2, 1780, 1781, 7, 71, 2, 2, 1781, 324, 3, 2, 2, 2, 1782, 1783, 7, 69, 2, 2, 1783, 326, 3, 2, 2, 2, 1784, 1785, 7, 70, 2, 2, 1785, 1786, 7, 69, 2, 2, 1786, 328, 3, 2, 2, 2, 1787, 1788, 7, 67, 2, 2, 1788, 1789, 7, 68, 2, 2, 1789, 1790, 7, 85, 2, 2, 1790, 330, 3, 2, 2, 2, 1791, 1792, 7, 69, 2, 2, 1792, 1793, 7, 71, 2, 2, 1793, 1794, 7, 75, 2, 2, 1794, 1795, 7, 78, 2, 2, 1795, 332, 3, 2, 2, 2, 1796, 1797, 7, 69, 2, 2, 1797, 1798, 7, 71, 2, 2, 1798, 1799, 7, 75, 2, 2, 1799, 1800, 7, 78, 2, 2, 1800, 1801, 7, 75, 2, 2, 1801, 1802, 7, 80, 2, 2, 1802, 1803, 7, 73, 2, 2, 1803, 334, 3, 2, 2, 2, 1804, 1805, 7, 69, 2, 2, 1805, 1806, 7, 81, 2, 2, 1806, 1807, 7, 80, 2, 2, 1807, 1808, 7, 88, 2, 2, 1808, 336, 3, 2, 2, 2, 1809, 1810, 7, 69, 2, 2, 1810, 1811, 7, 84, 2, 2, 1811, 1812, 7, 69, 2, 2, 1812, 1813, 7, 53, 2, 2, 1813, 1814, 7, 52, 2, 2, 1814, 338, 3, 2, 2, 2, 1815, 1816, 7, 71, 2, 2, 1816, 340, 3, 2, 2, 2, 1817, 1818, 7, 71, 2, 2, 1818, 1819, 7, 90, 2, 2, 1819, 1820, 7, 82, 2, 2, 1820, 342, 3, 2, 2, 2, 1821, 1822, 7, 72, 2, 2, 1822, 1823, 7, 78, 2, 2, 1823, 1824, 7, 81, 2, 2, 1824, 1825, 7, 81, 2, 2, 1825, 1826, 7, 84, 2, 2, 1826, 344, 3, 2, 2, 2, 1827, 1828, 7, 78, 2, 2, 1828, 1829, 7, 80, 2, 2, 1829, 346, 3, 2, 2, 2, 1830, 1831, 7, 78, 2, 2, 1831, 1832, 7, 81, 2, 2, 1832, 1833, 7, 73, 2, 2, 1833, 348, 3, 2, 2, 2, 1834, 1835, 7, 78, 2, 2, 1835, 1836, 7, 81, 2, 2, 1836, 1837, 7, 73, 2, 2, 1837, 1838, 7, 51, 2, 2, 1838, 1839, 7, 50, 2, 2, 1839, 350, 3, 2, 2, 2, 1840, 1841, 7, 78, 2, 2, 1841, 1842, 7, 81, 2, 2, 1842, 1843, 7, 73, 2, 2, 1843, 1844, 7, 52, 2, 2, 1844, 352, 3, 2, 2, 2, 1845, 1846, 7, 79, 2, 2, 1846, 1847, 7, 81, 2, 2, 1847, 1848, 7, 70, 2, 2, 1848, 354, 3, 2, 2, 2, 1849, 1850, 7, 82, 2, 2, 1850, 1851, 7, 75, 2, 2, 1851, 356, 3, 2, 2, 2, 1852, 1853, 7, 82, 2, 2, 1853, 1854, 7, 81, 2, 2, 1854, 1855, 7, 89, 2, 2, 1855, 358, 3, 2, 2, 2, 1856, 1857, 7, 82, 2, 2, 1857, 1858, 7, 81, 2, 2, 1858, 1859, 7, 89, 2, 2, 1859, 1860, 7, 71, 2, 2, 1860, 1861, 7, 84, 2, 2, 1861, 360, 3, 2, 2, 2, 1862, 1863, 7, 84, 2, 2, 1863, 1864, 7, 67, 2, 2, 1864, 1865, 7, 80, 2, 2, 1865, 1866, 7, 70, 2, 2, 1866, 362, 3, 2, 2, 2, 1867, 1868, 7, 84, 2, 2, 1868, 1869, 7, 81, 2, 2, 1869, 1870, 7, 87, 2, 2, 1870, 1871, 7, 80, 2, 2, 1871, 1872, 7, 70, 2, 2, 1872, 364, 3, 2, 2, 2, 1873, 1874, 7, 85, 2, 2, 1874, 1875, 7, 75, 2, 2, 1875, 1876, 7, 73, 2, 2, 1876, 1877, 7, 80, 2, 2, 1877, 366, 3, 2, 2, 2, 1878, 1879, 7, 85, 2, 2, 1879, 1880, 7, 83, 2, 2, 1880, 1881, 7, 84, 2, 2, 1881, 1882, 7, 86, 2, 2, 1882, 368, 3, 2, 2, 2, 1883, 1884, 7, 86, 2, 2, 1884, 1885, 7, 84, 2, 2, 1885, 1886, 7, 87, 2, 2, 1886, 1887, 7, 80, 2, 2, 1887, 1888, 7, 69, 2, 2, 1888, 1889, 7, 67, 2, 2, 1889, 1890, 7, 86, 2, 2, 1890, 1891, 7, 71, 2, 2, 1891, 370, 3, 2, 2, 2, 1892, 1893, 7, 67, 2, 2, 1893, 1894, 7, 69, 2, 2, 1894, 1895, 7, 81, 2, 2, 1895, 1896, 7, 85, 2, 2, 1896, 372, 3, 2, 2, 2, 1897, 1898, 7, 67, 2, 2, 1898, 1899, 7, 85, 2, 2, 1899, 1900, 7, 75, 2, 2, 1900, 1901, 7, 80, 2, 2, 1901, 374, 3, 2, 2, 2, 1902, 1903, 7, 67, 2, 2, 1903, 1904, 7, 86, 2, 2, 1904, 1905, 7, 67, 2, 2, 1905, 1906, 7, 80, 2, 2, 1906, 376, 3, 2, 2, 2, 1907, 1908, 7, 67, 2, 2, 1908, 1909, 7, 86, 2, 2, 1909, 1910, 7, 67, 2, 2, 1910, 1911, 7, 80, 2, 2, 1911, 1912, 7, 52, 2, 2, 1912, 378, 3, 2, 2, 2, 1913, 1914, 7, 69, 2, 2, 1914, 1915, 7, 81, 2, 2, 1915, 1916, 7, 85, 2, 2, 1916, 380, 3, 2, 2, 2, 1917, 1918, 7, 69, 2, 2, 1918, 1919, 7, 81, 2, 2, 1919, 1920, 7, 86, 2, 2, 1920, 382, 3, 2, 2, 2, 1921, 1922, 7, 70, 2, 2, 1922, 1923, 7, 71, 2, 2, 1923, 1924, 7, 73, 2, 2, 1924, 1925, 7, 84, 2, 2, 1925, 1926, 7, 71, 2, 2, 1926, 1927, 7, 71, 2, 2, 1927, 1928, 7, 85, 2, 2, 1928, 384, 3, 2, 2, 2, 1929, 1930, 7, 84, 2, 2, 1930, 1931, 7, 67, 2, 2, 1931, 1932, 7, 70, 2, 2, 1932, 1933, 7, 75, 2, 2, 1933, 1934, 7, 67, 2, 2, 1934, 1935, 7, 80, 2, 2, 1935, 1936, 7, 85, 2, 2, 1936, 386, 3, 2, 2, 2, 1937, 1938, 7, 85, 2, 2, 1938, 1939, 7, 75, 2, 2, 1939, 1940, 7, 80, 2, 2, 1940, 388, 3, 2, 2, 2, 1941, 1942, 7, 86, 2, 2, 1942, 1943, 7, 67, 2, 2, 1943, 1944, 7, 80, 2, 2, 1944, 390, 3, 2, 2, 2, 1945, 1946, 7, 67, 2, 2, 1946, 1947, 7, 70, 2, 2, 1947, 1948, 7, 70, 2, 2, 1948, 1949, 7, 70, 2, 2, 1949, 1950, 7, 67, 2, 2, 1950, 1951, 7, 86, 2, 2, 1951, 1952, 7, 71, 2, 2, 1952, 392, 3, 2, 2, 2, 1953, 1954, 7, 69, 2, 2, 1954, 1955, 7, 87, 2, 2, 1955, 1956, 7, 84, 2, 2, 1956, 1957, 7, 70, 2, 2, 1957, 1958, 7, 67, 2, 2, 1958, 1959, 7, 86, 2, 2, 1959, 1960, 7, 71, 2, 2, 1960, 394, 3, 2, 2, 2, 1961, 1962, 7, 69, 2, 2, 1962, 1963, 7, 87, 2, 2, 1963, 1964, 7, 84, 2, 2, 1964, 1965, 7, 84, 2, 2, 1965, 1966, 7, 71, 2, 2, 1966, 1967, 7, 80, 2, 2, 1967, 1968, 7, 86, 2, 2, 1968, 1969, 7, 97, 2, 2, 1969, 1970, 7, 70, 2, 2, 1970, 1971, 7, 67, 2, 2, 1971, 1972, 7, 86, 2, 2, 1972, 1973, 7, 71, 2, 2, 1973, 396, 3, 2, 2, 2, 1974, 1975, 7, 69, 2, 2, 1975, 1976, 7, 87, 2, 2, 1976, 1977, 7, 84, 2, 2, 1977, 1978, 7, 84, 2, 2, 1978, 1979, 7, 71, 2, 2, 1979, 1980, 7, 80, 2, 2, 1980, 1981, 7, 86, 2, 2, 1981, 1982, 7, 97, 2, 2, 1982, 1983, 7, 86, 2, 2, 1983, 1984, 7, 75, 2, 2, 1984, 1985, 7, 79, 2, 2, 1985, 1986, 7, 71, 2, 2, 1986, 398, 3, 2, 2, 2, 1987, 1988, 7, 69, 2, 2, 1988, 1989, 7, 87, 2, 2, 1989, 1990, 7, 84, 2, 2, 1990, 1991, 7, 84, 2, 2, 1991, 1992, 7, 71, 2, 2, 1992, 1993, 7, 80, 2, 2, 1993, 1994, 7, 86, 2, 2, 1994, 1995, 7, 97, 2, 2, 1995, 1996, 7, 86, 2, 2, 1996, 1997, 7, 75, 2, 2, 1997, 1998, 7, 79, 2, 2, 1998, 1999, 7, 71, 2, 2, 1999, 2000, 7, 85, 2, 2, 2000, 2001, 7, 86, 2, 2, 2001, 2002, 7, 67, 2, 2, 2002, 2003, 7, 79, 2, 2, 2003, 2004, 7, 82, 2, 2, 2004, 400, 3, 2, 2, 2, 2005, 2006, 7, 69, 2, 2, 2006, 2007, 7, 87, 2, 2, 2007, 2008, 7, 84, 2, 2, 2008, 2009, 7, 86, 2, 2, 2009, 2010, 7, 75, 2, 2, 2010, 2011, 7, 79, 2, 2, 2011, 2012, 7, 71, 2, 2, 2012, 402, 3, 2, 2, 2, 2013, 2014, 7, 70, 2, 2, 2014, 2015, 7, 67, 2, 2, 2015, 2016, 7, 86, 2, 2, 2016, 2017, 7, 71, 2, 2, 2017, 404, 3, 2, 2, 2, 2018, 2019, 7, 70, 2, 2, 2019, 2020, 7, 67, 2, 2, 2020, 2021, 7, 86, 2, 2, 2021, 2022, 7, 71, 2, 2, 2022, 2023, 7, 97, 2, 2, 2023, 2024, 7, 67, 2, 2, 2024, 2025, 7, 70, 2, 2, 2025, 2026, 7, 70, 2, 2, 2026, 406, 3, 2, 2, 2, 2027, 2028, 7, 70, 2, 2, 2028, 2029, 7, 67, 2, 2, 2029, 2030, 7, 86, 2, 2, 2030, 2031, 7, 71, 2, 2, 2031, 2032, 7, 97, 2, 2, 2032, 2033, 7, 72, 2, 2, 2033, 2034, 7, 81, 2, 2, 2034, 2035, 7, 84, 2, 2, 2035, 2036, 7, 79, 2, 2, 2036, 2037, 7, 67, 2, 2, 2037, 2038, 7, 86, 2, 2, 2038, 408, 3, 2, 2, 2, 2039, 2040, 7, 70, 2, 2, 2040, 2041, 7, 67, 2, 2, 2041, 2042, 7, 86, 2, 2, 2042, 2043, 7, 71, 2, 2, 2043, 2044, 7, 97, 2, 2, 2044, 2045, 7, 85, 2, 2, 2045, 2046, 7, 87, 2, 2, 2046, 2047, 7, 68, 2, 2, 2047, 410, 3, 2, 2, 2, 2048, 2049, 7, 70, 2, 2, 2049, 2050, 7, 67, 2, 2, 2050, 2051, 7, 91, 2, 2, 2051, 2052, 7, 80, 2, 2, 2052, 2053, 7, 67, 2, 2, 2053, 2054, 7, 79, 2, 2, 2054, 2055, 7, 71, 2, 2, 2055, 412, 3, 2, 2, 2, 2056, 2057, 7, 70, 2, 2, 2057, 2058, 7, 67, 2, 2, 2058, 2059, 7, 91, 2, 2, 2059, 2060, 7, 81, 2, 2, 2060, 2061, 7, 72, 2, 2, 2061, 2062, 7, 79, 2, 2, 2062, 2063, 7, 81, 2, 2, 2063, 2064, 7, 80, 2, 2, 2064, 2065, 7, 86, 2, 2, 2065, 2066, 7, 74, 2, 2, 2066, 414, 3, 2, 2, 2, 2067, 2068, 7, 70, 2, 2, 2068, 2069, 7, 67, 2, 2, 2069, 2070, 7, 91, 2, 2, 2070, 2071, 7, 81, 2, 2, 2071, 2072, 7, 72, 2, 2, 2072, 2073, 7, 89, 2, 2, 2073, 2074, 7, 71, 2, 2, 2074, 2075, 7, 71, 2, 2, 2075, 2076, 7, 77, 2, 2, 2076, 416, 3, 2, 2, 2, 2077, 2078, 7, 70, 2, 2, 2078, 2079, 7, 67, 2, 2, 2079, 2080, 7, 91, 2, 2, 2080, 2081, 7, 81, 2, 2, 2081, 2082, 7, 72, 2, 2, 2082, 2083, 7, 91, 2, 2, 2083, 2084, 7, 71, 2, 2, 2084, 2085, 7, 67, 2, 2, 2085, 2086, 7, 84, 2, 2, 2086, 418, 3, 2, 2, 2, 2087, 2088, 7, 72, 2, 2, 2088, 2089, 7, 84, 2, 2, 2089, 2090, 7, 81, 2, 2, 2090, 2091, 7, 79, 2, 2, 2091, 2092, 7, 97, 2, 2, 2092, 2093, 7, 70, 2, 2, 2093, 2094, 7, 67, 2, 2, 2094, 2095, 7, 91, 2, 2, 2095, 2096, 7, 85, 2, 2, 2096, 420, 3, 2, 2, 2, 2097, 2098, 7, 78, 2, 2, 2098, 2099, 7, 81, 2, 2, 2099, 2100, 7, 69, 2, 2, 2100, 2101, 7, 67, 2, 2, 2101, 2102, 7, 78, 2, 2, 2102, 2103, 7, 86, 2, 2, 2103, 2104, 7, 75, 2, 2, 2104, 2105, 7, 79, 2, 2, 2105, 2106, 7, 71, 2, 2, 2106, 422, 3, 2, 2, 2, 2107, 2108, 7, 78, 2, 2, 2108, 2109, 7, 81, 2, 2, 2109, 2110, 7, 69, 2, 2, 2110, 2111, 7, 67, 2, 2, 2111, 2112, 7, 78, 2, 2, 2112, 2113, 7, 86, 2, 2, 2113, 2114, 7, 75, 2, 2, 2114, 2115, 7, 79, 2, 2, 2115, 2116, 7, 71, 2, 2, 2116, 2117, 7, 85, 2, 2, 2117, 2118, 7, 86, 2, 2, 2118, 2119, 7, 67, 2, 2, 2119, 2120, 7, 79, 2, 2, 2120, 2121, 7, 82, 2, 2, 2121, 424, 3, 2, 2, 2, 2122, 2123, 7, 72, 2, 2, 2123, 2124, 7, 84, 2, 2, 2124, 2125, 7, 81, 2, 2, 2125, 2126, 7, 79, 2, 2, 2126, 2127, 7, 97, 2, 2, 2127, 2128, 7, 87, 2, 2, 2128, 2129, 7, 80, 2, 2, 2129, 2130, 7, 75, 2, 2, 2130, 2131, 7, 90, 2, 2, 2131, 2132, 7, 86, 2, 2, 2132, 2133, 7, 75, 2, 2, 2133, 2134, 7, 79, 2, 2, 2134, 2135, 7, 71, 2, 2, 2135, 426, 3, 2, 2, 2, 2136, 2137, 7, 79, 2, 2, 2137, 2138, 7, 67, 2, 2, 2138, 2139, 7, 77, 2, 2, 2139, 2140, 7, 71, 2, 2, 2140, 2141, 7, 70, 2, 2, 2141, 2142, 7, 67, 2, 2, 2142, 2143, 7, 86, 2, 2, 2143, 2144, 7, 71, 2, 2, 2144, 428, 3, 2, 2, 2, 2145, 2146, 7, 79, 2, 2, 2146, 2147, 7, 67, 2, 2, 2147, 2148, 7, 77, 2, 2, 2148, 2149, 7, 71, 2, 2, 2149, 2150, 7, 86, 2, 2, 2150, 2151, 7, 75, 2, 2, 2151, 2152, 7, 79, 2, 2, 2152, 2153, 7, 71, 2, 2, 2153, 430, 3, 2, 2, 2, 2154, 2155, 7, 79, 2, 2, 2155, 2156, 7, 81, 2, 2, 2156, 2157, 7, 80, 2, 2, 2157, 2158, 7, 86, 2, 2, 2158, 2159, 7, 74, 2, 2, 2159, 2160, 7, 80, 2, 2, 2160, 2161, 7, 67, 2, 2, 2161, 2162, 7, 79, 2, 2, 2162, 2163, 7, 71, 2, 2, 2163, 432, 3, 2, 2, 2, 2164, 2165, 7, 80, 2, 2, 2165, 2166, 7, 81, 2, 2, 2166, 2167, 7, 89, 2, 2, 2167, 434, 3, 2, 2, 2, 2168, 2169, 7, 82, 2, 2, 2169, 2170, 7, 71, 2, 2, 2170, 2171, 7, 84, 2, 2, 2171, 2172, 7, 75, 2, 2, 2172, 2173, 7, 81, 2, 2, 2173, 2174, 7, 70, 2, 2, 2174, 2175, 7, 97, 2, 2, 2175, 2176, 7, 67, 2, 2, 2176, 2177, 7, 70, 2, 2, 2177, 2178, 7, 70, 2, 2, 2178, 436, 3, 2, 2, 2, 2179, 2180, 7, 82, 2, 2, 2180, 2181, 7, 71, 2, 2, 2181, 2182, 7, 84, 2, 2, 2182, 2183, 7, 75, 2, 2, 2183, 2184, 7, 81, 2, 2, 2184, 2185, 7, 70, 2, 2, 2185, 2186, 7, 97, 2, 2, 2186, 2187, 7, 70, 2, 2, 2187, 2188, 7, 75, 2, 2, 2188, 2189, 7, 72, 2, 2, 2189, 2190, 7, 72, 2, 2, 2190, 438, 3, 2, 2, 2, 2191, 2192, 7, 85, 2, 2, 2192, 2193, 7, 87, 2, 2, 2193, 2194, 7, 68, 2, 2, 2194, 2195, 7, 70, 2, 2, 2195, 2196, 7, 67, 2, 2, 2196, 2197, 7, 86, 2, 2, 2197, 2198, 7, 71, 2, 2, 2198, 440, 3, 2, 2, 2, 2199, 2200, 7, 85, 2, 2, 2200, 2201, 7, 91, 2, 2, 2201, 2202, 7, 85, 2, 2, 2202, 2203, 7, 70, 2, 2, 2203, 2204, 7, 67, 2, 2, 2204, 2205, 7, 86, 2, 2, 2205, 2206, 7, 71, 2, 2, 2206, 442, 3, 2, 2, 2, 2207, 2208, 7, 86, 2, 2, 2208, 2209, 7, 75, 2, 2, 2209, 2210, 7, 79, 2, 2, 2210, 2211, 7, 71, 2, 2, 2211, 444, 3, 2, 2, 2, 2212, 2213, 7, 86, 2, 2, 2213, 2214, 7, 75, 2, 2, 2214, 2215, 7, 79, 2, 2, 2215, 2216, 7, 71, 2, 2, 2216, 2217, 7, 97, 2, 2, 2217, 2218, 7, 86, 2, 2, 2218, 2219, 7, 81, 2, 2, 2219, 2220, 7, 97, 2, 2, 2220, 2221, 7, 85, 2, 2, 2221, 2222, 7, 71, 2, 2, 2222, 2223, 7, 69, 2, 2, 2223, 446, 3, 2, 2, 2, 2224, 2225, 7, 86, 2, 2, 2225, 2226, 7, 75, 2, 2, 2226, 2227, 7, 79, 2, 2, 2227, 2228, 7, 71, 2, 2, 2228, 2229, 7, 85, 2, 2, 2229, 2230, 7, 86, 2, 2, 2230, 2231, 7, 67, 2, 2, 2231, 2232, 7, 79, 2, 2, 2232, 2233, 7, 82, 2, 2, 2233, 448, 3, 2, 2, 2, 2234, 2235, 7, 86, 2, 2, 2235, 2236, 7, 81, 2, 2, 2236, 2237, 7, 97, 2, 2, 2237, 2238, 7, 70, 2, 2, 2238, 2239, 7, 67, 2, 2, 2239, 2240, 7, 91, 2, 2, 2240, 2241, 7, 85, 2, 2, 2241, 450, 3, 2, 2, 2, 2242, 2243, 7, 87, 2, 2, 2243, 2244, 7, 86, 2, 2, 2244, 2245, 7, 69, 2, 2, 2245, 2246, 7, 97, 2, 2, 2246, 2247, 7, 70, 2, 2, 2247, 2248, 7, 67, 2, 2, 2248, 2249, 7, 86, 2, 2, 2249, 2250, 7, 71, 2, 2, 2250, 452, 3, 2, 2, 2, 2251, 2252, 7, 87, 2, 2, 2252, 2253, 7, 86, 2, 2, 2253, 2254, 7, 69, 2, 2, 2254, 2255, 7, 97, 2, 2, 2255, 2256, 7, 86, 2, 2, 2256, 2257, 7, 75, 2, 2, 2257, 2258, 7, 79, 2, 2, 2258, 2259, 7, 71, 2, 2, 2259, 454, 3, 2, 2, 2, 2260, 2261, 7, 87, 2, 2, 2261, 2262, 7, 86, 2, 2, 2262, 2263, 7, 69, 2, 2, 2263, 2264, 7, 97, 2, 2, 2264, 2265, 7, 86, 2, 2, 2265, 2266, 7, 75, 2, 2, 2266, 2267, 7, 79, 2, 2, 2267, 2268, 7, 71, 2, 2, 2268, 2269, 7, 85, 2, 2, 2269, 2270, 7, 86, 2, 2, 2270, 2271, 7, 67, 2, 2, 2271, 2272, 7, 79, 2, 2, 2272, 2273, 7, 82, 2, 2, 2273, 456, 3, 2, 2, 2, 2274, 2275, 7, 87, 2, 2, 2275, 2276, 7, 80, 2, 2, 2276, 2277, 7, 75, 2, 2, 2277, 2278, 7, 90, 2, 2, 2278, 2279, 7, 97, 2, 2, 2279, 2280, 7, 86, 2, 2, 2280, 2281, 7, 75, 2, 2, 2281, 2282, 7, 79, 2, 2, 2282, 2283, 7, 71, 2, 2, 2283, 2284, 7, 85, 2, 2, 2284, 2285, 7, 86, 2, 2, 2285, 2286, 7, 67, 2, 2, 2286, 2287, 7, 79, 2, 2, 2287, 2288, 7, 82, 2, 2, 2288, 458, 3, 2, 2, 2, 2289, 2290, 7, 85, 2, 2, 2290, 2291, 7, 87, 2, 2, 2291, 2292, 7, 68, 2, 2, 2292, 2293, 7, 85, 2, 2, 2293, 2294, 7, 86, 2, 2, 2294, 2295, 7, 84, 2, 2, 2295, 460, 3, 2, 2, 2, 2296, 2297, 7, 85, 2, 2, 2297, 2298, 7, 87, 2, 2, 2298, 2299, 7, 68, 2, 2, 2299, 2300, 7, 85, 2, 2, 2300, 2301, 7, 86, 2, 2, 2301, 2302, 7, 84, 2, 2, 2302, 2303, 7, 75, 2, 2, 2303, 2304, 7, 80, 2, 2, 2304, 2305, 7, 73, 2, 2, 2305, 462, 3, 2, 2, 2, 2306, 2307, 7, 78, 2, 2, 2307, 2308, 7, 86, 2, 2, 2308, 2309, 7, 84, 2, 2, 2309, 2310, 7, 75, 2, 2, 2310, 2311, 7, 79, 2, 2, 2311, 464, 3, 2, 2, 2, 2312, 2313, 7, 84, 2, 2, 2313, 2314, 7, 86, 2, 2, 2314, 2315, 7, 84, 2, 2, 2315, 2316, 7, 75, 2, 2, 2316, 2317, 7, 79, 2, 2, 2317, 466, 3, 2, 2, 2, 2318, 2319, 7, 86, 2, 2, 2319, 2320, 7, 84, 2, 2, 2320, 2321, 7, 75, 2, 2, 2321, 2322, 7, 79, 2, 2, 2322, 468, 3, 2, 2, 2, 2323, 2324, 7, 86, 2, 2, 2324, 2325, 7, 81, 2, 2, 2325, 470, 3, 2, 2, 2, 2326, 2327, 7, 78, 2, 2, 2327, 2328, 7, 81, 2, 2, 2328, 2329, 7, 89, 2, 2, 2329, 2330, 7, 71, 2, 2, 2330, 2331, 7, 84, 2, 2, 2331, 472, 3, 2, 2, 2, 2332, 2333, 7, 87, 2, 2, 2333, 2334, 7, 82, 2, 2, 2334, 2335, 7, 82, 2, 2, 2335, 2336, 7, 71, 2, 2, 2336, 2337, 7, 84, 2, 2, 2337, 474, 3, 2, 2, 2, 2338, 2339, 7, 69, 2, 2, 2339, 2340, 7, 81, 2, 2, 2340, 2341, 7, 80, 2, 2, 2341, 2342, 7, 69, 2, 2, 2342, 2343, 7, 67, 2, 2, 2343, 2344, 7, 86, 2, 2, 2344, 476, 3, 2, 2, 2, 2345, 2346, 7, 69, 2, 2, 2346, 2347, 7, 81, 2, 2, 2347, 2348, 7, 80, 2, 2, 2348, 2349, 7, 69, 2, 2, 2349, 2350, 7, 67, 2, 2, 2350, 2351, 7, 86, 2, 2, 2351, 2352, 7, 97, 2, 2, 2352, 2353, 7, 89, 2, 2, 2353, 2354, 7, 85, 2, 2, 2354, 478, 3, 2, 2, 2, 2355, 2356, 7, 78, 2, 2, 2356, 2357, 7, 71, 2, 2, 2357, 2358, 7, 80, 2, 2, 2358, 2359, 7, 73, 2, 2, 2359, 2360, 7, 86, 2, 2, 2360, 2361, 7, 74, 2, 2, 2361, 480, 3, 2, 2, 2, 2362, 2363, 7, 85, 2, 2, 2363, 2364, 7, 86, 2, 2, 2364, 2365, 7, 84, 2, 2, 2365, 2366, 7, 69, 2, 2, 2366, 2367, 7, 79, 2, 2, 2367, 2368, 7, 82, 2, 2, 2368, 482, 3, 2, 2, 2, 2369, 2370, 7, 84, 2, 2, 2370, 2371, 7, 75, 2, 2, 2371, 2372, 7, 73, 2, 2, 2372, 2373, 7, 74, 2, 2, 2373, 2374, 7, 86, 2, 2, 2374, 484, 3, 2, 2, 2, 2375, 2376, 7, 78, 2, 2, 2376, 2377, 7, 71, 2, 2, 2377, 2378, 7, 72, 2, 2, 2378, 2379, 7, 86, 2, 2, 2379, 486, 3, 2, 2, 2, 2380, 2381, 7, 67, 2, 2, 2381, 2382, 7, 85, 2, 2, 2382, 2383, 7, 69, 2, 2, 2383, 2384, 7, 75, 2, 2, 2384, 2385, 7, 75, 2, 2, 2385, 488, 3, 2, 2, 2, 2386, 2387, 7, 78, 2, 2, 2387, 2388, 7, 81, 2, 2, 2388, 2389, 7, 69, 2, 2, 2389, 2390, 7, 67, 2, 2, 2390, 2391, 7, 86, 2, 2, 2391, 2392, 7, 71, 2, 2, 2392, 490, 3, 2, 2, 2, 2393, 2394, 7, 84, 2, 2, 2394, 2395, 7, 71, 2, 2, 2395, 2396, 7, 82, 2, 2, 2396, 2397, 7, 78, 2, 2, 2397, 2398, 7, 67, 2, 2, 2398, 2399, 7, 69, 2, 2, 2399, 2400, 7, 71, 2, 2, 2400, 492, 3, 2, 2, 2, 2401, 2402, 7, 69, 2, 2, 2402, 2403, 7, 67, 2, 2, 2403, 2404, 7, 85, 2, 2, 2404, 2405, 7, 86, 2, 2, 2405, 494, 3, 2, 2, 2, 2406, 2407, 7, 78, 2, 2, 2407, 2408, 7, 75, 2, 2, 2408, 2409, 7, 77, 2, 2, 2409, 2410, 7, 71, 2, 2, 2410, 496, 3, 2, 2, 2, 2411, 2412, 7, 75, 2, 2, 2412, 2413, 7, 85, 2, 2, 2413, 2414, 7, 80, 2, 2, 2414, 2415, 7, 87, 2, 2, 2415, 2416, 7, 78, 2, 2, 2416, 2417, 7, 78, 2, 2, 2417, 498, 3, 2, 2, 2, 2418, 2419, 7, 75, 2, 2, 2419, 2420, 7, 85, 2, 2, 2420, 2421, 7, 80, 2, 2, 2421, 2422, 7, 81, 2, 2, 2422, 2423, 7, 86, 2, 2, 2423, 2424, 7, 80, 2, 2, 2424, 2425, 7, 87, 2, 2, 2425, 2426, 7, 78, 2, 2, 2426, 2427, 7, 78, 2, 2, 2427, 500, 3, 2, 2, 2, 2428, 2429, 7, 75, 2, 2, 2429, 2430, 7, 72, 2, 2, 2430, 2431, 7, 80, 2, 2, 2431, 2432, 7, 87, 2, 2, 2432, 2433, 7, 78, 2, 2, 2433, 2434, 7, 78, 2, 2, 2434, 502, 3, 2, 2, 2, 2435, 2436, 7, 80, 2, 2, 2436, 2437, 7, 87, 2, 2, 2437, 2438, 7, 78, 2, 2, 2438, 2439, 7, 78, 2, 2, 2439, 2440, 7, 75, 2, 2, 2440, 2441, 7, 72, 2, 2, 2441, 504, 3, 2, 2, 2, 2442, 2443, 7, 75, 2, 2, 2443, 2444, 7, 72, 2, 2, 2444, 506, 3, 2, 2, 2, 2445, 2446, 7, 86, 2, 2, 2446, 2447, 7, 91, 2, 2, 2447, 2448, 7, 82, 2, 2, 2448, 2449, 7, 71, 2, 2, 2449, 2450, 7, 81, 2, 2, 2450, 2451, 7, 72, 2, 2, 2451, 508, 3, 2, 2, 2, 2452, 2453, 7, 79, 2, 2, 2453, 2454, 7, 67, 2, 2, 2454, 2455, 7, 86, 2, 2, 2455, 2456, 7, 69, 2, 2, 2456, 2457, 7, 74, 2, 2, 2457, 510, 3, 2, 2, 2, 2458, 2459, 7, 79, 2, 2, 2459, 2460, 7, 67, 2, 2, 2460, 2461, 7, 86, 2, 2, 2461, 2462, 7, 69, 2, 2, 2462, 2463, 7, 74, 2, 2, 2463, 2464, 7, 97, 2, 2, 2464, 2465, 7, 82, 2, 2, 2465, 2466, 7, 74, 2, 2, 2466, 2467, 7, 84, 2, 2, 2467, 2468, 7, 67, 2, 2, 2468, 2469, 7, 85, 2, 2, 2469, 2470, 7, 71, 2, 2, 2470, 512, 3, 2, 2, 2, 2471, 2472, 7, 79, 2, 2, 2472, 2473, 7, 67, 2, 2, 2473, 2474, 7, 86, 2, 2, 2474, 2475, 7, 69, 2, 2, 2475, 2476, 7, 74, 2, 2, 2476, 2477, 7, 97, 2, 2, 2477, 2478, 7, 82, 2, 2, 2478, 2479, 7, 74, 2, 2, 2479, 2480, 7, 84, 2, 2, 2480, 2481, 7, 67, 2, 2, 2481, 2482, 7, 85, 2, 2, 2482, 2483, 7, 71, 2, 2, 2483, 2484, 7, 97, 2, 2, 2484, 2485, 7, 82, 2, 2, 2485, 2486, 7, 84, 2, 2, 2486, 2487, 7, 71, 2, 2, 2487, 2488, 7, 72, 2, 2, 2488, 2489, 7, 75, 2, 2, 2489, 2490, 7, 90, 2, 2, 2490, 514, 3, 2, 2, 2, 2491, 2492, 7, 79, 2, 2, 2492, 2493, 7, 67, 2, 2, 2493, 2494, 7, 86, 2, 2, 2494, 2495, 7, 69, 2, 2, 2495, 2496, 7, 74, 2, 2, 2496, 2497, 7, 97, 2, 2, 2497, 2498, 7, 68, 2, 2, 2498, 2499, 7, 81, 2, 2, 2499, 2500, 7, 81, 2, 2, 2500, 2501, 7, 78, 2, 2, 2501, 2502, 7, 97, 2, 2, 2502, 2503, 7, 82, 2, 2, 2503, 2504, 7, 84, 2, 2, 2504, 2505, 7, 71, 2, 2, 2505, 2506, 7, 72, 2, 2, 2506, 2507, 7, 75, 2, 2, 2507, 2508, 7, 90, 2, 2, 2508, 516, 3, 2, 2, 2, 2509, 2510, 7, 85, 2, 2, 2510, 2511, 7, 75, 2, 2, 2511, 2512, 7, 79, 2, 2, 2512, 2513, 7, 82, 2, 2, 2513, 2514, 7, 78, 2, 2, 2514, 2515, 7, 71, 2, 2, 2515, 2516, 7, 97, 2, 2, 2516, 2517, 7, 83, 2, 2, 2517, 2518, 7, 87, 2, 2, 2518, 2519, 7, 71, 2, 2, 2519, 2520, 7, 84, 2, 2, 2520, 2521, 7, 91, 2, 2, 2521, 2522, 7, 97, 2, 2, 2522, 2523, 7, 85, 2, 2, 2523, 2524, 7, 86, 2, 2, 2524, 2525, 7, 84, 2, 2, 2525, 2526, 7, 75, 2, 2, 2526, 2527, 7, 80, 2, 2, 2527, 2528, 7, 73, 2, 2, 2528, 518, 3, 2, 2, 2, 2529, 2530, 7, 79, 2, 2, 2530, 2531, 7, 87, 2, 2, 2531, 2532, 7, 78, 2, 2, 2532, 2533, 7, 86, 2, 2, 2533, 2534, 7, 75, 2, 2, 2534, 2535, 7, 97, 2, 2, 2535, 2536, 7, 79, 2, 2, 2536, 2537, 7, 67, 2, 2, 2537, 2538, 7, 86, 2, 2, 2538, 2539, 7, 69, 2, 2, 2539, 2540, 7, 74, 2, 2, 2540, 520, 3, 2, 2, 2, 2541, 2542, 7, 83, 2, 2, 2542, 2543, 7, 87, 2, 2, 2543, 2544, 7, 71, 2, 2, 2544, 2545, 7, 84, 2, 2, 2545, 2546, 7, 91, 2, 2, 2546, 2547, 7, 97, 2, 2, 2547, 2548, 7, 85, 2, 2, 2548, 2549, 7, 86, 2, 2, 2549, 2550, 7, 84, 2, 2, 2550, 2551, 7, 75, 2, 2, 2551, 2552, 7, 80, 2, 2, 2552, 2553, 7, 73, 2, 2, 2553, 522, 3, 2, 2, 2, 2554, 2555, 7, 67, 2, 2, 2555, 2556, 7, 78, 2, 2, 2556, 2557, 7, 78, 2, 2, 2557, 2558, 7, 81, 2, 2, 2558, 2559, 7, 89, 2, 2, 2559, 2560, 7, 97, 2, 2, 2560, 2561, 7, 78, 2, 2, 2561, 2562, 7, 71, 2, 2, 2562, 2563, 7, 67, 2, 2, 2563, 2564, 7, 70, 2, 2, 2564, 2565, 7, 75, 2, 2, 2565, 2566, 7, 80, 2, 2, 2566, 2567, 7, 73, 2, 2, 2567, 2568, 7, 97, 2, 2, 2568, 2569, 7, 89, 2, 2, 2569, 2570, 7, 75, 2, 2, 2570, 2571, 7, 78, 2, 2, 2571, 2572, 7, 70, 2, 2, 2572, 2573, 7, 69, 2, 2, 2573, 2574, 7, 67, 2, 2, 2574, 2575, 7, 84, 2, 2, 2575, 2576, 7, 70, 2, 2, 2576, 524, 3, 2, 2, 2, 2577, 2578, 7, 67, 2, 2, 2578, 2579, 7, 80, 2, 2, 2579, 2580, 7, 67, 2, 2, 2580, 2581, 7, 78, 2, 2, 2581, 2582, 7, 91, 2, 2, 2582, 2583, 7, 92, 2, 2, 2583, 2584, 7, 71, 2, 2, 2584, 2585, 7, 97, 2, 2, 2585, 2586, 7, 89, 2, 2, 2586, 2587, 7, 75, 2, 2, 2587, 2588, 7, 78, 2, 2, 2588, 2589, 7, 70, 2, 2, 2589, 2590, 7, 69, 2, 2, 2590, 2591, 7, 67, 2, 2, 2591, 2592, 7, 84, 2, 2, 2592, 2593, 7, 70, 2, 2, 2593, 526, 3, 2, 2, 2, 2594, 2595, 7, 67, 2, 2, 2595, 2596, 7, 80, 2, 2, 2596, 2597, 7, 67, 2, 2, 2597, 2598, 7, 78, 2, 2, 2598, 2599, 7, 91, 2, 2, 2599, 2600, 7, 92, 2, 2, 2600, 2601, 7, 71, 2, 2, 2601, 2602, 7, 84, 2, 2, 2602, 528, 3, 2, 2, 2, 2603, 2604, 7, 67, 2, 2, 2604, 2605, 7, 87, 2, 2, 2605, 2606, 7, 86, 2, 2, 2606, 2607, 7, 81, 2, 2, 2607, 2608, 7, 97, 2, 2, 2608, 2609, 7, 73, 2, 2, 2609, 2610, 7, 71, 2, 2, 2610, 2611, 7, 80, 2, 2, 2611, 2612, 7, 71, 2, 2, 2612, 2613, 7, 84, 2, 2, 2613, 2614, 7, 67, 2, 2, 2614, 2615, 7, 86, 2, 2, 2615, 2616, 7, 71, 2, 2, 2616, 2617, 7, 97, 2, 2, 2617, 2618, 7, 85, 2, 2, 2618, 2619, 7, 91, 2, 2, 2619, 2620, 7, 80, 2, 2, 2620, 2621, 7, 81, 2, 2, 2621, 2622, 7, 80, 2, 2, 2622, 2623, 7, 91, 2, 2, 2623, 2624, 7, 79, 2, 2, 2624, 2625, 7, 85, 2, 2, 2625, 2626, 7, 97, 2, 2, 2626, 2627, 7, 82, 2, 2, 2627, 2628, 7, 74, 2, 2, 2628, 2629, 7, 84, 2, 2, 2629, 2630, 7, 67, 2, 2, 2630, 2631, 7, 85, 2, 2, 2631, 2632, 7, 71, 2, 2, 2632, 2633, 7, 97, 2, 2, 2633, 2634, 7, 83, 2, 2, 2634, 2635, 7, 87, 2, 2, 2635, 2636, 7, 71, 2, 2, 2636, 2637, 7, 84, 2, 2, 2637, 2638, 7, 91, 2, 2, 2638, 530, 3, 2, 2, 2, 2639, 2640, 7, 68, 2, 2, 2640, 2641, 7, 81, 2, 2, 2641, 2642, 7, 81, 2, 2, 2642, 2643, 7, 85, 2, 2, 2643, 2644, 7, 86, 2, 2, 2644, 532, 3, 2, 2, 2, 2645, 2646, 7, 69, 2, 2, 2646, 2647, 7, 87, 2, 2, 2647, 2648, 7, 86, 2, 2, 2648, 2649, 7, 81, 2, 2, 2649, 2650, 7, 72, 2, 2, 2650, 2651, 7, 72, 2, 2, 2651, 2652, 7, 97, 2, 2, 2652, 2653, 7, 72, 2, 2, 2653, 2654, 7, 84, 2, 2, 2654, 2655, 7, 71, 2, 2, 2655, 2656, 7, 83, 2, 2, 2656, 2657, 7, 87, 2, 2, 2657, 2658, 7, 71, 2, 2, 2658, 2659, 7, 80, 2, 2, 2659, 2660, 7, 69, 2, 2, 2660, 2661, 7, 91, 2, 2, 2661, 534, 3, 2, 2, 2, 2662, 2663, 7, 70, 2, 2, 2663, 2664, 7, 71, 2, 2, 2664, 2665, 7, 72, 2, 2, 2665, 2666, 7, 67, 2, 2, 2666, 2667, 7, 87, 2, 2, 2667, 2668, 7, 78, 2, 2, 2668, 2669, 7, 86, 2, 2, 2669, 2670, 7, 97, 2, 2, 2670, 2671, 7, 72, 2, 2, 2671, 2672, 7, 75, 2, 2, 2672, 2673, 7, 71, 2, 2, 2673, 2674, 7, 78, 2, 2, 2674, 2675, 7, 70, 2, 2, 2675, 536, 3, 2, 2, 2, 2676, 2677, 7, 70, 2, 2, 2677, 2678, 7, 71, 2, 2, 2678, 2679, 7, 72, 2, 2, 2679, 2680, 7, 67, 2, 2, 2680, 2681, 7, 87, 2, 2, 2681, 2682, 7, 78, 2, 2, 2682, 2683, 7, 86, 2, 2, 2683, 2684, 7, 97, 2, 2, 2684, 2685, 7, 81, 2, 2, 2685, 2686, 7, 82, 2, 2, 2686, 2687, 7, 71, 2, 2, 2687, 2688, 7, 84, 2, 2, 2688, 2689, 7, 67, 2, 2, 2689, 2690, 7, 86, 2, 2, 2690, 2691, 7, 81, 2, 2, 2691, 2692, 7, 84, 2, 2, 2692, 538, 3, 2, 2, 2, 2693, 2694, 7, 71, 2, 2, 2694, 2695, 7, 80, 2, 2, 2695, 2696, 7, 67, 2, 2, 2696, 2697, 7, 68, 2, 2, 2697, 2698, 7, 78, 2, 2, 2698, 2699, 7, 71, 2, 2, 2699, 2700, 7, 97, 2, 2, 2700, 2701, 7, 82, 2, 2, 2701, 2702, 7, 81, 2, 2, 2702, 2703, 7, 85, 2, 2, 2703, 2704, 7, 75, 2, 2, 2704, 2705, 7, 86, 2, 2, 2705, 2706, 7, 75, 2, 2, 2706, 2707, 7, 81, 2, 2, 2707, 2708, 7, 80, 2, 2, 2708, 2709, 7, 97, 2, 2, 2709, 2710, 7, 75, 2, 2, 2710, 2711, 7, 80, 2, 2, 2711, 2712, 7, 69, 2, 2, 2712, 2713, 7, 84, 2, 2, 2713, 2714, 7, 71, 2, 2, 2714, 2715, 7, 79, 2, 2, 2715, 2716, 7, 71, 2, 2, 2716, 2717, 7, 80, 2, 2, 2717, 2718, 7, 86, 2, 2, 2718, 2719, 7, 85, 2, 2, 2719, 540, 3, 2, 2, 2, 2720, 2721, 7, 71, 2, 2, 2721, 2722, 7, 85, 2, 2, 2722, 2723, 7, 69, 2, 2, 2723, 2724, 7, 67, 2, 2, 2724, 2725, 7, 82, 2, 2, 2725, 2726, 7, 71, 2, 2, 2726, 542, 3, 2, 2, 2, 2727, 2728, 7, 72, 2, 2, 2728, 2729, 7, 78, 2, 2, 2729, 2730, 7, 67, 2, 2, 2730, 2731, 7, 73, 2, 2, 2731, 2732, 7, 85, 2, 2, 2732, 544, 3, 2, 2, 2, 2733, 2734, 7, 72, 2, 2, 2734, 2735, 7, 87, 2, 2, 2735, 2736, 7, 92, 2, 2, 2736, 2737, 7, 92, 2, 2, 2737, 2738, 7, 91, 2, 2, 2738, 2739, 7, 97, 2, 2, 2739, 2740, 7, 79, 2, 2, 2740, 2741, 7, 67, 2, 2, 2741, 2742, 7, 90, 2, 2, 2742, 2743, 7, 97, 2, 2, 2743, 2744, 7, 71, 2, 2, 2744, 2745, 7, 90, 2, 2, 2745, 2746, 7, 82, 2, 2, 2746, 2747, 7, 67, 2, 2, 2747, 2748, 7, 80, 2, 2, 2748, 2749, 7, 85, 2, 2, 2749, 2750, 7, 75, 2, 2, 2750, 2751, 7, 81, 2, 2, 2751, 2752, 7, 80, 2, 2, 2752, 2753, 7, 85, 2, 2, 2753, 546, 3, 2, 2, 2, 2754, 2755, 7, 72, 2, 2, 2755, 2756, 7, 87, 2, 2, 2756, 2757, 7, 92, 2, 2, 2757, 2758, 7, 92, 2, 2, 2758, 2759, 7, 91, 2, 2, 2759, 2760, 7, 97, 2, 2, 2760, 2761, 7, 82, 2, 2, 2761, 2762, 7, 84, 2, 2, 2762, 2763, 7, 71, 2, 2, 2763, 2764, 7, 72, 2, 2, 2764, 2765, 7, 75, 2, 2, 2765, 2766, 7, 90, 2, 2, 2766, 2767, 7, 97, 2, 2, 2767, 2768, 7, 78, 2, 2, 2768, 2769, 7, 71, 2, 2, 2769, 2770, 7, 80, 2, 2, 2770, 2771, 7, 73, 2, 2, 2771, 2772, 7, 86, 2, 2, 2772, 2773, 7, 74, 2, 2, 2773, 548, 3, 2, 2, 2, 2774, 2775, 7, 72, 2, 2, 2775, 2776, 7, 87, 2, 2, 2776, 2777, 7, 92, 2, 2, 2777, 2778, 7, 92, 2, 2, 2778, 2779, 7, 91, 2, 2, 2779, 2780, 7, 97, 2, 2, 2780, 2781, 7, 86, 2, 2, 2781, 2782, 7, 84, 2, 2, 2782, 2783, 7, 67, 2, 2, 2783, 2784, 7, 80, 2, 2, 2784, 2785, 7, 85, 2, 2, 2785, 2786, 7, 82, 2, 2, 2786, 2787, 7, 81, 2, 2, 2787, 2788, 7, 85, 2, 2, 2788, 2789, 7, 75, 2, 2, 2789, 2790, 7, 86, 2, 2, 2790, 2791, 7, 75, 2, 2, 2791, 2792, 7, 81, 2, 2, 2792, 2793, 7, 80, 2, 2, 2793, 2794, 7, 85, 2, 2, 2794, 550, 3, 2, 2, 2, 2795, 2796, 7, 72, 2, 2, 2796, 2797, 7, 87, 2, 2, 2797, 2798, 7, 92, 2, 2, 2798, 2799, 7, 92, 2, 2, 2799, 2800, 7, 91, 2, 2, 2800, 2801, 7, 97, 2, 2, 2801, 2802, 7, 84, 2, 2, 2802, 2803, 7, 71, 2, 2, 2803, 2804, 7, 89, 2, 2, 2804, 2805, 7, 84, 2, 2, 2805, 2806, 7, 75, 2, 2, 2806, 2807, 7, 86, 2, 2, 2807, 2808, 7, 71, 2, 2, 2808, 552, 3, 2, 2, 2, 2809, 2810, 7, 72, 2, 2, 2810, 2811, 7, 87, 2, 2, 2811, 2812, 7, 92, 2, 2, 2812, 2813, 7, 92, 2, 2, 2813, 2814, 7, 75, 2, 2, 2814, 2815, 7, 80, 2, 2, 2815, 2816, 7, 71, 2, 2, 2816, 2817, 7, 85, 2, 2, 2817, 2818, 7, 85, 2, 2, 2818, 554, 3, 2, 2, 2, 2819, 2820, 7, 78, 2, 2, 2820, 2821, 7, 71, 2, 2, 2821, 2822, 7, 80, 2, 2, 2822, 2823, 7, 75, 2, 2, 2823, 2824, 7, 71, 2, 2, 2824, 2825, 7, 80, 2, 2, 2825, 2826, 7, 86, 2, 2, 2826, 556, 3, 2, 2, 2, 2827, 2828, 7, 78, 2, 2, 2828, 2829, 7, 81, 2, 2, 2829, 2830, 7, 89, 2, 2, 2830, 2831, 7, 97, 2, 2, 2831, 2832, 7, 72, 2, 2, 2832, 2833, 7, 84, 2, 2, 2833, 2834, 7, 71, 2, 2, 2834, 2835, 7, 83, 2, 2, 2835, 2836, 7, 97, 2, 2, 2836, 2837, 7, 81, 2, 2, 2837, 2838, 7, 82, 2, 2, 2838, 2839, 7, 71, 2, 2, 2839, 2840, 7, 84, 2, 2, 2840, 2841, 7, 67, 2, 2, 2841, 2842, 7, 86, 2, 2, 2842, 2843, 7, 81, 2, 2, 2843, 2844, 7, 84, 2, 2, 2844, 558, 3, 2, 2, 2, 2845, 2846, 7, 79, 2, 2, 2846, 2847, 7, 67, 2, 2, 2847, 2848, 7, 90, 2, 2, 2848, 2849, 7, 97, 2, 2, 2849, 2850, 7, 70, 2, 2, 2850, 2851, 7, 71, 2, 2, 2851, 2852, 7, 86, 2, 2, 2852, 2853, 7, 71, 2, 2, 2853, 2854, 7, 84, 2, 2, 2854, 2855, 7, 79, 2, 2, 2855, 2856, 7, 75, 2, 2, 2856, 2857, 7, 80, 2, 2, 2857, 2858, 7, 75, 2, 2, 2858, 2859, 7, 92, 2, 2, 2859, 2860, 7, 71, 2, 2, 2860, 2861, 7, 70, 2, 2, 2861, 2862, 7, 97, 2, 2, 2862, 2863, 7, 85, 2, 2, 2863, 2864, 7, 86, 2, 2, 2864, 2865, 7, 67, 2, 2, 2865, 2866, 7, 86, 2, 2, 2866, 2867, 7, 71, 2, 2, 2867, 2868, 7, 85, 2, 2, 2868, 560, 3, 2, 2, 2, 2869, 2870, 7, 79, 2, 2, 2870, 2871, 7, 67, 2, 2, 2871, 2872, 7, 90, 2, 2, 2872, 2873, 7, 97, 2, 2, 2873, 2874, 7, 71, 2, 2, 2874, 2875, 7, 90, 2, 2, 2875, 2876, 7, 82, 2, 2, 2876, 2877, 7, 67, 2, 2, 2877, 2878, 7, 80, 2, 2, 2878, 2879, 7, 85, 2, 2, 2879, 2880, 7, 75, 2, 2, 2880, 2881, 7, 81, 2, 2, 2881, 2882, 7, 80, 2, 2, 2882, 2883, 7, 85, 2, 2, 2883, 562, 3, 2, 2, 2, 2884, 2885, 7, 79, 2, 2, 2885, 2886, 7, 75, 2, 2, 2886, 2887, 7, 80, 2, 2, 2887, 2888, 7, 75, 2, 2, 2888, 2889, 7, 79, 2, 2, 2889, 2890, 7, 87, 2, 2, 2890, 2891, 7, 79, 2, 2, 2891, 2892, 7, 97, 2, 2, 2892, 2893, 7, 85, 2, 2, 2893, 2894, 7, 74, 2, 2, 2894, 2895, 7, 81, 2, 2, 2895, 2896, 7, 87, 2, 2, 2896, 2897, 7, 78, 2, 2, 2897, 2898, 7, 70, 2, 2, 2898, 2899, 7, 97, 2, 2, 2899, 2900, 7, 79, 2, 2, 2900, 2901, 7, 67, 2, 2, 2901, 2902, 7, 86, 2, 2, 2902, 2903, 7, 69, 2, 2, 2903, 2904, 7, 74, 2, 2, 2904, 564, 3, 2, 2, 2, 2905, 2906, 7, 81, 2, 2, 2906, 2907, 7, 82, 2, 2, 2907, 2908, 7, 71, 2, 2, 2908, 2909, 7, 84, 2, 2, 2909, 2910, 7, 67, 2, 2, 2910, 2911, 7, 86, 2, 2, 2911, 2912, 7, 81, 2, 2, 2912, 2913, 7, 84, 2, 2, 2913, 566, 3, 2, 2, 2, 2914, 2915, 7, 82, 2, 2, 2915, 2916, 7, 74, 2, 2, 2916, 2917, 7, 84, 2, 2, 2917, 2918, 7, 67, 2, 2, 2918, 2919, 7, 85, 2, 2, 2919, 2920, 7, 71, 2, 2, 2920, 2921, 7, 97, 2, 2, 2921, 2922, 7, 85, 2, 2, 2922, 2923, 7, 78, 2, 2, 2923, 2924, 7, 81, 2, 2, 2924, 2925, 7, 82, 2, 2, 2925, 568, 3, 2, 2, 2, 2926, 2927, 7, 82, 2, 2, 2927, 2928, 7, 84, 2, 2, 2928, 2929, 7, 71, 2, 2, 2929, 2930, 7, 72, 2, 2, 2930, 2931, 7, 75, 2, 2, 2931, 2932, 7, 90, 2, 2, 2932, 2933, 7, 97, 2, 2, 2933, 2934, 7, 78, 2, 2, 2934, 2935, 7, 71, 2, 2, 2935, 2936, 7, 80, 2, 2, 2936, 2937, 7, 73, 2, 2, 2937, 2938, 7, 86, 2, 2, 2938, 2939, 7, 74, 2, 2, 2939, 570, 3, 2, 2, 2, 2940, 2941, 7, 83, 2, 2, 2941, 2942, 7, 87, 2, 2, 2942, 2943, 7, 81, 2, 2, 2943, 2944, 7, 86, 2, 2, 2944, 2945, 7, 71, 2, 2, 2945, 2946, 7, 97, 2, 2, 2946, 2947, 7, 67, 2, 2, 2947, 2948, 7, 80, 2, 2, 2948, 2949, 7, 67, 2, 2, 2949, 2950, 7, 78, 2, 2, 2950, 2951, 7, 91, 2, 2, 2951, 2952, 7, 92, 2, 2, 2952, 2953, 7, 71, 2, 2, 2953, 2954, 7, 84, 2, 2, 2954, 572, 3, 2, 2, 2, 2955, 2956, 7, 83, 2, 2, 2956, 2957, 7, 87, 2, 2, 2957, 2958, 7, 81, 2, 2, 2958, 2959, 7, 86, 2, 2, 2959, 2960, 7, 71, 2, 2, 2960, 2961, 7, 97, 2, 2, 2961, 2962, 7, 72, 2, 2, 2962, 2963, 7, 75, 2, 2, 2963, 2964, 7, 71, 2, 2, 2964, 2965, 7, 78, 2, 2, 2965, 2966, 7, 70, 2, 2, 2966, 2967, 7, 97, 2, 2, 2967, 2968, 7, 85, 2, 2, 2968, 2969, 7, 87, 2, 2, 2969, 2970, 7, 72, 2, 2, 2970, 2971, 7, 72, 2, 2, 2971, 2972, 7, 75, 2, 2, 2972, 2973, 7, 90, 2, 2, 2973, 574, 3, 2, 2, 2, 2974, 2975, 7, 84, 2, 2, 2975, 2976, 7, 71, 2, 2, 2976, 2977, 7, 89, 2, 2, 2977, 2978, 7, 84, 2, 2, 2978, 2979, 7, 75, 2, 2, 2979, 2980, 7, 86, 2, 2, 2980, 2981, 7, 71, 2, 2, 2981, 576, 3, 2, 2, 2, 2982, 2983, 7, 85, 2, 2, 2983, 2984, 7, 78, 2, 2, 2984, 2985, 7, 81, 2, 2, 2985, 2986, 7, 82, 2, 2, 2986, 578, 3, 2, 2, 2, 2987, 2988, 7, 86, 2, 2, 2988, 2989, 7, 75, 2, 2, 2989, 2990, 7, 71, 2, 2, 2990, 2991, 7, 97, 2, 2, 2991, 2992, 7, 68, 2, 2, 2992, 2993, 7, 84, 2, 2, 2993, 2994, 7, 71, 2, 2, 2994, 2995, 7, 67, 2, 2, 2995, 2996, 7, 77, 2, 2, 2996, 2997, 7, 71, 2, 2, 2997, 2998, 7, 84, 2, 2, 2998, 580, 3, 2, 2, 2, 2999, 3000, 7, 86, 2, 2, 3000, 3001, 7, 91, 2, 2, 3001, 3002, 7, 82, 2, 2, 3002, 3003, 7, 71, 2, 2, 3003, 582, 3, 2, 2, 2, 3004, 3005, 7, 92, 2, 2, 3005, 3006, 7, 71, 2, 2, 3006, 3007, 7, 84, 2, 2, 3007, 3008, 7, 81, 2, 2, 3008, 3009, 7, 97, 2, 2, 3009, 3010, 7, 86, 2, 2, 3010, 3011, 7, 71, 2, 2, 3011, 3012, 7, 84, 2, 2, 3012, 3013, 7, 79, 2, 2, 3013, 3014, 7, 85, 2, 2, 3014, 3015, 7, 97, 2, 2, 3015, 3016, 7, 83, 2, 2, 3016, 3017, 7, 87, 2, 2, 3017, 3018, 7, 71, 2, 2, 3018, 3019, 7, 84, 2, 2, 3019, 3020, 7, 91, 2, 2, 3020, 584, 3, 2, 2, 2, 3021, 3022, 7, 85, 2, 2, 3022, 3023, 7, 82, 2, 2, 3023, 3024, 7, 67, 2, 2, 3024, 3025, 7, 80, 2, 2, 3025, 586, 3, 2, 2, 2, 3026, 3027, 7, 79, 2, 2, 3027, 3028, 7, 85, 2, 2, 3028, 588, 3, 2, 2, 2, 3029, 3030, 7, 85, 2, 2, 3030, 590, 3, 2, 2, 2, 3031, 3032, 7, 79, 2, 2, 3032, 592, 3, 2, 2, 2, 3033, 3034, 7, 74, 2, 2, 3034, 594, 3, 2, 2, 2, 3035, 3036, 7, 89, 2, 2, 3036, 596, 3, 2, 2, 2, 3037, 3038, 7, 83, 2, 2, 3038, 598, 3, 2, 2, 2, 3039, 3040, 7, 91, 2, 2, 3040, 600, 3, 2, 2, 2, 3041, 3042, 5, 609, 305, 2, 3042, 602, 3, 2, 2, 2, 3043, 3045, 5, 619, 310, 2, 3044, 3043, 3, 2, 2, 2, 3045, 3046, 3, 2, 2, 2, 3046, 3044, 3, 2, 2, 2, 3046, 3047, 3, 2, 2, 2, 3047, 604, 3, 2, 2, 2, 3048, 3050, 5, 619, 310, 2, 3049, 3048, 3, 2, 2, 2, 3050, 3051, 3, 2, 2, 2, 3051, 3049, 3, 2, 2, 2, 3051, 3052, 3, 2, 2, 2, 3052, 3054, 3, 2, 2, 2, 3053, 3049, 3, 2, 2, 2, 3053, 3054, 3, 2, 2, 2, 3054, 3055, 3, 2, 2, 2, 3055, 3057, 7, 48, 2, 2, 3056, 3058, 5, 619, 310, 2, 3057, 3056, 3, 2, 2, 2, 3058, 3059, 3, 2, 2, 2, 3059, 3057, 3, 2, 2, 2, 3059, 3060, 3, 2, 2, 2, 3060, 606, 3, 2, 2, 2, 3061, 3063, 9, 2, 2, 2, 3062, 3064, 9, 3, 2, 2, 3063, 3062, 3, 2, 2, 2, 3064, 3065, 3, 2, 2, 2, 3065, 3063, 3, 2, 2, 2, 3065, 3066, 3, 2, 2, 2, 3066, 3068, 3, 2, 2, 2, 3067, 3061, 3, 2, 2, 2, 3068, 3071, 3, 2, 2, 2, 3069, 3067, 3, 2, 2, 2, 3069, 3070, 3, 2, 2, 2, 3070, 608, 3, 2, 2, 2, 3071, 3069, 3, 2, 2, 2, 3072, 3074, 9, 4, 2, 2, 3073, 3072, 3, 2, 2, 2, 3074, 3075, 3, 2, 2, 2, 3075, 3076, 3, 2, 2, 2, 3075, 3073, 3, 2, 2, 2, 3076, 3080, 3, 2, 2, 2, 3077, 3079, 9, 5, 2, 2, 3078, 3077, 3, 2, 2, 2, 3079, 3082, 3, 2, 2, 2, 3080, 3078, 3, 2, 2, 2, 3080, 3081, 3, 2, 2, 2, 3081, 610, 3, 2, 2, 2, 3082, 3080, 3, 2, 2, 2, 3083, 3084, 5, 609, 305, 2, 3084, 3085, 5, 607, 304, 2, 3085, 612, 3, 2, 2, 2, 3086, 3094, 7, 36, 2, 2, 3087, 3088, 7, 94, 2, 2, 3088, 3093, 11, 2, 2, 2, 3089, 3090, 7, 36, 2, 2, 3090, 3093, 7, 36, 2, 2, 3091, 3093, 10, 6, 2, 2, 3092, 3087, 3, 2, 2, 2, 3092, 3089, 3, 2, 2, 2, 3092, 3091, 3, 2, 2, 2, 3093, 3096, 3, 2, 2, 2, 3094, 3092, 3, 2, 2, 2, 3094, 3095, 3, 2, 2, 2, 3095, 3097, 3, 2, 2, 2, 3096, 3094, 3, 2, 2, 2, 3097, 3098, 7, 36, 2, 2, 3098, 614, 3, 2, 2, 2, 3099, 3107, 7, 41, 2, 2, 3100, 3101, 7, 94, 2, 2, 3101, 3106, 11, 2, 2, 2, 3102, 3103, 7, 41, 2, 2, 3103, 3106, 7, 41, 2, 2, 3104, 3106, 10, 7, 2, 2, 3105, 3100, 3, 2, 2, 2, 3105, 3102, 3, 2, 2, 2, 3105, 3104, 3, 2, 2, 2, 3106, 3109, 3, 2, 2, 2, 3107, 3105, 3, 2, 2, 2, 3107, 3108, 3, 2, 2, 2, 3108, 3110, 3, 2, 2, 2, 3109, 3107, 3, 2, 2, 2, 3110, 3111, 7, 41, 2, 2, 3111, 616, 3, 2, 2, 2, 3112, 3120, 7, 98, 2, 2, 3113, 3114, 7, 94, 2, 2, 3114, 3119, 11, 2, 2, 2, 3115, 3116, 7, 98, 2, 2, 3116, 3119, 7, 98, 2, 2, 3117, 3119, 10, 8, 2, 2, 3118, 3113, 3, 2, 2, 2, 3118, 3115, 3, 2, 2, 2, 3118, 3117, 3, 2, 2, 2, 3119, 3122, 3, 2, 2, 2, 3120, 3118, 3, 2, 2, 2, 3120, 3121, 3, 2, 2, 2, 3121, 3123, 3, 2, 2, 2, 3122, 3120, 3, 2, 2, 2, 3123, 3124, 7, 98, 2, 2, 3124, 618, 3, 2, 2, 2, 3125, 3126, 9, 9, 2, 2, 3126, 620, 3, 2, 2, 2, 3127, 3128, 11, 2, 2, 2, 3128, 3129, 3, 2, 2, 2, 3129, 3130, 8, 311, 2, 2, 3130, 622, 3, 2, 2, 2, 17, 2, 3046, 3051, 3053, 3059, 3065, 3069, 3075, 3080, 3092, 3094, 3105, 3107, 3118, 3120, 3, 2, 5, 2] \ No newline at end of file diff --git a/dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLLexer.tokens b/dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLLexer.tokens new file mode 100644 index 000000000..303e66c7a --- /dev/null +++ b/dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLLexer.tokens @@ -0,0 +1,603 @@ +SEARCH=1 +DESCRIBE=2 +SHOW=3 +FROM=4 +WHERE=5 +FIELDS=6 +RENAME=7 +STATS=8 +DEDUP=9 +SORT=10 +EVAL=11 +HEAD=12 +TOP=13 +RARE=14 +PARSE=15 +METHOD=16 +REGEX=17 +PUNCT=18 +GROK=19 +PATTERN=20 +PATTERNS=21 +NEW_FIELD=22 +KMEANS=23 +AD=24 +ML=25 +AS=26 +BY=27 +SOURCE=28 +INDEX=29 +D=30 +DESC=31 +CATALOGS=32 +SORTBY=33 +AUTO=34 +STR=35 +IP=36 +NUM=37 +KEEPEMPTY=38 +CONSECUTIVE=39 +DEDUP_SPLITVALUES=40 +PARTITIONS=41 +ALLNUM=42 +DELIM=43 +CENTROIDS=44 +ITERATIONS=45 +DISTANCE_TYPE=46 +NUMBER_OF_TREES=47 +SHINGLE_SIZE=48 +SAMPLE_SIZE=49 +OUTPUT_AFTER=50 +TIME_DECAY=51 +ANOMALY_RATE=52 +CATEGORY_FIELD=53 +TIME_FIELD=54 +TIME_ZONE=55 +TRAINING_DATA_SIZE=56 +ANOMALY_SCORE_THRESHOLD=57 +CASE=58 +IN=59 +NOT=60 +OR=61 +AND=62 +XOR=63 +TRUE=64 +FALSE=65 +REGEXP=66 +DATETIME=67 +INTERVAL=68 +MICROSECOND=69 +MILLISECOND=70 +SECOND=71 +MINUTE=72 +HOUR=73 +DAY=74 +WEEK=75 +MONTH=76 +QUARTER=77 +YEAR=78 +SECOND_MICROSECOND=79 +MINUTE_MICROSECOND=80 +MINUTE_SECOND=81 +HOUR_MICROSECOND=82 +HOUR_SECOND=83 +HOUR_MINUTE=84 +DAY_MICROSECOND=85 +DAY_SECOND=86 +DAY_MINUTE=87 +DAY_HOUR=88 +YEAR_MONTH=89 +CONVERT_TZ=90 +DATAMODEL=91 +LOOKUP=92 +SAVEDSEARCH=93 +INT=94 +INTEGER=95 +DOUBLE=96 +LONG=97 +FLOAT=98 +STRING=99 +BOOLEAN=100 +PIPE=101 +COMMA=102 +DOT=103 +EQUAL=104 +GREATER=105 +LESS=106 +NOT_GREATER=107 +NOT_LESS=108 +NOT_EQUAL=109 +PLUS=110 +MINUS=111 +STAR=112 +DIVIDE=113 +MODULE=114 +EXCLAMATION_SYMBOL=115 +COLON=116 +LT_PRTHS=117 +RT_PRTHS=118 +LT_SQR_PRTHS=119 +RT_SQR_PRTHS=120 +SINGLE_QUOTE=121 +DOUBLE_QUOTE=122 +BACKTICK=123 +BIT_NOT_OP=124 +BIT_AND_OP=125 +BIT_XOR_OP=126 +AVG=127 +COUNT=128 +DISTINCT_COUNT=129 +ESTDC=130 +ESTDC_ERROR=131 +MAX=132 +MEAN=133 +MEDIAN=134 +MIN=135 +MODE=136 +RANGE=137 +STDEV=138 +STDEVP=139 +SUM=140 +SUMSQ=141 +VAR_SAMP=142 +VAR_POP=143 +STDDEV_SAMP=144 +STDDEV_POP=145 +PERCENTILE=146 +TAKE=147 +FIRST=148 +LAST=149 +LIST=150 +VALUES=151 +EARLIEST=152 +EARLIEST_TIME=153 +LATEST=154 +LATEST_TIME=155 +PER_DAY=156 +PER_HOUR=157 +PER_MINUTE=158 +PER_SECOND=159 +RATE=160 +SPARKLINE=161 +C=162 +DC=163 +ABS=164 +CEIL=165 +CEILING=166 +CONV=167 +CRC32=168 +E=169 +EXP=170 +FLOOR=171 +LN=172 +LOG=173 +LOG10=174 +LOG2=175 +MOD=176 +PI=177 +POW=178 +POWER=179 +RAND=180 +ROUND=181 +SIGN=182 +SQRT=183 +TRUNCATE=184 +ACOS=185 +ASIN=186 +ATAN=187 +ATAN2=188 +COS=189 +COT=190 +DEGREES=191 +RADIANS=192 +SIN=193 +TAN=194 +ADDDATE=195 +CURDATE=196 +CURRENT_DATE=197 +CURRENT_TIME=198 +CURRENT_TIMESTAMP=199 +CURTIME=200 +DATE=201 +DATE_ADD=202 +DATE_FORMAT=203 +DATE_SUB=204 +DAYNAME=205 +DAYOFMONTH=206 +DAYOFWEEK=207 +DAYOFYEAR=208 +FROM_DAYS=209 +LOCALTIME=210 +LOCALTIMESTAMP=211 +FROM_UNIXTIME=212 +MAKEDATE=213 +MAKETIME=214 +MONTHNAME=215 +NOW=216 +PERIOD_ADD=217 +PERIOD_DIFF=218 +SUBDATE=219 +SYSDATE=220 +TIME=221 +TIME_TO_SEC=222 +TIMESTAMP=223 +TO_DAYS=224 +UTC_DATE=225 +UTC_TIME=226 +UTC_TIMESTAMP=227 +UNIX_TIMESTAMP=228 +SUBSTR=229 +SUBSTRING=230 +LTRIM=231 +RTRIM=232 +TRIM=233 +TO=234 +LOWER=235 +UPPER=236 +CONCAT=237 +CONCAT_WS=238 +LENGTH=239 +STRCMP=240 +RIGHT=241 +LEFT=242 +ASCII=243 +LOCATE=244 +REPLACE=245 +CAST=246 +LIKE=247 +ISNULL=248 +ISNOTNULL=249 +IFNULL=250 +NULLIF=251 +IF=252 +TYPEOF=253 +MATCH=254 +MATCH_PHRASE=255 +MATCH_PHRASE_PREFIX=256 +MATCH_BOOL_PREFIX=257 +SIMPLE_QUERY_STRING=258 +MULTI_MATCH=259 +QUERY_STRING=260 +ALLOW_LEADING_WILDCARD=261 +ANALYZE_WILDCARD=262 +ANALYZER=263 +AUTO_GENERATE_SYNONYMS_PHRASE_QUERY=264 +BOOST=265 +CUTOFF_FREQUENCY=266 +DEFAULT_FIELD=267 +DEFAULT_OPERATOR=268 +ENABLE_POSITION_INCREMENTS=269 +ESCAPE=270 +FLAGS=271 +FUZZY_MAX_EXPANSIONS=272 +FUZZY_PREFIX_LENGTH=273 +FUZZY_TRANSPOSITIONS=274 +FUZZY_REWRITE=275 +FUZZINESS=276 +LENIENT=277 +LOW_FREQ_OPERATOR=278 +MAX_DETERMINIZED_STATES=279 +MAX_EXPANSIONS=280 +MINIMUM_SHOULD_MATCH=281 +OPERATOR=282 +PHRASE_SLOP=283 +PREFIX_LENGTH=284 +QUOTE_ANALYZER=285 +QUOTE_FIELD_SUFFIX=286 +REWRITE=287 +SLOP=288 +TIE_BREAKER=289 +TYPE=290 +ZERO_TERMS_QUERY=291 +SPAN=292 +MS=293 +S=294 +M=295 +H=296 +W=297 +Q=298 +Y=299 +ID=300 +INTEGER_LITERAL=301 +DECIMAL_LITERAL=302 +ID_DATE_SUFFIX=303 +DQUOTA_STRING=304 +SQUOTA_STRING=305 +BQUOTA_STRING=306 +ERROR_RECOGNITION=307 +'SEARCH'=1 +'DESCRIBE'=2 +'SHOW'=3 +'FROM'=4 +'WHERE'=5 +'FIELDS'=6 +'RENAME'=7 +'STATS'=8 +'DEDUP'=9 +'SORT'=10 +'EVAL'=11 +'HEAD'=12 +'TOP'=13 +'RARE'=14 +'PARSE'=15 +'METHOD'=16 +'REGEX'=17 +'PUNCT'=18 +'GROK'=19 +'PATTERN'=20 +'PATTERNS'=21 +'NEW_FIELD'=22 +'KMEANS'=23 +'AD'=24 +'ML'=25 +'AS'=26 +'BY'=27 +'SOURCE'=28 +'INDEX'=29 +'D'=30 +'DESC'=31 +'CATALOGS'=32 +'SORTBY'=33 +'AUTO'=34 +'STR'=35 +'IP'=36 +'NUM'=37 +'KEEPEMPTY'=38 +'CONSECUTIVE'=39 +'DEDUP_SPLITVALUES'=40 +'PARTITIONS'=41 +'ALLNUM'=42 +'DELIM'=43 +'CENTROIDS'=44 +'ITERATIONS'=45 +'DISTANCE_TYPE'=46 +'NUMBER_OF_TREES'=47 +'SHINGLE_SIZE'=48 +'SAMPLE_SIZE'=49 +'OUTPUT_AFTER'=50 +'TIME_DECAY'=51 +'ANOMALY_RATE'=52 +'CATEGORY_FIELD'=53 +'TIME_FIELD'=54 +'TIME_ZONE'=55 +'TRAINING_DATA_SIZE'=56 +'ANOMALY_SCORE_THRESHOLD'=57 +'CASE'=58 +'IN'=59 +'NOT'=60 +'OR'=61 +'AND'=62 +'XOR'=63 +'TRUE'=64 +'FALSE'=65 +'REGEXP'=66 +'DATETIME'=67 +'INTERVAL'=68 +'MICROSECOND'=69 +'MILLISECOND'=70 +'SECOND'=71 +'MINUTE'=72 +'HOUR'=73 +'DAY'=74 +'WEEK'=75 +'MONTH'=76 +'QUARTER'=77 +'YEAR'=78 +'SECOND_MICROSECOND'=79 +'MINUTE_MICROSECOND'=80 +'MINUTE_SECOND'=81 +'HOUR_MICROSECOND'=82 +'HOUR_SECOND'=83 +'HOUR_MINUTE'=84 +'DAY_MICROSECOND'=85 +'DAY_SECOND'=86 +'DAY_MINUTE'=87 +'DAY_HOUR'=88 +'YEAR_MONTH'=89 +'CONVERT_TZ'=90 +'DATAMODEL'=91 +'LOOKUP'=92 +'SAVEDSEARCH'=93 +'INT'=94 +'INTEGER'=95 +'DOUBLE'=96 +'LONG'=97 +'FLOAT'=98 +'STRING'=99 +'BOOLEAN'=100 +'|'=101 +','=102 +'.'=103 +'='=104 +'>'=105 +'<'=106 +'+'=110 +'-'=111 +'*'=112 +'/'=113 +'%'=114 +'!'=115 +':'=116 +'('=117 +')'=118 +'['=119 +']'=120 +'\''=121 +'"'=122 +'`'=123 +'~'=124 +'&'=125 +'^'=126 +'AVG'=127 +'COUNT'=128 +'DISTINCT_COUNT'=129 +'ESTDC'=130 +'ESTDC_ERROR'=131 +'MAX'=132 +'MEAN'=133 +'MEDIAN'=134 +'MIN'=135 +'MODE'=136 +'RANGE'=137 +'STDEV'=138 +'STDEVP'=139 +'SUM'=140 +'SUMSQ'=141 +'VAR_SAMP'=142 +'VAR_POP'=143 +'STDDEV_SAMP'=144 +'STDDEV_POP'=145 +'PERCENTILE'=146 +'TAKE'=147 +'FIRST'=148 +'LAST'=149 +'LIST'=150 +'VALUES'=151 +'EARLIEST'=152 +'EARLIEST_TIME'=153 +'LATEST'=154 +'LATEST_TIME'=155 +'PER_DAY'=156 +'PER_HOUR'=157 +'PER_MINUTE'=158 +'PER_SECOND'=159 +'RATE'=160 +'SPARKLINE'=161 +'C'=162 +'DC'=163 +'ABS'=164 +'CEIL'=165 +'CEILING'=166 +'CONV'=167 +'CRC32'=168 +'E'=169 +'EXP'=170 +'FLOOR'=171 +'LN'=172 +'LOG'=173 +'LOG10'=174 +'LOG2'=175 +'MOD'=176 +'PI'=177 +'POW'=178 +'POWER'=179 +'RAND'=180 +'ROUND'=181 +'SIGN'=182 +'SQRT'=183 +'TRUNCATE'=184 +'ACOS'=185 +'ASIN'=186 +'ATAN'=187 +'ATAN2'=188 +'COS'=189 +'COT'=190 +'DEGREES'=191 +'RADIANS'=192 +'SIN'=193 +'TAN'=194 +'ADDDATE'=195 +'CURDATE'=196 +'CURRENT_DATE'=197 +'CURRENT_TIME'=198 +'CURRENT_TIMESTAMP'=199 +'CURTIME'=200 +'DATE'=201 +'DATE_ADD'=202 +'DATE_FORMAT'=203 +'DATE_SUB'=204 +'DAYNAME'=205 +'DAYOFMONTH'=206 +'DAYOFWEEK'=207 +'DAYOFYEAR'=208 +'FROM_DAYS'=209 +'LOCALTIME'=210 +'LOCALTIMESTAMP'=211 +'FROM_UNIXTIME'=212 +'MAKEDATE'=213 +'MAKETIME'=214 +'MONTHNAME'=215 +'NOW'=216 +'PERIOD_ADD'=217 +'PERIOD_DIFF'=218 +'SUBDATE'=219 +'SYSDATE'=220 +'TIME'=221 +'TIME_TO_SEC'=222 +'TIMESTAMP'=223 +'TO_DAYS'=224 +'UTC_DATE'=225 +'UTC_TIME'=226 +'UTC_TIMESTAMP'=227 +'UNIX_TIMESTAMP'=228 +'SUBSTR'=229 +'SUBSTRING'=230 +'LTRIM'=231 +'RTRIM'=232 +'TRIM'=233 +'TO'=234 +'LOWER'=235 +'UPPER'=236 +'CONCAT'=237 +'CONCAT_WS'=238 +'LENGTH'=239 +'STRCMP'=240 +'RIGHT'=241 +'LEFT'=242 +'ASCII'=243 +'LOCATE'=244 +'REPLACE'=245 +'CAST'=246 +'LIKE'=247 +'ISNULL'=248 +'ISNOTNULL'=249 +'IFNULL'=250 +'NULLIF'=251 +'IF'=252 +'TYPEOF'=253 +'MATCH'=254 +'MATCH_PHRASE'=255 +'MATCH_PHRASE_PREFIX'=256 +'MATCH_BOOL_PREFIX'=257 +'SIMPLE_QUERY_STRING'=258 +'MULTI_MATCH'=259 +'QUERY_STRING'=260 +'ALLOW_LEADING_WILDCARD'=261 +'ANALYZE_WILDCARD'=262 +'ANALYZER'=263 +'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY'=264 +'BOOST'=265 +'CUTOFF_FREQUENCY'=266 +'DEFAULT_FIELD'=267 +'DEFAULT_OPERATOR'=268 +'ENABLE_POSITION_INCREMENTS'=269 +'ESCAPE'=270 +'FLAGS'=271 +'FUZZY_MAX_EXPANSIONS'=272 +'FUZZY_PREFIX_LENGTH'=273 +'FUZZY_TRANSPOSITIONS'=274 +'FUZZY_REWRITE'=275 +'FUZZINESS'=276 +'LENIENT'=277 +'LOW_FREQ_OPERATOR'=278 +'MAX_DETERMINIZED_STATES'=279 +'MAX_EXPANSIONS'=280 +'MINIMUM_SHOULD_MATCH'=281 +'OPERATOR'=282 +'PHRASE_SLOP'=283 +'PREFIX_LENGTH'=284 +'QUOTE_ANALYZER'=285 +'QUOTE_FIELD_SUFFIX'=286 +'REWRITE'=287 +'SLOP'=288 +'TIE_BREAKER'=289 +'TYPE'=290 +'ZERO_TERMS_QUERY'=291 +'SPAN'=292 +'MS'=293 +'S'=294 +'M'=295 +'H'=296 +'W'=297 +'Q'=298 +'Y'=299 diff --git a/dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLLexer.ts b/dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLLexer.ts new file mode 100644 index 000000000..834c1d59e --- /dev/null +++ b/dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLLexer.ts @@ -0,0 +1,2072 @@ +// Generated from ./common/query_manager/antlr/grammar/OpenSearchPPLLexer.g4 by ANTLR 4.9.0-SNAPSHOT + + +import { ATN } from "antlr4ts/atn/ATN"; +import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; +import { CharStream } from "antlr4ts/CharStream"; +import { Lexer } from "antlr4ts/Lexer"; +import { LexerATNSimulator } from "antlr4ts/atn/LexerATNSimulator"; +import { NotNull } from "antlr4ts/Decorators"; +import { Override } from "antlr4ts/Decorators"; +import { RuleContext } from "antlr4ts/RuleContext"; +import { Vocabulary } from "antlr4ts/Vocabulary"; +import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; + +import * as Utils from "antlr4ts/misc/Utils"; + + +export class OpenSearchPPLLexer extends Lexer { + public static readonly SEARCH = 1; + public static readonly DESCRIBE = 2; + public static readonly SHOW = 3; + public static readonly FROM = 4; + public static readonly WHERE = 5; + public static readonly FIELDS = 6; + public static readonly RENAME = 7; + public static readonly STATS = 8; + public static readonly DEDUP = 9; + public static readonly SORT = 10; + public static readonly EVAL = 11; + public static readonly HEAD = 12; + public static readonly TOP = 13; + public static readonly RARE = 14; + public static readonly PARSE = 15; + public static readonly METHOD = 16; + public static readonly REGEX = 17; + public static readonly PUNCT = 18; + public static readonly GROK = 19; + public static readonly PATTERN = 20; + public static readonly PATTERNS = 21; + public static readonly NEW_FIELD = 22; + public static readonly KMEANS = 23; + public static readonly AD = 24; + public static readonly ML = 25; + public static readonly AS = 26; + public static readonly BY = 27; + public static readonly SOURCE = 28; + public static readonly INDEX = 29; + public static readonly D = 30; + public static readonly DESC = 31; + public static readonly CATALOGS = 32; + public static readonly SORTBY = 33; + public static readonly AUTO = 34; + public static readonly STR = 35; + public static readonly IP = 36; + public static readonly NUM = 37; + public static readonly KEEPEMPTY = 38; + public static readonly CONSECUTIVE = 39; + public static readonly DEDUP_SPLITVALUES = 40; + public static readonly PARTITIONS = 41; + public static readonly ALLNUM = 42; + public static readonly DELIM = 43; + public static readonly CENTROIDS = 44; + public static readonly ITERATIONS = 45; + public static readonly DISTANCE_TYPE = 46; + public static readonly NUMBER_OF_TREES = 47; + public static readonly SHINGLE_SIZE = 48; + public static readonly SAMPLE_SIZE = 49; + public static readonly OUTPUT_AFTER = 50; + public static readonly TIME_DECAY = 51; + public static readonly ANOMALY_RATE = 52; + public static readonly CATEGORY_FIELD = 53; + public static readonly TIME_FIELD = 54; + public static readonly TIME_ZONE = 55; + public static readonly TRAINING_DATA_SIZE = 56; + public static readonly ANOMALY_SCORE_THRESHOLD = 57; + public static readonly CASE = 58; + public static readonly IN = 59; + public static readonly NOT = 60; + public static readonly OR = 61; + public static readonly AND = 62; + public static readonly XOR = 63; + public static readonly TRUE = 64; + public static readonly FALSE = 65; + public static readonly REGEXP = 66; + public static readonly DATETIME = 67; + public static readonly INTERVAL = 68; + public static readonly MICROSECOND = 69; + public static readonly MILLISECOND = 70; + public static readonly SECOND = 71; + public static readonly MINUTE = 72; + public static readonly HOUR = 73; + public static readonly DAY = 74; + public static readonly WEEK = 75; + public static readonly MONTH = 76; + public static readonly QUARTER = 77; + public static readonly YEAR = 78; + public static readonly SECOND_MICROSECOND = 79; + public static readonly MINUTE_MICROSECOND = 80; + public static readonly MINUTE_SECOND = 81; + public static readonly HOUR_MICROSECOND = 82; + public static readonly HOUR_SECOND = 83; + public static readonly HOUR_MINUTE = 84; + public static readonly DAY_MICROSECOND = 85; + public static readonly DAY_SECOND = 86; + public static readonly DAY_MINUTE = 87; + public static readonly DAY_HOUR = 88; + public static readonly YEAR_MONTH = 89; + public static readonly CONVERT_TZ = 90; + public static readonly DATAMODEL = 91; + public static readonly LOOKUP = 92; + public static readonly SAVEDSEARCH = 93; + public static readonly INT = 94; + public static readonly INTEGER = 95; + public static readonly DOUBLE = 96; + public static readonly LONG = 97; + public static readonly FLOAT = 98; + public static readonly STRING = 99; + public static readonly BOOLEAN = 100; + public static readonly PIPE = 101; + public static readonly COMMA = 102; + public static readonly DOT = 103; + public static readonly EQUAL = 104; + public static readonly GREATER = 105; + public static readonly LESS = 106; + public static readonly NOT_GREATER = 107; + public static readonly NOT_LESS = 108; + public static readonly NOT_EQUAL = 109; + public static readonly PLUS = 110; + public static readonly MINUS = 111; + public static readonly STAR = 112; + public static readonly DIVIDE = 113; + public static readonly MODULE = 114; + public static readonly EXCLAMATION_SYMBOL = 115; + public static readonly COLON = 116; + public static readonly LT_PRTHS = 117; + public static readonly RT_PRTHS = 118; + public static readonly LT_SQR_PRTHS = 119; + public static readonly RT_SQR_PRTHS = 120; + public static readonly SINGLE_QUOTE = 121; + public static readonly DOUBLE_QUOTE = 122; + public static readonly BACKTICK = 123; + public static readonly BIT_NOT_OP = 124; + public static readonly BIT_AND_OP = 125; + public static readonly BIT_XOR_OP = 126; + public static readonly AVG = 127; + public static readonly COUNT = 128; + public static readonly DISTINCT_COUNT = 129; + public static readonly ESTDC = 130; + public static readonly ESTDC_ERROR = 131; + public static readonly MAX = 132; + public static readonly MEAN = 133; + public static readonly MEDIAN = 134; + public static readonly MIN = 135; + public static readonly MODE = 136; + public static readonly RANGE = 137; + public static readonly STDEV = 138; + public static readonly STDEVP = 139; + public static readonly SUM = 140; + public static readonly SUMSQ = 141; + public static readonly VAR_SAMP = 142; + public static readonly VAR_POP = 143; + public static readonly STDDEV_SAMP = 144; + public static readonly STDDEV_POP = 145; + public static readonly PERCENTILE = 146; + public static readonly TAKE = 147; + public static readonly FIRST = 148; + public static readonly LAST = 149; + public static readonly LIST = 150; + public static readonly VALUES = 151; + public static readonly EARLIEST = 152; + public static readonly EARLIEST_TIME = 153; + public static readonly LATEST = 154; + public static readonly LATEST_TIME = 155; + public static readonly PER_DAY = 156; + public static readonly PER_HOUR = 157; + public static readonly PER_MINUTE = 158; + public static readonly PER_SECOND = 159; + public static readonly RATE = 160; + public static readonly SPARKLINE = 161; + public static readonly C = 162; + public static readonly DC = 163; + public static readonly ABS = 164; + public static readonly CEIL = 165; + public static readonly CEILING = 166; + public static readonly CONV = 167; + public static readonly CRC32 = 168; + public static readonly E = 169; + public static readonly EXP = 170; + public static readonly FLOOR = 171; + public static readonly LN = 172; + public static readonly LOG = 173; + public static readonly LOG10 = 174; + public static readonly LOG2 = 175; + public static readonly MOD = 176; + public static readonly PI = 177; + public static readonly POW = 178; + public static readonly POWER = 179; + public static readonly RAND = 180; + public static readonly ROUND = 181; + public static readonly SIGN = 182; + public static readonly SQRT = 183; + public static readonly TRUNCATE = 184; + public static readonly ACOS = 185; + public static readonly ASIN = 186; + public static readonly ATAN = 187; + public static readonly ATAN2 = 188; + public static readonly COS = 189; + public static readonly COT = 190; + public static readonly DEGREES = 191; + public static readonly RADIANS = 192; + public static readonly SIN = 193; + public static readonly TAN = 194; + public static readonly ADDDATE = 195; + public static readonly CURDATE = 196; + public static readonly CURRENT_DATE = 197; + public static readonly CURRENT_TIME = 198; + public static readonly CURRENT_TIMESTAMP = 199; + public static readonly CURTIME = 200; + public static readonly DATE = 201; + public static readonly DATE_ADD = 202; + public static readonly DATE_FORMAT = 203; + public static readonly DATE_SUB = 204; + public static readonly DAYNAME = 205; + public static readonly DAYOFMONTH = 206; + public static readonly DAYOFWEEK = 207; + public static readonly DAYOFYEAR = 208; + public static readonly FROM_DAYS = 209; + public static readonly LOCALTIME = 210; + public static readonly LOCALTIMESTAMP = 211; + public static readonly FROM_UNIXTIME = 212; + public static readonly MAKEDATE = 213; + public static readonly MAKETIME = 214; + public static readonly MONTHNAME = 215; + public static readonly NOW = 216; + public static readonly PERIOD_ADD = 217; + public static readonly PERIOD_DIFF = 218; + public static readonly SUBDATE = 219; + public static readonly SYSDATE = 220; + public static readonly TIME = 221; + public static readonly TIME_TO_SEC = 222; + public static readonly TIMESTAMP = 223; + public static readonly TO_DAYS = 224; + public static readonly UTC_DATE = 225; + public static readonly UTC_TIME = 226; + public static readonly UTC_TIMESTAMP = 227; + public static readonly UNIX_TIMESTAMP = 228; + public static readonly SUBSTR = 229; + public static readonly SUBSTRING = 230; + public static readonly LTRIM = 231; + public static readonly RTRIM = 232; + public static readonly TRIM = 233; + public static readonly TO = 234; + public static readonly LOWER = 235; + public static readonly UPPER = 236; + public static readonly CONCAT = 237; + public static readonly CONCAT_WS = 238; + public static readonly LENGTH = 239; + public static readonly STRCMP = 240; + public static readonly RIGHT = 241; + public static readonly LEFT = 242; + public static readonly ASCII = 243; + public static readonly LOCATE = 244; + public static readonly REPLACE = 245; + public static readonly CAST = 246; + public static readonly LIKE = 247; + public static readonly ISNULL = 248; + public static readonly ISNOTNULL = 249; + public static readonly IFNULL = 250; + public static readonly NULLIF = 251; + public static readonly IF = 252; + public static readonly TYPEOF = 253; + public static readonly MATCH = 254; + public static readonly MATCH_PHRASE = 255; + public static readonly MATCH_PHRASE_PREFIX = 256; + public static readonly MATCH_BOOL_PREFIX = 257; + public static readonly SIMPLE_QUERY_STRING = 258; + public static readonly MULTI_MATCH = 259; + public static readonly QUERY_STRING = 260; + public static readonly ALLOW_LEADING_WILDCARD = 261; + public static readonly ANALYZE_WILDCARD = 262; + public static readonly ANALYZER = 263; + public static readonly AUTO_GENERATE_SYNONYMS_PHRASE_QUERY = 264; + public static readonly BOOST = 265; + public static readonly CUTOFF_FREQUENCY = 266; + public static readonly DEFAULT_FIELD = 267; + public static readonly DEFAULT_OPERATOR = 268; + public static readonly ENABLE_POSITION_INCREMENTS = 269; + public static readonly ESCAPE = 270; + public static readonly FLAGS = 271; + public static readonly FUZZY_MAX_EXPANSIONS = 272; + public static readonly FUZZY_PREFIX_LENGTH = 273; + public static readonly FUZZY_TRANSPOSITIONS = 274; + public static readonly FUZZY_REWRITE = 275; + public static readonly FUZZINESS = 276; + public static readonly LENIENT = 277; + public static readonly LOW_FREQ_OPERATOR = 278; + public static readonly MAX_DETERMINIZED_STATES = 279; + public static readonly MAX_EXPANSIONS = 280; + public static readonly MINIMUM_SHOULD_MATCH = 281; + public static readonly OPERATOR = 282; + public static readonly PHRASE_SLOP = 283; + public static readonly PREFIX_LENGTH = 284; + public static readonly QUOTE_ANALYZER = 285; + public static readonly QUOTE_FIELD_SUFFIX = 286; + public static readonly REWRITE = 287; + public static readonly SLOP = 288; + public static readonly TIE_BREAKER = 289; + public static readonly TYPE = 290; + public static readonly ZERO_TERMS_QUERY = 291; + public static readonly SPAN = 292; + public static readonly MS = 293; + public static readonly S = 294; + public static readonly M = 295; + public static readonly H = 296; + public static readonly W = 297; + public static readonly Q = 298; + public static readonly Y = 299; + public static readonly ID = 300; + public static readonly INTEGER_LITERAL = 301; + public static readonly DECIMAL_LITERAL = 302; + public static readonly ID_DATE_SUFFIX = 303; + public static readonly DQUOTA_STRING = 304; + public static readonly SQUOTA_STRING = 305; + public static readonly BQUOTA_STRING = 306; + public static readonly ERROR_RECOGNITION = 307; + public static readonly WHITESPACE = 2; + public static readonly ERRORCHANNEL = 3; + + // tslint:disable:no-trailing-whitespace + public static readonly channelNames: string[] = [ + "DEFAULT_TOKEN_CHANNEL", "HIDDEN", "WHITESPACE", "ERRORCHANNEL", + ]; + + // tslint:disable:no-trailing-whitespace + public static readonly modeNames: string[] = [ + "DEFAULT_MODE", + ]; + + public static readonly ruleNames: string[] = [ + "SEARCH", "DESCRIBE", "SHOW", "FROM", "WHERE", "FIELDS", "RENAME", "STATS", + "DEDUP", "SORT", "EVAL", "HEAD", "TOP", "RARE", "PARSE", "METHOD", "REGEX", + "PUNCT", "GROK", "PATTERN", "PATTERNS", "NEW_FIELD", "KMEANS", "AD", "ML", + "AS", "BY", "SOURCE", "INDEX", "D", "DESC", "CATALOGS", "SORTBY", "AUTO", + "STR", "IP", "NUM", "KEEPEMPTY", "CONSECUTIVE", "DEDUP_SPLITVALUES", "PARTITIONS", + "ALLNUM", "DELIM", "CENTROIDS", "ITERATIONS", "DISTANCE_TYPE", "NUMBER_OF_TREES", + "SHINGLE_SIZE", "SAMPLE_SIZE", "OUTPUT_AFTER", "TIME_DECAY", "ANOMALY_RATE", + "CATEGORY_FIELD", "TIME_FIELD", "TIME_ZONE", "TRAINING_DATA_SIZE", "ANOMALY_SCORE_THRESHOLD", + "CASE", "IN", "NOT", "OR", "AND", "XOR", "TRUE", "FALSE", "REGEXP", "DATETIME", + "INTERVAL", "MICROSECOND", "MILLISECOND", "SECOND", "MINUTE", "HOUR", + "DAY", "WEEK", "MONTH", "QUARTER", "YEAR", "SECOND_MICROSECOND", "MINUTE_MICROSECOND", + "MINUTE_SECOND", "HOUR_MICROSECOND", "HOUR_SECOND", "HOUR_MINUTE", "DAY_MICROSECOND", + "DAY_SECOND", "DAY_MINUTE", "DAY_HOUR", "YEAR_MONTH", "CONVERT_TZ", "DATAMODEL", + "LOOKUP", "SAVEDSEARCH", "INT", "INTEGER", "DOUBLE", "LONG", "FLOAT", + "STRING", "BOOLEAN", "PIPE", "COMMA", "DOT", "EQUAL", "GREATER", "LESS", + "NOT_GREATER", "NOT_LESS", "NOT_EQUAL", "PLUS", "MINUS", "STAR", "DIVIDE", + "MODULE", "EXCLAMATION_SYMBOL", "COLON", "LT_PRTHS", "RT_PRTHS", "LT_SQR_PRTHS", + "RT_SQR_PRTHS", "SINGLE_QUOTE", "DOUBLE_QUOTE", "BACKTICK", "BIT_NOT_OP", + "BIT_AND_OP", "BIT_XOR_OP", "AVG", "COUNT", "DISTINCT_COUNT", "ESTDC", + "ESTDC_ERROR", "MAX", "MEAN", "MEDIAN", "MIN", "MODE", "RANGE", "STDEV", + "STDEVP", "SUM", "SUMSQ", "VAR_SAMP", "VAR_POP", "STDDEV_SAMP", "STDDEV_POP", + "PERCENTILE", "TAKE", "FIRST", "LAST", "LIST", "VALUES", "EARLIEST", "EARLIEST_TIME", + "LATEST", "LATEST_TIME", "PER_DAY", "PER_HOUR", "PER_MINUTE", "PER_SECOND", + "RATE", "SPARKLINE", "C", "DC", "ABS", "CEIL", "CEILING", "CONV", "CRC32", + "E", "EXP", "FLOOR", "LN", "LOG", "LOG10", "LOG2", "MOD", "PI", "POW", + "POWER", "RAND", "ROUND", "SIGN", "SQRT", "TRUNCATE", "ACOS", "ASIN", + "ATAN", "ATAN2", "COS", "COT", "DEGREES", "RADIANS", "SIN", "TAN", "ADDDATE", + "CURDATE", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP", "CURTIME", + "DATE", "DATE_ADD", "DATE_FORMAT", "DATE_SUB", "DAYNAME", "DAYOFMONTH", + "DAYOFWEEK", "DAYOFYEAR", "FROM_DAYS", "LOCALTIME", "LOCALTIMESTAMP", + "FROM_UNIXTIME", "MAKEDATE", "MAKETIME", "MONTHNAME", "NOW", "PERIOD_ADD", + "PERIOD_DIFF", "SUBDATE", "SYSDATE", "TIME", "TIME_TO_SEC", "TIMESTAMP", + "TO_DAYS", "UTC_DATE", "UTC_TIME", "UTC_TIMESTAMP", "UNIX_TIMESTAMP", + "SUBSTR", "SUBSTRING", "LTRIM", "RTRIM", "TRIM", "TO", "LOWER", "UPPER", + "CONCAT", "CONCAT_WS", "LENGTH", "STRCMP", "RIGHT", "LEFT", "ASCII", "LOCATE", + "REPLACE", "CAST", "LIKE", "ISNULL", "ISNOTNULL", "IFNULL", "NULLIF", + "IF", "TYPEOF", "MATCH", "MATCH_PHRASE", "MATCH_PHRASE_PREFIX", "MATCH_BOOL_PREFIX", + "SIMPLE_QUERY_STRING", "MULTI_MATCH", "QUERY_STRING", "ALLOW_LEADING_WILDCARD", + "ANALYZE_WILDCARD", "ANALYZER", "AUTO_GENERATE_SYNONYMS_PHRASE_QUERY", + "BOOST", "CUTOFF_FREQUENCY", "DEFAULT_FIELD", "DEFAULT_OPERATOR", "ENABLE_POSITION_INCREMENTS", + "ESCAPE", "FLAGS", "FUZZY_MAX_EXPANSIONS", "FUZZY_PREFIX_LENGTH", "FUZZY_TRANSPOSITIONS", + "FUZZY_REWRITE", "FUZZINESS", "LENIENT", "LOW_FREQ_OPERATOR", "MAX_DETERMINIZED_STATES", + "MAX_EXPANSIONS", "MINIMUM_SHOULD_MATCH", "OPERATOR", "PHRASE_SLOP", "PREFIX_LENGTH", + "QUOTE_ANALYZER", "QUOTE_FIELD_SUFFIX", "REWRITE", "SLOP", "TIE_BREAKER", + "TYPE", "ZERO_TERMS_QUERY", "SPAN", "MS", "S", "M", "H", "W", "Q", "Y", + "ID", "INTEGER_LITERAL", "DECIMAL_LITERAL", "DATE_SUFFIX", "ID_LITERAL", + "ID_DATE_SUFFIX", "DQUOTA_STRING", "SQUOTA_STRING", "BQUOTA_STRING", "DEC_DIGIT", + "ERROR_RECOGNITION", + ]; + + private static readonly _LITERAL_NAMES: Array = [ + undefined, "'SEARCH'", "'DESCRIBE'", "'SHOW'", "'FROM'", "'WHERE'", "'FIELDS'", + "'RENAME'", "'STATS'", "'DEDUP'", "'SORT'", "'EVAL'", "'HEAD'", "'TOP'", + "'RARE'", "'PARSE'", "'METHOD'", "'REGEX'", "'PUNCT'", "'GROK'", "'PATTERN'", + "'PATTERNS'", "'NEW_FIELD'", "'KMEANS'", "'AD'", "'ML'", "'AS'", "'BY'", + "'SOURCE'", "'INDEX'", "'D'", "'DESC'", "'CATALOGS'", "'SORTBY'", "'AUTO'", + "'STR'", "'IP'", "'NUM'", "'KEEPEMPTY'", "'CONSECUTIVE'", "'DEDUP_SPLITVALUES'", + "'PARTITIONS'", "'ALLNUM'", "'DELIM'", "'CENTROIDS'", "'ITERATIONS'", + "'DISTANCE_TYPE'", "'NUMBER_OF_TREES'", "'SHINGLE_SIZE'", "'SAMPLE_SIZE'", + "'OUTPUT_AFTER'", "'TIME_DECAY'", "'ANOMALY_RATE'", "'CATEGORY_FIELD'", + "'TIME_FIELD'", "'TIME_ZONE'", "'TRAINING_DATA_SIZE'", "'ANOMALY_SCORE_THRESHOLD'", + "'CASE'", "'IN'", "'NOT'", "'OR'", "'AND'", "'XOR'", "'TRUE'", "'FALSE'", + "'REGEXP'", "'DATETIME'", "'INTERVAL'", "'MICROSECOND'", "'MILLISECOND'", + "'SECOND'", "'MINUTE'", "'HOUR'", "'DAY'", "'WEEK'", "'MONTH'", "'QUARTER'", + "'YEAR'", "'SECOND_MICROSECOND'", "'MINUTE_MICROSECOND'", "'MINUTE_SECOND'", + "'HOUR_MICROSECOND'", "'HOUR_SECOND'", "'HOUR_MINUTE'", "'DAY_MICROSECOND'", + "'DAY_SECOND'", "'DAY_MINUTE'", "'DAY_HOUR'", "'YEAR_MONTH'", "'CONVERT_TZ'", + "'DATAMODEL'", "'LOOKUP'", "'SAVEDSEARCH'", "'INT'", "'INTEGER'", "'DOUBLE'", + "'LONG'", "'FLOAT'", "'STRING'", "'BOOLEAN'", "'|'", "','", "'.'", "'='", + "'>'", "'<'", undefined, undefined, undefined, "'+'", "'-'", "'*'", "'/'", + "'%'", "'!'", "':'", "'('", "')'", "'['", "']'", "'''", "'\"'", "'`'", + "'~'", "'&'", "'^'", "'AVG'", "'COUNT'", "'DISTINCT_COUNT'", "'ESTDC'", + "'ESTDC_ERROR'", "'MAX'", "'MEAN'", "'MEDIAN'", "'MIN'", "'MODE'", "'RANGE'", + "'STDEV'", "'STDEVP'", "'SUM'", "'SUMSQ'", "'VAR_SAMP'", "'VAR_POP'", + "'STDDEV_SAMP'", "'STDDEV_POP'", "'PERCENTILE'", "'TAKE'", "'FIRST'", + "'LAST'", "'LIST'", "'VALUES'", "'EARLIEST'", "'EARLIEST_TIME'", "'LATEST'", + "'LATEST_TIME'", "'PER_DAY'", "'PER_HOUR'", "'PER_MINUTE'", "'PER_SECOND'", + "'RATE'", "'SPARKLINE'", "'C'", "'DC'", "'ABS'", "'CEIL'", "'CEILING'", + "'CONV'", "'CRC32'", "'E'", "'EXP'", "'FLOOR'", "'LN'", "'LOG'", "'LOG10'", + "'LOG2'", "'MOD'", "'PI'", "'POW'", "'POWER'", "'RAND'", "'ROUND'", "'SIGN'", + "'SQRT'", "'TRUNCATE'", "'ACOS'", "'ASIN'", "'ATAN'", "'ATAN2'", "'COS'", + "'COT'", "'DEGREES'", "'RADIANS'", "'SIN'", "'TAN'", "'ADDDATE'", "'CURDATE'", + "'CURRENT_DATE'", "'CURRENT_TIME'", "'CURRENT_TIMESTAMP'", "'CURTIME'", + "'DATE'", "'DATE_ADD'", "'DATE_FORMAT'", "'DATE_SUB'", "'DAYNAME'", "'DAYOFMONTH'", + "'DAYOFWEEK'", "'DAYOFYEAR'", "'FROM_DAYS'", "'LOCALTIME'", "'LOCALTIMESTAMP'", + "'FROM_UNIXTIME'", "'MAKEDATE'", "'MAKETIME'", "'MONTHNAME'", "'NOW'", + "'PERIOD_ADD'", "'PERIOD_DIFF'", "'SUBDATE'", "'SYSDATE'", "'TIME'", "'TIME_TO_SEC'", + "'TIMESTAMP'", "'TO_DAYS'", "'UTC_DATE'", "'UTC_TIME'", "'UTC_TIMESTAMP'", + "'UNIX_TIMESTAMP'", "'SUBSTR'", "'SUBSTRING'", "'LTRIM'", "'RTRIM'", "'TRIM'", + "'TO'", "'LOWER'", "'UPPER'", "'CONCAT'", "'CONCAT_WS'", "'LENGTH'", "'STRCMP'", + "'RIGHT'", "'LEFT'", "'ASCII'", "'LOCATE'", "'REPLACE'", "'CAST'", "'LIKE'", + "'ISNULL'", "'ISNOTNULL'", "'IFNULL'", "'NULLIF'", "'IF'", "'TYPEOF'", + "'MATCH'", "'MATCH_PHRASE'", "'MATCH_PHRASE_PREFIX'", "'MATCH_BOOL_PREFIX'", + "'SIMPLE_QUERY_STRING'", "'MULTI_MATCH'", "'QUERY_STRING'", "'ALLOW_LEADING_WILDCARD'", + "'ANALYZE_WILDCARD'", "'ANALYZER'", "'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY'", + "'BOOST'", "'CUTOFF_FREQUENCY'", "'DEFAULT_FIELD'", "'DEFAULT_OPERATOR'", + "'ENABLE_POSITION_INCREMENTS'", "'ESCAPE'", "'FLAGS'", "'FUZZY_MAX_EXPANSIONS'", + "'FUZZY_PREFIX_LENGTH'", "'FUZZY_TRANSPOSITIONS'", "'FUZZY_REWRITE'", + "'FUZZINESS'", "'LENIENT'", "'LOW_FREQ_OPERATOR'", "'MAX_DETERMINIZED_STATES'", + "'MAX_EXPANSIONS'", "'MINIMUM_SHOULD_MATCH'", "'OPERATOR'", "'PHRASE_SLOP'", + "'PREFIX_LENGTH'", "'QUOTE_ANALYZER'", "'QUOTE_FIELD_SUFFIX'", "'REWRITE'", + "'SLOP'", "'TIE_BREAKER'", "'TYPE'", "'ZERO_TERMS_QUERY'", "'SPAN'", "'MS'", + "'S'", "'M'", "'H'", "'W'", "'Q'", "'Y'", + ]; + private static readonly _SYMBOLIC_NAMES: Array = [ + undefined, "SEARCH", "DESCRIBE", "SHOW", "FROM", "WHERE", "FIELDS", "RENAME", + "STATS", "DEDUP", "SORT", "EVAL", "HEAD", "TOP", "RARE", "PARSE", "METHOD", + "REGEX", "PUNCT", "GROK", "PATTERN", "PATTERNS", "NEW_FIELD", "KMEANS", + "AD", "ML", "AS", "BY", "SOURCE", "INDEX", "D", "DESC", "CATALOGS", "SORTBY", + "AUTO", "STR", "IP", "NUM", "KEEPEMPTY", "CONSECUTIVE", "DEDUP_SPLITVALUES", + "PARTITIONS", "ALLNUM", "DELIM", "CENTROIDS", "ITERATIONS", "DISTANCE_TYPE", + "NUMBER_OF_TREES", "SHINGLE_SIZE", "SAMPLE_SIZE", "OUTPUT_AFTER", "TIME_DECAY", + "ANOMALY_RATE", "CATEGORY_FIELD", "TIME_FIELD", "TIME_ZONE", "TRAINING_DATA_SIZE", + "ANOMALY_SCORE_THRESHOLD", "CASE", "IN", "NOT", "OR", "AND", "XOR", "TRUE", + "FALSE", "REGEXP", "DATETIME", "INTERVAL", "MICROSECOND", "MILLISECOND", + "SECOND", "MINUTE", "HOUR", "DAY", "WEEK", "MONTH", "QUARTER", "YEAR", + "SECOND_MICROSECOND", "MINUTE_MICROSECOND", "MINUTE_SECOND", "HOUR_MICROSECOND", + "HOUR_SECOND", "HOUR_MINUTE", "DAY_MICROSECOND", "DAY_SECOND", "DAY_MINUTE", + "DAY_HOUR", "YEAR_MONTH", "CONVERT_TZ", "DATAMODEL", "LOOKUP", "SAVEDSEARCH", + "INT", "INTEGER", "DOUBLE", "LONG", "FLOAT", "STRING", "BOOLEAN", "PIPE", + "COMMA", "DOT", "EQUAL", "GREATER", "LESS", "NOT_GREATER", "NOT_LESS", + "NOT_EQUAL", "PLUS", "MINUS", "STAR", "DIVIDE", "MODULE", "EXCLAMATION_SYMBOL", + "COLON", "LT_PRTHS", "RT_PRTHS", "LT_SQR_PRTHS", "RT_SQR_PRTHS", "SINGLE_QUOTE", + "DOUBLE_QUOTE", "BACKTICK", "BIT_NOT_OP", "BIT_AND_OP", "BIT_XOR_OP", + "AVG", "COUNT", "DISTINCT_COUNT", "ESTDC", "ESTDC_ERROR", "MAX", "MEAN", + "MEDIAN", "MIN", "MODE", "RANGE", "STDEV", "STDEVP", "SUM", "SUMSQ", "VAR_SAMP", + "VAR_POP", "STDDEV_SAMP", "STDDEV_POP", "PERCENTILE", "TAKE", "FIRST", + "LAST", "LIST", "VALUES", "EARLIEST", "EARLIEST_TIME", "LATEST", "LATEST_TIME", + "PER_DAY", "PER_HOUR", "PER_MINUTE", "PER_SECOND", "RATE", "SPARKLINE", + "C", "DC", "ABS", "CEIL", "CEILING", "CONV", "CRC32", "E", "EXP", "FLOOR", + "LN", "LOG", "LOG10", "LOG2", "MOD", "PI", "POW", "POWER", "RAND", "ROUND", + "SIGN", "SQRT", "TRUNCATE", "ACOS", "ASIN", "ATAN", "ATAN2", "COS", "COT", + "DEGREES", "RADIANS", "SIN", "TAN", "ADDDATE", "CURDATE", "CURRENT_DATE", + "CURRENT_TIME", "CURRENT_TIMESTAMP", "CURTIME", "DATE", "DATE_ADD", "DATE_FORMAT", + "DATE_SUB", "DAYNAME", "DAYOFMONTH", "DAYOFWEEK", "DAYOFYEAR", "FROM_DAYS", + "LOCALTIME", "LOCALTIMESTAMP", "FROM_UNIXTIME", "MAKEDATE", "MAKETIME", + "MONTHNAME", "NOW", "PERIOD_ADD", "PERIOD_DIFF", "SUBDATE", "SYSDATE", + "TIME", "TIME_TO_SEC", "TIMESTAMP", "TO_DAYS", "UTC_DATE", "UTC_TIME", + "UTC_TIMESTAMP", "UNIX_TIMESTAMP", "SUBSTR", "SUBSTRING", "LTRIM", "RTRIM", + "TRIM", "TO", "LOWER", "UPPER", "CONCAT", "CONCAT_WS", "LENGTH", "STRCMP", + "RIGHT", "LEFT", "ASCII", "LOCATE", "REPLACE", "CAST", "LIKE", "ISNULL", + "ISNOTNULL", "IFNULL", "NULLIF", "IF", "TYPEOF", "MATCH", "MATCH_PHRASE", + "MATCH_PHRASE_PREFIX", "MATCH_BOOL_PREFIX", "SIMPLE_QUERY_STRING", "MULTI_MATCH", + "QUERY_STRING", "ALLOW_LEADING_WILDCARD", "ANALYZE_WILDCARD", "ANALYZER", + "AUTO_GENERATE_SYNONYMS_PHRASE_QUERY", "BOOST", "CUTOFF_FREQUENCY", "DEFAULT_FIELD", + "DEFAULT_OPERATOR", "ENABLE_POSITION_INCREMENTS", "ESCAPE", "FLAGS", "FUZZY_MAX_EXPANSIONS", + "FUZZY_PREFIX_LENGTH", "FUZZY_TRANSPOSITIONS", "FUZZY_REWRITE", "FUZZINESS", + "LENIENT", "LOW_FREQ_OPERATOR", "MAX_DETERMINIZED_STATES", "MAX_EXPANSIONS", + "MINIMUM_SHOULD_MATCH", "OPERATOR", "PHRASE_SLOP", "PREFIX_LENGTH", "QUOTE_ANALYZER", + "QUOTE_FIELD_SUFFIX", "REWRITE", "SLOP", "TIE_BREAKER", "TYPE", "ZERO_TERMS_QUERY", + "SPAN", "MS", "S", "M", "H", "W", "Q", "Y", "ID", "INTEGER_LITERAL", "DECIMAL_LITERAL", + "ID_DATE_SUFFIX", "DQUOTA_STRING", "SQUOTA_STRING", "BQUOTA_STRING", "ERROR_RECOGNITION", + ]; + public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(OpenSearchPPLLexer._LITERAL_NAMES, OpenSearchPPLLexer._SYMBOLIC_NAMES, []); + + // @Override + // @NotNull + public get vocabulary(): Vocabulary { + return OpenSearchPPLLexer.VOCABULARY; + } + // tslint:enable:no-trailing-whitespace + + + constructor(input: CharStream) { + super(input); + this._interp = new LexerATNSimulator(OpenSearchPPLLexer._ATN, this); + } + + // @Override + public get grammarFileName(): string { return "OpenSearchPPLLexer.g4"; } + + // @Override + public get ruleNames(): string[] { return OpenSearchPPLLexer.ruleNames; } + + // @Override + public get serializedATN(): string { return OpenSearchPPLLexer._serializedATN; } + + // @Override + public get channelNames(): string[] { return OpenSearchPPLLexer.channelNames; } + + // @Override + public get modeNames(): string[] { return OpenSearchPPLLexer.modeNames; } + + private static readonly _serializedATNSegments: number = 6; + private static readonly _serializedATNSegment0: string = + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02\u0135\u0C3B\b" + + "\x01\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t" + + "\x06\x04\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04" + + "\r\t\r\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12" + + "\t\x12\x04\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x04\x17" + + "\t\x17\x04\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B\t\x1B\x04\x1C" + + "\t\x1C\x04\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!\t!\x04\"" + + "\t\"\x04#\t#\x04$\t$\x04%\t%\x04&\t&\x04\'\t\'\x04(\t(\x04)\t)\x04*\t" + + "*\x04+\t+\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041\t1\x042\t2\x04" + + "3\t3\x044\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x04;\t;\x04" + + "<\t<\x04=\t=\x04>\t>\x04?\t?\x04@\t@\x04A\tA\x04B\tB\x04C\tC\x04D\tD\x04" + + "E\tE\x04F\tF\x04G\tG\x04H\tH\x04I\tI\x04J\tJ\x04K\tK\x04L\tL\x04M\tM\x04" + + "N\tN\x04O\tO\x04P\tP\x04Q\tQ\x04R\tR\x04S\tS\x04T\tT\x04U\tU\x04V\tV\x04" + + "W\tW\x04X\tX\x04Y\tY\x04Z\tZ\x04[\t[\x04\\\t\\\x04]\t]\x04^\t^\x04_\t" + + "_\x04`\t`\x04a\ta\x04b\tb\x04c\tc\x04d\td\x04e\te\x04f\tf\x04g\tg\x04" + + "h\th\x04i\ti\x04j\tj\x04k\tk\x04l\tl\x04m\tm\x04n\tn\x04o\to\x04p\tp\x04" + + "q\tq\x04r\tr\x04s\ts\x04t\tt\x04u\tu\x04v\tv\x04w\tw\x04x\tx\x04y\ty\x04" + + "z\tz\x04{\t{\x04|\t|\x04}\t}\x04~\t~\x04\x7F\t\x7F\x04\x80\t\x80\x04\x81" + + "\t\x81\x04\x82\t\x82\x04\x83\t\x83\x04\x84\t\x84\x04\x85\t\x85\x04\x86" + + "\t\x86\x04\x87\t\x87\x04\x88\t\x88\x04\x89\t\x89\x04\x8A\t\x8A\x04\x8B" + + "\t\x8B\x04\x8C\t\x8C\x04\x8D\t\x8D\x04\x8E\t\x8E\x04\x8F\t\x8F\x04\x90" + + "\t\x90\x04\x91\t\x91\x04\x92\t\x92\x04\x93\t\x93\x04\x94\t\x94\x04\x95" + + "\t\x95\x04\x96\t\x96\x04\x97\t\x97\x04\x98\t\x98\x04\x99\t\x99\x04\x9A" + + "\t\x9A\x04\x9B\t\x9B\x04\x9C\t\x9C\x04\x9D\t\x9D\x04\x9E\t\x9E\x04\x9F" + + "\t\x9F\x04\xA0\t\xA0\x04\xA1\t\xA1\x04\xA2\t\xA2\x04\xA3\t\xA3\x04\xA4" + + "\t\xA4\x04\xA5\t\xA5\x04\xA6\t\xA6\x04\xA7\t\xA7\x04\xA8\t\xA8\x04\xA9" + + "\t\xA9\x04\xAA\t\xAA\x04\xAB\t\xAB\x04\xAC\t\xAC\x04\xAD\t\xAD\x04\xAE" + + "\t\xAE\x04\xAF\t\xAF\x04\xB0\t\xB0\x04\xB1\t\xB1\x04\xB2\t\xB2\x04\xB3" + + "\t\xB3\x04\xB4\t\xB4\x04\xB5\t\xB5\x04\xB6\t\xB6\x04\xB7\t\xB7\x04\xB8" + + "\t\xB8\x04\xB9\t\xB9\x04\xBA\t\xBA\x04\xBB\t\xBB\x04\xBC\t\xBC\x04\xBD" + + "\t\xBD\x04\xBE\t\xBE\x04\xBF\t\xBF\x04\xC0\t\xC0\x04\xC1\t\xC1\x04\xC2" + + "\t\xC2\x04\xC3\t\xC3\x04\xC4\t\xC4\x04\xC5\t\xC5\x04\xC6\t\xC6\x04\xC7" + + "\t\xC7\x04\xC8\t\xC8\x04\xC9\t\xC9\x04\xCA\t\xCA\x04\xCB\t\xCB\x04\xCC" + + "\t\xCC\x04\xCD\t\xCD\x04\xCE\t\xCE\x04\xCF\t\xCF\x04\xD0\t\xD0\x04\xD1" + + "\t\xD1\x04\xD2\t\xD2\x04\xD3\t\xD3\x04\xD4\t\xD4\x04\xD5\t\xD5\x04\xD6" + + "\t\xD6\x04\xD7\t\xD7\x04\xD8\t\xD8\x04\xD9\t\xD9\x04\xDA\t\xDA\x04\xDB" + + "\t\xDB\x04\xDC\t\xDC\x04\xDD\t\xDD\x04\xDE\t\xDE\x04\xDF\t\xDF\x04\xE0" + + "\t\xE0\x04\xE1\t\xE1\x04\xE2\t\xE2\x04\xE3\t\xE3\x04\xE4\t\xE4\x04\xE5" + + "\t\xE5\x04\xE6\t\xE6\x04\xE7\t\xE7\x04\xE8\t\xE8\x04\xE9\t\xE9\x04\xEA" + + "\t\xEA\x04\xEB\t\xEB\x04\xEC\t\xEC\x04\xED\t\xED\x04\xEE\t\xEE\x04\xEF" + + "\t\xEF\x04\xF0\t\xF0\x04\xF1\t\xF1\x04\xF2\t\xF2\x04\xF3\t\xF3\x04\xF4" + + "\t\xF4\x04\xF5\t\xF5\x04\xF6\t\xF6\x04\xF7\t\xF7\x04\xF8\t\xF8\x04\xF9" + + "\t\xF9\x04\xFA\t\xFA\x04\xFB\t\xFB\x04\xFC\t\xFC\x04\xFD\t\xFD\x04\xFE" + + "\t\xFE\x04\xFF\t\xFF\x04\u0100\t\u0100\x04\u0101\t\u0101\x04\u0102\t\u0102" + + "\x04\u0103\t\u0103\x04\u0104\t\u0104\x04\u0105\t\u0105\x04\u0106\t\u0106" + + "\x04\u0107\t\u0107\x04\u0108\t\u0108\x04\u0109\t\u0109\x04\u010A\t\u010A" + + "\x04\u010B\t\u010B\x04\u010C\t\u010C\x04\u010D\t\u010D\x04\u010E\t\u010E" + + "\x04\u010F\t\u010F\x04\u0110\t\u0110\x04\u0111\t\u0111\x04\u0112\t\u0112" + + "\x04\u0113\t\u0113\x04\u0114\t\u0114\x04\u0115\t\u0115\x04\u0116\t\u0116" + + "\x04\u0117\t\u0117\x04\u0118\t\u0118\x04\u0119\t\u0119\x04\u011A\t\u011A" + + "\x04\u011B\t\u011B\x04\u011C\t\u011C\x04\u011D\t\u011D\x04\u011E\t\u011E" + + "\x04\u011F\t\u011F\x04\u0120\t\u0120\x04\u0121\t\u0121\x04\u0122\t\u0122" + + "\x04\u0123\t\u0123\x04\u0124\t\u0124\x04\u0125\t\u0125\x04\u0126\t\u0126" + + "\x04\u0127\t\u0127\x04\u0128\t\u0128\x04\u0129\t\u0129\x04\u012A\t\u012A" + + "\x04\u012B\t\u012B\x04\u012C\t\u012C\x04\u012D\t\u012D\x04\u012E\t\u012E" + + "\x04\u012F\t\u012F\x04\u0130\t\u0130\x04\u0131\t\u0131\x04\u0132\t\u0132" + + "\x04\u0133\t\u0133\x04\u0134\t\u0134\x04\u0135\t\u0135\x04\u0136\t\u0136" + + "\x04\u0137\t\u0137\x03\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03" + + "\x02\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03" + + "\x03\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x05\x03\x05\x03\x05\x03" + + "\x05\x03\x05\x03\x06\x03\x06\x03\x06\x03\x06\x03\x06\x03\x06\x03\x07\x03" + + "\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\b\x03\b\x03\b\x03\b\x03" + + "\b\x03\b\x03\b\x03\t\x03\t\x03\t\x03\t\x03\t\x03\t\x03\n\x03\n\x03\n\x03" + + "\n\x03\n\x03\n\x03\v\x03\v\x03\v\x03\v\x03\v\x03\f\x03\f\x03\f\x03\f\x03" + + "\f\x03\r\x03\r\x03\r\x03\r\x03\r\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0F" + + "\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10\x03\x10\x03\x10\x03\x10" + + "\x03\x10\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x12" + + "\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x13\x03\x13\x03\x13\x03\x13" + + "\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03\x15\x03\x15" + + "\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x16\x03\x16\x03\x16" + + "\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x17\x03\x17\x03\x17" + + "\x03\x17\x03\x17\x03\x17\x03\x17\x03\x17\x03\x17\x03\x17\x03\x18\x03\x18" + + "\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x19\x03\x19\x03\x19\x03\x1A" + + "\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x03\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1D" + + "\x03\x1D\x03\x1D\x03\x1D\x03\x1D\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1E" + + "\x03\x1E\x03\x1E\x03\x1E\x03\x1F\x03\x1F\x03 \x03 \x03 \x03 \x03 \x03" + + "!\x03!\x03!\x03!\x03!\x03!\x03!\x03!\x03!\x03\"\x03\"\x03\"\x03\"\x03" + + "\"\x03\"\x03\"\x03#\x03#\x03#\x03#\x03#\x03$\x03$\x03$\x03$\x03%\x03%" + + "\x03%\x03&\x03&\x03&\x03&\x03\'\x03\'\x03\'\x03\'\x03\'\x03\'\x03\'\x03" + + "\'\x03\'\x03\'\x03(\x03(\x03(\x03(\x03(\x03(\x03(\x03(\x03(\x03(\x03(" + + "\x03(\x03)\x03)\x03)\x03)\x03)\x03)\x03)\x03)\x03)\x03)\x03)\x03)\x03" + + ")\x03)\x03)\x03)\x03)\x03)\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03" + + "*\x03*\x03*\x03+\x03+\x03+\x03+\x03+\x03+\x03+\x03,\x03,\x03,\x03,\x03" + + ",\x03,\x03-\x03-\x03-\x03-\x03-\x03-\x03-\x03-\x03-\x03-\x03.\x03.\x03" + + ".\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03/\x03/\x03/\x03/\x03/\x03" + + "/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x030\x030\x030\x030\x030\x03" + + "0\x030\x030\x030\x030\x030\x030\x030\x030\x030\x030\x031\x031\x031\x03" + + "1\x031\x031\x031\x031\x031\x031\x031\x031\x031\x032\x032\x032\x032\x03" + + "2\x032\x032\x032\x032\x032\x032\x032\x033\x033\x033\x033\x033\x033\x03" + + "3\x033\x033\x033\x033\x033\x033\x034\x034\x034\x034\x034\x034\x034\x03" + + "4\x034\x034\x034\x035\x035\x035\x035\x035\x035\x035\x035\x035\x035\x03" + + "5\x035\x035\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x03" + + "6\x036\x036\x036\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + + "7\x038\x038\x038\x038\x038\x038\x038\x038\x038\x038\x039\x039\x039\x03" + + "9\x039\x039\x039\x039\x039\x039\x039\x039\x039\x039\x039\x039\x039\x03" + + "9\x039\x03:\x03:\x03:\x03:\x03:\x03:\x03:\x03:\x03:\x03:\x03:\x03:\x03" + + ":\x03:\x03:\x03:\x03:\x03:\x03:\x03:\x03:\x03:\x03:\x03:\x03;\x03;\x03" + + ";\x03;\x03;\x03<\x03<\x03<\x03=\x03=\x03=\x03=\x03>\x03>\x03>\x03?\x03" + + "?\x03?\x03?\x03@\x03@\x03@\x03@\x03A\x03A\x03A\x03A\x03A\x03B\x03B\x03" + + "B\x03B\x03B\x03B\x03C\x03C\x03C\x03C\x03C\x03C\x03C\x03D\x03D\x03D\x03" + + "D\x03D\x03D\x03D\x03D\x03D\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03" + + "E\x03F\x03F\x03F\x03F\x03F\x03F\x03F\x03F\x03F\x03F\x03F\x03F\x03G\x03" + + "G\x03G\x03G\x03G\x03G\x03G\x03G\x03G\x03G\x03G\x03G\x03H\x03H\x03H\x03" + + "H\x03H\x03H\x03H\x03I\x03I\x03I\x03I\x03I\x03I\x03I\x03J\x03J\x03J\x03" + + "J\x03J\x03K\x03K\x03K\x03K\x03L\x03L\x03L\x03L\x03L\x03M\x03M\x03M\x03" + + "M\x03M\x03M\x03N\x03N\x03N\x03N\x03N\x03N\x03N\x03N\x03O\x03O\x03O\x03" + + "O\x03O\x03P\x03P\x03P\x03P\x03P\x03P\x03P\x03P\x03P\x03P\x03P\x03P\x03" + + "P\x03P\x03P\x03P\x03P\x03P\x03P\x03Q\x03Q\x03Q\x03Q\x03Q\x03Q\x03Q\x03" + + "Q\x03Q\x03Q\x03Q\x03Q\x03Q\x03Q\x03Q\x03Q\x03Q\x03Q\x03Q\x03R\x03R\x03" + + "R\x03R\x03R\x03R\x03R\x03R\x03R\x03R\x03R\x03R\x03R\x03R\x03S\x03S\x03" + + "S\x03S\x03S\x03S\x03S\x03S\x03S\x03S\x03S\x03S\x03S\x03S\x03S\x03S\x03" + + "S\x03T\x03T\x03T\x03T\x03T\x03T\x03T\x03T\x03T\x03T\x03T\x03T\x03U\x03" + + "U\x03U\x03U\x03U\x03U\x03U\x03U\x03U\x03U\x03U\x03U\x03V\x03V\x03V\x03" + + "V\x03V\x03V\x03V\x03V\x03V\x03V\x03V\x03V\x03V\x03V\x03V\x03V\x03W\x03" + + "W\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x03X\x03X\x03X\x03X\x03" + + "X\x03X\x03X\x03X\x03X\x03X\x03X\x03Y\x03Y\x03Y\x03Y\x03Y\x03Y\x03Y\x03" + + "Y\x03Y\x03Z\x03Z\x03Z\x03Z\x03Z\x03Z\x03Z\x03Z\x03Z\x03Z\x03Z\x03[\x03" + + "[\x03[\x03[\x03[\x03[\x03[\x03[\x03[\x03[\x03[\x03\\\x03\\\x03\\\x03\\" + + "\x03\\\x03\\\x03\\\x03\\\x03\\\x03\\\x03]\x03]\x03]\x03]\x03]\x03]\x03" + + "]\x03^\x03^\x03^\x03^\x03^\x03^\x03^\x03^\x03^\x03^\x03^\x03^\x03_\x03" + + "_\x03_\x03_\x03`\x03`\x03`\x03`\x03`\x03`\x03`\x03`\x03a\x03a\x03a\x03" + + "a\x03a\x03a\x03a\x03b\x03b\x03b\x03b\x03b\x03c\x03c\x03c\x03c\x03c\x03" + + "c\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03e\x03e\x03e\x03e\x03e\x03e\x03" + + "e\x03e\x03f\x03f\x03g\x03g\x03h\x03h\x03i\x03i\x03j\x03j\x03k\x03k\x03" + + "l\x03l\x03l\x03m\x03m\x03m\x03n\x03n\x03n\x03o\x03o\x03p\x03p\x03q\x03" + + "q\x03r\x03r\x03s\x03s\x03t\x03t\x03u\x03u\x03v\x03v\x03w\x03w\x03x\x03" + + "x\x03y\x03y\x03z\x03z\x03{\x03{\x03|\x03|\x03}\x03}\x03~\x03~\x03\x7F" + + "\x03\x7F\x03\x80\x03\x80\x03\x80\x03\x80\x03\x81\x03\x81\x03\x81\x03\x81" + + "\x03\x81\x03\x81\x03\x82\x03\x82\x03\x82\x03\x82\x03\x82\x03\x82\x03\x82" + + "\x03\x82\x03\x82\x03\x82\x03\x82\x03\x82\x03\x82\x03\x82\x03\x82\x03\x83" + + "\x03\x83\x03\x83\x03\x83\x03\x83\x03\x83\x03\x84\x03\x84\x03\x84\x03\x84" + + "\x03\x84\x03\x84\x03\x84\x03\x84\x03\x84\x03\x84\x03\x84\x03\x84\x03\x85" + + "\x03\x85\x03\x85\x03\x85\x03\x86\x03\x86\x03\x86\x03\x86\x03\x86\x03\x87" + + "\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x88\x03\x88\x03\x88" + + "\x03\x88\x03\x89\x03\x89\x03\x89\x03\x89\x03\x89\x03\x8A\x03\x8A\x03\x8A" + + "\x03\x8A\x03\x8A\x03\x8A\x03\x8B\x03\x8B\x03\x8B\x03\x8B\x03\x8B\x03\x8B" + + "\x03\x8C\x03\x8C\x03\x8C\x03\x8C\x03\x8C\x03\x8C\x03\x8C\x03\x8D\x03\x8D" + + "\x03\x8D\x03\x8D\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8F" + + "\x03\x8F\x03\x8F\x03\x8F\x03\x8F\x03\x8F\x03\x8F\x03\x8F\x03\x8F\x03\x90" + + "\x03\x90\x03\x90\x03\x90\x03\x90\x03\x90\x03\x90\x03\x90\x03\x91\x03\x91" + + "\x03\x91\x03\x91\x03\x91\x03\x91\x03\x91\x03\x91\x03\x91\x03\x91\x03\x91" + + "\x03\x91\x03\x92\x03\x92\x03\x92\x03\x92\x03\x92\x03\x92\x03\x92\x03\x92" + + "\x03\x92\x03\x92\x03\x92\x03\x93\x03\x93\x03\x93\x03\x93\x03\x93\x03\x93" + + "\x03\x93\x03\x93\x03\x93\x03\x93\x03\x93\x03\x94\x03\x94\x03\x94\x03\x94" + + "\x03\x94\x03\x95\x03\x95\x03\x95\x03\x95\x03\x95\x03\x95\x03\x96\x03\x96" + + "\x03\x96\x03\x96\x03\x96\x03\x97\x03\x97\x03\x97\x03\x97\x03\x97\x03\x98" + + "\x03\x98\x03\x98\x03\x98\x03\x98\x03\x98\x03\x98\x03\x99\x03\x99\x03\x99" + + "\x03\x99\x03\x99\x03\x99\x03\x99\x03\x99\x03\x99\x03\x9A\x03\x9A\x03\x9A" + + "\x03\x9A\x03\x9A\x03\x9A\x03\x9A\x03\x9A\x03\x9A\x03\x9A\x03\x9A\x03\x9A" + + "\x03\x9A\x03\x9A\x03\x9B\x03\x9B\x03\x9B\x03\x9B\x03\x9B\x03\x9B\x03\x9B" + + "\x03\x9C\x03\x9C\x03\x9C\x03\x9C\x03\x9C\x03\x9C\x03\x9C\x03\x9C\x03\x9C" + + "\x03\x9C\x03\x9C\x03\x9C\x03\x9D\x03\x9D\x03\x9D\x03\x9D\x03\x9D\x03\x9D" + + "\x03\x9D\x03\x9D\x03\x9E\x03\x9E\x03\x9E\x03\x9E\x03\x9E\x03\x9E\x03\x9E" + + "\x03\x9E\x03\x9E\x03\x9F\x03\x9F\x03\x9F\x03\x9F\x03\x9F\x03\x9F\x03\x9F" + + "\x03\x9F\x03\x9F\x03\x9F\x03\x9F\x03\xA0\x03\xA0\x03\xA0\x03\xA0\x03\xA0" + + "\x03\xA0\x03\xA0\x03\xA0\x03\xA0\x03\xA0\x03\xA0\x03\xA1\x03\xA1\x03\xA1" + + "\x03\xA1\x03\xA1\x03\xA2\x03\xA2\x03\xA2\x03\xA2\x03\xA2\x03\xA2\x03\xA2" + + "\x03\xA2\x03\xA2\x03\xA2\x03\xA3\x03\xA3\x03\xA4\x03\xA4\x03\xA4\x03\xA5" + + "\x03\xA5\x03\xA5\x03\xA5\x03\xA6\x03\xA6\x03\xA6\x03\xA6\x03\xA6\x03\xA7" + + "\x03\xA7\x03\xA7\x03\xA7\x03\xA7\x03\xA7\x03\xA7\x03\xA7\x03\xA8\x03\xA8" + + "\x03\xA8\x03\xA8\x03\xA8\x03\xA9\x03\xA9\x03\xA9\x03\xA9\x03\xA9\x03\xA9" + + "\x03\xAA\x03\xAA\x03\xAB\x03\xAB\x03\xAB\x03\xAB\x03\xAC\x03\xAC\x03\xAC" + + "\x03\xAC\x03\xAC\x03\xAC\x03\xAD\x03\xAD\x03\xAD\x03\xAE\x03\xAE\x03\xAE" + + "\x03\xAE\x03\xAF\x03\xAF\x03\xAF\x03\xAF\x03\xAF\x03\xAF\x03\xB0\x03\xB0" + + "\x03\xB0\x03\xB0\x03\xB0\x03\xB1\x03\xB1\x03\xB1\x03\xB1\x03\xB2\x03\xB2" + + "\x03\xB2\x03\xB3\x03\xB3\x03\xB3\x03\xB3\x03\xB4\x03\xB4\x03\xB4\x03\xB4" + + "\x03\xB4\x03\xB4\x03\xB5\x03\xB5\x03\xB5\x03\xB5\x03\xB5\x03\xB6\x03\xB6" + + "\x03\xB6\x03\xB6\x03\xB6\x03\xB6\x03\xB7\x03\xB7\x03\xB7\x03\xB7\x03\xB7" + + "\x03\xB8\x03\xB8\x03\xB8\x03\xB8\x03\xB8\x03\xB9\x03\xB9\x03\xB9\x03\xB9" + + "\x03\xB9\x03\xB9\x03\xB9\x03\xB9\x03\xB9\x03\xBA\x03\xBA\x03\xBA\x03\xBA" + + "\x03\xBA\x03\xBB\x03\xBB\x03\xBB\x03\xBB\x03\xBB\x03\xBC\x03\xBC\x03\xBC" + + "\x03\xBC\x03\xBC\x03\xBD\x03\xBD\x03\xBD\x03\xBD\x03\xBD\x03\xBD\x03\xBE" + + "\x03\xBE\x03\xBE\x03\xBE\x03\xBF\x03\xBF\x03\xBF\x03\xBF\x03\xC0\x03\xC0" + + "\x03\xC0\x03\xC0\x03\xC0\x03\xC0\x03\xC0\x03\xC0\x03\xC1\x03\xC1\x03\xC1" + + "\x03\xC1\x03\xC1\x03\xC1\x03\xC1\x03\xC1\x03\xC2\x03\xC2\x03\xC2\x03\xC2" + + "\x03\xC3\x03\xC3\x03\xC3\x03\xC3\x03\xC4\x03\xC4\x03\xC4\x03\xC4\x03\xC4" + + "\x03\xC4\x03\xC4\x03\xC4\x03\xC5\x03\xC5\x03\xC5\x03\xC5\x03\xC5\x03\xC5" + + "\x03\xC5\x03\xC5\x03\xC6\x03\xC6\x03\xC6\x03\xC6\x03\xC6\x03\xC6\x03\xC6" + + "\x03\xC6\x03\xC6\x03\xC6\x03\xC6\x03\xC6\x03\xC6\x03\xC7\x03\xC7\x03\xC7" + + "\x03\xC7\x03\xC7\x03\xC7\x03\xC7\x03\xC7\x03\xC7\x03\xC7\x03\xC7\x03\xC7" + + "\x03\xC7\x03\xC8\x03\xC8\x03\xC8\x03\xC8\x03\xC8\x03\xC8\x03\xC8\x03\xC8" + + "\x03\xC8\x03\xC8\x03\xC8\x03\xC8\x03\xC8\x03\xC8\x03\xC8\x03\xC8\x03\xC8" + + "\x03\xC8\x03\xC9\x03\xC9\x03\xC9\x03\xC9\x03\xC9\x03\xC9\x03\xC9\x03\xC9" + + "\x03\xCA\x03\xCA\x03\xCA\x03\xCA\x03\xCA\x03\xCB\x03\xCB\x03\xCB\x03\xCB" + + "\x03\xCB\x03\xCB\x03\xCB\x03\xCB\x03\xCB\x03\xCC\x03\xCC\x03\xCC\x03\xCC" + + "\x03\xCC\x03\xCC\x03\xCC\x03\xCC\x03\xCC\x03\xCC\x03\xCC\x03\xCC\x03\xCD" + + "\x03\xCD\x03\xCD\x03\xCD\x03\xCD\x03\xCD\x03\xCD\x03\xCD\x03\xCD\x03\xCE" + + "\x03\xCE\x03\xCE\x03\xCE\x03\xCE\x03\xCE\x03\xCE\x03\xCE\x03\xCF\x03\xCF" + + "\x03\xCF\x03\xCF\x03\xCF\x03\xCF\x03\xCF\x03\xCF\x03\xCF\x03\xCF\x03\xCF" + + "\x03\xD0\x03\xD0\x03\xD0\x03\xD0\x03\xD0\x03\xD0\x03\xD0\x03\xD0\x03\xD0" + + "\x03\xD0\x03\xD1\x03\xD1\x03\xD1\x03\xD1\x03\xD1\x03\xD1\x03\xD1\x03\xD1" + + "\x03\xD1\x03\xD1\x03\xD2\x03\xD2\x03\xD2\x03\xD2\x03\xD2\x03\xD2\x03\xD2" + + "\x03\xD2\x03\xD2\x03\xD2\x03\xD3\x03\xD3\x03\xD3\x03\xD3\x03\xD3\x03\xD3" + + "\x03\xD3\x03\xD3\x03\xD3\x03\xD3\x03\xD4\x03\xD4\x03\xD4\x03\xD4\x03\xD4" + + "\x03\xD4\x03\xD4\x03\xD4\x03\xD4\x03\xD4\x03\xD4\x03\xD4\x03\xD4\x03\xD4" + + "\x03\xD4\x03\xD5\x03\xD5\x03\xD5\x03\xD5\x03\xD5\x03\xD5\x03\xD5\x03\xD5" + + "\x03\xD5\x03\xD5\x03\xD5\x03\xD5\x03\xD5\x03\xD5\x03\xD6\x03\xD6\x03\xD6" + + "\x03\xD6\x03\xD6\x03\xD6\x03\xD6\x03\xD6\x03\xD6\x03\xD7\x03\xD7\x03\xD7" + + "\x03\xD7\x03\xD7\x03\xD7\x03\xD7\x03\xD7\x03\xD7\x03\xD8\x03\xD8\x03\xD8" + + "\x03\xD8\x03\xD8\x03\xD8\x03\xD8\x03\xD8\x03\xD8\x03\xD8\x03\xD9\x03\xD9" + + "\x03\xD9\x03\xD9\x03\xDA\x03\xDA\x03\xDA\x03\xDA\x03\xDA\x03\xDA\x03\xDA" + + "\x03\xDA\x03\xDA\x03\xDA\x03\xDA\x03\xDB\x03\xDB\x03\xDB\x03\xDB\x03\xDB" + + "\x03\xDB\x03\xDB\x03\xDB\x03\xDB\x03\xDB\x03\xDB\x03\xDB\x03\xDC\x03\xDC" + + "\x03\xDC\x03\xDC\x03\xDC\x03\xDC\x03\xDC\x03\xDC\x03\xDD\x03\xDD\x03\xDD" + + "\x03\xDD\x03\xDD\x03\xDD\x03\xDD\x03\xDD\x03\xDE\x03\xDE\x03\xDE\x03\xDE" + + "\x03\xDE\x03\xDF\x03\xDF\x03\xDF\x03\xDF\x03\xDF\x03\xDF\x03\xDF\x03\xDF" + + "\x03\xDF\x03\xDF\x03\xDF\x03\xDF\x03\xE0\x03\xE0\x03\xE0\x03\xE0\x03\xE0" + + "\x03\xE0\x03\xE0\x03\xE0\x03\xE0\x03\xE0\x03\xE1\x03\xE1\x03\xE1\x03\xE1" + + "\x03\xE1\x03\xE1\x03\xE1\x03\xE1\x03\xE2\x03\xE2\x03\xE2\x03\xE2\x03\xE2" + + "\x03\xE2\x03\xE2\x03\xE2\x03\xE2\x03\xE3\x03\xE3\x03\xE3\x03\xE3\x03\xE3" + + "\x03\xE3\x03\xE3\x03\xE3\x03\xE3\x03\xE4\x03\xE4\x03\xE4\x03\xE4\x03\xE4" + + "\x03\xE4\x03\xE4\x03\xE4\x03\xE4\x03\xE4\x03\xE4\x03\xE4\x03\xE4\x03\xE4" + + "\x03\xE5\x03\xE5\x03\xE5\x03\xE5\x03\xE5\x03\xE5\x03\xE5\x03\xE5\x03\xE5" + + "\x03\xE5\x03\xE5\x03\xE5\x03\xE5\x03\xE5\x03\xE5\x03\xE6\x03\xE6\x03\xE6" + + "\x03\xE6\x03\xE6\x03\xE6\x03\xE6\x03\xE7\x03\xE7\x03\xE7\x03\xE7\x03\xE7" + + "\x03\xE7\x03\xE7\x03\xE7\x03\xE7\x03\xE7\x03\xE8\x03\xE8\x03\xE8\x03\xE8" + + "\x03\xE8\x03\xE8\x03\xE9\x03\xE9\x03\xE9\x03\xE9\x03\xE9\x03\xE9\x03\xEA" + + "\x03\xEA\x03\xEA\x03\xEA\x03\xEA\x03\xEB\x03\xEB\x03\xEB\x03\xEC\x03\xEC" + + "\x03\xEC\x03\xEC\x03\xEC\x03\xEC\x03\xED\x03\xED\x03\xED\x03\xED\x03\xED" + + "\x03\xED\x03\xEE\x03\xEE\x03\xEE\x03\xEE\x03\xEE\x03\xEE\x03\xEE\x03\xEF" + + "\x03\xEF\x03\xEF\x03\xEF\x03\xEF\x03\xEF\x03\xEF\x03\xEF\x03\xEF\x03\xEF" + + "\x03\xF0\x03\xF0\x03\xF0\x03\xF0\x03\xF0\x03\xF0\x03\xF0\x03\xF1\x03\xF1" + + "\x03\xF1\x03\xF1\x03\xF1\x03\xF1\x03\xF1\x03\xF2\x03\xF2\x03\xF2\x03\xF2" + + "\x03\xF2\x03\xF2\x03\xF3\x03\xF3\x03\xF3\x03\xF3\x03\xF3\x03\xF4\x03\xF4" + + "\x03\xF4\x03\xF4\x03\xF4\x03\xF4\x03\xF5\x03\xF5\x03\xF5\x03\xF5\x03\xF5" + + "\x03\xF5\x03\xF5\x03\xF6\x03\xF6\x03\xF6\x03\xF6\x03\xF6\x03\xF6\x03\xF6" + + "\x03\xF6\x03\xF7\x03\xF7\x03\xF7\x03\xF7\x03\xF7\x03\xF8\x03\xF8\x03\xF8" + + "\x03\xF8\x03\xF8\x03\xF9\x03\xF9\x03\xF9\x03\xF9\x03\xF9\x03\xF9\x03\xF9" + + "\x03\xFA\x03\xFA\x03\xFA\x03\xFA\x03\xFA\x03\xFA\x03\xFA\x03\xFA\x03\xFA" + + "\x03\xFA\x03\xFB\x03\xFB\x03\xFB\x03\xFB\x03\xFB\x03\xFB\x03\xFB\x03\xFC" + + "\x03\xFC\x03\xFC\x03\xFC\x03\xFC\x03\xFC\x03\xFC\x03\xFD\x03\xFD\x03\xFD" + + "\x03\xFE\x03\xFE\x03\xFE\x03\xFE\x03\xFE\x03\xFE\x03\xFE\x03\xFF\x03\xFF" + + "\x03\xFF\x03\xFF\x03\xFF\x03\xFF\x03\u0100\x03\u0100\x03\u0100\x03\u0100" + + "\x03\u0100\x03\u0100\x03\u0100\x03\u0100\x03\u0100\x03\u0100\x03\u0100" + + "\x03\u0100\x03\u0100\x03\u0101\x03\u0101\x03\u0101\x03\u0101\x03\u0101" + + "\x03\u0101\x03\u0101\x03\u0101\x03\u0101\x03\u0101\x03\u0101\x03\u0101" + + "\x03\u0101\x03\u0101\x03\u0101\x03\u0101\x03\u0101\x03\u0101\x03\u0101" + + "\x03\u0101\x03\u0102\x03\u0102\x03\u0102\x03\u0102\x03\u0102"; + private static readonly _serializedATNSegment1: string = + "\x03\u0102\x03\u0102\x03\u0102\x03\u0102\x03\u0102\x03\u0102\x03\u0102" + + "\x03\u0102\x03\u0102\x03\u0102\x03\u0102\x03\u0102\x03\u0102\x03\u0103" + + "\x03\u0103\x03\u0103\x03\u0103\x03\u0103\x03\u0103\x03\u0103\x03\u0103" + + "\x03\u0103\x03\u0103\x03\u0103\x03\u0103\x03\u0103\x03\u0103\x03\u0103" + + "\x03\u0103\x03\u0103\x03\u0103\x03\u0103\x03\u0103\x03\u0104\x03\u0104" + + "\x03\u0104\x03\u0104\x03\u0104\x03\u0104\x03\u0104\x03\u0104\x03\u0104" + + "\x03\u0104\x03\u0104\x03\u0104\x03\u0105\x03\u0105\x03\u0105\x03\u0105" + + "\x03\u0105\x03\u0105\x03\u0105\x03\u0105\x03\u0105\x03\u0105\x03\u0105" + + "\x03\u0105\x03\u0105\x03\u0106\x03\u0106\x03\u0106\x03\u0106\x03\u0106" + + "\x03\u0106\x03\u0106\x03\u0106\x03\u0106\x03\u0106\x03\u0106\x03\u0106" + + "\x03\u0106\x03\u0106\x03\u0106\x03\u0106\x03\u0106\x03\u0106\x03\u0106" + + "\x03\u0106\x03\u0106\x03\u0106\x03\u0106\x03\u0107\x03\u0107\x03\u0107" + + "\x03\u0107\x03\u0107\x03\u0107\x03\u0107\x03\u0107\x03\u0107\x03\u0107" + + "\x03\u0107\x03\u0107\x03\u0107\x03\u0107\x03\u0107\x03\u0107\x03\u0107" + + "\x03\u0108\x03\u0108\x03\u0108\x03\u0108\x03\u0108\x03\u0108\x03\u0108" + + "\x03\u0108\x03\u0108\x03\u0109\x03\u0109\x03\u0109\x03\u0109\x03\u0109" + + "\x03\u0109\x03\u0109\x03\u0109\x03\u0109\x03\u0109\x03\u0109\x03\u0109" + + "\x03\u0109\x03\u0109\x03\u0109\x03\u0109\x03\u0109\x03\u0109\x03\u0109" + + "\x03\u0109\x03\u0109\x03\u0109\x03\u0109\x03\u0109\x03\u0109\x03\u0109" + + "\x03\u0109\x03\u0109\x03\u0109\x03\u0109\x03\u0109\x03\u0109\x03\u0109" + + "\x03\u0109\x03\u0109\x03\u0109\x03\u010A\x03\u010A\x03\u010A\x03\u010A" + + "\x03\u010A\x03\u010A\x03\u010B\x03\u010B\x03\u010B\x03\u010B\x03\u010B" + + "\x03\u010B\x03\u010B\x03\u010B\x03\u010B\x03\u010B\x03\u010B\x03\u010B" + + "\x03\u010B\x03\u010B\x03\u010B\x03\u010B\x03\u010B\x03\u010C\x03\u010C" + + "\x03\u010C\x03\u010C\x03\u010C\x03\u010C\x03\u010C\x03\u010C\x03\u010C" + + "\x03\u010C\x03\u010C\x03\u010C\x03\u010C\x03\u010C\x03\u010D\x03\u010D" + + "\x03\u010D\x03\u010D\x03\u010D\x03\u010D\x03\u010D\x03\u010D\x03\u010D" + + "\x03\u010D\x03\u010D\x03\u010D\x03\u010D\x03\u010D\x03\u010D\x03\u010D" + + "\x03\u010D\x03\u010E\x03\u010E\x03\u010E\x03\u010E\x03\u010E\x03\u010E" + + "\x03\u010E\x03\u010E\x03\u010E\x03\u010E\x03\u010E\x03\u010E\x03\u010E" + + "\x03\u010E\x03\u010E\x03\u010E\x03\u010E\x03\u010E\x03\u010E\x03\u010E" + + "\x03\u010E\x03\u010E\x03\u010E\x03\u010E\x03\u010E\x03\u010E\x03\u010E" + + "\x03\u010F\x03\u010F\x03\u010F\x03\u010F\x03\u010F\x03\u010F\x03\u010F" + + "\x03\u0110\x03\u0110\x03\u0110\x03\u0110\x03\u0110\x03\u0110\x03\u0111" + + "\x03\u0111\x03\u0111\x03\u0111\x03\u0111\x03\u0111\x03\u0111\x03\u0111" + + "\x03\u0111\x03\u0111\x03\u0111\x03\u0111\x03\u0111\x03\u0111\x03\u0111" + + "\x03\u0111\x03\u0111\x03\u0111\x03\u0111\x03\u0111\x03\u0111\x03\u0112" + + "\x03\u0112\x03\u0112\x03\u0112\x03\u0112\x03\u0112\x03\u0112\x03\u0112" + + "\x03\u0112\x03\u0112\x03\u0112\x03\u0112\x03\u0112\x03\u0112\x03\u0112" + + "\x03\u0112\x03\u0112\x03\u0112\x03\u0112\x03\u0112\x03\u0113\x03\u0113" + + "\x03\u0113\x03\u0113\x03\u0113\x03\u0113\x03\u0113\x03\u0113\x03\u0113" + + "\x03\u0113\x03\u0113\x03\u0113\x03\u0113\x03\u0113\x03\u0113\x03\u0113" + + "\x03\u0113\x03\u0113\x03\u0113\x03\u0113\x03\u0113\x03\u0114\x03\u0114" + + "\x03\u0114\x03\u0114\x03\u0114\x03\u0114\x03\u0114\x03\u0114\x03\u0114" + + "\x03\u0114\x03\u0114\x03\u0114\x03\u0114\x03\u0114\x03\u0115\x03\u0115" + + "\x03\u0115\x03\u0115\x03\u0115\x03\u0115\x03\u0115\x03\u0115\x03\u0115" + + "\x03\u0115\x03\u0116\x03\u0116\x03\u0116\x03\u0116\x03\u0116\x03\u0116" + + "\x03\u0116\x03\u0116\x03\u0117\x03\u0117\x03\u0117\x03\u0117\x03\u0117" + + "\x03\u0117\x03\u0117\x03\u0117\x03\u0117\x03\u0117\x03\u0117\x03\u0117" + + "\x03\u0117\x03\u0117\x03\u0117\x03\u0117\x03\u0117\x03\u0117\x03\u0118" + + "\x03\u0118\x03\u0118\x03\u0118\x03\u0118\x03\u0118\x03\u0118\x03\u0118" + + "\x03\u0118\x03\u0118\x03\u0118\x03\u0118\x03\u0118\x03\u0118\x03\u0118" + + "\x03\u0118\x03\u0118\x03\u0118\x03\u0118\x03\u0118\x03\u0118\x03\u0118" + + "\x03\u0118\x03\u0118\x03\u0119\x03\u0119\x03\u0119\x03\u0119\x03\u0119" + + "\x03\u0119\x03\u0119\x03\u0119\x03\u0119\x03\u0119\x03\u0119\x03\u0119" + + "\x03\u0119\x03\u0119\x03\u0119\x03\u011A\x03\u011A\x03\u011A\x03\u011A" + + "\x03\u011A\x03\u011A\x03\u011A\x03\u011A\x03\u011A\x03\u011A\x03\u011A" + + "\x03\u011A\x03\u011A\x03\u011A\x03\u011A\x03\u011A\x03\u011A\x03\u011A" + + "\x03\u011A\x03\u011A\x03\u011A\x03\u011B\x03\u011B\x03\u011B\x03\u011B" + + "\x03\u011B\x03\u011B\x03\u011B\x03\u011B\x03\u011B\x03\u011C\x03\u011C" + + "\x03\u011C\x03\u011C\x03\u011C\x03\u011C\x03\u011C\x03\u011C\x03\u011C" + + "\x03\u011C\x03\u011C\x03\u011C\x03\u011D\x03\u011D\x03\u011D\x03\u011D" + + "\x03\u011D\x03\u011D\x03\u011D\x03\u011D\x03\u011D\x03\u011D\x03\u011D" + + "\x03\u011D\x03\u011D\x03\u011D\x03\u011E\x03\u011E\x03\u011E\x03\u011E" + + "\x03\u011E\x03\u011E\x03\u011E\x03\u011E\x03\u011E\x03\u011E\x03\u011E" + + "\x03\u011E\x03\u011E\x03\u011E\x03\u011E\x03\u011F\x03\u011F\x03\u011F" + + "\x03\u011F\x03\u011F\x03\u011F\x03\u011F\x03\u011F\x03\u011F\x03\u011F" + + "\x03\u011F\x03\u011F\x03\u011F\x03\u011F\x03\u011F\x03\u011F\x03\u011F" + + "\x03\u011F\x03\u011F\x03\u0120\x03\u0120\x03\u0120\x03\u0120\x03\u0120" + + "\x03\u0120\x03\u0120\x03\u0120\x03\u0121\x03\u0121\x03\u0121\x03\u0121" + + "\x03\u0121\x03\u0122\x03\u0122\x03\u0122\x03\u0122\x03\u0122\x03\u0122" + + "\x03\u0122\x03\u0122\x03\u0122\x03\u0122\x03\u0122\x03\u0122\x03\u0123" + + "\x03\u0123\x03\u0123\x03\u0123\x03\u0123\x03\u0124\x03\u0124\x03\u0124" + + "\x03\u0124\x03\u0124\x03\u0124\x03\u0124\x03\u0124\x03\u0124\x03\u0124" + + "\x03\u0124\x03\u0124\x03\u0124\x03\u0124\x03\u0124\x03\u0124\x03\u0124" + + "\x03\u0125\x03\u0125\x03\u0125\x03\u0125\x03\u0125\x03\u0126\x03\u0126" + + "\x03\u0126\x03\u0127\x03\u0127\x03\u0128\x03\u0128\x03\u0129\x03\u0129" + + "\x03\u012A\x03\u012A\x03\u012B\x03\u012B\x03\u012C\x03\u012C\x03\u012D" + + "\x03\u012D\x03\u012E\x06\u012E\u0BE5\n\u012E\r\u012E\x0E\u012E\u0BE6\x03" + + "\u012F\x06\u012F\u0BEA\n\u012F\r\u012F\x0E\u012F\u0BEB\x05\u012F\u0BEE" + + "\n\u012F\x03\u012F\x03\u012F\x06\u012F\u0BF2\n\u012F\r\u012F\x0E\u012F" + + "\u0BF3\x03\u0130\x03\u0130\x06\u0130\u0BF8\n\u0130\r\u0130\x0E\u0130\u0BF9" + + "\x07\u0130\u0BFC\n\u0130\f\u0130\x0E\u0130\u0BFF\v\u0130\x03\u0131\x06" + + "\u0131\u0C02\n\u0131\r\u0131\x0E\u0131\u0C03\x03\u0131\x07\u0131\u0C07" + + "\n\u0131\f\u0131\x0E\u0131\u0C0A\v\u0131\x03\u0132\x03\u0132\x03\u0132" + + "\x03\u0133\x03\u0133\x03\u0133\x03\u0133\x03\u0133\x03\u0133\x07\u0133" + + "\u0C15\n\u0133\f\u0133\x0E\u0133\u0C18\v\u0133\x03\u0133\x03\u0133\x03" + + "\u0134\x03\u0134\x03\u0134\x03\u0134\x03\u0134\x03\u0134\x07\u0134\u0C22" + + "\n\u0134\f\u0134\x0E\u0134\u0C25\v\u0134\x03\u0134\x03\u0134\x03\u0135" + + "\x03\u0135\x03\u0135\x03\u0135\x03\u0135\x03\u0135\x07\u0135\u0C2F\n\u0135" + + "\f\u0135\x0E\u0135\u0C32\v\u0135\x03\u0135\x03\u0135\x03\u0136\x03\u0136" + + "\x03\u0137\x03\u0137\x03\u0137\x03\u0137\x03\u0C03\x02\x02\u0138\x03\x02" + + "\x03\x05\x02\x04\x07\x02\x05\t\x02\x06\v\x02\x07\r\x02\b\x0F\x02\t\x11" + + "\x02\n\x13\x02\v\x15\x02\f\x17\x02\r\x19\x02\x0E\x1B\x02\x0F\x1D\x02\x10" + + "\x1F\x02\x11!\x02\x12#\x02\x13%\x02\x14\'\x02\x15)\x02\x16+\x02\x17-\x02" + + "\x18/\x02\x191\x02\x1A3\x02\x1B5\x02\x1C7\x02\x1D9\x02\x1E;\x02\x1F=\x02" + + " ?\x02!A\x02\"C\x02#E\x02$G\x02%I\x02&K\x02\'M\x02(O\x02)Q\x02*S\x02+" + + "U\x02,W\x02-Y\x02.[\x02/]\x020_\x021a\x022c\x023e\x024g\x025i\x026k\x02" + + "7m\x028o\x029q\x02:s\x02;u\x02{\x02?}\x02@\x7F\x02A\x81\x02" + + "B\x83\x02C\x85\x02D\x87\x02E\x89\x02F\x8B\x02G\x8D\x02H\x8F\x02I\x91\x02" + + "J\x93\x02K\x95\x02L\x97\x02M\x99\x02N\x9B\x02O\x9D\x02P\x9F\x02Q\xA1\x02" + + "R\xA3\x02S\xA5\x02T\xA7\x02U\xA9\x02V\xAB\x02W\xAD\x02X\xAF\x02Y\xB1\x02" + + "Z\xB3\x02[\xB5\x02\\\xB7\x02]\xB9\x02^\xBB\x02_\xBD\x02`\xBF\x02a\xC1" + + "\x02b\xC3\x02c\xC5\x02d\xC7\x02e\xC9\x02f\xCB\x02g\xCD\x02h\xCF\x02i\xD1" + + "\x02j\xD3\x02k\xD5\x02l\xD7\x02m\xD9\x02n\xDB\x02o\xDD\x02p\xDF\x02q\xE1" + + "\x02r\xE3\x02s\xE5\x02t\xE7\x02u\xE9\x02v\xEB\x02w\xED\x02x\xEF\x02y\xF1" + + "\x02z\xF3\x02{\xF5\x02|\xF7\x02}\xF9\x02~\xFB\x02\x7F\xFD\x02\x80\xFF" + + "\x02\x81\u0101\x02\x82\u0103\x02\x83\u0105\x02\x84\u0107\x02\x85\u0109" + + "\x02\x86\u010B\x02\x87\u010D\x02\x88\u010F\x02\x89\u0111\x02\x8A\u0113" + + "\x02\x8B\u0115\x02\x8C\u0117\x02\x8D\u0119\x02\x8E\u011B\x02\x8F\u011D" + + "\x02\x90\u011F\x02\x91\u0121\x02\x92\u0123\x02\x93\u0125\x02\x94\u0127" + + "\x02\x95\u0129\x02\x96\u012B\x02\x97\u012D\x02\x98\u012F\x02\x99\u0131" + + "\x02\x9A\u0133\x02\x9B\u0135\x02\x9C\u0137\x02\x9D\u0139\x02\x9E\u013B" + + "\x02\x9F\u013D\x02\xA0\u013F\x02\xA1\u0141\x02\xA2\u0143\x02\xA3\u0145" + + "\x02\xA4\u0147\x02\xA5\u0149\x02\xA6\u014B\x02\xA7\u014D\x02\xA8\u014F" + + "\x02\xA9\u0151\x02\xAA\u0153\x02\xAB\u0155\x02\xAC\u0157\x02\xAD\u0159" + + "\x02\xAE\u015B\x02\xAF\u015D\x02\xB0\u015F\x02\xB1\u0161\x02\xB2\u0163" + + "\x02\xB3\u0165\x02\xB4\u0167\x02\xB5\u0169\x02\xB6\u016B\x02\xB7\u016D" + + "\x02\xB8\u016F\x02\xB9\u0171\x02\xBA\u0173\x02\xBB\u0175\x02\xBC\u0177" + + "\x02\xBD\u0179\x02\xBE\u017B\x02\xBF\u017D\x02\xC0\u017F\x02\xC1\u0181" + + "\x02\xC2\u0183\x02\xC3\u0185\x02\xC4\u0187\x02\xC5\u0189\x02\xC6\u018B" + + "\x02\xC7\u018D\x02\xC8\u018F\x02\xC9\u0191\x02\xCA\u0193\x02\xCB\u0195" + + "\x02\xCC\u0197\x02\xCD\u0199\x02\xCE\u019B\x02\xCF\u019D\x02\xD0\u019F" + + "\x02\xD1\u01A1\x02\xD2\u01A3\x02\xD3\u01A5\x02\xD4\u01A7\x02\xD5\u01A9" + + "\x02\xD6\u01AB\x02\xD7\u01AD\x02\xD8\u01AF\x02\xD9\u01B1\x02\xDA\u01B3" + + "\x02\xDB\u01B5\x02\xDC\u01B7\x02\xDD\u01B9\x02\xDE\u01BB\x02\xDF\u01BD" + + "\x02\xE0\u01BF\x02\xE1\u01C1\x02\xE2\u01C3\x02\xE3\u01C5\x02\xE4\u01C7" + + "\x02\xE5\u01C9\x02\xE6\u01CB\x02\xE7\u01CD\x02\xE8\u01CF\x02\xE9\u01D1" + + "\x02\xEA\u01D3\x02\xEB\u01D5\x02\xEC\u01D7\x02\xED\u01D9\x02\xEE\u01DB" + + "\x02\xEF\u01DD\x02\xF0\u01DF\x02\xF1\u01E1\x02\xF2\u01E3\x02\xF3\u01E5" + + "\x02\xF4\u01E7\x02\xF5\u01E9\x02\xF6\u01EB\x02\xF7\u01ED\x02\xF8\u01EF" + + "\x02\xF9\u01F1\x02\xFA\u01F3\x02\xFB\u01F5\x02\xFC\u01F7\x02\xFD\u01F9" + + "\x02\xFE\u01FB\x02\xFF\u01FD\x02\u0100\u01FF\x02\u0101\u0201\x02\u0102" + + "\u0203\x02\u0103\u0205\x02\u0104\u0207\x02\u0105\u0209\x02\u0106\u020B" + + "\x02\u0107\u020D\x02\u0108\u020F\x02\u0109\u0211\x02\u010A\u0213\x02\u010B" + + "\u0215\x02\u010C\u0217\x02\u010D\u0219\x02\u010E\u021B\x02\u010F\u021D" + + "\x02\u0110\u021F\x02\u0111\u0221\x02\u0112\u0223\x02\u0113\u0225\x02\u0114" + + "\u0227\x02\u0115\u0229\x02\u0116\u022B\x02\u0117\u022D\x02\u0118\u022F" + + "\x02\u0119\u0231\x02\u011A\u0233\x02\u011B\u0235\x02\u011C\u0237\x02\u011D" + + "\u0239\x02\u011E\u023B\x02\u011F\u023D\x02\u0120\u023F\x02\u0121\u0241" + + "\x02\u0122\u0243\x02\u0123\u0245\x02\u0124\u0247\x02\u0125\u0249\x02\u0126" + + "\u024B\x02\u0127\u024D\x02\u0128\u024F\x02\u0129\u0251\x02\u012A\u0253" + + "\x02\u012B\u0255\x02\u012C\u0257\x02\u012D\u0259\x02\u012E\u025B\x02\u012F" + + "\u025D\x02\u0130\u025F\x02\x02\u0261\x02\x02\u0263\x02\u0131\u0265\x02" + + "\u0132\u0267\x02\u0133\u0269\x02\u0134\u026B\x02\x02\u026D\x02\u0135\x03" + + "\x02\n\x03\x02/0\x04\x02,,2;\x04\x02,,B\\\x07\x02,,//2;C\\aa\x04\x02$" + + "$^^\x04\x02))^^\x04\x02^^bb\x03\x022;\x02\u0C48\x02\x03\x03\x02\x02\x02" + + "\x02\x05\x03\x02\x02\x02\x02\x07\x03\x02\x02\x02\x02\t\x03\x02\x02\x02" + + "\x02\v\x03\x02\x02\x02\x02\r\x03\x02\x02\x02\x02\x0F\x03\x02\x02\x02\x02" + + "\x11\x03\x02\x02\x02\x02\x13\x03\x02\x02\x02\x02\x15\x03\x02\x02\x02\x02" + + "\x17\x03\x02\x02\x02\x02\x19\x03\x02\x02\x02\x02\x1B\x03\x02\x02\x02\x02" + + "\x1D\x03\x02\x02\x02\x02\x1F\x03\x02\x02\x02\x02!\x03\x02\x02\x02\x02" + + "#\x03\x02\x02\x02\x02%\x03\x02\x02\x02\x02\'\x03\x02\x02\x02\x02)\x03" + + "\x02\x02\x02\x02+\x03\x02\x02\x02\x02-\x03\x02\x02\x02\x02/\x03\x02\x02" + + "\x02\x021\x03\x02\x02\x02\x023\x03\x02\x02\x02\x025\x03\x02\x02\x02\x02" + + "7\x03\x02\x02\x02\x029\x03\x02\x02\x02\x02;\x03\x02\x02\x02\x02=\x03\x02" + + "\x02\x02\x02?\x03\x02\x02\x02\x02A\x03\x02\x02\x02\x02C\x03\x02\x02\x02" + + "\x02E\x03\x02\x02\x02\x02G\x03\x02\x02\x02\x02I\x03\x02\x02\x02\x02K\x03" + + "\x02\x02\x02\x02M\x03\x02\x02\x02\x02O\x03\x02\x02\x02\x02Q\x03\x02\x02" + + "\x02\x02S\x03\x02\x02\x02\x02U\x03\x02\x02\x02\x02W\x03\x02\x02\x02\x02" + + "Y\x03\x02\x02\x02\x02[\x03\x02\x02\x02\x02]\x03\x02\x02\x02\x02_\x03\x02" + + "\x02\x02\x02a\x03\x02\x02\x02\x02c\x03\x02\x02\x02\x02e\x03\x02\x02\x02" + + "\x02g\x03\x02\x02\x02\x02i\x03\x02\x02\x02\x02k\x03\x02\x02\x02\x02m\x03" + + "\x02\x02\x02\x02o\x03\x02\x02\x02\x02q\x03\x02\x02\x02\x02s\x03\x02\x02" + + "\x02\x02u\x03\x02\x02\x02\x02w\x03\x02\x02\x02\x02y\x03\x02\x02\x02\x02" + + "{\x03\x02\x02\x02\x02}\x03\x02\x02\x02\x02\x7F\x03\x02\x02\x02\x02\x81" + + "\x03\x02\x02\x02\x02\x83\x03\x02\x02\x02\x02\x85\x03\x02\x02\x02\x02\x87" + + "\x03\x02\x02\x02\x02\x89\x03\x02\x02\x02\x02\x8B\x03\x02\x02\x02\x02\x8D" + + "\x03\x02\x02\x02\x02\x8F\x03\x02\x02\x02\x02\x91\x03\x02\x02\x02\x02\x93" + + "\x03\x02\x02\x02\x02\x95\x03\x02\x02\x02\x02\x97\x03\x02\x02\x02\x02\x99" + + "\x03\x02\x02\x02\x02\x9B\x03\x02\x02\x02\x02\x9D\x03\x02\x02\x02\x02\x9F" + + "\x03\x02\x02\x02\x02\xA1\x03\x02\x02\x02\x02\xA3\x03\x02\x02\x02\x02\xA5" + + "\x03\x02\x02\x02\x02\xA7\x03\x02\x02\x02\x02\xA9\x03\x02\x02\x02\x02\xAB" + + "\x03\x02\x02\x02\x02\xAD\x03\x02\x02\x02\x02\xAF\x03\x02\x02\x02\x02\xB1" + + "\x03\x02\x02\x02\x02\xB3\x03\x02\x02\x02\x02\xB5\x03\x02\x02\x02\x02\xB7" + + "\x03\x02\x02\x02\x02\xB9\x03\x02\x02\x02\x02\xBB\x03\x02\x02\x02\x02\xBD" + + "\x03\x02\x02\x02\x02\xBF\x03\x02\x02\x02\x02\xC1\x03\x02\x02\x02\x02\xC3" + + "\x03\x02\x02\x02\x02\xC5\x03\x02\x02\x02\x02\xC7\x03\x02\x02\x02\x02\xC9" + + "\x03\x02\x02\x02\x02\xCB\x03\x02\x02\x02\x02\xCD\x03\x02\x02\x02\x02\xCF" + + "\x03\x02\x02\x02\x02\xD1\x03\x02\x02\x02\x02\xD3\x03\x02\x02\x02\x02\xD5" + + "\x03\x02\x02\x02\x02\xD7\x03\x02\x02\x02\x02\xD9\x03\x02\x02\x02\x02\xDB" + + "\x03\x02\x02\x02\x02\xDD\x03\x02\x02\x02\x02\xDF\x03\x02\x02\x02\x02\xE1" + + "\x03\x02\x02\x02\x02\xE3\x03\x02\x02\x02\x02\xE5\x03\x02\x02\x02\x02\xE7" + + "\x03\x02\x02\x02\x02\xE9\x03\x02\x02\x02\x02\xEB\x03\x02\x02\x02\x02\xED" + + "\x03\x02\x02\x02\x02\xEF\x03\x02\x02\x02\x02\xF1\x03\x02\x02\x02\x02\xF3" + + "\x03\x02\x02\x02\x02\xF5\x03\x02\x02\x02\x02\xF7\x03\x02\x02\x02\x02\xF9" + + "\x03\x02\x02\x02\x02\xFB\x03\x02\x02\x02\x02\xFD\x03\x02\x02\x02\x02\xFF" + + "\x03\x02\x02\x02\x02\u0101\x03\x02\x02\x02\x02\u0103\x03\x02\x02\x02\x02" + + "\u0105\x03\x02\x02\x02\x02\u0107\x03\x02\x02\x02\x02\u0109\x03\x02\x02" + + "\x02\x02\u010B\x03\x02\x02\x02\x02\u010D\x03\x02\x02\x02\x02\u010F\x03" + + "\x02\x02\x02\x02\u0111\x03\x02\x02\x02\x02\u0113\x03\x02\x02\x02\x02\u0115" + + "\x03\x02\x02\x02\x02\u0117\x03\x02\x02\x02\x02\u0119\x03\x02\x02\x02\x02" + + "\u011B\x03\x02\x02\x02\x02\u011D\x03\x02\x02\x02\x02\u011F\x03\x02\x02" + + "\x02\x02\u0121\x03\x02\x02\x02\x02\u0123\x03\x02\x02\x02\x02\u0125\x03" + + "\x02\x02\x02\x02\u0127\x03\x02\x02\x02\x02\u0129\x03\x02\x02\x02\x02\u012B" + + "\x03\x02\x02\x02\x02\u012D\x03\x02\x02\x02\x02\u012F\x03\x02\x02\x02\x02" + + "\u0131\x03\x02\x02\x02\x02\u0133\x03\x02\x02\x02\x02\u0135\x03\x02\x02" + + "\x02\x02\u0137\x03\x02\x02\x02\x02\u0139\x03\x02\x02\x02\x02\u013B\x03" + + "\x02\x02\x02\x02\u013D\x03\x02\x02\x02\x02\u013F\x03\x02\x02\x02\x02\u0141" + + "\x03\x02\x02\x02\x02\u0143\x03\x02\x02\x02\x02\u0145\x03\x02\x02\x02\x02" + + "\u0147\x03\x02\x02\x02\x02\u0149\x03\x02\x02\x02\x02\u014B\x03\x02\x02" + + "\x02\x02\u014D\x03\x02\x02\x02\x02\u014F\x03\x02\x02\x02\x02\u0151\x03" + + "\x02\x02\x02\x02\u0153\x03\x02\x02\x02\x02\u0155\x03\x02\x02\x02\x02\u0157" + + "\x03\x02\x02\x02\x02\u0159\x03\x02\x02\x02\x02\u015B\x03\x02\x02\x02\x02" + + "\u015D\x03\x02\x02\x02\x02\u015F\x03\x02\x02\x02\x02\u0161\x03\x02\x02" + + "\x02\x02\u0163\x03\x02\x02\x02\x02\u0165\x03\x02\x02\x02\x02\u0167\x03" + + "\x02\x02\x02\x02\u0169\x03\x02\x02\x02\x02\u016B\x03\x02\x02\x02\x02\u016D" + + "\x03\x02\x02\x02\x02\u016F\x03\x02\x02\x02\x02\u0171\x03\x02\x02\x02\x02" + + "\u0173\x03\x02\x02\x02\x02\u0175\x03\x02\x02\x02\x02\u0177\x03\x02\x02" + + "\x02\x02\u0179\x03\x02\x02\x02\x02\u017B\x03\x02\x02\x02\x02\u017D\x03" + + "\x02\x02\x02\x02\u017F\x03\x02\x02\x02\x02\u0181\x03\x02\x02\x02\x02\u0183" + + "\x03\x02\x02\x02\x02\u0185\x03\x02\x02\x02\x02\u0187\x03\x02\x02\x02\x02" + + "\u0189\x03\x02\x02\x02\x02\u018B\x03\x02\x02\x02\x02\u018D\x03\x02\x02" + + "\x02\x02\u018F\x03\x02\x02\x02\x02\u0191\x03\x02\x02\x02\x02\u0193\x03" + + "\x02\x02\x02\x02\u0195\x03\x02\x02\x02\x02\u0197\x03\x02\x02\x02\x02\u0199" + + "\x03\x02\x02\x02\x02\u019B\x03\x02\x02\x02\x02\u019D\x03\x02\x02\x02\x02" + + "\u019F\x03\x02\x02\x02\x02\u01A1\x03\x02\x02\x02\x02\u01A3\x03\x02\x02" + + "\x02\x02\u01A5\x03\x02\x02\x02\x02\u01A7\x03\x02\x02\x02\x02\u01A9\x03" + + "\x02\x02\x02\x02\u01AB\x03\x02\x02\x02\x02\u01AD\x03\x02\x02\x02\x02\u01AF" + + "\x03\x02\x02\x02\x02\u01B1\x03\x02\x02\x02\x02\u01B3\x03\x02\x02\x02\x02" + + "\u01B5\x03\x02\x02\x02\x02\u01B7\x03\x02\x02\x02\x02\u01B9\x03\x02\x02" + + "\x02\x02\u01BB\x03\x02\x02\x02\x02\u01BD\x03\x02\x02\x02\x02\u01BF\x03" + + "\x02\x02\x02\x02\u01C1\x03\x02\x02\x02\x02\u01C3\x03\x02\x02\x02\x02\u01C5" + + "\x03\x02\x02\x02\x02\u01C7\x03\x02\x02\x02\x02\u01C9\x03\x02\x02\x02\x02" + + "\u01CB\x03\x02\x02\x02\x02\u01CD\x03\x02\x02\x02\x02\u01CF\x03\x02\x02" + + "\x02\x02\u01D1\x03\x02\x02\x02\x02\u01D3\x03\x02\x02\x02\x02\u01D5\x03" + + "\x02\x02\x02\x02\u01D7\x03\x02\x02\x02\x02\u01D9\x03\x02\x02\x02\x02\u01DB" + + "\x03\x02\x02\x02\x02\u01DD\x03\x02\x02\x02\x02\u01DF\x03\x02\x02\x02\x02" + + "\u01E1\x03\x02\x02\x02\x02\u01E3\x03\x02\x02\x02\x02\u01E5\x03\x02\x02" + + "\x02\x02\u01E7\x03\x02\x02\x02\x02\u01E9\x03\x02\x02\x02\x02\u01EB\x03" + + "\x02\x02\x02\x02\u01ED\x03\x02\x02\x02\x02\u01EF\x03\x02\x02\x02\x02\u01F1" + + "\x03\x02\x02\x02\x02\u01F3\x03\x02\x02\x02\x02\u01F5\x03\x02\x02\x02\x02" + + "\u01F7\x03\x02\x02\x02\x02\u01F9\x03\x02\x02\x02\x02\u01FB\x03\x02\x02" + + "\x02\x02\u01FD\x03\x02\x02\x02\x02\u01FF\x03\x02\x02\x02\x02\u0201\x03" + + "\x02\x02\x02\x02\u0203\x03\x02\x02\x02\x02\u0205\x03\x02\x02\x02\x02\u0207" + + "\x03\x02\x02\x02\x02\u0209\x03\x02\x02\x02\x02\u020B\x03\x02\x02\x02\x02" + + "\u020D\x03\x02\x02\x02\x02\u020F\x03\x02\x02\x02\x02\u0211\x03\x02\x02" + + "\x02\x02\u0213\x03\x02\x02\x02\x02\u0215\x03\x02\x02\x02\x02\u0217\x03" + + "\x02\x02\x02\x02\u0219\x03\x02\x02\x02\x02\u021B\x03\x02\x02\x02\x02\u021D" + + "\x03\x02\x02\x02\x02\u021F\x03\x02\x02\x02\x02\u0221\x03\x02\x02\x02\x02" + + "\u0223\x03\x02\x02\x02\x02\u0225\x03\x02\x02\x02\x02\u0227\x03\x02\x02" + + "\x02\x02\u0229\x03\x02\x02\x02\x02\u022B\x03\x02\x02\x02\x02\u022D\x03" + + "\x02\x02\x02\x02\u022F\x03\x02\x02\x02\x02\u0231\x03\x02\x02\x02\x02\u0233" + + "\x03\x02\x02\x02\x02\u0235\x03\x02\x02\x02\x02\u0237\x03\x02\x02\x02\x02" + + "\u0239\x03\x02\x02\x02\x02\u023B\x03\x02\x02\x02\x02\u023D\x03\x02\x02" + + "\x02\x02\u023F\x03\x02\x02\x02\x02\u0241\x03\x02\x02\x02\x02\u0243\x03" + + "\x02\x02\x02\x02\u0245\x03\x02\x02\x02\x02\u0247\x03\x02\x02\x02\x02\u0249" + + "\x03\x02\x02\x02\x02\u024B\x03\x02\x02\x02\x02\u024D\x03\x02\x02\x02\x02" + + "\u024F\x03\x02\x02\x02\x02\u0251\x03\x02\x02\x02\x02\u0253\x03\x02\x02" + + "\x02\x02\u0255\x03\x02\x02\x02\x02\u0257\x03\x02\x02\x02\x02\u0259\x03" + + "\x02\x02\x02\x02\u025B\x03\x02\x02\x02\x02\u025D\x03\x02\x02\x02\x02\u0263" + + "\x03\x02\x02\x02\x02\u0265\x03\x02\x02\x02\x02\u0267\x03\x02\x02\x02\x02" + + "\u0269\x03\x02\x02\x02\x02\u026D\x03\x02\x02\x02\x03\u026F\x03\x02\x02" + + "\x02\x05\u0276\x03\x02\x02\x02\x07\u027F\x03\x02\x02\x02\t\u0284\x03\x02" + + "\x02\x02\v\u0289\x03\x02\x02\x02\r\u028F\x03\x02\x02\x02\x0F\u0296\x03" + + "\x02\x02\x02\x11\u029D\x03\x02\x02\x02\x13\u02A3\x03\x02\x02\x02\x15\u02A9" + + "\x03\x02\x02\x02\x17\u02AE\x03\x02\x02\x02\x19\u02B3\x03\x02\x02\x02\x1B" + + "\u02B8\x03\x02\x02\x02\x1D\u02BC\x03\x02\x02\x02\x1F\u02C1\x03\x02\x02" + + "\x02!\u02C7\x03\x02\x02\x02#\u02CE\x03\x02\x02\x02%\u02D4\x03\x02\x02" + + "\x02\'\u02DA\x03\x02\x02\x02)\u02DF\x03\x02\x02\x02+\u02E7\x03\x02\x02" + + "\x02-\u02F0\x03\x02\x02\x02/\u02FA\x03\x02\x02\x021\u0301\x03\x02\x02" + + "\x023\u0304\x03\x02\x02\x025\u0307\x03\x02\x02\x027\u030A\x03\x02\x02" + + "\x029\u030D\x03\x02\x02\x02;\u0314\x03\x02\x02\x02=\u031A\x03\x02\x02" + + "\x02?\u031C\x03\x02\x02\x02A\u0321\x03\x02\x02\x02C\u032A\x03\x02\x02" + + "\x02E\u0331\x03\x02\x02\x02G\u0336\x03\x02\x02\x02I\u033A\x03\x02\x02" + + "\x02K\u033D\x03\x02\x02\x02M\u0341\x03\x02\x02\x02O\u034B\x03\x02\x02" + + "\x02Q\u0357\x03\x02\x02\x02S\u0369\x03\x02\x02\x02U\u0374\x03\x02\x02" + + "\x02W\u037B\x03\x02\x02\x02Y\u0381\x03\x02\x02\x02[\u038B\x03\x02\x02" + + "\x02]\u0396\x03\x02\x02\x02_\u03A4\x03\x02\x02\x02a\u03B4\x03\x02\x02" + + "\x02c\u03C1\x03\x02\x02\x02e\u03CD\x03\x02\x02\x02g\u03DA\x03\x02\x02" + + "\x02i\u03E5\x03\x02\x02\x02k\u03F2\x03\x02\x02\x02m\u0401\x03\x02\x02" + + "\x02o\u040C\x03\x02\x02\x02q\u0416\x03\x02\x02\x02s\u0429\x03\x02\x02" + + "\x02u\u0441\x03\x02\x02\x02w\u0446\x03\x02\x02\x02y\u0449\x03\x02\x02" + + "\x02{\u044D\x03\x02\x02\x02}\u0450\x03\x02\x02\x02\x7F\u0454\x03\x02\x02" + + "\x02\x81\u0458\x03\x02\x02\x02\x83\u045D\x03\x02\x02\x02\x85\u0463\x03" + + "\x02\x02\x02\x87\u046A\x03\x02\x02\x02\x89\u0473\x03\x02\x02\x02\x8B\u047C" + + "\x03\x02\x02\x02\x8D\u0488\x03\x02\x02\x02\x8F\u0494\x03\x02\x02\x02\x91" + + "\u049B\x03\x02\x02\x02\x93\u04A2\x03\x02\x02\x02\x95\u04A7\x03\x02\x02" + + "\x02\x97\u04AB\x03\x02\x02\x02\x99\u04B0\x03\x02\x02\x02\x9B\u04B6\x03" + + "\x02\x02\x02\x9D\u04BE\x03\x02\x02\x02\x9F\u04C3\x03\x02\x02\x02\xA1\u04D6" + + "\x03\x02\x02\x02\xA3\u04E9\x03\x02\x02\x02\xA5\u04F7\x03\x02\x02\x02\xA7" + + "\u0508\x03\x02\x02\x02\xA9\u0514\x03\x02\x02\x02\xAB\u0520\x03\x02\x02" + + "\x02\xAD\u0530\x03\x02\x02\x02\xAF\u053B\x03\x02\x02\x02\xB1\u0546\x03" + + "\x02\x02\x02\xB3\u054F\x03\x02\x02\x02\xB5\u055A\x03\x02\x02\x02\xB7\u0565" + + "\x03\x02\x02\x02\xB9\u056F\x03\x02\x02\x02\xBB\u0576\x03\x02\x02\x02\xBD" + + "\u0582\x03\x02\x02\x02\xBF\u0586\x03\x02\x02\x02\xC1\u058E\x03\x02\x02" + + "\x02\xC3\u0595\x03\x02\x02\x02\xC5\u059A\x03\x02\x02\x02\xC7\u05A0\x03" + + "\x02\x02\x02\xC9\u05A7\x03\x02\x02\x02\xCB\u05AF\x03\x02\x02\x02\xCD\u05B1" + + "\x03\x02\x02\x02\xCF\u05B3\x03\x02\x02\x02\xD1\u05B5\x03\x02\x02\x02\xD3" + + "\u05B7\x03\x02\x02\x02\xD5\u05B9\x03\x02\x02\x02\xD7\u05BB\x03\x02\x02" + + "\x02\xD9\u05BE\x03\x02\x02\x02\xDB\u05C1\x03\x02\x02\x02\xDD\u05C4\x03" + + "\x02\x02\x02\xDF\u05C6\x03\x02\x02\x02\xE1\u05C8\x03\x02\x02\x02\xE3\u05CA" + + "\x03\x02\x02\x02\xE5\u05CC\x03\x02\x02\x02\xE7\u05CE\x03\x02\x02\x02\xE9" + + "\u05D0\x03\x02\x02\x02\xEB\u05D2\x03\x02\x02\x02\xED\u05D4\x03\x02\x02" + + "\x02\xEF\u05D6\x03\x02\x02\x02\xF1\u05D8\x03\x02\x02\x02\xF3\u05DA\x03" + + "\x02\x02\x02\xF5\u05DC\x03\x02\x02\x02\xF7\u05DE\x03\x02\x02\x02\xF9\u05E0" + + "\x03\x02\x02\x02\xFB\u05E2\x03\x02\x02\x02\xFD\u05E4\x03\x02\x02\x02\xFF" + + "\u05E6\x03\x02\x02\x02\u0101\u05EA\x03\x02\x02\x02\u0103\u05F0\x03\x02" + + "\x02\x02\u0105\u05FF\x03\x02\x02\x02\u0107\u0605\x03\x02\x02\x02\u0109" + + "\u0611\x03\x02\x02\x02\u010B\u0615\x03\x02\x02\x02\u010D\u061A\x03\x02" + + "\x02\x02\u010F\u0621\x03\x02\x02\x02\u0111\u0625\x03\x02\x02\x02\u0113" + + "\u062A\x03\x02\x02\x02\u0115\u0630\x03\x02\x02\x02\u0117\u0636\x03\x02" + + "\x02\x02\u0119\u063D\x03\x02\x02\x02\u011B\u0641\x03\x02\x02\x02\u011D" + + "\u0647\x03\x02\x02\x02\u011F\u0650\x03\x02\x02\x02\u0121\u0658\x03\x02" + + "\x02\x02\u0123\u0664\x03\x02\x02\x02\u0125\u066F\x03\x02\x02\x02\u0127"; + private static readonly _serializedATNSegment2: string = + "\u067A\x03\x02\x02\x02\u0129\u067F\x03\x02\x02\x02\u012B\u0685\x03\x02" + + "\x02\x02\u012D\u068A\x03\x02\x02\x02\u012F\u068F\x03\x02\x02\x02\u0131" + + "\u0696\x03\x02\x02\x02\u0133\u069F\x03\x02\x02\x02\u0135\u06AD\x03\x02" + + "\x02\x02\u0137\u06B4\x03\x02\x02\x02\u0139\u06C0\x03\x02\x02\x02\u013B" + + "\u06C8\x03\x02\x02\x02\u013D\u06D1\x03\x02\x02\x02\u013F\u06DC\x03\x02" + + "\x02\x02\u0141\u06E7\x03\x02\x02\x02\u0143\u06EC\x03\x02\x02\x02\u0145" + + "\u06F6\x03\x02\x02\x02\u0147\u06F8\x03\x02\x02\x02\u0149\u06FB\x03\x02" + + "\x02\x02\u014B\u06FF\x03\x02\x02\x02\u014D\u0704\x03\x02\x02\x02\u014F" + + "\u070C\x03\x02\x02\x02\u0151\u0711\x03\x02\x02\x02\u0153\u0717\x03\x02" + + "\x02\x02\u0155\u0719\x03\x02\x02\x02\u0157\u071D\x03\x02\x02\x02\u0159" + + "\u0723\x03\x02\x02\x02\u015B\u0726\x03\x02\x02\x02\u015D\u072A\x03\x02" + + "\x02\x02\u015F\u0730\x03\x02\x02\x02\u0161\u0735\x03\x02\x02\x02\u0163" + + "\u0739\x03\x02\x02\x02\u0165\u073C\x03\x02\x02\x02\u0167\u0740\x03\x02" + + "\x02\x02\u0169\u0746\x03\x02\x02\x02\u016B\u074B\x03\x02\x02\x02\u016D" + + "\u0751\x03\x02\x02\x02\u016F\u0756\x03\x02\x02\x02\u0171\u075B\x03\x02" + + "\x02\x02\u0173\u0764\x03\x02\x02\x02\u0175\u0769\x03\x02\x02\x02\u0177" + + "\u076E\x03\x02\x02\x02\u0179\u0773\x03\x02\x02\x02\u017B\u0779\x03\x02" + + "\x02\x02\u017D\u077D\x03\x02\x02\x02\u017F\u0781\x03\x02\x02\x02\u0181" + + "\u0789\x03\x02\x02\x02\u0183\u0791\x03\x02\x02\x02\u0185\u0795\x03\x02" + + "\x02\x02\u0187\u0799\x03\x02\x02\x02\u0189\u07A1\x03\x02\x02\x02\u018B" + + "\u07A9\x03\x02\x02\x02\u018D\u07B6\x03\x02\x02\x02\u018F\u07C3\x03\x02" + + "\x02\x02\u0191\u07D5\x03\x02\x02\x02\u0193\u07DD\x03\x02\x02\x02\u0195" + + "\u07E2\x03\x02\x02\x02\u0197\u07EB\x03\x02\x02\x02\u0199\u07F7\x03\x02" + + "\x02\x02\u019B\u0800\x03\x02\x02\x02\u019D\u0808\x03\x02\x02\x02\u019F" + + "\u0813\x03\x02\x02\x02\u01A1\u081D\x03\x02\x02\x02\u01A3\u0827\x03\x02" + + "\x02\x02\u01A5\u0831\x03\x02\x02\x02\u01A7\u083B\x03\x02\x02\x02\u01A9" + + "\u084A\x03\x02\x02\x02\u01AB\u0858\x03\x02\x02\x02\u01AD\u0861\x03\x02" + + "\x02\x02\u01AF\u086A\x03\x02\x02\x02\u01B1\u0874\x03\x02\x02\x02\u01B3" + + "\u0878\x03\x02\x02\x02\u01B5\u0883\x03\x02\x02\x02\u01B7\u088F\x03\x02" + + "\x02\x02\u01B9\u0897\x03\x02\x02\x02\u01BB\u089F\x03\x02\x02\x02\u01BD" + + "\u08A4\x03\x02\x02\x02\u01BF\u08B0\x03\x02\x02\x02\u01C1\u08BA\x03\x02" + + "\x02\x02\u01C3\u08C2\x03\x02\x02\x02\u01C5\u08CB\x03\x02\x02\x02\u01C7" + + "\u08D4\x03\x02\x02\x02\u01C9\u08E2\x03\x02\x02\x02\u01CB\u08F1\x03\x02" + + "\x02\x02\u01CD\u08F8\x03\x02\x02\x02\u01CF\u0902\x03\x02\x02\x02\u01D1" + + "\u0908\x03\x02\x02\x02\u01D3\u090E\x03\x02\x02\x02\u01D5\u0913\x03\x02" + + "\x02\x02\u01D7\u0916\x03\x02\x02\x02\u01D9\u091C\x03\x02\x02\x02\u01DB" + + "\u0922\x03\x02\x02\x02\u01DD\u0929\x03\x02\x02\x02\u01DF\u0933\x03\x02" + + "\x02\x02\u01E1\u093A\x03\x02\x02\x02\u01E3\u0941\x03\x02\x02\x02\u01E5" + + "\u0947\x03\x02\x02\x02\u01E7\u094C\x03\x02\x02\x02\u01E9\u0952\x03\x02" + + "\x02\x02\u01EB\u0959\x03\x02\x02\x02\u01ED\u0961\x03\x02\x02\x02\u01EF" + + "\u0966\x03\x02\x02\x02\u01F1\u096B\x03\x02\x02\x02\u01F3\u0972\x03\x02" + + "\x02\x02\u01F5\u097C\x03\x02\x02\x02\u01F7\u0983\x03\x02\x02\x02\u01F9" + + "\u098A\x03\x02\x02\x02\u01FB\u098D\x03\x02\x02\x02\u01FD\u0994\x03\x02" + + "\x02\x02\u01FF\u099A\x03\x02\x02\x02\u0201\u09A7\x03\x02\x02\x02\u0203" + + "\u09BB\x03\x02\x02\x02\u0205\u09CD\x03\x02\x02\x02\u0207\u09E1\x03\x02" + + "\x02\x02\u0209\u09ED\x03\x02\x02\x02\u020B\u09FA\x03\x02\x02\x02\u020D" + + "\u0A11\x03\x02\x02\x02\u020F\u0A22\x03\x02\x02\x02\u0211\u0A2B\x03\x02" + + "\x02\x02\u0213\u0A4F\x03\x02\x02\x02\u0215\u0A55\x03\x02\x02\x02\u0217" + + "\u0A66\x03\x02\x02\x02\u0219\u0A74\x03\x02\x02\x02\u021B\u0A85\x03\x02" + + "\x02\x02\u021D\u0AA0\x03\x02\x02\x02\u021F\u0AA7\x03\x02\x02\x02\u0221" + + "\u0AAD\x03\x02\x02\x02\u0223\u0AC2\x03\x02\x02\x02\u0225\u0AD6\x03\x02" + + "\x02\x02\u0227\u0AEB\x03\x02\x02\x02\u0229\u0AF9\x03\x02\x02\x02\u022B" + + "\u0B03\x03\x02\x02\x02\u022D\u0B0B\x03\x02\x02\x02\u022F\u0B1D\x03\x02" + + "\x02\x02\u0231\u0B35\x03\x02\x02\x02\u0233\u0B44\x03\x02\x02\x02\u0235" + + "\u0B59\x03\x02\x02\x02\u0237\u0B62\x03\x02\x02\x02\u0239\u0B6E\x03\x02" + + "\x02\x02\u023B\u0B7C\x03\x02\x02\x02\u023D\u0B8B\x03\x02\x02\x02\u023F" + + "\u0B9E\x03\x02\x02\x02\u0241\u0BA6\x03\x02\x02\x02\u0243\u0BAB\x03\x02" + + "\x02\x02\u0245\u0BB7\x03\x02\x02\x02\u0247\u0BBC\x03\x02\x02\x02\u0249" + + "\u0BCD\x03\x02\x02\x02\u024B\u0BD2\x03\x02\x02\x02\u024D\u0BD5\x03\x02" + + "\x02\x02\u024F\u0BD7\x03\x02\x02\x02\u0251\u0BD9\x03\x02\x02\x02\u0253" + + "\u0BDB\x03\x02\x02\x02\u0255\u0BDD\x03\x02\x02\x02\u0257\u0BDF\x03\x02" + + "\x02\x02\u0259\u0BE1\x03\x02\x02\x02\u025B\u0BE4\x03\x02\x02\x02\u025D" + + "\u0BED\x03\x02\x02\x02\u025F\u0BFD\x03\x02\x02\x02\u0261\u0C01\x03\x02" + + "\x02\x02\u0263\u0C0B\x03\x02\x02\x02\u0265\u0C0E\x03\x02\x02\x02\u0267" + + "\u0C1B\x03\x02\x02\x02\u0269\u0C28\x03\x02\x02\x02\u026B\u0C35\x03\x02" + + "\x02\x02\u026D\u0C37\x03\x02\x02\x02\u026F\u0270\x07U\x02\x02\u0270\u0271" + + "\x07G\x02\x02\u0271\u0272\x07C\x02\x02\u0272\u0273\x07T\x02\x02\u0273" + + "\u0274\x07E\x02\x02\u0274\u0275\x07J\x02\x02\u0275\x04\x03\x02\x02\x02" + + "\u0276\u0277\x07F\x02\x02\u0277\u0278\x07G\x02\x02\u0278\u0279\x07U\x02" + + "\x02\u0279\u027A\x07E\x02\x02\u027A\u027B\x07T\x02\x02\u027B\u027C\x07" + + "K\x02\x02\u027C\u027D\x07D\x02\x02\u027D\u027E\x07G\x02\x02\u027E\x06" + + "\x03\x02\x02\x02\u027F\u0280\x07U\x02\x02\u0280\u0281\x07J\x02\x02\u0281" + + "\u0282\x07Q\x02\x02\u0282\u0283\x07Y\x02\x02\u0283\b\x03\x02\x02\x02\u0284" + + "\u0285\x07H\x02\x02\u0285\u0286\x07T\x02\x02\u0286\u0287\x07Q\x02\x02" + + "\u0287\u0288\x07O\x02\x02\u0288\n\x03\x02\x02\x02\u0289\u028A\x07Y\x02" + + "\x02\u028A\u028B\x07J\x02\x02\u028B\u028C\x07G\x02\x02\u028C\u028D\x07" + + "T\x02\x02\u028D\u028E\x07G\x02\x02\u028E\f\x03\x02\x02\x02\u028F\u0290" + + "\x07H\x02\x02\u0290\u0291\x07K\x02\x02\u0291\u0292\x07G\x02\x02\u0292" + + "\u0293\x07N\x02\x02\u0293\u0294\x07F\x02\x02\u0294\u0295\x07U\x02\x02" + + "\u0295\x0E\x03\x02\x02\x02\u0296\u0297\x07T\x02\x02\u0297\u0298\x07G\x02" + + "\x02\u0298\u0299\x07P\x02\x02\u0299\u029A\x07C\x02\x02\u029A\u029B\x07" + + "O\x02\x02\u029B\u029C\x07G\x02\x02\u029C\x10\x03\x02\x02\x02\u029D\u029E" + + "\x07U\x02\x02\u029E\u029F\x07V\x02\x02\u029F\u02A0\x07C\x02\x02\u02A0" + + "\u02A1\x07V\x02\x02\u02A1\u02A2\x07U\x02\x02\u02A2\x12\x03\x02\x02\x02" + + "\u02A3\u02A4\x07F\x02\x02\u02A4\u02A5\x07G\x02\x02\u02A5\u02A6\x07F\x02" + + "\x02\u02A6\u02A7\x07W\x02\x02\u02A7\u02A8\x07R\x02\x02\u02A8\x14\x03\x02" + + "\x02\x02\u02A9\u02AA\x07U\x02\x02\u02AA\u02AB\x07Q\x02\x02\u02AB\u02AC" + + "\x07T\x02\x02\u02AC\u02AD\x07V\x02\x02\u02AD\x16\x03\x02\x02\x02\u02AE" + + "\u02AF\x07G\x02\x02\u02AF\u02B0\x07X\x02\x02\u02B0\u02B1\x07C\x02\x02" + + "\u02B1\u02B2\x07N\x02\x02\u02B2\x18\x03\x02\x02\x02\u02B3\u02B4\x07J\x02" + + "\x02\u02B4\u02B5\x07G\x02\x02\u02B5\u02B6\x07C\x02\x02\u02B6\u02B7\x07" + + "F\x02\x02\u02B7\x1A\x03\x02\x02\x02\u02B8\u02B9\x07V\x02\x02\u02B9\u02BA" + + "\x07Q\x02\x02\u02BA\u02BB\x07R\x02\x02\u02BB\x1C\x03\x02\x02\x02\u02BC" + + "\u02BD\x07T\x02\x02\u02BD\u02BE\x07C\x02\x02\u02BE\u02BF\x07T\x02\x02" + + "\u02BF\u02C0\x07G\x02\x02\u02C0\x1E\x03\x02\x02\x02\u02C1\u02C2\x07R\x02" + + "\x02\u02C2\u02C3\x07C\x02\x02\u02C3\u02C4\x07T\x02\x02\u02C4\u02C5\x07" + + "U\x02\x02\u02C5\u02C6\x07G\x02\x02\u02C6 \x03\x02\x02\x02\u02C7\u02C8" + + "\x07O\x02\x02\u02C8\u02C9\x07G\x02\x02\u02C9\u02CA\x07V\x02\x02\u02CA" + + "\u02CB\x07J\x02\x02\u02CB\u02CC\x07Q\x02\x02\u02CC\u02CD\x07F\x02\x02" + + "\u02CD\"\x03\x02\x02\x02\u02CE\u02CF\x07T\x02\x02\u02CF\u02D0\x07G\x02" + + "\x02\u02D0\u02D1\x07I\x02\x02\u02D1\u02D2\x07G\x02\x02\u02D2\u02D3\x07" + + "Z\x02\x02\u02D3$\x03\x02\x02\x02\u02D4\u02D5\x07R\x02\x02\u02D5\u02D6" + + "\x07W\x02\x02\u02D6\u02D7\x07P\x02\x02\u02D7\u02D8\x07E\x02\x02\u02D8" + + "\u02D9\x07V\x02\x02\u02D9&\x03\x02\x02\x02\u02DA\u02DB\x07I\x02\x02\u02DB" + + "\u02DC\x07T\x02\x02\u02DC\u02DD\x07Q\x02\x02\u02DD\u02DE\x07M\x02\x02" + + "\u02DE(\x03\x02\x02\x02\u02DF\u02E0\x07R\x02\x02\u02E0\u02E1\x07C\x02" + + "\x02\u02E1\u02E2\x07V\x02\x02\u02E2\u02E3\x07V\x02\x02\u02E3\u02E4\x07" + + "G\x02\x02\u02E4\u02E5\x07T\x02\x02\u02E5\u02E6\x07P\x02\x02\u02E6*\x03" + + "\x02\x02\x02\u02E7\u02E8\x07R\x02\x02\u02E8\u02E9\x07C\x02\x02\u02E9\u02EA" + + "\x07V\x02\x02\u02EA\u02EB\x07V\x02\x02\u02EB\u02EC\x07G\x02\x02\u02EC" + + "\u02ED\x07T\x02\x02\u02ED\u02EE\x07P\x02\x02\u02EE\u02EF\x07U\x02\x02" + + "\u02EF,\x03\x02\x02\x02\u02F0\u02F1\x07P\x02\x02\u02F1\u02F2\x07G\x02" + + "\x02\u02F2\u02F3\x07Y\x02\x02\u02F3\u02F4\x07a\x02\x02\u02F4\u02F5\x07" + + "H\x02\x02\u02F5\u02F6\x07K\x02\x02\u02F6\u02F7\x07G\x02\x02\u02F7\u02F8" + + "\x07N\x02\x02\u02F8\u02F9\x07F\x02\x02\u02F9.\x03\x02\x02\x02\u02FA\u02FB" + + "\x07M\x02\x02\u02FB\u02FC\x07O\x02\x02\u02FC\u02FD\x07G\x02\x02\u02FD" + + "\u02FE\x07C\x02\x02\u02FE\u02FF\x07P\x02\x02\u02FF\u0300\x07U\x02\x02" + + "\u03000\x03\x02\x02\x02\u0301\u0302\x07C\x02\x02\u0302\u0303\x07F\x02" + + "\x02\u03032\x03\x02\x02\x02\u0304\u0305\x07O\x02\x02\u0305\u0306\x07N" + + "\x02\x02\u03064\x03\x02\x02\x02\u0307\u0308\x07C\x02\x02\u0308\u0309\x07" + + "U\x02\x02\u03096\x03\x02\x02\x02\u030A\u030B\x07D\x02\x02\u030B\u030C" + + "\x07[\x02\x02\u030C8\x03\x02\x02\x02\u030D\u030E\x07U\x02\x02\u030E\u030F" + + "\x07Q\x02\x02\u030F\u0310\x07W\x02\x02\u0310\u0311\x07T\x02\x02\u0311" + + "\u0312\x07E\x02\x02\u0312\u0313\x07G\x02\x02\u0313:\x03\x02\x02\x02\u0314" + + "\u0315\x07K\x02\x02\u0315\u0316\x07P\x02\x02\u0316\u0317\x07F\x02\x02" + + "\u0317\u0318\x07G\x02\x02\u0318\u0319\x07Z\x02\x02\u0319<\x03\x02\x02" + + "\x02\u031A\u031B\x07F\x02\x02\u031B>\x03\x02\x02\x02\u031C\u031D\x07F" + + "\x02\x02\u031D\u031E\x07G\x02\x02\u031E\u031F\x07U\x02\x02\u031F\u0320" + + "\x07E\x02\x02\u0320@\x03\x02\x02\x02\u0321\u0322\x07E\x02\x02\u0322\u0323" + + "\x07C\x02\x02\u0323\u0324\x07V\x02\x02\u0324\u0325\x07C\x02\x02\u0325" + + "\u0326\x07N\x02\x02\u0326\u0327\x07Q\x02\x02\u0327\u0328\x07I\x02\x02" + + "\u0328\u0329\x07U\x02\x02\u0329B\x03\x02\x02\x02\u032A\u032B\x07U\x02" + + "\x02\u032B\u032C\x07Q\x02\x02\u032C\u032D\x07T\x02\x02\u032D\u032E\x07" + + "V\x02\x02\u032E\u032F\x07D\x02\x02\u032F\u0330\x07[\x02\x02\u0330D\x03" + + "\x02\x02\x02\u0331\u0332\x07C\x02\x02\u0332\u0333\x07W\x02\x02\u0333\u0334" + + "\x07V\x02\x02\u0334\u0335\x07Q\x02\x02\u0335F\x03\x02\x02\x02\u0336\u0337" + + "\x07U\x02\x02\u0337\u0338\x07V\x02\x02\u0338\u0339\x07T\x02\x02\u0339" + + "H\x03\x02\x02\x02\u033A\u033B\x07K\x02\x02\u033B\u033C\x07R\x02\x02\u033C" + + "J\x03\x02\x02\x02\u033D\u033E\x07P\x02\x02\u033E\u033F\x07W\x02\x02\u033F" + + "\u0340\x07O\x02\x02\u0340L\x03\x02\x02\x02\u0341\u0342\x07M\x02\x02\u0342" + + "\u0343\x07G\x02\x02\u0343\u0344\x07G\x02\x02\u0344\u0345\x07R\x02\x02" + + "\u0345\u0346\x07G\x02\x02\u0346\u0347\x07O\x02\x02\u0347\u0348\x07R\x02" + + "\x02\u0348\u0349\x07V\x02\x02\u0349\u034A\x07[\x02\x02\u034AN\x03\x02" + + "\x02\x02\u034B\u034C\x07E\x02\x02\u034C\u034D\x07Q\x02\x02\u034D\u034E" + + "\x07P\x02\x02\u034E\u034F\x07U\x02\x02\u034F\u0350\x07G\x02\x02\u0350" + + "\u0351\x07E\x02\x02\u0351\u0352\x07W\x02\x02\u0352\u0353\x07V\x02\x02" + + "\u0353\u0354\x07K\x02\x02\u0354\u0355\x07X\x02\x02\u0355\u0356\x07G\x02" + + "\x02\u0356P\x03\x02\x02\x02\u0357\u0358\x07F\x02\x02\u0358\u0359\x07G" + + "\x02\x02\u0359\u035A\x07F\x02\x02\u035A\u035B\x07W\x02\x02\u035B\u035C" + + "\x07R\x02\x02\u035C\u035D\x07a\x02\x02\u035D\u035E\x07U\x02\x02\u035E" + + "\u035F\x07R\x02\x02\u035F\u0360\x07N\x02\x02\u0360\u0361\x07K\x02\x02" + + "\u0361\u0362\x07V\x02\x02\u0362\u0363\x07X\x02\x02\u0363\u0364\x07C\x02" + + "\x02\u0364\u0365\x07N\x02\x02\u0365\u0366\x07W\x02\x02\u0366\u0367\x07" + + "G\x02\x02\u0367\u0368\x07U\x02\x02\u0368R\x03\x02\x02\x02\u0369\u036A" + + "\x07R\x02\x02\u036A\u036B\x07C\x02\x02\u036B\u036C\x07T\x02\x02\u036C" + + "\u036D\x07V\x02\x02\u036D\u036E\x07K\x02\x02\u036E\u036F\x07V\x02\x02" + + "\u036F\u0370\x07K\x02\x02\u0370\u0371\x07Q\x02\x02\u0371\u0372\x07P\x02" + + "\x02\u0372\u0373\x07U\x02\x02\u0373T\x03\x02\x02\x02\u0374\u0375\x07C" + + "\x02\x02\u0375\u0376\x07N\x02\x02\u0376\u0377\x07N\x02\x02\u0377\u0378" + + "\x07P\x02\x02\u0378\u0379\x07W\x02\x02\u0379\u037A\x07O\x02\x02\u037A" + + "V\x03\x02\x02\x02\u037B\u037C\x07F\x02\x02\u037C\u037D\x07G\x02\x02\u037D" + + "\u037E\x07N\x02\x02\u037E\u037F\x07K\x02\x02\u037F\u0380\x07O\x02\x02" + + "\u0380X\x03\x02\x02\x02\u0381\u0382\x07E\x02\x02\u0382\u0383\x07G\x02" + + "\x02\u0383\u0384\x07P\x02\x02\u0384\u0385\x07V\x02\x02\u0385\u0386\x07" + + "T\x02\x02\u0386\u0387\x07Q\x02\x02\u0387\u0388\x07K\x02\x02\u0388\u0389" + + "\x07F\x02\x02\u0389\u038A\x07U\x02\x02\u038AZ\x03\x02\x02\x02\u038B\u038C" + + "\x07K\x02\x02\u038C\u038D\x07V\x02\x02\u038D\u038E\x07G\x02\x02\u038E" + + "\u038F\x07T\x02\x02\u038F\u0390\x07C\x02\x02\u0390\u0391\x07V\x02\x02" + + "\u0391\u0392\x07K\x02\x02\u0392\u0393\x07Q\x02\x02\u0393\u0394\x07P\x02" + + "\x02\u0394\u0395\x07U\x02\x02\u0395\\\x03\x02\x02\x02\u0396\u0397\x07" + + "F\x02\x02\u0397\u0398\x07K\x02\x02\u0398\u0399\x07U\x02\x02\u0399\u039A" + + "\x07V\x02\x02\u039A\u039B\x07C\x02\x02\u039B\u039C\x07P\x02\x02\u039C" + + "\u039D\x07E\x02\x02\u039D\u039E\x07G\x02\x02\u039E\u039F\x07a\x02\x02" + + "\u039F\u03A0\x07V\x02\x02\u03A0\u03A1\x07[\x02\x02\u03A1\u03A2\x07R\x02" + + "\x02\u03A2\u03A3\x07G\x02\x02\u03A3^\x03\x02\x02\x02\u03A4\u03A5\x07P" + + "\x02\x02\u03A5\u03A6\x07W\x02\x02\u03A6\u03A7\x07O\x02\x02\u03A7\u03A8" + + "\x07D\x02\x02\u03A8\u03A9\x07G\x02\x02\u03A9\u03AA\x07T\x02\x02\u03AA" + + "\u03AB\x07a\x02\x02\u03AB\u03AC\x07Q\x02\x02\u03AC\u03AD\x07H\x02\x02" + + "\u03AD\u03AE\x07a\x02\x02\u03AE\u03AF\x07V\x02\x02\u03AF\u03B0\x07T\x02" + + "\x02\u03B0\u03B1\x07G\x02\x02\u03B1\u03B2\x07G\x02\x02\u03B2\u03B3\x07" + + "U\x02\x02\u03B3`\x03\x02\x02\x02\u03B4\u03B5\x07U\x02\x02\u03B5\u03B6" + + "\x07J\x02\x02\u03B6\u03B7\x07K\x02\x02\u03B7\u03B8\x07P\x02\x02\u03B8" + + "\u03B9\x07I\x02\x02\u03B9\u03BA\x07N\x02\x02\u03BA\u03BB\x07G\x02\x02" + + "\u03BB\u03BC\x07a\x02\x02\u03BC\u03BD\x07U\x02\x02\u03BD\u03BE\x07K\x02" + + "\x02\u03BE\u03BF\x07\\\x02\x02\u03BF\u03C0\x07G\x02\x02\u03C0b\x03\x02" + + "\x02\x02\u03C1\u03C2\x07U\x02\x02\u03C2\u03C3\x07C\x02\x02\u03C3\u03C4" + + "\x07O\x02\x02\u03C4\u03C5\x07R\x02\x02\u03C5\u03C6\x07N\x02\x02\u03C6" + + "\u03C7\x07G\x02\x02\u03C7\u03C8\x07a\x02\x02\u03C8\u03C9\x07U\x02\x02" + + "\u03C9\u03CA\x07K\x02\x02\u03CA\u03CB\x07\\\x02\x02\u03CB\u03CC\x07G\x02" + + "\x02\u03CCd\x03\x02\x02\x02\u03CD\u03CE\x07Q\x02\x02\u03CE\u03CF\x07W" + + "\x02\x02\u03CF\u03D0\x07V\x02\x02\u03D0\u03D1\x07R\x02\x02\u03D1\u03D2" + + "\x07W\x02\x02\u03D2\u03D3\x07V\x02\x02\u03D3\u03D4\x07a\x02\x02\u03D4" + + "\u03D5\x07C\x02\x02\u03D5\u03D6\x07H\x02\x02\u03D6\u03D7\x07V\x02\x02" + + "\u03D7\u03D8\x07G\x02\x02\u03D8\u03D9\x07T\x02\x02\u03D9f\x03\x02\x02" + + "\x02\u03DA\u03DB\x07V\x02\x02\u03DB\u03DC\x07K\x02\x02\u03DC\u03DD\x07" + + "O\x02\x02\u03DD\u03DE\x07G\x02\x02\u03DE\u03DF\x07a\x02\x02\u03DF\u03E0" + + "\x07F\x02\x02\u03E0\u03E1\x07G\x02\x02\u03E1\u03E2\x07E\x02\x02\u03E2" + + "\u03E3\x07C\x02\x02\u03E3\u03E4\x07[\x02\x02\u03E4h\x03\x02\x02\x02\u03E5" + + "\u03E6\x07C\x02\x02\u03E6\u03E7\x07P\x02\x02\u03E7\u03E8\x07Q\x02\x02" + + "\u03E8\u03E9\x07O\x02\x02\u03E9\u03EA\x07C\x02\x02\u03EA\u03EB\x07N\x02" + + "\x02\u03EB\u03EC\x07[\x02\x02\u03EC\u03ED\x07a\x02\x02\u03ED\u03EE\x07" + + "T\x02\x02\u03EE\u03EF\x07C\x02\x02\u03EF\u03F0\x07V\x02\x02\u03F0\u03F1" + + "\x07G\x02\x02\u03F1j\x03\x02\x02\x02\u03F2\u03F3\x07E\x02\x02\u03F3\u03F4" + + "\x07C\x02\x02\u03F4\u03F5\x07V\x02\x02\u03F5\u03F6\x07G\x02\x02\u03F6" + + "\u03F7\x07I\x02\x02\u03F7\u03F8\x07Q\x02\x02\u03F8\u03F9\x07T\x02\x02" + + "\u03F9\u03FA\x07[\x02\x02\u03FA\u03FB\x07a\x02\x02\u03FB\u03FC\x07H\x02" + + "\x02\u03FC\u03FD\x07K\x02\x02\u03FD\u03FE\x07G\x02\x02\u03FE\u03FF\x07" + + "N\x02\x02\u03FF\u0400\x07F\x02\x02\u0400l\x03\x02\x02\x02\u0401\u0402" + + "\x07V\x02\x02\u0402\u0403\x07K\x02\x02\u0403\u0404\x07O\x02\x02\u0404" + + "\u0405\x07G\x02\x02\u0405\u0406\x07a\x02\x02\u0406\u0407\x07H\x02\x02" + + "\u0407\u0408\x07K\x02\x02\u0408\u0409\x07G\x02\x02\u0409\u040A\x07N\x02" + + "\x02\u040A\u040B\x07F\x02\x02\u040Bn\x03\x02\x02\x02\u040C\u040D\x07V" + + "\x02\x02\u040D\u040E\x07K\x02\x02\u040E\u040F\x07O\x02\x02\u040F\u0410" + + "\x07G\x02\x02\u0410\u0411\x07a\x02\x02\u0411\u0412\x07\\\x02\x02\u0412" + + "\u0413\x07Q\x02\x02\u0413\u0414\x07P\x02\x02\u0414\u0415\x07G\x02\x02" + + "\u0415p\x03\x02\x02\x02\u0416\u0417\x07V\x02\x02\u0417\u0418\x07T\x02" + + "\x02\u0418\u0419\x07C\x02\x02\u0419\u041A\x07K\x02\x02\u041A\u041B\x07" + + "P\x02\x02\u041B\u041C\x07K\x02\x02\u041C\u041D\x07P\x02\x02\u041D\u041E" + + "\x07I\x02\x02\u041E\u041F\x07a\x02\x02\u041F\u0420\x07F\x02\x02\u0420" + + "\u0421\x07C\x02\x02\u0421\u0422\x07V\x02\x02\u0422\u0423\x07C\x02\x02" + + "\u0423\u0424\x07a\x02\x02\u0424\u0425\x07U\x02\x02\u0425\u0426\x07K\x02" + + "\x02\u0426\u0427\x07\\\x02\x02\u0427\u0428\x07G\x02\x02\u0428r\x03\x02" + + "\x02\x02\u0429\u042A\x07C\x02\x02\u042A\u042B\x07P\x02\x02\u042B\u042C" + + "\x07Q\x02\x02\u042C\u042D\x07O\x02\x02\u042D\u042E\x07C\x02\x02\u042E" + + "\u042F\x07N\x02\x02\u042F\u0430\x07[\x02\x02\u0430\u0431\x07a\x02\x02" + + "\u0431\u0432\x07U\x02\x02\u0432\u0433\x07E\x02\x02\u0433\u0434\x07Q\x02" + + "\x02\u0434\u0435\x07T\x02\x02\u0435\u0436\x07G\x02\x02\u0436\u0437\x07" + + "a\x02\x02\u0437\u0438\x07V\x02\x02\u0438\u0439\x07J\x02\x02\u0439\u043A" + + "\x07T\x02\x02\u043A\u043B\x07G\x02\x02\u043B\u043C\x07U\x02\x02\u043C" + + "\u043D\x07J\x02\x02\u043D\u043E\x07Q\x02\x02\u043E\u043F\x07N\x02\x02" + + "\u043F\u0440\x07F\x02\x02\u0440t\x03\x02\x02\x02\u0441\u0442\x07E\x02" + + "\x02\u0442\u0443\x07C\x02\x02\u0443\u0444\x07U\x02\x02\u0444\u0445\x07" + + "G\x02\x02\u0445v\x03\x02\x02\x02\u0446\u0447\x07K\x02\x02\u0447\u0448" + + "\x07P\x02\x02\u0448x\x03\x02\x02\x02\u0449\u044A\x07P\x02\x02\u044A\u044B" + + "\x07Q\x02\x02\u044B\u044C\x07V\x02\x02\u044Cz\x03\x02\x02\x02\u044D\u044E" + + "\x07Q\x02\x02\u044E\u044F\x07T\x02\x02\u044F|\x03\x02\x02\x02\u0450\u0451" + + "\x07C\x02\x02\u0451\u0452\x07P\x02\x02\u0452\u0453\x07F\x02\x02\u0453" + + "~\x03\x02\x02\x02\u0454\u0455\x07Z\x02\x02\u0455\u0456\x07Q\x02\x02\u0456" + + "\u0457\x07T\x02\x02\u0457\x80\x03\x02\x02\x02\u0458\u0459\x07V\x02\x02" + + "\u0459\u045A\x07T\x02\x02\u045A\u045B\x07W\x02\x02\u045B\u045C\x07G\x02" + + "\x02\u045C\x82\x03\x02\x02\x02\u045D\u045E\x07H\x02\x02\u045E\u045F\x07" + + "C\x02\x02\u045F\u0460\x07N\x02\x02\u0460\u0461\x07U\x02\x02\u0461\u0462" + + "\x07G\x02\x02\u0462\x84\x03\x02\x02\x02\u0463\u0464\x07T\x02\x02\u0464" + + "\u0465\x07G\x02\x02\u0465\u0466\x07I\x02\x02\u0466\u0467\x07G\x02\x02" + + "\u0467\u0468\x07Z\x02\x02\u0468\u0469\x07R\x02\x02\u0469\x86\x03\x02\x02" + + "\x02\u046A\u046B\x07F\x02\x02\u046B\u046C\x07C\x02\x02\u046C\u046D\x07" + + "V\x02\x02\u046D\u046E\x07G\x02\x02\u046E\u046F\x07V\x02\x02\u046F\u0470" + + "\x07K\x02\x02\u0470\u0471\x07O\x02\x02\u0471\u0472\x07G\x02\x02\u0472" + + "\x88\x03\x02\x02\x02\u0473\u0474\x07K\x02\x02\u0474\u0475\x07P\x02\x02" + + "\u0475\u0476\x07V\x02\x02\u0476\u0477\x07G\x02\x02\u0477\u0478\x07T\x02" + + "\x02\u0478\u0479\x07X\x02\x02\u0479\u047A\x07C\x02\x02\u047A\u047B\x07" + + "N\x02\x02\u047B\x8A\x03\x02\x02\x02\u047C\u047D\x07O\x02\x02\u047D\u047E" + + "\x07K\x02\x02\u047E\u047F\x07E\x02\x02\u047F\u0480\x07T\x02\x02\u0480" + + "\u0481\x07Q\x02\x02\u0481\u0482\x07U\x02\x02\u0482\u0483\x07G\x02\x02" + + "\u0483\u0484\x07E\x02\x02\u0484\u0485\x07Q\x02\x02\u0485\u0486\x07P\x02" + + "\x02\u0486\u0487\x07F\x02\x02\u0487\x8C\x03\x02\x02\x02\u0488\u0489\x07" + + "O\x02\x02\u0489\u048A\x07K\x02\x02\u048A\u048B\x07N\x02\x02\u048B\u048C" + + "\x07N\x02\x02\u048C\u048D\x07K\x02\x02\u048D\u048E\x07U\x02\x02\u048E" + + "\u048F\x07G\x02\x02\u048F\u0490\x07E\x02\x02\u0490\u0491\x07Q\x02\x02" + + "\u0491\u0492\x07P\x02\x02\u0492\u0493\x07F\x02\x02\u0493\x8E\x03\x02\x02" + + "\x02\u0494\u0495\x07U\x02\x02\u0495\u0496\x07G\x02\x02\u0496\u0497\x07" + + "E\x02\x02\u0497\u0498\x07Q\x02\x02\u0498\u0499\x07P\x02\x02\u0499\u049A" + + "\x07F\x02\x02\u049A\x90\x03\x02\x02\x02\u049B\u049C\x07O\x02\x02\u049C" + + "\u049D\x07K\x02\x02\u049D\u049E\x07P\x02\x02\u049E\u049F\x07W\x02\x02" + + "\u049F\u04A0\x07V\x02\x02\u04A0\u04A1\x07G\x02\x02\u04A1\x92\x03\x02\x02" + + "\x02\u04A2\u04A3\x07J\x02\x02\u04A3\u04A4\x07Q\x02\x02\u04A4\u04A5\x07" + + "W\x02\x02\u04A5\u04A6\x07T\x02\x02\u04A6\x94\x03\x02\x02\x02\u04A7\u04A8" + + "\x07F\x02\x02\u04A8\u04A9\x07C\x02\x02\u04A9\u04AA\x07[\x02\x02\u04AA" + + "\x96\x03\x02\x02\x02\u04AB\u04AC\x07Y\x02\x02\u04AC\u04AD\x07G\x02\x02" + + "\u04AD\u04AE\x07G\x02\x02\u04AE\u04AF\x07M\x02\x02\u04AF\x98\x03\x02\x02" + + "\x02\u04B0\u04B1\x07O\x02\x02\u04B1\u04B2\x07Q\x02\x02\u04B2\u04B3\x07" + + "P\x02\x02\u04B3\u04B4\x07V\x02\x02\u04B4\u04B5\x07J\x02\x02\u04B5\x9A" + + "\x03\x02\x02\x02\u04B6\u04B7\x07S\x02\x02\u04B7\u04B8\x07W\x02\x02\u04B8" + + "\u04B9\x07C\x02\x02\u04B9\u04BA\x07T\x02\x02\u04BA\u04BB\x07V\x02\x02" + + "\u04BB\u04BC\x07G\x02\x02\u04BC\u04BD\x07T\x02\x02\u04BD\x9C\x03\x02\x02" + + "\x02\u04BE\u04BF\x07[\x02\x02\u04BF\u04C0\x07G\x02\x02\u04C0\u04C1\x07" + + "C\x02\x02\u04C1\u04C2\x07T\x02\x02\u04C2\x9E\x03\x02\x02\x02\u04C3\u04C4" + + "\x07U\x02\x02\u04C4\u04C5\x07G\x02\x02\u04C5\u04C6\x07E\x02\x02\u04C6" + + "\u04C7\x07Q\x02\x02\u04C7\u04C8\x07P\x02\x02\u04C8\u04C9\x07F\x02\x02" + + "\u04C9\u04CA\x07a\x02\x02\u04CA\u04CB\x07O\x02\x02\u04CB\u04CC\x07K\x02" + + "\x02\u04CC\u04CD\x07E\x02\x02\u04CD\u04CE\x07T\x02\x02\u04CE\u04CF\x07" + + "Q\x02\x02\u04CF\u04D0\x07U\x02\x02\u04D0\u04D1\x07G\x02\x02\u04D1\u04D2" + + "\x07E\x02\x02\u04D2\u04D3\x07Q\x02\x02\u04D3\u04D4\x07P\x02\x02\u04D4" + + "\u04D5\x07F\x02\x02\u04D5\xA0\x03\x02\x02\x02\u04D6\u04D7\x07O\x02\x02" + + "\u04D7\u04D8\x07K\x02\x02\u04D8\u04D9\x07P\x02\x02\u04D9\u04DA\x07W\x02" + + "\x02\u04DA\u04DB\x07V\x02\x02\u04DB\u04DC\x07G\x02\x02\u04DC\u04DD\x07" + + "a\x02\x02\u04DD\u04DE\x07O\x02\x02\u04DE\u04DF\x07K\x02\x02\u04DF\u04E0" + + "\x07E\x02\x02\u04E0\u04E1\x07T\x02\x02\u04E1\u04E2\x07Q\x02\x02\u04E2" + + "\u04E3\x07U\x02\x02\u04E3\u04E4\x07G\x02\x02\u04E4\u04E5\x07E\x02\x02" + + "\u04E5\u04E6\x07Q\x02\x02\u04E6\u04E7\x07P\x02\x02\u04E7\u04E8\x07F\x02" + + "\x02\u04E8\xA2\x03\x02\x02\x02\u04E9\u04EA\x07O\x02\x02\u04EA\u04EB\x07" + + "K\x02\x02\u04EB\u04EC\x07P\x02\x02\u04EC\u04ED\x07W\x02\x02\u04ED\u04EE" + + "\x07V\x02\x02\u04EE\u04EF\x07G\x02\x02\u04EF\u04F0\x07a\x02\x02\u04F0" + + "\u04F1\x07U\x02\x02\u04F1\u04F2\x07G\x02\x02\u04F2\u04F3\x07E\x02\x02" + + "\u04F3\u04F4\x07Q\x02\x02\u04F4\u04F5\x07P\x02\x02\u04F5\u04F6\x07F\x02" + + "\x02\u04F6\xA4\x03\x02\x02\x02\u04F7\u04F8\x07J\x02\x02\u04F8\u04F9\x07" + + "Q\x02\x02\u04F9\u04FA\x07W\x02\x02\u04FA\u04FB\x07T\x02\x02\u04FB\u04FC" + + "\x07a\x02\x02\u04FC\u04FD\x07O\x02\x02\u04FD\u04FE\x07K\x02\x02\u04FE" + + "\u04FF\x07E\x02\x02\u04FF\u0500\x07T\x02\x02\u0500\u0501\x07Q\x02\x02" + + "\u0501\u0502\x07U\x02\x02\u0502\u0503\x07G\x02\x02\u0503\u0504\x07E\x02" + + "\x02\u0504\u0505\x07Q\x02\x02\u0505\u0506\x07P\x02\x02\u0506\u0507\x07" + + "F\x02\x02\u0507\xA6\x03\x02\x02\x02\u0508\u0509\x07J\x02\x02\u0509\u050A" + + "\x07Q\x02\x02\u050A\u050B\x07W\x02\x02\u050B\u050C\x07T\x02\x02\u050C" + + "\u050D\x07"; + private static readonly _serializedATNSegment3: string = + "a\x02\x02\u050D\u050E\x07U\x02\x02\u050E\u050F\x07G\x02\x02\u050F\u0510" + + "\x07E\x02\x02\u0510\u0511\x07Q\x02\x02\u0511\u0512\x07P\x02\x02\u0512" + + "\u0513\x07F\x02\x02\u0513\xA8\x03\x02\x02\x02\u0514\u0515\x07J\x02\x02" + + "\u0515\u0516\x07Q\x02\x02\u0516\u0517\x07W\x02\x02\u0517\u0518\x07T\x02" + + "\x02\u0518\u0519\x07a\x02\x02\u0519\u051A\x07O\x02\x02\u051A\u051B\x07" + + "K\x02\x02\u051B\u051C\x07P\x02\x02\u051C\u051D\x07W\x02\x02\u051D\u051E" + + "\x07V\x02\x02\u051E\u051F\x07G\x02\x02\u051F\xAA\x03\x02\x02\x02\u0520" + + "\u0521\x07F\x02\x02\u0521\u0522\x07C\x02\x02\u0522\u0523\x07[\x02\x02" + + "\u0523\u0524\x07a\x02\x02\u0524\u0525\x07O\x02\x02\u0525\u0526\x07K\x02" + + "\x02\u0526\u0527\x07E\x02\x02\u0527\u0528\x07T\x02\x02\u0528\u0529\x07" + + "Q\x02\x02\u0529\u052A\x07U\x02\x02\u052A\u052B\x07G\x02\x02\u052B\u052C" + + "\x07E\x02\x02\u052C\u052D\x07Q\x02\x02\u052D\u052E\x07P\x02\x02\u052E" + + "\u052F\x07F\x02\x02\u052F\xAC\x03\x02\x02\x02\u0530\u0531\x07F\x02\x02" + + "\u0531\u0532\x07C\x02\x02\u0532\u0533\x07[\x02\x02\u0533\u0534\x07a\x02" + + "\x02\u0534\u0535\x07U\x02\x02\u0535\u0536\x07G\x02\x02\u0536\u0537\x07" + + "E\x02\x02\u0537\u0538\x07Q\x02\x02\u0538\u0539\x07P\x02\x02\u0539\u053A" + + "\x07F\x02\x02\u053A\xAE\x03\x02\x02\x02\u053B\u053C\x07F\x02\x02\u053C" + + "\u053D\x07C\x02\x02\u053D\u053E\x07[\x02\x02\u053E\u053F\x07a\x02\x02" + + "\u053F\u0540\x07O\x02\x02\u0540\u0541\x07K\x02\x02\u0541\u0542\x07P\x02" + + "\x02\u0542\u0543\x07W\x02\x02\u0543\u0544\x07V\x02\x02\u0544\u0545\x07" + + "G\x02\x02\u0545\xB0\x03\x02\x02\x02\u0546\u0547\x07F\x02\x02\u0547\u0548" + + "\x07C\x02\x02\u0548\u0549\x07[\x02\x02\u0549\u054A\x07a\x02\x02\u054A" + + "\u054B\x07J\x02\x02\u054B\u054C\x07Q\x02\x02\u054C\u054D\x07W\x02\x02" + + "\u054D\u054E\x07T\x02\x02\u054E\xB2\x03\x02\x02\x02\u054F\u0550\x07[\x02" + + "\x02\u0550\u0551\x07G\x02\x02\u0551\u0552\x07C\x02\x02\u0552\u0553\x07" + + "T\x02\x02\u0553\u0554\x07a\x02\x02\u0554\u0555\x07O\x02\x02\u0555\u0556" + + "\x07Q\x02\x02\u0556\u0557\x07P\x02\x02\u0557\u0558\x07V\x02\x02\u0558" + + "\u0559\x07J\x02\x02\u0559\xB4\x03\x02\x02\x02\u055A\u055B\x07E\x02\x02" + + "\u055B\u055C\x07Q\x02\x02\u055C\u055D\x07P\x02\x02\u055D\u055E\x07X\x02" + + "\x02\u055E\u055F\x07G\x02\x02\u055F\u0560\x07T\x02\x02\u0560\u0561\x07" + + "V\x02\x02\u0561\u0562\x07a\x02\x02\u0562\u0563\x07V\x02\x02\u0563\u0564" + + "\x07\\\x02\x02\u0564\xB6\x03\x02\x02\x02\u0565\u0566\x07F\x02\x02\u0566" + + "\u0567\x07C\x02\x02\u0567\u0568\x07V\x02\x02\u0568\u0569\x07C\x02\x02" + + "\u0569\u056A\x07O\x02\x02\u056A\u056B\x07Q\x02\x02\u056B\u056C\x07F\x02" + + "\x02\u056C\u056D\x07G\x02\x02\u056D\u056E\x07N\x02\x02\u056E\xB8\x03\x02" + + "\x02\x02\u056F\u0570\x07N\x02\x02\u0570\u0571\x07Q\x02\x02\u0571\u0572" + + "\x07Q\x02\x02\u0572\u0573\x07M\x02\x02\u0573\u0574\x07W\x02\x02\u0574" + + "\u0575\x07R\x02\x02\u0575\xBA\x03\x02\x02\x02\u0576\u0577\x07U\x02\x02" + + "\u0577\u0578\x07C\x02\x02\u0578\u0579\x07X\x02\x02\u0579\u057A\x07G\x02" + + "\x02\u057A\u057B\x07F\x02\x02\u057B\u057C\x07U\x02\x02\u057C\u057D\x07" + + "G\x02\x02\u057D\u057E\x07C\x02\x02\u057E\u057F\x07T\x02\x02\u057F\u0580" + + "\x07E\x02\x02\u0580\u0581\x07J\x02\x02\u0581\xBC\x03\x02\x02\x02\u0582" + + "\u0583\x07K\x02\x02\u0583\u0584\x07P\x02\x02\u0584\u0585\x07V\x02\x02" + + "\u0585\xBE\x03\x02\x02\x02\u0586\u0587\x07K\x02\x02\u0587\u0588\x07P\x02" + + "\x02\u0588\u0589\x07V\x02\x02\u0589\u058A\x07G\x02\x02\u058A\u058B\x07" + + "I\x02\x02\u058B\u058C\x07G\x02\x02\u058C\u058D\x07T\x02\x02\u058D\xC0" + + "\x03\x02\x02\x02\u058E\u058F\x07F\x02\x02\u058F\u0590\x07Q\x02\x02\u0590" + + "\u0591\x07W\x02\x02\u0591\u0592\x07D\x02\x02\u0592\u0593\x07N\x02\x02" + + "\u0593\u0594\x07G\x02\x02\u0594\xC2\x03\x02\x02\x02\u0595\u0596\x07N\x02" + + "\x02\u0596\u0597\x07Q\x02\x02\u0597\u0598\x07P\x02\x02\u0598\u0599\x07" + + "I\x02\x02\u0599\xC4\x03\x02\x02\x02\u059A\u059B\x07H\x02\x02\u059B\u059C" + + "\x07N\x02\x02\u059C\u059D\x07Q\x02\x02\u059D\u059E\x07C\x02\x02\u059E" + + "\u059F\x07V\x02\x02\u059F\xC6\x03\x02\x02\x02\u05A0\u05A1\x07U\x02\x02" + + "\u05A1\u05A2\x07V\x02\x02\u05A2\u05A3\x07T\x02\x02\u05A3\u05A4\x07K\x02" + + "\x02\u05A4\u05A5\x07P\x02\x02\u05A5\u05A6\x07I\x02\x02\u05A6\xC8\x03\x02" + + "\x02\x02\u05A7\u05A8\x07D\x02\x02\u05A8\u05A9\x07Q\x02\x02\u05A9\u05AA" + + "\x07Q\x02\x02\u05AA\u05AB\x07N\x02\x02\u05AB\u05AC\x07G\x02\x02\u05AC" + + "\u05AD\x07C\x02\x02\u05AD\u05AE\x07P\x02\x02\u05AE\xCA\x03\x02\x02\x02" + + "\u05AF\u05B0\x07~\x02\x02\u05B0\xCC\x03\x02\x02\x02\u05B1\u05B2\x07.\x02" + + "\x02\u05B2\xCE\x03\x02\x02\x02\u05B3\u05B4\x070\x02\x02\u05B4\xD0\x03" + + "\x02\x02\x02\u05B5\u05B6\x07?\x02\x02\u05B6\xD2\x03\x02\x02\x02\u05B7" + + "\u05B8\x07@\x02\x02\u05B8\xD4\x03\x02\x02\x02\u05B9\u05BA\x07>\x02\x02" + + "\u05BA\xD6\x03\x02\x02\x02\u05BB\u05BC\x07>\x02\x02\u05BC\u05BD\x07?\x02" + + "\x02\u05BD\xD8\x03\x02\x02\x02\u05BE\u05BF\x07@\x02\x02\u05BF\u05C0\x07" + + "?\x02\x02\u05C0\xDA\x03\x02\x02\x02\u05C1\u05C2\x07#\x02\x02\u05C2\u05C3" + + "\x07?\x02\x02\u05C3\xDC\x03\x02\x02\x02\u05C4\u05C5\x07-\x02\x02\u05C5" + + "\xDE\x03\x02\x02\x02\u05C6\u05C7\x07/\x02\x02\u05C7\xE0\x03\x02\x02\x02" + + "\u05C8\u05C9\x07,\x02\x02\u05C9\xE2\x03\x02\x02\x02\u05CA\u05CB\x071\x02" + + "\x02\u05CB\xE4\x03\x02\x02\x02\u05CC\u05CD\x07\'\x02\x02\u05CD\xE6\x03" + + "\x02\x02\x02\u05CE\u05CF\x07#\x02\x02\u05CF\xE8\x03\x02\x02\x02\u05D0" + + "\u05D1\x07<\x02\x02\u05D1\xEA\x03\x02\x02\x02\u05D2\u05D3\x07*\x02\x02" + + "\u05D3\xEC\x03\x02\x02\x02\u05D4\u05D5\x07+\x02\x02\u05D5\xEE\x03\x02" + + "\x02\x02\u05D6\u05D7\x07]\x02\x02\u05D7\xF0\x03\x02\x02\x02\u05D8\u05D9" + + "\x07_\x02\x02\u05D9\xF2\x03\x02\x02\x02\u05DA\u05DB\x07)\x02\x02\u05DB" + + "\xF4\x03\x02\x02\x02\u05DC\u05DD\x07$\x02\x02\u05DD\xF6\x03\x02\x02\x02" + + "\u05DE\u05DF\x07b\x02\x02\u05DF\xF8\x03\x02\x02\x02\u05E0\u05E1\x07\x80" + + "\x02\x02\u05E1\xFA\x03\x02\x02\x02\u05E2\u05E3\x07(\x02\x02\u05E3\xFC" + + "\x03\x02\x02\x02\u05E4\u05E5\x07`\x02\x02\u05E5\xFE\x03\x02\x02\x02\u05E6" + + "\u05E7\x07C\x02\x02\u05E7\u05E8\x07X\x02\x02\u05E8\u05E9\x07I\x02\x02" + + "\u05E9\u0100\x03\x02\x02\x02\u05EA\u05EB\x07E\x02\x02\u05EB\u05EC\x07" + + "Q\x02\x02\u05EC\u05ED\x07W\x02\x02\u05ED\u05EE\x07P\x02\x02\u05EE\u05EF" + + "\x07V\x02\x02\u05EF\u0102\x03\x02\x02\x02\u05F0\u05F1\x07F\x02\x02\u05F1" + + "\u05F2\x07K\x02\x02\u05F2\u05F3\x07U\x02\x02\u05F3\u05F4\x07V\x02\x02" + + "\u05F4\u05F5\x07K\x02\x02\u05F5\u05F6\x07P\x02\x02\u05F6\u05F7\x07E\x02" + + "\x02\u05F7\u05F8\x07V\x02\x02\u05F8\u05F9\x07a\x02\x02\u05F9\u05FA\x07" + + "E\x02\x02\u05FA\u05FB\x07Q\x02\x02\u05FB\u05FC\x07W\x02\x02\u05FC\u05FD" + + "\x07P\x02\x02\u05FD\u05FE\x07V\x02\x02\u05FE\u0104\x03\x02\x02\x02\u05FF" + + "\u0600\x07G\x02\x02\u0600\u0601\x07U\x02\x02\u0601\u0602\x07V\x02\x02" + + "\u0602\u0603\x07F\x02\x02\u0603\u0604\x07E\x02\x02\u0604\u0106\x03\x02" + + "\x02\x02\u0605\u0606\x07G\x02\x02\u0606\u0607\x07U\x02\x02\u0607\u0608" + + "\x07V\x02\x02\u0608\u0609\x07F\x02\x02\u0609\u060A\x07E\x02\x02\u060A" + + "\u060B\x07a\x02\x02\u060B\u060C\x07G\x02\x02\u060C\u060D\x07T\x02\x02" + + "\u060D\u060E\x07T\x02\x02\u060E\u060F\x07Q\x02\x02\u060F\u0610\x07T\x02" + + "\x02\u0610\u0108\x03\x02\x02\x02\u0611\u0612\x07O\x02\x02\u0612\u0613" + + "\x07C\x02\x02\u0613\u0614\x07Z\x02\x02\u0614\u010A\x03\x02\x02\x02\u0615" + + "\u0616\x07O\x02\x02\u0616\u0617\x07G\x02\x02\u0617\u0618\x07C\x02\x02" + + "\u0618\u0619\x07P\x02\x02\u0619\u010C\x03\x02\x02\x02\u061A\u061B\x07" + + "O\x02\x02\u061B\u061C\x07G\x02\x02\u061C\u061D\x07F\x02\x02\u061D\u061E" + + "\x07K\x02\x02\u061E\u061F\x07C\x02\x02\u061F\u0620\x07P\x02\x02\u0620" + + "\u010E\x03\x02\x02\x02\u0621\u0622\x07O\x02\x02\u0622\u0623\x07K\x02\x02" + + "\u0623\u0624\x07P\x02\x02\u0624\u0110\x03\x02\x02\x02\u0625\u0626\x07" + + "O\x02\x02\u0626\u0627\x07Q\x02\x02\u0627\u0628\x07F\x02\x02\u0628\u0629" + + "\x07G\x02\x02\u0629\u0112\x03\x02\x02\x02\u062A\u062B\x07T\x02\x02\u062B" + + "\u062C\x07C\x02\x02\u062C\u062D\x07P\x02\x02\u062D\u062E\x07I\x02\x02" + + "\u062E\u062F\x07G\x02\x02\u062F\u0114\x03\x02\x02\x02\u0630\u0631\x07" + + "U\x02\x02\u0631\u0632\x07V\x02\x02\u0632\u0633\x07F\x02\x02\u0633\u0634" + + "\x07G\x02\x02\u0634\u0635\x07X\x02\x02\u0635\u0116\x03\x02\x02\x02\u0636" + + "\u0637\x07U\x02\x02\u0637\u0638\x07V\x02\x02\u0638\u0639\x07F\x02\x02" + + "\u0639\u063A\x07G\x02\x02\u063A\u063B\x07X\x02\x02\u063B\u063C\x07R\x02" + + "\x02\u063C\u0118\x03\x02\x02\x02\u063D\u063E\x07U\x02\x02\u063E\u063F" + + "\x07W\x02\x02\u063F\u0640\x07O\x02\x02\u0640\u011A\x03\x02\x02\x02\u0641" + + "\u0642\x07U\x02\x02\u0642\u0643\x07W\x02\x02\u0643\u0644\x07O\x02\x02" + + "\u0644\u0645\x07U\x02\x02\u0645\u0646\x07S\x02\x02\u0646\u011C\x03\x02" + + "\x02\x02\u0647\u0648\x07X\x02\x02\u0648\u0649\x07C\x02\x02\u0649\u064A" + + "\x07T\x02\x02\u064A\u064B\x07a\x02\x02\u064B\u064C\x07U\x02\x02\u064C" + + "\u064D\x07C\x02\x02\u064D\u064E\x07O\x02\x02\u064E\u064F\x07R\x02\x02" + + "\u064F\u011E\x03\x02\x02\x02\u0650\u0651\x07X\x02\x02\u0651\u0652\x07" + + "C\x02\x02\u0652\u0653\x07T\x02\x02\u0653\u0654\x07a\x02\x02\u0654\u0655" + + "\x07R\x02\x02\u0655\u0656\x07Q\x02\x02\u0656\u0657\x07R\x02\x02\u0657" + + "\u0120\x03\x02\x02\x02\u0658\u0659\x07U\x02\x02\u0659\u065A\x07V\x02\x02" + + "\u065A\u065B\x07F\x02\x02\u065B\u065C\x07F\x02\x02\u065C\u065D\x07G\x02" + + "\x02\u065D\u065E\x07X\x02\x02\u065E\u065F\x07a\x02\x02\u065F\u0660\x07" + + "U\x02\x02\u0660\u0661\x07C\x02\x02\u0661\u0662\x07O\x02\x02\u0662\u0663" + + "\x07R\x02\x02\u0663\u0122\x03\x02\x02\x02\u0664\u0665\x07U\x02\x02\u0665" + + "\u0666\x07V\x02\x02\u0666\u0667\x07F\x02\x02\u0667\u0668\x07F\x02\x02" + + "\u0668\u0669\x07G\x02\x02\u0669\u066A\x07X\x02\x02\u066A\u066B\x07a\x02" + + "\x02\u066B\u066C\x07R\x02\x02\u066C\u066D\x07Q\x02\x02\u066D\u066E\x07" + + "R\x02\x02\u066E\u0124\x03\x02\x02\x02\u066F\u0670\x07R\x02\x02\u0670\u0671" + + "\x07G\x02\x02\u0671\u0672\x07T\x02\x02\u0672\u0673\x07E\x02\x02\u0673" + + "\u0674\x07G\x02\x02\u0674\u0675\x07P\x02\x02\u0675\u0676\x07V\x02\x02" + + "\u0676\u0677\x07K\x02\x02\u0677\u0678\x07N\x02\x02\u0678\u0679\x07G\x02" + + "\x02\u0679\u0126\x03\x02\x02\x02\u067A\u067B\x07V\x02\x02\u067B\u067C" + + "\x07C\x02\x02\u067C\u067D\x07M\x02\x02\u067D\u067E\x07G\x02\x02\u067E" + + "\u0128\x03\x02\x02\x02\u067F\u0680\x07H\x02\x02\u0680\u0681\x07K\x02\x02" + + "\u0681\u0682\x07T\x02\x02\u0682\u0683\x07U\x02\x02\u0683\u0684\x07V\x02" + + "\x02\u0684\u012A\x03\x02\x02\x02\u0685\u0686\x07N\x02\x02\u0686\u0687" + + "\x07C\x02\x02\u0687\u0688\x07U\x02\x02\u0688\u0689\x07V\x02\x02\u0689" + + "\u012C\x03\x02\x02\x02\u068A\u068B\x07N\x02\x02\u068B\u068C\x07K\x02\x02" + + "\u068C\u068D\x07U\x02\x02\u068D\u068E\x07V\x02\x02\u068E\u012E\x03\x02" + + "\x02\x02\u068F\u0690\x07X\x02\x02\u0690\u0691\x07C\x02\x02\u0691\u0692" + + "\x07N\x02\x02\u0692\u0693\x07W\x02\x02\u0693\u0694\x07G\x02\x02\u0694" + + "\u0695\x07U\x02\x02\u0695\u0130\x03\x02\x02\x02\u0696\u0697\x07G\x02\x02" + + "\u0697\u0698\x07C\x02\x02\u0698\u0699\x07T\x02\x02\u0699\u069A\x07N\x02" + + "\x02\u069A\u069B\x07K\x02\x02\u069B\u069C\x07G\x02\x02\u069C\u069D\x07" + + "U\x02\x02\u069D\u069E\x07V\x02\x02\u069E\u0132\x03\x02\x02\x02\u069F\u06A0" + + "\x07G\x02\x02\u06A0\u06A1\x07C\x02\x02\u06A1\u06A2\x07T\x02\x02\u06A2" + + "\u06A3\x07N\x02\x02\u06A3\u06A4\x07K\x02\x02\u06A4\u06A5\x07G\x02\x02" + + "\u06A5\u06A6\x07U\x02\x02\u06A6\u06A7\x07V\x02\x02\u06A7\u06A8\x07a\x02" + + "\x02\u06A8\u06A9\x07V\x02\x02\u06A9\u06AA\x07K\x02\x02\u06AA\u06AB\x07" + + "O\x02\x02\u06AB\u06AC\x07G\x02\x02\u06AC\u0134\x03\x02\x02\x02\u06AD\u06AE" + + "\x07N\x02\x02\u06AE\u06AF\x07C\x02\x02\u06AF\u06B0\x07V\x02\x02\u06B0" + + "\u06B1\x07G\x02\x02\u06B1\u06B2\x07U\x02\x02\u06B2\u06B3\x07V\x02\x02" + + "\u06B3\u0136\x03\x02\x02\x02\u06B4\u06B5\x07N\x02\x02\u06B5\u06B6\x07" + + "C\x02\x02\u06B6\u06B7\x07V\x02\x02\u06B7\u06B8\x07G\x02\x02\u06B8\u06B9" + + "\x07U\x02\x02\u06B9\u06BA\x07V\x02\x02\u06BA\u06BB\x07a\x02\x02\u06BB" + + "\u06BC\x07V\x02\x02\u06BC\u06BD\x07K\x02\x02\u06BD\u06BE\x07O\x02\x02" + + "\u06BE\u06BF\x07G\x02\x02\u06BF\u0138\x03\x02\x02\x02\u06C0\u06C1\x07" + + "R\x02\x02\u06C1\u06C2\x07G\x02\x02\u06C2\u06C3\x07T\x02\x02\u06C3\u06C4" + + "\x07a\x02\x02\u06C4\u06C5\x07F\x02\x02\u06C5\u06C6\x07C\x02\x02\u06C6" + + "\u06C7\x07[\x02\x02\u06C7\u013A\x03\x02\x02\x02\u06C8\u06C9\x07R\x02\x02" + + "\u06C9\u06CA\x07G\x02\x02\u06CA\u06CB\x07T\x02\x02\u06CB\u06CC\x07a\x02" + + "\x02\u06CC\u06CD\x07J\x02\x02\u06CD\u06CE\x07Q\x02\x02\u06CE\u06CF\x07" + + "W\x02\x02\u06CF\u06D0\x07T\x02\x02\u06D0\u013C\x03\x02\x02\x02\u06D1\u06D2" + + "\x07R\x02\x02\u06D2\u06D3\x07G\x02\x02\u06D3\u06D4\x07T\x02\x02\u06D4" + + "\u06D5\x07a\x02\x02\u06D5\u06D6\x07O\x02\x02\u06D6\u06D7\x07K\x02\x02" + + "\u06D7\u06D8\x07P\x02\x02\u06D8\u06D9\x07W\x02\x02\u06D9\u06DA\x07V\x02" + + "\x02\u06DA\u06DB\x07G\x02\x02\u06DB\u013E\x03\x02\x02\x02\u06DC\u06DD" + + "\x07R\x02\x02\u06DD\u06DE\x07G\x02\x02\u06DE\u06DF\x07T\x02\x02\u06DF" + + "\u06E0\x07a\x02\x02\u06E0\u06E1\x07U\x02\x02\u06E1\u06E2\x07G\x02\x02" + + "\u06E2\u06E3\x07E\x02\x02\u06E3\u06E4\x07Q\x02\x02\u06E4\u06E5\x07P\x02" + + "\x02\u06E5\u06E6\x07F\x02\x02\u06E6\u0140\x03\x02\x02\x02\u06E7\u06E8" + + "\x07T\x02\x02\u06E8\u06E9\x07C\x02\x02\u06E9\u06EA\x07V\x02\x02\u06EA" + + "\u06EB\x07G\x02\x02\u06EB\u0142\x03\x02\x02\x02\u06EC\u06ED\x07U\x02\x02" + + "\u06ED\u06EE\x07R\x02\x02\u06EE\u06EF\x07C\x02\x02\u06EF\u06F0\x07T\x02" + + "\x02\u06F0\u06F1\x07M\x02\x02\u06F1\u06F2\x07N\x02\x02\u06F2\u06F3\x07" + + "K\x02\x02\u06F3\u06F4\x07P\x02\x02\u06F4\u06F5\x07G\x02\x02\u06F5\u0144" + + "\x03\x02\x02\x02\u06F6\u06F7\x07E\x02\x02\u06F7\u0146\x03\x02\x02\x02" + + "\u06F8\u06F9\x07F\x02\x02\u06F9\u06FA\x07E\x02\x02\u06FA\u0148\x03\x02" + + "\x02\x02\u06FB\u06FC\x07C\x02\x02\u06FC\u06FD\x07D\x02\x02\u06FD\u06FE" + + "\x07U\x02\x02\u06FE\u014A\x03\x02\x02\x02\u06FF\u0700\x07E\x02\x02\u0700" + + "\u0701\x07G\x02\x02\u0701\u0702\x07K\x02\x02\u0702\u0703\x07N\x02\x02" + + "\u0703\u014C\x03\x02\x02\x02\u0704\u0705\x07E\x02\x02\u0705\u0706\x07" + + "G\x02\x02\u0706\u0707\x07K\x02\x02\u0707\u0708\x07N\x02\x02\u0708\u0709" + + "\x07K\x02\x02\u0709\u070A\x07P\x02\x02\u070A\u070B\x07I\x02\x02\u070B" + + "\u014E\x03\x02\x02\x02\u070C\u070D\x07E\x02\x02\u070D\u070E\x07Q\x02\x02" + + "\u070E\u070F\x07P\x02\x02\u070F\u0710\x07X\x02\x02\u0710\u0150\x03\x02" + + "\x02\x02\u0711\u0712\x07E\x02\x02\u0712\u0713\x07T\x02\x02\u0713\u0714" + + "\x07E\x02\x02\u0714\u0715\x075\x02\x02\u0715\u0716\x074\x02\x02\u0716" + + "\u0152\x03\x02\x02\x02\u0717\u0718\x07G\x02\x02\u0718\u0154\x03\x02\x02" + + "\x02\u0719\u071A\x07G\x02\x02\u071A\u071B\x07Z\x02\x02\u071B\u071C\x07" + + "R\x02\x02\u071C\u0156\x03\x02\x02\x02\u071D\u071E\x07H\x02\x02\u071E\u071F" + + "\x07N\x02\x02\u071F\u0720\x07Q\x02\x02\u0720\u0721\x07Q\x02\x02\u0721" + + "\u0722\x07T\x02\x02\u0722\u0158\x03\x02\x02\x02\u0723\u0724\x07N\x02\x02" + + "\u0724\u0725\x07P\x02\x02\u0725\u015A\x03\x02\x02\x02\u0726\u0727\x07" + + "N\x02\x02\u0727\u0728\x07Q\x02\x02\u0728\u0729\x07I\x02\x02\u0729\u015C" + + "\x03\x02\x02\x02\u072A\u072B\x07N\x02\x02\u072B\u072C\x07Q\x02\x02\u072C" + + "\u072D\x07I\x02\x02\u072D\u072E\x073\x02\x02\u072E\u072F\x072\x02\x02" + + "\u072F\u015E\x03\x02\x02\x02\u0730\u0731\x07N\x02\x02\u0731\u0732\x07" + + "Q\x02\x02\u0732\u0733\x07I\x02\x02\u0733\u0734\x074\x02\x02\u0734\u0160" + + "\x03\x02\x02\x02\u0735\u0736\x07O\x02\x02\u0736\u0737\x07Q\x02\x02\u0737" + + "\u0738\x07F\x02\x02\u0738\u0162\x03\x02\x02\x02\u0739\u073A\x07R\x02\x02" + + "\u073A\u073B\x07K\x02\x02\u073B\u0164\x03\x02\x02\x02\u073C\u073D\x07" + + "R\x02\x02\u073D\u073E\x07Q\x02\x02\u073E\u073F\x07Y\x02\x02\u073F\u0166" + + "\x03\x02\x02\x02\u0740\u0741\x07R\x02\x02\u0741\u0742\x07Q\x02\x02\u0742" + + "\u0743\x07Y\x02\x02\u0743\u0744\x07G\x02\x02\u0744\u0745\x07T\x02\x02" + + "\u0745\u0168\x03\x02\x02\x02\u0746\u0747\x07T\x02\x02\u0747\u0748\x07" + + "C\x02\x02\u0748\u0749\x07P\x02\x02\u0749\u074A\x07F\x02\x02\u074A\u016A" + + "\x03\x02\x02\x02\u074B\u074C\x07T\x02\x02\u074C\u074D\x07Q\x02\x02\u074D" + + "\u074E\x07W\x02\x02\u074E\u074F\x07P\x02\x02\u074F\u0750\x07F\x02\x02" + + "\u0750\u016C\x03\x02\x02\x02\u0751\u0752\x07U\x02\x02\u0752\u0753\x07" + + "K\x02\x02\u0753\u0754\x07I\x02\x02\u0754\u0755\x07P\x02\x02\u0755\u016E" + + "\x03\x02\x02\x02\u0756\u0757\x07U\x02\x02\u0757\u0758\x07S\x02\x02\u0758" + + "\u0759\x07T\x02\x02\u0759\u075A\x07V\x02\x02\u075A\u0170\x03\x02\x02\x02" + + "\u075B\u075C\x07V\x02\x02\u075C\u075D\x07T\x02\x02\u075D\u075E\x07W\x02" + + "\x02\u075E\u075F\x07P\x02\x02\u075F\u0760\x07E\x02\x02\u0760\u0761\x07" + + "C\x02\x02\u0761\u0762\x07V\x02\x02\u0762\u0763\x07G\x02\x02\u0763\u0172" + + "\x03\x02\x02\x02\u0764\u0765\x07C\x02\x02\u0765\u0766\x07E\x02\x02\u0766" + + "\u0767\x07Q\x02\x02\u0767\u0768\x07U\x02\x02\u0768\u0174\x03\x02\x02\x02" + + "\u0769\u076A\x07C\x02\x02\u076A\u076B\x07U\x02\x02\u076B\u076C\x07K\x02" + + "\x02\u076C\u076D\x07P\x02\x02\u076D\u0176\x03\x02\x02\x02\u076E\u076F" + + "\x07C\x02\x02\u076F\u0770\x07V\x02\x02\u0770\u0771\x07C\x02\x02\u0771" + + "\u0772\x07P\x02\x02\u0772\u0178\x03\x02\x02\x02\u0773\u0774\x07C\x02\x02" + + "\u0774\u0775\x07V\x02\x02\u0775\u0776\x07C\x02\x02\u0776\u0777\x07P\x02" + + "\x02\u0777\u0778\x074\x02\x02\u0778\u017A\x03\x02\x02\x02\u0779\u077A" + + "\x07E\x02\x02\u077A\u077B\x07Q\x02\x02\u077B\u077C\x07U\x02\x02\u077C" + + "\u017C\x03\x02\x02\x02\u077D\u077E\x07E\x02\x02\u077E\u077F\x07Q\x02\x02" + + "\u077F\u0780\x07V\x02\x02\u0780\u017E\x03\x02\x02\x02\u0781\u0782\x07" + + "F\x02\x02\u0782\u0783\x07G\x02\x02\u0783\u0784\x07I\x02\x02\u0784\u0785" + + "\x07T\x02\x02\u0785\u0786\x07G\x02\x02\u0786\u0787\x07G\x02\x02\u0787" + + "\u0788\x07U\x02\x02\u0788\u0180\x03\x02\x02\x02\u0789\u078A\x07T\x02\x02" + + "\u078A\u078B\x07C\x02\x02\u078B\u078C\x07F\x02\x02\u078C\u078D\x07K\x02" + + "\x02\u078D\u078E\x07C\x02\x02\u078E\u078F\x07P\x02\x02\u078F\u0790\x07" + + "U\x02\x02\u0790\u0182\x03\x02\x02\x02\u0791\u0792\x07U\x02\x02\u0792\u0793" + + "\x07K\x02\x02\u0793\u0794\x07P\x02\x02\u0794\u0184\x03\x02\x02\x02\u0795" + + "\u0796\x07V\x02\x02\u0796\u0797\x07C\x02\x02\u0797\u0798\x07P\x02\x02" + + "\u0798\u0186\x03\x02\x02\x02\u0799\u079A\x07C\x02\x02\u079A\u079B\x07" + + "F\x02\x02\u079B\u079C\x07F\x02\x02\u079C\u079D\x07F\x02\x02\u079D\u079E" + + "\x07C\x02\x02\u079E\u079F\x07V\x02\x02\u079F\u07A0\x07G\x02\x02\u07A0" + + "\u0188\x03\x02\x02\x02\u07A1\u07A2\x07E\x02\x02\u07A2\u07A3\x07W\x02\x02" + + "\u07A3\u07A4\x07T\x02\x02\u07A4\u07A5\x07F\x02\x02\u07A5\u07A6\x07C\x02" + + "\x02\u07A6\u07A7\x07V\x02\x02\u07A7\u07A8\x07G\x02\x02\u07A8\u018A\x03" + + "\x02\x02\x02\u07A9\u07AA\x07E\x02\x02\u07AA\u07AB\x07W\x02\x02\u07AB\u07AC" + + "\x07T\x02\x02\u07AC\u07AD\x07T\x02\x02\u07AD\u07AE\x07G\x02\x02\u07AE" + + "\u07AF\x07P\x02\x02\u07AF\u07B0\x07V\x02\x02\u07B0\u07B1\x07a\x02\x02" + + "\u07B1\u07B2\x07F\x02\x02\u07B2\u07B3\x07C\x02\x02\u07B3\u07B4\x07V\x02" + + "\x02\u07B4\u07B5\x07G\x02\x02\u07B5\u018C\x03\x02\x02\x02\u07B6\u07B7" + + "\x07E\x02\x02\u07B7\u07B8\x07W\x02\x02\u07B8\u07B9\x07T\x02\x02\u07B9" + + "\u07BA\x07T\x02\x02\u07BA\u07BB\x07G\x02\x02\u07BB\u07BC\x07P\x02\x02" + + "\u07BC\u07BD\x07V\x02\x02\u07BD\u07BE\x07a\x02\x02\u07BE\u07BF\x07V\x02" + + "\x02\u07BF\u07C0\x07K\x02\x02\u07C0\u07C1\x07O\x02\x02\u07C1\u07C2\x07" + + "G\x02\x02\u07C2\u018E\x03\x02\x02\x02\u07C3\u07C4\x07E\x02\x02\u07C4\u07C5" + + "\x07W\x02\x02\u07C5\u07C6\x07T\x02\x02\u07C6\u07C7\x07T\x02\x02\u07C7" + + "\u07C8\x07G\x02\x02\u07C8\u07C9\x07P\x02\x02\u07C9\u07CA\x07V\x02\x02" + + "\u07CA\u07CB\x07a\x02\x02\u07CB\u07CC\x07V\x02\x02\u07CC\u07CD\x07K\x02" + + "\x02\u07CD\u07CE\x07O\x02\x02\u07CE\u07CF\x07G\x02\x02\u07CF\u07D0\x07" + + "U\x02\x02\u07D0\u07D1\x07V\x02\x02\u07D1\u07D2\x07C\x02\x02\u07D2\u07D3" + + "\x07O\x02\x02\u07D3\u07D4\x07R\x02\x02\u07D4\u0190\x03\x02\x02\x02\u07D5" + + "\u07D6\x07E\x02\x02\u07D6\u07D7\x07W\x02\x02\u07D7\u07D8\x07T\x02\x02" + + "\u07D8\u07D9\x07V\x02\x02\u07D9\u07DA\x07K\x02\x02\u07DA\u07DB\x07O\x02" + + "\x02\u07DB\u07DC\x07G\x02\x02\u07DC\u0192\x03\x02\x02\x02\u07DD\u07DE" + + "\x07F\x02\x02\u07DE\u07DF\x07C\x02\x02\u07DF\u07E0\x07V\x02\x02\u07E0" + + "\u07E1\x07G\x02\x02\u07E1\u0194\x03\x02\x02\x02\u07E2\u07E3\x07F\x02\x02" + + "\u07E3\u07E4\x07C\x02\x02\u07E4\u07E5\x07V\x02\x02\u07E5\u07E6\x07G\x02" + + "\x02\u07E6\u07E7\x07a\x02\x02\u07E7\u07E8\x07C\x02\x02\u07E8\u07E9\x07" + + "F\x02\x02\u07E9\u07EA\x07F\x02\x02\u07EA\u0196\x03\x02\x02\x02\u07EB\u07EC" + + "\x07F\x02\x02\u07EC\u07ED\x07C\x02\x02\u07ED\u07EE\x07V\x02\x02\u07EE" + + "\u07EF\x07G\x02\x02\u07EF\u07F0\x07a\x02\x02\u07F0\u07F1\x07H\x02\x02" + + "\u07F1\u07F2\x07Q\x02\x02\u07F2\u07F3\x07T\x02\x02\u07F3\u07F4\x07O\x02" + + "\x02\u07F4\u07F5\x07C\x02\x02\u07F5\u07F6\x07V\x02\x02\u07F6\u0198\x03" + + "\x02\x02\x02\u07F7\u07F8\x07F\x02\x02\u07F8\u07F9\x07C\x02\x02\u07F9\u07FA" + + "\x07V\x02\x02\u07FA\u07FB\x07G\x02\x02\u07FB\u07FC\x07a\x02\x02\u07FC" + + "\u07FD\x07U\x02\x02\u07FD\u07FE\x07W\x02\x02\u07FE\u07FF\x07D\x02\x02" + + "\u07FF\u019A\x03\x02\x02\x02\u0800\u0801\x07F\x02\x02\u0801\u0802\x07" + + "C\x02\x02\u0802\u0803\x07[\x02\x02\u0803\u0804\x07P\x02\x02\u0804\u0805" + + "\x07C\x02\x02\u0805\u0806\x07O\x02\x02\u0806\u0807\x07G\x02\x02\u0807" + + "\u019C\x03\x02\x02\x02\u0808\u0809\x07F\x02\x02\u0809\u080A\x07C\x02\x02" + + "\u080A\u080B\x07[\x02\x02\u080B\u080C\x07Q\x02\x02\u080C\u080D\x07H\x02" + + "\x02\u080D\u080E\x07O\x02\x02\u080E\u080F\x07Q\x02\x02\u080F\u0810\x07" + + "P\x02\x02\u0810\u0811\x07V\x02\x02\u0811\u0812\x07J\x02\x02\u0812\u019E" + + "\x03\x02\x02\x02\u0813\u0814\x07F\x02\x02\u0814\u0815\x07C\x02\x02\u0815" + + "\u0816\x07[\x02\x02\u0816\u0817\x07Q\x02\x02\u0817\u0818\x07H\x02\x02" + + "\u0818\u0819\x07Y\x02\x02\u0819\u081A\x07G\x02\x02\u081A\u081B\x07G\x02" + + "\x02\u081B\u081C\x07M\x02\x02\u081C\u01A0\x03\x02\x02\x02\u081D\u081E" + + "\x07F\x02\x02\u081E\u081F\x07C\x02\x02\u081F\u0820\x07[\x02\x02\u0820" + + "\u0821\x07Q\x02\x02\u0821\u0822\x07H\x02\x02\u0822\u0823\x07[\x02\x02" + + "\u0823\u0824\x07G\x02\x02\u0824\u0825\x07C\x02\x02\u0825\u0826\x07T\x02" + + "\x02\u0826\u01A2\x03\x02\x02\x02\u0827\u0828\x07H\x02\x02\u0828\u0829" + + "\x07T\x02\x02\u0829\u082A\x07Q\x02\x02\u082A\u082B\x07O\x02\x02\u082B" + + "\u082C\x07a\x02\x02\u082C\u082D\x07F\x02\x02\u082D\u082E\x07C\x02\x02" + + "\u082E\u082F\x07[\x02\x02\u082F\u0830\x07U\x02\x02\u0830\u01A4\x03\x02" + + "\x02\x02\u0831\u0832\x07N\x02\x02\u0832\u0833\x07Q\x02\x02\u0833\u0834" + + "\x07E\x02\x02\u0834\u0835\x07C\x02\x02\u0835\u0836\x07N\x02\x02\u0836" + + "\u0837\x07V\x02\x02\u0837\u0838\x07K\x02\x02\u0838\u0839\x07O\x02\x02" + + "\u0839\u083A\x07G\x02\x02\u083A\u01A6\x03\x02\x02\x02\u083B\u083C\x07" + + "N\x02\x02\u083C\u083D\x07Q\x02\x02\u083D\u083E\x07E\x02\x02\u083E\u083F" + + "\x07C\x02\x02\u083F\u0840\x07N\x02\x02\u0840\u0841\x07V\x02\x02\u0841" + + "\u0842\x07K\x02\x02\u0842\u0843\x07O\x02\x02\u0843\u0844\x07G\x02\x02" + + "\u0844\u0845\x07U\x02\x02\u0845\u0846\x07V\x02\x02\u0846\u0847\x07C\x02" + + "\x02\u0847\u0848\x07O\x02\x02\u0848\u0849\x07R\x02\x02\u0849\u01A8\x03" + + "\x02\x02\x02\u084A\u084B\x07H\x02\x02\u084B\u084C\x07T\x02\x02\u084C\u084D" + + "\x07Q\x02\x02\u084D\u084E\x07O\x02"; + private static readonly _serializedATNSegment4: string = + "\x02\u084E\u084F\x07a\x02\x02\u084F\u0850\x07W\x02\x02\u0850\u0851\x07" + + "P\x02\x02\u0851\u0852\x07K\x02\x02\u0852\u0853\x07Z\x02\x02\u0853\u0854" + + "\x07V\x02\x02\u0854\u0855\x07K\x02\x02\u0855\u0856\x07O\x02\x02\u0856" + + "\u0857\x07G\x02\x02\u0857\u01AA\x03\x02\x02\x02\u0858\u0859\x07O\x02\x02" + + "\u0859\u085A\x07C\x02\x02\u085A\u085B\x07M\x02\x02\u085B\u085C\x07G\x02" + + "\x02\u085C\u085D\x07F\x02\x02\u085D\u085E\x07C\x02\x02\u085E\u085F\x07" + + "V\x02\x02\u085F\u0860\x07G\x02\x02\u0860\u01AC\x03\x02\x02\x02\u0861\u0862" + + "\x07O\x02\x02\u0862\u0863\x07C\x02\x02\u0863\u0864\x07M\x02\x02\u0864" + + "\u0865\x07G\x02\x02\u0865\u0866\x07V\x02\x02\u0866\u0867\x07K\x02\x02" + + "\u0867\u0868\x07O\x02\x02\u0868\u0869\x07G\x02\x02\u0869\u01AE\x03\x02" + + "\x02\x02\u086A\u086B\x07O\x02\x02\u086B\u086C\x07Q\x02\x02\u086C\u086D" + + "\x07P\x02\x02\u086D\u086E\x07V\x02\x02\u086E\u086F\x07J\x02\x02\u086F" + + "\u0870\x07P\x02\x02\u0870\u0871\x07C\x02\x02\u0871\u0872\x07O\x02\x02" + + "\u0872\u0873\x07G\x02\x02\u0873\u01B0\x03\x02\x02\x02\u0874\u0875\x07" + + "P\x02\x02\u0875\u0876\x07Q\x02\x02\u0876\u0877\x07Y\x02\x02\u0877\u01B2" + + "\x03\x02\x02\x02\u0878\u0879\x07R\x02\x02\u0879\u087A\x07G\x02\x02\u087A" + + "\u087B\x07T\x02\x02\u087B\u087C\x07K\x02\x02\u087C\u087D\x07Q\x02\x02" + + "\u087D\u087E\x07F\x02\x02\u087E\u087F\x07a\x02\x02\u087F\u0880\x07C\x02" + + "\x02\u0880\u0881\x07F\x02\x02\u0881\u0882\x07F\x02\x02\u0882\u01B4\x03" + + "\x02\x02\x02\u0883\u0884\x07R\x02\x02\u0884\u0885\x07G\x02\x02\u0885\u0886" + + "\x07T\x02\x02\u0886\u0887\x07K\x02\x02\u0887\u0888\x07Q\x02\x02\u0888" + + "\u0889\x07F\x02\x02\u0889\u088A\x07a\x02\x02\u088A\u088B\x07F\x02\x02" + + "\u088B\u088C\x07K\x02\x02\u088C\u088D\x07H\x02\x02\u088D\u088E\x07H\x02" + + "\x02\u088E\u01B6\x03\x02\x02\x02\u088F\u0890\x07U\x02\x02\u0890\u0891" + + "\x07W\x02\x02\u0891\u0892\x07D\x02\x02\u0892\u0893\x07F\x02\x02\u0893" + + "\u0894\x07C\x02\x02\u0894\u0895\x07V\x02\x02\u0895\u0896\x07G\x02\x02" + + "\u0896\u01B8\x03\x02\x02\x02\u0897\u0898\x07U\x02\x02\u0898\u0899\x07" + + "[\x02\x02\u0899\u089A\x07U\x02\x02\u089A\u089B\x07F\x02\x02\u089B\u089C" + + "\x07C\x02\x02\u089C\u089D\x07V\x02\x02\u089D\u089E\x07G\x02\x02\u089E" + + "\u01BA\x03\x02\x02\x02\u089F\u08A0\x07V\x02\x02\u08A0\u08A1\x07K\x02\x02" + + "\u08A1\u08A2\x07O\x02\x02\u08A2\u08A3\x07G\x02\x02\u08A3\u01BC\x03\x02" + + "\x02\x02\u08A4\u08A5\x07V\x02\x02\u08A5\u08A6\x07K\x02\x02\u08A6\u08A7" + + "\x07O\x02\x02\u08A7\u08A8\x07G\x02\x02\u08A8\u08A9\x07a\x02\x02\u08A9" + + "\u08AA\x07V\x02\x02\u08AA\u08AB\x07Q\x02\x02\u08AB\u08AC\x07a\x02\x02" + + "\u08AC\u08AD\x07U\x02\x02\u08AD\u08AE\x07G\x02\x02\u08AE\u08AF\x07E\x02" + + "\x02\u08AF\u01BE\x03\x02\x02\x02\u08B0\u08B1\x07V\x02\x02\u08B1\u08B2" + + "\x07K\x02\x02\u08B2\u08B3\x07O\x02\x02\u08B3\u08B4\x07G\x02\x02\u08B4" + + "\u08B5\x07U\x02\x02\u08B5\u08B6\x07V\x02\x02\u08B6\u08B7\x07C\x02\x02" + + "\u08B7\u08B8\x07O\x02\x02\u08B8\u08B9\x07R\x02\x02\u08B9\u01C0\x03\x02" + + "\x02\x02\u08BA\u08BB\x07V\x02\x02\u08BB\u08BC\x07Q\x02\x02\u08BC\u08BD" + + "\x07a\x02\x02\u08BD\u08BE\x07F\x02\x02\u08BE\u08BF\x07C\x02\x02\u08BF" + + "\u08C0\x07[\x02\x02\u08C0\u08C1\x07U\x02\x02\u08C1\u01C2\x03\x02\x02\x02" + + "\u08C2\u08C3\x07W\x02\x02\u08C3\u08C4\x07V\x02\x02\u08C4\u08C5\x07E\x02" + + "\x02\u08C5\u08C6\x07a\x02\x02\u08C6\u08C7\x07F\x02\x02\u08C7\u08C8\x07" + + "C\x02\x02\u08C8\u08C9\x07V\x02\x02\u08C9\u08CA\x07G\x02\x02\u08CA\u01C4" + + "\x03\x02\x02\x02\u08CB\u08CC\x07W\x02\x02\u08CC\u08CD\x07V\x02\x02\u08CD" + + "\u08CE\x07E\x02\x02\u08CE\u08CF\x07a\x02\x02\u08CF\u08D0\x07V\x02\x02" + + "\u08D0\u08D1\x07K\x02\x02\u08D1\u08D2\x07O\x02\x02\u08D2\u08D3\x07G\x02" + + "\x02\u08D3\u01C6\x03\x02\x02\x02\u08D4\u08D5\x07W\x02\x02\u08D5\u08D6" + + "\x07V\x02\x02\u08D6\u08D7\x07E\x02\x02\u08D7\u08D8\x07a\x02\x02\u08D8" + + "\u08D9\x07V\x02\x02\u08D9\u08DA\x07K\x02\x02\u08DA\u08DB\x07O\x02\x02" + + "\u08DB\u08DC\x07G\x02\x02\u08DC\u08DD\x07U\x02\x02\u08DD\u08DE\x07V\x02" + + "\x02\u08DE\u08DF\x07C\x02\x02\u08DF\u08E0\x07O\x02\x02\u08E0\u08E1\x07" + + "R\x02\x02\u08E1\u01C8\x03\x02\x02\x02\u08E2\u08E3\x07W\x02\x02\u08E3\u08E4" + + "\x07P\x02\x02\u08E4\u08E5\x07K\x02\x02\u08E5\u08E6\x07Z\x02\x02\u08E6" + + "\u08E7\x07a\x02\x02\u08E7\u08E8\x07V\x02\x02\u08E8\u08E9\x07K\x02\x02" + + "\u08E9\u08EA\x07O\x02\x02\u08EA\u08EB\x07G\x02\x02\u08EB\u08EC\x07U\x02" + + "\x02\u08EC\u08ED\x07V\x02\x02\u08ED\u08EE\x07C\x02\x02\u08EE\u08EF\x07" + + "O\x02\x02\u08EF\u08F0\x07R\x02\x02\u08F0\u01CA\x03\x02\x02\x02\u08F1\u08F2" + + "\x07U\x02\x02\u08F2\u08F3\x07W\x02\x02\u08F3\u08F4\x07D\x02\x02\u08F4" + + "\u08F5\x07U\x02\x02\u08F5\u08F6\x07V\x02\x02\u08F6\u08F7\x07T\x02\x02" + + "\u08F7\u01CC\x03\x02\x02\x02\u08F8\u08F9\x07U\x02\x02\u08F9\u08FA\x07" + + "W\x02\x02\u08FA\u08FB\x07D\x02\x02\u08FB\u08FC\x07U\x02\x02\u08FC\u08FD" + + "\x07V\x02\x02\u08FD\u08FE\x07T\x02\x02\u08FE\u08FF\x07K\x02\x02\u08FF" + + "\u0900\x07P\x02\x02\u0900\u0901\x07I\x02\x02\u0901\u01CE\x03\x02\x02\x02" + + "\u0902\u0903\x07N\x02\x02\u0903\u0904\x07V\x02\x02\u0904\u0905\x07T\x02" + + "\x02\u0905\u0906\x07K\x02\x02\u0906\u0907\x07O\x02\x02\u0907\u01D0\x03" + + "\x02\x02\x02\u0908\u0909\x07T\x02\x02\u0909\u090A\x07V\x02\x02\u090A\u090B" + + "\x07T\x02\x02\u090B\u090C\x07K\x02\x02\u090C\u090D\x07O\x02\x02\u090D" + + "\u01D2\x03\x02\x02\x02\u090E\u090F\x07V\x02\x02\u090F\u0910\x07T\x02\x02" + + "\u0910\u0911\x07K\x02\x02\u0911\u0912\x07O\x02\x02\u0912\u01D4\x03\x02" + + "\x02\x02\u0913\u0914\x07V\x02\x02\u0914\u0915\x07Q\x02\x02\u0915\u01D6" + + "\x03\x02\x02\x02\u0916\u0917\x07N\x02\x02\u0917\u0918\x07Q\x02\x02\u0918" + + "\u0919\x07Y\x02\x02\u0919\u091A\x07G\x02\x02\u091A\u091B\x07T\x02\x02" + + "\u091B\u01D8\x03\x02\x02\x02\u091C\u091D\x07W\x02\x02\u091D\u091E\x07" + + "R\x02\x02\u091E\u091F\x07R\x02\x02\u091F\u0920\x07G\x02\x02\u0920\u0921" + + "\x07T\x02\x02\u0921\u01DA\x03\x02\x02\x02\u0922\u0923\x07E\x02\x02\u0923" + + "\u0924\x07Q\x02\x02\u0924\u0925\x07P\x02\x02\u0925\u0926\x07E\x02\x02" + + "\u0926\u0927\x07C\x02\x02\u0927\u0928\x07V\x02\x02\u0928\u01DC\x03\x02" + + "\x02\x02\u0929\u092A\x07E\x02\x02\u092A\u092B\x07Q\x02\x02\u092B\u092C" + + "\x07P\x02\x02\u092C\u092D\x07E\x02\x02\u092D\u092E\x07C\x02\x02\u092E" + + "\u092F\x07V\x02\x02\u092F\u0930\x07a\x02\x02\u0930\u0931\x07Y\x02\x02" + + "\u0931\u0932\x07U\x02\x02\u0932\u01DE\x03\x02\x02\x02\u0933\u0934\x07" + + "N\x02\x02\u0934\u0935\x07G\x02\x02\u0935\u0936\x07P\x02\x02\u0936\u0937" + + "\x07I\x02\x02\u0937\u0938\x07V\x02\x02\u0938\u0939\x07J\x02\x02\u0939" + + "\u01E0\x03\x02\x02\x02\u093A\u093B\x07U\x02\x02\u093B\u093C\x07V\x02\x02" + + "\u093C\u093D\x07T\x02\x02\u093D\u093E\x07E\x02\x02\u093E\u093F\x07O\x02" + + "\x02\u093F\u0940\x07R\x02\x02\u0940\u01E2\x03\x02\x02\x02\u0941\u0942" + + "\x07T\x02\x02\u0942\u0943\x07K\x02\x02\u0943\u0944\x07I\x02\x02\u0944" + + "\u0945\x07J\x02\x02\u0945\u0946\x07V\x02\x02\u0946\u01E4\x03\x02\x02\x02" + + "\u0947\u0948\x07N\x02\x02\u0948\u0949\x07G\x02\x02\u0949\u094A\x07H\x02" + + "\x02\u094A\u094B\x07V\x02\x02\u094B\u01E6\x03\x02\x02\x02\u094C\u094D" + + "\x07C\x02\x02\u094D\u094E\x07U\x02\x02\u094E\u094F\x07E\x02\x02\u094F" + + "\u0950\x07K\x02\x02\u0950\u0951\x07K\x02\x02\u0951\u01E8\x03\x02\x02\x02" + + "\u0952\u0953\x07N\x02\x02\u0953\u0954\x07Q\x02\x02\u0954\u0955\x07E\x02" + + "\x02\u0955\u0956\x07C\x02\x02\u0956\u0957\x07V\x02\x02\u0957\u0958\x07" + + "G\x02\x02\u0958\u01EA\x03\x02\x02\x02\u0959\u095A\x07T\x02\x02\u095A\u095B" + + "\x07G\x02\x02\u095B\u095C\x07R\x02\x02\u095C\u095D\x07N\x02\x02\u095D" + + "\u095E\x07C\x02\x02\u095E\u095F\x07E\x02\x02\u095F\u0960\x07G\x02\x02" + + "\u0960\u01EC\x03\x02\x02\x02\u0961\u0962\x07E\x02\x02\u0962\u0963\x07" + + "C\x02\x02\u0963\u0964\x07U\x02\x02\u0964\u0965\x07V\x02\x02\u0965\u01EE" + + "\x03\x02\x02\x02\u0966\u0967\x07N\x02\x02\u0967\u0968\x07K\x02\x02\u0968" + + "\u0969\x07M\x02\x02\u0969\u096A\x07G\x02\x02\u096A\u01F0\x03\x02\x02\x02" + + "\u096B\u096C\x07K\x02\x02\u096C\u096D\x07U\x02\x02\u096D\u096E\x07P\x02" + + "\x02\u096E\u096F\x07W\x02\x02\u096F\u0970\x07N\x02\x02\u0970\u0971\x07" + + "N\x02\x02\u0971\u01F2\x03\x02\x02\x02\u0972\u0973\x07K\x02\x02\u0973\u0974" + + "\x07U\x02\x02\u0974\u0975\x07P\x02\x02\u0975\u0976\x07Q\x02\x02\u0976" + + "\u0977\x07V\x02\x02\u0977\u0978\x07P\x02\x02\u0978\u0979\x07W\x02\x02" + + "\u0979\u097A\x07N\x02\x02\u097A\u097B\x07N\x02\x02\u097B\u01F4\x03\x02" + + "\x02\x02\u097C\u097D\x07K\x02\x02\u097D\u097E\x07H\x02\x02\u097E\u097F" + + "\x07P\x02\x02\u097F\u0980\x07W\x02\x02\u0980\u0981\x07N\x02\x02\u0981" + + "\u0982\x07N\x02\x02\u0982\u01F6\x03\x02\x02\x02\u0983\u0984\x07P\x02\x02" + + "\u0984\u0985\x07W\x02\x02\u0985\u0986\x07N\x02\x02\u0986\u0987\x07N\x02" + + "\x02\u0987\u0988\x07K\x02\x02\u0988\u0989\x07H\x02\x02\u0989\u01F8\x03" + + "\x02\x02\x02\u098A\u098B\x07K\x02\x02\u098B\u098C\x07H\x02\x02\u098C\u01FA" + + "\x03\x02\x02\x02\u098D\u098E\x07V\x02\x02\u098E\u098F\x07[\x02\x02\u098F" + + "\u0990\x07R\x02\x02\u0990\u0991\x07G\x02\x02\u0991\u0992\x07Q\x02\x02" + + "\u0992\u0993\x07H\x02\x02\u0993\u01FC\x03\x02\x02\x02\u0994\u0995\x07" + + "O\x02\x02\u0995\u0996\x07C\x02\x02\u0996\u0997\x07V\x02\x02\u0997\u0998" + + "\x07E\x02\x02\u0998\u0999\x07J\x02\x02\u0999\u01FE\x03\x02\x02\x02\u099A" + + "\u099B\x07O\x02\x02\u099B\u099C\x07C\x02\x02\u099C\u099D\x07V\x02\x02" + + "\u099D\u099E\x07E\x02\x02\u099E\u099F\x07J\x02\x02\u099F\u09A0\x07a\x02" + + "\x02\u09A0\u09A1\x07R\x02\x02\u09A1\u09A2\x07J\x02\x02\u09A2\u09A3\x07" + + "T\x02\x02\u09A3\u09A4\x07C\x02\x02\u09A4\u09A5\x07U\x02\x02\u09A5\u09A6" + + "\x07G\x02\x02\u09A6\u0200\x03\x02\x02\x02\u09A7\u09A8\x07O\x02\x02\u09A8" + + "\u09A9\x07C\x02\x02\u09A9\u09AA\x07V\x02\x02\u09AA\u09AB\x07E\x02\x02" + + "\u09AB\u09AC\x07J\x02\x02\u09AC\u09AD\x07a\x02\x02\u09AD\u09AE\x07R\x02" + + "\x02\u09AE\u09AF\x07J\x02\x02\u09AF\u09B0\x07T\x02\x02\u09B0\u09B1\x07" + + "C\x02\x02\u09B1\u09B2\x07U\x02\x02\u09B2\u09B3\x07G\x02\x02\u09B3\u09B4" + + "\x07a\x02\x02\u09B4\u09B5\x07R\x02\x02\u09B5\u09B6\x07T\x02\x02\u09B6" + + "\u09B7\x07G\x02\x02\u09B7\u09B8\x07H\x02\x02\u09B8\u09B9\x07K\x02\x02" + + "\u09B9\u09BA\x07Z\x02\x02\u09BA\u0202\x03\x02\x02\x02\u09BB\u09BC\x07" + + "O\x02\x02\u09BC\u09BD\x07C\x02\x02\u09BD\u09BE\x07V\x02\x02\u09BE\u09BF" + + "\x07E\x02\x02\u09BF\u09C0\x07J\x02\x02\u09C0\u09C1\x07a\x02\x02\u09C1" + + "\u09C2\x07D\x02\x02\u09C2\u09C3\x07Q\x02\x02\u09C3\u09C4\x07Q\x02\x02" + + "\u09C4\u09C5\x07N\x02\x02\u09C5\u09C6\x07a\x02\x02\u09C6\u09C7\x07R\x02" + + "\x02\u09C7\u09C8\x07T\x02\x02\u09C8\u09C9\x07G\x02\x02\u09C9\u09CA\x07" + + "H\x02\x02\u09CA\u09CB\x07K\x02\x02\u09CB\u09CC\x07Z\x02\x02\u09CC\u0204" + + "\x03\x02\x02\x02\u09CD\u09CE\x07U\x02\x02\u09CE\u09CF\x07K\x02\x02\u09CF" + + "\u09D0\x07O\x02\x02\u09D0\u09D1\x07R\x02\x02\u09D1\u09D2\x07N\x02\x02" + + "\u09D2\u09D3\x07G\x02\x02\u09D3\u09D4\x07a\x02\x02\u09D4\u09D5\x07S\x02" + + "\x02\u09D5\u09D6\x07W\x02\x02\u09D6\u09D7\x07G\x02\x02\u09D7\u09D8\x07" + + "T\x02\x02\u09D8\u09D9\x07[\x02\x02\u09D9\u09DA\x07a\x02\x02\u09DA\u09DB" + + "\x07U\x02\x02\u09DB\u09DC\x07V\x02\x02\u09DC\u09DD\x07T\x02\x02\u09DD" + + "\u09DE\x07K\x02\x02\u09DE\u09DF\x07P\x02\x02\u09DF\u09E0\x07I\x02\x02" + + "\u09E0\u0206\x03\x02\x02\x02\u09E1\u09E2\x07O\x02\x02\u09E2\u09E3\x07" + + "W\x02\x02\u09E3\u09E4\x07N\x02\x02\u09E4\u09E5\x07V\x02\x02\u09E5\u09E6" + + "\x07K\x02\x02\u09E6\u09E7\x07a\x02\x02\u09E7\u09E8\x07O\x02\x02\u09E8" + + "\u09E9\x07C\x02\x02\u09E9\u09EA\x07V\x02\x02\u09EA\u09EB\x07E\x02\x02" + + "\u09EB\u09EC\x07J\x02\x02\u09EC\u0208\x03\x02\x02\x02\u09ED\u09EE\x07" + + "S\x02\x02\u09EE\u09EF\x07W\x02\x02\u09EF\u09F0\x07G\x02\x02\u09F0\u09F1" + + "\x07T\x02\x02\u09F1\u09F2\x07[\x02\x02\u09F2\u09F3\x07a\x02\x02\u09F3" + + "\u09F4\x07U\x02\x02\u09F4\u09F5\x07V\x02\x02\u09F5\u09F6\x07T\x02\x02" + + "\u09F6\u09F7\x07K\x02\x02\u09F7\u09F8\x07P\x02\x02\u09F8\u09F9\x07I\x02" + + "\x02\u09F9\u020A\x03\x02\x02\x02\u09FA\u09FB\x07C\x02\x02\u09FB\u09FC" + + "\x07N\x02\x02\u09FC\u09FD\x07N\x02\x02\u09FD\u09FE\x07Q\x02\x02\u09FE" + + "\u09FF\x07Y\x02\x02\u09FF\u0A00\x07a\x02\x02\u0A00\u0A01\x07N\x02\x02" + + "\u0A01\u0A02\x07G\x02\x02\u0A02\u0A03\x07C\x02\x02\u0A03\u0A04\x07F\x02" + + "\x02\u0A04\u0A05\x07K\x02\x02\u0A05\u0A06\x07P\x02\x02\u0A06\u0A07\x07" + + "I\x02\x02\u0A07\u0A08\x07a\x02\x02\u0A08\u0A09\x07Y\x02\x02\u0A09\u0A0A" + + "\x07K\x02\x02\u0A0A\u0A0B\x07N\x02\x02\u0A0B\u0A0C\x07F\x02\x02\u0A0C" + + "\u0A0D\x07E\x02\x02\u0A0D\u0A0E\x07C\x02\x02\u0A0E\u0A0F\x07T\x02\x02" + + "\u0A0F\u0A10\x07F\x02\x02\u0A10\u020C\x03\x02\x02\x02\u0A11\u0A12\x07" + + "C\x02\x02\u0A12\u0A13\x07P\x02\x02\u0A13\u0A14\x07C\x02\x02\u0A14\u0A15" + + "\x07N\x02\x02\u0A15\u0A16\x07[\x02\x02\u0A16\u0A17\x07\\\x02\x02\u0A17" + + "\u0A18\x07G\x02\x02\u0A18\u0A19\x07a\x02\x02\u0A19\u0A1A\x07Y\x02\x02" + + "\u0A1A\u0A1B\x07K\x02\x02\u0A1B\u0A1C\x07N\x02\x02\u0A1C\u0A1D\x07F\x02" + + "\x02\u0A1D\u0A1E\x07E\x02\x02\u0A1E\u0A1F\x07C\x02\x02\u0A1F\u0A20\x07" + + "T\x02\x02\u0A20\u0A21\x07F\x02\x02\u0A21\u020E\x03\x02\x02\x02\u0A22\u0A23" + + "\x07C\x02\x02\u0A23\u0A24\x07P\x02\x02\u0A24\u0A25\x07C\x02\x02\u0A25" + + "\u0A26\x07N\x02\x02\u0A26\u0A27\x07[\x02\x02\u0A27\u0A28\x07\\\x02\x02" + + "\u0A28\u0A29\x07G\x02\x02\u0A29\u0A2A\x07T\x02\x02\u0A2A\u0210\x03\x02" + + "\x02\x02\u0A2B\u0A2C\x07C\x02\x02\u0A2C\u0A2D\x07W\x02\x02\u0A2D\u0A2E" + + "\x07V\x02\x02\u0A2E\u0A2F\x07Q\x02\x02\u0A2F\u0A30\x07a\x02\x02\u0A30" + + "\u0A31\x07I\x02\x02\u0A31\u0A32\x07G\x02\x02\u0A32\u0A33\x07P\x02\x02" + + "\u0A33\u0A34\x07G\x02\x02\u0A34\u0A35\x07T\x02\x02\u0A35\u0A36\x07C\x02" + + "\x02\u0A36\u0A37\x07V\x02\x02\u0A37\u0A38\x07G\x02\x02\u0A38\u0A39\x07" + + "a\x02\x02\u0A39\u0A3A\x07U\x02\x02\u0A3A\u0A3B\x07[\x02\x02\u0A3B\u0A3C" + + "\x07P\x02\x02\u0A3C\u0A3D\x07Q\x02\x02\u0A3D\u0A3E\x07P\x02\x02\u0A3E" + + "\u0A3F\x07[\x02\x02\u0A3F\u0A40\x07O\x02\x02\u0A40\u0A41\x07U\x02\x02" + + "\u0A41\u0A42\x07a\x02\x02\u0A42\u0A43\x07R\x02\x02\u0A43\u0A44\x07J\x02" + + "\x02\u0A44\u0A45\x07T\x02\x02\u0A45\u0A46\x07C\x02\x02\u0A46\u0A47\x07" + + "U\x02\x02\u0A47\u0A48\x07G\x02\x02\u0A48\u0A49\x07a\x02\x02\u0A49\u0A4A" + + "\x07S\x02\x02\u0A4A\u0A4B\x07W\x02\x02\u0A4B\u0A4C\x07G\x02\x02\u0A4C" + + "\u0A4D\x07T\x02\x02\u0A4D\u0A4E\x07[\x02\x02\u0A4E\u0212\x03\x02\x02\x02" + + "\u0A4F\u0A50\x07D\x02\x02\u0A50\u0A51\x07Q\x02\x02\u0A51\u0A52\x07Q\x02" + + "\x02\u0A52\u0A53\x07U\x02\x02\u0A53\u0A54\x07V\x02\x02\u0A54\u0214\x03" + + "\x02\x02\x02\u0A55\u0A56\x07E\x02\x02\u0A56\u0A57\x07W\x02\x02\u0A57\u0A58" + + "\x07V\x02\x02\u0A58\u0A59\x07Q\x02\x02\u0A59\u0A5A\x07H\x02\x02\u0A5A" + + "\u0A5B\x07H\x02\x02\u0A5B\u0A5C\x07a\x02\x02\u0A5C\u0A5D\x07H\x02\x02" + + "\u0A5D\u0A5E\x07T\x02\x02\u0A5E\u0A5F\x07G\x02\x02\u0A5F\u0A60\x07S\x02" + + "\x02\u0A60\u0A61\x07W\x02\x02\u0A61\u0A62\x07G\x02\x02\u0A62\u0A63\x07" + + "P\x02\x02\u0A63\u0A64\x07E\x02\x02\u0A64\u0A65\x07[\x02\x02\u0A65\u0216" + + "\x03\x02\x02\x02\u0A66\u0A67\x07F\x02\x02\u0A67\u0A68\x07G\x02\x02\u0A68" + + "\u0A69\x07H\x02\x02\u0A69\u0A6A\x07C\x02\x02\u0A6A\u0A6B\x07W\x02\x02" + + "\u0A6B\u0A6C\x07N\x02\x02\u0A6C\u0A6D\x07V\x02\x02\u0A6D\u0A6E\x07a\x02" + + "\x02\u0A6E\u0A6F\x07H\x02\x02\u0A6F\u0A70\x07K\x02\x02\u0A70\u0A71\x07" + + "G\x02\x02\u0A71\u0A72\x07N\x02\x02\u0A72\u0A73\x07F\x02\x02\u0A73\u0218" + + "\x03\x02\x02\x02\u0A74\u0A75\x07F\x02\x02\u0A75\u0A76\x07G\x02\x02\u0A76" + + "\u0A77\x07H\x02\x02\u0A77\u0A78\x07C\x02\x02\u0A78\u0A79\x07W\x02\x02" + + "\u0A79\u0A7A\x07N\x02\x02\u0A7A\u0A7B\x07V\x02\x02\u0A7B\u0A7C\x07a\x02" + + "\x02\u0A7C\u0A7D\x07Q\x02\x02\u0A7D\u0A7E\x07R\x02\x02\u0A7E\u0A7F\x07" + + "G\x02\x02\u0A7F\u0A80\x07T\x02\x02\u0A80\u0A81\x07C\x02\x02\u0A81\u0A82" + + "\x07V\x02\x02\u0A82\u0A83\x07Q\x02\x02\u0A83\u0A84\x07T\x02\x02\u0A84" + + "\u021A\x03\x02\x02\x02\u0A85\u0A86\x07G\x02\x02\u0A86\u0A87\x07P\x02\x02" + + "\u0A87\u0A88\x07C\x02\x02\u0A88\u0A89\x07D\x02\x02\u0A89\u0A8A\x07N\x02" + + "\x02\u0A8A\u0A8B\x07G\x02\x02\u0A8B\u0A8C\x07a\x02\x02\u0A8C\u0A8D\x07" + + "R\x02\x02\u0A8D\u0A8E\x07Q\x02\x02\u0A8E\u0A8F\x07U\x02\x02\u0A8F\u0A90" + + "\x07K\x02\x02\u0A90\u0A91\x07V\x02\x02\u0A91\u0A92\x07K\x02\x02\u0A92" + + "\u0A93\x07Q\x02\x02\u0A93\u0A94\x07P\x02\x02\u0A94\u0A95\x07a\x02\x02" + + "\u0A95\u0A96\x07K\x02\x02\u0A96\u0A97\x07P\x02\x02\u0A97\u0A98\x07E\x02" + + "\x02\u0A98\u0A99\x07T\x02\x02\u0A99\u0A9A\x07G\x02\x02\u0A9A\u0A9B\x07" + + "O\x02\x02\u0A9B\u0A9C\x07G\x02\x02\u0A9C\u0A9D\x07P\x02\x02\u0A9D\u0A9E" + + "\x07V\x02\x02\u0A9E\u0A9F\x07U\x02\x02\u0A9F\u021C\x03\x02\x02\x02\u0AA0" + + "\u0AA1\x07G\x02\x02\u0AA1\u0AA2\x07U\x02\x02\u0AA2\u0AA3\x07E\x02\x02" + + "\u0AA3\u0AA4\x07C\x02\x02\u0AA4\u0AA5\x07R\x02\x02\u0AA5\u0AA6\x07G\x02" + + "\x02\u0AA6\u021E\x03\x02\x02\x02\u0AA7\u0AA8\x07H\x02\x02\u0AA8\u0AA9" + + "\x07N\x02\x02\u0AA9\u0AAA\x07C\x02\x02\u0AAA\u0AAB\x07I\x02\x02\u0AAB" + + "\u0AAC\x07U\x02\x02\u0AAC\u0220\x03\x02\x02\x02\u0AAD\u0AAE\x07H\x02\x02" + + "\u0AAE\u0AAF\x07W\x02\x02\u0AAF\u0AB0\x07\\\x02\x02\u0AB0\u0AB1\x07\\" + + "\x02\x02\u0AB1\u0AB2\x07[\x02\x02\u0AB2\u0AB3\x07a\x02\x02\u0AB3\u0AB4" + + "\x07O\x02\x02\u0AB4\u0AB5\x07C\x02\x02\u0AB5\u0AB6\x07Z\x02\x02\u0AB6" + + "\u0AB7\x07a\x02\x02\u0AB7\u0AB8\x07G\x02\x02\u0AB8\u0AB9\x07Z\x02\x02" + + "\u0AB9\u0ABA\x07R\x02\x02\u0ABA\u0ABB\x07C\x02\x02\u0ABB\u0ABC\x07P\x02" + + "\x02\u0ABC\u0ABD\x07U\x02\x02\u0ABD\u0ABE\x07K\x02\x02\u0ABE\u0ABF\x07" + + "Q\x02\x02\u0ABF\u0AC0\x07P\x02\x02\u0AC0\u0AC1\x07U\x02\x02\u0AC1\u0222" + + "\x03\x02\x02\x02\u0AC2\u0AC3\x07H\x02\x02\u0AC3\u0AC4\x07W\x02\x02\u0AC4" + + "\u0AC5\x07\\\x02\x02\u0AC5\u0AC6\x07\\\x02\x02\u0AC6\u0AC7\x07[\x02\x02" + + "\u0AC7\u0AC8\x07a\x02\x02\u0AC8\u0AC9\x07R\x02\x02\u0AC9\u0ACA\x07T\x02" + + "\x02\u0ACA\u0ACB\x07G\x02\x02\u0ACB\u0ACC\x07H\x02\x02\u0ACC\u0ACD\x07" + + "K\x02\x02\u0ACD\u0ACE\x07Z\x02\x02\u0ACE\u0ACF\x07a\x02\x02\u0ACF\u0AD0" + + "\x07N\x02\x02\u0AD0\u0AD1\x07G\x02\x02\u0AD1\u0AD2\x07P\x02\x02\u0AD2" + + "\u0AD3\x07I\x02\x02\u0AD3\u0AD4\x07V\x02\x02\u0AD4\u0AD5\x07J\x02\x02" + + "\u0AD5\u0224\x03\x02\x02\x02\u0AD6\u0AD7\x07H\x02\x02\u0AD7\u0AD8\x07" + + "W\x02\x02\u0AD8\u0AD9\x07\\\x02\x02\u0AD9\u0ADA\x07\\\x02\x02\u0ADA\u0ADB" + + "\x07[\x02\x02\u0ADB\u0ADC\x07a\x02\x02\u0ADC\u0ADD\x07V\x02\x02\u0ADD" + + "\u0ADE\x07T\x02\x02\u0ADE\u0ADF\x07C\x02\x02\u0ADF\u0AE0\x07P\x02\x02" + + "\u0AE0\u0AE1\x07U\x02\x02\u0AE1\u0AE2\x07R\x02\x02\u0AE2\u0AE3\x07Q\x02" + + "\x02\u0AE3\u0AE4\x07U\x02\x02\u0AE4\u0AE5\x07K\x02\x02\u0AE5\u0AE6\x07" + + "V\x02\x02\u0AE6\u0AE7\x07K\x02\x02\u0AE7\u0AE8\x07Q\x02\x02\u0AE8\u0AE9" + + "\x07P\x02\x02\u0AE9\u0AEA\x07U\x02\x02\u0AEA\u0226\x03\x02\x02\x02\u0AEB" + + "\u0AEC\x07H\x02\x02\u0AEC\u0AED\x07W\x02\x02\u0AED\u0AEE\x07\\\x02\x02" + + "\u0AEE\u0AEF\x07\\\x02\x02\u0AEF\u0AF0\x07[\x02\x02\u0AF0\u0AF1\x07a\x02" + + "\x02\u0AF1\u0AF2\x07T\x02\x02\u0AF2\u0AF3\x07G\x02\x02\u0AF3\u0AF4\x07" + + "Y\x02\x02\u0AF4\u0AF5\x07T\x02\x02\u0AF5\u0AF6\x07K\x02\x02\u0AF6\u0AF7" + + "\x07V\x02\x02\u0AF7\u0AF8\x07G\x02\x02\u0AF8\u0228\x03\x02\x02\x02\u0AF9" + + "\u0AFA\x07H\x02\x02\u0AFA\u0AFB\x07W\x02\x02\u0AFB\u0AFC\x07\\\x02\x02" + + "\u0AFC\u0AFD\x07\\\x02\x02\u0AFD\u0AFE\x07K\x02\x02\u0AFE\u0AFF\x07P\x02" + + "\x02\u0AFF\u0B00\x07G\x02\x02\u0B00\u0B01\x07U\x02\x02\u0B01\u0B02\x07" + + "U\x02\x02\u0B02\u022A\x03\x02\x02\x02\u0B03\u0B04\x07N\x02\x02\u0B04\u0B05" + + "\x07G\x02\x02\u0B05\u0B06\x07P\x02\x02\u0B06\u0B07\x07K\x02\x02\u0B07" + + "\u0B08\x07G\x02\x02\u0B08\u0B09\x07P\x02\x02\u0B09\u0B0A\x07V\x02\x02" + + "\u0B0A\u022C\x03\x02\x02\x02\u0B0B\u0B0C\x07N\x02\x02\u0B0C\u0B0D\x07" + + "Q\x02\x02\u0B0D\u0B0E\x07Y\x02\x02\u0B0E\u0B0F\x07a\x02\x02\u0B0F\u0B10" + + "\x07H\x02\x02\u0B10\u0B11\x07T\x02\x02\u0B11\u0B12\x07G\x02\x02\u0B12" + + "\u0B13\x07S\x02\x02\u0B13\u0B14\x07a\x02\x02\u0B14\u0B15\x07Q\x02\x02" + + "\u0B15\u0B16\x07R\x02\x02\u0B16\u0B17\x07G\x02\x02\u0B17\u0B18\x07T\x02" + + "\x02\u0B18\u0B19\x07C\x02\x02\u0B19\u0B1A\x07V\x02\x02\u0B1A\u0B1B\x07" + + "Q\x02\x02\u0B1B\u0B1C\x07T\x02\x02\u0B1C\u022E\x03\x02\x02\x02\u0B1D\u0B1E" + + "\x07O\x02\x02\u0B1E\u0B1F\x07C\x02\x02\u0B1F\u0B20\x07Z\x02\x02\u0B20" + + "\u0B21\x07a\x02\x02\u0B21\u0B22\x07F\x02\x02\u0B22\u0B23\x07G\x02\x02" + + "\u0B23\u0B24\x07V\x02\x02\u0B24\u0B25\x07G\x02\x02\u0B25\u0B26\x07T\x02" + + "\x02\u0B26\u0B27\x07O\x02\x02\u0B27\u0B28\x07K\x02\x02\u0B28\u0B29\x07" + + "P\x02\x02\u0B29\u0B2A\x07K\x02\x02\u0B2A\u0B2B\x07\\\x02\x02\u0B2B\u0B2C" + + "\x07G\x02\x02\u0B2C\u0B2D\x07F\x02\x02\u0B2D\u0B2E\x07a\x02\x02\u0B2E" + + "\u0B2F\x07U\x02\x02\u0B2F\u0B30\x07V\x02\x02\u0B30\u0B31\x07C\x02\x02" + + "\u0B31\u0B32\x07V\x02\x02\u0B32\u0B33\x07G\x02\x02\u0B33\u0B34\x07U\x02" + + "\x02\u0B34\u0230\x03\x02\x02\x02\u0B35\u0B36\x07O\x02\x02\u0B36\u0B37" + + "\x07C\x02\x02\u0B37\u0B38\x07Z\x02\x02\u0B38\u0B39\x07a\x02\x02\u0B39" + + "\u0B3A\x07G\x02\x02\u0B3A\u0B3B\x07Z\x02\x02\u0B3B\u0B3C\x07R\x02\x02" + + "\u0B3C\u0B3D\x07C\x02\x02\u0B3D\u0B3E\x07P\x02\x02\u0B3E\u0B3F\x07U\x02" + + "\x02\u0B3F\u0B40\x07K\x02\x02\u0B40\u0B41\x07Q\x02\x02\u0B41\u0B42\x07" + + "P\x02\x02\u0B42\u0B43\x07U\x02\x02\u0B43\u0232\x03\x02\x02\x02\u0B44\u0B45" + + "\x07O\x02\x02\u0B45\u0B46\x07K\x02\x02\u0B46\u0B47\x07P\x02\x02\u0B47" + + "\u0B48\x07K\x02\x02\u0B48\u0B49\x07O\x02\x02\u0B49\u0B4A\x07W\x02\x02" + + "\u0B4A\u0B4B\x07O\x02\x02\u0B4B\u0B4C\x07a\x02\x02\u0B4C\u0B4D\x07U\x02" + + "\x02\u0B4D\u0B4E\x07J\x02\x02\u0B4E\u0B4F\x07Q\x02\x02\u0B4F\u0B50\x07" + + "W\x02\x02\u0B50\u0B51\x07N\x02\x02\u0B51\u0B52\x07F\x02\x02\u0B52\u0B53" + + "\x07a\x02\x02\u0B53\u0B54\x07O\x02\x02\u0B54\u0B55\x07C\x02\x02\u0B55" + + "\u0B56\x07V\x02\x02\u0B56\u0B57\x07E\x02\x02\u0B57\u0B58\x07J\x02\x02" + + "\u0B58\u0234\x03\x02\x02\x02\u0B59\u0B5A\x07Q\x02\x02\u0B5A\u0B5B\x07" + + "R\x02\x02\u0B5B\u0B5C\x07G\x02\x02\u0B5C\u0B5D\x07T\x02\x02\u0B5D\u0B5E" + + "\x07C\x02\x02\u0B5E\u0B5F\x07V\x02\x02\u0B5F\u0B60\x07Q\x02\x02\u0B60" + + "\u0B61\x07T\x02\x02\u0B61\u0236\x03\x02\x02\x02\u0B62\u0B63\x07R\x02\x02" + + "\u0B63\u0B64\x07J\x02\x02\u0B64\u0B65\x07T\x02\x02\u0B65\u0B66\x07C\x02" + + "\x02\u0B66\u0B67\x07U\x02\x02\u0B67\u0B68\x07G\x02\x02\u0B68\u0B69\x07" + + "a\x02\x02\u0B69\u0B6A\x07U\x02\x02\u0B6A\u0B6B\x07N\x02\x02\u0B6B\u0B6C" + + "\x07Q\x02\x02\u0B6C\u0B6D\x07R\x02\x02\u0B6D\u0238\x03\x02\x02\x02\u0B6E" + + "\u0B6F\x07R\x02\x02\u0B6F\u0B70\x07T\x02\x02\u0B70\u0B71\x07G\x02\x02" + + "\u0B71\u0B72\x07H\x02\x02\u0B72\u0B73\x07K\x02\x02\u0B73\u0B74\x07Z\x02" + + "\x02\u0B74\u0B75\x07a\x02\x02\u0B75\u0B76\x07N\x02\x02\u0B76\u0B77\x07" + + "G\x02\x02\u0B77\u0B78\x07P\x02\x02\u0B78\u0B79\x07I\x02\x02\u0B79\u0B7A" + + "\x07V\x02\x02\u0B7A\u0B7B\x07J\x02\x02\u0B7B\u023A\x03\x02\x02\x02\u0B7C" + + "\u0B7D\x07S\x02\x02\u0B7D\u0B7E\x07W\x02\x02\u0B7E\u0B7F\x07Q\x02\x02" + + "\u0B7F\u0B80\x07V\x02\x02\u0B80\u0B81\x07G\x02\x02\u0B81\u0B82\x07a\x02" + + "\x02\u0B82\u0B83\x07C\x02\x02\u0B83\u0B84\x07P\x02\x02\u0B84\u0B85\x07" + + "C\x02\x02\u0B85\u0B86\x07N\x02\x02\u0B86\u0B87\x07[\x02\x02\u0B87\u0B88" + + "\x07\\\x02\x02\u0B88\u0B89\x07G\x02\x02\u0B89\u0B8A\x07T\x02\x02\u0B8A" + + "\u023C\x03\x02\x02\x02\u0B8B\u0B8C\x07S\x02\x02\u0B8C\u0B8D\x07W\x02\x02" + + "\u0B8D\u0B8E\x07Q\x02\x02\u0B8E\u0B8F\x07V\x02\x02\u0B8F"; + private static readonly _serializedATNSegment5: string = + "\u0B90\x07G\x02\x02\u0B90\u0B91\x07a\x02\x02\u0B91\u0B92\x07H\x02\x02" + + "\u0B92\u0B93\x07K\x02\x02\u0B93\u0B94\x07G\x02\x02\u0B94\u0B95\x07N\x02" + + "\x02\u0B95\u0B96\x07F\x02\x02\u0B96\u0B97\x07a\x02\x02\u0B97\u0B98\x07" + + "U\x02\x02\u0B98\u0B99\x07W\x02\x02\u0B99\u0B9A\x07H\x02\x02\u0B9A\u0B9B" + + "\x07H\x02\x02\u0B9B\u0B9C\x07K\x02\x02\u0B9C\u0B9D\x07Z\x02\x02\u0B9D" + + "\u023E\x03\x02\x02\x02\u0B9E\u0B9F\x07T\x02\x02\u0B9F\u0BA0\x07G\x02\x02" + + "\u0BA0\u0BA1\x07Y\x02\x02\u0BA1\u0BA2\x07T\x02\x02\u0BA2\u0BA3\x07K\x02" + + "\x02\u0BA3\u0BA4\x07V\x02\x02\u0BA4\u0BA5\x07G\x02\x02\u0BA5\u0240\x03" + + "\x02\x02\x02\u0BA6\u0BA7\x07U\x02\x02\u0BA7\u0BA8\x07N\x02\x02\u0BA8\u0BA9" + + "\x07Q\x02\x02\u0BA9\u0BAA\x07R\x02\x02\u0BAA\u0242\x03\x02\x02\x02\u0BAB" + + "\u0BAC\x07V\x02\x02\u0BAC\u0BAD\x07K\x02\x02\u0BAD\u0BAE\x07G\x02\x02" + + "\u0BAE\u0BAF\x07a\x02\x02\u0BAF\u0BB0\x07D\x02\x02\u0BB0\u0BB1\x07T\x02" + + "\x02\u0BB1\u0BB2\x07G\x02\x02\u0BB2\u0BB3\x07C\x02\x02\u0BB3\u0BB4\x07" + + "M\x02\x02\u0BB4\u0BB5\x07G\x02\x02\u0BB5\u0BB6\x07T\x02\x02\u0BB6\u0244" + + "\x03\x02\x02\x02\u0BB7\u0BB8\x07V\x02\x02\u0BB8\u0BB9\x07[\x02\x02\u0BB9" + + "\u0BBA\x07R\x02\x02\u0BBA\u0BBB\x07G\x02\x02\u0BBB\u0246\x03\x02\x02\x02" + + "\u0BBC\u0BBD\x07\\\x02\x02\u0BBD\u0BBE\x07G\x02\x02\u0BBE\u0BBF\x07T\x02" + + "\x02\u0BBF\u0BC0\x07Q\x02\x02\u0BC0\u0BC1\x07a\x02\x02\u0BC1\u0BC2\x07" + + "V\x02\x02\u0BC2\u0BC3\x07G\x02\x02\u0BC3\u0BC4\x07T\x02\x02\u0BC4\u0BC5" + + "\x07O\x02\x02\u0BC5\u0BC6\x07U\x02\x02\u0BC6\u0BC7\x07a\x02\x02\u0BC7" + + "\u0BC8\x07S\x02\x02\u0BC8\u0BC9\x07W\x02\x02\u0BC9\u0BCA\x07G\x02\x02" + + "\u0BCA\u0BCB\x07T\x02\x02\u0BCB\u0BCC\x07[\x02\x02\u0BCC\u0248\x03\x02" + + "\x02\x02\u0BCD\u0BCE\x07U\x02\x02\u0BCE\u0BCF\x07R\x02\x02\u0BCF\u0BD0" + + "\x07C\x02\x02\u0BD0\u0BD1\x07P\x02\x02\u0BD1\u024A\x03\x02\x02\x02\u0BD2" + + "\u0BD3\x07O\x02\x02\u0BD3\u0BD4\x07U\x02\x02\u0BD4\u024C\x03\x02\x02\x02" + + "\u0BD5\u0BD6\x07U\x02\x02\u0BD6\u024E\x03\x02\x02\x02\u0BD7\u0BD8\x07" + + "O\x02\x02\u0BD8\u0250\x03\x02\x02\x02\u0BD9\u0BDA\x07J\x02\x02\u0BDA\u0252" + + "\x03\x02\x02\x02\u0BDB\u0BDC\x07Y\x02\x02\u0BDC\u0254\x03\x02\x02\x02" + + "\u0BDD\u0BDE\x07S\x02\x02\u0BDE\u0256\x03\x02\x02\x02\u0BDF\u0BE0\x07" + + "[\x02\x02\u0BE0\u0258\x03\x02\x02\x02\u0BE1\u0BE2\x05\u0261\u0131\x02" + + "\u0BE2\u025A\x03\x02\x02\x02\u0BE3\u0BE5\x05\u026B\u0136\x02\u0BE4\u0BE3" + + "\x03\x02\x02\x02\u0BE5\u0BE6\x03\x02\x02\x02\u0BE6\u0BE4\x03\x02\x02\x02" + + "\u0BE6\u0BE7\x03\x02\x02\x02\u0BE7\u025C\x03\x02\x02\x02\u0BE8\u0BEA\x05" + + "\u026B\u0136\x02\u0BE9\u0BE8\x03\x02\x02\x02\u0BEA\u0BEB\x03\x02\x02\x02" + + "\u0BEB\u0BE9\x03\x02\x02\x02\u0BEB\u0BEC\x03\x02\x02\x02\u0BEC\u0BEE\x03" + + "\x02\x02\x02\u0BED\u0BE9\x03\x02\x02\x02\u0BED\u0BEE\x03\x02\x02\x02\u0BEE" + + "\u0BEF\x03\x02\x02\x02\u0BEF\u0BF1\x070\x02\x02\u0BF0\u0BF2\x05\u026B" + + "\u0136\x02\u0BF1\u0BF0\x03\x02\x02\x02\u0BF2\u0BF3\x03\x02\x02\x02\u0BF3" + + "\u0BF1\x03\x02\x02\x02\u0BF3\u0BF4\x03\x02\x02\x02\u0BF4\u025E\x03\x02" + + "\x02\x02\u0BF5\u0BF7\t\x02\x02\x02\u0BF6\u0BF8\t\x03\x02\x02\u0BF7\u0BF6" + + "\x03\x02\x02\x02\u0BF8\u0BF9\x03\x02\x02\x02\u0BF9\u0BF7\x03\x02\x02\x02" + + "\u0BF9\u0BFA\x03\x02\x02\x02\u0BFA\u0BFC\x03\x02\x02\x02\u0BFB\u0BF5\x03" + + "\x02\x02\x02\u0BFC\u0BFF\x03\x02\x02\x02\u0BFD\u0BFB\x03\x02\x02\x02\u0BFD" + + "\u0BFE\x03\x02\x02\x02\u0BFE\u0260\x03\x02\x02\x02\u0BFF\u0BFD\x03\x02" + + "\x02\x02\u0C00\u0C02\t\x04\x02\x02\u0C01\u0C00\x03\x02\x02\x02\u0C02\u0C03" + + "\x03\x02\x02\x02\u0C03\u0C04\x03\x02\x02\x02\u0C03\u0C01\x03\x02\x02\x02" + + "\u0C04\u0C08\x03\x02\x02\x02\u0C05\u0C07\t\x05\x02\x02\u0C06\u0C05\x03" + + "\x02\x02\x02\u0C07\u0C0A\x03\x02\x02\x02\u0C08\u0C06\x03\x02\x02\x02\u0C08" + + "\u0C09\x03\x02\x02\x02\u0C09\u0262\x03\x02\x02\x02\u0C0A\u0C08\x03\x02" + + "\x02\x02\u0C0B\u0C0C\x05\u0261\u0131\x02\u0C0C\u0C0D\x05\u025F\u0130\x02" + + "\u0C0D\u0264\x03\x02\x02\x02\u0C0E\u0C16\x07$\x02\x02\u0C0F\u0C10\x07" + + "^\x02\x02\u0C10\u0C15\v\x02\x02\x02\u0C11\u0C12\x07$\x02\x02\u0C12\u0C15" + + "\x07$\x02\x02\u0C13\u0C15\n\x06\x02\x02\u0C14\u0C0F\x03\x02\x02\x02\u0C14" + + "\u0C11\x03\x02\x02\x02\u0C14\u0C13\x03\x02\x02\x02\u0C15\u0C18\x03\x02" + + "\x02\x02\u0C16\u0C14\x03\x02\x02\x02\u0C16\u0C17\x03\x02\x02\x02\u0C17" + + "\u0C19\x03\x02\x02\x02\u0C18\u0C16\x03\x02\x02\x02\u0C19\u0C1A\x07$\x02" + + "\x02\u0C1A\u0266\x03\x02\x02\x02\u0C1B\u0C23\x07)\x02\x02\u0C1C\u0C1D" + + "\x07^\x02\x02\u0C1D\u0C22\v\x02\x02\x02\u0C1E\u0C1F\x07)\x02\x02\u0C1F" + + "\u0C22\x07)\x02\x02\u0C20\u0C22\n\x07\x02\x02\u0C21\u0C1C\x03\x02\x02" + + "\x02\u0C21\u0C1E\x03\x02\x02\x02\u0C21\u0C20\x03\x02\x02\x02\u0C22\u0C25" + + "\x03\x02\x02\x02\u0C23\u0C21\x03\x02\x02\x02\u0C23\u0C24\x03\x02\x02\x02" + + "\u0C24\u0C26\x03\x02\x02\x02\u0C25\u0C23\x03\x02\x02\x02\u0C26\u0C27\x07" + + ")\x02\x02\u0C27\u0268\x03\x02\x02\x02\u0C28\u0C30\x07b\x02\x02\u0C29\u0C2A" + + "\x07^\x02\x02\u0C2A\u0C2F\v\x02\x02\x02\u0C2B\u0C2C\x07b\x02\x02\u0C2C" + + "\u0C2F\x07b\x02\x02\u0C2D\u0C2F\n\b\x02\x02\u0C2E\u0C29\x03\x02\x02\x02" + + "\u0C2E\u0C2B\x03\x02\x02\x02\u0C2E\u0C2D\x03\x02\x02\x02\u0C2F\u0C32\x03" + + "\x02\x02\x02\u0C30\u0C2E\x03\x02\x02\x02\u0C30\u0C31\x03\x02\x02\x02\u0C31" + + "\u0C33\x03\x02\x02\x02\u0C32\u0C30\x03\x02\x02\x02\u0C33\u0C34\x07b\x02" + + "\x02\u0C34\u026A\x03\x02\x02\x02\u0C35\u0C36\t\t\x02\x02\u0C36\u026C\x03" + + "\x02\x02\x02\u0C37\u0C38\v\x02\x02\x02\u0C38\u0C39\x03\x02\x02\x02\u0C39" + + "\u0C3A\b\u0137\x02\x02\u0C3A\u026E\x03\x02\x02\x02\x11\x02\u0BE6\u0BEB" + + "\u0BED\u0BF3\u0BF9\u0BFD\u0C03\u0C08\u0C14\u0C16\u0C21\u0C23\u0C2E\u0C30" + + "\x03\x02\x05\x02"; + public static readonly _serializedATN: string = Utils.join( + [ + OpenSearchPPLLexer._serializedATNSegment0, + OpenSearchPPLLexer._serializedATNSegment1, + OpenSearchPPLLexer._serializedATNSegment2, + OpenSearchPPLLexer._serializedATNSegment3, + OpenSearchPPLLexer._serializedATNSegment4, + OpenSearchPPLLexer._serializedATNSegment5, + ], + "", + ); + public static __ATN: ATN; + public static get _ATN(): ATN { + if (!OpenSearchPPLLexer.__ATN) { + OpenSearchPPLLexer.__ATN = new ATNDeserializer().deserialize(Utils.toCharArray(OpenSearchPPLLexer._serializedATN)); + } + + return OpenSearchPPLLexer.__ATN; + } + +} + diff --git a/dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLParser.interp b/dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLParser.interp new file mode 100644 index 000000000..1610ee03e --- /dev/null +++ b/dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLParser.interp @@ -0,0 +1,728 @@ +token literal names: +null +'SEARCH' +'DESCRIBE' +'SHOW' +'FROM' +'WHERE' +'FIELDS' +'RENAME' +'STATS' +'DEDUP' +'SORT' +'EVAL' +'HEAD' +'TOP' +'RARE' +'PARSE' +'METHOD' +'REGEX' +'PUNCT' +'GROK' +'PATTERN' +'PATTERNS' +'NEW_FIELD' +'KMEANS' +'AD' +'ML' +'AS' +'BY' +'SOURCE' +'INDEX' +'D' +'DESC' +'CATALOGS' +'SORTBY' +'AUTO' +'STR' +'IP' +'NUM' +'KEEPEMPTY' +'CONSECUTIVE' +'DEDUP_SPLITVALUES' +'PARTITIONS' +'ALLNUM' +'DELIM' +'CENTROIDS' +'ITERATIONS' +'DISTANCE_TYPE' +'NUMBER_OF_TREES' +'SHINGLE_SIZE' +'SAMPLE_SIZE' +'OUTPUT_AFTER' +'TIME_DECAY' +'ANOMALY_RATE' +'CATEGORY_FIELD' +'TIME_FIELD' +'TIME_ZONE' +'TRAINING_DATA_SIZE' +'ANOMALY_SCORE_THRESHOLD' +'CASE' +'IN' +'NOT' +'OR' +'AND' +'XOR' +'TRUE' +'FALSE' +'REGEXP' +'DATETIME' +'INTERVAL' +'MICROSECOND' +'MILLISECOND' +'SECOND' +'MINUTE' +'HOUR' +'DAY' +'WEEK' +'MONTH' +'QUARTER' +'YEAR' +'SECOND_MICROSECOND' +'MINUTE_MICROSECOND' +'MINUTE_SECOND' +'HOUR_MICROSECOND' +'HOUR_SECOND' +'HOUR_MINUTE' +'DAY_MICROSECOND' +'DAY_SECOND' +'DAY_MINUTE' +'DAY_HOUR' +'YEAR_MONTH' +'CONVERT_TZ' +'DATAMODEL' +'LOOKUP' +'SAVEDSEARCH' +'INT' +'INTEGER' +'DOUBLE' +'LONG' +'FLOAT' +'STRING' +'BOOLEAN' +'|' +',' +'.' +'=' +'>' +'<' +null +null +null +'+' +'-' +'*' +'/' +'%' +'!' +':' +'(' +')' +'[' +']' +'\'' +'"' +'`' +'~' +'&' +'^' +'AVG' +'COUNT' +'DISTINCT_COUNT' +'ESTDC' +'ESTDC_ERROR' +'MAX' +'MEAN' +'MEDIAN' +'MIN' +'MODE' +'RANGE' +'STDEV' +'STDEVP' +'SUM' +'SUMSQ' +'VAR_SAMP' +'VAR_POP' +'STDDEV_SAMP' +'STDDEV_POP' +'PERCENTILE' +'TAKE' +'FIRST' +'LAST' +'LIST' +'VALUES' +'EARLIEST' +'EARLIEST_TIME' +'LATEST' +'LATEST_TIME' +'PER_DAY' +'PER_HOUR' +'PER_MINUTE' +'PER_SECOND' +'RATE' +'SPARKLINE' +'C' +'DC' +'ABS' +'CEIL' +'CEILING' +'CONV' +'CRC32' +'E' +'EXP' +'FLOOR' +'LN' +'LOG' +'LOG10' +'LOG2' +'MOD' +'PI' +'POW' +'POWER' +'RAND' +'ROUND' +'SIGN' +'SQRT' +'TRUNCATE' +'ACOS' +'ASIN' +'ATAN' +'ATAN2' +'COS' +'COT' +'DEGREES' +'RADIANS' +'SIN' +'TAN' +'ADDDATE' +'CURDATE' +'CURRENT_DATE' +'CURRENT_TIME' +'CURRENT_TIMESTAMP' +'CURTIME' +'DATE' +'DATE_ADD' +'DATE_FORMAT' +'DATE_SUB' +'DAYNAME' +'DAYOFMONTH' +'DAYOFWEEK' +'DAYOFYEAR' +'FROM_DAYS' +'LOCALTIME' +'LOCALTIMESTAMP' +'FROM_UNIXTIME' +'MAKEDATE' +'MAKETIME' +'MONTHNAME' +'NOW' +'PERIOD_ADD' +'PERIOD_DIFF' +'SUBDATE' +'SYSDATE' +'TIME' +'TIME_TO_SEC' +'TIMESTAMP' +'TO_DAYS' +'UTC_DATE' +'UTC_TIME' +'UTC_TIMESTAMP' +'UNIX_TIMESTAMP' +'SUBSTR' +'SUBSTRING' +'LTRIM' +'RTRIM' +'TRIM' +'TO' +'LOWER' +'UPPER' +'CONCAT' +'CONCAT_WS' +'LENGTH' +'STRCMP' +'RIGHT' +'LEFT' +'ASCII' +'LOCATE' +'REPLACE' +'CAST' +'LIKE' +'ISNULL' +'ISNOTNULL' +'IFNULL' +'NULLIF' +'IF' +'TYPEOF' +'MATCH' +'MATCH_PHRASE' +'MATCH_PHRASE_PREFIX' +'MATCH_BOOL_PREFIX' +'SIMPLE_QUERY_STRING' +'MULTI_MATCH' +'QUERY_STRING' +'ALLOW_LEADING_WILDCARD' +'ANALYZE_WILDCARD' +'ANALYZER' +'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY' +'BOOST' +'CUTOFF_FREQUENCY' +'DEFAULT_FIELD' +'DEFAULT_OPERATOR' +'ENABLE_POSITION_INCREMENTS' +'ESCAPE' +'FLAGS' +'FUZZY_MAX_EXPANSIONS' +'FUZZY_PREFIX_LENGTH' +'FUZZY_TRANSPOSITIONS' +'FUZZY_REWRITE' +'FUZZINESS' +'LENIENT' +'LOW_FREQ_OPERATOR' +'MAX_DETERMINIZED_STATES' +'MAX_EXPANSIONS' +'MINIMUM_SHOULD_MATCH' +'OPERATOR' +'PHRASE_SLOP' +'PREFIX_LENGTH' +'QUOTE_ANALYZER' +'QUOTE_FIELD_SUFFIX' +'REWRITE' +'SLOP' +'TIE_BREAKER' +'TYPE' +'ZERO_TERMS_QUERY' +'SPAN' +'MS' +'S' +'M' +'H' +'W' +'Q' +'Y' +null +null +null +null +null +null +null +null + +token symbolic names: +null +SEARCH +DESCRIBE +SHOW +FROM +WHERE +FIELDS +RENAME +STATS +DEDUP +SORT +EVAL +HEAD +TOP +RARE +PARSE +METHOD +REGEX +PUNCT +GROK +PATTERN +PATTERNS +NEW_FIELD +KMEANS +AD +ML +AS +BY +SOURCE +INDEX +D +DESC +CATALOGS +SORTBY +AUTO +STR +IP +NUM +KEEPEMPTY +CONSECUTIVE +DEDUP_SPLITVALUES +PARTITIONS +ALLNUM +DELIM +CENTROIDS +ITERATIONS +DISTANCE_TYPE +NUMBER_OF_TREES +SHINGLE_SIZE +SAMPLE_SIZE +OUTPUT_AFTER +TIME_DECAY +ANOMALY_RATE +CATEGORY_FIELD +TIME_FIELD +TIME_ZONE +TRAINING_DATA_SIZE +ANOMALY_SCORE_THRESHOLD +CASE +IN +NOT +OR +AND +XOR +TRUE +FALSE +REGEXP +DATETIME +INTERVAL +MICROSECOND +MILLISECOND +SECOND +MINUTE +HOUR +DAY +WEEK +MONTH +QUARTER +YEAR +SECOND_MICROSECOND +MINUTE_MICROSECOND +MINUTE_SECOND +HOUR_MICROSECOND +HOUR_SECOND +HOUR_MINUTE +DAY_MICROSECOND +DAY_SECOND +DAY_MINUTE +DAY_HOUR +YEAR_MONTH +CONVERT_TZ +DATAMODEL +LOOKUP +SAVEDSEARCH +INT +INTEGER +DOUBLE +LONG +FLOAT +STRING +BOOLEAN +PIPE +COMMA +DOT +EQUAL +GREATER +LESS +NOT_GREATER +NOT_LESS +NOT_EQUAL +PLUS +MINUS +STAR +DIVIDE +MODULE +EXCLAMATION_SYMBOL +COLON +LT_PRTHS +RT_PRTHS +LT_SQR_PRTHS +RT_SQR_PRTHS +SINGLE_QUOTE +DOUBLE_QUOTE +BACKTICK +BIT_NOT_OP +BIT_AND_OP +BIT_XOR_OP +AVG +COUNT +DISTINCT_COUNT +ESTDC +ESTDC_ERROR +MAX +MEAN +MEDIAN +MIN +MODE +RANGE +STDEV +STDEVP +SUM +SUMSQ +VAR_SAMP +VAR_POP +STDDEV_SAMP +STDDEV_POP +PERCENTILE +TAKE +FIRST +LAST +LIST +VALUES +EARLIEST +EARLIEST_TIME +LATEST +LATEST_TIME +PER_DAY +PER_HOUR +PER_MINUTE +PER_SECOND +RATE +SPARKLINE +C +DC +ABS +CEIL +CEILING +CONV +CRC32 +E +EXP +FLOOR +LN +LOG +LOG10 +LOG2 +MOD +PI +POW +POWER +RAND +ROUND +SIGN +SQRT +TRUNCATE +ACOS +ASIN +ATAN +ATAN2 +COS +COT +DEGREES +RADIANS +SIN +TAN +ADDDATE +CURDATE +CURRENT_DATE +CURRENT_TIME +CURRENT_TIMESTAMP +CURTIME +DATE +DATE_ADD +DATE_FORMAT +DATE_SUB +DAYNAME +DAYOFMONTH +DAYOFWEEK +DAYOFYEAR +FROM_DAYS +LOCALTIME +LOCALTIMESTAMP +FROM_UNIXTIME +MAKEDATE +MAKETIME +MONTHNAME +NOW +PERIOD_ADD +PERIOD_DIFF +SUBDATE +SYSDATE +TIME +TIME_TO_SEC +TIMESTAMP +TO_DAYS +UTC_DATE +UTC_TIME +UTC_TIMESTAMP +UNIX_TIMESTAMP +SUBSTR +SUBSTRING +LTRIM +RTRIM +TRIM +TO +LOWER +UPPER +CONCAT +CONCAT_WS +LENGTH +STRCMP +RIGHT +LEFT +ASCII +LOCATE +REPLACE +CAST +LIKE +ISNULL +ISNOTNULL +IFNULL +NULLIF +IF +TYPEOF +MATCH +MATCH_PHRASE +MATCH_PHRASE_PREFIX +MATCH_BOOL_PREFIX +SIMPLE_QUERY_STRING +MULTI_MATCH +QUERY_STRING +ALLOW_LEADING_WILDCARD +ANALYZE_WILDCARD +ANALYZER +AUTO_GENERATE_SYNONYMS_PHRASE_QUERY +BOOST +CUTOFF_FREQUENCY +DEFAULT_FIELD +DEFAULT_OPERATOR +ENABLE_POSITION_INCREMENTS +ESCAPE +FLAGS +FUZZY_MAX_EXPANSIONS +FUZZY_PREFIX_LENGTH +FUZZY_TRANSPOSITIONS +FUZZY_REWRITE +FUZZINESS +LENIENT +LOW_FREQ_OPERATOR +MAX_DETERMINIZED_STATES +MAX_EXPANSIONS +MINIMUM_SHOULD_MATCH +OPERATOR +PHRASE_SLOP +PREFIX_LENGTH +QUOTE_ANALYZER +QUOTE_FIELD_SUFFIX +REWRITE +SLOP +TIE_BREAKER +TYPE +ZERO_TERMS_QUERY +SPAN +MS +S +M +H +W +Q +Y +ID +INTEGER_LITERAL +DECIMAL_LITERAL +ID_DATE_SUFFIX +DQUOTA_STRING +SQUOTA_STRING +BQUOTA_STRING +ERROR_RECOGNITION + +rule names: +root +pplStatement +pplCommands +commands +searchCommand +describeCommand +showCatalogsCommand +whereCommand +fieldsCommand +renameCommand +statsCommand +dedupCommand +sortCommand +evalCommand +headCommand +topCommand +rareCommand +grokCommand +parseCommand +patternsCommand +patternsParameter +patternsMethod +kmeansCommand +kmeansParameter +adCommand +adParameter +mlCommand +mlArg +fromClause +tableSourceClause +renameClasue +byClause +statsByClause +bySpanClause +spanClause +sortbyClause +evalClause +statsAggTerm +statsFunction +statsFunctionName +takeAggFunction +percentileAggFunction +expression +logicalExpression +comparisonExpression +valueExpression +primaryExpression +constantFunction +booleanExpression +relevanceExpression +singleFieldRelevanceFunction +multiFieldRelevanceFunction +tableSource +tableFunction +fieldList +wcFieldList +sortField +sortFieldExpression +fieldExpression +wcFieldExpression +evalFunctionCall +dataTypeFunctionCall +booleanFunctionCall +convertedDataType +evalFunctionName +functionArgs +functionArg +relevanceArg +relevanceArgName +relevanceFieldAndWeight +relevanceFieldWeight +relevanceField +relevanceQuery +relevanceArgValue +mathematicalFunctionBase +trigonometricFunctionName +dateAndTimeFunctionBase +constantFunctionName +conditionFunctionBase +systemFunctionBase +textFunctionBase +comparisonOperator +binaryOperator +singleFieldRelevanceFunctionName +multiFieldRelevanceFunctionName +literalValue +intervalLiteral +stringLiteral +integerLiteral +decimalLiteral +booleanLiteral +datetimeLiteral +dateLiteral +timeLiteral +timestampLiteral +intervalUnit +timespanUnit +valueList +qualifiedName +wcQualifiedName +ident +wildcard +keywordsCanBeId + + +atn: +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 309, 998, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 3, 2, 5, 2, 210, 10, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 7, 3, 217, 10, 3, 12, 3, 14, 3, 220, 11, 3, 3, 4, 3, 4, 3, 4, 5, 4, 225, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 243, 10, 5, 3, 6, 5, 6, 246, 10, 6, 3, 6, 3, 6, 5, 6, 250, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 256, 10, 6, 3, 6, 3, 6, 3, 6, 5, 6, 261, 10, 6, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 5, 10, 274, 10, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 282, 10, 11, 12, 11, 14, 11, 285, 11, 11, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 291, 10, 12, 3, 12, 3, 12, 3, 12, 5, 12, 296, 10, 12, 3, 12, 3, 12, 3, 12, 5, 12, 301, 10, 12, 3, 12, 3, 12, 3, 12, 7, 12, 306, 10, 12, 12, 12, 14, 12, 309, 11, 12, 3, 12, 5, 12, 312, 10, 12, 3, 12, 3, 12, 3, 12, 5, 12, 317, 10, 12, 3, 13, 3, 13, 5, 13, 321, 10, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 327, 10, 13, 3, 13, 3, 13, 3, 13, 5, 13, 332, 10, 13, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 7, 15, 341, 10, 15, 12, 15, 14, 15, 344, 11, 15, 3, 16, 3, 16, 5, 16, 348, 10, 16, 3, 16, 3, 16, 5, 16, 352, 10, 16, 3, 17, 3, 17, 5, 17, 356, 10, 17, 3, 17, 3, 17, 5, 17, 360, 10, 17, 3, 18, 3, 18, 3, 18, 5, 18, 365, 10, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 7, 21, 377, 10, 21, 12, 21, 14, 21, 380, 11, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 5, 22, 390, 10, 22, 3, 23, 3, 23, 3, 24, 3, 24, 7, 24, 396, 10, 24, 12, 24, 14, 24, 399, 11, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 410, 10, 25, 3, 26, 3, 26, 7, 26, 414, 10, 26, 12, 26, 14, 26, 417, 11, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 5, 27, 455, 10, 27, 3, 28, 3, 28, 7, 28, 459, 10, 28, 12, 28, 14, 28, 462, 11, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 480, 10, 30, 3, 31, 3, 31, 3, 31, 7, 31, 485, 10, 31, 12, 31, 14, 31, 488, 11, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 506, 10, 34, 3, 35, 3, 35, 3, 35, 5, 35, 511, 10, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 5, 36, 519, 10, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 7, 37, 526, 10, 37, 12, 37, 14, 37, 529, 11, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 5, 39, 538, 10, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 555, 10, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 5, 42, 564, 10, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 5, 44, 579, 10, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 5, 45, 587, 10, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 5, 45, 594, 10, 45, 3, 45, 3, 45, 3, 45, 3, 45, 7, 45, 600, 10, 45, 12, 45, 14, 45, 603, 11, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 613, 10, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 5, 47, 623, 10, 47, 3, 47, 3, 47, 3, 47, 3, 47, 7, 47, 629, 10, 47, 12, 47, 14, 47, 632, 11, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 639, 10, 48, 3, 49, 3, 49, 3, 49, 5, 49, 644, 10, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 5, 51, 652, 10, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 7, 52, 661, 10, 52, 12, 52, 14, 52, 664, 11, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 7, 53, 674, 10, 53, 12, 53, 14, 53, 677, 11, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 7, 53, 684, 10, 53, 12, 53, 14, 53, 687, 11, 53, 3, 53, 3, 53, 3, 54, 3, 54, 5, 54, 693, 10, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 7, 56, 703, 10, 56, 12, 56, 14, 56, 706, 11, 56, 3, 57, 3, 57, 3, 57, 7, 57, 711, 10, 57, 12, 57, 14, 57, 714, 11, 57, 3, 58, 5, 58, 717, 10, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 742, 10, 59, 3, 60, 3, 60, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 5, 65, 775, 10, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 5, 66, 782, 10, 66, 3, 67, 3, 67, 3, 67, 7, 67, 787, 10, 67, 12, 67, 14, 67, 790, 11, 67, 5, 67, 792, 10, 67, 3, 68, 3, 68, 3, 68, 5, 68, 797, 10, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 5, 71, 815, 10, 71, 3, 72, 3, 72, 5, 72, 819, 10, 72, 3, 73, 3, 73, 5, 73, 823, 10, 73, 3, 74, 3, 74, 3, 75, 3, 75, 5, 75, 829, 10, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 5, 76, 853, 10, 76, 3, 77, 3, 77, 3, 78, 3, 78, 3, 79, 3, 79, 3, 80, 3, 80, 3, 81, 3, 81, 3, 82, 3, 82, 3, 83, 3, 83, 3, 84, 3, 84, 3, 85, 3, 85, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 5, 87, 881, 10, 87, 3, 88, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 90, 5, 90, 890, 10, 90, 3, 90, 3, 90, 3, 91, 5, 91, 895, 10, 91, 3, 91, 3, 91, 3, 92, 3, 92, 3, 93, 3, 93, 3, 93, 5, 93, 904, 10, 93, 3, 94, 3, 94, 3, 94, 3, 95, 3, 95, 3, 95, 3, 96, 3, 96, 3, 96, 3, 97, 3, 97, 3, 98, 3, 98, 3, 99, 3, 99, 3, 99, 3, 99, 7, 99, 923, 10, 99, 12, 99, 14, 99, 926, 11, 99, 3, 99, 3, 99, 3, 100, 3, 100, 3, 100, 7, 100, 933, 10, 100, 12, 100, 14, 100, 936, 11, 100, 3, 101, 3, 101, 3, 101, 7, 101, 941, 10, 101, 12, 101, 14, 101, 944, 11, 101, 3, 102, 5, 102, 947, 10, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 5, 102, 956, 10, 102, 3, 103, 3, 103, 3, 103, 7, 103, 961, 10, 103, 12, 103, 14, 103, 964, 11, 103, 3, 103, 5, 103, 967, 10, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 5, 103, 981, 10, 103, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 5, 104, 996, 10, 104, 3, 104, 2, 2, 4, 88, 92, 105, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 2, 86, 2, 88, 2, 90, 2, 92, 2, 94, 2, 96, 2, 98, 2, 100, 2, 102, 2, 104, 2, 106, 2, 108, 2, 110, 2, 112, 2, 114, 2, 116, 2, 118, 2, 120, 2, 122, 2, 124, 2, 126, 2, 128, 2, 130, 2, 132, 2, 134, 2, 136, 2, 138, 2, 140, 2, 142, 2, 144, 2, 146, 2, 148, 2, 150, 2, 152, 2, 154, 2, 156, 2, 158, 2, 160, 2, 162, 2, 164, 2, 166, 2, 168, 2, 170, 2, 172, 2, 174, 2, 176, 2, 178, 2, 180, 2, 182, 2, 184, 2, 186, 2, 188, 2, 190, 2, 192, 2, 194, 2, 196, 2, 198, 2, 200, 2, 202, 2, 204, 2, 206, 2, 2, 20, 3, 2, 112, 113, 3, 2, 19, 20, 4, 2, 131, 131, 165, 165, 7, 2, 129, 130, 134, 134, 137, 137, 142, 142, 144, 147, 5, 2, 8, 8, 57, 57, 263, 293, 3, 2, 187, 196, 11, 2, 69, 69, 71, 71, 73, 80, 92, 92, 197, 197, 203, 211, 214, 217, 219, 226, 230, 230, 6, 2, 198, 202, 212, 213, 218, 218, 227, 229, 3, 2, 249, 254, 4, 2, 231, 235, 237, 247, 4, 2, 68, 68, 106, 111, 3, 2, 112, 116, 3, 2, 256, 259, 3, 2, 260, 262, 3, 2, 306, 307, 3, 2, 66, 67, 4, 2, 71, 71, 73, 91, 5, 2, 32, 32, 72, 80, 295, 301, 2, 1072, 2, 209, 3, 2, 2, 2, 4, 213, 3, 2, 2, 2, 6, 224, 3, 2, 2, 2, 8, 242, 3, 2, 2, 2, 10, 260, 3, 2, 2, 2, 12, 262, 3, 2, 2, 2, 14, 265, 3, 2, 2, 2, 16, 268, 3, 2, 2, 2, 18, 271, 3, 2, 2, 2, 20, 277, 3, 2, 2, 2, 22, 286, 3, 2, 2, 2, 24, 318, 3, 2, 2, 2, 26, 333, 3, 2, 2, 2, 28, 336, 3, 2, 2, 2, 30, 345, 3, 2, 2, 2, 32, 353, 3, 2, 2, 2, 34, 361, 3, 2, 2, 2, 36, 366, 3, 2, 2, 2, 38, 370, 3, 2, 2, 2, 40, 374, 3, 2, 2, 2, 42, 389, 3, 2, 2, 2, 44, 391, 3, 2, 2, 2, 46, 393, 3, 2, 2, 2, 48, 409, 3, 2, 2, 2, 50, 411, 3, 2, 2, 2, 52, 454, 3, 2, 2, 2, 54, 456, 3, 2, 2, 2, 56, 463, 3, 2, 2, 2, 58, 479, 3, 2, 2, 2, 60, 481, 3, 2, 2, 2, 62, 489, 3, 2, 2, 2, 64, 493, 3, 2, 2, 2, 66, 505, 3, 2, 2, 2, 68, 507, 3, 2, 2, 2, 70, 512, 3, 2, 2, 2, 72, 522, 3, 2, 2, 2, 74, 530, 3, 2, 2, 2, 76, 534, 3, 2, 2, 2, 78, 554, 3, 2, 2, 2, 80, 556, 3, 2, 2, 2, 82, 558, 3, 2, 2, 2, 84, 567, 3, 2, 2, 2, 86, 578, 3, 2, 2, 2, 88, 586, 3, 2, 2, 2, 90, 612, 3, 2, 2, 2, 92, 622, 3, 2, 2, 2, 94, 638, 3, 2, 2, 2, 96, 640, 3, 2, 2, 2, 98, 647, 3, 2, 2, 2, 100, 651, 3, 2, 2, 2, 102, 653, 3, 2, 2, 2, 104, 667, 3, 2, 2, 2, 106, 692, 3, 2, 2, 2, 108, 694, 3, 2, 2, 2, 110, 699, 3, 2, 2, 2, 112, 707, 3, 2, 2, 2, 114, 716, 3, 2, 2, 2, 116, 741, 3, 2, 2, 2, 118, 743, 3, 2, 2, 2, 120, 745, 3, 2, 2, 2, 122, 747, 3, 2, 2, 2, 124, 752, 3, 2, 2, 2, 126, 759, 3, 2, 2, 2, 128, 774, 3, 2, 2, 2, 130, 781, 3, 2, 2, 2, 132, 791, 3, 2, 2, 2, 134, 796, 3, 2, 2, 2, 136, 800, 3, 2, 2, 2, 138, 804, 3, 2, 2, 2, 140, 814, 3, 2, 2, 2, 142, 818, 3, 2, 2, 2, 144, 822, 3, 2, 2, 2, 146, 824, 3, 2, 2, 2, 148, 828, 3, 2, 2, 2, 150, 852, 3, 2, 2, 2, 152, 854, 3, 2, 2, 2, 154, 856, 3, 2, 2, 2, 156, 858, 3, 2, 2, 2, 158, 860, 3, 2, 2, 2, 160, 862, 3, 2, 2, 2, 162, 864, 3, 2, 2, 2, 164, 866, 3, 2, 2, 2, 166, 868, 3, 2, 2, 2, 168, 870, 3, 2, 2, 2, 170, 872, 3, 2, 2, 2, 172, 880, 3, 2, 2, 2, 174, 882, 3, 2, 2, 2, 176, 886, 3, 2, 2, 2, 178, 889, 3, 2, 2, 2, 180, 894, 3, 2, 2, 2, 182, 898, 3, 2, 2, 2, 184, 903, 3, 2, 2, 2, 186, 905, 3, 2, 2, 2, 188, 908, 3, 2, 2, 2, 190, 911, 3, 2, 2, 2, 192, 914, 3, 2, 2, 2, 194, 916, 3, 2, 2, 2, 196, 918, 3, 2, 2, 2, 198, 929, 3, 2, 2, 2, 200, 937, 3, 2, 2, 2, 202, 955, 3, 2, 2, 2, 204, 980, 3, 2, 2, 2, 206, 995, 3, 2, 2, 2, 208, 210, 5, 4, 3, 2, 209, 208, 3, 2, 2, 2, 209, 210, 3, 2, 2, 2, 210, 211, 3, 2, 2, 2, 211, 212, 7, 2, 2, 3, 212, 3, 3, 2, 2, 2, 213, 218, 5, 6, 4, 2, 214, 215, 7, 103, 2, 2, 215, 217, 5, 8, 5, 2, 216, 214, 3, 2, 2, 2, 217, 220, 3, 2, 2, 2, 218, 216, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 5, 3, 2, 2, 2, 220, 218, 3, 2, 2, 2, 221, 225, 5, 10, 6, 2, 222, 225, 5, 12, 7, 2, 223, 225, 5, 14, 8, 2, 224, 221, 3, 2, 2, 2, 224, 222, 3, 2, 2, 2, 224, 223, 3, 2, 2, 2, 225, 7, 3, 2, 2, 2, 226, 243, 5, 16, 9, 2, 227, 243, 5, 18, 10, 2, 228, 243, 5, 20, 11, 2, 229, 243, 5, 22, 12, 2, 230, 243, 5, 24, 13, 2, 231, 243, 5, 26, 14, 2, 232, 243, 5, 28, 15, 2, 233, 243, 5, 30, 16, 2, 234, 243, 5, 32, 17, 2, 235, 243, 5, 34, 18, 2, 236, 243, 5, 36, 19, 2, 237, 243, 5, 38, 20, 2, 238, 243, 5, 40, 21, 2, 239, 243, 5, 46, 24, 2, 240, 243, 5, 50, 26, 2, 241, 243, 5, 54, 28, 2, 242, 226, 3, 2, 2, 2, 242, 227, 3, 2, 2, 2, 242, 228, 3, 2, 2, 2, 242, 229, 3, 2, 2, 2, 242, 230, 3, 2, 2, 2, 242, 231, 3, 2, 2, 2, 242, 232, 3, 2, 2, 2, 242, 233, 3, 2, 2, 2, 242, 234, 3, 2, 2, 2, 242, 235, 3, 2, 2, 2, 242, 236, 3, 2, 2, 2, 242, 237, 3, 2, 2, 2, 242, 238, 3, 2, 2, 2, 242, 239, 3, 2, 2, 2, 242, 240, 3, 2, 2, 2, 242, 241, 3, 2, 2, 2, 243, 9, 3, 2, 2, 2, 244, 246, 7, 3, 2, 2, 245, 244, 3, 2, 2, 2, 245, 246, 3, 2, 2, 2, 246, 247, 3, 2, 2, 2, 247, 261, 5, 58, 30, 2, 248, 250, 7, 3, 2, 2, 249, 248, 3, 2, 2, 2, 249, 250, 3, 2, 2, 2, 250, 251, 3, 2, 2, 2, 251, 252, 5, 58, 30, 2, 252, 253, 5, 88, 45, 2, 253, 261, 3, 2, 2, 2, 254, 256, 7, 3, 2, 2, 255, 254, 3, 2, 2, 2, 255, 256, 3, 2, 2, 2, 256, 257, 3, 2, 2, 2, 257, 258, 5, 88, 45, 2, 258, 259, 5, 58, 30, 2, 259, 261, 3, 2, 2, 2, 260, 245, 3, 2, 2, 2, 260, 249, 3, 2, 2, 2, 260, 255, 3, 2, 2, 2, 261, 11, 3, 2, 2, 2, 262, 263, 7, 4, 2, 2, 263, 264, 5, 60, 31, 2, 264, 13, 3, 2, 2, 2, 265, 266, 7, 5, 2, 2, 266, 267, 7, 34, 2, 2, 267, 15, 3, 2, 2, 2, 268, 269, 7, 7, 2, 2, 269, 270, 5, 88, 45, 2, 270, 17, 3, 2, 2, 2, 271, 273, 7, 8, 2, 2, 272, 274, 9, 2, 2, 2, 273, 272, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 276, 5, 110, 56, 2, 276, 19, 3, 2, 2, 2, 277, 278, 7, 9, 2, 2, 278, 283, 5, 62, 32, 2, 279, 280, 7, 104, 2, 2, 280, 282, 5, 62, 32, 2, 281, 279, 3, 2, 2, 2, 282, 285, 3, 2, 2, 2, 283, 281, 3, 2, 2, 2, 283, 284, 3, 2, 2, 2, 284, 21, 3, 2, 2, 2, 285, 283, 3, 2, 2, 2, 286, 290, 7, 10, 2, 2, 287, 288, 7, 43, 2, 2, 288, 289, 7, 106, 2, 2, 289, 291, 5, 178, 90, 2, 290, 287, 3, 2, 2, 2, 290, 291, 3, 2, 2, 2, 291, 295, 3, 2, 2, 2, 292, 293, 7, 44, 2, 2, 293, 294, 7, 106, 2, 2, 294, 296, 5, 182, 92, 2, 295, 292, 3, 2, 2, 2, 295, 296, 3, 2, 2, 2, 296, 300, 3, 2, 2, 2, 297, 298, 7, 45, 2, 2, 298, 299, 7, 106, 2, 2, 299, 301, 5, 176, 89, 2, 300, 297, 3, 2, 2, 2, 300, 301, 3, 2, 2, 2, 301, 302, 3, 2, 2, 2, 302, 307, 5, 76, 39, 2, 303, 304, 7, 104, 2, 2, 304, 306, 5, 76, 39, 2, 305, 303, 3, 2, 2, 2, 306, 309, 3, 2, 2, 2, 307, 305, 3, 2, 2, 2, 307, 308, 3, 2, 2, 2, 308, 311, 3, 2, 2, 2, 309, 307, 3, 2, 2, 2, 310, 312, 5, 66, 34, 2, 311, 310, 3, 2, 2, 2, 311, 312, 3, 2, 2, 2, 312, 316, 3, 2, 2, 2, 313, 314, 7, 42, 2, 2, 314, 315, 7, 106, 2, 2, 315, 317, 5, 182, 92, 2, 316, 313, 3, 2, 2, 2, 316, 317, 3, 2, 2, 2, 317, 23, 3, 2, 2, 2, 318, 320, 7, 11, 2, 2, 319, 321, 5, 178, 90, 2, 320, 319, 3, 2, 2, 2, 320, 321, 3, 2, 2, 2, 321, 322, 3, 2, 2, 2, 322, 326, 5, 110, 56, 2, 323, 324, 7, 40, 2, 2, 324, 325, 7, 106, 2, 2, 325, 327, 5, 182, 92, 2, 326, 323, 3, 2, 2, 2, 326, 327, 3, 2, 2, 2, 327, 331, 3, 2, 2, 2, 328, 329, 7, 41, 2, 2, 329, 330, 7, 106, 2, 2, 330, 332, 5, 182, 92, 2, 331, 328, 3, 2, 2, 2, 331, 332, 3, 2, 2, 2, 332, 25, 3, 2, 2, 2, 333, 334, 7, 12, 2, 2, 334, 335, 5, 72, 37, 2, 335, 27, 3, 2, 2, 2, 336, 337, 7, 13, 2, 2, 337, 342, 5, 74, 38, 2, 338, 339, 7, 104, 2, 2, 339, 341, 5, 74, 38, 2, 340, 338, 3, 2, 2, 2, 341, 344, 3, 2, 2, 2, 342, 340, 3, 2, 2, 2, 342, 343, 3, 2, 2, 2, 343, 29, 3, 2, 2, 2, 344, 342, 3, 2, 2, 2, 345, 347, 7, 14, 2, 2, 346, 348, 5, 178, 90, 2, 347, 346, 3, 2, 2, 2, 347, 348, 3, 2, 2, 2, 348, 351, 3, 2, 2, 2, 349, 350, 7, 6, 2, 2, 350, 352, 5, 178, 90, 2, 351, 349, 3, 2, 2, 2, 351, 352, 3, 2, 2, 2, 352, 31, 3, 2, 2, 2, 353, 355, 7, 15, 2, 2, 354, 356, 5, 178, 90, 2, 355, 354, 3, 2, 2, 2, 355, 356, 3, 2, 2, 2, 356, 357, 3, 2, 2, 2, 357, 359, 5, 110, 56, 2, 358, 360, 5, 64, 33, 2, 359, 358, 3, 2, 2, 2, 359, 360, 3, 2, 2, 2, 360, 33, 3, 2, 2, 2, 361, 362, 7, 16, 2, 2, 362, 364, 5, 110, 56, 2, 363, 365, 5, 64, 33, 2, 364, 363, 3, 2, 2, 2, 364, 365, 3, 2, 2, 2, 365, 35, 3, 2, 2, 2, 366, 367, 7, 21, 2, 2, 367, 368, 5, 86, 44, 2, 368, 369, 5, 176, 89, 2, 369, 37, 3, 2, 2, 2, 370, 371, 7, 17, 2, 2, 371, 372, 5, 86, 44, 2, 372, 373, 5, 176, 89, 2, 373, 39, 3, 2, 2, 2, 374, 378, 7, 23, 2, 2, 375, 377, 5, 42, 22, 2, 376, 375, 3, 2, 2, 2, 377, 380, 3, 2, 2, 2, 378, 376, 3, 2, 2, 2, 378, 379, 3, 2, 2, 2, 379, 381, 3, 2, 2, 2, 380, 378, 3, 2, 2, 2, 381, 382, 5, 86, 44, 2, 382, 41, 3, 2, 2, 2, 383, 384, 7, 24, 2, 2, 384, 385, 7, 106, 2, 2, 385, 390, 5, 176, 89, 2, 386, 387, 7, 22, 2, 2, 387, 388, 7, 106, 2, 2, 388, 390, 5, 176, 89, 2, 389, 383, 3, 2, 2, 2, 389, 386, 3, 2, 2, 2, 390, 43, 3, 2, 2, 2, 391, 392, 9, 3, 2, 2, 392, 45, 3, 2, 2, 2, 393, 397, 7, 25, 2, 2, 394, 396, 5, 48, 25, 2, 395, 394, 3, 2, 2, 2, 396, 399, 3, 2, 2, 2, 397, 395, 3, 2, 2, 2, 397, 398, 3, 2, 2, 2, 398, 47, 3, 2, 2, 2, 399, 397, 3, 2, 2, 2, 400, 401, 7, 46, 2, 2, 401, 402, 7, 106, 2, 2, 402, 410, 5, 178, 90, 2, 403, 404, 7, 47, 2, 2, 404, 405, 7, 106, 2, 2, 405, 410, 5, 178, 90, 2, 406, 407, 7, 48, 2, 2, 407, 408, 7, 106, 2, 2, 408, 410, 5, 176, 89, 2, 409, 400, 3, 2, 2, 2, 409, 403, 3, 2, 2, 2, 409, 406, 3, 2, 2, 2, 410, 49, 3, 2, 2, 2, 411, 415, 7, 26, 2, 2, 412, 414, 5, 52, 27, 2, 413, 412, 3, 2, 2, 2, 414, 417, 3, 2, 2, 2, 415, 413, 3, 2, 2, 2, 415, 416, 3, 2, 2, 2, 416, 51, 3, 2, 2, 2, 417, 415, 3, 2, 2, 2, 418, 419, 7, 49, 2, 2, 419, 420, 7, 106, 2, 2, 420, 455, 5, 178, 90, 2, 421, 422, 7, 50, 2, 2, 422, 423, 7, 106, 2, 2, 423, 455, 5, 178, 90, 2, 424, 425, 7, 51, 2, 2, 425, 426, 7, 106, 2, 2, 426, 455, 5, 178, 90, 2, 427, 428, 7, 52, 2, 2, 428, 429, 7, 106, 2, 2, 429, 455, 5, 178, 90, 2, 430, 431, 7, 53, 2, 2, 431, 432, 7, 106, 2, 2, 432, 455, 5, 180, 91, 2, 433, 434, 7, 54, 2, 2, 434, 435, 7, 106, 2, 2, 435, 455, 5, 180, 91, 2, 436, 437, 7, 55, 2, 2, 437, 438, 7, 106, 2, 2, 438, 455, 5, 176, 89, 2, 439, 440, 7, 56, 2, 2, 440, 441, 7, 106, 2, 2, 441, 455, 5, 176, 89, 2, 442, 443, 7, 205, 2, 2, 443, 444, 7, 106, 2, 2, 444, 455, 5, 176, 89, 2, 445, 446, 7, 57, 2, 2, 446, 447, 7, 106, 2, 2, 447, 455, 5, 176, 89, 2, 448, 449, 7, 58, 2, 2, 449, 450, 7, 106, 2, 2, 450, 455, 5, 178, 90, 2, 451, 452, 7, 59, 2, 2, 452, 453, 7, 106, 2, 2, 453, 455, 5, 180, 91, 2, 454, 418, 3, 2, 2, 2, 454, 421, 3, 2, 2, 2, 454, 424, 3, 2, 2, 2, 454, 427, 3, 2, 2, 2, 454, 430, 3, 2, 2, 2, 454, 433, 3, 2, 2, 2, 454, 436, 3, 2, 2, 2, 454, 439, 3, 2, 2, 2, 454, 442, 3, 2, 2, 2, 454, 445, 3, 2, 2, 2, 454, 448, 3, 2, 2, 2, 454, 451, 3, 2, 2, 2, 455, 53, 3, 2, 2, 2, 456, 460, 7, 27, 2, 2, 457, 459, 5, 56, 29, 2, 458, 457, 3, 2, 2, 2, 459, 462, 3, 2, 2, 2, 460, 458, 3, 2, 2, 2, 460, 461, 3, 2, 2, 2, 461, 55, 3, 2, 2, 2, 462, 460, 3, 2, 2, 2, 463, 464, 5, 202, 102, 2, 464, 465, 7, 106, 2, 2, 465, 466, 5, 172, 87, 2, 466, 57, 3, 2, 2, 2, 467, 468, 7, 30, 2, 2, 468, 469, 7, 106, 2, 2, 469, 480, 5, 60, 31, 2, 470, 471, 7, 31, 2, 2, 471, 472, 7, 106, 2, 2, 472, 480, 5, 60, 31, 2, 473, 474, 7, 30, 2, 2, 474, 475, 7, 106, 2, 2, 475, 480, 5, 108, 55, 2, 476, 477, 7, 31, 2, 2, 477, 478, 7, 106, 2, 2, 478, 480, 5, 108, 55, 2, 479, 467, 3, 2, 2, 2, 479, 470, 3, 2, 2, 2, 479, 473, 3, 2, 2, 2, 479, 476, 3, 2, 2, 2, 480, 59, 3, 2, 2, 2, 481, 486, 5, 106, 54, 2, 482, 483, 7, 104, 2, 2, 483, 485, 5, 106, 54, 2, 484, 482, 3, 2, 2, 2, 485, 488, 3, 2, 2, 2, 486, 484, 3, 2, 2, 2, 486, 487, 3, 2, 2, 2, 487, 61, 3, 2, 2, 2, 488, 486, 3, 2, 2, 2, 489, 490, 5, 120, 61, 2, 490, 491, 7, 28, 2, 2, 491, 492, 5, 120, 61, 2, 492, 63, 3, 2, 2, 2, 493, 494, 7, 29, 2, 2, 494, 495, 5, 110, 56, 2, 495, 65, 3, 2, 2, 2, 496, 497, 7, 29, 2, 2, 497, 506, 5, 110, 56, 2, 498, 499, 7, 29, 2, 2, 499, 506, 5, 68, 35, 2, 500, 501, 7, 29, 2, 2, 501, 502, 5, 68, 35, 2, 502, 503, 7, 104, 2, 2, 503, 504, 5, 110, 56, 2, 504, 506, 3, 2, 2, 2, 505, 496, 3, 2, 2, 2, 505, 498, 3, 2, 2, 2, 505, 500, 3, 2, 2, 2, 506, 67, 3, 2, 2, 2, 507, 510, 5, 70, 36, 2, 508, 509, 7, 28, 2, 2, 509, 511, 5, 198, 100, 2, 510, 508, 3, 2, 2, 2, 510, 511, 3, 2, 2, 2, 511, 69, 3, 2, 2, 2, 512, 513, 7, 294, 2, 2, 513, 514, 7, 119, 2, 2, 514, 515, 5, 118, 60, 2, 515, 516, 7, 104, 2, 2, 516, 518, 5, 172, 87, 2, 517, 519, 5, 194, 98, 2, 518, 517, 3, 2, 2, 2, 518, 519, 3, 2, 2, 2, 519, 520, 3, 2, 2, 2, 520, 521, 7, 120, 2, 2, 521, 71, 3, 2, 2, 2, 522, 527, 5, 114, 58, 2, 523, 524, 7, 104, 2, 2, 524, 526, 5, 114, 58, 2, 525, 523, 3, 2, 2, 2, 526, 529, 3, 2, 2, 2, 527, 525, 3, 2, 2, 2, 527, 528, 3, 2, 2, 2, 528, 73, 3, 2, 2, 2, 529, 527, 3, 2, 2, 2, 530, 531, 5, 118, 60, 2, 531, 532, 7, 106, 2, 2, 532, 533, 5, 86, 44, 2, 533, 75, 3, 2, 2, 2, 534, 537, 5, 78, 40, 2, 535, 536, 7, 28, 2, 2, 536, 538, 5, 120, 61, 2, 537, 535, 3, 2, 2, 2, 537, 538, 3, 2, 2, 2, 538, 77, 3, 2, 2, 2, 539, 540, 5, 80, 41, 2, 540, 541, 7, 119, 2, 2, 541, 542, 5, 92, 47, 2, 542, 543, 7, 120, 2, 2, 543, 555, 3, 2, 2, 2, 544, 545, 7, 130, 2, 2, 545, 546, 7, 119, 2, 2, 546, 555, 7, 120, 2, 2, 547, 548, 9, 4, 2, 2, 548, 549, 7, 119, 2, 2, 549, 550, 5, 92, 47, 2, 550, 551, 7, 120, 2, 2, 551, 555, 3, 2, 2, 2, 552, 555, 5, 84, 43, 2, 553, 555, 5, 82, 42, 2, 554, 539, 3, 2, 2, 2, 554, 544, 3, 2, 2, 2, 554, 547, 3, 2, 2, 2, 554, 552, 3, 2, 2, 2, 554, 553, 3, 2, 2, 2, 555, 79, 3, 2, 2, 2, 556, 557, 9, 5, 2, 2, 557, 81, 3, 2, 2, 2, 558, 559, 7, 149, 2, 2, 559, 560, 7, 119, 2, 2, 560, 563, 5, 118, 60, 2, 561, 562, 7, 104, 2, 2, 562, 564, 5, 178, 90, 2, 563, 561, 3, 2, 2, 2, 563, 564, 3, 2, 2, 2, 564, 565, 3, 2, 2, 2, 565, 566, 7, 120, 2, 2, 566, 83, 3, 2, 2, 2, 567, 568, 7, 148, 2, 2, 568, 569, 7, 108, 2, 2, 569, 570, 5, 178, 90, 2, 570, 571, 7, 107, 2, 2, 571, 572, 7, 119, 2, 2, 572, 573, 5, 118, 60, 2, 573, 574, 7, 120, 2, 2, 574, 85, 3, 2, 2, 2, 575, 579, 5, 88, 45, 2, 576, 579, 5, 90, 46, 2, 577, 579, 5, 92, 47, 2, 578, 575, 3, 2, 2, 2, 578, 576, 3, 2, 2, 2, 578, 577, 3, 2, 2, 2, 579, 87, 3, 2, 2, 2, 580, 581, 8, 45, 1, 2, 581, 587, 5, 90, 46, 2, 582, 583, 7, 62, 2, 2, 583, 587, 5, 88, 45, 8, 584, 587, 5, 98, 50, 2, 585, 587, 5, 100, 51, 2, 586, 580, 3, 2, 2, 2, 586, 582, 3, 2, 2, 2, 586, 584, 3, 2, 2, 2, 586, 585, 3, 2, 2, 2, 587, 601, 3, 2, 2, 2, 588, 589, 12, 7, 2, 2, 589, 590, 7, 63, 2, 2, 590, 600, 5, 88, 45, 8, 591, 593, 12, 6, 2, 2, 592, 594, 7, 64, 2, 2, 593, 592, 3, 2, 2, 2, 593, 594, 3, 2, 2, 2, 594, 595, 3, 2, 2, 2, 595, 600, 5, 88, 45, 7, 596, 597, 12, 5, 2, 2, 597, 598, 7, 65, 2, 2, 598, 600, 5, 88, 45, 6, 599, 588, 3, 2, 2, 2, 599, 591, 3, 2, 2, 2, 599, 596, 3, 2, 2, 2, 600, 603, 3, 2, 2, 2, 601, 599, 3, 2, 2, 2, 601, 602, 3, 2, 2, 2, 602, 89, 3, 2, 2, 2, 603, 601, 3, 2, 2, 2, 604, 605, 5, 92, 47, 2, 605, 606, 5, 164, 83, 2, 606, 607, 5, 92, 47, 2, 607, 613, 3, 2, 2, 2, 608, 609, 5, 92, 47, 2, 609, 610, 7, 61, 2, 2, 610, 611, 5, 196, 99, 2, 611, 613, 3, 2, 2, 2, 612, 604, 3, 2, 2, 2, 612, 608, 3, 2, 2, 2, 613, 91, 3, 2, 2, 2, 614, 615, 8, 47, 1, 2, 615, 616, 7, 119, 2, 2, 616, 617, 5, 92, 47, 2, 617, 618, 5, 166, 84, 2, 618, 619, 5, 92, 47, 2, 619, 620, 7, 120, 2, 2, 620, 623, 3, 2, 2, 2, 621, 623, 5, 94, 48, 2, 622, 614, 3, 2, 2, 2, 622, 621, 3, 2, 2, 2, 623, 630, 3, 2, 2, 2, 624, 625, 12, 5, 2, 2, 625, 626, 5, 166, 84, 2, 626, 627, 5, 92, 47, 6, 627, 629, 3, 2, 2, 2, 628, 624, 3, 2, 2, 2, 629, 632, 3, 2, 2, 2, 630, 628, 3, 2, 2, 2, 630, 631, 3, 2, 2, 2, 631, 93, 3, 2, 2, 2, 632, 630, 3, 2, 2, 2, 633, 639, 5, 122, 62, 2, 634, 639, 5, 124, 63, 2, 635, 639, 5, 118, 60, 2, 636, 639, 5, 172, 87, 2, 637, 639, 5, 96, 49, 2, 638, 633, 3, 2, 2, 2, 638, 634, 3, 2, 2, 2, 638, 635, 3, 2, 2, 2, 638, 636, 3, 2, 2, 2, 638, 637, 3, 2, 2, 2, 639, 95, 3, 2, 2, 2, 640, 641, 5, 156, 79, 2, 641, 643, 7, 119, 2, 2, 642, 644, 5, 132, 67, 2, 643, 642, 3, 2, 2, 2, 643, 644, 3, 2, 2, 2, 644, 645, 3, 2, 2, 2, 645, 646, 7, 120, 2, 2, 646, 97, 3, 2, 2, 2, 647, 648, 5, 126, 64, 2, 648, 99, 3, 2, 2, 2, 649, 652, 5, 102, 52, 2, 650, 652, 5, 104, 53, 2, 651, 649, 3, 2, 2, 2, 651, 650, 3, 2, 2, 2, 652, 101, 3, 2, 2, 2, 653, 654, 5, 168, 85, 2, 654, 655, 7, 119, 2, 2, 655, 656, 5, 144, 73, 2, 656, 657, 7, 104, 2, 2, 657, 662, 5, 146, 74, 2, 658, 659, 7, 104, 2, 2, 659, 661, 5, 136, 69, 2, 660, 658, 3, 2, 2, 2, 661, 664, 3, 2, 2, 2, 662, 660, 3, 2, 2, 2, 662, 663, 3, 2, 2, 2, 663, 665, 3, 2, 2, 2, 664, 662, 3, 2, 2, 2, 665, 666, 7, 120, 2, 2, 666, 103, 3, 2, 2, 2, 667, 668, 5, 170, 86, 2, 668, 669, 7, 119, 2, 2, 669, 670, 7, 121, 2, 2, 670, 675, 5, 140, 71, 2, 671, 672, 7, 104, 2, 2, 672, 674, 5, 140, 71, 2, 673, 671, 3, 2, 2, 2, 674, 677, 3, 2, 2, 2, 675, 673, 3, 2, 2, 2, 675, 676, 3, 2, 2, 2, 676, 678, 3, 2, 2, 2, 677, 675, 3, 2, 2, 2, 678, 679, 7, 122, 2, 2, 679, 680, 7, 104, 2, 2, 680, 685, 5, 146, 74, 2, 681, 682, 7, 104, 2, 2, 682, 684, 5, 136, 69, 2, 683, 681, 3, 2, 2, 2, 684, 687, 3, 2, 2, 2, 685, 683, 3, 2, 2, 2, 685, 686, 3, 2, 2, 2, 686, 688, 3, 2, 2, 2, 687, 685, 3, 2, 2, 2, 688, 689, 7, 120, 2, 2, 689, 105, 3, 2, 2, 2, 690, 693, 5, 198, 100, 2, 691, 693, 7, 305, 2, 2, 692, 690, 3, 2, 2, 2, 692, 691, 3, 2, 2, 2, 693, 107, 3, 2, 2, 2, 694, 695, 5, 198, 100, 2, 695, 696, 7, 119, 2, 2, 696, 697, 5, 132, 67, 2, 697, 698, 7, 120, 2, 2, 698, 109, 3, 2, 2, 2, 699, 704, 5, 118, 60, 2, 700, 701, 7, 104, 2, 2, 701, 703, 5, 118, 60, 2, 702, 700, 3, 2, 2, 2, 703, 706, 3, 2, 2, 2, 704, 702, 3, 2, 2, 2, 704, 705, 3, 2, 2, 2, 705, 111, 3, 2, 2, 2, 706, 704, 3, 2, 2, 2, 707, 712, 5, 120, 61, 2, 708, 709, 7, 104, 2, 2, 709, 711, 5, 120, 61, 2, 710, 708, 3, 2, 2, 2, 711, 714, 3, 2, 2, 2, 712, 710, 3, 2, 2, 2, 712, 713, 3, 2, 2, 2, 713, 113, 3, 2, 2, 2, 714, 712, 3, 2, 2, 2, 715, 717, 9, 2, 2, 2, 716, 715, 3, 2, 2, 2, 716, 717, 3, 2, 2, 2, 717, 718, 3, 2, 2, 2, 718, 719, 5, 116, 59, 2, 719, 115, 3, 2, 2, 2, 720, 742, 5, 118, 60, 2, 721, 722, 7, 36, 2, 2, 722, 723, 7, 119, 2, 2, 723, 724, 5, 118, 60, 2, 724, 725, 7, 120, 2, 2, 725, 742, 3, 2, 2, 2, 726, 727, 7, 37, 2, 2, 727, 728, 7, 119, 2, 2, 728, 729, 5, 118, 60, 2, 729, 730, 7, 120, 2, 2, 730, 742, 3, 2, 2, 2, 731, 732, 7, 38, 2, 2, 732, 733, 7, 119, 2, 2, 733, 734, 5, 118, 60, 2, 734, 735, 7, 120, 2, 2, 735, 742, 3, 2, 2, 2, 736, 737, 7, 39, 2, 2, 737, 738, 7, 119, 2, 2, 738, 739, 5, 118, 60, 2, 739, 740, 7, 120, 2, 2, 740, 742, 3, 2, 2, 2, 741, 720, 3, 2, 2, 2, 741, 721, 3, 2, 2, 2, 741, 726, 3, 2, 2, 2, 741, 731, 3, 2, 2, 2, 741, 736, 3, 2, 2, 2, 742, 117, 3, 2, 2, 2, 743, 744, 5, 198, 100, 2, 744, 119, 3, 2, 2, 2, 745, 746, 5, 200, 101, 2, 746, 121, 3, 2, 2, 2, 747, 748, 5, 130, 66, 2, 748, 749, 7, 119, 2, 2, 749, 750, 5, 132, 67, 2, 750, 751, 7, 120, 2, 2, 751, 123, 3, 2, 2, 2, 752, 753, 7, 248, 2, 2, 753, 754, 7, 119, 2, 2, 754, 755, 5, 86, 44, 2, 755, 756, 7, 28, 2, 2, 756, 757, 5, 128, 65, 2, 757, 758, 7, 120, 2, 2, 758, 125, 3, 2, 2, 2, 759, 760, 5, 158, 80, 2, 760, 761, 7, 119, 2, 2, 761, 762, 5, 132, 67, 2, 762, 763, 7, 120, 2, 2, 763, 127, 3, 2, 2, 2, 764, 775, 7, 203, 2, 2, 765, 775, 7, 223, 2, 2, 766, 775, 7, 225, 2, 2, 767, 775, 7, 96, 2, 2, 768, 775, 7, 97, 2, 2, 769, 775, 7, 98, 2, 2, 770, 775, 7, 99, 2, 2, 771, 775, 7, 100, 2, 2, 772, 775, 7, 101, 2, 2, 773, 775, 7, 102, 2, 2, 774, 764, 3, 2, 2, 2, 774, 765, 3, 2, 2, 2, 774, 766, 3, 2, 2, 2, 774, 767, 3, 2, 2, 2, 774, 768, 3, 2, 2, 2, 774, 769, 3, 2, 2, 2, 774, 770, 3, 2, 2, 2, 774, 771, 3, 2, 2, 2, 774, 772, 3, 2, 2, 2, 774, 773, 3, 2, 2, 2, 775, 129, 3, 2, 2, 2, 776, 782, 5, 150, 76, 2, 777, 782, 5, 154, 78, 2, 778, 782, 5, 162, 82, 2, 779, 782, 5, 158, 80, 2, 780, 782, 5, 160, 81, 2, 781, 776, 3, 2, 2, 2, 781, 777, 3, 2, 2, 2, 781, 778, 3, 2, 2, 2, 781, 779, 3, 2, 2, 2, 781, 780, 3, 2, 2, 2, 782, 131, 3, 2, 2, 2, 783, 788, 5, 134, 68, 2, 784, 785, 7, 104, 2, 2, 785, 787, 5, 134, 68, 2, 786, 784, 3, 2, 2, 2, 787, 790, 3, 2, 2, 2, 788, 786, 3, 2, 2, 2, 788, 789, 3, 2, 2, 2, 789, 792, 3, 2, 2, 2, 790, 788, 3, 2, 2, 2, 791, 783, 3, 2, 2, 2, 791, 792, 3, 2, 2, 2, 792, 133, 3, 2, 2, 2, 793, 794, 5, 202, 102, 2, 794, 795, 7, 106, 2, 2, 795, 797, 3, 2, 2, 2, 796, 793, 3, 2, 2, 2, 796, 797, 3, 2, 2, 2, 797, 798, 3, 2, 2, 2, 798, 799, 5, 92, 47, 2, 799, 135, 3, 2, 2, 2, 800, 801, 5, 138, 70, 2, 801, 802, 7, 106, 2, 2, 802, 803, 5, 148, 75, 2, 803, 137, 3, 2, 2, 2, 804, 805, 9, 6, 2, 2, 805, 139, 3, 2, 2, 2, 806, 815, 5, 144, 73, 2, 807, 808, 5, 144, 73, 2, 808, 809, 5, 142, 72, 2, 809, 815, 3, 2, 2, 2, 810, 811, 5, 144, 73, 2, 811, 812, 7, 128, 2, 2, 812, 813, 5, 142, 72, 2, 813, 815, 3, 2, 2, 2, 814, 806, 3, 2, 2, 2, 814, 807, 3, 2, 2, 2, 814, 810, 3, 2, 2, 2, 815, 141, 3, 2, 2, 2, 816, 819, 5, 178, 90, 2, 817, 819, 5, 180, 91, 2, 818, 816, 3, 2, 2, 2, 818, 817, 3, 2, 2, 2, 819, 143, 3, 2, 2, 2, 820, 823, 5, 198, 100, 2, 821, 823, 5, 176, 89, 2, 822, 820, 3, 2, 2, 2, 822, 821, 3, 2, 2, 2, 823, 145, 3, 2, 2, 2, 824, 825, 5, 148, 75, 2, 825, 147, 3, 2, 2, 2, 826, 829, 5, 198, 100, 2, 827, 829, 5, 172, 87, 2, 828, 826, 3, 2, 2, 2, 828, 827, 3, 2, 2, 2, 829, 149, 3, 2, 2, 2, 830, 853, 7, 166, 2, 2, 831, 853, 7, 167, 2, 2, 832, 853, 7, 168, 2, 2, 833, 853, 7, 169, 2, 2, 834, 853, 7, 170, 2, 2, 835, 853, 7, 171, 2, 2, 836, 853, 7, 172, 2, 2, 837, 853, 7, 173, 2, 2, 838, 853, 7, 174, 2, 2, 839, 853, 7, 175, 2, 2, 840, 853, 7, 176, 2, 2, 841, 853, 7, 177, 2, 2, 842, 853, 7, 178, 2, 2, 843, 853, 7, 179, 2, 2, 844, 853, 7, 180, 2, 2, 845, 853, 7, 181, 2, 2, 846, 853, 7, 182, 2, 2, 847, 853, 7, 183, 2, 2, 848, 853, 7, 184, 2, 2, 849, 853, 7, 185, 2, 2, 850, 853, 7, 186, 2, 2, 851, 853, 5, 152, 77, 2, 852, 830, 3, 2, 2, 2, 852, 831, 3, 2, 2, 2, 852, 832, 3, 2, 2, 2, 852, 833, 3, 2, 2, 2, 852, 834, 3, 2, 2, 2, 852, 835, 3, 2, 2, 2, 852, 836, 3, 2, 2, 2, 852, 837, 3, 2, 2, 2, 852, 838, 3, 2, 2, 2, 852, 839, 3, 2, 2, 2, 852, 840, 3, 2, 2, 2, 852, 841, 3, 2, 2, 2, 852, 842, 3, 2, 2, 2, 852, 843, 3, 2, 2, 2, 852, 844, 3, 2, 2, 2, 852, 845, 3, 2, 2, 2, 852, 846, 3, 2, 2, 2, 852, 847, 3, 2, 2, 2, 852, 848, 3, 2, 2, 2, 852, 849, 3, 2, 2, 2, 852, 850, 3, 2, 2, 2, 852, 851, 3, 2, 2, 2, 853, 151, 3, 2, 2, 2, 854, 855, 9, 7, 2, 2, 855, 153, 3, 2, 2, 2, 856, 857, 9, 8, 2, 2, 857, 155, 3, 2, 2, 2, 858, 859, 9, 9, 2, 2, 859, 157, 3, 2, 2, 2, 860, 861, 9, 10, 2, 2, 861, 159, 3, 2, 2, 2, 862, 863, 7, 255, 2, 2, 863, 161, 3, 2, 2, 2, 864, 865, 9, 11, 2, 2, 865, 163, 3, 2, 2, 2, 866, 867, 9, 12, 2, 2, 867, 165, 3, 2, 2, 2, 868, 869, 9, 13, 2, 2, 869, 167, 3, 2, 2, 2, 870, 871, 9, 14, 2, 2, 871, 169, 3, 2, 2, 2, 872, 873, 9, 15, 2, 2, 873, 171, 3, 2, 2, 2, 874, 881, 5, 174, 88, 2, 875, 881, 5, 176, 89, 2, 876, 881, 5, 178, 90, 2, 877, 881, 5, 180, 91, 2, 878, 881, 5, 182, 92, 2, 879, 881, 5, 184, 93, 2, 880, 874, 3, 2, 2, 2, 880, 875, 3, 2, 2, 2, 880, 876, 3, 2, 2, 2, 880, 877, 3, 2, 2, 2, 880, 878, 3, 2, 2, 2, 880, 879, 3, 2, 2, 2, 881, 173, 3, 2, 2, 2, 882, 883, 7, 70, 2, 2, 883, 884, 5, 92, 47, 2, 884, 885, 5, 192, 97, 2, 885, 175, 3, 2, 2, 2, 886, 887, 9, 16, 2, 2, 887, 177, 3, 2, 2, 2, 888, 890, 9, 2, 2, 2, 889, 888, 3, 2, 2, 2, 889, 890, 3, 2, 2, 2, 890, 891, 3, 2, 2, 2, 891, 892, 7, 303, 2, 2, 892, 179, 3, 2, 2, 2, 893, 895, 9, 2, 2, 2, 894, 893, 3, 2, 2, 2, 894, 895, 3, 2, 2, 2, 895, 896, 3, 2, 2, 2, 896, 897, 7, 304, 2, 2, 897, 181, 3, 2, 2, 2, 898, 899, 9, 17, 2, 2, 899, 183, 3, 2, 2, 2, 900, 904, 5, 186, 94, 2, 901, 904, 5, 188, 95, 2, 902, 904, 5, 190, 96, 2, 903, 900, 3, 2, 2, 2, 903, 901, 3, 2, 2, 2, 903, 902, 3, 2, 2, 2, 904, 185, 3, 2, 2, 2, 905, 906, 7, 203, 2, 2, 906, 907, 5, 176, 89, 2, 907, 187, 3, 2, 2, 2, 908, 909, 7, 223, 2, 2, 909, 910, 5, 176, 89, 2, 910, 189, 3, 2, 2, 2, 911, 912, 7, 225, 2, 2, 912, 913, 5, 176, 89, 2, 913, 191, 3, 2, 2, 2, 914, 915, 9, 18, 2, 2, 915, 193, 3, 2, 2, 2, 916, 917, 9, 19, 2, 2, 917, 195, 3, 2, 2, 2, 918, 919, 7, 119, 2, 2, 919, 924, 5, 172, 87, 2, 920, 921, 7, 104, 2, 2, 921, 923, 5, 172, 87, 2, 922, 920, 3, 2, 2, 2, 923, 926, 3, 2, 2, 2, 924, 922, 3, 2, 2, 2, 924, 925, 3, 2, 2, 2, 925, 927, 3, 2, 2, 2, 926, 924, 3, 2, 2, 2, 927, 928, 7, 120, 2, 2, 928, 197, 3, 2, 2, 2, 929, 934, 5, 202, 102, 2, 930, 931, 7, 105, 2, 2, 931, 933, 5, 202, 102, 2, 932, 930, 3, 2, 2, 2, 933, 936, 3, 2, 2, 2, 934, 932, 3, 2, 2, 2, 934, 935, 3, 2, 2, 2, 935, 199, 3, 2, 2, 2, 936, 934, 3, 2, 2, 2, 937, 942, 5, 204, 103, 2, 938, 939, 7, 105, 2, 2, 939, 941, 5, 204, 103, 2, 940, 938, 3, 2, 2, 2, 941, 944, 3, 2, 2, 2, 942, 940, 3, 2, 2, 2, 942, 943, 3, 2, 2, 2, 943, 201, 3, 2, 2, 2, 944, 942, 3, 2, 2, 2, 945, 947, 7, 105, 2, 2, 946, 945, 3, 2, 2, 2, 946, 947, 3, 2, 2, 2, 947, 948, 3, 2, 2, 2, 948, 956, 7, 302, 2, 2, 949, 950, 7, 125, 2, 2, 950, 951, 5, 202, 102, 2, 951, 952, 7, 125, 2, 2, 952, 956, 3, 2, 2, 2, 953, 956, 7, 308, 2, 2, 954, 956, 5, 206, 104, 2, 955, 946, 3, 2, 2, 2, 955, 949, 3, 2, 2, 2, 955, 953, 3, 2, 2, 2, 955, 954, 3, 2, 2, 2, 956, 203, 3, 2, 2, 2, 957, 962, 5, 202, 102, 2, 958, 959, 7, 116, 2, 2, 959, 961, 5, 202, 102, 2, 960, 958, 3, 2, 2, 2, 961, 964, 3, 2, 2, 2, 962, 960, 3, 2, 2, 2, 962, 963, 3, 2, 2, 2, 963, 966, 3, 2, 2, 2, 964, 962, 3, 2, 2, 2, 965, 967, 7, 116, 2, 2, 966, 965, 3, 2, 2, 2, 966, 967, 3, 2, 2, 2, 967, 981, 3, 2, 2, 2, 968, 969, 7, 123, 2, 2, 969, 970, 5, 204, 103, 2, 970, 971, 7, 123, 2, 2, 971, 981, 3, 2, 2, 2, 972, 973, 7, 124, 2, 2, 973, 974, 5, 204, 103, 2, 974, 975, 7, 124, 2, 2, 975, 981, 3, 2, 2, 2, 976, 977, 7, 125, 2, 2, 977, 978, 5, 204, 103, 2, 978, 979, 7, 125, 2, 2, 979, 981, 3, 2, 2, 2, 980, 957, 3, 2, 2, 2, 980, 968, 3, 2, 2, 2, 980, 972, 3, 2, 2, 2, 980, 976, 3, 2, 2, 2, 981, 205, 3, 2, 2, 2, 982, 996, 7, 32, 2, 2, 983, 996, 5, 80, 41, 2, 984, 996, 7, 225, 2, 2, 985, 996, 7, 203, 2, 2, 986, 996, 7, 223, 2, 2, 987, 996, 7, 150, 2, 2, 988, 996, 7, 151, 2, 2, 989, 996, 5, 194, 98, 2, 990, 996, 7, 294, 2, 2, 991, 996, 5, 156, 79, 2, 992, 996, 5, 154, 78, 2, 993, 996, 5, 162, 82, 2, 994, 996, 5, 150, 76, 2, 995, 982, 3, 2, 2, 2, 995, 983, 3, 2, 2, 2, 995, 984, 3, 2, 2, 2, 995, 985, 3, 2, 2, 2, 995, 986, 3, 2, 2, 2, 995, 987, 3, 2, 2, 2, 995, 988, 3, 2, 2, 2, 995, 989, 3, 2, 2, 2, 995, 990, 3, 2, 2, 2, 995, 991, 3, 2, 2, 2, 995, 992, 3, 2, 2, 2, 995, 993, 3, 2, 2, 2, 995, 994, 3, 2, 2, 2, 996, 207, 3, 2, 2, 2, 85, 209, 218, 224, 242, 245, 249, 255, 260, 273, 283, 290, 295, 300, 307, 311, 316, 320, 326, 331, 342, 347, 351, 355, 359, 364, 378, 389, 397, 409, 415, 454, 460, 479, 486, 505, 510, 518, 527, 537, 554, 563, 578, 586, 593, 599, 601, 612, 622, 630, 638, 643, 651, 662, 675, 685, 692, 704, 712, 716, 741, 774, 781, 788, 791, 796, 814, 818, 822, 828, 852, 880, 889, 894, 903, 924, 934, 942, 946, 955, 962, 966, 980, 995] \ No newline at end of file diff --git a/dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLParser.tokens b/dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLParser.tokens new file mode 100644 index 000000000..303e66c7a --- /dev/null +++ b/dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLParser.tokens @@ -0,0 +1,603 @@ +SEARCH=1 +DESCRIBE=2 +SHOW=3 +FROM=4 +WHERE=5 +FIELDS=6 +RENAME=7 +STATS=8 +DEDUP=9 +SORT=10 +EVAL=11 +HEAD=12 +TOP=13 +RARE=14 +PARSE=15 +METHOD=16 +REGEX=17 +PUNCT=18 +GROK=19 +PATTERN=20 +PATTERNS=21 +NEW_FIELD=22 +KMEANS=23 +AD=24 +ML=25 +AS=26 +BY=27 +SOURCE=28 +INDEX=29 +D=30 +DESC=31 +CATALOGS=32 +SORTBY=33 +AUTO=34 +STR=35 +IP=36 +NUM=37 +KEEPEMPTY=38 +CONSECUTIVE=39 +DEDUP_SPLITVALUES=40 +PARTITIONS=41 +ALLNUM=42 +DELIM=43 +CENTROIDS=44 +ITERATIONS=45 +DISTANCE_TYPE=46 +NUMBER_OF_TREES=47 +SHINGLE_SIZE=48 +SAMPLE_SIZE=49 +OUTPUT_AFTER=50 +TIME_DECAY=51 +ANOMALY_RATE=52 +CATEGORY_FIELD=53 +TIME_FIELD=54 +TIME_ZONE=55 +TRAINING_DATA_SIZE=56 +ANOMALY_SCORE_THRESHOLD=57 +CASE=58 +IN=59 +NOT=60 +OR=61 +AND=62 +XOR=63 +TRUE=64 +FALSE=65 +REGEXP=66 +DATETIME=67 +INTERVAL=68 +MICROSECOND=69 +MILLISECOND=70 +SECOND=71 +MINUTE=72 +HOUR=73 +DAY=74 +WEEK=75 +MONTH=76 +QUARTER=77 +YEAR=78 +SECOND_MICROSECOND=79 +MINUTE_MICROSECOND=80 +MINUTE_SECOND=81 +HOUR_MICROSECOND=82 +HOUR_SECOND=83 +HOUR_MINUTE=84 +DAY_MICROSECOND=85 +DAY_SECOND=86 +DAY_MINUTE=87 +DAY_HOUR=88 +YEAR_MONTH=89 +CONVERT_TZ=90 +DATAMODEL=91 +LOOKUP=92 +SAVEDSEARCH=93 +INT=94 +INTEGER=95 +DOUBLE=96 +LONG=97 +FLOAT=98 +STRING=99 +BOOLEAN=100 +PIPE=101 +COMMA=102 +DOT=103 +EQUAL=104 +GREATER=105 +LESS=106 +NOT_GREATER=107 +NOT_LESS=108 +NOT_EQUAL=109 +PLUS=110 +MINUS=111 +STAR=112 +DIVIDE=113 +MODULE=114 +EXCLAMATION_SYMBOL=115 +COLON=116 +LT_PRTHS=117 +RT_PRTHS=118 +LT_SQR_PRTHS=119 +RT_SQR_PRTHS=120 +SINGLE_QUOTE=121 +DOUBLE_QUOTE=122 +BACKTICK=123 +BIT_NOT_OP=124 +BIT_AND_OP=125 +BIT_XOR_OP=126 +AVG=127 +COUNT=128 +DISTINCT_COUNT=129 +ESTDC=130 +ESTDC_ERROR=131 +MAX=132 +MEAN=133 +MEDIAN=134 +MIN=135 +MODE=136 +RANGE=137 +STDEV=138 +STDEVP=139 +SUM=140 +SUMSQ=141 +VAR_SAMP=142 +VAR_POP=143 +STDDEV_SAMP=144 +STDDEV_POP=145 +PERCENTILE=146 +TAKE=147 +FIRST=148 +LAST=149 +LIST=150 +VALUES=151 +EARLIEST=152 +EARLIEST_TIME=153 +LATEST=154 +LATEST_TIME=155 +PER_DAY=156 +PER_HOUR=157 +PER_MINUTE=158 +PER_SECOND=159 +RATE=160 +SPARKLINE=161 +C=162 +DC=163 +ABS=164 +CEIL=165 +CEILING=166 +CONV=167 +CRC32=168 +E=169 +EXP=170 +FLOOR=171 +LN=172 +LOG=173 +LOG10=174 +LOG2=175 +MOD=176 +PI=177 +POW=178 +POWER=179 +RAND=180 +ROUND=181 +SIGN=182 +SQRT=183 +TRUNCATE=184 +ACOS=185 +ASIN=186 +ATAN=187 +ATAN2=188 +COS=189 +COT=190 +DEGREES=191 +RADIANS=192 +SIN=193 +TAN=194 +ADDDATE=195 +CURDATE=196 +CURRENT_DATE=197 +CURRENT_TIME=198 +CURRENT_TIMESTAMP=199 +CURTIME=200 +DATE=201 +DATE_ADD=202 +DATE_FORMAT=203 +DATE_SUB=204 +DAYNAME=205 +DAYOFMONTH=206 +DAYOFWEEK=207 +DAYOFYEAR=208 +FROM_DAYS=209 +LOCALTIME=210 +LOCALTIMESTAMP=211 +FROM_UNIXTIME=212 +MAKEDATE=213 +MAKETIME=214 +MONTHNAME=215 +NOW=216 +PERIOD_ADD=217 +PERIOD_DIFF=218 +SUBDATE=219 +SYSDATE=220 +TIME=221 +TIME_TO_SEC=222 +TIMESTAMP=223 +TO_DAYS=224 +UTC_DATE=225 +UTC_TIME=226 +UTC_TIMESTAMP=227 +UNIX_TIMESTAMP=228 +SUBSTR=229 +SUBSTRING=230 +LTRIM=231 +RTRIM=232 +TRIM=233 +TO=234 +LOWER=235 +UPPER=236 +CONCAT=237 +CONCAT_WS=238 +LENGTH=239 +STRCMP=240 +RIGHT=241 +LEFT=242 +ASCII=243 +LOCATE=244 +REPLACE=245 +CAST=246 +LIKE=247 +ISNULL=248 +ISNOTNULL=249 +IFNULL=250 +NULLIF=251 +IF=252 +TYPEOF=253 +MATCH=254 +MATCH_PHRASE=255 +MATCH_PHRASE_PREFIX=256 +MATCH_BOOL_PREFIX=257 +SIMPLE_QUERY_STRING=258 +MULTI_MATCH=259 +QUERY_STRING=260 +ALLOW_LEADING_WILDCARD=261 +ANALYZE_WILDCARD=262 +ANALYZER=263 +AUTO_GENERATE_SYNONYMS_PHRASE_QUERY=264 +BOOST=265 +CUTOFF_FREQUENCY=266 +DEFAULT_FIELD=267 +DEFAULT_OPERATOR=268 +ENABLE_POSITION_INCREMENTS=269 +ESCAPE=270 +FLAGS=271 +FUZZY_MAX_EXPANSIONS=272 +FUZZY_PREFIX_LENGTH=273 +FUZZY_TRANSPOSITIONS=274 +FUZZY_REWRITE=275 +FUZZINESS=276 +LENIENT=277 +LOW_FREQ_OPERATOR=278 +MAX_DETERMINIZED_STATES=279 +MAX_EXPANSIONS=280 +MINIMUM_SHOULD_MATCH=281 +OPERATOR=282 +PHRASE_SLOP=283 +PREFIX_LENGTH=284 +QUOTE_ANALYZER=285 +QUOTE_FIELD_SUFFIX=286 +REWRITE=287 +SLOP=288 +TIE_BREAKER=289 +TYPE=290 +ZERO_TERMS_QUERY=291 +SPAN=292 +MS=293 +S=294 +M=295 +H=296 +W=297 +Q=298 +Y=299 +ID=300 +INTEGER_LITERAL=301 +DECIMAL_LITERAL=302 +ID_DATE_SUFFIX=303 +DQUOTA_STRING=304 +SQUOTA_STRING=305 +BQUOTA_STRING=306 +ERROR_RECOGNITION=307 +'SEARCH'=1 +'DESCRIBE'=2 +'SHOW'=3 +'FROM'=4 +'WHERE'=5 +'FIELDS'=6 +'RENAME'=7 +'STATS'=8 +'DEDUP'=9 +'SORT'=10 +'EVAL'=11 +'HEAD'=12 +'TOP'=13 +'RARE'=14 +'PARSE'=15 +'METHOD'=16 +'REGEX'=17 +'PUNCT'=18 +'GROK'=19 +'PATTERN'=20 +'PATTERNS'=21 +'NEW_FIELD'=22 +'KMEANS'=23 +'AD'=24 +'ML'=25 +'AS'=26 +'BY'=27 +'SOURCE'=28 +'INDEX'=29 +'D'=30 +'DESC'=31 +'CATALOGS'=32 +'SORTBY'=33 +'AUTO'=34 +'STR'=35 +'IP'=36 +'NUM'=37 +'KEEPEMPTY'=38 +'CONSECUTIVE'=39 +'DEDUP_SPLITVALUES'=40 +'PARTITIONS'=41 +'ALLNUM'=42 +'DELIM'=43 +'CENTROIDS'=44 +'ITERATIONS'=45 +'DISTANCE_TYPE'=46 +'NUMBER_OF_TREES'=47 +'SHINGLE_SIZE'=48 +'SAMPLE_SIZE'=49 +'OUTPUT_AFTER'=50 +'TIME_DECAY'=51 +'ANOMALY_RATE'=52 +'CATEGORY_FIELD'=53 +'TIME_FIELD'=54 +'TIME_ZONE'=55 +'TRAINING_DATA_SIZE'=56 +'ANOMALY_SCORE_THRESHOLD'=57 +'CASE'=58 +'IN'=59 +'NOT'=60 +'OR'=61 +'AND'=62 +'XOR'=63 +'TRUE'=64 +'FALSE'=65 +'REGEXP'=66 +'DATETIME'=67 +'INTERVAL'=68 +'MICROSECOND'=69 +'MILLISECOND'=70 +'SECOND'=71 +'MINUTE'=72 +'HOUR'=73 +'DAY'=74 +'WEEK'=75 +'MONTH'=76 +'QUARTER'=77 +'YEAR'=78 +'SECOND_MICROSECOND'=79 +'MINUTE_MICROSECOND'=80 +'MINUTE_SECOND'=81 +'HOUR_MICROSECOND'=82 +'HOUR_SECOND'=83 +'HOUR_MINUTE'=84 +'DAY_MICROSECOND'=85 +'DAY_SECOND'=86 +'DAY_MINUTE'=87 +'DAY_HOUR'=88 +'YEAR_MONTH'=89 +'CONVERT_TZ'=90 +'DATAMODEL'=91 +'LOOKUP'=92 +'SAVEDSEARCH'=93 +'INT'=94 +'INTEGER'=95 +'DOUBLE'=96 +'LONG'=97 +'FLOAT'=98 +'STRING'=99 +'BOOLEAN'=100 +'|'=101 +','=102 +'.'=103 +'='=104 +'>'=105 +'<'=106 +'+'=110 +'-'=111 +'*'=112 +'/'=113 +'%'=114 +'!'=115 +':'=116 +'('=117 +')'=118 +'['=119 +']'=120 +'\''=121 +'"'=122 +'`'=123 +'~'=124 +'&'=125 +'^'=126 +'AVG'=127 +'COUNT'=128 +'DISTINCT_COUNT'=129 +'ESTDC'=130 +'ESTDC_ERROR'=131 +'MAX'=132 +'MEAN'=133 +'MEDIAN'=134 +'MIN'=135 +'MODE'=136 +'RANGE'=137 +'STDEV'=138 +'STDEVP'=139 +'SUM'=140 +'SUMSQ'=141 +'VAR_SAMP'=142 +'VAR_POP'=143 +'STDDEV_SAMP'=144 +'STDDEV_POP'=145 +'PERCENTILE'=146 +'TAKE'=147 +'FIRST'=148 +'LAST'=149 +'LIST'=150 +'VALUES'=151 +'EARLIEST'=152 +'EARLIEST_TIME'=153 +'LATEST'=154 +'LATEST_TIME'=155 +'PER_DAY'=156 +'PER_HOUR'=157 +'PER_MINUTE'=158 +'PER_SECOND'=159 +'RATE'=160 +'SPARKLINE'=161 +'C'=162 +'DC'=163 +'ABS'=164 +'CEIL'=165 +'CEILING'=166 +'CONV'=167 +'CRC32'=168 +'E'=169 +'EXP'=170 +'FLOOR'=171 +'LN'=172 +'LOG'=173 +'LOG10'=174 +'LOG2'=175 +'MOD'=176 +'PI'=177 +'POW'=178 +'POWER'=179 +'RAND'=180 +'ROUND'=181 +'SIGN'=182 +'SQRT'=183 +'TRUNCATE'=184 +'ACOS'=185 +'ASIN'=186 +'ATAN'=187 +'ATAN2'=188 +'COS'=189 +'COT'=190 +'DEGREES'=191 +'RADIANS'=192 +'SIN'=193 +'TAN'=194 +'ADDDATE'=195 +'CURDATE'=196 +'CURRENT_DATE'=197 +'CURRENT_TIME'=198 +'CURRENT_TIMESTAMP'=199 +'CURTIME'=200 +'DATE'=201 +'DATE_ADD'=202 +'DATE_FORMAT'=203 +'DATE_SUB'=204 +'DAYNAME'=205 +'DAYOFMONTH'=206 +'DAYOFWEEK'=207 +'DAYOFYEAR'=208 +'FROM_DAYS'=209 +'LOCALTIME'=210 +'LOCALTIMESTAMP'=211 +'FROM_UNIXTIME'=212 +'MAKEDATE'=213 +'MAKETIME'=214 +'MONTHNAME'=215 +'NOW'=216 +'PERIOD_ADD'=217 +'PERIOD_DIFF'=218 +'SUBDATE'=219 +'SYSDATE'=220 +'TIME'=221 +'TIME_TO_SEC'=222 +'TIMESTAMP'=223 +'TO_DAYS'=224 +'UTC_DATE'=225 +'UTC_TIME'=226 +'UTC_TIMESTAMP'=227 +'UNIX_TIMESTAMP'=228 +'SUBSTR'=229 +'SUBSTRING'=230 +'LTRIM'=231 +'RTRIM'=232 +'TRIM'=233 +'TO'=234 +'LOWER'=235 +'UPPER'=236 +'CONCAT'=237 +'CONCAT_WS'=238 +'LENGTH'=239 +'STRCMP'=240 +'RIGHT'=241 +'LEFT'=242 +'ASCII'=243 +'LOCATE'=244 +'REPLACE'=245 +'CAST'=246 +'LIKE'=247 +'ISNULL'=248 +'ISNOTNULL'=249 +'IFNULL'=250 +'NULLIF'=251 +'IF'=252 +'TYPEOF'=253 +'MATCH'=254 +'MATCH_PHRASE'=255 +'MATCH_PHRASE_PREFIX'=256 +'MATCH_BOOL_PREFIX'=257 +'SIMPLE_QUERY_STRING'=258 +'MULTI_MATCH'=259 +'QUERY_STRING'=260 +'ALLOW_LEADING_WILDCARD'=261 +'ANALYZE_WILDCARD'=262 +'ANALYZER'=263 +'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY'=264 +'BOOST'=265 +'CUTOFF_FREQUENCY'=266 +'DEFAULT_FIELD'=267 +'DEFAULT_OPERATOR'=268 +'ENABLE_POSITION_INCREMENTS'=269 +'ESCAPE'=270 +'FLAGS'=271 +'FUZZY_MAX_EXPANSIONS'=272 +'FUZZY_PREFIX_LENGTH'=273 +'FUZZY_TRANSPOSITIONS'=274 +'FUZZY_REWRITE'=275 +'FUZZINESS'=276 +'LENIENT'=277 +'LOW_FREQ_OPERATOR'=278 +'MAX_DETERMINIZED_STATES'=279 +'MAX_EXPANSIONS'=280 +'MINIMUM_SHOULD_MATCH'=281 +'OPERATOR'=282 +'PHRASE_SLOP'=283 +'PREFIX_LENGTH'=284 +'QUOTE_ANALYZER'=285 +'QUOTE_FIELD_SUFFIX'=286 +'REWRITE'=287 +'SLOP'=288 +'TIE_BREAKER'=289 +'TYPE'=290 +'ZERO_TERMS_QUERY'=291 +'SPAN'=292 +'MS'=293 +'S'=294 +'M'=295 +'H'=296 +'W'=297 +'Q'=298 +'Y'=299 diff --git a/dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLParser.ts b/dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLParser.ts new file mode 100644 index 000000000..88d1a7e63 --- /dev/null +++ b/dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLParser.ts @@ -0,0 +1,11912 @@ +// Generated from ./common/query_manager/antlr/grammar/OpenSearchPPLParser.g4 by ANTLR 4.9.0-SNAPSHOT + + +import { ATN } from "antlr4ts/atn/ATN"; +import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; +import { FailedPredicateException } from "antlr4ts/FailedPredicateException"; +import { NotNull } from "antlr4ts/Decorators"; +import { NoViableAltException } from "antlr4ts/NoViableAltException"; +import { Override } from "antlr4ts/Decorators"; +import { Parser } from "antlr4ts/Parser"; +import { ParserRuleContext } from "antlr4ts/ParserRuleContext"; +import { ParserATNSimulator } from "antlr4ts/atn/ParserATNSimulator"; +import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; +import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; +import { RecognitionException } from "antlr4ts/RecognitionException"; +import { RuleContext } from "antlr4ts/RuleContext"; +//import { RuleVersion } from "antlr4ts/RuleVersion"; +import { TerminalNode } from "antlr4ts/tree/TerminalNode"; +import { Token } from "antlr4ts/Token"; +import { TokenStream } from "antlr4ts/TokenStream"; +import { Vocabulary } from "antlr4ts/Vocabulary"; +import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; + +import * as Utils from "antlr4ts/misc/Utils"; + +import { OpenSearchPPLParserListener } from "./OpenSearchPPLParserListener"; +import { OpenSearchPPLParserVisitor } from "./OpenSearchPPLParserVisitor"; + + +export class OpenSearchPPLParser extends Parser { + public static readonly SEARCH = 1; + public static readonly DESCRIBE = 2; + public static readonly SHOW = 3; + public static readonly FROM = 4; + public static readonly WHERE = 5; + public static readonly FIELDS = 6; + public static readonly RENAME = 7; + public static readonly STATS = 8; + public static readonly DEDUP = 9; + public static readonly SORT = 10; + public static readonly EVAL = 11; + public static readonly HEAD = 12; + public static readonly TOP = 13; + public static readonly RARE = 14; + public static readonly PARSE = 15; + public static readonly METHOD = 16; + public static readonly REGEX = 17; + public static readonly PUNCT = 18; + public static readonly GROK = 19; + public static readonly PATTERN = 20; + public static readonly PATTERNS = 21; + public static readonly NEW_FIELD = 22; + public static readonly KMEANS = 23; + public static readonly AD = 24; + public static readonly ML = 25; + public static readonly AS = 26; + public static readonly BY = 27; + public static readonly SOURCE = 28; + public static readonly INDEX = 29; + public static readonly D = 30; + public static readonly DESC = 31; + public static readonly CATALOGS = 32; + public static readonly SORTBY = 33; + public static readonly AUTO = 34; + public static readonly STR = 35; + public static readonly IP = 36; + public static readonly NUM = 37; + public static readonly KEEPEMPTY = 38; + public static readonly CONSECUTIVE = 39; + public static readonly DEDUP_SPLITVALUES = 40; + public static readonly PARTITIONS = 41; + public static readonly ALLNUM = 42; + public static readonly DELIM = 43; + public static readonly CENTROIDS = 44; + public static readonly ITERATIONS = 45; + public static readonly DISTANCE_TYPE = 46; + public static readonly NUMBER_OF_TREES = 47; + public static readonly SHINGLE_SIZE = 48; + public static readonly SAMPLE_SIZE = 49; + public static readonly OUTPUT_AFTER = 50; + public static readonly TIME_DECAY = 51; + public static readonly ANOMALY_RATE = 52; + public static readonly CATEGORY_FIELD = 53; + public static readonly TIME_FIELD = 54; + public static readonly TIME_ZONE = 55; + public static readonly TRAINING_DATA_SIZE = 56; + public static readonly ANOMALY_SCORE_THRESHOLD = 57; + public static readonly CASE = 58; + public static readonly IN = 59; + public static readonly NOT = 60; + public static readonly OR = 61; + public static readonly AND = 62; + public static readonly XOR = 63; + public static readonly TRUE = 64; + public static readonly FALSE = 65; + public static readonly REGEXP = 66; + public static readonly DATETIME = 67; + public static readonly INTERVAL = 68; + public static readonly MICROSECOND = 69; + public static readonly MILLISECOND = 70; + public static readonly SECOND = 71; + public static readonly MINUTE = 72; + public static readonly HOUR = 73; + public static readonly DAY = 74; + public static readonly WEEK = 75; + public static readonly MONTH = 76; + public static readonly QUARTER = 77; + public static readonly YEAR = 78; + public static readonly SECOND_MICROSECOND = 79; + public static readonly MINUTE_MICROSECOND = 80; + public static readonly MINUTE_SECOND = 81; + public static readonly HOUR_MICROSECOND = 82; + public static readonly HOUR_SECOND = 83; + public static readonly HOUR_MINUTE = 84; + public static readonly DAY_MICROSECOND = 85; + public static readonly DAY_SECOND = 86; + public static readonly DAY_MINUTE = 87; + public static readonly DAY_HOUR = 88; + public static readonly YEAR_MONTH = 89; + public static readonly CONVERT_TZ = 90; + public static readonly DATAMODEL = 91; + public static readonly LOOKUP = 92; + public static readonly SAVEDSEARCH = 93; + public static readonly INT = 94; + public static readonly INTEGER = 95; + public static readonly DOUBLE = 96; + public static readonly LONG = 97; + public static readonly FLOAT = 98; + public static readonly STRING = 99; + public static readonly BOOLEAN = 100; + public static readonly PIPE = 101; + public static readonly COMMA = 102; + public static readonly DOT = 103; + public static readonly EQUAL = 104; + public static readonly GREATER = 105; + public static readonly LESS = 106; + public static readonly NOT_GREATER = 107; + public static readonly NOT_LESS = 108; + public static readonly NOT_EQUAL = 109; + public static readonly PLUS = 110; + public static readonly MINUS = 111; + public static readonly STAR = 112; + public static readonly DIVIDE = 113; + public static readonly MODULE = 114; + public static readonly EXCLAMATION_SYMBOL = 115; + public static readonly COLON = 116; + public static readonly LT_PRTHS = 117; + public static readonly RT_PRTHS = 118; + public static readonly LT_SQR_PRTHS = 119; + public static readonly RT_SQR_PRTHS = 120; + public static readonly SINGLE_QUOTE = 121; + public static readonly DOUBLE_QUOTE = 122; + public static readonly BACKTICK = 123; + public static readonly BIT_NOT_OP = 124; + public static readonly BIT_AND_OP = 125; + public static readonly BIT_XOR_OP = 126; + public static readonly AVG = 127; + public static readonly COUNT = 128; + public static readonly DISTINCT_COUNT = 129; + public static readonly ESTDC = 130; + public static readonly ESTDC_ERROR = 131; + public static readonly MAX = 132; + public static readonly MEAN = 133; + public static readonly MEDIAN = 134; + public static readonly MIN = 135; + public static readonly MODE = 136; + public static readonly RANGE = 137; + public static readonly STDEV = 138; + public static readonly STDEVP = 139; + public static readonly SUM = 140; + public static readonly SUMSQ = 141; + public static readonly VAR_SAMP = 142; + public static readonly VAR_POP = 143; + public static readonly STDDEV_SAMP = 144; + public static readonly STDDEV_POP = 145; + public static readonly PERCENTILE = 146; + public static readonly TAKE = 147; + public static readonly FIRST = 148; + public static readonly LAST = 149; + public static readonly LIST = 150; + public static readonly VALUES = 151; + public static readonly EARLIEST = 152; + public static readonly EARLIEST_TIME = 153; + public static readonly LATEST = 154; + public static readonly LATEST_TIME = 155; + public static readonly PER_DAY = 156; + public static readonly PER_HOUR = 157; + public static readonly PER_MINUTE = 158; + public static readonly PER_SECOND = 159; + public static readonly RATE = 160; + public static readonly SPARKLINE = 161; + public static readonly C = 162; + public static readonly DC = 163; + public static readonly ABS = 164; + public static readonly CEIL = 165; + public static readonly CEILING = 166; + public static readonly CONV = 167; + public static readonly CRC32 = 168; + public static readonly E = 169; + public static readonly EXP = 170; + public static readonly FLOOR = 171; + public static readonly LN = 172; + public static readonly LOG = 173; + public static readonly LOG10 = 174; + public static readonly LOG2 = 175; + public static readonly MOD = 176; + public static readonly PI = 177; + public static readonly POW = 178; + public static readonly POWER = 179; + public static readonly RAND = 180; + public static readonly ROUND = 181; + public static readonly SIGN = 182; + public static readonly SQRT = 183; + public static readonly TRUNCATE = 184; + public static readonly ACOS = 185; + public static readonly ASIN = 186; + public static readonly ATAN = 187; + public static readonly ATAN2 = 188; + public static readonly COS = 189; + public static readonly COT = 190; + public static readonly DEGREES = 191; + public static readonly RADIANS = 192; + public static readonly SIN = 193; + public static readonly TAN = 194; + public static readonly ADDDATE = 195; + public static readonly CURDATE = 196; + public static readonly CURRENT_DATE = 197; + public static readonly CURRENT_TIME = 198; + public static readonly CURRENT_TIMESTAMP = 199; + public static readonly CURTIME = 200; + public static readonly DATE = 201; + public static readonly DATE_ADD = 202; + public static readonly DATE_FORMAT = 203; + public static readonly DATE_SUB = 204; + public static readonly DAYNAME = 205; + public static readonly DAYOFMONTH = 206; + public static readonly DAYOFWEEK = 207; + public static readonly DAYOFYEAR = 208; + public static readonly FROM_DAYS = 209; + public static readonly LOCALTIME = 210; + public static readonly LOCALTIMESTAMP = 211; + public static readonly FROM_UNIXTIME = 212; + public static readonly MAKEDATE = 213; + public static readonly MAKETIME = 214; + public static readonly MONTHNAME = 215; + public static readonly NOW = 216; + public static readonly PERIOD_ADD = 217; + public static readonly PERIOD_DIFF = 218; + public static readonly SUBDATE = 219; + public static readonly SYSDATE = 220; + public static readonly TIME = 221; + public static readonly TIME_TO_SEC = 222; + public static readonly TIMESTAMP = 223; + public static readonly TO_DAYS = 224; + public static readonly UTC_DATE = 225; + public static readonly UTC_TIME = 226; + public static readonly UTC_TIMESTAMP = 227; + public static readonly UNIX_TIMESTAMP = 228; + public static readonly SUBSTR = 229; + public static readonly SUBSTRING = 230; + public static readonly LTRIM = 231; + public static readonly RTRIM = 232; + public static readonly TRIM = 233; + public static readonly TO = 234; + public static readonly LOWER = 235; + public static readonly UPPER = 236; + public static readonly CONCAT = 237; + public static readonly CONCAT_WS = 238; + public static readonly LENGTH = 239; + public static readonly STRCMP = 240; + public static readonly RIGHT = 241; + public static readonly LEFT = 242; + public static readonly ASCII = 243; + public static readonly LOCATE = 244; + public static readonly REPLACE = 245; + public static readonly CAST = 246; + public static readonly LIKE = 247; + public static readonly ISNULL = 248; + public static readonly ISNOTNULL = 249; + public static readonly IFNULL = 250; + public static readonly NULLIF = 251; + public static readonly IF = 252; + public static readonly TYPEOF = 253; + public static readonly MATCH = 254; + public static readonly MATCH_PHRASE = 255; + public static readonly MATCH_PHRASE_PREFIX = 256; + public static readonly MATCH_BOOL_PREFIX = 257; + public static readonly SIMPLE_QUERY_STRING = 258; + public static readonly MULTI_MATCH = 259; + public static readonly QUERY_STRING = 260; + public static readonly ALLOW_LEADING_WILDCARD = 261; + public static readonly ANALYZE_WILDCARD = 262; + public static readonly ANALYZER = 263; + public static readonly AUTO_GENERATE_SYNONYMS_PHRASE_QUERY = 264; + public static readonly BOOST = 265; + public static readonly CUTOFF_FREQUENCY = 266; + public static readonly DEFAULT_FIELD = 267; + public static readonly DEFAULT_OPERATOR = 268; + public static readonly ENABLE_POSITION_INCREMENTS = 269; + public static readonly ESCAPE = 270; + public static readonly FLAGS = 271; + public static readonly FUZZY_MAX_EXPANSIONS = 272; + public static readonly FUZZY_PREFIX_LENGTH = 273; + public static readonly FUZZY_TRANSPOSITIONS = 274; + public static readonly FUZZY_REWRITE = 275; + public static readonly FUZZINESS = 276; + public static readonly LENIENT = 277; + public static readonly LOW_FREQ_OPERATOR = 278; + public static readonly MAX_DETERMINIZED_STATES = 279; + public static readonly MAX_EXPANSIONS = 280; + public static readonly MINIMUM_SHOULD_MATCH = 281; + public static readonly OPERATOR = 282; + public static readonly PHRASE_SLOP = 283; + public static readonly PREFIX_LENGTH = 284; + public static readonly QUOTE_ANALYZER = 285; + public static readonly QUOTE_FIELD_SUFFIX = 286; + public static readonly REWRITE = 287; + public static readonly SLOP = 288; + public static readonly TIE_BREAKER = 289; + public static readonly TYPE = 290; + public static readonly ZERO_TERMS_QUERY = 291; + public static readonly SPAN = 292; + public static readonly MS = 293; + public static readonly S = 294; + public static readonly M = 295; + public static readonly H = 296; + public static readonly W = 297; + public static readonly Q = 298; + public static readonly Y = 299; + public static readonly ID = 300; + public static readonly INTEGER_LITERAL = 301; + public static readonly DECIMAL_LITERAL = 302; + public static readonly ID_DATE_SUFFIX = 303; + public static readonly DQUOTA_STRING = 304; + public static readonly SQUOTA_STRING = 305; + public static readonly BQUOTA_STRING = 306; + public static readonly ERROR_RECOGNITION = 307; + public static readonly RULE_root = 0; + public static readonly RULE_pplStatement = 1; + public static readonly RULE_pplCommands = 2; + public static readonly RULE_commands = 3; + public static readonly RULE_searchCommand = 4; + public static readonly RULE_describeCommand = 5; + public static readonly RULE_showCatalogsCommand = 6; + public static readonly RULE_whereCommand = 7; + public static readonly RULE_fieldsCommand = 8; + public static readonly RULE_renameCommand = 9; + public static readonly RULE_statsCommand = 10; + public static readonly RULE_dedupCommand = 11; + public static readonly RULE_sortCommand = 12; + public static readonly RULE_evalCommand = 13; + public static readonly RULE_headCommand = 14; + public static readonly RULE_topCommand = 15; + public static readonly RULE_rareCommand = 16; + public static readonly RULE_grokCommand = 17; + public static readonly RULE_parseCommand = 18; + public static readonly RULE_patternsCommand = 19; + public static readonly RULE_patternsParameter = 20; + public static readonly RULE_patternsMethod = 21; + public static readonly RULE_kmeansCommand = 22; + public static readonly RULE_kmeansParameter = 23; + public static readonly RULE_adCommand = 24; + public static readonly RULE_adParameter = 25; + public static readonly RULE_mlCommand = 26; + public static readonly RULE_mlArg = 27; + public static readonly RULE_fromClause = 28; + public static readonly RULE_tableSourceClause = 29; + public static readonly RULE_renameClasue = 30; + public static readonly RULE_byClause = 31; + public static readonly RULE_statsByClause = 32; + public static readonly RULE_bySpanClause = 33; + public static readonly RULE_spanClause = 34; + public static readonly RULE_sortbyClause = 35; + public static readonly RULE_evalClause = 36; + public static readonly RULE_statsAggTerm = 37; + public static readonly RULE_statsFunction = 38; + public static readonly RULE_statsFunctionName = 39; + public static readonly RULE_takeAggFunction = 40; + public static readonly RULE_percentileAggFunction = 41; + public static readonly RULE_expression = 42; + public static readonly RULE_logicalExpression = 43; + public static readonly RULE_comparisonExpression = 44; + public static readonly RULE_valueExpression = 45; + public static readonly RULE_primaryExpression = 46; + public static readonly RULE_constantFunction = 47; + public static readonly RULE_booleanExpression = 48; + public static readonly RULE_relevanceExpression = 49; + public static readonly RULE_singleFieldRelevanceFunction = 50; + public static readonly RULE_multiFieldRelevanceFunction = 51; + public static readonly RULE_tableSource = 52; + public static readonly RULE_tableFunction = 53; + public static readonly RULE_fieldList = 54; + public static readonly RULE_wcFieldList = 55; + public static readonly RULE_sortField = 56; + public static readonly RULE_sortFieldExpression = 57; + public static readonly RULE_fieldExpression = 58; + public static readonly RULE_wcFieldExpression = 59; + public static readonly RULE_evalFunctionCall = 60; + public static readonly RULE_dataTypeFunctionCall = 61; + public static readonly RULE_booleanFunctionCall = 62; + public static readonly RULE_convertedDataType = 63; + public static readonly RULE_evalFunctionName = 64; + public static readonly RULE_functionArgs = 65; + public static readonly RULE_functionArg = 66; + public static readonly RULE_relevanceArg = 67; + public static readonly RULE_relevanceArgName = 68; + public static readonly RULE_relevanceFieldAndWeight = 69; + public static readonly RULE_relevanceFieldWeight = 70; + public static readonly RULE_relevanceField = 71; + public static readonly RULE_relevanceQuery = 72; + public static readonly RULE_relevanceArgValue = 73; + public static readonly RULE_mathematicalFunctionBase = 74; + public static readonly RULE_trigonometricFunctionName = 75; + public static readonly RULE_dateAndTimeFunctionBase = 76; + public static readonly RULE_constantFunctionName = 77; + public static readonly RULE_conditionFunctionBase = 78; + public static readonly RULE_systemFunctionBase = 79; + public static readonly RULE_textFunctionBase = 80; + public static readonly RULE_comparisonOperator = 81; + public static readonly RULE_binaryOperator = 82; + public static readonly RULE_singleFieldRelevanceFunctionName = 83; + public static readonly RULE_multiFieldRelevanceFunctionName = 84; + public static readonly RULE_literalValue = 85; + public static readonly RULE_intervalLiteral = 86; + public static readonly RULE_stringLiteral = 87; + public static readonly RULE_integerLiteral = 88; + public static readonly RULE_decimalLiteral = 89; + public static readonly RULE_booleanLiteral = 90; + public static readonly RULE_datetimeLiteral = 91; + public static readonly RULE_dateLiteral = 92; + public static readonly RULE_timeLiteral = 93; + public static readonly RULE_timestampLiteral = 94; + public static readonly RULE_intervalUnit = 95; + public static readonly RULE_timespanUnit = 96; + public static readonly RULE_valueList = 97; + public static readonly RULE_qualifiedName = 98; + public static readonly RULE_wcQualifiedName = 99; + public static readonly RULE_ident = 100; + public static readonly RULE_wildcard = 101; + public static readonly RULE_keywordsCanBeId = 102; + // tslint:disable:no-trailing-whitespace + public static readonly ruleNames: string[] = [ + "root", "pplStatement", "pplCommands", "commands", "searchCommand", "describeCommand", + "showCatalogsCommand", "whereCommand", "fieldsCommand", "renameCommand", + "statsCommand", "dedupCommand", "sortCommand", "evalCommand", "headCommand", + "topCommand", "rareCommand", "grokCommand", "parseCommand", "patternsCommand", + "patternsParameter", "patternsMethod", "kmeansCommand", "kmeansParameter", + "adCommand", "adParameter", "mlCommand", "mlArg", "fromClause", "tableSourceClause", + "renameClasue", "byClause", "statsByClause", "bySpanClause", "spanClause", + "sortbyClause", "evalClause", "statsAggTerm", "statsFunction", "statsFunctionName", + "takeAggFunction", "percentileAggFunction", "expression", "logicalExpression", + "comparisonExpression", "valueExpression", "primaryExpression", "constantFunction", + "booleanExpression", "relevanceExpression", "singleFieldRelevanceFunction", + "multiFieldRelevanceFunction", "tableSource", "tableFunction", "fieldList", + "wcFieldList", "sortField", "sortFieldExpression", "fieldExpression", + "wcFieldExpression", "evalFunctionCall", "dataTypeFunctionCall", "booleanFunctionCall", + "convertedDataType", "evalFunctionName", "functionArgs", "functionArg", + "relevanceArg", "relevanceArgName", "relevanceFieldAndWeight", "relevanceFieldWeight", + "relevanceField", "relevanceQuery", "relevanceArgValue", "mathematicalFunctionBase", + "trigonometricFunctionName", "dateAndTimeFunctionBase", "constantFunctionName", + "conditionFunctionBase", "systemFunctionBase", "textFunctionBase", "comparisonOperator", + "binaryOperator", "singleFieldRelevanceFunctionName", "multiFieldRelevanceFunctionName", + "literalValue", "intervalLiteral", "stringLiteral", "integerLiteral", + "decimalLiteral", "booleanLiteral", "datetimeLiteral", "dateLiteral", + "timeLiteral", "timestampLiteral", "intervalUnit", "timespanUnit", "valueList", + "qualifiedName", "wcQualifiedName", "ident", "wildcard", "keywordsCanBeId", + ]; + + private static readonly _LITERAL_NAMES: Array = [ + undefined, "'SEARCH'", "'DESCRIBE'", "'SHOW'", "'FROM'", "'WHERE'", "'FIELDS'", + "'RENAME'", "'STATS'", "'DEDUP'", "'SORT'", "'EVAL'", "'HEAD'", "'TOP'", + "'RARE'", "'PARSE'", "'METHOD'", "'REGEX'", "'PUNCT'", "'GROK'", "'PATTERN'", + "'PATTERNS'", "'NEW_FIELD'", "'KMEANS'", "'AD'", "'ML'", "'AS'", "'BY'", + "'SOURCE'", "'INDEX'", "'D'", "'DESC'", "'CATALOGS'", "'SORTBY'", "'AUTO'", + "'STR'", "'IP'", "'NUM'", "'KEEPEMPTY'", "'CONSECUTIVE'", "'DEDUP_SPLITVALUES'", + "'PARTITIONS'", "'ALLNUM'", "'DELIM'", "'CENTROIDS'", "'ITERATIONS'", + "'DISTANCE_TYPE'", "'NUMBER_OF_TREES'", "'SHINGLE_SIZE'", "'SAMPLE_SIZE'", + "'OUTPUT_AFTER'", "'TIME_DECAY'", "'ANOMALY_RATE'", "'CATEGORY_FIELD'", + "'TIME_FIELD'", "'TIME_ZONE'", "'TRAINING_DATA_SIZE'", "'ANOMALY_SCORE_THRESHOLD'", + "'CASE'", "'IN'", "'NOT'", "'OR'", "'AND'", "'XOR'", "'TRUE'", "'FALSE'", + "'REGEXP'", "'DATETIME'", "'INTERVAL'", "'MICROSECOND'", "'MILLISECOND'", + "'SECOND'", "'MINUTE'", "'HOUR'", "'DAY'", "'WEEK'", "'MONTH'", "'QUARTER'", + "'YEAR'", "'SECOND_MICROSECOND'", "'MINUTE_MICROSECOND'", "'MINUTE_SECOND'", + "'HOUR_MICROSECOND'", "'HOUR_SECOND'", "'HOUR_MINUTE'", "'DAY_MICROSECOND'", + "'DAY_SECOND'", "'DAY_MINUTE'", "'DAY_HOUR'", "'YEAR_MONTH'", "'CONVERT_TZ'", + "'DATAMODEL'", "'LOOKUP'", "'SAVEDSEARCH'", "'INT'", "'INTEGER'", "'DOUBLE'", + "'LONG'", "'FLOAT'", "'STRING'", "'BOOLEAN'", "'|'", "','", "'.'", "'='", + "'>'", "'<'", undefined, undefined, undefined, "'+'", "'-'", "'*'", "'/'", + "'%'", "'!'", "':'", "'('", "')'", "'['", "']'", "'''", "'\"'", "'`'", + "'~'", "'&'", "'^'", "'AVG'", "'COUNT'", "'DISTINCT_COUNT'", "'ESTDC'", + "'ESTDC_ERROR'", "'MAX'", "'MEAN'", "'MEDIAN'", "'MIN'", "'MODE'", "'RANGE'", + "'STDEV'", "'STDEVP'", "'SUM'", "'SUMSQ'", "'VAR_SAMP'", "'VAR_POP'", + "'STDDEV_SAMP'", "'STDDEV_POP'", "'PERCENTILE'", "'TAKE'", "'FIRST'", + "'LAST'", "'LIST'", "'VALUES'", "'EARLIEST'", "'EARLIEST_TIME'", "'LATEST'", + "'LATEST_TIME'", "'PER_DAY'", "'PER_HOUR'", "'PER_MINUTE'", "'PER_SECOND'", + "'RATE'", "'SPARKLINE'", "'C'", "'DC'", "'ABS'", "'CEIL'", "'CEILING'", + "'CONV'", "'CRC32'", "'E'", "'EXP'", "'FLOOR'", "'LN'", "'LOG'", "'LOG10'", + "'LOG2'", "'MOD'", "'PI'", "'POW'", "'POWER'", "'RAND'", "'ROUND'", "'SIGN'", + "'SQRT'", "'TRUNCATE'", "'ACOS'", "'ASIN'", "'ATAN'", "'ATAN2'", "'COS'", + "'COT'", "'DEGREES'", "'RADIANS'", "'SIN'", "'TAN'", "'ADDDATE'", "'CURDATE'", + "'CURRENT_DATE'", "'CURRENT_TIME'", "'CURRENT_TIMESTAMP'", "'CURTIME'", + "'DATE'", "'DATE_ADD'", "'DATE_FORMAT'", "'DATE_SUB'", "'DAYNAME'", "'DAYOFMONTH'", + "'DAYOFWEEK'", "'DAYOFYEAR'", "'FROM_DAYS'", "'LOCALTIME'", "'LOCALTIMESTAMP'", + "'FROM_UNIXTIME'", "'MAKEDATE'", "'MAKETIME'", "'MONTHNAME'", "'NOW'", + "'PERIOD_ADD'", "'PERIOD_DIFF'", "'SUBDATE'", "'SYSDATE'", "'TIME'", "'TIME_TO_SEC'", + "'TIMESTAMP'", "'TO_DAYS'", "'UTC_DATE'", "'UTC_TIME'", "'UTC_TIMESTAMP'", + "'UNIX_TIMESTAMP'", "'SUBSTR'", "'SUBSTRING'", "'LTRIM'", "'RTRIM'", "'TRIM'", + "'TO'", "'LOWER'", "'UPPER'", "'CONCAT'", "'CONCAT_WS'", "'LENGTH'", "'STRCMP'", + "'RIGHT'", "'LEFT'", "'ASCII'", "'LOCATE'", "'REPLACE'", "'CAST'", "'LIKE'", + "'ISNULL'", "'ISNOTNULL'", "'IFNULL'", "'NULLIF'", "'IF'", "'TYPEOF'", + "'MATCH'", "'MATCH_PHRASE'", "'MATCH_PHRASE_PREFIX'", "'MATCH_BOOL_PREFIX'", + "'SIMPLE_QUERY_STRING'", "'MULTI_MATCH'", "'QUERY_STRING'", "'ALLOW_LEADING_WILDCARD'", + "'ANALYZE_WILDCARD'", "'ANALYZER'", "'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY'", + "'BOOST'", "'CUTOFF_FREQUENCY'", "'DEFAULT_FIELD'", "'DEFAULT_OPERATOR'", + "'ENABLE_POSITION_INCREMENTS'", "'ESCAPE'", "'FLAGS'", "'FUZZY_MAX_EXPANSIONS'", + "'FUZZY_PREFIX_LENGTH'", "'FUZZY_TRANSPOSITIONS'", "'FUZZY_REWRITE'", + "'FUZZINESS'", "'LENIENT'", "'LOW_FREQ_OPERATOR'", "'MAX_DETERMINIZED_STATES'", + "'MAX_EXPANSIONS'", "'MINIMUM_SHOULD_MATCH'", "'OPERATOR'", "'PHRASE_SLOP'", + "'PREFIX_LENGTH'", "'QUOTE_ANALYZER'", "'QUOTE_FIELD_SUFFIX'", "'REWRITE'", + "'SLOP'", "'TIE_BREAKER'", "'TYPE'", "'ZERO_TERMS_QUERY'", "'SPAN'", "'MS'", + "'S'", "'M'", "'H'", "'W'", "'Q'", "'Y'", + ]; + private static readonly _SYMBOLIC_NAMES: Array = [ + undefined, "SEARCH", "DESCRIBE", "SHOW", "FROM", "WHERE", "FIELDS", "RENAME", + "STATS", "DEDUP", "SORT", "EVAL", "HEAD", "TOP", "RARE", "PARSE", "METHOD", + "REGEX", "PUNCT", "GROK", "PATTERN", "PATTERNS", "NEW_FIELD", "KMEANS", + "AD", "ML", "AS", "BY", "SOURCE", "INDEX", "D", "DESC", "CATALOGS", "SORTBY", + "AUTO", "STR", "IP", "NUM", "KEEPEMPTY", "CONSECUTIVE", "DEDUP_SPLITVALUES", + "PARTITIONS", "ALLNUM", "DELIM", "CENTROIDS", "ITERATIONS", "DISTANCE_TYPE", + "NUMBER_OF_TREES", "SHINGLE_SIZE", "SAMPLE_SIZE", "OUTPUT_AFTER", "TIME_DECAY", + "ANOMALY_RATE", "CATEGORY_FIELD", "TIME_FIELD", "TIME_ZONE", "TRAINING_DATA_SIZE", + "ANOMALY_SCORE_THRESHOLD", "CASE", "IN", "NOT", "OR", "AND", "XOR", "TRUE", + "FALSE", "REGEXP", "DATETIME", "INTERVAL", "MICROSECOND", "MILLISECOND", + "SECOND", "MINUTE", "HOUR", "DAY", "WEEK", "MONTH", "QUARTER", "YEAR", + "SECOND_MICROSECOND", "MINUTE_MICROSECOND", "MINUTE_SECOND", "HOUR_MICROSECOND", + "HOUR_SECOND", "HOUR_MINUTE", "DAY_MICROSECOND", "DAY_SECOND", "DAY_MINUTE", + "DAY_HOUR", "YEAR_MONTH", "CONVERT_TZ", "DATAMODEL", "LOOKUP", "SAVEDSEARCH", + "INT", "INTEGER", "DOUBLE", "LONG", "FLOAT", "STRING", "BOOLEAN", "PIPE", + "COMMA", "DOT", "EQUAL", "GREATER", "LESS", "NOT_GREATER", "NOT_LESS", + "NOT_EQUAL", "PLUS", "MINUS", "STAR", "DIVIDE", "MODULE", "EXCLAMATION_SYMBOL", + "COLON", "LT_PRTHS", "RT_PRTHS", "LT_SQR_PRTHS", "RT_SQR_PRTHS", "SINGLE_QUOTE", + "DOUBLE_QUOTE", "BACKTICK", "BIT_NOT_OP", "BIT_AND_OP", "BIT_XOR_OP", + "AVG", "COUNT", "DISTINCT_COUNT", "ESTDC", "ESTDC_ERROR", "MAX", "MEAN", + "MEDIAN", "MIN", "MODE", "RANGE", "STDEV", "STDEVP", "SUM", "SUMSQ", "VAR_SAMP", + "VAR_POP", "STDDEV_SAMP", "STDDEV_POP", "PERCENTILE", "TAKE", "FIRST", + "LAST", "LIST", "VALUES", "EARLIEST", "EARLIEST_TIME", "LATEST", "LATEST_TIME", + "PER_DAY", "PER_HOUR", "PER_MINUTE", "PER_SECOND", "RATE", "SPARKLINE", + "C", "DC", "ABS", "CEIL", "CEILING", "CONV", "CRC32", "E", "EXP", "FLOOR", + "LN", "LOG", "LOG10", "LOG2", "MOD", "PI", "POW", "POWER", "RAND", "ROUND", + "SIGN", "SQRT", "TRUNCATE", "ACOS", "ASIN", "ATAN", "ATAN2", "COS", "COT", + "DEGREES", "RADIANS", "SIN", "TAN", "ADDDATE", "CURDATE", "CURRENT_DATE", + "CURRENT_TIME", "CURRENT_TIMESTAMP", "CURTIME", "DATE", "DATE_ADD", "DATE_FORMAT", + "DATE_SUB", "DAYNAME", "DAYOFMONTH", "DAYOFWEEK", "DAYOFYEAR", "FROM_DAYS", + "LOCALTIME", "LOCALTIMESTAMP", "FROM_UNIXTIME", "MAKEDATE", "MAKETIME", + "MONTHNAME", "NOW", "PERIOD_ADD", "PERIOD_DIFF", "SUBDATE", "SYSDATE", + "TIME", "TIME_TO_SEC", "TIMESTAMP", "TO_DAYS", "UTC_DATE", "UTC_TIME", + "UTC_TIMESTAMP", "UNIX_TIMESTAMP", "SUBSTR", "SUBSTRING", "LTRIM", "RTRIM", + "TRIM", "TO", "LOWER", "UPPER", "CONCAT", "CONCAT_WS", "LENGTH", "STRCMP", + "RIGHT", "LEFT", "ASCII", "LOCATE", "REPLACE", "CAST", "LIKE", "ISNULL", + "ISNOTNULL", "IFNULL", "NULLIF", "IF", "TYPEOF", "MATCH", "MATCH_PHRASE", + "MATCH_PHRASE_PREFIX", "MATCH_BOOL_PREFIX", "SIMPLE_QUERY_STRING", "MULTI_MATCH", + "QUERY_STRING", "ALLOW_LEADING_WILDCARD", "ANALYZE_WILDCARD", "ANALYZER", + "AUTO_GENERATE_SYNONYMS_PHRASE_QUERY", "BOOST", "CUTOFF_FREQUENCY", "DEFAULT_FIELD", + "DEFAULT_OPERATOR", "ENABLE_POSITION_INCREMENTS", "ESCAPE", "FLAGS", "FUZZY_MAX_EXPANSIONS", + "FUZZY_PREFIX_LENGTH", "FUZZY_TRANSPOSITIONS", "FUZZY_REWRITE", "FUZZINESS", + "LENIENT", "LOW_FREQ_OPERATOR", "MAX_DETERMINIZED_STATES", "MAX_EXPANSIONS", + "MINIMUM_SHOULD_MATCH", "OPERATOR", "PHRASE_SLOP", "PREFIX_LENGTH", "QUOTE_ANALYZER", + "QUOTE_FIELD_SUFFIX", "REWRITE", "SLOP", "TIE_BREAKER", "TYPE", "ZERO_TERMS_QUERY", + "SPAN", "MS", "S", "M", "H", "W", "Q", "Y", "ID", "INTEGER_LITERAL", "DECIMAL_LITERAL", + "ID_DATE_SUFFIX", "DQUOTA_STRING", "SQUOTA_STRING", "BQUOTA_STRING", "ERROR_RECOGNITION", + ]; + public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(OpenSearchPPLParser._LITERAL_NAMES, OpenSearchPPLParser._SYMBOLIC_NAMES, []); + + // @Override + // @NotNull + public get vocabulary(): Vocabulary { + return OpenSearchPPLParser.VOCABULARY; + } + // tslint:enable:no-trailing-whitespace + + // @Override + public get grammarFileName(): string { return "OpenSearchPPLParser.g4"; } + + // @Override + public get ruleNames(): string[] { return OpenSearchPPLParser.ruleNames; } + + // @Override + public get serializedATN(): string { return OpenSearchPPLParser._serializedATN; } + + protected createFailedPredicateException(predicate?: string, message?: string): FailedPredicateException { + return new FailedPredicateException(this, predicate, message); + } + + constructor(input: TokenStream) { + super(input); + this._interp = new ParserATNSimulator(OpenSearchPPLParser._ATN, this); + } + // @RuleVersion(0) + public root(): RootContext { + let _localctx: RootContext = new RootContext(this._ctx, this.state); + this.enterRule(_localctx, 0, OpenSearchPPLParser.RULE_root); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 207; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << OpenSearchPPLParser.SEARCH) | (1 << OpenSearchPPLParser.DESCRIBE) | (1 << OpenSearchPPLParser.SHOW) | (1 << OpenSearchPPLParser.SOURCE) | (1 << OpenSearchPPLParser.INDEX) | (1 << OpenSearchPPLParser.D))) !== 0) || ((((_la - 60)) & ~0x1F) === 0 && ((1 << (_la - 60)) & ((1 << (OpenSearchPPLParser.NOT - 60)) | (1 << (OpenSearchPPLParser.TRUE - 60)) | (1 << (OpenSearchPPLParser.FALSE - 60)) | (1 << (OpenSearchPPLParser.DATETIME - 60)) | (1 << (OpenSearchPPLParser.INTERVAL - 60)) | (1 << (OpenSearchPPLParser.MICROSECOND - 60)) | (1 << (OpenSearchPPLParser.MILLISECOND - 60)) | (1 << (OpenSearchPPLParser.SECOND - 60)) | (1 << (OpenSearchPPLParser.MINUTE - 60)) | (1 << (OpenSearchPPLParser.HOUR - 60)) | (1 << (OpenSearchPPLParser.DAY - 60)) | (1 << (OpenSearchPPLParser.WEEK - 60)) | (1 << (OpenSearchPPLParser.MONTH - 60)) | (1 << (OpenSearchPPLParser.QUARTER - 60)) | (1 << (OpenSearchPPLParser.YEAR - 60)) | (1 << (OpenSearchPPLParser.CONVERT_TZ - 60)))) !== 0) || ((((_la - 103)) & ~0x1F) === 0 && ((1 << (_la - 103)) & ((1 << (OpenSearchPPLParser.DOT - 103)) | (1 << (OpenSearchPPLParser.PLUS - 103)) | (1 << (OpenSearchPPLParser.MINUS - 103)) | (1 << (OpenSearchPPLParser.LT_PRTHS - 103)) | (1 << (OpenSearchPPLParser.BACKTICK - 103)) | (1 << (OpenSearchPPLParser.AVG - 103)) | (1 << (OpenSearchPPLParser.COUNT - 103)) | (1 << (OpenSearchPPLParser.MAX - 103)))) !== 0) || ((((_la - 135)) & ~0x1F) === 0 && ((1 << (_la - 135)) & ((1 << (OpenSearchPPLParser.MIN - 135)) | (1 << (OpenSearchPPLParser.SUM - 135)) | (1 << (OpenSearchPPLParser.VAR_SAMP - 135)) | (1 << (OpenSearchPPLParser.VAR_POP - 135)) | (1 << (OpenSearchPPLParser.STDDEV_SAMP - 135)) | (1 << (OpenSearchPPLParser.STDDEV_POP - 135)) | (1 << (OpenSearchPPLParser.FIRST - 135)) | (1 << (OpenSearchPPLParser.LAST - 135)) | (1 << (OpenSearchPPLParser.ABS - 135)) | (1 << (OpenSearchPPLParser.CEIL - 135)) | (1 << (OpenSearchPPLParser.CEILING - 135)))) !== 0) || ((((_la - 167)) & ~0x1F) === 0 && ((1 << (_la - 167)) & ((1 << (OpenSearchPPLParser.CONV - 167)) | (1 << (OpenSearchPPLParser.CRC32 - 167)) | (1 << (OpenSearchPPLParser.E - 167)) | (1 << (OpenSearchPPLParser.EXP - 167)) | (1 << (OpenSearchPPLParser.FLOOR - 167)) | (1 << (OpenSearchPPLParser.LN - 167)) | (1 << (OpenSearchPPLParser.LOG - 167)) | (1 << (OpenSearchPPLParser.LOG10 - 167)) | (1 << (OpenSearchPPLParser.LOG2 - 167)) | (1 << (OpenSearchPPLParser.MOD - 167)) | (1 << (OpenSearchPPLParser.PI - 167)) | (1 << (OpenSearchPPLParser.POW - 167)) | (1 << (OpenSearchPPLParser.POWER - 167)) | (1 << (OpenSearchPPLParser.RAND - 167)) | (1 << (OpenSearchPPLParser.ROUND - 167)) | (1 << (OpenSearchPPLParser.SIGN - 167)) | (1 << (OpenSearchPPLParser.SQRT - 167)) | (1 << (OpenSearchPPLParser.TRUNCATE - 167)) | (1 << (OpenSearchPPLParser.ACOS - 167)) | (1 << (OpenSearchPPLParser.ASIN - 167)) | (1 << (OpenSearchPPLParser.ATAN - 167)) | (1 << (OpenSearchPPLParser.ATAN2 - 167)) | (1 << (OpenSearchPPLParser.COS - 167)) | (1 << (OpenSearchPPLParser.COT - 167)) | (1 << (OpenSearchPPLParser.DEGREES - 167)) | (1 << (OpenSearchPPLParser.RADIANS - 167)) | (1 << (OpenSearchPPLParser.SIN - 167)) | (1 << (OpenSearchPPLParser.TAN - 167)) | (1 << (OpenSearchPPLParser.ADDDATE - 167)) | (1 << (OpenSearchPPLParser.CURDATE - 167)) | (1 << (OpenSearchPPLParser.CURRENT_DATE - 167)) | (1 << (OpenSearchPPLParser.CURRENT_TIME - 167)))) !== 0) || ((((_la - 199)) & ~0x1F) === 0 && ((1 << (_la - 199)) & ((1 << (OpenSearchPPLParser.CURRENT_TIMESTAMP - 199)) | (1 << (OpenSearchPPLParser.CURTIME - 199)) | (1 << (OpenSearchPPLParser.DATE - 199)) | (1 << (OpenSearchPPLParser.DATE_ADD - 199)) | (1 << (OpenSearchPPLParser.DATE_FORMAT - 199)) | (1 << (OpenSearchPPLParser.DATE_SUB - 199)) | (1 << (OpenSearchPPLParser.DAYNAME - 199)) | (1 << (OpenSearchPPLParser.DAYOFMONTH - 199)) | (1 << (OpenSearchPPLParser.DAYOFWEEK - 199)) | (1 << (OpenSearchPPLParser.DAYOFYEAR - 199)) | (1 << (OpenSearchPPLParser.FROM_DAYS - 199)) | (1 << (OpenSearchPPLParser.LOCALTIME - 199)) | (1 << (OpenSearchPPLParser.LOCALTIMESTAMP - 199)) | (1 << (OpenSearchPPLParser.FROM_UNIXTIME - 199)) | (1 << (OpenSearchPPLParser.MAKEDATE - 199)) | (1 << (OpenSearchPPLParser.MAKETIME - 199)) | (1 << (OpenSearchPPLParser.MONTHNAME - 199)) | (1 << (OpenSearchPPLParser.NOW - 199)) | (1 << (OpenSearchPPLParser.PERIOD_ADD - 199)) | (1 << (OpenSearchPPLParser.PERIOD_DIFF - 199)) | (1 << (OpenSearchPPLParser.SUBDATE - 199)) | (1 << (OpenSearchPPLParser.SYSDATE - 199)) | (1 << (OpenSearchPPLParser.TIME - 199)) | (1 << (OpenSearchPPLParser.TIME_TO_SEC - 199)) | (1 << (OpenSearchPPLParser.TIMESTAMP - 199)) | (1 << (OpenSearchPPLParser.TO_DAYS - 199)) | (1 << (OpenSearchPPLParser.UTC_DATE - 199)) | (1 << (OpenSearchPPLParser.UTC_TIME - 199)) | (1 << (OpenSearchPPLParser.UTC_TIMESTAMP - 199)) | (1 << (OpenSearchPPLParser.UNIX_TIMESTAMP - 199)) | (1 << (OpenSearchPPLParser.SUBSTR - 199)) | (1 << (OpenSearchPPLParser.SUBSTRING - 199)))) !== 0) || ((((_la - 231)) & ~0x1F) === 0 && ((1 << (_la - 231)) & ((1 << (OpenSearchPPLParser.LTRIM - 231)) | (1 << (OpenSearchPPLParser.RTRIM - 231)) | (1 << (OpenSearchPPLParser.TRIM - 231)) | (1 << (OpenSearchPPLParser.LOWER - 231)) | (1 << (OpenSearchPPLParser.UPPER - 231)) | (1 << (OpenSearchPPLParser.CONCAT - 231)) | (1 << (OpenSearchPPLParser.CONCAT_WS - 231)) | (1 << (OpenSearchPPLParser.LENGTH - 231)) | (1 << (OpenSearchPPLParser.STRCMP - 231)) | (1 << (OpenSearchPPLParser.RIGHT - 231)) | (1 << (OpenSearchPPLParser.LEFT - 231)) | (1 << (OpenSearchPPLParser.ASCII - 231)) | (1 << (OpenSearchPPLParser.LOCATE - 231)) | (1 << (OpenSearchPPLParser.REPLACE - 231)) | (1 << (OpenSearchPPLParser.CAST - 231)) | (1 << (OpenSearchPPLParser.LIKE - 231)) | (1 << (OpenSearchPPLParser.ISNULL - 231)) | (1 << (OpenSearchPPLParser.ISNOTNULL - 231)) | (1 << (OpenSearchPPLParser.IFNULL - 231)) | (1 << (OpenSearchPPLParser.NULLIF - 231)) | (1 << (OpenSearchPPLParser.IF - 231)) | (1 << (OpenSearchPPLParser.TYPEOF - 231)) | (1 << (OpenSearchPPLParser.MATCH - 231)) | (1 << (OpenSearchPPLParser.MATCH_PHRASE - 231)) | (1 << (OpenSearchPPLParser.MATCH_PHRASE_PREFIX - 231)) | (1 << (OpenSearchPPLParser.MATCH_BOOL_PREFIX - 231)) | (1 << (OpenSearchPPLParser.SIMPLE_QUERY_STRING - 231)) | (1 << (OpenSearchPPLParser.MULTI_MATCH - 231)) | (1 << (OpenSearchPPLParser.QUERY_STRING - 231)))) !== 0) || ((((_la - 292)) & ~0x1F) === 0 && ((1 << (_la - 292)) & ((1 << (OpenSearchPPLParser.SPAN - 292)) | (1 << (OpenSearchPPLParser.MS - 292)) | (1 << (OpenSearchPPLParser.S - 292)) | (1 << (OpenSearchPPLParser.M - 292)) | (1 << (OpenSearchPPLParser.H - 292)) | (1 << (OpenSearchPPLParser.W - 292)) | (1 << (OpenSearchPPLParser.Q - 292)) | (1 << (OpenSearchPPLParser.Y - 292)) | (1 << (OpenSearchPPLParser.ID - 292)) | (1 << (OpenSearchPPLParser.INTEGER_LITERAL - 292)) | (1 << (OpenSearchPPLParser.DECIMAL_LITERAL - 292)) | (1 << (OpenSearchPPLParser.DQUOTA_STRING - 292)) | (1 << (OpenSearchPPLParser.SQUOTA_STRING - 292)) | (1 << (OpenSearchPPLParser.BQUOTA_STRING - 292)))) !== 0)) { + { + this.state = 206; + this.pplStatement(); + } + } + + this.state = 209; + this.match(OpenSearchPPLParser.EOF); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public pplStatement(): PplStatementContext { + let _localctx: PplStatementContext = new PplStatementContext(this._ctx, this.state); + this.enterRule(_localctx, 2, OpenSearchPPLParser.RULE_pplStatement); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 211; + this.pplCommands(); + this.state = 216; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === OpenSearchPPLParser.PIPE) { + { + { + this.state = 212; + this.match(OpenSearchPPLParser.PIPE); + this.state = 213; + this.commands(); + } + } + this.state = 218; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public pplCommands(): PplCommandsContext { + let _localctx: PplCommandsContext = new PplCommandsContext(this._ctx, this.state); + this.enterRule(_localctx, 4, OpenSearchPPLParser.RULE_pplCommands); + try { + this.state = 222; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case OpenSearchPPLParser.SEARCH: + case OpenSearchPPLParser.SOURCE: + case OpenSearchPPLParser.INDEX: + case OpenSearchPPLParser.D: + case OpenSearchPPLParser.NOT: + case OpenSearchPPLParser.TRUE: + case OpenSearchPPLParser.FALSE: + case OpenSearchPPLParser.DATETIME: + case OpenSearchPPLParser.INTERVAL: + case OpenSearchPPLParser.MICROSECOND: + case OpenSearchPPLParser.MILLISECOND: + case OpenSearchPPLParser.SECOND: + case OpenSearchPPLParser.MINUTE: + case OpenSearchPPLParser.HOUR: + case OpenSearchPPLParser.DAY: + case OpenSearchPPLParser.WEEK: + case OpenSearchPPLParser.MONTH: + case OpenSearchPPLParser.QUARTER: + case OpenSearchPPLParser.YEAR: + case OpenSearchPPLParser.CONVERT_TZ: + case OpenSearchPPLParser.DOT: + case OpenSearchPPLParser.PLUS: + case OpenSearchPPLParser.MINUS: + case OpenSearchPPLParser.LT_PRTHS: + case OpenSearchPPLParser.BACKTICK: + case OpenSearchPPLParser.AVG: + case OpenSearchPPLParser.COUNT: + case OpenSearchPPLParser.MAX: + case OpenSearchPPLParser.MIN: + case OpenSearchPPLParser.SUM: + case OpenSearchPPLParser.VAR_SAMP: + case OpenSearchPPLParser.VAR_POP: + case OpenSearchPPLParser.STDDEV_SAMP: + case OpenSearchPPLParser.STDDEV_POP: + case OpenSearchPPLParser.FIRST: + case OpenSearchPPLParser.LAST: + case OpenSearchPPLParser.ABS: + case OpenSearchPPLParser.CEIL: + case OpenSearchPPLParser.CEILING: + case OpenSearchPPLParser.CONV: + case OpenSearchPPLParser.CRC32: + case OpenSearchPPLParser.E: + case OpenSearchPPLParser.EXP: + case OpenSearchPPLParser.FLOOR: + case OpenSearchPPLParser.LN: + case OpenSearchPPLParser.LOG: + case OpenSearchPPLParser.LOG10: + case OpenSearchPPLParser.LOG2: + case OpenSearchPPLParser.MOD: + case OpenSearchPPLParser.PI: + case OpenSearchPPLParser.POW: + case OpenSearchPPLParser.POWER: + case OpenSearchPPLParser.RAND: + case OpenSearchPPLParser.ROUND: + case OpenSearchPPLParser.SIGN: + case OpenSearchPPLParser.SQRT: + case OpenSearchPPLParser.TRUNCATE: + case OpenSearchPPLParser.ACOS: + case OpenSearchPPLParser.ASIN: + case OpenSearchPPLParser.ATAN: + case OpenSearchPPLParser.ATAN2: + case OpenSearchPPLParser.COS: + case OpenSearchPPLParser.COT: + case OpenSearchPPLParser.DEGREES: + case OpenSearchPPLParser.RADIANS: + case OpenSearchPPLParser.SIN: + case OpenSearchPPLParser.TAN: + case OpenSearchPPLParser.ADDDATE: + case OpenSearchPPLParser.CURDATE: + case OpenSearchPPLParser.CURRENT_DATE: + case OpenSearchPPLParser.CURRENT_TIME: + case OpenSearchPPLParser.CURRENT_TIMESTAMP: + case OpenSearchPPLParser.CURTIME: + case OpenSearchPPLParser.DATE: + case OpenSearchPPLParser.DATE_ADD: + case OpenSearchPPLParser.DATE_FORMAT: + case OpenSearchPPLParser.DATE_SUB: + case OpenSearchPPLParser.DAYNAME: + case OpenSearchPPLParser.DAYOFMONTH: + case OpenSearchPPLParser.DAYOFWEEK: + case OpenSearchPPLParser.DAYOFYEAR: + case OpenSearchPPLParser.FROM_DAYS: + case OpenSearchPPLParser.LOCALTIME: + case OpenSearchPPLParser.LOCALTIMESTAMP: + case OpenSearchPPLParser.FROM_UNIXTIME: + case OpenSearchPPLParser.MAKEDATE: + case OpenSearchPPLParser.MAKETIME: + case OpenSearchPPLParser.MONTHNAME: + case OpenSearchPPLParser.NOW: + case OpenSearchPPLParser.PERIOD_ADD: + case OpenSearchPPLParser.PERIOD_DIFF: + case OpenSearchPPLParser.SUBDATE: + case OpenSearchPPLParser.SYSDATE: + case OpenSearchPPLParser.TIME: + case OpenSearchPPLParser.TIME_TO_SEC: + case OpenSearchPPLParser.TIMESTAMP: + case OpenSearchPPLParser.TO_DAYS: + case OpenSearchPPLParser.UTC_DATE: + case OpenSearchPPLParser.UTC_TIME: + case OpenSearchPPLParser.UTC_TIMESTAMP: + case OpenSearchPPLParser.UNIX_TIMESTAMP: + case OpenSearchPPLParser.SUBSTR: + case OpenSearchPPLParser.SUBSTRING: + case OpenSearchPPLParser.LTRIM: + case OpenSearchPPLParser.RTRIM: + case OpenSearchPPLParser.TRIM: + case OpenSearchPPLParser.LOWER: + case OpenSearchPPLParser.UPPER: + case OpenSearchPPLParser.CONCAT: + case OpenSearchPPLParser.CONCAT_WS: + case OpenSearchPPLParser.LENGTH: + case OpenSearchPPLParser.STRCMP: + case OpenSearchPPLParser.RIGHT: + case OpenSearchPPLParser.LEFT: + case OpenSearchPPLParser.ASCII: + case OpenSearchPPLParser.LOCATE: + case OpenSearchPPLParser.REPLACE: + case OpenSearchPPLParser.CAST: + case OpenSearchPPLParser.LIKE: + case OpenSearchPPLParser.ISNULL: + case OpenSearchPPLParser.ISNOTNULL: + case OpenSearchPPLParser.IFNULL: + case OpenSearchPPLParser.NULLIF: + case OpenSearchPPLParser.IF: + case OpenSearchPPLParser.TYPEOF: + case OpenSearchPPLParser.MATCH: + case OpenSearchPPLParser.MATCH_PHRASE: + case OpenSearchPPLParser.MATCH_PHRASE_PREFIX: + case OpenSearchPPLParser.MATCH_BOOL_PREFIX: + case OpenSearchPPLParser.SIMPLE_QUERY_STRING: + case OpenSearchPPLParser.MULTI_MATCH: + case OpenSearchPPLParser.QUERY_STRING: + case OpenSearchPPLParser.SPAN: + case OpenSearchPPLParser.MS: + case OpenSearchPPLParser.S: + case OpenSearchPPLParser.M: + case OpenSearchPPLParser.H: + case OpenSearchPPLParser.W: + case OpenSearchPPLParser.Q: + case OpenSearchPPLParser.Y: + case OpenSearchPPLParser.ID: + case OpenSearchPPLParser.INTEGER_LITERAL: + case OpenSearchPPLParser.DECIMAL_LITERAL: + case OpenSearchPPLParser.DQUOTA_STRING: + case OpenSearchPPLParser.SQUOTA_STRING: + case OpenSearchPPLParser.BQUOTA_STRING: + this.enterOuterAlt(_localctx, 1); + { + this.state = 219; + this.searchCommand(); + } + break; + case OpenSearchPPLParser.DESCRIBE: + this.enterOuterAlt(_localctx, 2); + { + this.state = 220; + this.describeCommand(); + } + break; + case OpenSearchPPLParser.SHOW: + this.enterOuterAlt(_localctx, 3); + { + this.state = 221; + this.showCatalogsCommand(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public commands(): CommandsContext { + let _localctx: CommandsContext = new CommandsContext(this._ctx, this.state); + this.enterRule(_localctx, 6, OpenSearchPPLParser.RULE_commands); + try { + this.state = 240; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case OpenSearchPPLParser.WHERE: + this.enterOuterAlt(_localctx, 1); + { + this.state = 224; + this.whereCommand(); + } + break; + case OpenSearchPPLParser.FIELDS: + this.enterOuterAlt(_localctx, 2); + { + this.state = 225; + this.fieldsCommand(); + } + break; + case OpenSearchPPLParser.RENAME: + this.enterOuterAlt(_localctx, 3); + { + this.state = 226; + this.renameCommand(); + } + break; + case OpenSearchPPLParser.STATS: + this.enterOuterAlt(_localctx, 4); + { + this.state = 227; + this.statsCommand(); + } + break; + case OpenSearchPPLParser.DEDUP: + this.enterOuterAlt(_localctx, 5); + { + this.state = 228; + this.dedupCommand(); + } + break; + case OpenSearchPPLParser.SORT: + this.enterOuterAlt(_localctx, 6); + { + this.state = 229; + this.sortCommand(); + } + break; + case OpenSearchPPLParser.EVAL: + this.enterOuterAlt(_localctx, 7); + { + this.state = 230; + this.evalCommand(); + } + break; + case OpenSearchPPLParser.HEAD: + this.enterOuterAlt(_localctx, 8); + { + this.state = 231; + this.headCommand(); + } + break; + case OpenSearchPPLParser.TOP: + this.enterOuterAlt(_localctx, 9); + { + this.state = 232; + this.topCommand(); + } + break; + case OpenSearchPPLParser.RARE: + this.enterOuterAlt(_localctx, 10); + { + this.state = 233; + this.rareCommand(); + } + break; + case OpenSearchPPLParser.GROK: + this.enterOuterAlt(_localctx, 11); + { + this.state = 234; + this.grokCommand(); + } + break; + case OpenSearchPPLParser.PARSE: + this.enterOuterAlt(_localctx, 12); + { + this.state = 235; + this.parseCommand(); + } + break; + case OpenSearchPPLParser.PATTERNS: + this.enterOuterAlt(_localctx, 13); + { + this.state = 236; + this.patternsCommand(); + } + break; + case OpenSearchPPLParser.KMEANS: + this.enterOuterAlt(_localctx, 14); + { + this.state = 237; + this.kmeansCommand(); + } + break; + case OpenSearchPPLParser.AD: + this.enterOuterAlt(_localctx, 15); + { + this.state = 238; + this.adCommand(); + } + break; + case OpenSearchPPLParser.ML: + this.enterOuterAlt(_localctx, 16); + { + this.state = 239; + this.mlCommand(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public searchCommand(): SearchCommandContext { + let _localctx: SearchCommandContext = new SearchCommandContext(this._ctx, this.state); + this.enterRule(_localctx, 8, OpenSearchPPLParser.RULE_searchCommand); + let _la: number; + try { + this.state = 258; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 7, this._ctx) ) { + case 1: + _localctx = new SearchFromContext(_localctx); + this.enterOuterAlt(_localctx, 1); + { + this.state = 243; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.SEARCH) { + { + this.state = 242; + this.match(OpenSearchPPLParser.SEARCH); + } + } + + this.state = 245; + this.fromClause(); + } + break; + + case 2: + _localctx = new SearchFromFilterContext(_localctx); + this.enterOuterAlt(_localctx, 2); + { + this.state = 247; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.SEARCH) { + { + this.state = 246; + this.match(OpenSearchPPLParser.SEARCH); + } + } + + this.state = 249; + this.fromClause(); + this.state = 250; + this.logicalExpression(0); + } + break; + + case 3: + _localctx = new SearchFilterFromContext(_localctx); + this.enterOuterAlt(_localctx, 3); + { + this.state = 253; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.SEARCH) { + { + this.state = 252; + this.match(OpenSearchPPLParser.SEARCH); + } + } + + this.state = 255; + this.logicalExpression(0); + this.state = 256; + this.fromClause(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public describeCommand(): DescribeCommandContext { + let _localctx: DescribeCommandContext = new DescribeCommandContext(this._ctx, this.state); + this.enterRule(_localctx, 10, OpenSearchPPLParser.RULE_describeCommand); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 260; + this.match(OpenSearchPPLParser.DESCRIBE); + this.state = 261; + this.tableSourceClause(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public showCatalogsCommand(): ShowCatalogsCommandContext { + let _localctx: ShowCatalogsCommandContext = new ShowCatalogsCommandContext(this._ctx, this.state); + this.enterRule(_localctx, 12, OpenSearchPPLParser.RULE_showCatalogsCommand); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 263; + this.match(OpenSearchPPLParser.SHOW); + this.state = 264; + this.match(OpenSearchPPLParser.CATALOGS); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public whereCommand(): WhereCommandContext { + let _localctx: WhereCommandContext = new WhereCommandContext(this._ctx, this.state); + this.enterRule(_localctx, 14, OpenSearchPPLParser.RULE_whereCommand); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 266; + this.match(OpenSearchPPLParser.WHERE); + this.state = 267; + this.logicalExpression(0); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public fieldsCommand(): FieldsCommandContext { + let _localctx: FieldsCommandContext = new FieldsCommandContext(this._ctx, this.state); + this.enterRule(_localctx, 16, OpenSearchPPLParser.RULE_fieldsCommand); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 269; + this.match(OpenSearchPPLParser.FIELDS); + this.state = 271; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.PLUS || _la === OpenSearchPPLParser.MINUS) { + { + this.state = 270; + _la = this._input.LA(1); + if (!(_la === OpenSearchPPLParser.PLUS || _la === OpenSearchPPLParser.MINUS)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + + this.state = 273; + this.fieldList(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public renameCommand(): RenameCommandContext { + let _localctx: RenameCommandContext = new RenameCommandContext(this._ctx, this.state); + this.enterRule(_localctx, 18, OpenSearchPPLParser.RULE_renameCommand); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 275; + this.match(OpenSearchPPLParser.RENAME); + this.state = 276; + this.renameClasue(); + this.state = 281; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === OpenSearchPPLParser.COMMA) { + { + { + this.state = 277; + this.match(OpenSearchPPLParser.COMMA); + this.state = 278; + this.renameClasue(); + } + } + this.state = 283; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public statsCommand(): StatsCommandContext { + let _localctx: StatsCommandContext = new StatsCommandContext(this._ctx, this.state); + this.enterRule(_localctx, 20, OpenSearchPPLParser.RULE_statsCommand); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 284; + this.match(OpenSearchPPLParser.STATS); + this.state = 288; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.PARTITIONS) { + { + this.state = 285; + this.match(OpenSearchPPLParser.PARTITIONS); + this.state = 286; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 287; + _localctx._partitions = this.integerLiteral(); + } + } + + this.state = 293; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.ALLNUM) { + { + this.state = 290; + this.match(OpenSearchPPLParser.ALLNUM); + this.state = 291; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 292; + _localctx._allnum = this.booleanLiteral(); + } + } + + this.state = 298; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.DELIM) { + { + this.state = 295; + this.match(OpenSearchPPLParser.DELIM); + this.state = 296; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 297; + _localctx._delim = this.stringLiteral(); + } + } + + this.state = 300; + this.statsAggTerm(); + this.state = 305; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === OpenSearchPPLParser.COMMA) { + { + { + this.state = 301; + this.match(OpenSearchPPLParser.COMMA); + this.state = 302; + this.statsAggTerm(); + } + } + this.state = 307; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 309; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.BY) { + { + this.state = 308; + this.statsByClause(); + } + } + + this.state = 314; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.DEDUP_SPLITVALUES) { + { + this.state = 311; + this.match(OpenSearchPPLParser.DEDUP_SPLITVALUES); + this.state = 312; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 313; + _localctx._dedupsplit = this.booleanLiteral(); + } + } + + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public dedupCommand(): DedupCommandContext { + let _localctx: DedupCommandContext = new DedupCommandContext(this._ctx, this.state); + this.enterRule(_localctx, 22, OpenSearchPPLParser.RULE_dedupCommand); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 316; + this.match(OpenSearchPPLParser.DEDUP); + this.state = 318; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.PLUS || _la === OpenSearchPPLParser.MINUS || _la === OpenSearchPPLParser.INTEGER_LITERAL) { + { + this.state = 317; + _localctx._number = this.integerLiteral(); + } + } + + this.state = 320; + this.fieldList(); + this.state = 324; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.KEEPEMPTY) { + { + this.state = 321; + this.match(OpenSearchPPLParser.KEEPEMPTY); + this.state = 322; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 323; + _localctx._keepempty = this.booleanLiteral(); + } + } + + this.state = 329; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.CONSECUTIVE) { + { + this.state = 326; + this.match(OpenSearchPPLParser.CONSECUTIVE); + this.state = 327; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 328; + _localctx._consecutive = this.booleanLiteral(); + } + } + + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public sortCommand(): SortCommandContext { + let _localctx: SortCommandContext = new SortCommandContext(this._ctx, this.state); + this.enterRule(_localctx, 24, OpenSearchPPLParser.RULE_sortCommand); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 331; + this.match(OpenSearchPPLParser.SORT); + this.state = 332; + this.sortbyClause(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public evalCommand(): EvalCommandContext { + let _localctx: EvalCommandContext = new EvalCommandContext(this._ctx, this.state); + this.enterRule(_localctx, 26, OpenSearchPPLParser.RULE_evalCommand); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 334; + this.match(OpenSearchPPLParser.EVAL); + this.state = 335; + this.evalClause(); + this.state = 340; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === OpenSearchPPLParser.COMMA) { + { + { + this.state = 336; + this.match(OpenSearchPPLParser.COMMA); + this.state = 337; + this.evalClause(); + } + } + this.state = 342; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public headCommand(): HeadCommandContext { + let _localctx: HeadCommandContext = new HeadCommandContext(this._ctx, this.state); + this.enterRule(_localctx, 28, OpenSearchPPLParser.RULE_headCommand); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 343; + this.match(OpenSearchPPLParser.HEAD); + this.state = 345; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.PLUS || _la === OpenSearchPPLParser.MINUS || _la === OpenSearchPPLParser.INTEGER_LITERAL) { + { + this.state = 344; + _localctx._number = this.integerLiteral(); + } + } + + this.state = 349; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.FROM) { + { + this.state = 347; + this.match(OpenSearchPPLParser.FROM); + this.state = 348; + _localctx._from = this.integerLiteral(); + } + } + + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public topCommand(): TopCommandContext { + let _localctx: TopCommandContext = new TopCommandContext(this._ctx, this.state); + this.enterRule(_localctx, 30, OpenSearchPPLParser.RULE_topCommand); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 351; + this.match(OpenSearchPPLParser.TOP); + this.state = 353; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.PLUS || _la === OpenSearchPPLParser.MINUS || _la === OpenSearchPPLParser.INTEGER_LITERAL) { + { + this.state = 352; + _localctx._number = this.integerLiteral(); + } + } + + this.state = 355; + this.fieldList(); + this.state = 357; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.BY) { + { + this.state = 356; + this.byClause(); + } + } + + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public rareCommand(): RareCommandContext { + let _localctx: RareCommandContext = new RareCommandContext(this._ctx, this.state); + this.enterRule(_localctx, 32, OpenSearchPPLParser.RULE_rareCommand); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 359; + this.match(OpenSearchPPLParser.RARE); + this.state = 360; + this.fieldList(); + this.state = 362; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.BY) { + { + this.state = 361; + this.byClause(); + } + } + + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public grokCommand(): GrokCommandContext { + let _localctx: GrokCommandContext = new GrokCommandContext(this._ctx, this.state); + this.enterRule(_localctx, 34, OpenSearchPPLParser.RULE_grokCommand); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 364; + this.match(OpenSearchPPLParser.GROK); + { + this.state = 365; + _localctx._source_field = this.expression(); + } + { + this.state = 366; + _localctx._pattern = this.stringLiteral(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public parseCommand(): ParseCommandContext { + let _localctx: ParseCommandContext = new ParseCommandContext(this._ctx, this.state); + this.enterRule(_localctx, 36, OpenSearchPPLParser.RULE_parseCommand); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 368; + this.match(OpenSearchPPLParser.PARSE); + { + this.state = 369; + _localctx._source_field = this.expression(); + } + { + this.state = 370; + _localctx._pattern = this.stringLiteral(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public patternsCommand(): PatternsCommandContext { + let _localctx: PatternsCommandContext = new PatternsCommandContext(this._ctx, this.state); + this.enterRule(_localctx, 38, OpenSearchPPLParser.RULE_patternsCommand); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 372; + this.match(OpenSearchPPLParser.PATTERNS); + this.state = 376; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === OpenSearchPPLParser.PATTERN || _la === OpenSearchPPLParser.NEW_FIELD) { + { + { + this.state = 373; + this.patternsParameter(); + } + } + this.state = 378; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + { + this.state = 379; + _localctx._source_field = this.expression(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public patternsParameter(): PatternsParameterContext { + let _localctx: PatternsParameterContext = new PatternsParameterContext(this._ctx, this.state); + this.enterRule(_localctx, 40, OpenSearchPPLParser.RULE_patternsParameter); + try { + this.state = 387; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case OpenSearchPPLParser.NEW_FIELD: + this.enterOuterAlt(_localctx, 1); + { + { + this.state = 381; + this.match(OpenSearchPPLParser.NEW_FIELD); + this.state = 382; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 383; + _localctx._new_field = this.stringLiteral(); + } + } + break; + case OpenSearchPPLParser.PATTERN: + this.enterOuterAlt(_localctx, 2); + { + { + this.state = 384; + this.match(OpenSearchPPLParser.PATTERN); + this.state = 385; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 386; + _localctx._pattern = this.stringLiteral(); + } + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public patternsMethod(): PatternsMethodContext { + let _localctx: PatternsMethodContext = new PatternsMethodContext(this._ctx, this.state); + this.enterRule(_localctx, 42, OpenSearchPPLParser.RULE_patternsMethod); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 389; + _la = this._input.LA(1); + if (!(_la === OpenSearchPPLParser.REGEX || _la === OpenSearchPPLParser.PUNCT)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public kmeansCommand(): KmeansCommandContext { + let _localctx: KmeansCommandContext = new KmeansCommandContext(this._ctx, this.state); + this.enterRule(_localctx, 44, OpenSearchPPLParser.RULE_kmeansCommand); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 391; + this.match(OpenSearchPPLParser.KMEANS); + this.state = 395; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (((((_la - 44)) & ~0x1F) === 0 && ((1 << (_la - 44)) & ((1 << (OpenSearchPPLParser.CENTROIDS - 44)) | (1 << (OpenSearchPPLParser.ITERATIONS - 44)) | (1 << (OpenSearchPPLParser.DISTANCE_TYPE - 44)))) !== 0)) { + { + { + this.state = 392; + this.kmeansParameter(); + } + } + this.state = 397; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public kmeansParameter(): KmeansParameterContext { + let _localctx: KmeansParameterContext = new KmeansParameterContext(this._ctx, this.state); + this.enterRule(_localctx, 46, OpenSearchPPLParser.RULE_kmeansParameter); + try { + this.state = 407; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case OpenSearchPPLParser.CENTROIDS: + this.enterOuterAlt(_localctx, 1); + { + { + this.state = 398; + this.match(OpenSearchPPLParser.CENTROIDS); + this.state = 399; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 400; + _localctx._centroids = this.integerLiteral(); + } + } + break; + case OpenSearchPPLParser.ITERATIONS: + this.enterOuterAlt(_localctx, 2); + { + { + this.state = 401; + this.match(OpenSearchPPLParser.ITERATIONS); + this.state = 402; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 403; + _localctx._iterations = this.integerLiteral(); + } + } + break; + case OpenSearchPPLParser.DISTANCE_TYPE: + this.enterOuterAlt(_localctx, 3); + { + { + this.state = 404; + this.match(OpenSearchPPLParser.DISTANCE_TYPE); + this.state = 405; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 406; + _localctx._distance_type = this.stringLiteral(); + } + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public adCommand(): AdCommandContext { + let _localctx: AdCommandContext = new AdCommandContext(this._ctx, this.state); + this.enterRule(_localctx, 48, OpenSearchPPLParser.RULE_adCommand); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 409; + this.match(OpenSearchPPLParser.AD); + this.state = 413; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (((((_la - 47)) & ~0x1F) === 0 && ((1 << (_la - 47)) & ((1 << (OpenSearchPPLParser.NUMBER_OF_TREES - 47)) | (1 << (OpenSearchPPLParser.SHINGLE_SIZE - 47)) | (1 << (OpenSearchPPLParser.SAMPLE_SIZE - 47)) | (1 << (OpenSearchPPLParser.OUTPUT_AFTER - 47)) | (1 << (OpenSearchPPLParser.TIME_DECAY - 47)) | (1 << (OpenSearchPPLParser.ANOMALY_RATE - 47)) | (1 << (OpenSearchPPLParser.CATEGORY_FIELD - 47)) | (1 << (OpenSearchPPLParser.TIME_FIELD - 47)) | (1 << (OpenSearchPPLParser.TIME_ZONE - 47)) | (1 << (OpenSearchPPLParser.TRAINING_DATA_SIZE - 47)) | (1 << (OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD - 47)))) !== 0) || _la === OpenSearchPPLParser.DATE_FORMAT) { + { + { + this.state = 410; + this.adParameter(); + } + } + this.state = 415; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public adParameter(): AdParameterContext { + let _localctx: AdParameterContext = new AdParameterContext(this._ctx, this.state); + this.enterRule(_localctx, 50, OpenSearchPPLParser.RULE_adParameter); + try { + this.state = 452; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case OpenSearchPPLParser.NUMBER_OF_TREES: + this.enterOuterAlt(_localctx, 1); + { + { + this.state = 416; + this.match(OpenSearchPPLParser.NUMBER_OF_TREES); + this.state = 417; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 418; + _localctx._number_of_trees = this.integerLiteral(); + } + } + break; + case OpenSearchPPLParser.SHINGLE_SIZE: + this.enterOuterAlt(_localctx, 2); + { + { + this.state = 419; + this.match(OpenSearchPPLParser.SHINGLE_SIZE); + this.state = 420; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 421; + _localctx._shingle_size = this.integerLiteral(); + } + } + break; + case OpenSearchPPLParser.SAMPLE_SIZE: + this.enterOuterAlt(_localctx, 3); + { + { + this.state = 422; + this.match(OpenSearchPPLParser.SAMPLE_SIZE); + this.state = 423; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 424; + _localctx._sample_size = this.integerLiteral(); + } + } + break; + case OpenSearchPPLParser.OUTPUT_AFTER: + this.enterOuterAlt(_localctx, 4); + { + { + this.state = 425; + this.match(OpenSearchPPLParser.OUTPUT_AFTER); + this.state = 426; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 427; + _localctx._output_after = this.integerLiteral(); + } + } + break; + case OpenSearchPPLParser.TIME_DECAY: + this.enterOuterAlt(_localctx, 5); + { + { + this.state = 428; + this.match(OpenSearchPPLParser.TIME_DECAY); + this.state = 429; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 430; + _localctx._time_decay = this.decimalLiteral(); + } + } + break; + case OpenSearchPPLParser.ANOMALY_RATE: + this.enterOuterAlt(_localctx, 6); + { + { + this.state = 431; + this.match(OpenSearchPPLParser.ANOMALY_RATE); + this.state = 432; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 433; + _localctx._anomaly_rate = this.decimalLiteral(); + } + } + break; + case OpenSearchPPLParser.CATEGORY_FIELD: + this.enterOuterAlt(_localctx, 7); + { + { + this.state = 434; + this.match(OpenSearchPPLParser.CATEGORY_FIELD); + this.state = 435; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 436; + _localctx._category_field = this.stringLiteral(); + } + } + break; + case OpenSearchPPLParser.TIME_FIELD: + this.enterOuterAlt(_localctx, 8); + { + { + this.state = 437; + this.match(OpenSearchPPLParser.TIME_FIELD); + this.state = 438; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 439; + _localctx._time_field = this.stringLiteral(); + } + } + break; + case OpenSearchPPLParser.DATE_FORMAT: + this.enterOuterAlt(_localctx, 9); + { + { + this.state = 440; + this.match(OpenSearchPPLParser.DATE_FORMAT); + this.state = 441; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 442; + _localctx._date_format = this.stringLiteral(); + } + } + break; + case OpenSearchPPLParser.TIME_ZONE: + this.enterOuterAlt(_localctx, 10); + { + { + this.state = 443; + this.match(OpenSearchPPLParser.TIME_ZONE); + this.state = 444; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 445; + _localctx._time_zone = this.stringLiteral(); + } + } + break; + case OpenSearchPPLParser.TRAINING_DATA_SIZE: + this.enterOuterAlt(_localctx, 11); + { + { + this.state = 446; + this.match(OpenSearchPPLParser.TRAINING_DATA_SIZE); + this.state = 447; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 448; + _localctx._training_data_size = this.integerLiteral(); + } + } + break; + case OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD: + this.enterOuterAlt(_localctx, 12); + { + { + this.state = 449; + this.match(OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD); + this.state = 450; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 451; + _localctx._anomaly_score_threshold = this.decimalLiteral(); + } + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public mlCommand(): MlCommandContext { + let _localctx: MlCommandContext = new MlCommandContext(this._ctx, this.state); + this.enterRule(_localctx, 52, OpenSearchPPLParser.RULE_mlCommand); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 454; + this.match(OpenSearchPPLParser.ML); + this.state = 458; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === OpenSearchPPLParser.D || ((((_la - 67)) & ~0x1F) === 0 && ((1 << (_la - 67)) & ((1 << (OpenSearchPPLParser.DATETIME - 67)) | (1 << (OpenSearchPPLParser.MICROSECOND - 67)) | (1 << (OpenSearchPPLParser.MILLISECOND - 67)) | (1 << (OpenSearchPPLParser.SECOND - 67)) | (1 << (OpenSearchPPLParser.MINUTE - 67)) | (1 << (OpenSearchPPLParser.HOUR - 67)) | (1 << (OpenSearchPPLParser.DAY - 67)) | (1 << (OpenSearchPPLParser.WEEK - 67)) | (1 << (OpenSearchPPLParser.MONTH - 67)) | (1 << (OpenSearchPPLParser.QUARTER - 67)) | (1 << (OpenSearchPPLParser.YEAR - 67)) | (1 << (OpenSearchPPLParser.CONVERT_TZ - 67)))) !== 0) || ((((_la - 103)) & ~0x1F) === 0 && ((1 << (_la - 103)) & ((1 << (OpenSearchPPLParser.DOT - 103)) | (1 << (OpenSearchPPLParser.BACKTICK - 103)) | (1 << (OpenSearchPPLParser.AVG - 103)) | (1 << (OpenSearchPPLParser.COUNT - 103)) | (1 << (OpenSearchPPLParser.MAX - 103)))) !== 0) || ((((_la - 135)) & ~0x1F) === 0 && ((1 << (_la - 135)) & ((1 << (OpenSearchPPLParser.MIN - 135)) | (1 << (OpenSearchPPLParser.SUM - 135)) | (1 << (OpenSearchPPLParser.VAR_SAMP - 135)) | (1 << (OpenSearchPPLParser.VAR_POP - 135)) | (1 << (OpenSearchPPLParser.STDDEV_SAMP - 135)) | (1 << (OpenSearchPPLParser.STDDEV_POP - 135)) | (1 << (OpenSearchPPLParser.FIRST - 135)) | (1 << (OpenSearchPPLParser.LAST - 135)) | (1 << (OpenSearchPPLParser.ABS - 135)) | (1 << (OpenSearchPPLParser.CEIL - 135)) | (1 << (OpenSearchPPLParser.CEILING - 135)))) !== 0) || ((((_la - 167)) & ~0x1F) === 0 && ((1 << (_la - 167)) & ((1 << (OpenSearchPPLParser.CONV - 167)) | (1 << (OpenSearchPPLParser.CRC32 - 167)) | (1 << (OpenSearchPPLParser.E - 167)) | (1 << (OpenSearchPPLParser.EXP - 167)) | (1 << (OpenSearchPPLParser.FLOOR - 167)) | (1 << (OpenSearchPPLParser.LN - 167)) | (1 << (OpenSearchPPLParser.LOG - 167)) | (1 << (OpenSearchPPLParser.LOG10 - 167)) | (1 << (OpenSearchPPLParser.LOG2 - 167)) | (1 << (OpenSearchPPLParser.MOD - 167)) | (1 << (OpenSearchPPLParser.PI - 167)) | (1 << (OpenSearchPPLParser.POW - 167)) | (1 << (OpenSearchPPLParser.POWER - 167)) | (1 << (OpenSearchPPLParser.RAND - 167)) | (1 << (OpenSearchPPLParser.ROUND - 167)) | (1 << (OpenSearchPPLParser.SIGN - 167)) | (1 << (OpenSearchPPLParser.SQRT - 167)) | (1 << (OpenSearchPPLParser.TRUNCATE - 167)) | (1 << (OpenSearchPPLParser.ACOS - 167)) | (1 << (OpenSearchPPLParser.ASIN - 167)) | (1 << (OpenSearchPPLParser.ATAN - 167)) | (1 << (OpenSearchPPLParser.ATAN2 - 167)) | (1 << (OpenSearchPPLParser.COS - 167)) | (1 << (OpenSearchPPLParser.COT - 167)) | (1 << (OpenSearchPPLParser.DEGREES - 167)) | (1 << (OpenSearchPPLParser.RADIANS - 167)) | (1 << (OpenSearchPPLParser.SIN - 167)) | (1 << (OpenSearchPPLParser.TAN - 167)) | (1 << (OpenSearchPPLParser.ADDDATE - 167)) | (1 << (OpenSearchPPLParser.CURDATE - 167)) | (1 << (OpenSearchPPLParser.CURRENT_DATE - 167)) | (1 << (OpenSearchPPLParser.CURRENT_TIME - 167)))) !== 0) || ((((_la - 199)) & ~0x1F) === 0 && ((1 << (_la - 199)) & ((1 << (OpenSearchPPLParser.CURRENT_TIMESTAMP - 199)) | (1 << (OpenSearchPPLParser.CURTIME - 199)) | (1 << (OpenSearchPPLParser.DATE - 199)) | (1 << (OpenSearchPPLParser.DATE_ADD - 199)) | (1 << (OpenSearchPPLParser.DATE_FORMAT - 199)) | (1 << (OpenSearchPPLParser.DATE_SUB - 199)) | (1 << (OpenSearchPPLParser.DAYNAME - 199)) | (1 << (OpenSearchPPLParser.DAYOFMONTH - 199)) | (1 << (OpenSearchPPLParser.DAYOFWEEK - 199)) | (1 << (OpenSearchPPLParser.DAYOFYEAR - 199)) | (1 << (OpenSearchPPLParser.FROM_DAYS - 199)) | (1 << (OpenSearchPPLParser.LOCALTIME - 199)) | (1 << (OpenSearchPPLParser.LOCALTIMESTAMP - 199)) | (1 << (OpenSearchPPLParser.FROM_UNIXTIME - 199)) | (1 << (OpenSearchPPLParser.MAKEDATE - 199)) | (1 << (OpenSearchPPLParser.MAKETIME - 199)) | (1 << (OpenSearchPPLParser.MONTHNAME - 199)) | (1 << (OpenSearchPPLParser.NOW - 199)) | (1 << (OpenSearchPPLParser.PERIOD_ADD - 199)) | (1 << (OpenSearchPPLParser.PERIOD_DIFF - 199)) | (1 << (OpenSearchPPLParser.SUBDATE - 199)) | (1 << (OpenSearchPPLParser.SYSDATE - 199)) | (1 << (OpenSearchPPLParser.TIME - 199)) | (1 << (OpenSearchPPLParser.TIME_TO_SEC - 199)) | (1 << (OpenSearchPPLParser.TIMESTAMP - 199)) | (1 << (OpenSearchPPLParser.TO_DAYS - 199)) | (1 << (OpenSearchPPLParser.UTC_DATE - 199)) | (1 << (OpenSearchPPLParser.UTC_TIME - 199)) | (1 << (OpenSearchPPLParser.UTC_TIMESTAMP - 199)) | (1 << (OpenSearchPPLParser.UNIX_TIMESTAMP - 199)) | (1 << (OpenSearchPPLParser.SUBSTR - 199)) | (1 << (OpenSearchPPLParser.SUBSTRING - 199)))) !== 0) || ((((_la - 231)) & ~0x1F) === 0 && ((1 << (_la - 231)) & ((1 << (OpenSearchPPLParser.LTRIM - 231)) | (1 << (OpenSearchPPLParser.RTRIM - 231)) | (1 << (OpenSearchPPLParser.TRIM - 231)) | (1 << (OpenSearchPPLParser.LOWER - 231)) | (1 << (OpenSearchPPLParser.UPPER - 231)) | (1 << (OpenSearchPPLParser.CONCAT - 231)) | (1 << (OpenSearchPPLParser.CONCAT_WS - 231)) | (1 << (OpenSearchPPLParser.LENGTH - 231)) | (1 << (OpenSearchPPLParser.STRCMP - 231)) | (1 << (OpenSearchPPLParser.RIGHT - 231)) | (1 << (OpenSearchPPLParser.LEFT - 231)) | (1 << (OpenSearchPPLParser.ASCII - 231)) | (1 << (OpenSearchPPLParser.LOCATE - 231)) | (1 << (OpenSearchPPLParser.REPLACE - 231)))) !== 0) || ((((_la - 292)) & ~0x1F) === 0 && ((1 << (_la - 292)) & ((1 << (OpenSearchPPLParser.SPAN - 292)) | (1 << (OpenSearchPPLParser.MS - 292)) | (1 << (OpenSearchPPLParser.S - 292)) | (1 << (OpenSearchPPLParser.M - 292)) | (1 << (OpenSearchPPLParser.H - 292)) | (1 << (OpenSearchPPLParser.W - 292)) | (1 << (OpenSearchPPLParser.Q - 292)) | (1 << (OpenSearchPPLParser.Y - 292)) | (1 << (OpenSearchPPLParser.ID - 292)) | (1 << (OpenSearchPPLParser.BQUOTA_STRING - 292)))) !== 0)) { + { + { + this.state = 455; + this.mlArg(); + } + } + this.state = 460; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public mlArg(): MlArgContext { + let _localctx: MlArgContext = new MlArgContext(this._ctx, this.state); + this.enterRule(_localctx, 54, OpenSearchPPLParser.RULE_mlArg); + try { + this.enterOuterAlt(_localctx, 1); + { + { + this.state = 461; + _localctx._argName = this.ident(); + this.state = 462; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 463; + _localctx._argValue = this.literalValue(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public fromClause(): FromClauseContext { + let _localctx: FromClauseContext = new FromClauseContext(this._ctx, this.state); + this.enterRule(_localctx, 56, OpenSearchPPLParser.RULE_fromClause); + try { + this.state = 477; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 32, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 465; + this.match(OpenSearchPPLParser.SOURCE); + this.state = 466; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 467; + this.tableSourceClause(); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 468; + this.match(OpenSearchPPLParser.INDEX); + this.state = 469; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 470; + this.tableSourceClause(); + } + break; + + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 471; + this.match(OpenSearchPPLParser.SOURCE); + this.state = 472; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 473; + this.tableFunction(); + } + break; + + case 4: + this.enterOuterAlt(_localctx, 4); + { + this.state = 474; + this.match(OpenSearchPPLParser.INDEX); + this.state = 475; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 476; + this.tableFunction(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public tableSourceClause(): TableSourceClauseContext { + let _localctx: TableSourceClauseContext = new TableSourceClauseContext(this._ctx, this.state); + this.enterRule(_localctx, 58, OpenSearchPPLParser.RULE_tableSourceClause); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 479; + this.tableSource(); + this.state = 484; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === OpenSearchPPLParser.COMMA) { + { + { + this.state = 480; + this.match(OpenSearchPPLParser.COMMA); + this.state = 481; + this.tableSource(); + } + } + this.state = 486; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public renameClasue(): RenameClasueContext { + let _localctx: RenameClasueContext = new RenameClasueContext(this._ctx, this.state); + this.enterRule(_localctx, 60, OpenSearchPPLParser.RULE_renameClasue); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 487; + _localctx._orignalField = this.wcFieldExpression(); + this.state = 488; + this.match(OpenSearchPPLParser.AS); + this.state = 489; + _localctx._renamedField = this.wcFieldExpression(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public byClause(): ByClauseContext { + let _localctx: ByClauseContext = new ByClauseContext(this._ctx, this.state); + this.enterRule(_localctx, 62, OpenSearchPPLParser.RULE_byClause); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 491; + this.match(OpenSearchPPLParser.BY); + this.state = 492; + this.fieldList(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public statsByClause(): StatsByClauseContext { + let _localctx: StatsByClauseContext = new StatsByClauseContext(this._ctx, this.state); + this.enterRule(_localctx, 64, OpenSearchPPLParser.RULE_statsByClause); + try { + this.state = 503; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 34, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 494; + this.match(OpenSearchPPLParser.BY); + this.state = 495; + this.fieldList(); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 496; + this.match(OpenSearchPPLParser.BY); + this.state = 497; + this.bySpanClause(); + } + break; + + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 498; + this.match(OpenSearchPPLParser.BY); + this.state = 499; + this.bySpanClause(); + this.state = 500; + this.match(OpenSearchPPLParser.COMMA); + this.state = 501; + this.fieldList(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public bySpanClause(): BySpanClauseContext { + let _localctx: BySpanClauseContext = new BySpanClauseContext(this._ctx, this.state); + this.enterRule(_localctx, 66, OpenSearchPPLParser.RULE_bySpanClause); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 505; + this.spanClause(); + this.state = 508; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.AS) { + { + this.state = 506; + this.match(OpenSearchPPLParser.AS); + this.state = 507; + _localctx._alias = this.qualifiedName(); + } + } + + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public spanClause(): SpanClauseContext { + let _localctx: SpanClauseContext = new SpanClauseContext(this._ctx, this.state); + this.enterRule(_localctx, 68, OpenSearchPPLParser.RULE_spanClause); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 510; + this.match(OpenSearchPPLParser.SPAN); + this.state = 511; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 512; + this.fieldExpression(); + this.state = 513; + this.match(OpenSearchPPLParser.COMMA); + this.state = 514; + _localctx._value = this.literalValue(); + this.state = 516; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.D || ((((_la - 70)) & ~0x1F) === 0 && ((1 << (_la - 70)) & ((1 << (OpenSearchPPLParser.MILLISECOND - 70)) | (1 << (OpenSearchPPLParser.SECOND - 70)) | (1 << (OpenSearchPPLParser.MINUTE - 70)) | (1 << (OpenSearchPPLParser.HOUR - 70)) | (1 << (OpenSearchPPLParser.DAY - 70)) | (1 << (OpenSearchPPLParser.WEEK - 70)) | (1 << (OpenSearchPPLParser.MONTH - 70)) | (1 << (OpenSearchPPLParser.QUARTER - 70)) | (1 << (OpenSearchPPLParser.YEAR - 70)))) !== 0) || ((((_la - 293)) & ~0x1F) === 0 && ((1 << (_la - 293)) & ((1 << (OpenSearchPPLParser.MS - 293)) | (1 << (OpenSearchPPLParser.S - 293)) | (1 << (OpenSearchPPLParser.M - 293)) | (1 << (OpenSearchPPLParser.H - 293)) | (1 << (OpenSearchPPLParser.W - 293)) | (1 << (OpenSearchPPLParser.Q - 293)) | (1 << (OpenSearchPPLParser.Y - 293)))) !== 0)) { + { + this.state = 515; + _localctx._unit = this.timespanUnit(); + } + } + + this.state = 518; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public sortbyClause(): SortbyClauseContext { + let _localctx: SortbyClauseContext = new SortbyClauseContext(this._ctx, this.state); + this.enterRule(_localctx, 70, OpenSearchPPLParser.RULE_sortbyClause); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 520; + this.sortField(); + this.state = 525; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === OpenSearchPPLParser.COMMA) { + { + { + this.state = 521; + this.match(OpenSearchPPLParser.COMMA); + this.state = 522; + this.sortField(); + } + } + this.state = 527; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public evalClause(): EvalClauseContext { + let _localctx: EvalClauseContext = new EvalClauseContext(this._ctx, this.state); + this.enterRule(_localctx, 72, OpenSearchPPLParser.RULE_evalClause); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 528; + this.fieldExpression(); + this.state = 529; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 530; + this.expression(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public statsAggTerm(): StatsAggTermContext { + let _localctx: StatsAggTermContext = new StatsAggTermContext(this._ctx, this.state); + this.enterRule(_localctx, 74, OpenSearchPPLParser.RULE_statsAggTerm); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 532; + this.statsFunction(); + this.state = 535; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.AS) { + { + this.state = 533; + this.match(OpenSearchPPLParser.AS); + this.state = 534; + _localctx._alias = this.wcFieldExpression(); + } + } + + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public statsFunction(): StatsFunctionContext { + let _localctx: StatsFunctionContext = new StatsFunctionContext(this._ctx, this.state); + this.enterRule(_localctx, 76, OpenSearchPPLParser.RULE_statsFunction); + let _la: number; + try { + this.state = 552; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 39, this._ctx) ) { + case 1: + _localctx = new StatsFunctionCallContext(_localctx); + this.enterOuterAlt(_localctx, 1); + { + this.state = 537; + this.statsFunctionName(); + this.state = 538; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 539; + this.valueExpression(0); + this.state = 540; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + break; + + case 2: + _localctx = new CountAllFunctionCallContext(_localctx); + this.enterOuterAlt(_localctx, 2); + { + this.state = 542; + this.match(OpenSearchPPLParser.COUNT); + this.state = 543; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 544; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + break; + + case 3: + _localctx = new DistinctCountFunctionCallContext(_localctx); + this.enterOuterAlt(_localctx, 3); + { + this.state = 545; + _la = this._input.LA(1); + if (!(_la === OpenSearchPPLParser.DISTINCT_COUNT || _la === OpenSearchPPLParser.DC)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 546; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 547; + this.valueExpression(0); + this.state = 548; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + break; + + case 4: + _localctx = new PercentileAggFunctionCallContext(_localctx); + this.enterOuterAlt(_localctx, 4); + { + this.state = 550; + this.percentileAggFunction(); + } + break; + + case 5: + _localctx = new TakeAggFunctionCallContext(_localctx); + this.enterOuterAlt(_localctx, 5); + { + this.state = 551; + this.takeAggFunction(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public statsFunctionName(): StatsFunctionNameContext { + let _localctx: StatsFunctionNameContext = new StatsFunctionNameContext(this._ctx, this.state); + this.enterRule(_localctx, 78, OpenSearchPPLParser.RULE_statsFunctionName); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 554; + _la = this._input.LA(1); + if (!(((((_la - 127)) & ~0x1F) === 0 && ((1 << (_la - 127)) & ((1 << (OpenSearchPPLParser.AVG - 127)) | (1 << (OpenSearchPPLParser.COUNT - 127)) | (1 << (OpenSearchPPLParser.MAX - 127)) | (1 << (OpenSearchPPLParser.MIN - 127)) | (1 << (OpenSearchPPLParser.SUM - 127)) | (1 << (OpenSearchPPLParser.VAR_SAMP - 127)) | (1 << (OpenSearchPPLParser.VAR_POP - 127)) | (1 << (OpenSearchPPLParser.STDDEV_SAMP - 127)) | (1 << (OpenSearchPPLParser.STDDEV_POP - 127)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public takeAggFunction(): TakeAggFunctionContext { + let _localctx: TakeAggFunctionContext = new TakeAggFunctionContext(this._ctx, this.state); + this.enterRule(_localctx, 80, OpenSearchPPLParser.RULE_takeAggFunction); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 556; + this.match(OpenSearchPPLParser.TAKE); + this.state = 557; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 558; + this.fieldExpression(); + this.state = 561; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.COMMA) { + { + this.state = 559; + this.match(OpenSearchPPLParser.COMMA); + this.state = 560; + _localctx._size = this.integerLiteral(); + } + } + + this.state = 563; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public percentileAggFunction(): PercentileAggFunctionContext { + let _localctx: PercentileAggFunctionContext = new PercentileAggFunctionContext(this._ctx, this.state); + this.enterRule(_localctx, 82, OpenSearchPPLParser.RULE_percentileAggFunction); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 565; + this.match(OpenSearchPPLParser.PERCENTILE); + this.state = 566; + this.match(OpenSearchPPLParser.LESS); + this.state = 567; + _localctx._value = this.integerLiteral(); + this.state = 568; + this.match(OpenSearchPPLParser.GREATER); + this.state = 569; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 570; + _localctx._aggField = this.fieldExpression(); + this.state = 571; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public expression(): ExpressionContext { + let _localctx: ExpressionContext = new ExpressionContext(this._ctx, this.state); + this.enterRule(_localctx, 84, OpenSearchPPLParser.RULE_expression); + try { + this.state = 576; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 41, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 573; + this.logicalExpression(0); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 574; + this.comparisonExpression(); + } + break; + + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 575; + this.valueExpression(0); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + + public logicalExpression(): LogicalExpressionContext; + public logicalExpression(_p: number): LogicalExpressionContext; + // @RuleVersion(0) + public logicalExpression(_p?: number): LogicalExpressionContext { + if (_p === undefined) { + _p = 0; + } + + let _parentctx: ParserRuleContext = this._ctx; + let _parentState: number = this.state; + let _localctx: LogicalExpressionContext = new LogicalExpressionContext(this._ctx, _parentState); + let _prevctx: LogicalExpressionContext = _localctx; + let _startState: number = 86; + this.enterRecursionRule(_localctx, 86, OpenSearchPPLParser.RULE_logicalExpression, _p); + let _la: number; + try { + let _alt: number; + this.enterOuterAlt(_localctx, 1); + { + this.state = 584; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 42, this._ctx) ) { + case 1: + { + _localctx = new ComparsionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + + this.state = 579; + this.comparisonExpression(); + } + break; + + case 2: + { + _localctx = new LogicalNotContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + this.state = 580; + this.match(OpenSearchPPLParser.NOT); + this.state = 581; + this.logicalExpression(6); + } + break; + + case 3: + { + _localctx = new BooleanExprContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + this.state = 582; + this.booleanExpression(); + } + break; + + case 4: + { + _localctx = new RelevanceExprContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + this.state = 583; + this.relevanceExpression(); + } + break; + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 599; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 45, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + this.state = 597; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 44, this._ctx) ) { + case 1: + { + _localctx = new LogicalOrContext(new LogicalExpressionContext(_parentctx, _parentState)); + (_localctx as LogicalOrContext)._left = _prevctx; + this.pushNewRecursionContext(_localctx, _startState, OpenSearchPPLParser.RULE_logicalExpression); + this.state = 586; + if (!(this.precpred(this._ctx, 5))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 5)"); + } + this.state = 587; + this.match(OpenSearchPPLParser.OR); + this.state = 588; + (_localctx as LogicalOrContext)._right = this.logicalExpression(6); + } + break; + + case 2: + { + _localctx = new LogicalAndContext(new LogicalExpressionContext(_parentctx, _parentState)); + (_localctx as LogicalAndContext)._left = _prevctx; + this.pushNewRecursionContext(_localctx, _startState, OpenSearchPPLParser.RULE_logicalExpression); + this.state = 589; + if (!(this.precpred(this._ctx, 4))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 4)"); + } + this.state = 591; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.AND) { + { + this.state = 590; + this.match(OpenSearchPPLParser.AND); + } + } + + this.state = 593; + (_localctx as LogicalAndContext)._right = this.logicalExpression(5); + } + break; + + case 3: + { + _localctx = new LogicalXorContext(new LogicalExpressionContext(_parentctx, _parentState)); + (_localctx as LogicalXorContext)._left = _prevctx; + this.pushNewRecursionContext(_localctx, _startState, OpenSearchPPLParser.RULE_logicalExpression); + this.state = 594; + if (!(this.precpred(this._ctx, 3))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); + } + this.state = 595; + this.match(OpenSearchPPLParser.XOR); + this.state = 596; + (_localctx as LogicalXorContext)._right = this.logicalExpression(4); + } + break; + } + } + } + this.state = 601; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 45, this._ctx); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(_parentctx); + } + return _localctx; + } + // @RuleVersion(0) + public comparisonExpression(): ComparisonExpressionContext { + let _localctx: ComparisonExpressionContext = new ComparisonExpressionContext(this._ctx, this.state); + this.enterRule(_localctx, 88, OpenSearchPPLParser.RULE_comparisonExpression); + try { + this.state = 610; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 46, this._ctx) ) { + case 1: + _localctx = new CompareExprContext(_localctx); + this.enterOuterAlt(_localctx, 1); + { + this.state = 602; + (_localctx as CompareExprContext)._left = this.valueExpression(0); + this.state = 603; + this.comparisonOperator(); + this.state = 604; + (_localctx as CompareExprContext)._right = this.valueExpression(0); + } + break; + + case 2: + _localctx = new InExprContext(_localctx); + this.enterOuterAlt(_localctx, 2); + { + this.state = 606; + this.valueExpression(0); + this.state = 607; + this.match(OpenSearchPPLParser.IN); + this.state = 608; + this.valueList(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + + public valueExpression(): ValueExpressionContext; + public valueExpression(_p: number): ValueExpressionContext; + // @RuleVersion(0) + public valueExpression(_p?: number): ValueExpressionContext { + if (_p === undefined) { + _p = 0; + } + + let _parentctx: ParserRuleContext = this._ctx; + let _parentState: number = this.state; + let _localctx: ValueExpressionContext = new ValueExpressionContext(this._ctx, _parentState); + let _prevctx: ValueExpressionContext = _localctx; + let _startState: number = 90; + this.enterRecursionRule(_localctx, 90, OpenSearchPPLParser.RULE_valueExpression, _p); + try { + let _alt: number; + this.enterOuterAlt(_localctx, 1); + { + this.state = 620; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case OpenSearchPPLParser.LT_PRTHS: + { + _localctx = new ParentheticBinaryArithmeticContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + + this.state = 613; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 614; + (_localctx as ParentheticBinaryArithmeticContext)._left = this.valueExpression(0); + this.state = 615; + this.binaryOperator(); + this.state = 616; + (_localctx as ParentheticBinaryArithmeticContext)._right = this.valueExpression(0); + this.state = 617; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + break; + case OpenSearchPPLParser.D: + case OpenSearchPPLParser.TRUE: + case OpenSearchPPLParser.FALSE: + case OpenSearchPPLParser.DATETIME: + case OpenSearchPPLParser.INTERVAL: + case OpenSearchPPLParser.MICROSECOND: + case OpenSearchPPLParser.MILLISECOND: + case OpenSearchPPLParser.SECOND: + case OpenSearchPPLParser.MINUTE: + case OpenSearchPPLParser.HOUR: + case OpenSearchPPLParser.DAY: + case OpenSearchPPLParser.WEEK: + case OpenSearchPPLParser.MONTH: + case OpenSearchPPLParser.QUARTER: + case OpenSearchPPLParser.YEAR: + case OpenSearchPPLParser.CONVERT_TZ: + case OpenSearchPPLParser.DOT: + case OpenSearchPPLParser.PLUS: + case OpenSearchPPLParser.MINUS: + case OpenSearchPPLParser.BACKTICK: + case OpenSearchPPLParser.AVG: + case OpenSearchPPLParser.COUNT: + case OpenSearchPPLParser.MAX: + case OpenSearchPPLParser.MIN: + case OpenSearchPPLParser.SUM: + case OpenSearchPPLParser.VAR_SAMP: + case OpenSearchPPLParser.VAR_POP: + case OpenSearchPPLParser.STDDEV_SAMP: + case OpenSearchPPLParser.STDDEV_POP: + case OpenSearchPPLParser.FIRST: + case OpenSearchPPLParser.LAST: + case OpenSearchPPLParser.ABS: + case OpenSearchPPLParser.CEIL: + case OpenSearchPPLParser.CEILING: + case OpenSearchPPLParser.CONV: + case OpenSearchPPLParser.CRC32: + case OpenSearchPPLParser.E: + case OpenSearchPPLParser.EXP: + case OpenSearchPPLParser.FLOOR: + case OpenSearchPPLParser.LN: + case OpenSearchPPLParser.LOG: + case OpenSearchPPLParser.LOG10: + case OpenSearchPPLParser.LOG2: + case OpenSearchPPLParser.MOD: + case OpenSearchPPLParser.PI: + case OpenSearchPPLParser.POW: + case OpenSearchPPLParser.POWER: + case OpenSearchPPLParser.RAND: + case OpenSearchPPLParser.ROUND: + case OpenSearchPPLParser.SIGN: + case OpenSearchPPLParser.SQRT: + case OpenSearchPPLParser.TRUNCATE: + case OpenSearchPPLParser.ACOS: + case OpenSearchPPLParser.ASIN: + case OpenSearchPPLParser.ATAN: + case OpenSearchPPLParser.ATAN2: + case OpenSearchPPLParser.COS: + case OpenSearchPPLParser.COT: + case OpenSearchPPLParser.DEGREES: + case OpenSearchPPLParser.RADIANS: + case OpenSearchPPLParser.SIN: + case OpenSearchPPLParser.TAN: + case OpenSearchPPLParser.ADDDATE: + case OpenSearchPPLParser.CURDATE: + case OpenSearchPPLParser.CURRENT_DATE: + case OpenSearchPPLParser.CURRENT_TIME: + case OpenSearchPPLParser.CURRENT_TIMESTAMP: + case OpenSearchPPLParser.CURTIME: + case OpenSearchPPLParser.DATE: + case OpenSearchPPLParser.DATE_ADD: + case OpenSearchPPLParser.DATE_FORMAT: + case OpenSearchPPLParser.DATE_SUB: + case OpenSearchPPLParser.DAYNAME: + case OpenSearchPPLParser.DAYOFMONTH: + case OpenSearchPPLParser.DAYOFWEEK: + case OpenSearchPPLParser.DAYOFYEAR: + case OpenSearchPPLParser.FROM_DAYS: + case OpenSearchPPLParser.LOCALTIME: + case OpenSearchPPLParser.LOCALTIMESTAMP: + case OpenSearchPPLParser.FROM_UNIXTIME: + case OpenSearchPPLParser.MAKEDATE: + case OpenSearchPPLParser.MAKETIME: + case OpenSearchPPLParser.MONTHNAME: + case OpenSearchPPLParser.NOW: + case OpenSearchPPLParser.PERIOD_ADD: + case OpenSearchPPLParser.PERIOD_DIFF: + case OpenSearchPPLParser.SUBDATE: + case OpenSearchPPLParser.SYSDATE: + case OpenSearchPPLParser.TIME: + case OpenSearchPPLParser.TIME_TO_SEC: + case OpenSearchPPLParser.TIMESTAMP: + case OpenSearchPPLParser.TO_DAYS: + case OpenSearchPPLParser.UTC_DATE: + case OpenSearchPPLParser.UTC_TIME: + case OpenSearchPPLParser.UTC_TIMESTAMP: + case OpenSearchPPLParser.UNIX_TIMESTAMP: + case OpenSearchPPLParser.SUBSTR: + case OpenSearchPPLParser.SUBSTRING: + case OpenSearchPPLParser.LTRIM: + case OpenSearchPPLParser.RTRIM: + case OpenSearchPPLParser.TRIM: + case OpenSearchPPLParser.LOWER: + case OpenSearchPPLParser.UPPER: + case OpenSearchPPLParser.CONCAT: + case OpenSearchPPLParser.CONCAT_WS: + case OpenSearchPPLParser.LENGTH: + case OpenSearchPPLParser.STRCMP: + case OpenSearchPPLParser.RIGHT: + case OpenSearchPPLParser.LEFT: + case OpenSearchPPLParser.ASCII: + case OpenSearchPPLParser.LOCATE: + case OpenSearchPPLParser.REPLACE: + case OpenSearchPPLParser.CAST: + case OpenSearchPPLParser.LIKE: + case OpenSearchPPLParser.ISNULL: + case OpenSearchPPLParser.ISNOTNULL: + case OpenSearchPPLParser.IFNULL: + case OpenSearchPPLParser.NULLIF: + case OpenSearchPPLParser.IF: + case OpenSearchPPLParser.TYPEOF: + case OpenSearchPPLParser.SPAN: + case OpenSearchPPLParser.MS: + case OpenSearchPPLParser.S: + case OpenSearchPPLParser.M: + case OpenSearchPPLParser.H: + case OpenSearchPPLParser.W: + case OpenSearchPPLParser.Q: + case OpenSearchPPLParser.Y: + case OpenSearchPPLParser.ID: + case OpenSearchPPLParser.INTEGER_LITERAL: + case OpenSearchPPLParser.DECIMAL_LITERAL: + case OpenSearchPPLParser.DQUOTA_STRING: + case OpenSearchPPLParser.SQUOTA_STRING: + case OpenSearchPPLParser.BQUOTA_STRING: + { + _localctx = new ValueExpressionDefaultContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + this.state = 619; + this.primaryExpression(); + } + break; + default: + throw new NoViableAltException(this); + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 628; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 48, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new BinaryArithmeticContext(new ValueExpressionContext(_parentctx, _parentState)); + (_localctx as BinaryArithmeticContext)._left = _prevctx; + this.pushNewRecursionContext(_localctx, _startState, OpenSearchPPLParser.RULE_valueExpression); + this.state = 622; + if (!(this.precpred(this._ctx, 3))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); + } + this.state = 623; + this.binaryOperator(); + this.state = 624; + (_localctx as BinaryArithmeticContext)._right = this.valueExpression(4); + } + } + } + this.state = 630; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 48, this._ctx); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(_parentctx); + } + return _localctx; + } + // @RuleVersion(0) + public primaryExpression(): PrimaryExpressionContext { + let _localctx: PrimaryExpressionContext = new PrimaryExpressionContext(this._ctx, this.state); + this.enterRule(_localctx, 92, OpenSearchPPLParser.RULE_primaryExpression); + try { + this.state = 636; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 49, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 631; + this.evalFunctionCall(); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 632; + this.dataTypeFunctionCall(); + } + break; + + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 633; + this.fieldExpression(); + } + break; + + case 4: + this.enterOuterAlt(_localctx, 4); + { + this.state = 634; + this.literalValue(); + } + break; + + case 5: + this.enterOuterAlt(_localctx, 5); + { + this.state = 635; + this.constantFunction(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public constantFunction(): ConstantFunctionContext { + let _localctx: ConstantFunctionContext = new ConstantFunctionContext(this._ctx, this.state); + this.enterRule(_localctx, 94, OpenSearchPPLParser.RULE_constantFunction); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 638; + this.constantFunctionName(); + this.state = 639; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 641; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 50, this._ctx) ) { + case 1: + { + this.state = 640; + this.functionArgs(); + } + break; + } + this.state = 643; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public booleanExpression(): BooleanExpressionContext { + let _localctx: BooleanExpressionContext = new BooleanExpressionContext(this._ctx, this.state); + this.enterRule(_localctx, 96, OpenSearchPPLParser.RULE_booleanExpression); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 645; + this.booleanFunctionCall(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public relevanceExpression(): RelevanceExpressionContext { + let _localctx: RelevanceExpressionContext = new RelevanceExpressionContext(this._ctx, this.state); + this.enterRule(_localctx, 98, OpenSearchPPLParser.RULE_relevanceExpression); + try { + this.state = 649; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case OpenSearchPPLParser.MATCH: + case OpenSearchPPLParser.MATCH_PHRASE: + case OpenSearchPPLParser.MATCH_PHRASE_PREFIX: + case OpenSearchPPLParser.MATCH_BOOL_PREFIX: + this.enterOuterAlt(_localctx, 1); + { + this.state = 647; + this.singleFieldRelevanceFunction(); + } + break; + case OpenSearchPPLParser.SIMPLE_QUERY_STRING: + case OpenSearchPPLParser.MULTI_MATCH: + case OpenSearchPPLParser.QUERY_STRING: + this.enterOuterAlt(_localctx, 2); + { + this.state = 648; + this.multiFieldRelevanceFunction(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public singleFieldRelevanceFunction(): SingleFieldRelevanceFunctionContext { + let _localctx: SingleFieldRelevanceFunctionContext = new SingleFieldRelevanceFunctionContext(this._ctx, this.state); + this.enterRule(_localctx, 100, OpenSearchPPLParser.RULE_singleFieldRelevanceFunction); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 651; + this.singleFieldRelevanceFunctionName(); + this.state = 652; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 653; + _localctx._field = this.relevanceField(); + this.state = 654; + this.match(OpenSearchPPLParser.COMMA); + this.state = 655; + _localctx._query = this.relevanceQuery(); + this.state = 660; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === OpenSearchPPLParser.COMMA) { + { + { + this.state = 656; + this.match(OpenSearchPPLParser.COMMA); + this.state = 657; + this.relevanceArg(); + } + } + this.state = 662; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 663; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public multiFieldRelevanceFunction(): MultiFieldRelevanceFunctionContext { + let _localctx: MultiFieldRelevanceFunctionContext = new MultiFieldRelevanceFunctionContext(this._ctx, this.state); + this.enterRule(_localctx, 102, OpenSearchPPLParser.RULE_multiFieldRelevanceFunction); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 665; + this.multiFieldRelevanceFunctionName(); + this.state = 666; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 667; + this.match(OpenSearchPPLParser.LT_SQR_PRTHS); + this.state = 668; + _localctx._field = this.relevanceFieldAndWeight(); + this.state = 673; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === OpenSearchPPLParser.COMMA) { + { + { + this.state = 669; + this.match(OpenSearchPPLParser.COMMA); + this.state = 670; + _localctx._field = this.relevanceFieldAndWeight(); + } + } + this.state = 675; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 676; + this.match(OpenSearchPPLParser.RT_SQR_PRTHS); + this.state = 677; + this.match(OpenSearchPPLParser.COMMA); + this.state = 678; + _localctx._query = this.relevanceQuery(); + this.state = 683; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === OpenSearchPPLParser.COMMA) { + { + { + this.state = 679; + this.match(OpenSearchPPLParser.COMMA); + this.state = 680; + this.relevanceArg(); + } + } + this.state = 685; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 686; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public tableSource(): TableSourceContext { + let _localctx: TableSourceContext = new TableSourceContext(this._ctx, this.state); + this.enterRule(_localctx, 104, OpenSearchPPLParser.RULE_tableSource); + try { + this.state = 690; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case OpenSearchPPLParser.D: + case OpenSearchPPLParser.DATETIME: + case OpenSearchPPLParser.MICROSECOND: + case OpenSearchPPLParser.MILLISECOND: + case OpenSearchPPLParser.SECOND: + case OpenSearchPPLParser.MINUTE: + case OpenSearchPPLParser.HOUR: + case OpenSearchPPLParser.DAY: + case OpenSearchPPLParser.WEEK: + case OpenSearchPPLParser.MONTH: + case OpenSearchPPLParser.QUARTER: + case OpenSearchPPLParser.YEAR: + case OpenSearchPPLParser.CONVERT_TZ: + case OpenSearchPPLParser.DOT: + case OpenSearchPPLParser.BACKTICK: + case OpenSearchPPLParser.AVG: + case OpenSearchPPLParser.COUNT: + case OpenSearchPPLParser.MAX: + case OpenSearchPPLParser.MIN: + case OpenSearchPPLParser.SUM: + case OpenSearchPPLParser.VAR_SAMP: + case OpenSearchPPLParser.VAR_POP: + case OpenSearchPPLParser.STDDEV_SAMP: + case OpenSearchPPLParser.STDDEV_POP: + case OpenSearchPPLParser.FIRST: + case OpenSearchPPLParser.LAST: + case OpenSearchPPLParser.ABS: + case OpenSearchPPLParser.CEIL: + case OpenSearchPPLParser.CEILING: + case OpenSearchPPLParser.CONV: + case OpenSearchPPLParser.CRC32: + case OpenSearchPPLParser.E: + case OpenSearchPPLParser.EXP: + case OpenSearchPPLParser.FLOOR: + case OpenSearchPPLParser.LN: + case OpenSearchPPLParser.LOG: + case OpenSearchPPLParser.LOG10: + case OpenSearchPPLParser.LOG2: + case OpenSearchPPLParser.MOD: + case OpenSearchPPLParser.PI: + case OpenSearchPPLParser.POW: + case OpenSearchPPLParser.POWER: + case OpenSearchPPLParser.RAND: + case OpenSearchPPLParser.ROUND: + case OpenSearchPPLParser.SIGN: + case OpenSearchPPLParser.SQRT: + case OpenSearchPPLParser.TRUNCATE: + case OpenSearchPPLParser.ACOS: + case OpenSearchPPLParser.ASIN: + case OpenSearchPPLParser.ATAN: + case OpenSearchPPLParser.ATAN2: + case OpenSearchPPLParser.COS: + case OpenSearchPPLParser.COT: + case OpenSearchPPLParser.DEGREES: + case OpenSearchPPLParser.RADIANS: + case OpenSearchPPLParser.SIN: + case OpenSearchPPLParser.TAN: + case OpenSearchPPLParser.ADDDATE: + case OpenSearchPPLParser.CURDATE: + case OpenSearchPPLParser.CURRENT_DATE: + case OpenSearchPPLParser.CURRENT_TIME: + case OpenSearchPPLParser.CURRENT_TIMESTAMP: + case OpenSearchPPLParser.CURTIME: + case OpenSearchPPLParser.DATE: + case OpenSearchPPLParser.DATE_ADD: + case OpenSearchPPLParser.DATE_FORMAT: + case OpenSearchPPLParser.DATE_SUB: + case OpenSearchPPLParser.DAYNAME: + case OpenSearchPPLParser.DAYOFMONTH: + case OpenSearchPPLParser.DAYOFWEEK: + case OpenSearchPPLParser.DAYOFYEAR: + case OpenSearchPPLParser.FROM_DAYS: + case OpenSearchPPLParser.LOCALTIME: + case OpenSearchPPLParser.LOCALTIMESTAMP: + case OpenSearchPPLParser.FROM_UNIXTIME: + case OpenSearchPPLParser.MAKEDATE: + case OpenSearchPPLParser.MAKETIME: + case OpenSearchPPLParser.MONTHNAME: + case OpenSearchPPLParser.NOW: + case OpenSearchPPLParser.PERIOD_ADD: + case OpenSearchPPLParser.PERIOD_DIFF: + case OpenSearchPPLParser.SUBDATE: + case OpenSearchPPLParser.SYSDATE: + case OpenSearchPPLParser.TIME: + case OpenSearchPPLParser.TIME_TO_SEC: + case OpenSearchPPLParser.TIMESTAMP: + case OpenSearchPPLParser.TO_DAYS: + case OpenSearchPPLParser.UTC_DATE: + case OpenSearchPPLParser.UTC_TIME: + case OpenSearchPPLParser.UTC_TIMESTAMP: + case OpenSearchPPLParser.UNIX_TIMESTAMP: + case OpenSearchPPLParser.SUBSTR: + case OpenSearchPPLParser.SUBSTRING: + case OpenSearchPPLParser.LTRIM: + case OpenSearchPPLParser.RTRIM: + case OpenSearchPPLParser.TRIM: + case OpenSearchPPLParser.LOWER: + case OpenSearchPPLParser.UPPER: + case OpenSearchPPLParser.CONCAT: + case OpenSearchPPLParser.CONCAT_WS: + case OpenSearchPPLParser.LENGTH: + case OpenSearchPPLParser.STRCMP: + case OpenSearchPPLParser.RIGHT: + case OpenSearchPPLParser.LEFT: + case OpenSearchPPLParser.ASCII: + case OpenSearchPPLParser.LOCATE: + case OpenSearchPPLParser.REPLACE: + case OpenSearchPPLParser.SPAN: + case OpenSearchPPLParser.MS: + case OpenSearchPPLParser.S: + case OpenSearchPPLParser.M: + case OpenSearchPPLParser.H: + case OpenSearchPPLParser.W: + case OpenSearchPPLParser.Q: + case OpenSearchPPLParser.Y: + case OpenSearchPPLParser.ID: + case OpenSearchPPLParser.BQUOTA_STRING: + this.enterOuterAlt(_localctx, 1); + { + this.state = 688; + this.qualifiedName(); + } + break; + case OpenSearchPPLParser.ID_DATE_SUFFIX: + this.enterOuterAlt(_localctx, 2); + { + this.state = 689; + this.match(OpenSearchPPLParser.ID_DATE_SUFFIX); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public tableFunction(): TableFunctionContext { + let _localctx: TableFunctionContext = new TableFunctionContext(this._ctx, this.state); + this.enterRule(_localctx, 106, OpenSearchPPLParser.RULE_tableFunction); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 692; + this.qualifiedName(); + this.state = 693; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 694; + this.functionArgs(); + this.state = 695; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public fieldList(): FieldListContext { + let _localctx: FieldListContext = new FieldListContext(this._ctx, this.state); + this.enterRule(_localctx, 108, OpenSearchPPLParser.RULE_fieldList); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 697; + this.fieldExpression(); + this.state = 702; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === OpenSearchPPLParser.COMMA) { + { + { + this.state = 698; + this.match(OpenSearchPPLParser.COMMA); + this.state = 699; + this.fieldExpression(); + } + } + this.state = 704; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public wcFieldList(): WcFieldListContext { + let _localctx: WcFieldListContext = new WcFieldListContext(this._ctx, this.state); + this.enterRule(_localctx, 110, OpenSearchPPLParser.RULE_wcFieldList); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 705; + this.wcFieldExpression(); + this.state = 710; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === OpenSearchPPLParser.COMMA) { + { + { + this.state = 706; + this.match(OpenSearchPPLParser.COMMA); + this.state = 707; + this.wcFieldExpression(); + } + } + this.state = 712; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public sortField(): SortFieldContext { + let _localctx: SortFieldContext = new SortFieldContext(this._ctx, this.state); + this.enterRule(_localctx, 112, OpenSearchPPLParser.RULE_sortField); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 714; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.PLUS || _la === OpenSearchPPLParser.MINUS) { + { + this.state = 713; + _la = this._input.LA(1); + if (!(_la === OpenSearchPPLParser.PLUS || _la === OpenSearchPPLParser.MINUS)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + + this.state = 716; + this.sortFieldExpression(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public sortFieldExpression(): SortFieldExpressionContext { + let _localctx: SortFieldExpressionContext = new SortFieldExpressionContext(this._ctx, this.state); + this.enterRule(_localctx, 114, OpenSearchPPLParser.RULE_sortFieldExpression); + try { + this.state = 739; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case OpenSearchPPLParser.D: + case OpenSearchPPLParser.DATETIME: + case OpenSearchPPLParser.MICROSECOND: + case OpenSearchPPLParser.MILLISECOND: + case OpenSearchPPLParser.SECOND: + case OpenSearchPPLParser.MINUTE: + case OpenSearchPPLParser.HOUR: + case OpenSearchPPLParser.DAY: + case OpenSearchPPLParser.WEEK: + case OpenSearchPPLParser.MONTH: + case OpenSearchPPLParser.QUARTER: + case OpenSearchPPLParser.YEAR: + case OpenSearchPPLParser.CONVERT_TZ: + case OpenSearchPPLParser.DOT: + case OpenSearchPPLParser.BACKTICK: + case OpenSearchPPLParser.AVG: + case OpenSearchPPLParser.COUNT: + case OpenSearchPPLParser.MAX: + case OpenSearchPPLParser.MIN: + case OpenSearchPPLParser.SUM: + case OpenSearchPPLParser.VAR_SAMP: + case OpenSearchPPLParser.VAR_POP: + case OpenSearchPPLParser.STDDEV_SAMP: + case OpenSearchPPLParser.STDDEV_POP: + case OpenSearchPPLParser.FIRST: + case OpenSearchPPLParser.LAST: + case OpenSearchPPLParser.ABS: + case OpenSearchPPLParser.CEIL: + case OpenSearchPPLParser.CEILING: + case OpenSearchPPLParser.CONV: + case OpenSearchPPLParser.CRC32: + case OpenSearchPPLParser.E: + case OpenSearchPPLParser.EXP: + case OpenSearchPPLParser.FLOOR: + case OpenSearchPPLParser.LN: + case OpenSearchPPLParser.LOG: + case OpenSearchPPLParser.LOG10: + case OpenSearchPPLParser.LOG2: + case OpenSearchPPLParser.MOD: + case OpenSearchPPLParser.PI: + case OpenSearchPPLParser.POW: + case OpenSearchPPLParser.POWER: + case OpenSearchPPLParser.RAND: + case OpenSearchPPLParser.ROUND: + case OpenSearchPPLParser.SIGN: + case OpenSearchPPLParser.SQRT: + case OpenSearchPPLParser.TRUNCATE: + case OpenSearchPPLParser.ACOS: + case OpenSearchPPLParser.ASIN: + case OpenSearchPPLParser.ATAN: + case OpenSearchPPLParser.ATAN2: + case OpenSearchPPLParser.COS: + case OpenSearchPPLParser.COT: + case OpenSearchPPLParser.DEGREES: + case OpenSearchPPLParser.RADIANS: + case OpenSearchPPLParser.SIN: + case OpenSearchPPLParser.TAN: + case OpenSearchPPLParser.ADDDATE: + case OpenSearchPPLParser.CURDATE: + case OpenSearchPPLParser.CURRENT_DATE: + case OpenSearchPPLParser.CURRENT_TIME: + case OpenSearchPPLParser.CURRENT_TIMESTAMP: + case OpenSearchPPLParser.CURTIME: + case OpenSearchPPLParser.DATE: + case OpenSearchPPLParser.DATE_ADD: + case OpenSearchPPLParser.DATE_FORMAT: + case OpenSearchPPLParser.DATE_SUB: + case OpenSearchPPLParser.DAYNAME: + case OpenSearchPPLParser.DAYOFMONTH: + case OpenSearchPPLParser.DAYOFWEEK: + case OpenSearchPPLParser.DAYOFYEAR: + case OpenSearchPPLParser.FROM_DAYS: + case OpenSearchPPLParser.LOCALTIME: + case OpenSearchPPLParser.LOCALTIMESTAMP: + case OpenSearchPPLParser.FROM_UNIXTIME: + case OpenSearchPPLParser.MAKEDATE: + case OpenSearchPPLParser.MAKETIME: + case OpenSearchPPLParser.MONTHNAME: + case OpenSearchPPLParser.NOW: + case OpenSearchPPLParser.PERIOD_ADD: + case OpenSearchPPLParser.PERIOD_DIFF: + case OpenSearchPPLParser.SUBDATE: + case OpenSearchPPLParser.SYSDATE: + case OpenSearchPPLParser.TIME: + case OpenSearchPPLParser.TIME_TO_SEC: + case OpenSearchPPLParser.TIMESTAMP: + case OpenSearchPPLParser.TO_DAYS: + case OpenSearchPPLParser.UTC_DATE: + case OpenSearchPPLParser.UTC_TIME: + case OpenSearchPPLParser.UTC_TIMESTAMP: + case OpenSearchPPLParser.UNIX_TIMESTAMP: + case OpenSearchPPLParser.SUBSTR: + case OpenSearchPPLParser.SUBSTRING: + case OpenSearchPPLParser.LTRIM: + case OpenSearchPPLParser.RTRIM: + case OpenSearchPPLParser.TRIM: + case OpenSearchPPLParser.LOWER: + case OpenSearchPPLParser.UPPER: + case OpenSearchPPLParser.CONCAT: + case OpenSearchPPLParser.CONCAT_WS: + case OpenSearchPPLParser.LENGTH: + case OpenSearchPPLParser.STRCMP: + case OpenSearchPPLParser.RIGHT: + case OpenSearchPPLParser.LEFT: + case OpenSearchPPLParser.ASCII: + case OpenSearchPPLParser.LOCATE: + case OpenSearchPPLParser.REPLACE: + case OpenSearchPPLParser.SPAN: + case OpenSearchPPLParser.MS: + case OpenSearchPPLParser.S: + case OpenSearchPPLParser.M: + case OpenSearchPPLParser.H: + case OpenSearchPPLParser.W: + case OpenSearchPPLParser.Q: + case OpenSearchPPLParser.Y: + case OpenSearchPPLParser.ID: + case OpenSearchPPLParser.BQUOTA_STRING: + this.enterOuterAlt(_localctx, 1); + { + this.state = 718; + this.fieldExpression(); + } + break; + case OpenSearchPPLParser.AUTO: + this.enterOuterAlt(_localctx, 2); + { + this.state = 719; + this.match(OpenSearchPPLParser.AUTO); + this.state = 720; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 721; + this.fieldExpression(); + this.state = 722; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + break; + case OpenSearchPPLParser.STR: + this.enterOuterAlt(_localctx, 3); + { + this.state = 724; + this.match(OpenSearchPPLParser.STR); + this.state = 725; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 726; + this.fieldExpression(); + this.state = 727; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + break; + case OpenSearchPPLParser.IP: + this.enterOuterAlt(_localctx, 4); + { + this.state = 729; + this.match(OpenSearchPPLParser.IP); + this.state = 730; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 731; + this.fieldExpression(); + this.state = 732; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + break; + case OpenSearchPPLParser.NUM: + this.enterOuterAlt(_localctx, 5); + { + this.state = 734; + this.match(OpenSearchPPLParser.NUM); + this.state = 735; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 736; + this.fieldExpression(); + this.state = 737; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public fieldExpression(): FieldExpressionContext { + let _localctx: FieldExpressionContext = new FieldExpressionContext(this._ctx, this.state); + this.enterRule(_localctx, 116, OpenSearchPPLParser.RULE_fieldExpression); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 741; + this.qualifiedName(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public wcFieldExpression(): WcFieldExpressionContext { + let _localctx: WcFieldExpressionContext = new WcFieldExpressionContext(this._ctx, this.state); + this.enterRule(_localctx, 118, OpenSearchPPLParser.RULE_wcFieldExpression); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 743; + this.wcQualifiedName(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public evalFunctionCall(): EvalFunctionCallContext { + let _localctx: EvalFunctionCallContext = new EvalFunctionCallContext(this._ctx, this.state); + this.enterRule(_localctx, 120, OpenSearchPPLParser.RULE_evalFunctionCall); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 745; + this.evalFunctionName(); + this.state = 746; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 747; + this.functionArgs(); + this.state = 748; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public dataTypeFunctionCall(): DataTypeFunctionCallContext { + let _localctx: DataTypeFunctionCallContext = new DataTypeFunctionCallContext(this._ctx, this.state); + this.enterRule(_localctx, 122, OpenSearchPPLParser.RULE_dataTypeFunctionCall); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 750; + this.match(OpenSearchPPLParser.CAST); + this.state = 751; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 752; + this.expression(); + this.state = 753; + this.match(OpenSearchPPLParser.AS); + this.state = 754; + this.convertedDataType(); + this.state = 755; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public booleanFunctionCall(): BooleanFunctionCallContext { + let _localctx: BooleanFunctionCallContext = new BooleanFunctionCallContext(this._ctx, this.state); + this.enterRule(_localctx, 124, OpenSearchPPLParser.RULE_booleanFunctionCall); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 757; + this.conditionFunctionBase(); + this.state = 758; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 759; + this.functionArgs(); + this.state = 760; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public convertedDataType(): ConvertedDataTypeContext { + let _localctx: ConvertedDataTypeContext = new ConvertedDataTypeContext(this._ctx, this.state); + this.enterRule(_localctx, 126, OpenSearchPPLParser.RULE_convertedDataType); + try { + this.state = 772; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case OpenSearchPPLParser.DATE: + this.enterOuterAlt(_localctx, 1); + { + this.state = 762; + _localctx._typeName = this.match(OpenSearchPPLParser.DATE); + } + break; + case OpenSearchPPLParser.TIME: + this.enterOuterAlt(_localctx, 2); + { + this.state = 763; + _localctx._typeName = this.match(OpenSearchPPLParser.TIME); + } + break; + case OpenSearchPPLParser.TIMESTAMP: + this.enterOuterAlt(_localctx, 3); + { + this.state = 764; + _localctx._typeName = this.match(OpenSearchPPLParser.TIMESTAMP); + } + break; + case OpenSearchPPLParser.INT: + this.enterOuterAlt(_localctx, 4); + { + this.state = 765; + _localctx._typeName = this.match(OpenSearchPPLParser.INT); + } + break; + case OpenSearchPPLParser.INTEGER: + this.enterOuterAlt(_localctx, 5); + { + this.state = 766; + _localctx._typeName = this.match(OpenSearchPPLParser.INTEGER); + } + break; + case OpenSearchPPLParser.DOUBLE: + this.enterOuterAlt(_localctx, 6); + { + this.state = 767; + _localctx._typeName = this.match(OpenSearchPPLParser.DOUBLE); + } + break; + case OpenSearchPPLParser.LONG: + this.enterOuterAlt(_localctx, 7); + { + this.state = 768; + _localctx._typeName = this.match(OpenSearchPPLParser.LONG); + } + break; + case OpenSearchPPLParser.FLOAT: + this.enterOuterAlt(_localctx, 8); + { + this.state = 769; + _localctx._typeName = this.match(OpenSearchPPLParser.FLOAT); + } + break; + case OpenSearchPPLParser.STRING: + this.enterOuterAlt(_localctx, 9); + { + this.state = 770; + _localctx._typeName = this.match(OpenSearchPPLParser.STRING); + } + break; + case OpenSearchPPLParser.BOOLEAN: + this.enterOuterAlt(_localctx, 10); + { + this.state = 771; + _localctx._typeName = this.match(OpenSearchPPLParser.BOOLEAN); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public evalFunctionName(): EvalFunctionNameContext { + let _localctx: EvalFunctionNameContext = new EvalFunctionNameContext(this._ctx, this.state); + this.enterRule(_localctx, 128, OpenSearchPPLParser.RULE_evalFunctionName); + try { + this.state = 779; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case OpenSearchPPLParser.ABS: + case OpenSearchPPLParser.CEIL: + case OpenSearchPPLParser.CEILING: + case OpenSearchPPLParser.CONV: + case OpenSearchPPLParser.CRC32: + case OpenSearchPPLParser.E: + case OpenSearchPPLParser.EXP: + case OpenSearchPPLParser.FLOOR: + case OpenSearchPPLParser.LN: + case OpenSearchPPLParser.LOG: + case OpenSearchPPLParser.LOG10: + case OpenSearchPPLParser.LOG2: + case OpenSearchPPLParser.MOD: + case OpenSearchPPLParser.PI: + case OpenSearchPPLParser.POW: + case OpenSearchPPLParser.POWER: + case OpenSearchPPLParser.RAND: + case OpenSearchPPLParser.ROUND: + case OpenSearchPPLParser.SIGN: + case OpenSearchPPLParser.SQRT: + case OpenSearchPPLParser.TRUNCATE: + case OpenSearchPPLParser.ACOS: + case OpenSearchPPLParser.ASIN: + case OpenSearchPPLParser.ATAN: + case OpenSearchPPLParser.ATAN2: + case OpenSearchPPLParser.COS: + case OpenSearchPPLParser.COT: + case OpenSearchPPLParser.DEGREES: + case OpenSearchPPLParser.RADIANS: + case OpenSearchPPLParser.SIN: + case OpenSearchPPLParser.TAN: + this.enterOuterAlt(_localctx, 1); + { + this.state = 774; + this.mathematicalFunctionBase(); + } + break; + case OpenSearchPPLParser.DATETIME: + case OpenSearchPPLParser.MICROSECOND: + case OpenSearchPPLParser.SECOND: + case OpenSearchPPLParser.MINUTE: + case OpenSearchPPLParser.HOUR: + case OpenSearchPPLParser.DAY: + case OpenSearchPPLParser.WEEK: + case OpenSearchPPLParser.MONTH: + case OpenSearchPPLParser.QUARTER: + case OpenSearchPPLParser.YEAR: + case OpenSearchPPLParser.CONVERT_TZ: + case OpenSearchPPLParser.ADDDATE: + case OpenSearchPPLParser.DATE: + case OpenSearchPPLParser.DATE_ADD: + case OpenSearchPPLParser.DATE_FORMAT: + case OpenSearchPPLParser.DATE_SUB: + case OpenSearchPPLParser.DAYNAME: + case OpenSearchPPLParser.DAYOFMONTH: + case OpenSearchPPLParser.DAYOFWEEK: + case OpenSearchPPLParser.DAYOFYEAR: + case OpenSearchPPLParser.FROM_DAYS: + case OpenSearchPPLParser.FROM_UNIXTIME: + case OpenSearchPPLParser.MAKEDATE: + case OpenSearchPPLParser.MAKETIME: + case OpenSearchPPLParser.MONTHNAME: + case OpenSearchPPLParser.PERIOD_ADD: + case OpenSearchPPLParser.PERIOD_DIFF: + case OpenSearchPPLParser.SUBDATE: + case OpenSearchPPLParser.SYSDATE: + case OpenSearchPPLParser.TIME: + case OpenSearchPPLParser.TIME_TO_SEC: + case OpenSearchPPLParser.TIMESTAMP: + case OpenSearchPPLParser.TO_DAYS: + case OpenSearchPPLParser.UNIX_TIMESTAMP: + this.enterOuterAlt(_localctx, 2); + { + this.state = 775; + this.dateAndTimeFunctionBase(); + } + break; + case OpenSearchPPLParser.SUBSTR: + case OpenSearchPPLParser.SUBSTRING: + case OpenSearchPPLParser.LTRIM: + case OpenSearchPPLParser.RTRIM: + case OpenSearchPPLParser.TRIM: + case OpenSearchPPLParser.LOWER: + case OpenSearchPPLParser.UPPER: + case OpenSearchPPLParser.CONCAT: + case OpenSearchPPLParser.CONCAT_WS: + case OpenSearchPPLParser.LENGTH: + case OpenSearchPPLParser.STRCMP: + case OpenSearchPPLParser.RIGHT: + case OpenSearchPPLParser.LEFT: + case OpenSearchPPLParser.ASCII: + case OpenSearchPPLParser.LOCATE: + case OpenSearchPPLParser.REPLACE: + this.enterOuterAlt(_localctx, 3); + { + this.state = 776; + this.textFunctionBase(); + } + break; + case OpenSearchPPLParser.LIKE: + case OpenSearchPPLParser.ISNULL: + case OpenSearchPPLParser.ISNOTNULL: + case OpenSearchPPLParser.IFNULL: + case OpenSearchPPLParser.NULLIF: + case OpenSearchPPLParser.IF: + this.enterOuterAlt(_localctx, 4); + { + this.state = 777; + this.conditionFunctionBase(); + } + break; + case OpenSearchPPLParser.TYPEOF: + this.enterOuterAlt(_localctx, 5); + { + this.state = 778; + this.systemFunctionBase(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public functionArgs(): FunctionArgsContext { + let _localctx: FunctionArgsContext = new FunctionArgsContext(this._ctx, this.state); + this.enterRule(_localctx, 130, OpenSearchPPLParser.RULE_functionArgs); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 789; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.D || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & ((1 << (OpenSearchPPLParser.TRUE - 64)) | (1 << (OpenSearchPPLParser.FALSE - 64)) | (1 << (OpenSearchPPLParser.DATETIME - 64)) | (1 << (OpenSearchPPLParser.INTERVAL - 64)) | (1 << (OpenSearchPPLParser.MICROSECOND - 64)) | (1 << (OpenSearchPPLParser.MILLISECOND - 64)) | (1 << (OpenSearchPPLParser.SECOND - 64)) | (1 << (OpenSearchPPLParser.MINUTE - 64)) | (1 << (OpenSearchPPLParser.HOUR - 64)) | (1 << (OpenSearchPPLParser.DAY - 64)) | (1 << (OpenSearchPPLParser.WEEK - 64)) | (1 << (OpenSearchPPLParser.MONTH - 64)) | (1 << (OpenSearchPPLParser.QUARTER - 64)) | (1 << (OpenSearchPPLParser.YEAR - 64)) | (1 << (OpenSearchPPLParser.CONVERT_TZ - 64)))) !== 0) || ((((_la - 103)) & ~0x1F) === 0 && ((1 << (_la - 103)) & ((1 << (OpenSearchPPLParser.DOT - 103)) | (1 << (OpenSearchPPLParser.PLUS - 103)) | (1 << (OpenSearchPPLParser.MINUS - 103)) | (1 << (OpenSearchPPLParser.LT_PRTHS - 103)) | (1 << (OpenSearchPPLParser.BACKTICK - 103)) | (1 << (OpenSearchPPLParser.AVG - 103)) | (1 << (OpenSearchPPLParser.COUNT - 103)) | (1 << (OpenSearchPPLParser.MAX - 103)))) !== 0) || ((((_la - 135)) & ~0x1F) === 0 && ((1 << (_la - 135)) & ((1 << (OpenSearchPPLParser.MIN - 135)) | (1 << (OpenSearchPPLParser.SUM - 135)) | (1 << (OpenSearchPPLParser.VAR_SAMP - 135)) | (1 << (OpenSearchPPLParser.VAR_POP - 135)) | (1 << (OpenSearchPPLParser.STDDEV_SAMP - 135)) | (1 << (OpenSearchPPLParser.STDDEV_POP - 135)) | (1 << (OpenSearchPPLParser.FIRST - 135)) | (1 << (OpenSearchPPLParser.LAST - 135)) | (1 << (OpenSearchPPLParser.ABS - 135)) | (1 << (OpenSearchPPLParser.CEIL - 135)) | (1 << (OpenSearchPPLParser.CEILING - 135)))) !== 0) || ((((_la - 167)) & ~0x1F) === 0 && ((1 << (_la - 167)) & ((1 << (OpenSearchPPLParser.CONV - 167)) | (1 << (OpenSearchPPLParser.CRC32 - 167)) | (1 << (OpenSearchPPLParser.E - 167)) | (1 << (OpenSearchPPLParser.EXP - 167)) | (1 << (OpenSearchPPLParser.FLOOR - 167)) | (1 << (OpenSearchPPLParser.LN - 167)) | (1 << (OpenSearchPPLParser.LOG - 167)) | (1 << (OpenSearchPPLParser.LOG10 - 167)) | (1 << (OpenSearchPPLParser.LOG2 - 167)) | (1 << (OpenSearchPPLParser.MOD - 167)) | (1 << (OpenSearchPPLParser.PI - 167)) | (1 << (OpenSearchPPLParser.POW - 167)) | (1 << (OpenSearchPPLParser.POWER - 167)) | (1 << (OpenSearchPPLParser.RAND - 167)) | (1 << (OpenSearchPPLParser.ROUND - 167)) | (1 << (OpenSearchPPLParser.SIGN - 167)) | (1 << (OpenSearchPPLParser.SQRT - 167)) | (1 << (OpenSearchPPLParser.TRUNCATE - 167)) | (1 << (OpenSearchPPLParser.ACOS - 167)) | (1 << (OpenSearchPPLParser.ASIN - 167)) | (1 << (OpenSearchPPLParser.ATAN - 167)) | (1 << (OpenSearchPPLParser.ATAN2 - 167)) | (1 << (OpenSearchPPLParser.COS - 167)) | (1 << (OpenSearchPPLParser.COT - 167)) | (1 << (OpenSearchPPLParser.DEGREES - 167)) | (1 << (OpenSearchPPLParser.RADIANS - 167)) | (1 << (OpenSearchPPLParser.SIN - 167)) | (1 << (OpenSearchPPLParser.TAN - 167)) | (1 << (OpenSearchPPLParser.ADDDATE - 167)) | (1 << (OpenSearchPPLParser.CURDATE - 167)) | (1 << (OpenSearchPPLParser.CURRENT_DATE - 167)) | (1 << (OpenSearchPPLParser.CURRENT_TIME - 167)))) !== 0) || ((((_la - 199)) & ~0x1F) === 0 && ((1 << (_la - 199)) & ((1 << (OpenSearchPPLParser.CURRENT_TIMESTAMP - 199)) | (1 << (OpenSearchPPLParser.CURTIME - 199)) | (1 << (OpenSearchPPLParser.DATE - 199)) | (1 << (OpenSearchPPLParser.DATE_ADD - 199)) | (1 << (OpenSearchPPLParser.DATE_FORMAT - 199)) | (1 << (OpenSearchPPLParser.DATE_SUB - 199)) | (1 << (OpenSearchPPLParser.DAYNAME - 199)) | (1 << (OpenSearchPPLParser.DAYOFMONTH - 199)) | (1 << (OpenSearchPPLParser.DAYOFWEEK - 199)) | (1 << (OpenSearchPPLParser.DAYOFYEAR - 199)) | (1 << (OpenSearchPPLParser.FROM_DAYS - 199)) | (1 << (OpenSearchPPLParser.LOCALTIME - 199)) | (1 << (OpenSearchPPLParser.LOCALTIMESTAMP - 199)) | (1 << (OpenSearchPPLParser.FROM_UNIXTIME - 199)) | (1 << (OpenSearchPPLParser.MAKEDATE - 199)) | (1 << (OpenSearchPPLParser.MAKETIME - 199)) | (1 << (OpenSearchPPLParser.MONTHNAME - 199)) | (1 << (OpenSearchPPLParser.NOW - 199)) | (1 << (OpenSearchPPLParser.PERIOD_ADD - 199)) | (1 << (OpenSearchPPLParser.PERIOD_DIFF - 199)) | (1 << (OpenSearchPPLParser.SUBDATE - 199)) | (1 << (OpenSearchPPLParser.SYSDATE - 199)) | (1 << (OpenSearchPPLParser.TIME - 199)) | (1 << (OpenSearchPPLParser.TIME_TO_SEC - 199)) | (1 << (OpenSearchPPLParser.TIMESTAMP - 199)) | (1 << (OpenSearchPPLParser.TO_DAYS - 199)) | (1 << (OpenSearchPPLParser.UTC_DATE - 199)) | (1 << (OpenSearchPPLParser.UTC_TIME - 199)) | (1 << (OpenSearchPPLParser.UTC_TIMESTAMP - 199)) | (1 << (OpenSearchPPLParser.UNIX_TIMESTAMP - 199)) | (1 << (OpenSearchPPLParser.SUBSTR - 199)) | (1 << (OpenSearchPPLParser.SUBSTRING - 199)))) !== 0) || ((((_la - 231)) & ~0x1F) === 0 && ((1 << (_la - 231)) & ((1 << (OpenSearchPPLParser.LTRIM - 231)) | (1 << (OpenSearchPPLParser.RTRIM - 231)) | (1 << (OpenSearchPPLParser.TRIM - 231)) | (1 << (OpenSearchPPLParser.LOWER - 231)) | (1 << (OpenSearchPPLParser.UPPER - 231)) | (1 << (OpenSearchPPLParser.CONCAT - 231)) | (1 << (OpenSearchPPLParser.CONCAT_WS - 231)) | (1 << (OpenSearchPPLParser.LENGTH - 231)) | (1 << (OpenSearchPPLParser.STRCMP - 231)) | (1 << (OpenSearchPPLParser.RIGHT - 231)) | (1 << (OpenSearchPPLParser.LEFT - 231)) | (1 << (OpenSearchPPLParser.ASCII - 231)) | (1 << (OpenSearchPPLParser.LOCATE - 231)) | (1 << (OpenSearchPPLParser.REPLACE - 231)) | (1 << (OpenSearchPPLParser.CAST - 231)) | (1 << (OpenSearchPPLParser.LIKE - 231)) | (1 << (OpenSearchPPLParser.ISNULL - 231)) | (1 << (OpenSearchPPLParser.ISNOTNULL - 231)) | (1 << (OpenSearchPPLParser.IFNULL - 231)) | (1 << (OpenSearchPPLParser.NULLIF - 231)) | (1 << (OpenSearchPPLParser.IF - 231)) | (1 << (OpenSearchPPLParser.TYPEOF - 231)))) !== 0) || ((((_la - 292)) & ~0x1F) === 0 && ((1 << (_la - 292)) & ((1 << (OpenSearchPPLParser.SPAN - 292)) | (1 << (OpenSearchPPLParser.MS - 292)) | (1 << (OpenSearchPPLParser.S - 292)) | (1 << (OpenSearchPPLParser.M - 292)) | (1 << (OpenSearchPPLParser.H - 292)) | (1 << (OpenSearchPPLParser.W - 292)) | (1 << (OpenSearchPPLParser.Q - 292)) | (1 << (OpenSearchPPLParser.Y - 292)) | (1 << (OpenSearchPPLParser.ID - 292)) | (1 << (OpenSearchPPLParser.INTEGER_LITERAL - 292)) | (1 << (OpenSearchPPLParser.DECIMAL_LITERAL - 292)) | (1 << (OpenSearchPPLParser.DQUOTA_STRING - 292)) | (1 << (OpenSearchPPLParser.SQUOTA_STRING - 292)) | (1 << (OpenSearchPPLParser.BQUOTA_STRING - 292)))) !== 0)) { + { + this.state = 781; + this.functionArg(); + this.state = 786; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === OpenSearchPPLParser.COMMA) { + { + { + this.state = 782; + this.match(OpenSearchPPLParser.COMMA); + this.state = 783; + this.functionArg(); + } + } + this.state = 788; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public functionArg(): FunctionArgContext { + let _localctx: FunctionArgContext = new FunctionArgContext(this._ctx, this.state); + this.enterRule(_localctx, 132, OpenSearchPPLParser.RULE_functionArg); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 794; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 64, this._ctx) ) { + case 1: + { + this.state = 791; + this.ident(); + this.state = 792; + this.match(OpenSearchPPLParser.EQUAL); + } + break; + } + this.state = 796; + this.valueExpression(0); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public relevanceArg(): RelevanceArgContext { + let _localctx: RelevanceArgContext = new RelevanceArgContext(this._ctx, this.state); + this.enterRule(_localctx, 134, OpenSearchPPLParser.RULE_relevanceArg); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 798; + this.relevanceArgName(); + this.state = 799; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 800; + this.relevanceArgValue(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public relevanceArgName(): RelevanceArgNameContext { + let _localctx: RelevanceArgNameContext = new RelevanceArgNameContext(this._ctx, this.state); + this.enterRule(_localctx, 136, OpenSearchPPLParser.RULE_relevanceArgName); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 802; + _la = this._input.LA(1); + if (!(_la === OpenSearchPPLParser.FIELDS || _la === OpenSearchPPLParser.TIME_ZONE || ((((_la - 261)) & ~0x1F) === 0 && ((1 << (_la - 261)) & ((1 << (OpenSearchPPLParser.ALLOW_LEADING_WILDCARD - 261)) | (1 << (OpenSearchPPLParser.ANALYZE_WILDCARD - 261)) | (1 << (OpenSearchPPLParser.ANALYZER - 261)) | (1 << (OpenSearchPPLParser.AUTO_GENERATE_SYNONYMS_PHRASE_QUERY - 261)) | (1 << (OpenSearchPPLParser.BOOST - 261)) | (1 << (OpenSearchPPLParser.CUTOFF_FREQUENCY - 261)) | (1 << (OpenSearchPPLParser.DEFAULT_FIELD - 261)) | (1 << (OpenSearchPPLParser.DEFAULT_OPERATOR - 261)) | (1 << (OpenSearchPPLParser.ENABLE_POSITION_INCREMENTS - 261)) | (1 << (OpenSearchPPLParser.ESCAPE - 261)) | (1 << (OpenSearchPPLParser.FLAGS - 261)) | (1 << (OpenSearchPPLParser.FUZZY_MAX_EXPANSIONS - 261)) | (1 << (OpenSearchPPLParser.FUZZY_PREFIX_LENGTH - 261)) | (1 << (OpenSearchPPLParser.FUZZY_TRANSPOSITIONS - 261)) | (1 << (OpenSearchPPLParser.FUZZY_REWRITE - 261)) | (1 << (OpenSearchPPLParser.FUZZINESS - 261)) | (1 << (OpenSearchPPLParser.LENIENT - 261)) | (1 << (OpenSearchPPLParser.LOW_FREQ_OPERATOR - 261)) | (1 << (OpenSearchPPLParser.MAX_DETERMINIZED_STATES - 261)) | (1 << (OpenSearchPPLParser.MAX_EXPANSIONS - 261)) | (1 << (OpenSearchPPLParser.MINIMUM_SHOULD_MATCH - 261)) | (1 << (OpenSearchPPLParser.OPERATOR - 261)) | (1 << (OpenSearchPPLParser.PHRASE_SLOP - 261)) | (1 << (OpenSearchPPLParser.PREFIX_LENGTH - 261)) | (1 << (OpenSearchPPLParser.QUOTE_ANALYZER - 261)) | (1 << (OpenSearchPPLParser.QUOTE_FIELD_SUFFIX - 261)) | (1 << (OpenSearchPPLParser.REWRITE - 261)) | (1 << (OpenSearchPPLParser.SLOP - 261)) | (1 << (OpenSearchPPLParser.TIE_BREAKER - 261)) | (1 << (OpenSearchPPLParser.TYPE - 261)) | (1 << (OpenSearchPPLParser.ZERO_TERMS_QUERY - 261)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public relevanceFieldAndWeight(): RelevanceFieldAndWeightContext { + let _localctx: RelevanceFieldAndWeightContext = new RelevanceFieldAndWeightContext(this._ctx, this.state); + this.enterRule(_localctx, 138, OpenSearchPPLParser.RULE_relevanceFieldAndWeight); + try { + this.state = 812; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 65, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 804; + _localctx._field = this.relevanceField(); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 805; + _localctx._field = this.relevanceField(); + this.state = 806; + _localctx._weight = this.relevanceFieldWeight(); + } + break; + + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 808; + _localctx._field = this.relevanceField(); + this.state = 809; + this.match(OpenSearchPPLParser.BIT_XOR_OP); + this.state = 810; + _localctx._weight = this.relevanceFieldWeight(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public relevanceFieldWeight(): RelevanceFieldWeightContext { + let _localctx: RelevanceFieldWeightContext = new RelevanceFieldWeightContext(this._ctx, this.state); + this.enterRule(_localctx, 140, OpenSearchPPLParser.RULE_relevanceFieldWeight); + try { + this.state = 816; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 66, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 814; + this.integerLiteral(); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 815; + this.decimalLiteral(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public relevanceField(): RelevanceFieldContext { + let _localctx: RelevanceFieldContext = new RelevanceFieldContext(this._ctx, this.state); + this.enterRule(_localctx, 142, OpenSearchPPLParser.RULE_relevanceField); + try { + this.state = 820; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case OpenSearchPPLParser.D: + case OpenSearchPPLParser.DATETIME: + case OpenSearchPPLParser.MICROSECOND: + case OpenSearchPPLParser.MILLISECOND: + case OpenSearchPPLParser.SECOND: + case OpenSearchPPLParser.MINUTE: + case OpenSearchPPLParser.HOUR: + case OpenSearchPPLParser.DAY: + case OpenSearchPPLParser.WEEK: + case OpenSearchPPLParser.MONTH: + case OpenSearchPPLParser.QUARTER: + case OpenSearchPPLParser.YEAR: + case OpenSearchPPLParser.CONVERT_TZ: + case OpenSearchPPLParser.DOT: + case OpenSearchPPLParser.BACKTICK: + case OpenSearchPPLParser.AVG: + case OpenSearchPPLParser.COUNT: + case OpenSearchPPLParser.MAX: + case OpenSearchPPLParser.MIN: + case OpenSearchPPLParser.SUM: + case OpenSearchPPLParser.VAR_SAMP: + case OpenSearchPPLParser.VAR_POP: + case OpenSearchPPLParser.STDDEV_SAMP: + case OpenSearchPPLParser.STDDEV_POP: + case OpenSearchPPLParser.FIRST: + case OpenSearchPPLParser.LAST: + case OpenSearchPPLParser.ABS: + case OpenSearchPPLParser.CEIL: + case OpenSearchPPLParser.CEILING: + case OpenSearchPPLParser.CONV: + case OpenSearchPPLParser.CRC32: + case OpenSearchPPLParser.E: + case OpenSearchPPLParser.EXP: + case OpenSearchPPLParser.FLOOR: + case OpenSearchPPLParser.LN: + case OpenSearchPPLParser.LOG: + case OpenSearchPPLParser.LOG10: + case OpenSearchPPLParser.LOG2: + case OpenSearchPPLParser.MOD: + case OpenSearchPPLParser.PI: + case OpenSearchPPLParser.POW: + case OpenSearchPPLParser.POWER: + case OpenSearchPPLParser.RAND: + case OpenSearchPPLParser.ROUND: + case OpenSearchPPLParser.SIGN: + case OpenSearchPPLParser.SQRT: + case OpenSearchPPLParser.TRUNCATE: + case OpenSearchPPLParser.ACOS: + case OpenSearchPPLParser.ASIN: + case OpenSearchPPLParser.ATAN: + case OpenSearchPPLParser.ATAN2: + case OpenSearchPPLParser.COS: + case OpenSearchPPLParser.COT: + case OpenSearchPPLParser.DEGREES: + case OpenSearchPPLParser.RADIANS: + case OpenSearchPPLParser.SIN: + case OpenSearchPPLParser.TAN: + case OpenSearchPPLParser.ADDDATE: + case OpenSearchPPLParser.CURDATE: + case OpenSearchPPLParser.CURRENT_DATE: + case OpenSearchPPLParser.CURRENT_TIME: + case OpenSearchPPLParser.CURRENT_TIMESTAMP: + case OpenSearchPPLParser.CURTIME: + case OpenSearchPPLParser.DATE: + case OpenSearchPPLParser.DATE_ADD: + case OpenSearchPPLParser.DATE_FORMAT: + case OpenSearchPPLParser.DATE_SUB: + case OpenSearchPPLParser.DAYNAME: + case OpenSearchPPLParser.DAYOFMONTH: + case OpenSearchPPLParser.DAYOFWEEK: + case OpenSearchPPLParser.DAYOFYEAR: + case OpenSearchPPLParser.FROM_DAYS: + case OpenSearchPPLParser.LOCALTIME: + case OpenSearchPPLParser.LOCALTIMESTAMP: + case OpenSearchPPLParser.FROM_UNIXTIME: + case OpenSearchPPLParser.MAKEDATE: + case OpenSearchPPLParser.MAKETIME: + case OpenSearchPPLParser.MONTHNAME: + case OpenSearchPPLParser.NOW: + case OpenSearchPPLParser.PERIOD_ADD: + case OpenSearchPPLParser.PERIOD_DIFF: + case OpenSearchPPLParser.SUBDATE: + case OpenSearchPPLParser.SYSDATE: + case OpenSearchPPLParser.TIME: + case OpenSearchPPLParser.TIME_TO_SEC: + case OpenSearchPPLParser.TIMESTAMP: + case OpenSearchPPLParser.TO_DAYS: + case OpenSearchPPLParser.UTC_DATE: + case OpenSearchPPLParser.UTC_TIME: + case OpenSearchPPLParser.UTC_TIMESTAMP: + case OpenSearchPPLParser.UNIX_TIMESTAMP: + case OpenSearchPPLParser.SUBSTR: + case OpenSearchPPLParser.SUBSTRING: + case OpenSearchPPLParser.LTRIM: + case OpenSearchPPLParser.RTRIM: + case OpenSearchPPLParser.TRIM: + case OpenSearchPPLParser.LOWER: + case OpenSearchPPLParser.UPPER: + case OpenSearchPPLParser.CONCAT: + case OpenSearchPPLParser.CONCAT_WS: + case OpenSearchPPLParser.LENGTH: + case OpenSearchPPLParser.STRCMP: + case OpenSearchPPLParser.RIGHT: + case OpenSearchPPLParser.LEFT: + case OpenSearchPPLParser.ASCII: + case OpenSearchPPLParser.LOCATE: + case OpenSearchPPLParser.REPLACE: + case OpenSearchPPLParser.SPAN: + case OpenSearchPPLParser.MS: + case OpenSearchPPLParser.S: + case OpenSearchPPLParser.M: + case OpenSearchPPLParser.H: + case OpenSearchPPLParser.W: + case OpenSearchPPLParser.Q: + case OpenSearchPPLParser.Y: + case OpenSearchPPLParser.ID: + case OpenSearchPPLParser.BQUOTA_STRING: + this.enterOuterAlt(_localctx, 1); + { + this.state = 818; + this.qualifiedName(); + } + break; + case OpenSearchPPLParser.DQUOTA_STRING: + case OpenSearchPPLParser.SQUOTA_STRING: + this.enterOuterAlt(_localctx, 2); + { + this.state = 819; + this.stringLiteral(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public relevanceQuery(): RelevanceQueryContext { + let _localctx: RelevanceQueryContext = new RelevanceQueryContext(this._ctx, this.state); + this.enterRule(_localctx, 144, OpenSearchPPLParser.RULE_relevanceQuery); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 822; + this.relevanceArgValue(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public relevanceArgValue(): RelevanceArgValueContext { + let _localctx: RelevanceArgValueContext = new RelevanceArgValueContext(this._ctx, this.state); + this.enterRule(_localctx, 146, OpenSearchPPLParser.RULE_relevanceArgValue); + try { + this.state = 826; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 68, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 824; + this.qualifiedName(); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 825; + this.literalValue(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public mathematicalFunctionBase(): MathematicalFunctionBaseContext { + let _localctx: MathematicalFunctionBaseContext = new MathematicalFunctionBaseContext(this._ctx, this.state); + this.enterRule(_localctx, 148, OpenSearchPPLParser.RULE_mathematicalFunctionBase); + try { + this.state = 850; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case OpenSearchPPLParser.ABS: + this.enterOuterAlt(_localctx, 1); + { + this.state = 828; + this.match(OpenSearchPPLParser.ABS); + } + break; + case OpenSearchPPLParser.CEIL: + this.enterOuterAlt(_localctx, 2); + { + this.state = 829; + this.match(OpenSearchPPLParser.CEIL); + } + break; + case OpenSearchPPLParser.CEILING: + this.enterOuterAlt(_localctx, 3); + { + this.state = 830; + this.match(OpenSearchPPLParser.CEILING); + } + break; + case OpenSearchPPLParser.CONV: + this.enterOuterAlt(_localctx, 4); + { + this.state = 831; + this.match(OpenSearchPPLParser.CONV); + } + break; + case OpenSearchPPLParser.CRC32: + this.enterOuterAlt(_localctx, 5); + { + this.state = 832; + this.match(OpenSearchPPLParser.CRC32); + } + break; + case OpenSearchPPLParser.E: + this.enterOuterAlt(_localctx, 6); + { + this.state = 833; + this.match(OpenSearchPPLParser.E); + } + break; + case OpenSearchPPLParser.EXP: + this.enterOuterAlt(_localctx, 7); + { + this.state = 834; + this.match(OpenSearchPPLParser.EXP); + } + break; + case OpenSearchPPLParser.FLOOR: + this.enterOuterAlt(_localctx, 8); + { + this.state = 835; + this.match(OpenSearchPPLParser.FLOOR); + } + break; + case OpenSearchPPLParser.LN: + this.enterOuterAlt(_localctx, 9); + { + this.state = 836; + this.match(OpenSearchPPLParser.LN); + } + break; + case OpenSearchPPLParser.LOG: + this.enterOuterAlt(_localctx, 10); + { + this.state = 837; + this.match(OpenSearchPPLParser.LOG); + } + break; + case OpenSearchPPLParser.LOG10: + this.enterOuterAlt(_localctx, 11); + { + this.state = 838; + this.match(OpenSearchPPLParser.LOG10); + } + break; + case OpenSearchPPLParser.LOG2: + this.enterOuterAlt(_localctx, 12); + { + this.state = 839; + this.match(OpenSearchPPLParser.LOG2); + } + break; + case OpenSearchPPLParser.MOD: + this.enterOuterAlt(_localctx, 13); + { + this.state = 840; + this.match(OpenSearchPPLParser.MOD); + } + break; + case OpenSearchPPLParser.PI: + this.enterOuterAlt(_localctx, 14); + { + this.state = 841; + this.match(OpenSearchPPLParser.PI); + } + break; + case OpenSearchPPLParser.POW: + this.enterOuterAlt(_localctx, 15); + { + this.state = 842; + this.match(OpenSearchPPLParser.POW); + } + break; + case OpenSearchPPLParser.POWER: + this.enterOuterAlt(_localctx, 16); + { + this.state = 843; + this.match(OpenSearchPPLParser.POWER); + } + break; + case OpenSearchPPLParser.RAND: + this.enterOuterAlt(_localctx, 17); + { + this.state = 844; + this.match(OpenSearchPPLParser.RAND); + } + break; + case OpenSearchPPLParser.ROUND: + this.enterOuterAlt(_localctx, 18); + { + this.state = 845; + this.match(OpenSearchPPLParser.ROUND); + } + break; + case OpenSearchPPLParser.SIGN: + this.enterOuterAlt(_localctx, 19); + { + this.state = 846; + this.match(OpenSearchPPLParser.SIGN); + } + break; + case OpenSearchPPLParser.SQRT: + this.enterOuterAlt(_localctx, 20); + { + this.state = 847; + this.match(OpenSearchPPLParser.SQRT); + } + break; + case OpenSearchPPLParser.TRUNCATE: + this.enterOuterAlt(_localctx, 21); + { + this.state = 848; + this.match(OpenSearchPPLParser.TRUNCATE); + } + break; + case OpenSearchPPLParser.ACOS: + case OpenSearchPPLParser.ASIN: + case OpenSearchPPLParser.ATAN: + case OpenSearchPPLParser.ATAN2: + case OpenSearchPPLParser.COS: + case OpenSearchPPLParser.COT: + case OpenSearchPPLParser.DEGREES: + case OpenSearchPPLParser.RADIANS: + case OpenSearchPPLParser.SIN: + case OpenSearchPPLParser.TAN: + this.enterOuterAlt(_localctx, 22); + { + this.state = 849; + this.trigonometricFunctionName(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public trigonometricFunctionName(): TrigonometricFunctionNameContext { + let _localctx: TrigonometricFunctionNameContext = new TrigonometricFunctionNameContext(this._ctx, this.state); + this.enterRule(_localctx, 150, OpenSearchPPLParser.RULE_trigonometricFunctionName); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 852; + _la = this._input.LA(1); + if (!(((((_la - 185)) & ~0x1F) === 0 && ((1 << (_la - 185)) & ((1 << (OpenSearchPPLParser.ACOS - 185)) | (1 << (OpenSearchPPLParser.ASIN - 185)) | (1 << (OpenSearchPPLParser.ATAN - 185)) | (1 << (OpenSearchPPLParser.ATAN2 - 185)) | (1 << (OpenSearchPPLParser.COS - 185)) | (1 << (OpenSearchPPLParser.COT - 185)) | (1 << (OpenSearchPPLParser.DEGREES - 185)) | (1 << (OpenSearchPPLParser.RADIANS - 185)) | (1 << (OpenSearchPPLParser.SIN - 185)) | (1 << (OpenSearchPPLParser.TAN - 185)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public dateAndTimeFunctionBase(): DateAndTimeFunctionBaseContext { + let _localctx: DateAndTimeFunctionBaseContext = new DateAndTimeFunctionBaseContext(this._ctx, this.state); + this.enterRule(_localctx, 152, OpenSearchPPLParser.RULE_dateAndTimeFunctionBase); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 854; + _la = this._input.LA(1); + if (!(((((_la - 67)) & ~0x1F) === 0 && ((1 << (_la - 67)) & ((1 << (OpenSearchPPLParser.DATETIME - 67)) | (1 << (OpenSearchPPLParser.MICROSECOND - 67)) | (1 << (OpenSearchPPLParser.SECOND - 67)) | (1 << (OpenSearchPPLParser.MINUTE - 67)) | (1 << (OpenSearchPPLParser.HOUR - 67)) | (1 << (OpenSearchPPLParser.DAY - 67)) | (1 << (OpenSearchPPLParser.WEEK - 67)) | (1 << (OpenSearchPPLParser.MONTH - 67)) | (1 << (OpenSearchPPLParser.QUARTER - 67)) | (1 << (OpenSearchPPLParser.YEAR - 67)) | (1 << (OpenSearchPPLParser.CONVERT_TZ - 67)))) !== 0) || ((((_la - 195)) & ~0x1F) === 0 && ((1 << (_la - 195)) & ((1 << (OpenSearchPPLParser.ADDDATE - 195)) | (1 << (OpenSearchPPLParser.DATE - 195)) | (1 << (OpenSearchPPLParser.DATE_ADD - 195)) | (1 << (OpenSearchPPLParser.DATE_FORMAT - 195)) | (1 << (OpenSearchPPLParser.DATE_SUB - 195)) | (1 << (OpenSearchPPLParser.DAYNAME - 195)) | (1 << (OpenSearchPPLParser.DAYOFMONTH - 195)) | (1 << (OpenSearchPPLParser.DAYOFWEEK - 195)) | (1 << (OpenSearchPPLParser.DAYOFYEAR - 195)) | (1 << (OpenSearchPPLParser.FROM_DAYS - 195)) | (1 << (OpenSearchPPLParser.FROM_UNIXTIME - 195)) | (1 << (OpenSearchPPLParser.MAKEDATE - 195)) | (1 << (OpenSearchPPLParser.MAKETIME - 195)) | (1 << (OpenSearchPPLParser.MONTHNAME - 195)) | (1 << (OpenSearchPPLParser.PERIOD_ADD - 195)) | (1 << (OpenSearchPPLParser.PERIOD_DIFF - 195)) | (1 << (OpenSearchPPLParser.SUBDATE - 195)) | (1 << (OpenSearchPPLParser.SYSDATE - 195)) | (1 << (OpenSearchPPLParser.TIME - 195)) | (1 << (OpenSearchPPLParser.TIME_TO_SEC - 195)) | (1 << (OpenSearchPPLParser.TIMESTAMP - 195)) | (1 << (OpenSearchPPLParser.TO_DAYS - 195)))) !== 0) || _la === OpenSearchPPLParser.UNIX_TIMESTAMP)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public constantFunctionName(): ConstantFunctionNameContext { + let _localctx: ConstantFunctionNameContext = new ConstantFunctionNameContext(this._ctx, this.state); + this.enterRule(_localctx, 154, OpenSearchPPLParser.RULE_constantFunctionName); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 856; + _la = this._input.LA(1); + if (!(((((_la - 196)) & ~0x1F) === 0 && ((1 << (_la - 196)) & ((1 << (OpenSearchPPLParser.CURDATE - 196)) | (1 << (OpenSearchPPLParser.CURRENT_DATE - 196)) | (1 << (OpenSearchPPLParser.CURRENT_TIME - 196)) | (1 << (OpenSearchPPLParser.CURRENT_TIMESTAMP - 196)) | (1 << (OpenSearchPPLParser.CURTIME - 196)) | (1 << (OpenSearchPPLParser.LOCALTIME - 196)) | (1 << (OpenSearchPPLParser.LOCALTIMESTAMP - 196)) | (1 << (OpenSearchPPLParser.NOW - 196)) | (1 << (OpenSearchPPLParser.UTC_DATE - 196)) | (1 << (OpenSearchPPLParser.UTC_TIME - 196)) | (1 << (OpenSearchPPLParser.UTC_TIMESTAMP - 196)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public conditionFunctionBase(): ConditionFunctionBaseContext { + let _localctx: ConditionFunctionBaseContext = new ConditionFunctionBaseContext(this._ctx, this.state); + this.enterRule(_localctx, 156, OpenSearchPPLParser.RULE_conditionFunctionBase); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 858; + _la = this._input.LA(1); + if (!(((((_la - 247)) & ~0x1F) === 0 && ((1 << (_la - 247)) & ((1 << (OpenSearchPPLParser.LIKE - 247)) | (1 << (OpenSearchPPLParser.ISNULL - 247)) | (1 << (OpenSearchPPLParser.ISNOTNULL - 247)) | (1 << (OpenSearchPPLParser.IFNULL - 247)) | (1 << (OpenSearchPPLParser.NULLIF - 247)) | (1 << (OpenSearchPPLParser.IF - 247)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public systemFunctionBase(): SystemFunctionBaseContext { + let _localctx: SystemFunctionBaseContext = new SystemFunctionBaseContext(this._ctx, this.state); + this.enterRule(_localctx, 158, OpenSearchPPLParser.RULE_systemFunctionBase); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 860; + this.match(OpenSearchPPLParser.TYPEOF); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public textFunctionBase(): TextFunctionBaseContext { + let _localctx: TextFunctionBaseContext = new TextFunctionBaseContext(this._ctx, this.state); + this.enterRule(_localctx, 160, OpenSearchPPLParser.RULE_textFunctionBase); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 862; + _la = this._input.LA(1); + if (!(((((_la - 229)) & ~0x1F) === 0 && ((1 << (_la - 229)) & ((1 << (OpenSearchPPLParser.SUBSTR - 229)) | (1 << (OpenSearchPPLParser.SUBSTRING - 229)) | (1 << (OpenSearchPPLParser.LTRIM - 229)) | (1 << (OpenSearchPPLParser.RTRIM - 229)) | (1 << (OpenSearchPPLParser.TRIM - 229)) | (1 << (OpenSearchPPLParser.LOWER - 229)) | (1 << (OpenSearchPPLParser.UPPER - 229)) | (1 << (OpenSearchPPLParser.CONCAT - 229)) | (1 << (OpenSearchPPLParser.CONCAT_WS - 229)) | (1 << (OpenSearchPPLParser.LENGTH - 229)) | (1 << (OpenSearchPPLParser.STRCMP - 229)) | (1 << (OpenSearchPPLParser.RIGHT - 229)) | (1 << (OpenSearchPPLParser.LEFT - 229)) | (1 << (OpenSearchPPLParser.ASCII - 229)) | (1 << (OpenSearchPPLParser.LOCATE - 229)) | (1 << (OpenSearchPPLParser.REPLACE - 229)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public comparisonOperator(): ComparisonOperatorContext { + let _localctx: ComparisonOperatorContext = new ComparisonOperatorContext(this._ctx, this.state); + this.enterRule(_localctx, 162, OpenSearchPPLParser.RULE_comparisonOperator); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 864; + _la = this._input.LA(1); + if (!(_la === OpenSearchPPLParser.REGEXP || ((((_la - 104)) & ~0x1F) === 0 && ((1 << (_la - 104)) & ((1 << (OpenSearchPPLParser.EQUAL - 104)) | (1 << (OpenSearchPPLParser.GREATER - 104)) | (1 << (OpenSearchPPLParser.LESS - 104)) | (1 << (OpenSearchPPLParser.NOT_GREATER - 104)) | (1 << (OpenSearchPPLParser.NOT_LESS - 104)) | (1 << (OpenSearchPPLParser.NOT_EQUAL - 104)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public binaryOperator(): BinaryOperatorContext { + let _localctx: BinaryOperatorContext = new BinaryOperatorContext(this._ctx, this.state); + this.enterRule(_localctx, 164, OpenSearchPPLParser.RULE_binaryOperator); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 866; + _la = this._input.LA(1); + if (!(((((_la - 110)) & ~0x1F) === 0 && ((1 << (_la - 110)) & ((1 << (OpenSearchPPLParser.PLUS - 110)) | (1 << (OpenSearchPPLParser.MINUS - 110)) | (1 << (OpenSearchPPLParser.STAR - 110)) | (1 << (OpenSearchPPLParser.DIVIDE - 110)) | (1 << (OpenSearchPPLParser.MODULE - 110)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public singleFieldRelevanceFunctionName(): SingleFieldRelevanceFunctionNameContext { + let _localctx: SingleFieldRelevanceFunctionNameContext = new SingleFieldRelevanceFunctionNameContext(this._ctx, this.state); + this.enterRule(_localctx, 166, OpenSearchPPLParser.RULE_singleFieldRelevanceFunctionName); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 868; + _la = this._input.LA(1); + if (!(((((_la - 254)) & ~0x1F) === 0 && ((1 << (_la - 254)) & ((1 << (OpenSearchPPLParser.MATCH - 254)) | (1 << (OpenSearchPPLParser.MATCH_PHRASE - 254)) | (1 << (OpenSearchPPLParser.MATCH_PHRASE_PREFIX - 254)) | (1 << (OpenSearchPPLParser.MATCH_BOOL_PREFIX - 254)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public multiFieldRelevanceFunctionName(): MultiFieldRelevanceFunctionNameContext { + let _localctx: MultiFieldRelevanceFunctionNameContext = new MultiFieldRelevanceFunctionNameContext(this._ctx, this.state); + this.enterRule(_localctx, 168, OpenSearchPPLParser.RULE_multiFieldRelevanceFunctionName); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 870; + _la = this._input.LA(1); + if (!(((((_la - 258)) & ~0x1F) === 0 && ((1 << (_la - 258)) & ((1 << (OpenSearchPPLParser.SIMPLE_QUERY_STRING - 258)) | (1 << (OpenSearchPPLParser.MULTI_MATCH - 258)) | (1 << (OpenSearchPPLParser.QUERY_STRING - 258)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public literalValue(): LiteralValueContext { + let _localctx: LiteralValueContext = new LiteralValueContext(this._ctx, this.state); + this.enterRule(_localctx, 170, OpenSearchPPLParser.RULE_literalValue); + try { + this.state = 878; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 70, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 872; + this.intervalLiteral(); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 873; + this.stringLiteral(); + } + break; + + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 874; + this.integerLiteral(); + } + break; + + case 4: + this.enterOuterAlt(_localctx, 4); + { + this.state = 875; + this.decimalLiteral(); + } + break; + + case 5: + this.enterOuterAlt(_localctx, 5); + { + this.state = 876; + this.booleanLiteral(); + } + break; + + case 6: + this.enterOuterAlt(_localctx, 6); + { + this.state = 877; + this.datetimeLiteral(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public intervalLiteral(): IntervalLiteralContext { + let _localctx: IntervalLiteralContext = new IntervalLiteralContext(this._ctx, this.state); + this.enterRule(_localctx, 172, OpenSearchPPLParser.RULE_intervalLiteral); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 880; + this.match(OpenSearchPPLParser.INTERVAL); + this.state = 881; + this.valueExpression(0); + this.state = 882; + this.intervalUnit(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public stringLiteral(): StringLiteralContext { + let _localctx: StringLiteralContext = new StringLiteralContext(this._ctx, this.state); + this.enterRule(_localctx, 174, OpenSearchPPLParser.RULE_stringLiteral); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 884; + _la = this._input.LA(1); + if (!(_la === OpenSearchPPLParser.DQUOTA_STRING || _la === OpenSearchPPLParser.SQUOTA_STRING)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public integerLiteral(): IntegerLiteralContext { + let _localctx: IntegerLiteralContext = new IntegerLiteralContext(this._ctx, this.state); + this.enterRule(_localctx, 176, OpenSearchPPLParser.RULE_integerLiteral); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 887; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.PLUS || _la === OpenSearchPPLParser.MINUS) { + { + this.state = 886; + _la = this._input.LA(1); + if (!(_la === OpenSearchPPLParser.PLUS || _la === OpenSearchPPLParser.MINUS)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + + this.state = 889; + this.match(OpenSearchPPLParser.INTEGER_LITERAL); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public decimalLiteral(): DecimalLiteralContext { + let _localctx: DecimalLiteralContext = new DecimalLiteralContext(this._ctx, this.state); + this.enterRule(_localctx, 178, OpenSearchPPLParser.RULE_decimalLiteral); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 892; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.PLUS || _la === OpenSearchPPLParser.MINUS) { + { + this.state = 891; + _la = this._input.LA(1); + if (!(_la === OpenSearchPPLParser.PLUS || _la === OpenSearchPPLParser.MINUS)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + + this.state = 894; + this.match(OpenSearchPPLParser.DECIMAL_LITERAL); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public booleanLiteral(): BooleanLiteralContext { + let _localctx: BooleanLiteralContext = new BooleanLiteralContext(this._ctx, this.state); + this.enterRule(_localctx, 180, OpenSearchPPLParser.RULE_booleanLiteral); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 896; + _la = this._input.LA(1); + if (!(_la === OpenSearchPPLParser.TRUE || _la === OpenSearchPPLParser.FALSE)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public datetimeLiteral(): DatetimeLiteralContext { + let _localctx: DatetimeLiteralContext = new DatetimeLiteralContext(this._ctx, this.state); + this.enterRule(_localctx, 182, OpenSearchPPLParser.RULE_datetimeLiteral); + try { + this.state = 901; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case OpenSearchPPLParser.DATE: + this.enterOuterAlt(_localctx, 1); + { + this.state = 898; + this.dateLiteral(); + } + break; + case OpenSearchPPLParser.TIME: + this.enterOuterAlt(_localctx, 2); + { + this.state = 899; + this.timeLiteral(); + } + break; + case OpenSearchPPLParser.TIMESTAMP: + this.enterOuterAlt(_localctx, 3); + { + this.state = 900; + this.timestampLiteral(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public dateLiteral(): DateLiteralContext { + let _localctx: DateLiteralContext = new DateLiteralContext(this._ctx, this.state); + this.enterRule(_localctx, 184, OpenSearchPPLParser.RULE_dateLiteral); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 903; + this.match(OpenSearchPPLParser.DATE); + this.state = 904; + _localctx._date = this.stringLiteral(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public timeLiteral(): TimeLiteralContext { + let _localctx: TimeLiteralContext = new TimeLiteralContext(this._ctx, this.state); + this.enterRule(_localctx, 186, OpenSearchPPLParser.RULE_timeLiteral); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 906; + this.match(OpenSearchPPLParser.TIME); + this.state = 907; + _localctx._time = this.stringLiteral(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public timestampLiteral(): TimestampLiteralContext { + let _localctx: TimestampLiteralContext = new TimestampLiteralContext(this._ctx, this.state); + this.enterRule(_localctx, 188, OpenSearchPPLParser.RULE_timestampLiteral); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 909; + this.match(OpenSearchPPLParser.TIMESTAMP); + this.state = 910; + _localctx._timestamp = this.stringLiteral(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public intervalUnit(): IntervalUnitContext { + let _localctx: IntervalUnitContext = new IntervalUnitContext(this._ctx, this.state); + this.enterRule(_localctx, 190, OpenSearchPPLParser.RULE_intervalUnit); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 912; + _la = this._input.LA(1); + if (!(((((_la - 69)) & ~0x1F) === 0 && ((1 << (_la - 69)) & ((1 << (OpenSearchPPLParser.MICROSECOND - 69)) | (1 << (OpenSearchPPLParser.SECOND - 69)) | (1 << (OpenSearchPPLParser.MINUTE - 69)) | (1 << (OpenSearchPPLParser.HOUR - 69)) | (1 << (OpenSearchPPLParser.DAY - 69)) | (1 << (OpenSearchPPLParser.WEEK - 69)) | (1 << (OpenSearchPPLParser.MONTH - 69)) | (1 << (OpenSearchPPLParser.QUARTER - 69)) | (1 << (OpenSearchPPLParser.YEAR - 69)) | (1 << (OpenSearchPPLParser.SECOND_MICROSECOND - 69)) | (1 << (OpenSearchPPLParser.MINUTE_MICROSECOND - 69)) | (1 << (OpenSearchPPLParser.MINUTE_SECOND - 69)) | (1 << (OpenSearchPPLParser.HOUR_MICROSECOND - 69)) | (1 << (OpenSearchPPLParser.HOUR_SECOND - 69)) | (1 << (OpenSearchPPLParser.HOUR_MINUTE - 69)) | (1 << (OpenSearchPPLParser.DAY_MICROSECOND - 69)) | (1 << (OpenSearchPPLParser.DAY_SECOND - 69)) | (1 << (OpenSearchPPLParser.DAY_MINUTE - 69)) | (1 << (OpenSearchPPLParser.DAY_HOUR - 69)) | (1 << (OpenSearchPPLParser.YEAR_MONTH - 69)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public timespanUnit(): TimespanUnitContext { + let _localctx: TimespanUnitContext = new TimespanUnitContext(this._ctx, this.state); + this.enterRule(_localctx, 192, OpenSearchPPLParser.RULE_timespanUnit); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 914; + _la = this._input.LA(1); + if (!(_la === OpenSearchPPLParser.D || ((((_la - 70)) & ~0x1F) === 0 && ((1 << (_la - 70)) & ((1 << (OpenSearchPPLParser.MILLISECOND - 70)) | (1 << (OpenSearchPPLParser.SECOND - 70)) | (1 << (OpenSearchPPLParser.MINUTE - 70)) | (1 << (OpenSearchPPLParser.HOUR - 70)) | (1 << (OpenSearchPPLParser.DAY - 70)) | (1 << (OpenSearchPPLParser.WEEK - 70)) | (1 << (OpenSearchPPLParser.MONTH - 70)) | (1 << (OpenSearchPPLParser.QUARTER - 70)) | (1 << (OpenSearchPPLParser.YEAR - 70)))) !== 0) || ((((_la - 293)) & ~0x1F) === 0 && ((1 << (_la - 293)) & ((1 << (OpenSearchPPLParser.MS - 293)) | (1 << (OpenSearchPPLParser.S - 293)) | (1 << (OpenSearchPPLParser.M - 293)) | (1 << (OpenSearchPPLParser.H - 293)) | (1 << (OpenSearchPPLParser.W - 293)) | (1 << (OpenSearchPPLParser.Q - 293)) | (1 << (OpenSearchPPLParser.Y - 293)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public valueList(): ValueListContext { + let _localctx: ValueListContext = new ValueListContext(this._ctx, this.state); + this.enterRule(_localctx, 194, OpenSearchPPLParser.RULE_valueList); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 916; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 917; + this.literalValue(); + this.state = 922; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === OpenSearchPPLParser.COMMA) { + { + { + this.state = 918; + this.match(OpenSearchPPLParser.COMMA); + this.state = 919; + this.literalValue(); + } + } + this.state = 924; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 925; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public qualifiedName(): QualifiedNameContext { + let _localctx: QualifiedNameContext = new QualifiedNameContext(this._ctx, this.state); + this.enterRule(_localctx, 196, OpenSearchPPLParser.RULE_qualifiedName); + try { + let _alt: number; + _localctx = new IdentsAsQualifiedNameContext(_localctx); + this.enterOuterAlt(_localctx, 1); + { + this.state = 927; + this.ident(); + this.state = 932; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 75, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 928; + this.match(OpenSearchPPLParser.DOT); + this.state = 929; + this.ident(); + } + } + } + this.state = 934; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 75, this._ctx); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public wcQualifiedName(): WcQualifiedNameContext { + let _localctx: WcQualifiedNameContext = new WcQualifiedNameContext(this._ctx, this.state); + this.enterRule(_localctx, 198, OpenSearchPPLParser.RULE_wcQualifiedName); + let _la: number; + try { + _localctx = new IdentsAsWildcardQualifiedNameContext(_localctx); + this.enterOuterAlt(_localctx, 1); + { + this.state = 935; + this.wildcard(); + this.state = 940; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === OpenSearchPPLParser.DOT) { + { + { + this.state = 936; + this.match(OpenSearchPPLParser.DOT); + this.state = 937; + this.wildcard(); + } + } + this.state = 942; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public ident(): IdentContext { + let _localctx: IdentContext = new IdentContext(this._ctx, this.state); + this.enterRule(_localctx, 200, OpenSearchPPLParser.RULE_ident); + let _la: number; + try { + this.state = 953; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case OpenSearchPPLParser.DOT: + case OpenSearchPPLParser.ID: + this.enterOuterAlt(_localctx, 1); + { + this.state = 944; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.DOT) { + { + this.state = 943; + this.match(OpenSearchPPLParser.DOT); + } + } + + this.state = 946; + this.match(OpenSearchPPLParser.ID); + } + break; + case OpenSearchPPLParser.BACKTICK: + this.enterOuterAlt(_localctx, 2); + { + this.state = 947; + this.match(OpenSearchPPLParser.BACKTICK); + this.state = 948; + this.ident(); + this.state = 949; + this.match(OpenSearchPPLParser.BACKTICK); + } + break; + case OpenSearchPPLParser.BQUOTA_STRING: + this.enterOuterAlt(_localctx, 3); + { + this.state = 951; + this.match(OpenSearchPPLParser.BQUOTA_STRING); + } + break; + case OpenSearchPPLParser.D: + case OpenSearchPPLParser.DATETIME: + case OpenSearchPPLParser.MICROSECOND: + case OpenSearchPPLParser.MILLISECOND: + case OpenSearchPPLParser.SECOND: + case OpenSearchPPLParser.MINUTE: + case OpenSearchPPLParser.HOUR: + case OpenSearchPPLParser.DAY: + case OpenSearchPPLParser.WEEK: + case OpenSearchPPLParser.MONTH: + case OpenSearchPPLParser.QUARTER: + case OpenSearchPPLParser.YEAR: + case OpenSearchPPLParser.CONVERT_TZ: + case OpenSearchPPLParser.AVG: + case OpenSearchPPLParser.COUNT: + case OpenSearchPPLParser.MAX: + case OpenSearchPPLParser.MIN: + case OpenSearchPPLParser.SUM: + case OpenSearchPPLParser.VAR_SAMP: + case OpenSearchPPLParser.VAR_POP: + case OpenSearchPPLParser.STDDEV_SAMP: + case OpenSearchPPLParser.STDDEV_POP: + case OpenSearchPPLParser.FIRST: + case OpenSearchPPLParser.LAST: + case OpenSearchPPLParser.ABS: + case OpenSearchPPLParser.CEIL: + case OpenSearchPPLParser.CEILING: + case OpenSearchPPLParser.CONV: + case OpenSearchPPLParser.CRC32: + case OpenSearchPPLParser.E: + case OpenSearchPPLParser.EXP: + case OpenSearchPPLParser.FLOOR: + case OpenSearchPPLParser.LN: + case OpenSearchPPLParser.LOG: + case OpenSearchPPLParser.LOG10: + case OpenSearchPPLParser.LOG2: + case OpenSearchPPLParser.MOD: + case OpenSearchPPLParser.PI: + case OpenSearchPPLParser.POW: + case OpenSearchPPLParser.POWER: + case OpenSearchPPLParser.RAND: + case OpenSearchPPLParser.ROUND: + case OpenSearchPPLParser.SIGN: + case OpenSearchPPLParser.SQRT: + case OpenSearchPPLParser.TRUNCATE: + case OpenSearchPPLParser.ACOS: + case OpenSearchPPLParser.ASIN: + case OpenSearchPPLParser.ATAN: + case OpenSearchPPLParser.ATAN2: + case OpenSearchPPLParser.COS: + case OpenSearchPPLParser.COT: + case OpenSearchPPLParser.DEGREES: + case OpenSearchPPLParser.RADIANS: + case OpenSearchPPLParser.SIN: + case OpenSearchPPLParser.TAN: + case OpenSearchPPLParser.ADDDATE: + case OpenSearchPPLParser.CURDATE: + case OpenSearchPPLParser.CURRENT_DATE: + case OpenSearchPPLParser.CURRENT_TIME: + case OpenSearchPPLParser.CURRENT_TIMESTAMP: + case OpenSearchPPLParser.CURTIME: + case OpenSearchPPLParser.DATE: + case OpenSearchPPLParser.DATE_ADD: + case OpenSearchPPLParser.DATE_FORMAT: + case OpenSearchPPLParser.DATE_SUB: + case OpenSearchPPLParser.DAYNAME: + case OpenSearchPPLParser.DAYOFMONTH: + case OpenSearchPPLParser.DAYOFWEEK: + case OpenSearchPPLParser.DAYOFYEAR: + case OpenSearchPPLParser.FROM_DAYS: + case OpenSearchPPLParser.LOCALTIME: + case OpenSearchPPLParser.LOCALTIMESTAMP: + case OpenSearchPPLParser.FROM_UNIXTIME: + case OpenSearchPPLParser.MAKEDATE: + case OpenSearchPPLParser.MAKETIME: + case OpenSearchPPLParser.MONTHNAME: + case OpenSearchPPLParser.NOW: + case OpenSearchPPLParser.PERIOD_ADD: + case OpenSearchPPLParser.PERIOD_DIFF: + case OpenSearchPPLParser.SUBDATE: + case OpenSearchPPLParser.SYSDATE: + case OpenSearchPPLParser.TIME: + case OpenSearchPPLParser.TIME_TO_SEC: + case OpenSearchPPLParser.TIMESTAMP: + case OpenSearchPPLParser.TO_DAYS: + case OpenSearchPPLParser.UTC_DATE: + case OpenSearchPPLParser.UTC_TIME: + case OpenSearchPPLParser.UTC_TIMESTAMP: + case OpenSearchPPLParser.UNIX_TIMESTAMP: + case OpenSearchPPLParser.SUBSTR: + case OpenSearchPPLParser.SUBSTRING: + case OpenSearchPPLParser.LTRIM: + case OpenSearchPPLParser.RTRIM: + case OpenSearchPPLParser.TRIM: + case OpenSearchPPLParser.LOWER: + case OpenSearchPPLParser.UPPER: + case OpenSearchPPLParser.CONCAT: + case OpenSearchPPLParser.CONCAT_WS: + case OpenSearchPPLParser.LENGTH: + case OpenSearchPPLParser.STRCMP: + case OpenSearchPPLParser.RIGHT: + case OpenSearchPPLParser.LEFT: + case OpenSearchPPLParser.ASCII: + case OpenSearchPPLParser.LOCATE: + case OpenSearchPPLParser.REPLACE: + case OpenSearchPPLParser.SPAN: + case OpenSearchPPLParser.MS: + case OpenSearchPPLParser.S: + case OpenSearchPPLParser.M: + case OpenSearchPPLParser.H: + case OpenSearchPPLParser.W: + case OpenSearchPPLParser.Q: + case OpenSearchPPLParser.Y: + this.enterOuterAlt(_localctx, 4); + { + this.state = 952; + this.keywordsCanBeId(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public wildcard(): WildcardContext { + let _localctx: WildcardContext = new WildcardContext(this._ctx, this.state); + this.enterRule(_localctx, 202, OpenSearchPPLParser.RULE_wildcard); + let _la: number; + try { + let _alt: number; + this.state = 978; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 81, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 955; + this.ident(); + this.state = 960; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 79, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 956; + this.match(OpenSearchPPLParser.MODULE); + this.state = 957; + this.ident(); + } + } + } + this.state = 962; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 79, this._ctx); + } + this.state = 964; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === OpenSearchPPLParser.MODULE) { + { + this.state = 963; + this.match(OpenSearchPPLParser.MODULE); + } + } + + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 966; + this.match(OpenSearchPPLParser.SINGLE_QUOTE); + this.state = 967; + this.wildcard(); + this.state = 968; + this.match(OpenSearchPPLParser.SINGLE_QUOTE); + } + break; + + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 970; + this.match(OpenSearchPPLParser.DOUBLE_QUOTE); + this.state = 971; + this.wildcard(); + this.state = 972; + this.match(OpenSearchPPLParser.DOUBLE_QUOTE); + } + break; + + case 4: + this.enterOuterAlt(_localctx, 4); + { + this.state = 974; + this.match(OpenSearchPPLParser.BACKTICK); + this.state = 975; + this.wildcard(); + this.state = 976; + this.match(OpenSearchPPLParser.BACKTICK); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public keywordsCanBeId(): KeywordsCanBeIdContext { + let _localctx: KeywordsCanBeIdContext = new KeywordsCanBeIdContext(this._ctx, this.state); + this.enterRule(_localctx, 204, OpenSearchPPLParser.RULE_keywordsCanBeId); + try { + this.state = 993; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 82, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 980; + this.match(OpenSearchPPLParser.D); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 981; + this.statsFunctionName(); + } + break; + + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 982; + this.match(OpenSearchPPLParser.TIMESTAMP); + } + break; + + case 4: + this.enterOuterAlt(_localctx, 4); + { + this.state = 983; + this.match(OpenSearchPPLParser.DATE); + } + break; + + case 5: + this.enterOuterAlt(_localctx, 5); + { + this.state = 984; + this.match(OpenSearchPPLParser.TIME); + } + break; + + case 6: + this.enterOuterAlt(_localctx, 6); + { + this.state = 985; + this.match(OpenSearchPPLParser.FIRST); + } + break; + + case 7: + this.enterOuterAlt(_localctx, 7); + { + this.state = 986; + this.match(OpenSearchPPLParser.LAST); + } + break; + + case 8: + this.enterOuterAlt(_localctx, 8); + { + this.state = 987; + this.timespanUnit(); + } + break; + + case 9: + this.enterOuterAlt(_localctx, 9); + { + this.state = 988; + this.match(OpenSearchPPLParser.SPAN); + } + break; + + case 10: + this.enterOuterAlt(_localctx, 10); + { + this.state = 989; + this.constantFunctionName(); + } + break; + + case 11: + this.enterOuterAlt(_localctx, 11); + { + this.state = 990; + this.dateAndTimeFunctionBase(); + } + break; + + case 12: + this.enterOuterAlt(_localctx, 12); + { + this.state = 991; + this.textFunctionBase(); + } + break; + + case 13: + this.enterOuterAlt(_localctx, 13); + { + this.state = 992; + this.mathematicalFunctionBase(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + + public sempred(_localctx: RuleContext, ruleIndex: number, predIndex: number): boolean { + switch (ruleIndex) { + case 43: + return this.logicalExpression_sempred(_localctx as LogicalExpressionContext, predIndex); + + case 45: + return this.valueExpression_sempred(_localctx as ValueExpressionContext, predIndex); + } + return true; + } + private logicalExpression_sempred(_localctx: LogicalExpressionContext, predIndex: number): boolean { + switch (predIndex) { + case 0: + return this.precpred(this._ctx, 5); + + case 1: + return this.precpred(this._ctx, 4); + + case 2: + return this.precpred(this._ctx, 3); + } + return true; + } + private valueExpression_sempred(_localctx: ValueExpressionContext, predIndex: number): boolean { + switch (predIndex) { + case 3: + return this.precpred(this._ctx, 3); + } + return true; + } + + private static readonly _serializedATNSegments: number = 2; + private static readonly _serializedATNSegment0: string = + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03\u0135\u03E6\x04" + + "\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04" + + "\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r\t\r" + + "\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12" + + "\x04\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x04\x17\t\x17" + + "\x04\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B\t\x1B\x04\x1C\t\x1C" + + "\x04\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!\t!\x04\"\t\"\x04" + + "#\t#\x04$\t$\x04%\t%\x04&\t&\x04\'\t\'\x04(\t(\x04)\t)\x04*\t*\x04+\t" + + "+\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041\t1\x042\t2\x043\t3\x04" + + "4\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x04;\t;\x04<\t<\x04" + + "=\t=\x04>\t>\x04?\t?\x04@\t@\x04A\tA\x04B\tB\x04C\tC\x04D\tD\x04E\tE\x04" + + "F\tF\x04G\tG\x04H\tH\x04I\tI\x04J\tJ\x04K\tK\x04L\tL\x04M\tM\x04N\tN\x04" + + "O\tO\x04P\tP\x04Q\tQ\x04R\tR\x04S\tS\x04T\tT\x04U\tU\x04V\tV\x04W\tW\x04" + + "X\tX\x04Y\tY\x04Z\tZ\x04[\t[\x04\\\t\\\x04]\t]\x04^\t^\x04_\t_\x04`\t" + + "`\x04a\ta\x04b\tb\x04c\tc\x04d\td\x04e\te\x04f\tf\x04g\tg\x04h\th\x03" + + "\x02\x05\x02\xD2\n\x02\x03\x02\x03\x02\x03\x03\x03\x03\x03\x03\x07\x03" + + "\xD9\n\x03\f\x03\x0E\x03\xDC\v\x03\x03\x04\x03\x04\x03\x04\x05\x04\xE1" + + "\n\x04\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05" + + "\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x05\x05" + + "\xF3\n\x05\x03\x06\x05\x06\xF6\n\x06\x03\x06\x03\x06\x05\x06\xFA\n\x06" + + "\x03\x06\x03\x06\x03\x06\x03\x06\x05\x06\u0100\n\x06\x03\x06\x03\x06\x03" + + "\x06\x05\x06\u0105\n\x06\x03\x07\x03\x07\x03\x07\x03\b\x03\b\x03\b\x03" + + "\t\x03\t\x03\t\x03\n\x03\n\x05\n\u0112\n\n\x03\n\x03\n\x03\v\x03\v\x03" + + "\v\x03\v\x07\v\u011A\n\v\f\v\x0E\v\u011D\v\v\x03\f\x03\f\x03\f\x03\f\x05" + + "\f\u0123\n\f\x03\f\x03\f\x03\f\x05\f\u0128\n\f\x03\f\x03\f\x03\f\x05\f" + + "\u012D\n\f\x03\f\x03\f\x03\f\x07\f\u0132\n\f\f\f\x0E\f\u0135\v\f\x03\f" + + "\x05\f\u0138\n\f\x03\f\x03\f\x03\f\x05\f\u013D\n\f\x03\r\x03\r\x05\r\u0141" + + "\n\r\x03\r\x03\r\x03\r\x03\r\x05\r\u0147\n\r\x03\r\x03\r\x03\r\x05\r\u014C" + + "\n\r\x03\x0E\x03\x0E\x03\x0E\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x07\x0F\u0155" + + "\n\x0F\f\x0F\x0E\x0F\u0158\v\x0F\x03\x10\x03\x10\x05\x10\u015C\n\x10\x03" + + "\x10\x03\x10\x05\x10\u0160\n\x10\x03\x11\x03\x11\x05\x11\u0164\n\x11\x03" + + "\x11\x03\x11\x05\x11\u0168\n\x11\x03\x12\x03\x12\x03\x12\x05\x12\u016D" + + "\n\x12\x03\x13\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03\x14" + + "\x03\x15\x03\x15\x07\x15\u0179\n\x15\f\x15\x0E\x15\u017C\v\x15\x03\x15" + + "\x03\x15\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x05\x16\u0186" + + "\n\x16\x03\x17\x03\x17\x03\x18\x03\x18\x07\x18\u018C\n\x18\f\x18\x0E\x18" + + "\u018F\v\x18\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03" + + "\x19\x03\x19\x05\x19\u019A\n\x19\x03\x1A\x03\x1A\x07\x1A\u019E\n\x1A\f" + + "\x1A\x0E\x1A\u01A1\v\x1A\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B" + + "\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B" + + "\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B" + + "\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B" + + "\x03\x1B\x03\x1B\x03\x1B\x05\x1B\u01C7\n\x1B\x03\x1C\x03\x1C\x07\x1C\u01CB" + + "\n\x1C\f\x1C\x0E\x1C\u01CE\v\x1C\x03\x1D\x03\x1D\x03\x1D\x03\x1D\x03\x1E" + + "\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E" + + "\x03\x1E\x03\x1E\x05\x1E\u01E0\n\x1E\x03\x1F\x03\x1F\x03\x1F\x07\x1F\u01E5" + + "\n\x1F\f\x1F\x0E\x1F\u01E8\v\x1F\x03 \x03 \x03 \x03 \x03!\x03!\x03!\x03" + + "\"\x03\"\x03\"\x03\"\x03\"\x03\"\x03\"\x03\"\x03\"\x05\"\u01FA\n\"\x03" + + "#\x03#\x03#\x05#\u01FF\n#\x03$\x03$\x03$\x03$\x03$\x03$\x05$\u0207\n$" + + "\x03$\x03$\x03%\x03%\x03%\x07%\u020E\n%\f%\x0E%\u0211\v%\x03&\x03&\x03" + + "&\x03&\x03\'\x03\'\x03\'\x05\'\u021A\n\'\x03(\x03(\x03(\x03(\x03(\x03" + + "(\x03(\x03(\x03(\x03(\x03(\x03(\x03(\x03(\x03(\x05(\u022B\n(\x03)\x03" + + ")\x03*\x03*\x03*\x03*\x03*\x05*\u0234\n*\x03*\x03*\x03+\x03+\x03+\x03" + + "+\x03+\x03+\x03+\x03+\x03,\x03,\x03,\x05,\u0243\n,\x03-\x03-\x03-\x03" + + "-\x03-\x03-\x05-\u024B\n-\x03-\x03-\x03-\x03-\x03-\x05-\u0252\n-\x03-" + + "\x03-\x03-\x03-\x07-\u0258\n-\f-\x0E-\u025B\v-\x03.\x03.\x03.\x03.\x03" + + ".\x03.\x03.\x03.\x05.\u0265\n.\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03" + + "/\x05/\u026F\n/\x03/\x03/\x03/\x03/\x07/\u0275\n/\f/\x0E/\u0278\v/\x03" + + "0\x030\x030\x030\x030\x050\u027F\n0\x031\x031\x031\x051\u0284\n1\x031" + + "\x031\x032\x032\x033\x033\x053\u028C\n3\x034\x034\x034\x034\x034\x034" + + "\x034\x074\u0295\n4\f4\x0E4\u0298\v4\x034\x034\x035\x035\x035\x035\x03" + + "5\x035\x075\u02A2\n5\f5\x0E5\u02A5\v5\x035\x035\x035\x035\x035\x075\u02AC" + + "\n5\f5\x0E5\u02AF\v5\x035\x035\x036\x036\x056\u02B5\n6\x037\x037\x037" + + "\x037\x037\x038\x038\x038\x078\u02BF\n8\f8\x0E8\u02C2\v8\x039\x039\x03" + + "9\x079\u02C7\n9\f9\x0E9\u02CA\v9\x03:\x05:\u02CD\n:\x03:\x03:\x03;\x03" + + ";\x03;\x03;\x03;\x03;\x03;\x03;\x03;\x03;\x03;\x03;\x03;\x03;\x03;\x03" + + ";\x03;\x03;\x03;\x03;\x03;\x05;\u02E6\n;\x03<\x03<\x03=\x03=\x03>\x03" + + ">\x03>\x03>\x03>\x03?\x03?\x03?\x03?\x03?\x03?\x03?\x03@\x03@\x03@\x03" + + "@\x03@\x03A\x03A\x03A\x03A\x03A\x03A\x03A\x03A\x03A\x03A\x05A\u0307\n" + + "A\x03B\x03B\x03B\x03B\x03B\x05B\u030E\nB\x03C\x03C\x03C\x07C\u0313\nC" + + "\fC\x0EC\u0316\vC\x05C\u0318\nC\x03D\x03D\x03D\x05D\u031D\nD\x03D\x03" + + "D\x03E\x03E\x03E\x03E\x03F\x03F\x03G\x03G\x03G\x03G\x03G\x03G\x03G\x03" + + "G\x05G\u032F\nG\x03H\x03H\x05H\u0333\nH\x03I\x03I\x05I\u0337\nI\x03J\x03" + + "J\x03K\x03K\x05K\u033D\nK\x03L\x03L\x03L\x03L\x03L\x03L\x03L\x03L\x03" + + "L\x03L\x03L\x03L\x03L\x03L\x03L\x03L\x03L\x03L\x03L\x03L\x03L\x03L\x05" + + "L\u0355\nL\x03M\x03M\x03N\x03N\x03O\x03O\x03P\x03P\x03Q\x03Q\x03R\x03" + + "R\x03S\x03S\x03T\x03T\x03U\x03U\x03V\x03V\x03W\x03W\x03W\x03W\x03W\x03" + + "W\x05W\u0371\nW\x03X\x03X\x03X\x03X\x03Y\x03Y\x03Z\x05Z\u037A\nZ\x03Z" + + "\x03Z\x03[\x05[\u037F\n[\x03[\x03[\x03\\\x03\\\x03]\x03]\x03]\x05]\u0388" + + "\n]\x03^\x03^\x03^\x03_\x03_\x03_\x03`\x03`\x03`\x03a\x03a\x03b\x03b\x03" + + "c\x03c\x03c\x03c\x07c\u039B\nc\fc\x0Ec\u039E\vc\x03c\x03c\x03d\x03d\x03" + + "d\x07d\u03A5\nd\fd\x0Ed\u03A8\vd\x03e\x03e\x03e\x07e\u03AD\ne\fe\x0Ee" + + "\u03B0\ve\x03f\x05f\u03B3\nf\x03f\x03f\x03f\x03f\x03f\x03f\x03f\x05f\u03BC" + + "\nf\x03g\x03g\x03g\x07g\u03C1\ng\fg\x0Eg\u03C4\vg\x03g\x05g\u03C7\ng\x03" + + "g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x05g\u03D5\n" + + "g\x03h\x03h\x03h\x03h\x03h\x03h\x03h\x03h\x03h\x03h\x03h\x03h\x03h\x05" + + "h\u03E4\nh\x03h\x02\x02\x04X\\i\x02\x02\x04\x02\x06\x02\b\x02\n\x02\f" + + "\x02\x0E\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02\x1E" + + "\x02 \x02\"\x02$\x02&\x02(\x02*\x02,\x02.\x020\x022\x024\x026\x028\x02" + + ":\x02<\x02>\x02@\x02B\x02D\x02F\x02H\x02J\x02L\x02N\x02P\x02R\x02T\x02" + + "V\x02X\x02Z\x02\\\x02^\x02`\x02b\x02d\x02f\x02h\x02j\x02l\x02n\x02p\x02" + + "r\x02t\x02v\x02x\x02z\x02|\x02~\x02\x80\x02\x82\x02\x84\x02\x86\x02\x88" + + "\x02\x8A\x02\x8C\x02\x8E\x02\x90\x02\x92\x02\x94\x02\x96\x02\x98\x02\x9A" + + "\x02\x9C\x02\x9E\x02\xA0\x02\xA2\x02\xA4\x02\xA6\x02\xA8\x02\xAA\x02\xAC" + + "\x02\xAE\x02\xB0\x02\xB2\x02\xB4\x02\xB6\x02\xB8\x02\xBA\x02\xBC\x02\xBE" + + "\x02\xC0\x02\xC2\x02\xC4\x02\xC6\x02\xC8\x02\xCA\x02\xCC\x02\xCE\x02\x02" + + "\x14\x03\x02pq\x03\x02\x13\x14\x04\x02\x83\x83\xA5\xA5\x07\x02\x81\x82" + + "\x86\x86\x89\x89\x8E\x8E\x90\x93\x05\x02\b\b99\u0107\u0125\x03\x02\xBB" + + "\xC4\v\x02EEGGIP\\\\\xC5\xC5\xCB\xD3\xD6\xD9\xDB\xE2\xE6\xE6\x06\x02\xC6" + + "\xCA\xD4\xD5\xDA\xDA\xE3\xE5\x03\x02\xF9\xFE\x04\x02\xE7\xEB\xED\xF7\x04" + + "\x02DDjo\x03\x02pt\x03\x02\u0100\u0103\x03\x02\u0104\u0106\x03\x02\u0132" + + "\u0133\x03\x02BC\x04\x02GGI[\x05\x02 HP\u0127\u012D\x02\u0430\x02\xD1" + + "\x03\x02\x02\x02\x04\xD5\x03\x02\x02\x02\x06\xE0\x03\x02\x02\x02\b\xF2" + + "\x03\x02\x02\x02\n\u0104\x03\x02\x02\x02\f\u0106\x03\x02\x02\x02\x0E\u0109" + + "\x03\x02\x02\x02\x10\u010C\x03\x02\x02\x02\x12\u010F\x03\x02\x02\x02\x14" + + "\u0115\x03\x02\x02\x02\x16\u011E\x03\x02\x02\x02\x18\u013E\x03\x02\x02" + + "\x02\x1A\u014D\x03\x02\x02\x02\x1C\u0150\x03\x02\x02\x02\x1E\u0159\x03" + + "\x02\x02\x02 \u0161\x03\x02\x02\x02\"\u0169\x03\x02\x02\x02$\u016E\x03" + + "\x02\x02\x02&\u0172\x03\x02\x02\x02(\u0176\x03\x02\x02\x02*\u0185\x03" + + "\x02\x02\x02,\u0187\x03\x02\x02\x02.\u0189\x03\x02\x02\x020\u0199\x03" + + "\x02\x02\x022\u019B\x03\x02\x02\x024\u01C6\x03\x02\x02\x026\u01C8\x03" + + "\x02\x02\x028\u01CF\x03\x02\x02\x02:\u01DF\x03\x02\x02\x02<\u01E1\x03" + + "\x02\x02\x02>\u01E9\x03\x02\x02\x02@\u01ED\x03\x02\x02\x02B\u01F9\x03" + + "\x02\x02\x02D\u01FB\x03\x02\x02\x02F\u0200\x03\x02\x02\x02H\u020A\x03" + + "\x02\x02\x02J\u0212\x03\x02\x02\x02L\u0216\x03\x02\x02\x02N\u022A\x03" + + "\x02\x02\x02P\u022C\x03\x02\x02\x02R\u022E\x03\x02\x02\x02T\u0237\x03" + + "\x02\x02\x02V\u0242\x03\x02\x02\x02X\u024A\x03\x02\x02\x02Z\u0264\x03" + + "\x02\x02\x02\\\u026E\x03\x02\x02\x02^\u027E\x03\x02\x02\x02`\u0280\x03" + + "\x02\x02\x02b\u0287\x03\x02\x02\x02d\u028B\x03\x02\x02\x02f\u028D\x03" + + "\x02\x02\x02h\u029B\x03\x02\x02\x02j\u02B4\x03\x02\x02\x02l\u02B6\x03" + + "\x02\x02\x02n\u02BB\x03\x02\x02\x02p\u02C3\x03\x02\x02\x02r\u02CC\x03" + + "\x02\x02\x02t\u02E5\x03\x02\x02\x02v\u02E7\x03\x02\x02\x02x\u02E9\x03" + + "\x02\x02\x02z\u02EB\x03\x02\x02\x02|\u02F0\x03\x02\x02\x02~\u02F7\x03" + + "\x02\x02\x02\x80\u0306\x03\x02\x02\x02\x82\u030D\x03\x02\x02\x02\x84\u0317" + + "\x03\x02\x02\x02\x86\u031C\x03\x02\x02\x02\x88\u0320\x03\x02\x02\x02\x8A" + + "\u0324\x03\x02\x02\x02\x8C\u032E\x03\x02\x02\x02\x8E\u0332\x03\x02\x02" + + "\x02\x90\u0336\x03\x02\x02\x02\x92\u0338\x03\x02\x02\x02\x94\u033C\x03" + + "\x02\x02\x02\x96\u0354\x03\x02\x02\x02\x98\u0356\x03\x02\x02\x02\x9A\u0358" + + "\x03\x02\x02\x02\x9C\u035A\x03\x02\x02\x02\x9E\u035C\x03\x02\x02\x02\xA0" + + "\u035E\x03\x02\x02\x02\xA2\u0360\x03\x02\x02\x02\xA4\u0362\x03\x02\x02" + + "\x02\xA6\u0364\x03\x02\x02\x02\xA8\u0366\x03\x02\x02\x02\xAA\u0368\x03" + + "\x02\x02\x02\xAC\u0370\x03\x02\x02\x02\xAE\u0372\x03\x02\x02\x02\xB0\u0376" + + "\x03\x02\x02\x02\xB2\u0379\x03\x02\x02\x02\xB4\u037E\x03\x02\x02\x02\xB6" + + "\u0382\x03\x02\x02\x02\xB8\u0387\x03\x02\x02\x02\xBA\u0389\x03\x02\x02" + + "\x02\xBC\u038C\x03\x02\x02\x02\xBE\u038F\x03\x02\x02\x02\xC0\u0392\x03" + + "\x02\x02\x02\xC2\u0394\x03\x02\x02\x02\xC4\u0396\x03\x02\x02\x02\xC6\u03A1" + + "\x03\x02\x02\x02\xC8\u03A9\x03\x02\x02\x02\xCA\u03BB\x03\x02\x02\x02\xCC" + + "\u03D4\x03\x02\x02\x02\xCE\u03E3\x03\x02\x02\x02\xD0\xD2\x05\x04\x03\x02" + + "\xD1\xD0\x03\x02\x02\x02\xD1\xD2\x03\x02\x02\x02\xD2\xD3\x03\x02\x02\x02" + + "\xD3\xD4\x07\x02\x02\x03\xD4\x03\x03\x02\x02\x02\xD5\xDA\x05\x06\x04\x02" + + "\xD6\xD7\x07g\x02\x02\xD7\xD9\x05\b\x05\x02\xD8\xD6\x03\x02\x02\x02\xD9" + + "\xDC\x03\x02\x02\x02\xDA\xD8\x03\x02\x02\x02\xDA\xDB\x03\x02\x02\x02\xDB" + + "\x05\x03\x02\x02\x02\xDC\xDA\x03\x02\x02\x02\xDD\xE1\x05\n\x06\x02\xDE" + + "\xE1\x05\f\x07\x02\xDF\xE1\x05\x0E\b\x02\xE0\xDD\x03\x02\x02\x02\xE0\xDE" + + "\x03\x02\x02\x02\xE0\xDF\x03\x02\x02\x02\xE1\x07\x03\x02\x02\x02\xE2\xF3" + + "\x05\x10\t\x02\xE3\xF3\x05\x12\n\x02\xE4\xF3\x05\x14\v\x02\xE5\xF3\x05" + + "\x16\f\x02\xE6\xF3\x05\x18\r\x02\xE7\xF3\x05\x1A\x0E\x02\xE8\xF3\x05\x1C" + + "\x0F\x02\xE9\xF3\x05\x1E\x10\x02\xEA\xF3\x05 \x11\x02\xEB\xF3\x05\"\x12" + + "\x02\xEC\xF3\x05$\x13\x02\xED\xF3\x05&\x14\x02\xEE\xF3\x05(\x15\x02\xEF" + + "\xF3\x05.\x18\x02\xF0\xF3\x052\x1A\x02\xF1\xF3\x056\x1C\x02\xF2\xE2\x03" + + "\x02\x02\x02\xF2\xE3\x03\x02\x02\x02\xF2\xE4\x03\x02\x02\x02\xF2\xE5\x03" + + "\x02\x02\x02\xF2\xE6\x03\x02\x02\x02\xF2\xE7\x03\x02\x02\x02\xF2\xE8\x03" + + "\x02\x02\x02\xF2\xE9\x03\x02\x02\x02\xF2\xEA\x03\x02\x02\x02\xF2\xEB\x03" + + "\x02\x02\x02\xF2\xEC\x03\x02\x02\x02\xF2\xED\x03\x02\x02\x02\xF2\xEE\x03" + + "\x02\x02\x02\xF2\xEF\x03\x02\x02\x02\xF2\xF0\x03\x02\x02\x02\xF2\xF1\x03" + + "\x02\x02\x02\xF3\t\x03\x02\x02\x02\xF4\xF6\x07\x03\x02\x02\xF5\xF4\x03" + + "\x02\x02\x02\xF5\xF6\x03\x02\x02\x02\xF6\xF7\x03\x02\x02\x02\xF7\u0105" + + "\x05:\x1E\x02\xF8\xFA\x07\x03\x02\x02\xF9\xF8\x03\x02\x02\x02\xF9\xFA" + + "\x03\x02\x02\x02\xFA\xFB\x03\x02\x02\x02\xFB\xFC\x05:\x1E\x02\xFC\xFD" + + "\x05X-\x02\xFD\u0105\x03\x02\x02\x02\xFE\u0100\x07\x03\x02\x02\xFF\xFE" + + "\x03\x02\x02\x02\xFF\u0100\x03\x02\x02\x02\u0100\u0101\x03\x02\x02\x02" + + "\u0101\u0102\x05X-\x02\u0102\u0103\x05:\x1E\x02\u0103\u0105\x03\x02\x02" + + "\x02\u0104\xF5\x03\x02\x02\x02\u0104\xF9\x03\x02\x02\x02\u0104\xFF\x03" + + "\x02\x02\x02\u0105\v\x03\x02\x02\x02\u0106\u0107\x07\x04\x02\x02\u0107" + + "\u0108\x05<\x1F\x02\u0108\r\x03\x02\x02\x02\u0109\u010A\x07\x05\x02\x02" + + "\u010A\u010B\x07\"\x02\x02\u010B\x0F\x03\x02\x02\x02\u010C\u010D\x07\x07" + + "\x02\x02\u010D\u010E\x05X-\x02\u010E\x11\x03\x02\x02\x02\u010F\u0111\x07" + + "\b\x02\x02\u0110\u0112\t\x02\x02\x02\u0111\u0110\x03\x02\x02\x02\u0111" + + "\u0112\x03\x02\x02\x02\u0112\u0113\x03\x02\x02\x02\u0113\u0114\x05n8\x02" + + "\u0114\x13\x03\x02\x02\x02\u0115\u0116\x07\t\x02\x02\u0116\u011B\x05>" + + " \x02\u0117\u0118\x07h\x02\x02\u0118\u011A\x05> \x02\u0119\u0117\x03\x02" + + "\x02\x02\u011A\u011D\x03\x02\x02\x02\u011B\u0119\x03\x02\x02\x02\u011B" + + "\u011C\x03\x02\x02\x02\u011C\x15\x03\x02\x02\x02\u011D\u011B\x03\x02\x02" + + "\x02\u011E\u0122\x07\n\x02\x02\u011F\u0120\x07+\x02\x02\u0120\u0121\x07" + + "j\x02\x02\u0121\u0123\x05\xB2Z\x02\u0122\u011F\x03\x02\x02\x02\u0122\u0123" + + "\x03\x02\x02\x02\u0123\u0127\x03\x02\x02\x02\u0124\u0125\x07,\x02\x02" + + "\u0125\u0126\x07j\x02\x02\u0126\u0128\x05\xB6\\\x02\u0127\u0124\x03\x02" + + "\x02\x02\u0127\u0128\x03\x02\x02\x02\u0128\u012C\x03\x02\x02\x02\u0129" + + "\u012A\x07-\x02\x02\u012A\u012B\x07j\x02\x02\u012B\u012D\x05\xB0Y\x02" + + "\u012C\u0129\x03\x02\x02\x02\u012C\u012D\x03\x02\x02\x02\u012D\u012E\x03" + + "\x02\x02\x02\u012E\u0133\x05L\'\x02\u012F\u0130\x07h\x02\x02\u0130\u0132" + + "\x05L\'\x02\u0131\u012F\x03\x02\x02\x02\u0132\u0135\x03\x02\x02\x02\u0133" + + "\u0131\x03\x02\x02\x02\u0133\u0134\x03\x02\x02\x02\u0134\u0137\x03\x02" + + "\x02\x02\u0135\u0133\x03\x02\x02\x02\u0136\u0138\x05B\"\x02\u0137\u0136" + + "\x03\x02\x02\x02\u0137\u0138\x03\x02\x02\x02\u0138\u013C\x03\x02\x02\x02" + + "\u0139\u013A\x07*\x02\x02\u013A\u013B\x07j\x02\x02\u013B\u013D\x05\xB6" + + "\\\x02\u013C\u0139\x03\x02\x02\x02\u013C\u013D\x03\x02\x02\x02\u013D\x17" + + "\x03\x02\x02\x02\u013E\u0140\x07\v\x02\x02\u013F\u0141\x05\xB2Z\x02\u0140" + + "\u013F\x03\x02\x02\x02\u0140\u0141\x03\x02\x02\x02\u0141\u0142\x03\x02" + + "\x02\x02\u0142\u0146\x05n8\x02\u0143\u0144\x07(\x02\x02\u0144\u0145\x07" + + "j\x02\x02\u0145\u0147\x05\xB6\\\x02\u0146\u0143\x03\x02\x02\x02\u0146" + + "\u0147\x03\x02\x02\x02\u0147\u014B\x03\x02\x02\x02\u0148\u0149\x07)\x02" + + "\x02\u0149\u014A\x07j\x02\x02\u014A\u014C\x05\xB6\\\x02\u014B\u0148\x03" + + "\x02\x02\x02\u014B\u014C\x03\x02\x02\x02\u014C\x19\x03\x02\x02\x02\u014D" + + "\u014E\x07\f\x02\x02\u014E\u014F\x05H%\x02\u014F\x1B\x03\x02\x02\x02\u0150" + + "\u0151\x07\r\x02\x02\u0151\u0156\x05J&\x02\u0152\u0153\x07h\x02\x02\u0153" + + "\u0155\x05J&\x02\u0154\u0152\x03\x02\x02\x02\u0155\u0158\x03\x02\x02\x02" + + "\u0156\u0154\x03\x02\x02\x02\u0156\u0157\x03\x02\x02\x02\u0157\x1D\x03" + + "\x02\x02\x02\u0158\u0156\x03\x02\x02\x02\u0159\u015B\x07\x0E\x02\x02\u015A" + + "\u015C\x05\xB2Z\x02\u015B\u015A\x03\x02\x02\x02\u015B\u015C\x03\x02\x02" + + "\x02\u015C\u015F\x03\x02\x02\x02\u015D\u015E\x07\x06\x02\x02\u015E\u0160" + + "\x05\xB2Z\x02\u015F\u015D\x03\x02\x02\x02\u015F\u0160\x03\x02\x02\x02" + + "\u0160\x1F\x03\x02\x02\x02\u0161\u0163\x07\x0F\x02\x02\u0162\u0164\x05" + + "\xB2Z\x02\u0163\u0162\x03\x02\x02\x02\u0163\u0164\x03\x02\x02\x02\u0164" + + "\u0165\x03\x02\x02\x02\u0165\u0167\x05n8\x02\u0166\u0168\x05@!\x02\u0167" + + "\u0166\x03\x02\x02\x02\u0167\u0168\x03\x02\x02\x02\u0168!\x03\x02\x02" + + "\x02\u0169\u016A\x07\x10\x02\x02\u016A\u016C\x05n8\x02\u016B\u016D\x05" + + "@!\x02\u016C\u016B\x03\x02\x02\x02\u016C\u016D\x03\x02\x02\x02\u016D#" + + "\x03\x02\x02\x02\u016E\u016F\x07\x15\x02\x02\u016F\u0170\x05V,\x02\u0170" + + "\u0171\x05\xB0Y\x02\u0171%\x03\x02\x02\x02\u0172\u0173\x07\x11\x02\x02" + + "\u0173\u0174\x05V,\x02\u0174\u0175\x05\xB0Y\x02\u0175\'\x03\x02\x02\x02" + + "\u0176\u017A\x07\x17\x02\x02\u0177\u0179\x05*\x16\x02\u0178\u0177\x03" + + "\x02\x02\x02\u0179\u017C\x03\x02\x02\x02\u017A\u0178\x03\x02\x02\x02\u017A" + + "\u017B\x03\x02\x02\x02\u017B\u017D\x03\x02\x02\x02\u017C\u017A\x03\x02" + + "\x02\x02\u017D\u017E\x05V,\x02\u017E)\x03\x02\x02\x02\u017F\u0180\x07" + + "\x18\x02\x02\u0180\u0181\x07j\x02\x02\u0181\u0186\x05\xB0Y\x02\u0182\u0183" + + "\x07\x16\x02\x02\u0183\u0184\x07j\x02\x02\u0184\u0186\x05\xB0Y\x02\u0185" + + "\u017F\x03\x02\x02\x02\u0185\u0182\x03\x02\x02\x02\u0186+\x03\x02\x02" + + "\x02\u0187\u0188\t\x03\x02\x02\u0188-\x03\x02\x02\x02\u0189\u018D\x07" + + "\x19\x02\x02\u018A\u018C\x050\x19\x02\u018B\u018A\x03\x02\x02\x02\u018C" + + "\u018F\x03\x02\x02\x02\u018D\u018B\x03\x02\x02\x02\u018D\u018E\x03\x02" + + "\x02\x02\u018E/\x03\x02\x02\x02\u018F\u018D\x03\x02\x02\x02\u0190\u0191" + + "\x07.\x02\x02\u0191\u0192\x07j\x02\x02\u0192\u019A\x05\xB2Z\x02\u0193" + + "\u0194\x07/\x02\x02\u0194\u0195\x07j\x02\x02\u0195\u019A\x05\xB2Z\x02" + + "\u0196\u0197\x070\x02\x02\u0197\u0198\x07j\x02\x02\u0198\u019A\x05\xB0" + + "Y\x02\u0199\u0190\x03\x02\x02\x02\u0199\u0193\x03\x02\x02\x02\u0199\u0196" + + "\x03\x02\x02\x02\u019A1\x03\x02\x02\x02\u019B\u019F\x07\x1A\x02\x02\u019C" + + "\u019E\x054\x1B\x02\u019D\u019C\x03\x02\x02\x02\u019E\u01A1\x03\x02\x02" + + "\x02\u019F\u019D\x03\x02\x02\x02\u019F\u01A0\x03\x02\x02\x02\u01A03\x03" + + "\x02\x02\x02\u01A1\u019F\x03\x02\x02\x02\u01A2\u01A3\x071\x02\x02\u01A3" + + "\u01A4\x07j\x02\x02\u01A4\u01C7\x05\xB2Z\x02\u01A5\u01A6\x072\x02\x02" + + "\u01A6\u01A7\x07j\x02\x02\u01A7\u01C7\x05\xB2Z\x02\u01A8\u01A9\x073\x02" + + "\x02\u01A9\u01AA\x07j\x02\x02\u01AA\u01C7\x05\xB2Z\x02\u01AB\u01AC\x07" + + "4\x02\x02\u01AC\u01AD\x07j\x02\x02\u01AD\u01C7\x05\xB2Z\x02\u01AE\u01AF" + + "\x075\x02\x02\u01AF\u01B0\x07j\x02\x02\u01B0\u01C7\x05\xB4[\x02\u01B1" + + "\u01B2\x076\x02\x02\u01B2\u01B3\x07j\x02\x02\u01B3\u01C7\x05\xB4[\x02" + + "\u01B4\u01B5\x077\x02\x02\u01B5\u01B6\x07j\x02\x02\u01B6\u01C7\x05\xB0" + + "Y\x02\u01B7\u01B8\x078\x02\x02\u01B8\u01B9\x07j\x02\x02\u01B9\u01C7\x05" + + "\xB0Y\x02\u01BA\u01BB\x07\xCD\x02\x02\u01BB\u01BC\x07j\x02\x02\u01BC\u01C7" + + "\x05\xB0Y\x02\u01BD\u01BE\x079\x02\x02\u01BE\u01BF\x07j\x02\x02\u01BF" + + "\u01C7\x05\xB0Y\x02\u01C0\u01C1\x07:\x02\x02\u01C1\u01C2\x07j\x02\x02" + + "\u01C2\u01C7\x05\xB2Z\x02\u01C3\u01C4\x07;\x02\x02\u01C4\u01C5\x07j\x02" + + "\x02\u01C5\u01C7\x05\xB4[\x02\u01C6\u01A2\x03\x02\x02\x02\u01C6\u01A5" + + "\x03\x02\x02\x02\u01C6\u01A8\x03\x02\x02\x02\u01C6\u01AB\x03\x02\x02\x02" + + "\u01C6\u01AE\x03\x02\x02\x02\u01C6\u01B1\x03\x02\x02\x02\u01C6\u01B4\x03" + + "\x02\x02\x02\u01C6\u01B7\x03\x02\x02\x02\u01C6\u01BA\x03\x02\x02\x02\u01C6" + + "\u01BD\x03\x02\x02\x02\u01C6\u01C0\x03\x02\x02\x02\u01C6\u01C3\x03\x02" + + "\x02\x02\u01C75\x03\x02\x02\x02\u01C8\u01CC\x07\x1B\x02\x02\u01C9\u01CB" + + "\x058\x1D\x02\u01CA\u01C9\x03\x02\x02\x02\u01CB\u01CE\x03\x02\x02\x02" + + "\u01CC\u01CA\x03\x02\x02\x02\u01CC\u01CD\x03\x02\x02\x02\u01CD7\x03\x02" + + "\x02\x02\u01CE\u01CC\x03\x02\x02\x02\u01CF\u01D0\x05\xCAf\x02\u01D0\u01D1" + + "\x07j\x02\x02\u01D1\u01D2\x05\xACW\x02\u01D29\x03\x02\x02\x02\u01D3\u01D4" + + "\x07\x1E\x02\x02\u01D4\u01D5\x07j\x02\x02\u01D5\u01E0\x05<\x1F\x02\u01D6" + + "\u01D7\x07\x1F\x02\x02\u01D7\u01D8\x07j\x02\x02\u01D8\u01E0"; + private static readonly _serializedATNSegment1: string = + "\x05<\x1F\x02\u01D9\u01DA\x07\x1E\x02\x02\u01DA\u01DB\x07j\x02\x02\u01DB" + + "\u01E0\x05l7\x02\u01DC\u01DD\x07\x1F\x02\x02\u01DD\u01DE\x07j\x02\x02" + + "\u01DE\u01E0\x05l7\x02\u01DF\u01D3\x03\x02\x02\x02\u01DF\u01D6\x03\x02" + + "\x02\x02\u01DF\u01D9\x03\x02\x02\x02\u01DF\u01DC\x03\x02\x02\x02\u01E0" + + ";\x03\x02\x02\x02\u01E1\u01E6\x05j6\x02\u01E2\u01E3\x07h\x02\x02\u01E3" + + "\u01E5\x05j6\x02\u01E4\u01E2\x03\x02\x02\x02\u01E5\u01E8\x03\x02\x02\x02" + + "\u01E6\u01E4\x03\x02\x02\x02\u01E6\u01E7\x03\x02\x02\x02\u01E7=\x03\x02" + + "\x02\x02\u01E8\u01E6\x03\x02\x02\x02\u01E9\u01EA\x05x=\x02\u01EA\u01EB" + + "\x07\x1C\x02\x02\u01EB\u01EC\x05x=\x02\u01EC?\x03\x02\x02\x02\u01ED\u01EE" + + "\x07\x1D\x02\x02\u01EE\u01EF\x05n8\x02\u01EFA\x03\x02\x02\x02\u01F0\u01F1" + + "\x07\x1D\x02\x02\u01F1\u01FA\x05n8\x02\u01F2\u01F3\x07\x1D\x02\x02\u01F3" + + "\u01FA\x05D#\x02\u01F4\u01F5\x07\x1D\x02\x02\u01F5\u01F6\x05D#\x02\u01F6" + + "\u01F7\x07h\x02\x02\u01F7\u01F8\x05n8\x02\u01F8\u01FA\x03\x02\x02\x02" + + "\u01F9\u01F0\x03\x02\x02\x02\u01F9\u01F2\x03\x02\x02\x02\u01F9\u01F4\x03" + + "\x02\x02\x02\u01FAC\x03\x02\x02\x02\u01FB\u01FE\x05F$\x02\u01FC\u01FD" + + "\x07\x1C\x02\x02\u01FD\u01FF\x05\xC6d\x02\u01FE\u01FC\x03\x02\x02\x02" + + "\u01FE\u01FF\x03\x02\x02\x02\u01FFE\x03\x02\x02\x02\u0200\u0201\x07\u0126" + + "\x02\x02\u0201\u0202\x07w\x02\x02\u0202\u0203\x05v<\x02\u0203\u0204\x07" + + "h\x02\x02\u0204\u0206\x05\xACW\x02\u0205\u0207\x05\xC2b\x02\u0206\u0205" + + "\x03\x02\x02\x02\u0206\u0207\x03\x02\x02\x02\u0207\u0208\x03\x02\x02\x02" + + "\u0208\u0209\x07x\x02\x02\u0209G\x03\x02\x02\x02\u020A\u020F\x05r:\x02" + + "\u020B\u020C\x07h\x02\x02\u020C\u020E\x05r:\x02\u020D\u020B\x03\x02\x02" + + "\x02\u020E\u0211\x03\x02\x02\x02\u020F\u020D\x03\x02\x02\x02\u020F\u0210" + + "\x03\x02\x02\x02\u0210I\x03\x02\x02\x02\u0211\u020F\x03\x02\x02\x02\u0212" + + "\u0213\x05v<\x02\u0213\u0214\x07j\x02\x02\u0214\u0215\x05V,\x02\u0215" + + "K\x03\x02\x02\x02\u0216\u0219\x05N(\x02\u0217\u0218\x07\x1C\x02\x02\u0218" + + "\u021A\x05x=\x02\u0219\u0217\x03\x02\x02\x02\u0219\u021A\x03\x02\x02\x02" + + "\u021AM\x03\x02\x02\x02\u021B\u021C\x05P)\x02\u021C\u021D\x07w\x02\x02" + + "\u021D\u021E\x05\\/\x02\u021E\u021F\x07x\x02\x02\u021F\u022B\x03\x02\x02" + + "\x02\u0220\u0221\x07\x82\x02\x02\u0221\u0222\x07w\x02\x02\u0222\u022B" + + "\x07x\x02\x02\u0223\u0224\t\x04\x02\x02\u0224\u0225\x07w\x02\x02\u0225" + + "\u0226\x05\\/\x02\u0226\u0227\x07x\x02\x02\u0227\u022B\x03\x02\x02\x02" + + "\u0228\u022B\x05T+\x02\u0229\u022B\x05R*\x02\u022A\u021B\x03\x02\x02\x02" + + "\u022A\u0220\x03\x02\x02\x02\u022A\u0223\x03\x02\x02\x02\u022A\u0228\x03" + + "\x02\x02\x02\u022A\u0229\x03\x02\x02\x02\u022BO\x03\x02\x02\x02\u022C" + + "\u022D\t\x05\x02\x02\u022DQ\x03\x02\x02\x02\u022E\u022F\x07\x95\x02\x02" + + "\u022F\u0230\x07w\x02\x02\u0230\u0233\x05v<\x02\u0231\u0232\x07h\x02\x02" + + "\u0232\u0234\x05\xB2Z\x02\u0233\u0231\x03\x02\x02\x02\u0233\u0234\x03" + + "\x02\x02\x02\u0234\u0235\x03\x02\x02\x02\u0235\u0236\x07x\x02\x02\u0236" + + "S\x03\x02\x02\x02\u0237\u0238\x07\x94\x02\x02\u0238\u0239\x07l\x02\x02" + + "\u0239\u023A\x05\xB2Z\x02\u023A\u023B\x07k\x02\x02\u023B\u023C\x07w\x02" + + "\x02\u023C\u023D\x05v<\x02\u023D\u023E\x07x\x02\x02\u023EU\x03\x02\x02" + + "\x02\u023F\u0243\x05X-\x02\u0240\u0243\x05Z.\x02\u0241\u0243\x05\\/\x02" + + "\u0242\u023F\x03\x02\x02\x02\u0242\u0240\x03\x02\x02\x02\u0242\u0241\x03" + + "\x02\x02\x02\u0243W\x03\x02\x02\x02\u0244\u0245\b-\x01\x02\u0245\u024B" + + "\x05Z.\x02\u0246\u0247\x07>\x02\x02\u0247\u024B\x05X-\b\u0248\u024B\x05" + + "b2\x02\u0249\u024B\x05d3\x02\u024A\u0244\x03\x02\x02\x02\u024A\u0246\x03" + + "\x02\x02\x02\u024A\u0248\x03\x02\x02\x02\u024A\u0249\x03\x02\x02\x02\u024B" + + "\u0259\x03\x02\x02\x02\u024C\u024D\f\x07\x02\x02\u024D\u024E\x07?\x02" + + "\x02\u024E\u0258\x05X-\b\u024F\u0251\f\x06\x02\x02\u0250\u0252\x07@\x02" + + "\x02\u0251\u0250\x03\x02\x02\x02\u0251\u0252\x03\x02\x02\x02\u0252\u0253" + + "\x03\x02\x02\x02\u0253\u0258\x05X-\x07\u0254\u0255\f\x05\x02\x02\u0255" + + "\u0256\x07A\x02\x02\u0256\u0258\x05X-\x06\u0257\u024C\x03\x02\x02\x02" + + "\u0257\u024F\x03\x02\x02\x02\u0257\u0254\x03\x02\x02\x02\u0258\u025B\x03" + + "\x02\x02\x02\u0259\u0257\x03\x02\x02\x02\u0259\u025A\x03\x02\x02\x02\u025A" + + "Y\x03\x02\x02\x02\u025B\u0259\x03\x02\x02\x02\u025C\u025D\x05\\/\x02\u025D" + + "\u025E\x05\xA4S\x02\u025E\u025F\x05\\/\x02\u025F\u0265\x03\x02\x02\x02" + + "\u0260\u0261\x05\\/\x02\u0261\u0262\x07=\x02\x02\u0262\u0263\x05\xC4c" + + "\x02\u0263\u0265\x03\x02\x02\x02\u0264\u025C\x03\x02\x02\x02\u0264\u0260" + + "\x03\x02\x02\x02\u0265[\x03\x02\x02\x02\u0266\u0267\b/\x01\x02\u0267\u0268" + + "\x07w\x02\x02\u0268\u0269\x05\\/\x02\u0269\u026A\x05\xA6T\x02\u026A\u026B" + + "\x05\\/\x02\u026B\u026C\x07x\x02\x02\u026C\u026F\x03\x02\x02\x02\u026D" + + "\u026F\x05^0\x02\u026E\u0266\x03\x02\x02\x02\u026E\u026D\x03\x02\x02\x02" + + "\u026F\u0276\x03\x02\x02\x02\u0270\u0271\f\x05\x02\x02\u0271\u0272\x05" + + "\xA6T\x02\u0272\u0273\x05\\/\x06\u0273\u0275\x03\x02\x02\x02\u0274\u0270" + + "\x03\x02\x02\x02\u0275\u0278\x03\x02\x02\x02\u0276\u0274\x03\x02\x02\x02" + + "\u0276\u0277\x03\x02\x02\x02\u0277]\x03\x02\x02\x02\u0278\u0276\x03\x02" + + "\x02\x02\u0279\u027F\x05z>\x02\u027A\u027F\x05|?\x02\u027B\u027F\x05v" + + "<\x02\u027C\u027F\x05\xACW\x02\u027D\u027F\x05`1\x02\u027E\u0279\x03\x02" + + "\x02\x02\u027E\u027A\x03\x02\x02\x02\u027E\u027B\x03\x02\x02\x02\u027E" + + "\u027C\x03\x02\x02\x02\u027E\u027D\x03\x02\x02\x02\u027F_\x03\x02\x02" + + "\x02\u0280\u0281\x05\x9CO\x02\u0281\u0283\x07w\x02\x02\u0282\u0284\x05" + + "\x84C\x02\u0283\u0282\x03\x02\x02\x02\u0283\u0284\x03\x02\x02\x02\u0284" + + "\u0285\x03\x02\x02\x02\u0285\u0286\x07x\x02\x02\u0286a\x03\x02\x02\x02" + + "\u0287\u0288\x05~@\x02\u0288c\x03\x02\x02\x02\u0289\u028C\x05f4\x02\u028A" + + "\u028C\x05h5\x02\u028B\u0289\x03\x02\x02\x02\u028B\u028A\x03\x02\x02\x02" + + "\u028Ce\x03\x02\x02\x02\u028D\u028E\x05\xA8U\x02\u028E\u028F\x07w\x02" + + "\x02\u028F\u0290\x05\x90I\x02\u0290\u0291\x07h\x02\x02\u0291\u0296\x05" + + "\x92J\x02\u0292\u0293\x07h\x02\x02\u0293\u0295\x05\x88E\x02\u0294\u0292" + + "\x03\x02\x02\x02\u0295\u0298\x03\x02\x02\x02\u0296\u0294\x03\x02\x02\x02" + + "\u0296\u0297\x03\x02\x02\x02\u0297\u0299\x03\x02\x02\x02\u0298\u0296\x03" + + "\x02\x02\x02\u0299\u029A\x07x\x02\x02\u029Ag\x03\x02\x02\x02\u029B\u029C" + + "\x05\xAAV\x02\u029C\u029D\x07w\x02\x02\u029D\u029E\x07y\x02\x02\u029E" + + "\u02A3\x05\x8CG\x02\u029F\u02A0\x07h\x02\x02\u02A0\u02A2\x05\x8CG\x02" + + "\u02A1\u029F\x03\x02\x02\x02\u02A2\u02A5\x03\x02\x02\x02\u02A3\u02A1\x03" + + "\x02\x02\x02\u02A3\u02A4\x03\x02\x02\x02\u02A4\u02A6\x03\x02\x02\x02\u02A5" + + "\u02A3\x03\x02\x02\x02\u02A6\u02A7\x07z\x02\x02\u02A7\u02A8\x07h\x02\x02" + + "\u02A8\u02AD\x05\x92J\x02\u02A9\u02AA\x07h\x02\x02\u02AA\u02AC\x05\x88" + + "E\x02\u02AB\u02A9\x03\x02\x02\x02\u02AC\u02AF\x03\x02\x02\x02\u02AD\u02AB" + + "\x03\x02\x02\x02\u02AD\u02AE\x03\x02\x02\x02\u02AE\u02B0\x03\x02\x02\x02" + + "\u02AF\u02AD\x03\x02\x02\x02\u02B0\u02B1\x07x\x02\x02\u02B1i\x03\x02\x02" + + "\x02\u02B2\u02B5\x05\xC6d\x02\u02B3\u02B5\x07\u0131\x02\x02\u02B4\u02B2" + + "\x03\x02\x02\x02\u02B4\u02B3\x03\x02\x02\x02\u02B5k\x03\x02\x02\x02\u02B6" + + "\u02B7\x05\xC6d\x02\u02B7\u02B8\x07w\x02\x02\u02B8\u02B9\x05\x84C\x02" + + "\u02B9\u02BA\x07x\x02\x02\u02BAm\x03\x02\x02\x02\u02BB\u02C0\x05v<\x02" + + "\u02BC\u02BD\x07h\x02\x02\u02BD\u02BF\x05v<\x02\u02BE\u02BC\x03\x02\x02" + + "\x02\u02BF\u02C2\x03\x02\x02\x02\u02C0\u02BE\x03\x02\x02\x02\u02C0\u02C1" + + "\x03\x02\x02\x02\u02C1o\x03\x02\x02\x02\u02C2\u02C0\x03\x02\x02\x02\u02C3" + + "\u02C8\x05x=\x02\u02C4\u02C5\x07h\x02\x02\u02C5\u02C7\x05x=\x02\u02C6" + + "\u02C4\x03\x02\x02\x02\u02C7\u02CA\x03\x02\x02\x02\u02C8\u02C6\x03\x02" + + "\x02\x02\u02C8\u02C9\x03\x02\x02\x02\u02C9q\x03\x02\x02\x02\u02CA\u02C8" + + "\x03\x02\x02\x02\u02CB\u02CD\t\x02\x02\x02\u02CC\u02CB\x03\x02\x02\x02" + + "\u02CC\u02CD\x03\x02\x02\x02\u02CD\u02CE\x03\x02\x02\x02\u02CE\u02CF\x05" + + "t;\x02\u02CFs\x03\x02\x02\x02\u02D0\u02E6\x05v<\x02\u02D1\u02D2\x07$\x02" + + "\x02\u02D2\u02D3\x07w\x02\x02\u02D3\u02D4\x05v<\x02\u02D4\u02D5\x07x\x02" + + "\x02\u02D5\u02E6\x03\x02\x02\x02\u02D6\u02D7\x07%\x02\x02\u02D7\u02D8" + + "\x07w\x02\x02\u02D8\u02D9\x05v<\x02\u02D9\u02DA\x07x\x02\x02\u02DA\u02E6" + + "\x03\x02\x02\x02\u02DB\u02DC\x07&\x02\x02\u02DC\u02DD\x07w\x02\x02\u02DD" + + "\u02DE\x05v<\x02\u02DE\u02DF\x07x\x02\x02\u02DF\u02E6\x03\x02\x02\x02" + + "\u02E0\u02E1\x07\'\x02\x02\u02E1\u02E2\x07w\x02\x02\u02E2\u02E3\x05v<" + + "\x02\u02E3\u02E4\x07x\x02\x02\u02E4\u02E6\x03\x02\x02\x02\u02E5\u02D0" + + "\x03\x02\x02\x02\u02E5\u02D1\x03\x02\x02\x02\u02E5\u02D6\x03\x02\x02\x02" + + "\u02E5\u02DB\x03\x02\x02\x02\u02E5\u02E0\x03\x02\x02\x02\u02E6u\x03\x02" + + "\x02\x02\u02E7\u02E8\x05\xC6d\x02\u02E8w\x03\x02\x02\x02\u02E9\u02EA\x05" + + "\xC8e\x02\u02EAy\x03\x02\x02\x02\u02EB\u02EC\x05\x82B\x02\u02EC\u02ED" + + "\x07w\x02\x02\u02ED\u02EE\x05\x84C\x02\u02EE\u02EF\x07x\x02\x02\u02EF" + + "{\x03\x02\x02\x02\u02F0\u02F1\x07\xF8\x02\x02\u02F1\u02F2\x07w\x02\x02" + + "\u02F2\u02F3\x05V,\x02\u02F3\u02F4\x07\x1C\x02\x02\u02F4\u02F5\x05\x80" + + "A\x02\u02F5\u02F6\x07x\x02\x02\u02F6}\x03\x02\x02\x02\u02F7\u02F8\x05" + + "\x9EP\x02\u02F8\u02F9\x07w\x02\x02\u02F9\u02FA\x05\x84C\x02\u02FA\u02FB" + + "\x07x\x02\x02\u02FB\x7F\x03\x02\x02\x02\u02FC\u0307\x07\xCB\x02\x02\u02FD" + + "\u0307\x07\xDF\x02\x02\u02FE\u0307\x07\xE1\x02\x02\u02FF\u0307\x07`\x02" + + "\x02\u0300\u0307\x07a\x02\x02\u0301\u0307\x07b\x02\x02\u0302\u0307\x07" + + "c\x02\x02\u0303\u0307\x07d\x02\x02\u0304\u0307\x07e\x02\x02\u0305\u0307" + + "\x07f\x02\x02\u0306\u02FC\x03\x02\x02\x02\u0306\u02FD\x03\x02\x02\x02" + + "\u0306\u02FE\x03\x02\x02\x02\u0306\u02FF\x03\x02\x02\x02\u0306\u0300\x03" + + "\x02\x02\x02\u0306\u0301\x03\x02\x02\x02\u0306\u0302\x03\x02\x02\x02\u0306" + + "\u0303\x03\x02\x02\x02\u0306\u0304\x03\x02\x02\x02\u0306\u0305\x03\x02" + + "\x02\x02\u0307\x81\x03\x02\x02\x02\u0308\u030E\x05\x96L\x02\u0309\u030E" + + "\x05\x9AN\x02\u030A\u030E\x05\xA2R\x02\u030B\u030E\x05\x9EP\x02\u030C" + + "\u030E\x05\xA0Q\x02\u030D\u0308\x03\x02\x02\x02\u030D\u0309\x03\x02\x02" + + "\x02\u030D\u030A\x03\x02\x02\x02\u030D\u030B\x03\x02\x02\x02\u030D\u030C" + + "\x03\x02\x02\x02\u030E\x83\x03\x02\x02\x02\u030F\u0314\x05\x86D\x02\u0310" + + "\u0311\x07h\x02\x02\u0311\u0313\x05\x86D\x02\u0312\u0310\x03\x02\x02\x02" + + "\u0313\u0316\x03\x02\x02\x02\u0314\u0312\x03\x02\x02\x02\u0314\u0315\x03" + + "\x02\x02\x02\u0315\u0318\x03\x02\x02\x02\u0316\u0314\x03\x02\x02\x02\u0317" + + "\u030F\x03\x02\x02\x02\u0317\u0318\x03\x02\x02\x02\u0318\x85\x03\x02\x02" + + "\x02\u0319\u031A\x05\xCAf\x02\u031A\u031B\x07j\x02\x02\u031B\u031D\x03" + + "\x02\x02\x02\u031C\u0319\x03\x02\x02\x02\u031C\u031D\x03\x02\x02\x02\u031D" + + "\u031E\x03\x02\x02\x02\u031E\u031F\x05\\/\x02\u031F\x87\x03\x02\x02\x02" + + "\u0320\u0321\x05\x8AF\x02\u0321\u0322\x07j\x02\x02\u0322\u0323\x05\x94" + + "K\x02\u0323\x89\x03\x02\x02\x02\u0324\u0325\t\x06\x02\x02\u0325\x8B\x03" + + "\x02\x02\x02\u0326\u032F\x05\x90I\x02\u0327\u0328\x05\x90I\x02\u0328\u0329" + + "\x05\x8EH\x02\u0329\u032F\x03\x02\x02\x02\u032A\u032B\x05\x90I\x02\u032B" + + "\u032C\x07\x80\x02\x02\u032C\u032D\x05\x8EH\x02\u032D\u032F\x03\x02\x02" + + "\x02\u032E\u0326\x03\x02\x02\x02\u032E\u0327\x03\x02\x02\x02\u032E\u032A" + + "\x03\x02\x02\x02\u032F\x8D\x03\x02\x02\x02\u0330\u0333\x05\xB2Z\x02\u0331" + + "\u0333\x05\xB4[\x02\u0332\u0330\x03\x02\x02\x02\u0332\u0331\x03\x02\x02" + + "\x02\u0333\x8F\x03\x02\x02\x02\u0334\u0337\x05\xC6d\x02\u0335\u0337\x05" + + "\xB0Y\x02\u0336\u0334\x03\x02\x02\x02\u0336\u0335\x03\x02\x02\x02\u0337" + + "\x91\x03\x02\x02\x02\u0338\u0339\x05\x94K\x02\u0339\x93\x03\x02\x02\x02" + + "\u033A\u033D\x05\xC6d\x02\u033B\u033D\x05\xACW\x02\u033C\u033A\x03\x02" + + "\x02\x02\u033C\u033B\x03\x02\x02\x02\u033D\x95\x03\x02\x02\x02\u033E\u0355" + + "\x07\xA6\x02\x02\u033F\u0355\x07\xA7\x02\x02\u0340\u0355\x07\xA8\x02\x02" + + "\u0341\u0355\x07\xA9\x02\x02\u0342\u0355\x07\xAA\x02\x02\u0343\u0355\x07" + + "\xAB\x02\x02\u0344\u0355\x07\xAC\x02\x02\u0345\u0355\x07\xAD\x02\x02\u0346" + + "\u0355\x07\xAE\x02\x02\u0347\u0355\x07\xAF\x02\x02\u0348\u0355\x07\xB0" + + "\x02\x02\u0349\u0355\x07\xB1\x02\x02\u034A\u0355\x07\xB2\x02\x02\u034B" + + "\u0355\x07\xB3\x02\x02\u034C\u0355\x07\xB4\x02\x02\u034D\u0355\x07\xB5" + + "\x02\x02\u034E\u0355\x07\xB6\x02\x02\u034F\u0355\x07\xB7\x02\x02\u0350" + + "\u0355\x07\xB8\x02\x02\u0351\u0355\x07\xB9\x02\x02\u0352\u0355\x07\xBA" + + "\x02\x02\u0353\u0355\x05\x98M\x02\u0354\u033E\x03\x02\x02\x02\u0354\u033F" + + "\x03\x02\x02\x02\u0354\u0340\x03\x02\x02\x02\u0354\u0341\x03\x02\x02\x02" + + "\u0354\u0342\x03\x02\x02\x02\u0354\u0343\x03\x02\x02\x02\u0354\u0344\x03" + + "\x02\x02\x02\u0354\u0345\x03\x02\x02\x02\u0354\u0346\x03\x02\x02\x02\u0354" + + "\u0347\x03\x02\x02\x02\u0354\u0348\x03\x02\x02\x02\u0354\u0349\x03\x02" + + "\x02\x02\u0354\u034A\x03\x02\x02\x02\u0354\u034B\x03\x02\x02\x02\u0354" + + "\u034C\x03\x02\x02\x02\u0354\u034D\x03\x02\x02\x02\u0354\u034E\x03\x02" + + "\x02\x02\u0354\u034F\x03\x02\x02\x02\u0354\u0350\x03\x02\x02\x02\u0354" + + "\u0351\x03\x02\x02\x02\u0354\u0352\x03\x02\x02\x02\u0354\u0353\x03\x02" + + "\x02\x02\u0355\x97\x03\x02\x02\x02\u0356\u0357\t\x07\x02\x02\u0357\x99" + + "\x03\x02\x02\x02\u0358\u0359\t\b\x02\x02\u0359\x9B\x03\x02\x02\x02\u035A" + + "\u035B\t\t\x02\x02\u035B\x9D\x03\x02\x02\x02\u035C\u035D\t\n\x02\x02\u035D" + + "\x9F\x03\x02\x02\x02\u035E\u035F\x07\xFF\x02\x02\u035F\xA1\x03\x02\x02" + + "\x02\u0360\u0361\t\v\x02\x02\u0361\xA3\x03\x02\x02\x02\u0362\u0363\t\f" + + "\x02\x02\u0363\xA5\x03\x02\x02\x02\u0364\u0365\t\r\x02\x02\u0365\xA7\x03" + + "\x02\x02\x02\u0366\u0367\t\x0E\x02\x02\u0367\xA9\x03\x02\x02\x02\u0368" + + "\u0369\t\x0F\x02\x02\u0369\xAB\x03\x02\x02\x02\u036A\u0371\x05\xAEX\x02" + + "\u036B\u0371\x05\xB0Y\x02\u036C\u0371\x05\xB2Z\x02\u036D\u0371\x05\xB4" + + "[\x02\u036E\u0371\x05\xB6\\\x02\u036F\u0371\x05\xB8]\x02\u0370\u036A\x03" + + "\x02\x02\x02\u0370\u036B\x03\x02\x02\x02\u0370\u036C\x03\x02\x02\x02\u0370" + + "\u036D\x03\x02\x02\x02\u0370\u036E\x03\x02\x02\x02\u0370\u036F\x03\x02" + + "\x02\x02\u0371\xAD\x03\x02\x02\x02\u0372\u0373\x07F\x02\x02\u0373\u0374" + + "\x05\\/\x02\u0374\u0375\x05\xC0a\x02\u0375\xAF\x03\x02\x02\x02\u0376\u0377" + + "\t\x10\x02\x02\u0377\xB1\x03\x02\x02\x02\u0378\u037A\t\x02\x02\x02\u0379" + + "\u0378\x03\x02\x02\x02\u0379\u037A\x03\x02\x02\x02\u037A\u037B\x03\x02" + + "\x02\x02\u037B\u037C\x07\u012F\x02\x02\u037C\xB3\x03\x02\x02\x02\u037D" + + "\u037F\t\x02\x02\x02\u037E\u037D\x03\x02\x02\x02\u037E\u037F\x03\x02\x02" + + "\x02\u037F\u0380\x03\x02\x02\x02\u0380\u0381\x07\u0130\x02\x02\u0381\xB5" + + "\x03\x02\x02\x02\u0382\u0383\t\x11\x02\x02\u0383\xB7\x03\x02\x02\x02\u0384" + + "\u0388\x05\xBA^\x02\u0385\u0388\x05\xBC_\x02\u0386\u0388\x05\xBE`\x02" + + "\u0387\u0384\x03\x02\x02\x02\u0387\u0385\x03\x02\x02\x02\u0387\u0386\x03" + + "\x02\x02\x02\u0388\xB9\x03\x02\x02\x02\u0389\u038A\x07\xCB\x02\x02\u038A" + + "\u038B\x05\xB0Y\x02\u038B\xBB\x03\x02\x02\x02\u038C\u038D\x07\xDF\x02" + + "\x02\u038D\u038E\x05\xB0Y\x02\u038E\xBD\x03\x02\x02\x02\u038F\u0390\x07" + + "\xE1\x02\x02\u0390\u0391\x05\xB0Y\x02\u0391\xBF\x03\x02\x02\x02\u0392" + + "\u0393\t\x12\x02\x02\u0393\xC1\x03\x02\x02\x02\u0394\u0395\t\x13\x02\x02" + + "\u0395\xC3\x03\x02\x02\x02\u0396\u0397\x07w\x02\x02\u0397\u039C\x05\xAC" + + "W\x02\u0398\u0399\x07h\x02\x02\u0399\u039B\x05\xACW\x02\u039A\u0398\x03" + + "\x02\x02\x02\u039B\u039E\x03\x02\x02\x02\u039C\u039A\x03\x02\x02\x02\u039C" + + "\u039D\x03\x02\x02\x02\u039D\u039F\x03\x02\x02\x02\u039E\u039C\x03\x02" + + "\x02\x02\u039F\u03A0\x07x\x02\x02\u03A0\xC5\x03\x02\x02\x02\u03A1\u03A6" + + "\x05\xCAf\x02\u03A2\u03A3\x07i\x02\x02\u03A3\u03A5\x05\xCAf\x02\u03A4" + + "\u03A2\x03\x02\x02\x02\u03A5\u03A8\x03\x02\x02\x02\u03A6\u03A4\x03\x02" + + "\x02\x02\u03A6\u03A7\x03\x02\x02\x02\u03A7\xC7\x03\x02\x02\x02\u03A8\u03A6" + + "\x03\x02\x02\x02\u03A9\u03AE\x05\xCCg\x02\u03AA\u03AB\x07i\x02\x02\u03AB" + + "\u03AD\x05\xCCg\x02\u03AC\u03AA\x03\x02\x02\x02\u03AD\u03B0\x03\x02\x02" + + "\x02\u03AE\u03AC\x03\x02\x02\x02\u03AE\u03AF\x03\x02\x02\x02\u03AF\xC9" + + "\x03\x02\x02\x02\u03B0\u03AE\x03\x02\x02\x02\u03B1\u03B3\x07i\x02\x02" + + "\u03B2\u03B1\x03\x02\x02\x02\u03B2\u03B3\x03\x02\x02\x02\u03B3\u03B4\x03" + + "\x02\x02\x02\u03B4\u03BC\x07\u012E\x02\x02\u03B5\u03B6\x07}\x02\x02\u03B6" + + "\u03B7\x05\xCAf\x02\u03B7\u03B8\x07}\x02\x02\u03B8\u03BC\x03\x02\x02\x02" + + "\u03B9\u03BC\x07\u0134\x02\x02\u03BA\u03BC\x05\xCEh\x02\u03BB\u03B2\x03" + + "\x02\x02\x02\u03BB\u03B5\x03\x02\x02\x02\u03BB\u03B9\x03\x02\x02\x02\u03BB" + + "\u03BA\x03\x02\x02\x02\u03BC\xCB\x03\x02\x02\x02\u03BD\u03C2\x05\xCAf" + + "\x02\u03BE\u03BF\x07t\x02\x02\u03BF\u03C1\x05\xCAf\x02\u03C0\u03BE\x03" + + "\x02\x02\x02\u03C1\u03C4\x03\x02\x02\x02\u03C2\u03C0\x03\x02\x02\x02\u03C2" + + "\u03C3\x03\x02\x02\x02\u03C3\u03C6\x03\x02\x02\x02\u03C4\u03C2\x03\x02" + + "\x02\x02\u03C5\u03C7\x07t\x02\x02\u03C6\u03C5\x03\x02\x02\x02\u03C6\u03C7" + + "\x03\x02\x02\x02\u03C7\u03D5\x03\x02\x02\x02\u03C8\u03C9\x07{\x02\x02" + + "\u03C9\u03CA\x05\xCCg\x02\u03CA\u03CB\x07{\x02\x02\u03CB\u03D5\x03\x02" + + "\x02\x02\u03CC\u03CD\x07|\x02\x02\u03CD\u03CE\x05\xCCg\x02\u03CE\u03CF" + + "\x07|\x02\x02\u03CF\u03D5\x03\x02\x02\x02\u03D0\u03D1\x07}\x02\x02\u03D1" + + "\u03D2\x05\xCCg\x02\u03D2\u03D3\x07}\x02\x02\u03D3\u03D5\x03\x02\x02\x02" + + "\u03D4\u03BD\x03\x02\x02\x02\u03D4\u03C8\x03\x02\x02\x02\u03D4\u03CC\x03" + + "\x02\x02\x02\u03D4\u03D0\x03\x02\x02\x02\u03D5\xCD\x03\x02\x02\x02\u03D6" + + "\u03E4\x07 \x02\x02\u03D7\u03E4\x05P)\x02\u03D8\u03E4\x07\xE1\x02\x02" + + "\u03D9\u03E4\x07\xCB\x02\x02\u03DA\u03E4\x07\xDF\x02\x02\u03DB\u03E4\x07" + + "\x96\x02\x02\u03DC\u03E4\x07\x97\x02\x02\u03DD\u03E4\x05\xC2b\x02\u03DE" + + "\u03E4\x07\u0126\x02\x02\u03DF\u03E4\x05\x9CO\x02\u03E0\u03E4\x05\x9A" + + "N\x02\u03E1\u03E4\x05\xA2R\x02\u03E2\u03E4\x05\x96L\x02\u03E3\u03D6\x03" + + "\x02\x02\x02\u03E3\u03D7\x03\x02\x02\x02\u03E3\u03D8\x03\x02\x02\x02\u03E3" + + "\u03D9\x03\x02\x02\x02\u03E3\u03DA\x03\x02\x02\x02\u03E3\u03DB\x03\x02" + + "\x02\x02\u03E3\u03DC\x03\x02\x02\x02\u03E3\u03DD\x03\x02\x02\x02\u03E3" + + "\u03DE\x03\x02\x02\x02\u03E3\u03DF\x03\x02\x02\x02\u03E3\u03E0\x03\x02" + + "\x02\x02\u03E3\u03E1\x03\x02\x02\x02\u03E3\u03E2\x03\x02\x02\x02\u03E4" + + "\xCF\x03\x02\x02\x02U\xD1\xDA\xE0\xF2\xF5\xF9\xFF\u0104\u0111\u011B\u0122" + + "\u0127\u012C\u0133\u0137\u013C\u0140\u0146\u014B\u0156\u015B\u015F\u0163" + + "\u0167\u016C\u017A\u0185\u018D\u0199\u019F\u01C6\u01CC\u01DF\u01E6\u01F9" + + "\u01FE\u0206\u020F\u0219\u022A\u0233\u0242\u024A\u0251\u0257\u0259\u0264" + + "\u026E\u0276\u027E\u0283\u028B\u0296\u02A3\u02AD\u02B4\u02C0\u02C8\u02CC" + + "\u02E5\u0306\u030D\u0314\u0317\u031C\u032E\u0332\u0336\u033C\u0354\u0370" + + "\u0379\u037E\u0387\u039C\u03A6\u03AE\u03B2\u03BB\u03C2\u03C6\u03D4\u03E3"; + public static readonly _serializedATN: string = Utils.join( + [ + OpenSearchPPLParser._serializedATNSegment0, + OpenSearchPPLParser._serializedATNSegment1, + ], + "", + ); + public static __ATN: ATN; + public static get _ATN(): ATN { + if (!OpenSearchPPLParser.__ATN) { + OpenSearchPPLParser.__ATN = new ATNDeserializer().deserialize(Utils.toCharArray(OpenSearchPPLParser._serializedATN)); + } + + return OpenSearchPPLParser.__ATN; + } + +} + +export class RootContext extends ParserRuleContext { + public EOF(): TerminalNode { return this.getToken(OpenSearchPPLParser.EOF, 0); } + public pplStatement(): PplStatementContext | undefined { + return this.tryGetRuleContext(0, PplStatementContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_root; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterRoot) { + listener.enterRoot(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitRoot) { + listener.exitRoot(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitRoot) { + return visitor.visitRoot(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PplStatementContext extends ParserRuleContext { + public pplCommands(): PplCommandsContext { + return this.getRuleContext(0, PplCommandsContext); + } + public PIPE(): TerminalNode[]; + public PIPE(i: number): TerminalNode; + public PIPE(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.PIPE); + } else { + return this.getToken(OpenSearchPPLParser.PIPE, i); + } + } + public commands(): CommandsContext[]; + public commands(i: number): CommandsContext; + public commands(i?: number): CommandsContext | CommandsContext[] { + if (i === undefined) { + return this.getRuleContexts(CommandsContext); + } else { + return this.getRuleContext(i, CommandsContext); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_pplStatement; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterPplStatement) { + listener.enterPplStatement(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitPplStatement) { + listener.exitPplStatement(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitPplStatement) { + return visitor.visitPplStatement(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PplCommandsContext extends ParserRuleContext { + public searchCommand(): SearchCommandContext | undefined { + return this.tryGetRuleContext(0, SearchCommandContext); + } + public describeCommand(): DescribeCommandContext | undefined { + return this.tryGetRuleContext(0, DescribeCommandContext); + } + public showCatalogsCommand(): ShowCatalogsCommandContext | undefined { + return this.tryGetRuleContext(0, ShowCatalogsCommandContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_pplCommands; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterPplCommands) { + listener.enterPplCommands(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitPplCommands) { + listener.exitPplCommands(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitPplCommands) { + return visitor.visitPplCommands(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class CommandsContext extends ParserRuleContext { + public whereCommand(): WhereCommandContext | undefined { + return this.tryGetRuleContext(0, WhereCommandContext); + } + public fieldsCommand(): FieldsCommandContext | undefined { + return this.tryGetRuleContext(0, FieldsCommandContext); + } + public renameCommand(): RenameCommandContext | undefined { + return this.tryGetRuleContext(0, RenameCommandContext); + } + public statsCommand(): StatsCommandContext | undefined { + return this.tryGetRuleContext(0, StatsCommandContext); + } + public dedupCommand(): DedupCommandContext | undefined { + return this.tryGetRuleContext(0, DedupCommandContext); + } + public sortCommand(): SortCommandContext | undefined { + return this.tryGetRuleContext(0, SortCommandContext); + } + public evalCommand(): EvalCommandContext | undefined { + return this.tryGetRuleContext(0, EvalCommandContext); + } + public headCommand(): HeadCommandContext | undefined { + return this.tryGetRuleContext(0, HeadCommandContext); + } + public topCommand(): TopCommandContext | undefined { + return this.tryGetRuleContext(0, TopCommandContext); + } + public rareCommand(): RareCommandContext | undefined { + return this.tryGetRuleContext(0, RareCommandContext); + } + public grokCommand(): GrokCommandContext | undefined { + return this.tryGetRuleContext(0, GrokCommandContext); + } + public parseCommand(): ParseCommandContext | undefined { + return this.tryGetRuleContext(0, ParseCommandContext); + } + public patternsCommand(): PatternsCommandContext | undefined { + return this.tryGetRuleContext(0, PatternsCommandContext); + } + public kmeansCommand(): KmeansCommandContext | undefined { + return this.tryGetRuleContext(0, KmeansCommandContext); + } + public adCommand(): AdCommandContext | undefined { + return this.tryGetRuleContext(0, AdCommandContext); + } + public mlCommand(): MlCommandContext | undefined { + return this.tryGetRuleContext(0, MlCommandContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_commands; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterCommands) { + listener.enterCommands(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitCommands) { + listener.exitCommands(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitCommands) { + return visitor.visitCommands(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SearchCommandContext extends ParserRuleContext { + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_searchCommand; } + public copyFrom(ctx: SearchCommandContext): void { + super.copyFrom(ctx); + } +} +export class SearchFromContext extends SearchCommandContext { + public fromClause(): FromClauseContext { + return this.getRuleContext(0, FromClauseContext); + } + public SEARCH(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.SEARCH, 0); } + constructor(ctx: SearchCommandContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterSearchFrom) { + listener.enterSearchFrom(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitSearchFrom) { + listener.exitSearchFrom(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitSearchFrom) { + return visitor.visitSearchFrom(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SearchFromFilterContext extends SearchCommandContext { + public fromClause(): FromClauseContext { + return this.getRuleContext(0, FromClauseContext); + } + public logicalExpression(): LogicalExpressionContext { + return this.getRuleContext(0, LogicalExpressionContext); + } + public SEARCH(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.SEARCH, 0); } + constructor(ctx: SearchCommandContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterSearchFromFilter) { + listener.enterSearchFromFilter(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitSearchFromFilter) { + listener.exitSearchFromFilter(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitSearchFromFilter) { + return visitor.visitSearchFromFilter(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SearchFilterFromContext extends SearchCommandContext { + public logicalExpression(): LogicalExpressionContext { + return this.getRuleContext(0, LogicalExpressionContext); + } + public fromClause(): FromClauseContext { + return this.getRuleContext(0, FromClauseContext); + } + public SEARCH(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.SEARCH, 0); } + constructor(ctx: SearchCommandContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterSearchFilterFrom) { + listener.enterSearchFilterFrom(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitSearchFilterFrom) { + listener.exitSearchFilterFrom(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitSearchFilterFrom) { + return visitor.visitSearchFilterFrom(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DescribeCommandContext extends ParserRuleContext { + public DESCRIBE(): TerminalNode { return this.getToken(OpenSearchPPLParser.DESCRIBE, 0); } + public tableSourceClause(): TableSourceClauseContext { + return this.getRuleContext(0, TableSourceClauseContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_describeCommand; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterDescribeCommand) { + listener.enterDescribeCommand(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitDescribeCommand) { + listener.exitDescribeCommand(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitDescribeCommand) { + return visitor.visitDescribeCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ShowCatalogsCommandContext extends ParserRuleContext { + public SHOW(): TerminalNode { return this.getToken(OpenSearchPPLParser.SHOW, 0); } + public CATALOGS(): TerminalNode { return this.getToken(OpenSearchPPLParser.CATALOGS, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_showCatalogsCommand; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterShowCatalogsCommand) { + listener.enterShowCatalogsCommand(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitShowCatalogsCommand) { + listener.exitShowCatalogsCommand(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitShowCatalogsCommand) { + return visitor.visitShowCatalogsCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class WhereCommandContext extends ParserRuleContext { + public WHERE(): TerminalNode { return this.getToken(OpenSearchPPLParser.WHERE, 0); } + public logicalExpression(): LogicalExpressionContext { + return this.getRuleContext(0, LogicalExpressionContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_whereCommand; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterWhereCommand) { + listener.enterWhereCommand(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitWhereCommand) { + listener.exitWhereCommand(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitWhereCommand) { + return visitor.visitWhereCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FieldsCommandContext extends ParserRuleContext { + public FIELDS(): TerminalNode { return this.getToken(OpenSearchPPLParser.FIELDS, 0); } + public fieldList(): FieldListContext { + return this.getRuleContext(0, FieldListContext); + } + public PLUS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.PLUS, 0); } + public MINUS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MINUS, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_fieldsCommand; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterFieldsCommand) { + listener.enterFieldsCommand(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitFieldsCommand) { + listener.exitFieldsCommand(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitFieldsCommand) { + return visitor.visitFieldsCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RenameCommandContext extends ParserRuleContext { + public RENAME(): TerminalNode { return this.getToken(OpenSearchPPLParser.RENAME, 0); } + public renameClasue(): RenameClasueContext[]; + public renameClasue(i: number): RenameClasueContext; + public renameClasue(i?: number): RenameClasueContext | RenameClasueContext[] { + if (i === undefined) { + return this.getRuleContexts(RenameClasueContext); + } else { + return this.getRuleContext(i, RenameClasueContext); + } + } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_renameCommand; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterRenameCommand) { + listener.enterRenameCommand(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitRenameCommand) { + listener.exitRenameCommand(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitRenameCommand) { + return visitor.visitRenameCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class StatsCommandContext extends ParserRuleContext { + public _partitions!: IntegerLiteralContext; + public _allnum!: BooleanLiteralContext; + public _delim!: StringLiteralContext; + public _dedupsplit!: BooleanLiteralContext; + public STATS(): TerminalNode { return this.getToken(OpenSearchPPLParser.STATS, 0); } + public statsAggTerm(): StatsAggTermContext[]; + public statsAggTerm(i: number): StatsAggTermContext; + public statsAggTerm(i?: number): StatsAggTermContext | StatsAggTermContext[] { + if (i === undefined) { + return this.getRuleContexts(StatsAggTermContext); + } else { + return this.getRuleContext(i, StatsAggTermContext); + } + } + public PARTITIONS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.PARTITIONS, 0); } + public EQUAL(): TerminalNode[]; + public EQUAL(i: number): TerminalNode; + public EQUAL(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.EQUAL); + } else { + return this.getToken(OpenSearchPPLParser.EQUAL, i); + } + } + public ALLNUM(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.ALLNUM, 0); } + public DELIM(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DELIM, 0); } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } + } + public statsByClause(): StatsByClauseContext | undefined { + return this.tryGetRuleContext(0, StatsByClauseContext); + } + public DEDUP_SPLITVALUES(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DEDUP_SPLITVALUES, 0); } + public integerLiteral(): IntegerLiteralContext | undefined { + return this.tryGetRuleContext(0, IntegerLiteralContext); + } + public booleanLiteral(): BooleanLiteralContext[]; + public booleanLiteral(i: number): BooleanLiteralContext; + public booleanLiteral(i?: number): BooleanLiteralContext | BooleanLiteralContext[] { + if (i === undefined) { + return this.getRuleContexts(BooleanLiteralContext); + } else { + return this.getRuleContext(i, BooleanLiteralContext); + } + } + public stringLiteral(): StringLiteralContext | undefined { + return this.tryGetRuleContext(0, StringLiteralContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_statsCommand; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterStatsCommand) { + listener.enterStatsCommand(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitStatsCommand) { + listener.exitStatsCommand(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitStatsCommand) { + return visitor.visitStatsCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DedupCommandContext extends ParserRuleContext { + public _number!: IntegerLiteralContext; + public _keepempty!: BooleanLiteralContext; + public _consecutive!: BooleanLiteralContext; + public DEDUP(): TerminalNode { return this.getToken(OpenSearchPPLParser.DEDUP, 0); } + public fieldList(): FieldListContext { + return this.getRuleContext(0, FieldListContext); + } + public KEEPEMPTY(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.KEEPEMPTY, 0); } + public EQUAL(): TerminalNode[]; + public EQUAL(i: number): TerminalNode; + public EQUAL(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.EQUAL); + } else { + return this.getToken(OpenSearchPPLParser.EQUAL, i); + } + } + public CONSECUTIVE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.CONSECUTIVE, 0); } + public integerLiteral(): IntegerLiteralContext | undefined { + return this.tryGetRuleContext(0, IntegerLiteralContext); + } + public booleanLiteral(): BooleanLiteralContext[]; + public booleanLiteral(i: number): BooleanLiteralContext; + public booleanLiteral(i?: number): BooleanLiteralContext | BooleanLiteralContext[] { + if (i === undefined) { + return this.getRuleContexts(BooleanLiteralContext); + } else { + return this.getRuleContext(i, BooleanLiteralContext); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_dedupCommand; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterDedupCommand) { + listener.enterDedupCommand(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitDedupCommand) { + listener.exitDedupCommand(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitDedupCommand) { + return visitor.visitDedupCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SortCommandContext extends ParserRuleContext { + public SORT(): TerminalNode { return this.getToken(OpenSearchPPLParser.SORT, 0); } + public sortbyClause(): SortbyClauseContext { + return this.getRuleContext(0, SortbyClauseContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_sortCommand; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterSortCommand) { + listener.enterSortCommand(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitSortCommand) { + listener.exitSortCommand(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitSortCommand) { + return visitor.visitSortCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class EvalCommandContext extends ParserRuleContext { + public EVAL(): TerminalNode { return this.getToken(OpenSearchPPLParser.EVAL, 0); } + public evalClause(): EvalClauseContext[]; + public evalClause(i: number): EvalClauseContext; + public evalClause(i?: number): EvalClauseContext | EvalClauseContext[] { + if (i === undefined) { + return this.getRuleContexts(EvalClauseContext); + } else { + return this.getRuleContext(i, EvalClauseContext); + } + } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_evalCommand; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterEvalCommand) { + listener.enterEvalCommand(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitEvalCommand) { + listener.exitEvalCommand(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitEvalCommand) { + return visitor.visitEvalCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class HeadCommandContext extends ParserRuleContext { + public _number!: IntegerLiteralContext; + public _from!: IntegerLiteralContext; + public HEAD(): TerminalNode { return this.getToken(OpenSearchPPLParser.HEAD, 0); } + public FROM(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.FROM, 0); } + public integerLiteral(): IntegerLiteralContext[]; + public integerLiteral(i: number): IntegerLiteralContext; + public integerLiteral(i?: number): IntegerLiteralContext | IntegerLiteralContext[] { + if (i === undefined) { + return this.getRuleContexts(IntegerLiteralContext); + } else { + return this.getRuleContext(i, IntegerLiteralContext); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_headCommand; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterHeadCommand) { + listener.enterHeadCommand(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitHeadCommand) { + listener.exitHeadCommand(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitHeadCommand) { + return visitor.visitHeadCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TopCommandContext extends ParserRuleContext { + public _number!: IntegerLiteralContext; + public TOP(): TerminalNode { return this.getToken(OpenSearchPPLParser.TOP, 0); } + public fieldList(): FieldListContext { + return this.getRuleContext(0, FieldListContext); + } + public byClause(): ByClauseContext | undefined { + return this.tryGetRuleContext(0, ByClauseContext); + } + public integerLiteral(): IntegerLiteralContext | undefined { + return this.tryGetRuleContext(0, IntegerLiteralContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_topCommand; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterTopCommand) { + listener.enterTopCommand(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitTopCommand) { + listener.exitTopCommand(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitTopCommand) { + return visitor.visitTopCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RareCommandContext extends ParserRuleContext { + public RARE(): TerminalNode { return this.getToken(OpenSearchPPLParser.RARE, 0); } + public fieldList(): FieldListContext { + return this.getRuleContext(0, FieldListContext); + } + public byClause(): ByClauseContext | undefined { + return this.tryGetRuleContext(0, ByClauseContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_rareCommand; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterRareCommand) { + listener.enterRareCommand(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitRareCommand) { + listener.exitRareCommand(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitRareCommand) { + return visitor.visitRareCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class GrokCommandContext extends ParserRuleContext { + public _source_field!: ExpressionContext; + public _pattern!: StringLiteralContext; + public GROK(): TerminalNode { return this.getToken(OpenSearchPPLParser.GROK, 0); } + public expression(): ExpressionContext | undefined { + return this.tryGetRuleContext(0, ExpressionContext); + } + public stringLiteral(): StringLiteralContext | undefined { + return this.tryGetRuleContext(0, StringLiteralContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_grokCommand; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterGrokCommand) { + listener.enterGrokCommand(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitGrokCommand) { + listener.exitGrokCommand(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitGrokCommand) { + return visitor.visitGrokCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ParseCommandContext extends ParserRuleContext { + public _source_field!: ExpressionContext; + public _pattern!: StringLiteralContext; + public PARSE(): TerminalNode { return this.getToken(OpenSearchPPLParser.PARSE, 0); } + public expression(): ExpressionContext | undefined { + return this.tryGetRuleContext(0, ExpressionContext); + } + public stringLiteral(): StringLiteralContext | undefined { + return this.tryGetRuleContext(0, StringLiteralContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_parseCommand; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterParseCommand) { + listener.enterParseCommand(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitParseCommand) { + listener.exitParseCommand(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitParseCommand) { + return visitor.visitParseCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PatternsCommandContext extends ParserRuleContext { + public _source_field!: ExpressionContext; + public PATTERNS(): TerminalNode { return this.getToken(OpenSearchPPLParser.PATTERNS, 0); } + public patternsParameter(): PatternsParameterContext[]; + public patternsParameter(i: number): PatternsParameterContext; + public patternsParameter(i?: number): PatternsParameterContext | PatternsParameterContext[] { + if (i === undefined) { + return this.getRuleContexts(PatternsParameterContext); + } else { + return this.getRuleContext(i, PatternsParameterContext); + } + } + public expression(): ExpressionContext | undefined { + return this.tryGetRuleContext(0, ExpressionContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_patternsCommand; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterPatternsCommand) { + listener.enterPatternsCommand(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitPatternsCommand) { + listener.exitPatternsCommand(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitPatternsCommand) { + return visitor.visitPatternsCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PatternsParameterContext extends ParserRuleContext { + public _new_field!: StringLiteralContext; + public _pattern!: StringLiteralContext; + public NEW_FIELD(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.NEW_FIELD, 0); } + public EQUAL(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.EQUAL, 0); } + public stringLiteral(): StringLiteralContext | undefined { + return this.tryGetRuleContext(0, StringLiteralContext); + } + public PATTERN(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.PATTERN, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_patternsParameter; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterPatternsParameter) { + listener.enterPatternsParameter(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitPatternsParameter) { + listener.exitPatternsParameter(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitPatternsParameter) { + return visitor.visitPatternsParameter(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PatternsMethodContext extends ParserRuleContext { + public PUNCT(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.PUNCT, 0); } + public REGEX(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.REGEX, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_patternsMethod; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterPatternsMethod) { + listener.enterPatternsMethod(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitPatternsMethod) { + listener.exitPatternsMethod(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitPatternsMethod) { + return visitor.visitPatternsMethod(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class KmeansCommandContext extends ParserRuleContext { + public KMEANS(): TerminalNode { return this.getToken(OpenSearchPPLParser.KMEANS, 0); } + public kmeansParameter(): KmeansParameterContext[]; + public kmeansParameter(i: number): KmeansParameterContext; + public kmeansParameter(i?: number): KmeansParameterContext | KmeansParameterContext[] { + if (i === undefined) { + return this.getRuleContexts(KmeansParameterContext); + } else { + return this.getRuleContext(i, KmeansParameterContext); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_kmeansCommand; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterKmeansCommand) { + listener.enterKmeansCommand(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitKmeansCommand) { + listener.exitKmeansCommand(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitKmeansCommand) { + return visitor.visitKmeansCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class KmeansParameterContext extends ParserRuleContext { + public _centroids!: IntegerLiteralContext; + public _iterations!: IntegerLiteralContext; + public _distance_type!: StringLiteralContext; + public CENTROIDS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.CENTROIDS, 0); } + public EQUAL(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.EQUAL, 0); } + public integerLiteral(): IntegerLiteralContext | undefined { + return this.tryGetRuleContext(0, IntegerLiteralContext); + } + public ITERATIONS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.ITERATIONS, 0); } + public DISTANCE_TYPE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DISTANCE_TYPE, 0); } + public stringLiteral(): StringLiteralContext | undefined { + return this.tryGetRuleContext(0, StringLiteralContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_kmeansParameter; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterKmeansParameter) { + listener.enterKmeansParameter(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitKmeansParameter) { + listener.exitKmeansParameter(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitKmeansParameter) { + return visitor.visitKmeansParameter(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class AdCommandContext extends ParserRuleContext { + public AD(): TerminalNode { return this.getToken(OpenSearchPPLParser.AD, 0); } + public adParameter(): AdParameterContext[]; + public adParameter(i: number): AdParameterContext; + public adParameter(i?: number): AdParameterContext | AdParameterContext[] { + if (i === undefined) { + return this.getRuleContexts(AdParameterContext); + } else { + return this.getRuleContext(i, AdParameterContext); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_adCommand; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterAdCommand) { + listener.enterAdCommand(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitAdCommand) { + listener.exitAdCommand(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitAdCommand) { + return visitor.visitAdCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class AdParameterContext extends ParserRuleContext { + public _number_of_trees!: IntegerLiteralContext; + public _shingle_size!: IntegerLiteralContext; + public _sample_size!: IntegerLiteralContext; + public _output_after!: IntegerLiteralContext; + public _time_decay!: DecimalLiteralContext; + public _anomaly_rate!: DecimalLiteralContext; + public _category_field!: StringLiteralContext; + public _time_field!: StringLiteralContext; + public _date_format!: StringLiteralContext; + public _time_zone!: StringLiteralContext; + public _training_data_size!: IntegerLiteralContext; + public _anomaly_score_threshold!: DecimalLiteralContext; + public NUMBER_OF_TREES(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.NUMBER_OF_TREES, 0); } + public EQUAL(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.EQUAL, 0); } + public integerLiteral(): IntegerLiteralContext | undefined { + return this.tryGetRuleContext(0, IntegerLiteralContext); + } + public SHINGLE_SIZE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.SHINGLE_SIZE, 0); } + public SAMPLE_SIZE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.SAMPLE_SIZE, 0); } + public OUTPUT_AFTER(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.OUTPUT_AFTER, 0); } + public TIME_DECAY(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.TIME_DECAY, 0); } + public decimalLiteral(): DecimalLiteralContext | undefined { + return this.tryGetRuleContext(0, DecimalLiteralContext); + } + public ANOMALY_RATE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.ANOMALY_RATE, 0); } + public CATEGORY_FIELD(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.CATEGORY_FIELD, 0); } + public stringLiteral(): StringLiteralContext | undefined { + return this.tryGetRuleContext(0, StringLiteralContext); + } + public TIME_FIELD(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.TIME_FIELD, 0); } + public DATE_FORMAT(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DATE_FORMAT, 0); } + public TIME_ZONE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.TIME_ZONE, 0); } + public TRAINING_DATA_SIZE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.TRAINING_DATA_SIZE, 0); } + public ANOMALY_SCORE_THRESHOLD(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_adParameter; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterAdParameter) { + listener.enterAdParameter(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitAdParameter) { + listener.exitAdParameter(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitAdParameter) { + return visitor.visitAdParameter(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class MlCommandContext extends ParserRuleContext { + public ML(): TerminalNode { return this.getToken(OpenSearchPPLParser.ML, 0); } + public mlArg(): MlArgContext[]; + public mlArg(i: number): MlArgContext; + public mlArg(i?: number): MlArgContext | MlArgContext[] { + if (i === undefined) { + return this.getRuleContexts(MlArgContext); + } else { + return this.getRuleContext(i, MlArgContext); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_mlCommand; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterMlCommand) { + listener.enterMlCommand(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitMlCommand) { + listener.exitMlCommand(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitMlCommand) { + return visitor.visitMlCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class MlArgContext extends ParserRuleContext { + public _argName!: IdentContext; + public _argValue!: LiteralValueContext; + public EQUAL(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.EQUAL, 0); } + public ident(): IdentContext | undefined { + return this.tryGetRuleContext(0, IdentContext); + } + public literalValue(): LiteralValueContext | undefined { + return this.tryGetRuleContext(0, LiteralValueContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_mlArg; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterMlArg) { + listener.enterMlArg(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitMlArg) { + listener.exitMlArg(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitMlArg) { + return visitor.visitMlArg(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FromClauseContext extends ParserRuleContext { + public SOURCE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.SOURCE, 0); } + public EQUAL(): TerminalNode { return this.getToken(OpenSearchPPLParser.EQUAL, 0); } + public tableSourceClause(): TableSourceClauseContext | undefined { + return this.tryGetRuleContext(0, TableSourceClauseContext); + } + public INDEX(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.INDEX, 0); } + public tableFunction(): TableFunctionContext | undefined { + return this.tryGetRuleContext(0, TableFunctionContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_fromClause; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterFromClause) { + listener.enterFromClause(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitFromClause) { + listener.exitFromClause(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitFromClause) { + return visitor.visitFromClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TableSourceClauseContext extends ParserRuleContext { + public tableSource(): TableSourceContext[]; + public tableSource(i: number): TableSourceContext; + public tableSource(i?: number): TableSourceContext | TableSourceContext[] { + if (i === undefined) { + return this.getRuleContexts(TableSourceContext); + } else { + return this.getRuleContext(i, TableSourceContext); + } + } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_tableSourceClause; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterTableSourceClause) { + listener.enterTableSourceClause(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitTableSourceClause) { + listener.exitTableSourceClause(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitTableSourceClause) { + return visitor.visitTableSourceClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RenameClasueContext extends ParserRuleContext { + public _orignalField!: WcFieldExpressionContext; + public _renamedField!: WcFieldExpressionContext; + public AS(): TerminalNode { return this.getToken(OpenSearchPPLParser.AS, 0); } + public wcFieldExpression(): WcFieldExpressionContext[]; + public wcFieldExpression(i: number): WcFieldExpressionContext; + public wcFieldExpression(i?: number): WcFieldExpressionContext | WcFieldExpressionContext[] { + if (i === undefined) { + return this.getRuleContexts(WcFieldExpressionContext); + } else { + return this.getRuleContext(i, WcFieldExpressionContext); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_renameClasue; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterRenameClasue) { + listener.enterRenameClasue(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitRenameClasue) { + listener.exitRenameClasue(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitRenameClasue) { + return visitor.visitRenameClasue(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ByClauseContext extends ParserRuleContext { + public BY(): TerminalNode { return this.getToken(OpenSearchPPLParser.BY, 0); } + public fieldList(): FieldListContext { + return this.getRuleContext(0, FieldListContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_byClause; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterByClause) { + listener.enterByClause(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitByClause) { + listener.exitByClause(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitByClause) { + return visitor.visitByClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class StatsByClauseContext extends ParserRuleContext { + public BY(): TerminalNode { return this.getToken(OpenSearchPPLParser.BY, 0); } + public fieldList(): FieldListContext | undefined { + return this.tryGetRuleContext(0, FieldListContext); + } + public bySpanClause(): BySpanClauseContext | undefined { + return this.tryGetRuleContext(0, BySpanClauseContext); + } + public COMMA(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.COMMA, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_statsByClause; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterStatsByClause) { + listener.enterStatsByClause(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitStatsByClause) { + listener.exitStatsByClause(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitStatsByClause) { + return visitor.visitStatsByClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class BySpanClauseContext extends ParserRuleContext { + public _alias!: QualifiedNameContext; + public spanClause(): SpanClauseContext { + return this.getRuleContext(0, SpanClauseContext); + } + public AS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.AS, 0); } + public qualifiedName(): QualifiedNameContext | undefined { + return this.tryGetRuleContext(0, QualifiedNameContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_bySpanClause; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterBySpanClause) { + listener.enterBySpanClause(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitBySpanClause) { + listener.exitBySpanClause(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitBySpanClause) { + return visitor.visitBySpanClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SpanClauseContext extends ParserRuleContext { + public _value!: LiteralValueContext; + public _unit!: TimespanUnitContext; + public SPAN(): TerminalNode { return this.getToken(OpenSearchPPLParser.SPAN, 0); } + public LT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0); } + public fieldExpression(): FieldExpressionContext { + return this.getRuleContext(0, FieldExpressionContext); + } + public COMMA(): TerminalNode { return this.getToken(OpenSearchPPLParser.COMMA, 0); } + public RT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0); } + public literalValue(): LiteralValueContext { + return this.getRuleContext(0, LiteralValueContext); + } + public timespanUnit(): TimespanUnitContext | undefined { + return this.tryGetRuleContext(0, TimespanUnitContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_spanClause; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterSpanClause) { + listener.enterSpanClause(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitSpanClause) { + listener.exitSpanClause(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitSpanClause) { + return visitor.visitSpanClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SortbyClauseContext extends ParserRuleContext { + public sortField(): SortFieldContext[]; + public sortField(i: number): SortFieldContext; + public sortField(i?: number): SortFieldContext | SortFieldContext[] { + if (i === undefined) { + return this.getRuleContexts(SortFieldContext); + } else { + return this.getRuleContext(i, SortFieldContext); + } + } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_sortbyClause; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterSortbyClause) { + listener.enterSortbyClause(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitSortbyClause) { + listener.exitSortbyClause(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitSortbyClause) { + return visitor.visitSortbyClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class EvalClauseContext extends ParserRuleContext { + public fieldExpression(): FieldExpressionContext { + return this.getRuleContext(0, FieldExpressionContext); + } + public EQUAL(): TerminalNode { return this.getToken(OpenSearchPPLParser.EQUAL, 0); } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_evalClause; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterEvalClause) { + listener.enterEvalClause(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitEvalClause) { + listener.exitEvalClause(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitEvalClause) { + return visitor.visitEvalClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class StatsAggTermContext extends ParserRuleContext { + public _alias!: WcFieldExpressionContext; + public statsFunction(): StatsFunctionContext { + return this.getRuleContext(0, StatsFunctionContext); + } + public AS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.AS, 0); } + public wcFieldExpression(): WcFieldExpressionContext | undefined { + return this.tryGetRuleContext(0, WcFieldExpressionContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_statsAggTerm; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterStatsAggTerm) { + listener.enterStatsAggTerm(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitStatsAggTerm) { + listener.exitStatsAggTerm(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitStatsAggTerm) { + return visitor.visitStatsAggTerm(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class StatsFunctionContext extends ParserRuleContext { + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_statsFunction; } + public copyFrom(ctx: StatsFunctionContext): void { + super.copyFrom(ctx); + } +} +export class StatsFunctionCallContext extends StatsFunctionContext { + public statsFunctionName(): StatsFunctionNameContext { + return this.getRuleContext(0, StatsFunctionNameContext); + } + public LT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0); } + public valueExpression(): ValueExpressionContext { + return this.getRuleContext(0, ValueExpressionContext); + } + public RT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0); } + constructor(ctx: StatsFunctionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterStatsFunctionCall) { + listener.enterStatsFunctionCall(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitStatsFunctionCall) { + listener.exitStatsFunctionCall(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitStatsFunctionCall) { + return visitor.visitStatsFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CountAllFunctionCallContext extends StatsFunctionContext { + public COUNT(): TerminalNode { return this.getToken(OpenSearchPPLParser.COUNT, 0); } + public LT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0); } + public RT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0); } + constructor(ctx: StatsFunctionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterCountAllFunctionCall) { + listener.enterCountAllFunctionCall(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitCountAllFunctionCall) { + listener.exitCountAllFunctionCall(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitCountAllFunctionCall) { + return visitor.visitCountAllFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DistinctCountFunctionCallContext extends StatsFunctionContext { + public LT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0); } + public valueExpression(): ValueExpressionContext { + return this.getRuleContext(0, ValueExpressionContext); + } + public RT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0); } + public DISTINCT_COUNT(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DISTINCT_COUNT, 0); } + public DC(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DC, 0); } + constructor(ctx: StatsFunctionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterDistinctCountFunctionCall) { + listener.enterDistinctCountFunctionCall(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitDistinctCountFunctionCall) { + listener.exitDistinctCountFunctionCall(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitDistinctCountFunctionCall) { + return visitor.visitDistinctCountFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class PercentileAggFunctionCallContext extends StatsFunctionContext { + public percentileAggFunction(): PercentileAggFunctionContext { + return this.getRuleContext(0, PercentileAggFunctionContext); + } + constructor(ctx: StatsFunctionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterPercentileAggFunctionCall) { + listener.enterPercentileAggFunctionCall(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitPercentileAggFunctionCall) { + listener.exitPercentileAggFunctionCall(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitPercentileAggFunctionCall) { + return visitor.visitPercentileAggFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class TakeAggFunctionCallContext extends StatsFunctionContext { + public takeAggFunction(): TakeAggFunctionContext { + return this.getRuleContext(0, TakeAggFunctionContext); + } + constructor(ctx: StatsFunctionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterTakeAggFunctionCall) { + listener.enterTakeAggFunctionCall(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitTakeAggFunctionCall) { + listener.exitTakeAggFunctionCall(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitTakeAggFunctionCall) { + return visitor.visitTakeAggFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class StatsFunctionNameContext extends ParserRuleContext { + public AVG(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.AVG, 0); } + public COUNT(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.COUNT, 0); } + public SUM(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.SUM, 0); } + public MIN(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MIN, 0); } + public MAX(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MAX, 0); } + public VAR_SAMP(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.VAR_SAMP, 0); } + public VAR_POP(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.VAR_POP, 0); } + public STDDEV_SAMP(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.STDDEV_SAMP, 0); } + public STDDEV_POP(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.STDDEV_POP, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_statsFunctionName; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterStatsFunctionName) { + listener.enterStatsFunctionName(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitStatsFunctionName) { + listener.exitStatsFunctionName(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitStatsFunctionName) { + return visitor.visitStatsFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TakeAggFunctionContext extends ParserRuleContext { + public _size!: IntegerLiteralContext; + public TAKE(): TerminalNode { return this.getToken(OpenSearchPPLParser.TAKE, 0); } + public LT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0); } + public fieldExpression(): FieldExpressionContext { + return this.getRuleContext(0, FieldExpressionContext); + } + public RT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0); } + public COMMA(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.COMMA, 0); } + public integerLiteral(): IntegerLiteralContext | undefined { + return this.tryGetRuleContext(0, IntegerLiteralContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_takeAggFunction; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterTakeAggFunction) { + listener.enterTakeAggFunction(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitTakeAggFunction) { + listener.exitTakeAggFunction(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitTakeAggFunction) { + return visitor.visitTakeAggFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PercentileAggFunctionContext extends ParserRuleContext { + public _value!: IntegerLiteralContext; + public _aggField!: FieldExpressionContext; + public PERCENTILE(): TerminalNode { return this.getToken(OpenSearchPPLParser.PERCENTILE, 0); } + public LESS(): TerminalNode { return this.getToken(OpenSearchPPLParser.LESS, 0); } + public GREATER(): TerminalNode { return this.getToken(OpenSearchPPLParser.GREATER, 0); } + public LT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0); } + public RT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0); } + public integerLiteral(): IntegerLiteralContext { + return this.getRuleContext(0, IntegerLiteralContext); + } + public fieldExpression(): FieldExpressionContext { + return this.getRuleContext(0, FieldExpressionContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_percentileAggFunction; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterPercentileAggFunction) { + listener.enterPercentileAggFunction(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitPercentileAggFunction) { + listener.exitPercentileAggFunction(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitPercentileAggFunction) { + return visitor.visitPercentileAggFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ExpressionContext extends ParserRuleContext { + public logicalExpression(): LogicalExpressionContext | undefined { + return this.tryGetRuleContext(0, LogicalExpressionContext); + } + public comparisonExpression(): ComparisonExpressionContext | undefined { + return this.tryGetRuleContext(0, ComparisonExpressionContext); + } + public valueExpression(): ValueExpressionContext | undefined { + return this.tryGetRuleContext(0, ValueExpressionContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_expression; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterExpression) { + listener.enterExpression(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitExpression) { + listener.exitExpression(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitExpression) { + return visitor.visitExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class LogicalExpressionContext extends ParserRuleContext { + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_logicalExpression; } + public copyFrom(ctx: LogicalExpressionContext): void { + super.copyFrom(ctx); + } +} +export class ComparsionContext extends LogicalExpressionContext { + public comparisonExpression(): ComparisonExpressionContext { + return this.getRuleContext(0, ComparisonExpressionContext); + } + constructor(ctx: LogicalExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterComparsion) { + listener.enterComparsion(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitComparsion) { + listener.exitComparsion(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitComparsion) { + return visitor.visitComparsion(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class LogicalNotContext extends LogicalExpressionContext { + public NOT(): TerminalNode { return this.getToken(OpenSearchPPLParser.NOT, 0); } + public logicalExpression(): LogicalExpressionContext { + return this.getRuleContext(0, LogicalExpressionContext); + } + constructor(ctx: LogicalExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterLogicalNot) { + listener.enterLogicalNot(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitLogicalNot) { + listener.exitLogicalNot(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitLogicalNot) { + return visitor.visitLogicalNot(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class LogicalOrContext extends LogicalExpressionContext { + public _left!: LogicalExpressionContext; + public _right!: LogicalExpressionContext; + public OR(): TerminalNode { return this.getToken(OpenSearchPPLParser.OR, 0); } + public logicalExpression(): LogicalExpressionContext[]; + public logicalExpression(i: number): LogicalExpressionContext; + public logicalExpression(i?: number): LogicalExpressionContext | LogicalExpressionContext[] { + if (i === undefined) { + return this.getRuleContexts(LogicalExpressionContext); + } else { + return this.getRuleContext(i, LogicalExpressionContext); + } + } + constructor(ctx: LogicalExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterLogicalOr) { + listener.enterLogicalOr(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitLogicalOr) { + listener.exitLogicalOr(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitLogicalOr) { + return visitor.visitLogicalOr(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class LogicalAndContext extends LogicalExpressionContext { + public _left!: LogicalExpressionContext; + public _right!: LogicalExpressionContext; + public logicalExpression(): LogicalExpressionContext[]; + public logicalExpression(i: number): LogicalExpressionContext; + public logicalExpression(i?: number): LogicalExpressionContext | LogicalExpressionContext[] { + if (i === undefined) { + return this.getRuleContexts(LogicalExpressionContext); + } else { + return this.getRuleContext(i, LogicalExpressionContext); + } + } + public AND(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.AND, 0); } + constructor(ctx: LogicalExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterLogicalAnd) { + listener.enterLogicalAnd(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitLogicalAnd) { + listener.exitLogicalAnd(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitLogicalAnd) { + return visitor.visitLogicalAnd(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class LogicalXorContext extends LogicalExpressionContext { + public _left!: LogicalExpressionContext; + public _right!: LogicalExpressionContext; + public XOR(): TerminalNode { return this.getToken(OpenSearchPPLParser.XOR, 0); } + public logicalExpression(): LogicalExpressionContext[]; + public logicalExpression(i: number): LogicalExpressionContext; + public logicalExpression(i?: number): LogicalExpressionContext | LogicalExpressionContext[] { + if (i === undefined) { + return this.getRuleContexts(LogicalExpressionContext); + } else { + return this.getRuleContext(i, LogicalExpressionContext); + } + } + constructor(ctx: LogicalExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterLogicalXor) { + listener.enterLogicalXor(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitLogicalXor) { + listener.exitLogicalXor(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitLogicalXor) { + return visitor.visitLogicalXor(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class BooleanExprContext extends LogicalExpressionContext { + public booleanExpression(): BooleanExpressionContext { + return this.getRuleContext(0, BooleanExpressionContext); + } + constructor(ctx: LogicalExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterBooleanExpr) { + listener.enterBooleanExpr(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitBooleanExpr) { + listener.exitBooleanExpr(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitBooleanExpr) { + return visitor.visitBooleanExpr(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RelevanceExprContext extends LogicalExpressionContext { + public relevanceExpression(): RelevanceExpressionContext { + return this.getRuleContext(0, RelevanceExpressionContext); + } + constructor(ctx: LogicalExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterRelevanceExpr) { + listener.enterRelevanceExpr(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitRelevanceExpr) { + listener.exitRelevanceExpr(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitRelevanceExpr) { + return visitor.visitRelevanceExpr(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ComparisonExpressionContext extends ParserRuleContext { + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_comparisonExpression; } + public copyFrom(ctx: ComparisonExpressionContext): void { + super.copyFrom(ctx); + } +} +export class CompareExprContext extends ComparisonExpressionContext { + public _left!: ValueExpressionContext; + public _right!: ValueExpressionContext; + public comparisonOperator(): ComparisonOperatorContext { + return this.getRuleContext(0, ComparisonOperatorContext); + } + public valueExpression(): ValueExpressionContext[]; + public valueExpression(i: number): ValueExpressionContext; + public valueExpression(i?: number): ValueExpressionContext | ValueExpressionContext[] { + if (i === undefined) { + return this.getRuleContexts(ValueExpressionContext); + } else { + return this.getRuleContext(i, ValueExpressionContext); + } + } + constructor(ctx: ComparisonExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterCompareExpr) { + listener.enterCompareExpr(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitCompareExpr) { + listener.exitCompareExpr(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitCompareExpr) { + return visitor.visitCompareExpr(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class InExprContext extends ComparisonExpressionContext { + public valueExpression(): ValueExpressionContext { + return this.getRuleContext(0, ValueExpressionContext); + } + public IN(): TerminalNode { return this.getToken(OpenSearchPPLParser.IN, 0); } + public valueList(): ValueListContext { + return this.getRuleContext(0, ValueListContext); + } + constructor(ctx: ComparisonExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterInExpr) { + listener.enterInExpr(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitInExpr) { + listener.exitInExpr(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitInExpr) { + return visitor.visitInExpr(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ValueExpressionContext extends ParserRuleContext { + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_valueExpression; } + public copyFrom(ctx: ValueExpressionContext): void { + super.copyFrom(ctx); + } +} +export class BinaryArithmeticContext extends ValueExpressionContext { + public _left!: ValueExpressionContext; + public _right!: ValueExpressionContext; + public binaryOperator(): BinaryOperatorContext { + return this.getRuleContext(0, BinaryOperatorContext); + } + public valueExpression(): ValueExpressionContext[]; + public valueExpression(i: number): ValueExpressionContext; + public valueExpression(i?: number): ValueExpressionContext | ValueExpressionContext[] { + if (i === undefined) { + return this.getRuleContexts(ValueExpressionContext); + } else { + return this.getRuleContext(i, ValueExpressionContext); + } + } + constructor(ctx: ValueExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterBinaryArithmetic) { + listener.enterBinaryArithmetic(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitBinaryArithmetic) { + listener.exitBinaryArithmetic(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitBinaryArithmetic) { + return visitor.visitBinaryArithmetic(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ParentheticBinaryArithmeticContext extends ValueExpressionContext { + public _left!: ValueExpressionContext; + public _right!: ValueExpressionContext; + public LT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0); } + public binaryOperator(): BinaryOperatorContext { + return this.getRuleContext(0, BinaryOperatorContext); + } + public RT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0); } + public valueExpression(): ValueExpressionContext[]; + public valueExpression(i: number): ValueExpressionContext; + public valueExpression(i?: number): ValueExpressionContext | ValueExpressionContext[] { + if (i === undefined) { + return this.getRuleContexts(ValueExpressionContext); + } else { + return this.getRuleContext(i, ValueExpressionContext); + } + } + constructor(ctx: ValueExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterParentheticBinaryArithmetic) { + listener.enterParentheticBinaryArithmetic(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitParentheticBinaryArithmetic) { + listener.exitParentheticBinaryArithmetic(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitParentheticBinaryArithmetic) { + return visitor.visitParentheticBinaryArithmetic(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ValueExpressionDefaultContext extends ValueExpressionContext { + public primaryExpression(): PrimaryExpressionContext { + return this.getRuleContext(0, PrimaryExpressionContext); + } + constructor(ctx: ValueExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterValueExpressionDefault) { + listener.enterValueExpressionDefault(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitValueExpressionDefault) { + listener.exitValueExpressionDefault(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitValueExpressionDefault) { + return visitor.visitValueExpressionDefault(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PrimaryExpressionContext extends ParserRuleContext { + public evalFunctionCall(): EvalFunctionCallContext | undefined { + return this.tryGetRuleContext(0, EvalFunctionCallContext); + } + public dataTypeFunctionCall(): DataTypeFunctionCallContext | undefined { + return this.tryGetRuleContext(0, DataTypeFunctionCallContext); + } + public fieldExpression(): FieldExpressionContext | undefined { + return this.tryGetRuleContext(0, FieldExpressionContext); + } + public literalValue(): LiteralValueContext | undefined { + return this.tryGetRuleContext(0, LiteralValueContext); + } + public constantFunction(): ConstantFunctionContext | undefined { + return this.tryGetRuleContext(0, ConstantFunctionContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_primaryExpression; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterPrimaryExpression) { + listener.enterPrimaryExpression(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitPrimaryExpression) { + listener.exitPrimaryExpression(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitPrimaryExpression) { + return visitor.visitPrimaryExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ConstantFunctionContext extends ParserRuleContext { + public constantFunctionName(): ConstantFunctionNameContext { + return this.getRuleContext(0, ConstantFunctionNameContext); + } + public LT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0); } + public RT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0); } + public functionArgs(): FunctionArgsContext | undefined { + return this.tryGetRuleContext(0, FunctionArgsContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_constantFunction; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterConstantFunction) { + listener.enterConstantFunction(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitConstantFunction) { + listener.exitConstantFunction(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitConstantFunction) { + return visitor.visitConstantFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class BooleanExpressionContext extends ParserRuleContext { + public booleanFunctionCall(): BooleanFunctionCallContext { + return this.getRuleContext(0, BooleanFunctionCallContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_booleanExpression; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterBooleanExpression) { + listener.enterBooleanExpression(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitBooleanExpression) { + listener.exitBooleanExpression(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitBooleanExpression) { + return visitor.visitBooleanExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RelevanceExpressionContext extends ParserRuleContext { + public singleFieldRelevanceFunction(): SingleFieldRelevanceFunctionContext | undefined { + return this.tryGetRuleContext(0, SingleFieldRelevanceFunctionContext); + } + public multiFieldRelevanceFunction(): MultiFieldRelevanceFunctionContext | undefined { + return this.tryGetRuleContext(0, MultiFieldRelevanceFunctionContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_relevanceExpression; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterRelevanceExpression) { + listener.enterRelevanceExpression(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitRelevanceExpression) { + listener.exitRelevanceExpression(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitRelevanceExpression) { + return visitor.visitRelevanceExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SingleFieldRelevanceFunctionContext extends ParserRuleContext { + public _field!: RelevanceFieldContext; + public _query!: RelevanceQueryContext; + public singleFieldRelevanceFunctionName(): SingleFieldRelevanceFunctionNameContext { + return this.getRuleContext(0, SingleFieldRelevanceFunctionNameContext); + } + public LT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0); } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } + } + public RT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0); } + public relevanceField(): RelevanceFieldContext { + return this.getRuleContext(0, RelevanceFieldContext); + } + public relevanceQuery(): RelevanceQueryContext { + return this.getRuleContext(0, RelevanceQueryContext); + } + public relevanceArg(): RelevanceArgContext[]; + public relevanceArg(i: number): RelevanceArgContext; + public relevanceArg(i?: number): RelevanceArgContext | RelevanceArgContext[] { + if (i === undefined) { + return this.getRuleContexts(RelevanceArgContext); + } else { + return this.getRuleContext(i, RelevanceArgContext); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_singleFieldRelevanceFunction; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterSingleFieldRelevanceFunction) { + listener.enterSingleFieldRelevanceFunction(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitSingleFieldRelevanceFunction) { + listener.exitSingleFieldRelevanceFunction(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitSingleFieldRelevanceFunction) { + return visitor.visitSingleFieldRelevanceFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class MultiFieldRelevanceFunctionContext extends ParserRuleContext { + public _field!: RelevanceFieldAndWeightContext; + public _query!: RelevanceQueryContext; + public multiFieldRelevanceFunctionName(): MultiFieldRelevanceFunctionNameContext { + return this.getRuleContext(0, MultiFieldRelevanceFunctionNameContext); + } + public LT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0); } + public LT_SQR_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.LT_SQR_PRTHS, 0); } + public RT_SQR_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.RT_SQR_PRTHS, 0); } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } + } + public RT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0); } + public relevanceFieldAndWeight(): RelevanceFieldAndWeightContext[]; + public relevanceFieldAndWeight(i: number): RelevanceFieldAndWeightContext; + public relevanceFieldAndWeight(i?: number): RelevanceFieldAndWeightContext | RelevanceFieldAndWeightContext[] { + if (i === undefined) { + return this.getRuleContexts(RelevanceFieldAndWeightContext); + } else { + return this.getRuleContext(i, RelevanceFieldAndWeightContext); + } + } + public relevanceQuery(): RelevanceQueryContext { + return this.getRuleContext(0, RelevanceQueryContext); + } + public relevanceArg(): RelevanceArgContext[]; + public relevanceArg(i: number): RelevanceArgContext; + public relevanceArg(i?: number): RelevanceArgContext | RelevanceArgContext[] { + if (i === undefined) { + return this.getRuleContexts(RelevanceArgContext); + } else { + return this.getRuleContext(i, RelevanceArgContext); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_multiFieldRelevanceFunction; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterMultiFieldRelevanceFunction) { + listener.enterMultiFieldRelevanceFunction(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitMultiFieldRelevanceFunction) { + listener.exitMultiFieldRelevanceFunction(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitMultiFieldRelevanceFunction) { + return visitor.visitMultiFieldRelevanceFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TableSourceContext extends ParserRuleContext { + public qualifiedName(): QualifiedNameContext | undefined { + return this.tryGetRuleContext(0, QualifiedNameContext); + } + public ID_DATE_SUFFIX(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.ID_DATE_SUFFIX, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_tableSource; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterTableSource) { + listener.enterTableSource(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitTableSource) { + listener.exitTableSource(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitTableSource) { + return visitor.visitTableSource(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TableFunctionContext extends ParserRuleContext { + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext); + } + public LT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0); } + public functionArgs(): FunctionArgsContext { + return this.getRuleContext(0, FunctionArgsContext); + } + public RT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_tableFunction; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterTableFunction) { + listener.enterTableFunction(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitTableFunction) { + listener.exitTableFunction(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitTableFunction) { + return visitor.visitTableFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FieldListContext extends ParserRuleContext { + public fieldExpression(): FieldExpressionContext[]; + public fieldExpression(i: number): FieldExpressionContext; + public fieldExpression(i?: number): FieldExpressionContext | FieldExpressionContext[] { + if (i === undefined) { + return this.getRuleContexts(FieldExpressionContext); + } else { + return this.getRuleContext(i, FieldExpressionContext); + } + } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_fieldList; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterFieldList) { + listener.enterFieldList(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitFieldList) { + listener.exitFieldList(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitFieldList) { + return visitor.visitFieldList(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class WcFieldListContext extends ParserRuleContext { + public wcFieldExpression(): WcFieldExpressionContext[]; + public wcFieldExpression(i: number): WcFieldExpressionContext; + public wcFieldExpression(i?: number): WcFieldExpressionContext | WcFieldExpressionContext[] { + if (i === undefined) { + return this.getRuleContexts(WcFieldExpressionContext); + } else { + return this.getRuleContext(i, WcFieldExpressionContext); + } + } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_wcFieldList; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterWcFieldList) { + listener.enterWcFieldList(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitWcFieldList) { + listener.exitWcFieldList(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitWcFieldList) { + return visitor.visitWcFieldList(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SortFieldContext extends ParserRuleContext { + public sortFieldExpression(): SortFieldExpressionContext { + return this.getRuleContext(0, SortFieldExpressionContext); + } + public PLUS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.PLUS, 0); } + public MINUS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MINUS, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_sortField; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterSortField) { + listener.enterSortField(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitSortField) { + listener.exitSortField(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitSortField) { + return visitor.visitSortField(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SortFieldExpressionContext extends ParserRuleContext { + public fieldExpression(): FieldExpressionContext { + return this.getRuleContext(0, FieldExpressionContext); + } + public AUTO(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.AUTO, 0); } + public LT_PRTHS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.LT_PRTHS, 0); } + public RT_PRTHS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.RT_PRTHS, 0); } + public STR(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.STR, 0); } + public IP(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.IP, 0); } + public NUM(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.NUM, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_sortFieldExpression; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterSortFieldExpression) { + listener.enterSortFieldExpression(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitSortFieldExpression) { + listener.exitSortFieldExpression(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitSortFieldExpression) { + return visitor.visitSortFieldExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FieldExpressionContext extends ParserRuleContext { + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_fieldExpression; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterFieldExpression) { + listener.enterFieldExpression(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitFieldExpression) { + listener.exitFieldExpression(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitFieldExpression) { + return visitor.visitFieldExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class WcFieldExpressionContext extends ParserRuleContext { + public wcQualifiedName(): WcQualifiedNameContext { + return this.getRuleContext(0, WcQualifiedNameContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_wcFieldExpression; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterWcFieldExpression) { + listener.enterWcFieldExpression(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitWcFieldExpression) { + listener.exitWcFieldExpression(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitWcFieldExpression) { + return visitor.visitWcFieldExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class EvalFunctionCallContext extends ParserRuleContext { + public evalFunctionName(): EvalFunctionNameContext { + return this.getRuleContext(0, EvalFunctionNameContext); + } + public LT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0); } + public functionArgs(): FunctionArgsContext { + return this.getRuleContext(0, FunctionArgsContext); + } + public RT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_evalFunctionCall; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterEvalFunctionCall) { + listener.enterEvalFunctionCall(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitEvalFunctionCall) { + listener.exitEvalFunctionCall(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitEvalFunctionCall) { + return visitor.visitEvalFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DataTypeFunctionCallContext extends ParserRuleContext { + public CAST(): TerminalNode { return this.getToken(OpenSearchPPLParser.CAST, 0); } + public LT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0); } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext); + } + public AS(): TerminalNode { return this.getToken(OpenSearchPPLParser.AS, 0); } + public convertedDataType(): ConvertedDataTypeContext { + return this.getRuleContext(0, ConvertedDataTypeContext); + } + public RT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_dataTypeFunctionCall; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterDataTypeFunctionCall) { + listener.enterDataTypeFunctionCall(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitDataTypeFunctionCall) { + listener.exitDataTypeFunctionCall(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitDataTypeFunctionCall) { + return visitor.visitDataTypeFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class BooleanFunctionCallContext extends ParserRuleContext { + public conditionFunctionBase(): ConditionFunctionBaseContext { + return this.getRuleContext(0, ConditionFunctionBaseContext); + } + public LT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0); } + public functionArgs(): FunctionArgsContext { + return this.getRuleContext(0, FunctionArgsContext); + } + public RT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_booleanFunctionCall; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterBooleanFunctionCall) { + listener.enterBooleanFunctionCall(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitBooleanFunctionCall) { + listener.exitBooleanFunctionCall(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitBooleanFunctionCall) { + return visitor.visitBooleanFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ConvertedDataTypeContext extends ParserRuleContext { + public _typeName!: Token; + public DATE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DATE, 0); } + public TIME(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.TIME, 0); } + public TIMESTAMP(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.TIMESTAMP, 0); } + public INT(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.INT, 0); } + public INTEGER(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.INTEGER, 0); } + public DOUBLE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DOUBLE, 0); } + public LONG(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.LONG, 0); } + public FLOAT(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.FLOAT, 0); } + public STRING(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.STRING, 0); } + public BOOLEAN(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.BOOLEAN, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_convertedDataType; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterConvertedDataType) { + listener.enterConvertedDataType(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitConvertedDataType) { + listener.exitConvertedDataType(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitConvertedDataType) { + return visitor.visitConvertedDataType(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class EvalFunctionNameContext extends ParserRuleContext { + public mathematicalFunctionBase(): MathematicalFunctionBaseContext | undefined { + return this.tryGetRuleContext(0, MathematicalFunctionBaseContext); + } + public dateAndTimeFunctionBase(): DateAndTimeFunctionBaseContext | undefined { + return this.tryGetRuleContext(0, DateAndTimeFunctionBaseContext); + } + public textFunctionBase(): TextFunctionBaseContext | undefined { + return this.tryGetRuleContext(0, TextFunctionBaseContext); + } + public conditionFunctionBase(): ConditionFunctionBaseContext | undefined { + return this.tryGetRuleContext(0, ConditionFunctionBaseContext); + } + public systemFunctionBase(): SystemFunctionBaseContext | undefined { + return this.tryGetRuleContext(0, SystemFunctionBaseContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_evalFunctionName; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterEvalFunctionName) { + listener.enterEvalFunctionName(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitEvalFunctionName) { + listener.exitEvalFunctionName(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitEvalFunctionName) { + return visitor.visitEvalFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FunctionArgsContext extends ParserRuleContext { + public functionArg(): FunctionArgContext[]; + public functionArg(i: number): FunctionArgContext; + public functionArg(i?: number): FunctionArgContext | FunctionArgContext[] { + if (i === undefined) { + return this.getRuleContexts(FunctionArgContext); + } else { + return this.getRuleContext(i, FunctionArgContext); + } + } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_functionArgs; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterFunctionArgs) { + listener.enterFunctionArgs(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitFunctionArgs) { + listener.exitFunctionArgs(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitFunctionArgs) { + return visitor.visitFunctionArgs(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FunctionArgContext extends ParserRuleContext { + public valueExpression(): ValueExpressionContext { + return this.getRuleContext(0, ValueExpressionContext); + } + public ident(): IdentContext | undefined { + return this.tryGetRuleContext(0, IdentContext); + } + public EQUAL(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.EQUAL, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_functionArg; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterFunctionArg) { + listener.enterFunctionArg(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitFunctionArg) { + listener.exitFunctionArg(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitFunctionArg) { + return visitor.visitFunctionArg(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RelevanceArgContext extends ParserRuleContext { + public relevanceArgName(): RelevanceArgNameContext { + return this.getRuleContext(0, RelevanceArgNameContext); + } + public EQUAL(): TerminalNode { return this.getToken(OpenSearchPPLParser.EQUAL, 0); } + public relevanceArgValue(): RelevanceArgValueContext { + return this.getRuleContext(0, RelevanceArgValueContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_relevanceArg; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterRelevanceArg) { + listener.enterRelevanceArg(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitRelevanceArg) { + listener.exitRelevanceArg(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitRelevanceArg) { + return visitor.visitRelevanceArg(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RelevanceArgNameContext extends ParserRuleContext { + public ALLOW_LEADING_WILDCARD(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.ALLOW_LEADING_WILDCARD, 0); } + public ANALYZER(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.ANALYZER, 0); } + public ANALYZE_WILDCARD(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.ANALYZE_WILDCARD, 0); } + public AUTO_GENERATE_SYNONYMS_PHRASE_QUERY(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.AUTO_GENERATE_SYNONYMS_PHRASE_QUERY, 0); } + public BOOST(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.BOOST, 0); } + public CUTOFF_FREQUENCY(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.CUTOFF_FREQUENCY, 0); } + public DEFAULT_FIELD(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DEFAULT_FIELD, 0); } + public DEFAULT_OPERATOR(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DEFAULT_OPERATOR, 0); } + public ENABLE_POSITION_INCREMENTS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.ENABLE_POSITION_INCREMENTS, 0); } + public ESCAPE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.ESCAPE, 0); } + public FIELDS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.FIELDS, 0); } + public FLAGS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.FLAGS, 0); } + public FUZZINESS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.FUZZINESS, 0); } + public FUZZY_MAX_EXPANSIONS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.FUZZY_MAX_EXPANSIONS, 0); } + public FUZZY_PREFIX_LENGTH(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.FUZZY_PREFIX_LENGTH, 0); } + public FUZZY_REWRITE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.FUZZY_REWRITE, 0); } + public FUZZY_TRANSPOSITIONS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.FUZZY_TRANSPOSITIONS, 0); } + public LENIENT(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.LENIENT, 0); } + public LOW_FREQ_OPERATOR(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.LOW_FREQ_OPERATOR, 0); } + public MAX_DETERMINIZED_STATES(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MAX_DETERMINIZED_STATES, 0); } + public MAX_EXPANSIONS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MAX_EXPANSIONS, 0); } + public MINIMUM_SHOULD_MATCH(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MINIMUM_SHOULD_MATCH, 0); } + public OPERATOR(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.OPERATOR, 0); } + public PHRASE_SLOP(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.PHRASE_SLOP, 0); } + public PREFIX_LENGTH(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.PREFIX_LENGTH, 0); } + public QUOTE_ANALYZER(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.QUOTE_ANALYZER, 0); } + public QUOTE_FIELD_SUFFIX(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.QUOTE_FIELD_SUFFIX, 0); } + public REWRITE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.REWRITE, 0); } + public SLOP(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.SLOP, 0); } + public TIE_BREAKER(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.TIE_BREAKER, 0); } + public TIME_ZONE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.TIME_ZONE, 0); } + public TYPE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.TYPE, 0); } + public ZERO_TERMS_QUERY(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.ZERO_TERMS_QUERY, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_relevanceArgName; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterRelevanceArgName) { + listener.enterRelevanceArgName(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitRelevanceArgName) { + listener.exitRelevanceArgName(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitRelevanceArgName) { + return visitor.visitRelevanceArgName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RelevanceFieldAndWeightContext extends ParserRuleContext { + public _field!: RelevanceFieldContext; + public _weight!: RelevanceFieldWeightContext; + public relevanceField(): RelevanceFieldContext { + return this.getRuleContext(0, RelevanceFieldContext); + } + public relevanceFieldWeight(): RelevanceFieldWeightContext | undefined { + return this.tryGetRuleContext(0, RelevanceFieldWeightContext); + } + public BIT_XOR_OP(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.BIT_XOR_OP, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_relevanceFieldAndWeight; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterRelevanceFieldAndWeight) { + listener.enterRelevanceFieldAndWeight(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitRelevanceFieldAndWeight) { + listener.exitRelevanceFieldAndWeight(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitRelevanceFieldAndWeight) { + return visitor.visitRelevanceFieldAndWeight(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RelevanceFieldWeightContext extends ParserRuleContext { + public integerLiteral(): IntegerLiteralContext | undefined { + return this.tryGetRuleContext(0, IntegerLiteralContext); + } + public decimalLiteral(): DecimalLiteralContext | undefined { + return this.tryGetRuleContext(0, DecimalLiteralContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_relevanceFieldWeight; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterRelevanceFieldWeight) { + listener.enterRelevanceFieldWeight(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitRelevanceFieldWeight) { + listener.exitRelevanceFieldWeight(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitRelevanceFieldWeight) { + return visitor.visitRelevanceFieldWeight(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RelevanceFieldContext extends ParserRuleContext { + public qualifiedName(): QualifiedNameContext | undefined { + return this.tryGetRuleContext(0, QualifiedNameContext); + } + public stringLiteral(): StringLiteralContext | undefined { + return this.tryGetRuleContext(0, StringLiteralContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_relevanceField; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterRelevanceField) { + listener.enterRelevanceField(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitRelevanceField) { + listener.exitRelevanceField(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitRelevanceField) { + return visitor.visitRelevanceField(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RelevanceQueryContext extends ParserRuleContext { + public relevanceArgValue(): RelevanceArgValueContext { + return this.getRuleContext(0, RelevanceArgValueContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_relevanceQuery; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterRelevanceQuery) { + listener.enterRelevanceQuery(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitRelevanceQuery) { + listener.exitRelevanceQuery(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitRelevanceQuery) { + return visitor.visitRelevanceQuery(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RelevanceArgValueContext extends ParserRuleContext { + public qualifiedName(): QualifiedNameContext | undefined { + return this.tryGetRuleContext(0, QualifiedNameContext); + } + public literalValue(): LiteralValueContext | undefined { + return this.tryGetRuleContext(0, LiteralValueContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_relevanceArgValue; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterRelevanceArgValue) { + listener.enterRelevanceArgValue(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitRelevanceArgValue) { + listener.exitRelevanceArgValue(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitRelevanceArgValue) { + return visitor.visitRelevanceArgValue(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class MathematicalFunctionBaseContext extends ParserRuleContext { + public ABS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.ABS, 0); } + public CEIL(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.CEIL, 0); } + public CEILING(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.CEILING, 0); } + public CONV(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.CONV, 0); } + public CRC32(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.CRC32, 0); } + public E(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.E, 0); } + public EXP(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.EXP, 0); } + public FLOOR(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.FLOOR, 0); } + public LN(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.LN, 0); } + public LOG(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.LOG, 0); } + public LOG10(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.LOG10, 0); } + public LOG2(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.LOG2, 0); } + public MOD(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MOD, 0); } + public PI(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.PI, 0); } + public POW(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.POW, 0); } + public POWER(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.POWER, 0); } + public RAND(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.RAND, 0); } + public ROUND(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.ROUND, 0); } + public SIGN(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.SIGN, 0); } + public SQRT(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.SQRT, 0); } + public TRUNCATE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.TRUNCATE, 0); } + public trigonometricFunctionName(): TrigonometricFunctionNameContext | undefined { + return this.tryGetRuleContext(0, TrigonometricFunctionNameContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_mathematicalFunctionBase; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterMathematicalFunctionBase) { + listener.enterMathematicalFunctionBase(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitMathematicalFunctionBase) { + listener.exitMathematicalFunctionBase(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitMathematicalFunctionBase) { + return visitor.visitMathematicalFunctionBase(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TrigonometricFunctionNameContext extends ParserRuleContext { + public ACOS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.ACOS, 0); } + public ASIN(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.ASIN, 0); } + public ATAN(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.ATAN, 0); } + public ATAN2(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.ATAN2, 0); } + public COS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.COS, 0); } + public COT(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.COT, 0); } + public DEGREES(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DEGREES, 0); } + public RADIANS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.RADIANS, 0); } + public SIN(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.SIN, 0); } + public TAN(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.TAN, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_trigonometricFunctionName; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterTrigonometricFunctionName) { + listener.enterTrigonometricFunctionName(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitTrigonometricFunctionName) { + listener.exitTrigonometricFunctionName(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitTrigonometricFunctionName) { + return visitor.visitTrigonometricFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DateAndTimeFunctionBaseContext extends ParserRuleContext { + public ADDDATE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.ADDDATE, 0); } + public CONVERT_TZ(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.CONVERT_TZ, 0); } + public DATE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DATE, 0); } + public DATE_ADD(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DATE_ADD, 0); } + public DATE_FORMAT(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DATE_FORMAT, 0); } + public DATE_SUB(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DATE_SUB, 0); } + public DATETIME(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DATETIME, 0); } + public DAY(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DAY, 0); } + public DAYNAME(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DAYNAME, 0); } + public DAYOFMONTH(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DAYOFMONTH, 0); } + public DAYOFWEEK(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DAYOFWEEK, 0); } + public DAYOFYEAR(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DAYOFYEAR, 0); } + public FROM_DAYS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.FROM_DAYS, 0); } + public FROM_UNIXTIME(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.FROM_UNIXTIME, 0); } + public HOUR(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.HOUR, 0); } + public MAKEDATE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MAKEDATE, 0); } + public MAKETIME(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MAKETIME, 0); } + public MICROSECOND(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MICROSECOND, 0); } + public MINUTE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MINUTE, 0); } + public MONTH(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MONTH, 0); } + public MONTHNAME(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MONTHNAME, 0); } + public PERIOD_ADD(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.PERIOD_ADD, 0); } + public PERIOD_DIFF(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.PERIOD_DIFF, 0); } + public QUARTER(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.QUARTER, 0); } + public SECOND(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.SECOND, 0); } + public SUBDATE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.SUBDATE, 0); } + public SYSDATE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.SYSDATE, 0); } + public TIME(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.TIME, 0); } + public TIME_TO_SEC(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.TIME_TO_SEC, 0); } + public TIMESTAMP(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.TIMESTAMP, 0); } + public TO_DAYS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.TO_DAYS, 0); } + public UNIX_TIMESTAMP(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.UNIX_TIMESTAMP, 0); } + public WEEK(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.WEEK, 0); } + public YEAR(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.YEAR, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_dateAndTimeFunctionBase; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterDateAndTimeFunctionBase) { + listener.enterDateAndTimeFunctionBase(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitDateAndTimeFunctionBase) { + listener.exitDateAndTimeFunctionBase(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitDateAndTimeFunctionBase) { + return visitor.visitDateAndTimeFunctionBase(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ConstantFunctionNameContext extends ParserRuleContext { + public CURRENT_DATE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.CURRENT_DATE, 0); } + public CURRENT_TIME(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.CURRENT_TIME, 0); } + public CURRENT_TIMESTAMP(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.CURRENT_TIMESTAMP, 0); } + public LOCALTIME(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.LOCALTIME, 0); } + public LOCALTIMESTAMP(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.LOCALTIMESTAMP, 0); } + public UTC_TIMESTAMP(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.UTC_TIMESTAMP, 0); } + public UTC_DATE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.UTC_DATE, 0); } + public UTC_TIME(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.UTC_TIME, 0); } + public CURDATE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.CURDATE, 0); } + public CURTIME(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.CURTIME, 0); } + public NOW(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.NOW, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_constantFunctionName; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterConstantFunctionName) { + listener.enterConstantFunctionName(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitConstantFunctionName) { + listener.exitConstantFunctionName(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitConstantFunctionName) { + return visitor.visitConstantFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ConditionFunctionBaseContext extends ParserRuleContext { + public LIKE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.LIKE, 0); } + public IF(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.IF, 0); } + public ISNULL(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.ISNULL, 0); } + public ISNOTNULL(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.ISNOTNULL, 0); } + public IFNULL(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.IFNULL, 0); } + public NULLIF(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.NULLIF, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_conditionFunctionBase; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterConditionFunctionBase) { + listener.enterConditionFunctionBase(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitConditionFunctionBase) { + listener.exitConditionFunctionBase(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitConditionFunctionBase) { + return visitor.visitConditionFunctionBase(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SystemFunctionBaseContext extends ParserRuleContext { + public TYPEOF(): TerminalNode { return this.getToken(OpenSearchPPLParser.TYPEOF, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_systemFunctionBase; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterSystemFunctionBase) { + listener.enterSystemFunctionBase(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitSystemFunctionBase) { + listener.exitSystemFunctionBase(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitSystemFunctionBase) { + return visitor.visitSystemFunctionBase(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TextFunctionBaseContext extends ParserRuleContext { + public SUBSTR(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.SUBSTR, 0); } + public SUBSTRING(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.SUBSTRING, 0); } + public TRIM(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.TRIM, 0); } + public LTRIM(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.LTRIM, 0); } + public RTRIM(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.RTRIM, 0); } + public LOWER(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.LOWER, 0); } + public UPPER(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.UPPER, 0); } + public CONCAT(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.CONCAT, 0); } + public CONCAT_WS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.CONCAT_WS, 0); } + public LENGTH(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.LENGTH, 0); } + public STRCMP(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.STRCMP, 0); } + public RIGHT(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.RIGHT, 0); } + public LEFT(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.LEFT, 0); } + public ASCII(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.ASCII, 0); } + public LOCATE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.LOCATE, 0); } + public REPLACE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.REPLACE, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_textFunctionBase; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterTextFunctionBase) { + listener.enterTextFunctionBase(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitTextFunctionBase) { + listener.exitTextFunctionBase(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitTextFunctionBase) { + return visitor.visitTextFunctionBase(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ComparisonOperatorContext extends ParserRuleContext { + public EQUAL(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.EQUAL, 0); } + public NOT_EQUAL(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.NOT_EQUAL, 0); } + public LESS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.LESS, 0); } + public NOT_LESS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.NOT_LESS, 0); } + public GREATER(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.GREATER, 0); } + public NOT_GREATER(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.NOT_GREATER, 0); } + public REGEXP(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.REGEXP, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_comparisonOperator; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterComparisonOperator) { + listener.enterComparisonOperator(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitComparisonOperator) { + listener.exitComparisonOperator(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitComparisonOperator) { + return visitor.visitComparisonOperator(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class BinaryOperatorContext extends ParserRuleContext { + public PLUS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.PLUS, 0); } + public MINUS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MINUS, 0); } + public STAR(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.STAR, 0); } + public DIVIDE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DIVIDE, 0); } + public MODULE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MODULE, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_binaryOperator; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterBinaryOperator) { + listener.enterBinaryOperator(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitBinaryOperator) { + listener.exitBinaryOperator(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitBinaryOperator) { + return visitor.visitBinaryOperator(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SingleFieldRelevanceFunctionNameContext extends ParserRuleContext { + public MATCH(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MATCH, 0); } + public MATCH_PHRASE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MATCH_PHRASE, 0); } + public MATCH_BOOL_PREFIX(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MATCH_BOOL_PREFIX, 0); } + public MATCH_PHRASE_PREFIX(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MATCH_PHRASE_PREFIX, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_singleFieldRelevanceFunctionName; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterSingleFieldRelevanceFunctionName) { + listener.enterSingleFieldRelevanceFunctionName(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitSingleFieldRelevanceFunctionName) { + listener.exitSingleFieldRelevanceFunctionName(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitSingleFieldRelevanceFunctionName) { + return visitor.visitSingleFieldRelevanceFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class MultiFieldRelevanceFunctionNameContext extends ParserRuleContext { + public SIMPLE_QUERY_STRING(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.SIMPLE_QUERY_STRING, 0); } + public MULTI_MATCH(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MULTI_MATCH, 0); } + public QUERY_STRING(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.QUERY_STRING, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_multiFieldRelevanceFunctionName; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterMultiFieldRelevanceFunctionName) { + listener.enterMultiFieldRelevanceFunctionName(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitMultiFieldRelevanceFunctionName) { + listener.exitMultiFieldRelevanceFunctionName(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitMultiFieldRelevanceFunctionName) { + return visitor.visitMultiFieldRelevanceFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class LiteralValueContext extends ParserRuleContext { + public intervalLiteral(): IntervalLiteralContext | undefined { + return this.tryGetRuleContext(0, IntervalLiteralContext); + } + public stringLiteral(): StringLiteralContext | undefined { + return this.tryGetRuleContext(0, StringLiteralContext); + } + public integerLiteral(): IntegerLiteralContext | undefined { + return this.tryGetRuleContext(0, IntegerLiteralContext); + } + public decimalLiteral(): DecimalLiteralContext | undefined { + return this.tryGetRuleContext(0, DecimalLiteralContext); + } + public booleanLiteral(): BooleanLiteralContext | undefined { + return this.tryGetRuleContext(0, BooleanLiteralContext); + } + public datetimeLiteral(): DatetimeLiteralContext | undefined { + return this.tryGetRuleContext(0, DatetimeLiteralContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_literalValue; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterLiteralValue) { + listener.enterLiteralValue(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitLiteralValue) { + listener.exitLiteralValue(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitLiteralValue) { + return visitor.visitLiteralValue(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class IntervalLiteralContext extends ParserRuleContext { + public INTERVAL(): TerminalNode { return this.getToken(OpenSearchPPLParser.INTERVAL, 0); } + public valueExpression(): ValueExpressionContext { + return this.getRuleContext(0, ValueExpressionContext); + } + public intervalUnit(): IntervalUnitContext { + return this.getRuleContext(0, IntervalUnitContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_intervalLiteral; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterIntervalLiteral) { + listener.enterIntervalLiteral(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitIntervalLiteral) { + listener.exitIntervalLiteral(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitIntervalLiteral) { + return visitor.visitIntervalLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class StringLiteralContext extends ParserRuleContext { + public DQUOTA_STRING(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DQUOTA_STRING, 0); } + public SQUOTA_STRING(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.SQUOTA_STRING, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_stringLiteral; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterStringLiteral) { + listener.enterStringLiteral(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitStringLiteral) { + listener.exitStringLiteral(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitStringLiteral) { + return visitor.visitStringLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class IntegerLiteralContext extends ParserRuleContext { + public INTEGER_LITERAL(): TerminalNode { return this.getToken(OpenSearchPPLParser.INTEGER_LITERAL, 0); } + public PLUS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.PLUS, 0); } + public MINUS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MINUS, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_integerLiteral; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterIntegerLiteral) { + listener.enterIntegerLiteral(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitIntegerLiteral) { + listener.exitIntegerLiteral(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitIntegerLiteral) { + return visitor.visitIntegerLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DecimalLiteralContext extends ParserRuleContext { + public DECIMAL_LITERAL(): TerminalNode { return this.getToken(OpenSearchPPLParser.DECIMAL_LITERAL, 0); } + public PLUS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.PLUS, 0); } + public MINUS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MINUS, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_decimalLiteral; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterDecimalLiteral) { + listener.enterDecimalLiteral(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitDecimalLiteral) { + listener.exitDecimalLiteral(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitDecimalLiteral) { + return visitor.visitDecimalLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class BooleanLiteralContext extends ParserRuleContext { + public TRUE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.TRUE, 0); } + public FALSE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.FALSE, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_booleanLiteral; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterBooleanLiteral) { + listener.enterBooleanLiteral(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitBooleanLiteral) { + listener.exitBooleanLiteral(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitBooleanLiteral) { + return visitor.visitBooleanLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DatetimeLiteralContext extends ParserRuleContext { + public dateLiteral(): DateLiteralContext | undefined { + return this.tryGetRuleContext(0, DateLiteralContext); + } + public timeLiteral(): TimeLiteralContext | undefined { + return this.tryGetRuleContext(0, TimeLiteralContext); + } + public timestampLiteral(): TimestampLiteralContext | undefined { + return this.tryGetRuleContext(0, TimestampLiteralContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_datetimeLiteral; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterDatetimeLiteral) { + listener.enterDatetimeLiteral(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitDatetimeLiteral) { + listener.exitDatetimeLiteral(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitDatetimeLiteral) { + return visitor.visitDatetimeLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DateLiteralContext extends ParserRuleContext { + public _date!: StringLiteralContext; + public DATE(): TerminalNode { return this.getToken(OpenSearchPPLParser.DATE, 0); } + public stringLiteral(): StringLiteralContext { + return this.getRuleContext(0, StringLiteralContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_dateLiteral; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterDateLiteral) { + listener.enterDateLiteral(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitDateLiteral) { + listener.exitDateLiteral(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitDateLiteral) { + return visitor.visitDateLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TimeLiteralContext extends ParserRuleContext { + public _time!: StringLiteralContext; + public TIME(): TerminalNode { return this.getToken(OpenSearchPPLParser.TIME, 0); } + public stringLiteral(): StringLiteralContext { + return this.getRuleContext(0, StringLiteralContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_timeLiteral; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterTimeLiteral) { + listener.enterTimeLiteral(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitTimeLiteral) { + listener.exitTimeLiteral(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitTimeLiteral) { + return visitor.visitTimeLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TimestampLiteralContext extends ParserRuleContext { + public _timestamp!: StringLiteralContext; + public TIMESTAMP(): TerminalNode { return this.getToken(OpenSearchPPLParser.TIMESTAMP, 0); } + public stringLiteral(): StringLiteralContext { + return this.getRuleContext(0, StringLiteralContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_timestampLiteral; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterTimestampLiteral) { + listener.enterTimestampLiteral(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitTimestampLiteral) { + listener.exitTimestampLiteral(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitTimestampLiteral) { + return visitor.visitTimestampLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class IntervalUnitContext extends ParserRuleContext { + public MICROSECOND(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MICROSECOND, 0); } + public SECOND(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.SECOND, 0); } + public MINUTE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MINUTE, 0); } + public HOUR(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.HOUR, 0); } + public DAY(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DAY, 0); } + public WEEK(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.WEEK, 0); } + public MONTH(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MONTH, 0); } + public QUARTER(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.QUARTER, 0); } + public YEAR(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.YEAR, 0); } + public SECOND_MICROSECOND(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.SECOND_MICROSECOND, 0); } + public MINUTE_MICROSECOND(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MINUTE_MICROSECOND, 0); } + public MINUTE_SECOND(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MINUTE_SECOND, 0); } + public HOUR_MICROSECOND(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.HOUR_MICROSECOND, 0); } + public HOUR_SECOND(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.HOUR_SECOND, 0); } + public HOUR_MINUTE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.HOUR_MINUTE, 0); } + public DAY_MICROSECOND(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DAY_MICROSECOND, 0); } + public DAY_SECOND(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DAY_SECOND, 0); } + public DAY_MINUTE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DAY_MINUTE, 0); } + public DAY_HOUR(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DAY_HOUR, 0); } + public YEAR_MONTH(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.YEAR_MONTH, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_intervalUnit; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterIntervalUnit) { + listener.enterIntervalUnit(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitIntervalUnit) { + listener.exitIntervalUnit(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitIntervalUnit) { + return visitor.visitIntervalUnit(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TimespanUnitContext extends ParserRuleContext { + public MS(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MS, 0); } + public S(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.S, 0); } + public M(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.M, 0); } + public H(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.H, 0); } + public D(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.D, 0); } + public W(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.W, 0); } + public Q(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.Q, 0); } + public Y(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.Y, 0); } + public MILLISECOND(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MILLISECOND, 0); } + public SECOND(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.SECOND, 0); } + public MINUTE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MINUTE, 0); } + public HOUR(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.HOUR, 0); } + public DAY(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DAY, 0); } + public WEEK(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.WEEK, 0); } + public MONTH(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.MONTH, 0); } + public QUARTER(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.QUARTER, 0); } + public YEAR(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.YEAR, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_timespanUnit; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterTimespanUnit) { + listener.enterTimespanUnit(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitTimespanUnit) { + listener.exitTimespanUnit(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitTimespanUnit) { + return visitor.visitTimespanUnit(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ValueListContext extends ParserRuleContext { + public LT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0); } + public literalValue(): LiteralValueContext[]; + public literalValue(i: number): LiteralValueContext; + public literalValue(i?: number): LiteralValueContext | LiteralValueContext[] { + if (i === undefined) { + return this.getRuleContexts(LiteralValueContext); + } else { + return this.getRuleContext(i, LiteralValueContext); + } + } + public RT_PRTHS(): TerminalNode { return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0); } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_valueList; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterValueList) { + listener.enterValueList(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitValueList) { + listener.exitValueList(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitValueList) { + return visitor.visitValueList(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class QualifiedNameContext extends ParserRuleContext { + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_qualifiedName; } + public copyFrom(ctx: QualifiedNameContext): void { + super.copyFrom(ctx); + } +} +export class IdentsAsQualifiedNameContext extends QualifiedNameContext { + public ident(): IdentContext[]; + public ident(i: number): IdentContext; + public ident(i?: number): IdentContext | IdentContext[] { + if (i === undefined) { + return this.getRuleContexts(IdentContext); + } else { + return this.getRuleContext(i, IdentContext); + } + } + public DOT(): TerminalNode[]; + public DOT(i: number): TerminalNode; + public DOT(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.DOT); + } else { + return this.getToken(OpenSearchPPLParser.DOT, i); + } + } + constructor(ctx: QualifiedNameContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterIdentsAsQualifiedName) { + listener.enterIdentsAsQualifiedName(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitIdentsAsQualifiedName) { + listener.exitIdentsAsQualifiedName(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitIdentsAsQualifiedName) { + return visitor.visitIdentsAsQualifiedName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class WcQualifiedNameContext extends ParserRuleContext { + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_wcQualifiedName; } + public copyFrom(ctx: WcQualifiedNameContext): void { + super.copyFrom(ctx); + } +} +export class IdentsAsWildcardQualifiedNameContext extends WcQualifiedNameContext { + public wildcard(): WildcardContext[]; + public wildcard(i: number): WildcardContext; + public wildcard(i?: number): WildcardContext | WildcardContext[] { + if (i === undefined) { + return this.getRuleContexts(WildcardContext); + } else { + return this.getRuleContext(i, WildcardContext); + } + } + public DOT(): TerminalNode[]; + public DOT(i: number): TerminalNode; + public DOT(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.DOT); + } else { + return this.getToken(OpenSearchPPLParser.DOT, i); + } + } + constructor(ctx: WcQualifiedNameContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterIdentsAsWildcardQualifiedName) { + listener.enterIdentsAsWildcardQualifiedName(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitIdentsAsWildcardQualifiedName) { + listener.exitIdentsAsWildcardQualifiedName(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitIdentsAsWildcardQualifiedName) { + return visitor.visitIdentsAsWildcardQualifiedName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class IdentContext extends ParserRuleContext { + public ID(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.ID, 0); } + public DOT(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DOT, 0); } + public BACKTICK(): TerminalNode[]; + public BACKTICK(i: number): TerminalNode; + public BACKTICK(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.BACKTICK); + } else { + return this.getToken(OpenSearchPPLParser.BACKTICK, i); + } + } + public ident(): IdentContext | undefined { + return this.tryGetRuleContext(0, IdentContext); + } + public BQUOTA_STRING(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.BQUOTA_STRING, 0); } + public keywordsCanBeId(): KeywordsCanBeIdContext | undefined { + return this.tryGetRuleContext(0, KeywordsCanBeIdContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_ident; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterIdent) { + listener.enterIdent(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitIdent) { + listener.exitIdent(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitIdent) { + return visitor.visitIdent(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class WildcardContext extends ParserRuleContext { + public ident(): IdentContext[]; + public ident(i: number): IdentContext; + public ident(i?: number): IdentContext | IdentContext[] { + if (i === undefined) { + return this.getRuleContexts(IdentContext); + } else { + return this.getRuleContext(i, IdentContext); + } + } + public MODULE(): TerminalNode[]; + public MODULE(i: number): TerminalNode; + public MODULE(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.MODULE); + } else { + return this.getToken(OpenSearchPPLParser.MODULE, i); + } + } + public SINGLE_QUOTE(): TerminalNode[]; + public SINGLE_QUOTE(i: number): TerminalNode; + public SINGLE_QUOTE(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.SINGLE_QUOTE); + } else { + return this.getToken(OpenSearchPPLParser.SINGLE_QUOTE, i); + } + } + public wildcard(): WildcardContext | undefined { + return this.tryGetRuleContext(0, WildcardContext); + } + public DOUBLE_QUOTE(): TerminalNode[]; + public DOUBLE_QUOTE(i: number): TerminalNode; + public DOUBLE_QUOTE(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.DOUBLE_QUOTE); + } else { + return this.getToken(OpenSearchPPLParser.DOUBLE_QUOTE, i); + } + } + public BACKTICK(): TerminalNode[]; + public BACKTICK(i: number): TerminalNode; + public BACKTICK(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.BACKTICK); + } else { + return this.getToken(OpenSearchPPLParser.BACKTICK, i); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_wildcard; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterWildcard) { + listener.enterWildcard(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitWildcard) { + listener.exitWildcard(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitWildcard) { + return visitor.visitWildcard(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class KeywordsCanBeIdContext extends ParserRuleContext { + public D(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.D, 0); } + public statsFunctionName(): StatsFunctionNameContext | undefined { + return this.tryGetRuleContext(0, StatsFunctionNameContext); + } + public TIMESTAMP(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.TIMESTAMP, 0); } + public DATE(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.DATE, 0); } + public TIME(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.TIME, 0); } + public FIRST(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.FIRST, 0); } + public LAST(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.LAST, 0); } + public timespanUnit(): TimespanUnitContext | undefined { + return this.tryGetRuleContext(0, TimespanUnitContext); + } + public SPAN(): TerminalNode | undefined { return this.tryGetToken(OpenSearchPPLParser.SPAN, 0); } + public constantFunctionName(): ConstantFunctionNameContext | undefined { + return this.tryGetRuleContext(0, ConstantFunctionNameContext); + } + public dateAndTimeFunctionBase(): DateAndTimeFunctionBaseContext | undefined { + return this.tryGetRuleContext(0, DateAndTimeFunctionBaseContext); + } + public textFunctionBase(): TextFunctionBaseContext | undefined { + return this.tryGetRuleContext(0, TextFunctionBaseContext); + } + public mathematicalFunctionBase(): MathematicalFunctionBaseContext | undefined { + return this.tryGetRuleContext(0, MathematicalFunctionBaseContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return OpenSearchPPLParser.RULE_keywordsCanBeId; } + // @Override + public enterRule(listener: OpenSearchPPLParserListener): void { + if (listener.enterKeywordsCanBeId) { + listener.enterKeywordsCanBeId(this); + } + } + // @Override + public exitRule(listener: OpenSearchPPLParserListener): void { + if (listener.exitKeywordsCanBeId) { + listener.exitKeywordsCanBeId(this); + } + } + // @Override + public accept(visitor: OpenSearchPPLParserVisitor): Result { + if (visitor.visitKeywordsCanBeId) { + return visitor.visitKeywordsCanBeId(this); + } else { + return visitor.visitChildren(this); + } + } +} + + diff --git a/dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLParserListener.ts b/dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLParserListener.ts new file mode 100644 index 000000000..c5a00ad0f --- /dev/null +++ b/dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLParserListener.ts @@ -0,0 +1,1557 @@ +// Generated from ./common/query_manager/antlr/grammar/OpenSearchPPLParser.g4 by ANTLR 4.9.0-SNAPSHOT + + +import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; + +import { BinaryArithmeticContext } from "./OpenSearchPPLParser"; +import { ParentheticBinaryArithmeticContext } from "./OpenSearchPPLParser"; +import { ValueExpressionDefaultContext } from "./OpenSearchPPLParser"; +import { CompareExprContext } from "./OpenSearchPPLParser"; +import { InExprContext } from "./OpenSearchPPLParser"; +import { IdentsAsWildcardQualifiedNameContext } from "./OpenSearchPPLParser"; +import { SearchFromContext } from "./OpenSearchPPLParser"; +import { SearchFromFilterContext } from "./OpenSearchPPLParser"; +import { SearchFilterFromContext } from "./OpenSearchPPLParser"; +import { StatsFunctionCallContext } from "./OpenSearchPPLParser"; +import { CountAllFunctionCallContext } from "./OpenSearchPPLParser"; +import { DistinctCountFunctionCallContext } from "./OpenSearchPPLParser"; +import { PercentileAggFunctionCallContext } from "./OpenSearchPPLParser"; +import { TakeAggFunctionCallContext } from "./OpenSearchPPLParser"; +import { IdentsAsQualifiedNameContext } from "./OpenSearchPPLParser"; +import { ComparsionContext } from "./OpenSearchPPLParser"; +import { LogicalNotContext } from "./OpenSearchPPLParser"; +import { LogicalOrContext } from "./OpenSearchPPLParser"; +import { LogicalAndContext } from "./OpenSearchPPLParser"; +import { LogicalXorContext } from "./OpenSearchPPLParser"; +import { BooleanExprContext } from "./OpenSearchPPLParser"; +import { RelevanceExprContext } from "./OpenSearchPPLParser"; +import { RootContext } from "./OpenSearchPPLParser"; +import { PplStatementContext } from "./OpenSearchPPLParser"; +import { PplCommandsContext } from "./OpenSearchPPLParser"; +import { CommandsContext } from "./OpenSearchPPLParser"; +import { SearchCommandContext } from "./OpenSearchPPLParser"; +import { DescribeCommandContext } from "./OpenSearchPPLParser"; +import { ShowCatalogsCommandContext } from "./OpenSearchPPLParser"; +import { WhereCommandContext } from "./OpenSearchPPLParser"; +import { FieldsCommandContext } from "./OpenSearchPPLParser"; +import { RenameCommandContext } from "./OpenSearchPPLParser"; +import { StatsCommandContext } from "./OpenSearchPPLParser"; +import { DedupCommandContext } from "./OpenSearchPPLParser"; +import { SortCommandContext } from "./OpenSearchPPLParser"; +import { EvalCommandContext } from "./OpenSearchPPLParser"; +import { HeadCommandContext } from "./OpenSearchPPLParser"; +import { TopCommandContext } from "./OpenSearchPPLParser"; +import { RareCommandContext } from "./OpenSearchPPLParser"; +import { GrokCommandContext } from "./OpenSearchPPLParser"; +import { ParseCommandContext } from "./OpenSearchPPLParser"; +import { PatternsCommandContext } from "./OpenSearchPPLParser"; +import { PatternsParameterContext } from "./OpenSearchPPLParser"; +import { PatternsMethodContext } from "./OpenSearchPPLParser"; +import { KmeansCommandContext } from "./OpenSearchPPLParser"; +import { KmeansParameterContext } from "./OpenSearchPPLParser"; +import { AdCommandContext } from "./OpenSearchPPLParser"; +import { AdParameterContext } from "./OpenSearchPPLParser"; +import { MlCommandContext } from "./OpenSearchPPLParser"; +import { MlArgContext } from "./OpenSearchPPLParser"; +import { FromClauseContext } from "./OpenSearchPPLParser"; +import { TableSourceClauseContext } from "./OpenSearchPPLParser"; +import { RenameClasueContext } from "./OpenSearchPPLParser"; +import { ByClauseContext } from "./OpenSearchPPLParser"; +import { StatsByClauseContext } from "./OpenSearchPPLParser"; +import { BySpanClauseContext } from "./OpenSearchPPLParser"; +import { SpanClauseContext } from "./OpenSearchPPLParser"; +import { SortbyClauseContext } from "./OpenSearchPPLParser"; +import { EvalClauseContext } from "./OpenSearchPPLParser"; +import { StatsAggTermContext } from "./OpenSearchPPLParser"; +import { StatsFunctionContext } from "./OpenSearchPPLParser"; +import { StatsFunctionNameContext } from "./OpenSearchPPLParser"; +import { TakeAggFunctionContext } from "./OpenSearchPPLParser"; +import { PercentileAggFunctionContext } from "./OpenSearchPPLParser"; +import { ExpressionContext } from "./OpenSearchPPLParser"; +import { LogicalExpressionContext } from "./OpenSearchPPLParser"; +import { ComparisonExpressionContext } from "./OpenSearchPPLParser"; +import { ValueExpressionContext } from "./OpenSearchPPLParser"; +import { PrimaryExpressionContext } from "./OpenSearchPPLParser"; +import { ConstantFunctionContext } from "./OpenSearchPPLParser"; +import { BooleanExpressionContext } from "./OpenSearchPPLParser"; +import { RelevanceExpressionContext } from "./OpenSearchPPLParser"; +import { SingleFieldRelevanceFunctionContext } from "./OpenSearchPPLParser"; +import { MultiFieldRelevanceFunctionContext } from "./OpenSearchPPLParser"; +import { TableSourceContext } from "./OpenSearchPPLParser"; +import { TableFunctionContext } from "./OpenSearchPPLParser"; +import { FieldListContext } from "./OpenSearchPPLParser"; +import { WcFieldListContext } from "./OpenSearchPPLParser"; +import { SortFieldContext } from "./OpenSearchPPLParser"; +import { SortFieldExpressionContext } from "./OpenSearchPPLParser"; +import { FieldExpressionContext } from "./OpenSearchPPLParser"; +import { WcFieldExpressionContext } from "./OpenSearchPPLParser"; +import { EvalFunctionCallContext } from "./OpenSearchPPLParser"; +import { DataTypeFunctionCallContext } from "./OpenSearchPPLParser"; +import { BooleanFunctionCallContext } from "./OpenSearchPPLParser"; +import { ConvertedDataTypeContext } from "./OpenSearchPPLParser"; +import { EvalFunctionNameContext } from "./OpenSearchPPLParser"; +import { FunctionArgsContext } from "./OpenSearchPPLParser"; +import { FunctionArgContext } from "./OpenSearchPPLParser"; +import { RelevanceArgContext } from "./OpenSearchPPLParser"; +import { RelevanceArgNameContext } from "./OpenSearchPPLParser"; +import { RelevanceFieldAndWeightContext } from "./OpenSearchPPLParser"; +import { RelevanceFieldWeightContext } from "./OpenSearchPPLParser"; +import { RelevanceFieldContext } from "./OpenSearchPPLParser"; +import { RelevanceQueryContext } from "./OpenSearchPPLParser"; +import { RelevanceArgValueContext } from "./OpenSearchPPLParser"; +import { MathematicalFunctionBaseContext } from "./OpenSearchPPLParser"; +import { TrigonometricFunctionNameContext } from "./OpenSearchPPLParser"; +import { DateAndTimeFunctionBaseContext } from "./OpenSearchPPLParser"; +import { ConstantFunctionNameContext } from "./OpenSearchPPLParser"; +import { ConditionFunctionBaseContext } from "./OpenSearchPPLParser"; +import { SystemFunctionBaseContext } from "./OpenSearchPPLParser"; +import { TextFunctionBaseContext } from "./OpenSearchPPLParser"; +import { ComparisonOperatorContext } from "./OpenSearchPPLParser"; +import { BinaryOperatorContext } from "./OpenSearchPPLParser"; +import { SingleFieldRelevanceFunctionNameContext } from "./OpenSearchPPLParser"; +import { MultiFieldRelevanceFunctionNameContext } from "./OpenSearchPPLParser"; +import { LiteralValueContext } from "./OpenSearchPPLParser"; +import { IntervalLiteralContext } from "./OpenSearchPPLParser"; +import { StringLiteralContext } from "./OpenSearchPPLParser"; +import { IntegerLiteralContext } from "./OpenSearchPPLParser"; +import { DecimalLiteralContext } from "./OpenSearchPPLParser"; +import { BooleanLiteralContext } from "./OpenSearchPPLParser"; +import { DatetimeLiteralContext } from "./OpenSearchPPLParser"; +import { DateLiteralContext } from "./OpenSearchPPLParser"; +import { TimeLiteralContext } from "./OpenSearchPPLParser"; +import { TimestampLiteralContext } from "./OpenSearchPPLParser"; +import { IntervalUnitContext } from "./OpenSearchPPLParser"; +import { TimespanUnitContext } from "./OpenSearchPPLParser"; +import { ValueListContext } from "./OpenSearchPPLParser"; +import { QualifiedNameContext } from "./OpenSearchPPLParser"; +import { WcQualifiedNameContext } from "./OpenSearchPPLParser"; +import { IdentContext } from "./OpenSearchPPLParser"; +import { WildcardContext } from "./OpenSearchPPLParser"; +import { KeywordsCanBeIdContext } from "./OpenSearchPPLParser"; + + +/** + * This interface defines a complete listener for a parse tree produced by + * `OpenSearchPPLParser`. + */ +export interface OpenSearchPPLParserListener extends ParseTreeListener { + /** + * Enter a parse tree produced by the `binaryArithmetic` + * labeled alternative in `OpenSearchPPLParser.valueExpression`. + * @param ctx the parse tree + */ + enterBinaryArithmetic?: (ctx: BinaryArithmeticContext) => void; + /** + * Exit a parse tree produced by the `binaryArithmetic` + * labeled alternative in `OpenSearchPPLParser.valueExpression`. + * @param ctx the parse tree + */ + exitBinaryArithmetic?: (ctx: BinaryArithmeticContext) => void; + + /** + * Enter a parse tree produced by the `parentheticBinaryArithmetic` + * labeled alternative in `OpenSearchPPLParser.valueExpression`. + * @param ctx the parse tree + */ + enterParentheticBinaryArithmetic?: (ctx: ParentheticBinaryArithmeticContext) => void; + /** + * Exit a parse tree produced by the `parentheticBinaryArithmetic` + * labeled alternative in `OpenSearchPPLParser.valueExpression`. + * @param ctx the parse tree + */ + exitParentheticBinaryArithmetic?: (ctx: ParentheticBinaryArithmeticContext) => void; + + /** + * Enter a parse tree produced by the `valueExpressionDefault` + * labeled alternative in `OpenSearchPPLParser.valueExpression`. + * @param ctx the parse tree + */ + enterValueExpressionDefault?: (ctx: ValueExpressionDefaultContext) => void; + /** + * Exit a parse tree produced by the `valueExpressionDefault` + * labeled alternative in `OpenSearchPPLParser.valueExpression`. + * @param ctx the parse tree + */ + exitValueExpressionDefault?: (ctx: ValueExpressionDefaultContext) => void; + + /** + * Enter a parse tree produced by the `compareExpr` + * labeled alternative in `OpenSearchPPLParser.comparisonExpression`. + * @param ctx the parse tree + */ + enterCompareExpr?: (ctx: CompareExprContext) => void; + /** + * Exit a parse tree produced by the `compareExpr` + * labeled alternative in `OpenSearchPPLParser.comparisonExpression`. + * @param ctx the parse tree + */ + exitCompareExpr?: (ctx: CompareExprContext) => void; + + /** + * Enter a parse tree produced by the `inExpr` + * labeled alternative in `OpenSearchPPLParser.comparisonExpression`. + * @param ctx the parse tree + */ + enterInExpr?: (ctx: InExprContext) => void; + /** + * Exit a parse tree produced by the `inExpr` + * labeled alternative in `OpenSearchPPLParser.comparisonExpression`. + * @param ctx the parse tree + */ + exitInExpr?: (ctx: InExprContext) => void; + + /** + * Enter a parse tree produced by the `identsAsWildcardQualifiedName` + * labeled alternative in `OpenSearchPPLParser.wcQualifiedName`. + * @param ctx the parse tree + */ + enterIdentsAsWildcardQualifiedName?: (ctx: IdentsAsWildcardQualifiedNameContext) => void; + /** + * Exit a parse tree produced by the `identsAsWildcardQualifiedName` + * labeled alternative in `OpenSearchPPLParser.wcQualifiedName`. + * @param ctx the parse tree + */ + exitIdentsAsWildcardQualifiedName?: (ctx: IdentsAsWildcardQualifiedNameContext) => void; + + /** + * Enter a parse tree produced by the `searchFrom` + * labeled alternative in `OpenSearchPPLParser.searchCommand`. + * @param ctx the parse tree + */ + enterSearchFrom?: (ctx: SearchFromContext) => void; + /** + * Exit a parse tree produced by the `searchFrom` + * labeled alternative in `OpenSearchPPLParser.searchCommand`. + * @param ctx the parse tree + */ + exitSearchFrom?: (ctx: SearchFromContext) => void; + + /** + * Enter a parse tree produced by the `searchFromFilter` + * labeled alternative in `OpenSearchPPLParser.searchCommand`. + * @param ctx the parse tree + */ + enterSearchFromFilter?: (ctx: SearchFromFilterContext) => void; + /** + * Exit a parse tree produced by the `searchFromFilter` + * labeled alternative in `OpenSearchPPLParser.searchCommand`. + * @param ctx the parse tree + */ + exitSearchFromFilter?: (ctx: SearchFromFilterContext) => void; + + /** + * Enter a parse tree produced by the `searchFilterFrom` + * labeled alternative in `OpenSearchPPLParser.searchCommand`. + * @param ctx the parse tree + */ + enterSearchFilterFrom?: (ctx: SearchFilterFromContext) => void; + /** + * Exit a parse tree produced by the `searchFilterFrom` + * labeled alternative in `OpenSearchPPLParser.searchCommand`. + * @param ctx the parse tree + */ + exitSearchFilterFrom?: (ctx: SearchFilterFromContext) => void; + + /** + * Enter a parse tree produced by the `statsFunctionCall` + * labeled alternative in `OpenSearchPPLParser.statsFunction`. + * @param ctx the parse tree + */ + enterStatsFunctionCall?: (ctx: StatsFunctionCallContext) => void; + /** + * Exit a parse tree produced by the `statsFunctionCall` + * labeled alternative in `OpenSearchPPLParser.statsFunction`. + * @param ctx the parse tree + */ + exitStatsFunctionCall?: (ctx: StatsFunctionCallContext) => void; + + /** + * Enter a parse tree produced by the `countAllFunctionCall` + * labeled alternative in `OpenSearchPPLParser.statsFunction`. + * @param ctx the parse tree + */ + enterCountAllFunctionCall?: (ctx: CountAllFunctionCallContext) => void; + /** + * Exit a parse tree produced by the `countAllFunctionCall` + * labeled alternative in `OpenSearchPPLParser.statsFunction`. + * @param ctx the parse tree + */ + exitCountAllFunctionCall?: (ctx: CountAllFunctionCallContext) => void; + + /** + * Enter a parse tree produced by the `distinctCountFunctionCall` + * labeled alternative in `OpenSearchPPLParser.statsFunction`. + * @param ctx the parse tree + */ + enterDistinctCountFunctionCall?: (ctx: DistinctCountFunctionCallContext) => void; + /** + * Exit a parse tree produced by the `distinctCountFunctionCall` + * labeled alternative in `OpenSearchPPLParser.statsFunction`. + * @param ctx the parse tree + */ + exitDistinctCountFunctionCall?: (ctx: DistinctCountFunctionCallContext) => void; + + /** + * Enter a parse tree produced by the `percentileAggFunctionCall` + * labeled alternative in `OpenSearchPPLParser.statsFunction`. + * @param ctx the parse tree + */ + enterPercentileAggFunctionCall?: (ctx: PercentileAggFunctionCallContext) => void; + /** + * Exit a parse tree produced by the `percentileAggFunctionCall` + * labeled alternative in `OpenSearchPPLParser.statsFunction`. + * @param ctx the parse tree + */ + exitPercentileAggFunctionCall?: (ctx: PercentileAggFunctionCallContext) => void; + + /** + * Enter a parse tree produced by the `takeAggFunctionCall` + * labeled alternative in `OpenSearchPPLParser.statsFunction`. + * @param ctx the parse tree + */ + enterTakeAggFunctionCall?: (ctx: TakeAggFunctionCallContext) => void; + /** + * Exit a parse tree produced by the `takeAggFunctionCall` + * labeled alternative in `OpenSearchPPLParser.statsFunction`. + * @param ctx the parse tree + */ + exitTakeAggFunctionCall?: (ctx: TakeAggFunctionCallContext) => void; + + /** + * Enter a parse tree produced by the `identsAsQualifiedName` + * labeled alternative in `OpenSearchPPLParser.qualifiedName`. + * @param ctx the parse tree + */ + enterIdentsAsQualifiedName?: (ctx: IdentsAsQualifiedNameContext) => void; + /** + * Exit a parse tree produced by the `identsAsQualifiedName` + * labeled alternative in `OpenSearchPPLParser.qualifiedName`. + * @param ctx the parse tree + */ + exitIdentsAsQualifiedName?: (ctx: IdentsAsQualifiedNameContext) => void; + + /** + * Enter a parse tree produced by the `comparsion` + * labeled alternative in `OpenSearchPPLParser.logicalExpression`. + * @param ctx the parse tree + */ + enterComparsion?: (ctx: ComparsionContext) => void; + /** + * Exit a parse tree produced by the `comparsion` + * labeled alternative in `OpenSearchPPLParser.logicalExpression`. + * @param ctx the parse tree + */ + exitComparsion?: (ctx: ComparsionContext) => void; + + /** + * Enter a parse tree produced by the `logicalNot` + * labeled alternative in `OpenSearchPPLParser.logicalExpression`. + * @param ctx the parse tree + */ + enterLogicalNot?: (ctx: LogicalNotContext) => void; + /** + * Exit a parse tree produced by the `logicalNot` + * labeled alternative in `OpenSearchPPLParser.logicalExpression`. + * @param ctx the parse tree + */ + exitLogicalNot?: (ctx: LogicalNotContext) => void; + + /** + * Enter a parse tree produced by the `logicalOr` + * labeled alternative in `OpenSearchPPLParser.logicalExpression`. + * @param ctx the parse tree + */ + enterLogicalOr?: (ctx: LogicalOrContext) => void; + /** + * Exit a parse tree produced by the `logicalOr` + * labeled alternative in `OpenSearchPPLParser.logicalExpression`. + * @param ctx the parse tree + */ + exitLogicalOr?: (ctx: LogicalOrContext) => void; + + /** + * Enter a parse tree produced by the `logicalAnd` + * labeled alternative in `OpenSearchPPLParser.logicalExpression`. + * @param ctx the parse tree + */ + enterLogicalAnd?: (ctx: LogicalAndContext) => void; + /** + * Exit a parse tree produced by the `logicalAnd` + * labeled alternative in `OpenSearchPPLParser.logicalExpression`. + * @param ctx the parse tree + */ + exitLogicalAnd?: (ctx: LogicalAndContext) => void; + + /** + * Enter a parse tree produced by the `logicalXor` + * labeled alternative in `OpenSearchPPLParser.logicalExpression`. + * @param ctx the parse tree + */ + enterLogicalXor?: (ctx: LogicalXorContext) => void; + /** + * Exit a parse tree produced by the `logicalXor` + * labeled alternative in `OpenSearchPPLParser.logicalExpression`. + * @param ctx the parse tree + */ + exitLogicalXor?: (ctx: LogicalXorContext) => void; + + /** + * Enter a parse tree produced by the `booleanExpr` + * labeled alternative in `OpenSearchPPLParser.logicalExpression`. + * @param ctx the parse tree + */ + enterBooleanExpr?: (ctx: BooleanExprContext) => void; + /** + * Exit a parse tree produced by the `booleanExpr` + * labeled alternative in `OpenSearchPPLParser.logicalExpression`. + * @param ctx the parse tree + */ + exitBooleanExpr?: (ctx: BooleanExprContext) => void; + + /** + * Enter a parse tree produced by the `relevanceExpr` + * labeled alternative in `OpenSearchPPLParser.logicalExpression`. + * @param ctx the parse tree + */ + enterRelevanceExpr?: (ctx: RelevanceExprContext) => void; + /** + * Exit a parse tree produced by the `relevanceExpr` + * labeled alternative in `OpenSearchPPLParser.logicalExpression`. + * @param ctx the parse tree + */ + exitRelevanceExpr?: (ctx: RelevanceExprContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.root`. + * @param ctx the parse tree + */ + enterRoot?: (ctx: RootContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.root`. + * @param ctx the parse tree + */ + exitRoot?: (ctx: RootContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.pplStatement`. + * @param ctx the parse tree + */ + enterPplStatement?: (ctx: PplStatementContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.pplStatement`. + * @param ctx the parse tree + */ + exitPplStatement?: (ctx: PplStatementContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.pplCommands`. + * @param ctx the parse tree + */ + enterPplCommands?: (ctx: PplCommandsContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.pplCommands`. + * @param ctx the parse tree + */ + exitPplCommands?: (ctx: PplCommandsContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.commands`. + * @param ctx the parse tree + */ + enterCommands?: (ctx: CommandsContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.commands`. + * @param ctx the parse tree + */ + exitCommands?: (ctx: CommandsContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.searchCommand`. + * @param ctx the parse tree + */ + enterSearchCommand?: (ctx: SearchCommandContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.searchCommand`. + * @param ctx the parse tree + */ + exitSearchCommand?: (ctx: SearchCommandContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.describeCommand`. + * @param ctx the parse tree + */ + enterDescribeCommand?: (ctx: DescribeCommandContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.describeCommand`. + * @param ctx the parse tree + */ + exitDescribeCommand?: (ctx: DescribeCommandContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.showCatalogsCommand`. + * @param ctx the parse tree + */ + enterShowCatalogsCommand?: (ctx: ShowCatalogsCommandContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.showCatalogsCommand`. + * @param ctx the parse tree + */ + exitShowCatalogsCommand?: (ctx: ShowCatalogsCommandContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.whereCommand`. + * @param ctx the parse tree + */ + enterWhereCommand?: (ctx: WhereCommandContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.whereCommand`. + * @param ctx the parse tree + */ + exitWhereCommand?: (ctx: WhereCommandContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.fieldsCommand`. + * @param ctx the parse tree + */ + enterFieldsCommand?: (ctx: FieldsCommandContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.fieldsCommand`. + * @param ctx the parse tree + */ + exitFieldsCommand?: (ctx: FieldsCommandContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.renameCommand`. + * @param ctx the parse tree + */ + enterRenameCommand?: (ctx: RenameCommandContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.renameCommand`. + * @param ctx the parse tree + */ + exitRenameCommand?: (ctx: RenameCommandContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.statsCommand`. + * @param ctx the parse tree + */ + enterStatsCommand?: (ctx: StatsCommandContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.statsCommand`. + * @param ctx the parse tree + */ + exitStatsCommand?: (ctx: StatsCommandContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.dedupCommand`. + * @param ctx the parse tree + */ + enterDedupCommand?: (ctx: DedupCommandContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.dedupCommand`. + * @param ctx the parse tree + */ + exitDedupCommand?: (ctx: DedupCommandContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.sortCommand`. + * @param ctx the parse tree + */ + enterSortCommand?: (ctx: SortCommandContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.sortCommand`. + * @param ctx the parse tree + */ + exitSortCommand?: (ctx: SortCommandContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.evalCommand`. + * @param ctx the parse tree + */ + enterEvalCommand?: (ctx: EvalCommandContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.evalCommand`. + * @param ctx the parse tree + */ + exitEvalCommand?: (ctx: EvalCommandContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.headCommand`. + * @param ctx the parse tree + */ + enterHeadCommand?: (ctx: HeadCommandContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.headCommand`. + * @param ctx the parse tree + */ + exitHeadCommand?: (ctx: HeadCommandContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.topCommand`. + * @param ctx the parse tree + */ + enterTopCommand?: (ctx: TopCommandContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.topCommand`. + * @param ctx the parse tree + */ + exitTopCommand?: (ctx: TopCommandContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.rareCommand`. + * @param ctx the parse tree + */ + enterRareCommand?: (ctx: RareCommandContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.rareCommand`. + * @param ctx the parse tree + */ + exitRareCommand?: (ctx: RareCommandContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.grokCommand`. + * @param ctx the parse tree + */ + enterGrokCommand?: (ctx: GrokCommandContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.grokCommand`. + * @param ctx the parse tree + */ + exitGrokCommand?: (ctx: GrokCommandContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.parseCommand`. + * @param ctx the parse tree + */ + enterParseCommand?: (ctx: ParseCommandContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.parseCommand`. + * @param ctx the parse tree + */ + exitParseCommand?: (ctx: ParseCommandContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.patternsCommand`. + * @param ctx the parse tree + */ + enterPatternsCommand?: (ctx: PatternsCommandContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.patternsCommand`. + * @param ctx the parse tree + */ + exitPatternsCommand?: (ctx: PatternsCommandContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.patternsParameter`. + * @param ctx the parse tree + */ + enterPatternsParameter?: (ctx: PatternsParameterContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.patternsParameter`. + * @param ctx the parse tree + */ + exitPatternsParameter?: (ctx: PatternsParameterContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.patternsMethod`. + * @param ctx the parse tree + */ + enterPatternsMethod?: (ctx: PatternsMethodContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.patternsMethod`. + * @param ctx the parse tree + */ + exitPatternsMethod?: (ctx: PatternsMethodContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.kmeansCommand`. + * @param ctx the parse tree + */ + enterKmeansCommand?: (ctx: KmeansCommandContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.kmeansCommand`. + * @param ctx the parse tree + */ + exitKmeansCommand?: (ctx: KmeansCommandContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.kmeansParameter`. + * @param ctx the parse tree + */ + enterKmeansParameter?: (ctx: KmeansParameterContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.kmeansParameter`. + * @param ctx the parse tree + */ + exitKmeansParameter?: (ctx: KmeansParameterContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.adCommand`. + * @param ctx the parse tree + */ + enterAdCommand?: (ctx: AdCommandContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.adCommand`. + * @param ctx the parse tree + */ + exitAdCommand?: (ctx: AdCommandContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.adParameter`. + * @param ctx the parse tree + */ + enterAdParameter?: (ctx: AdParameterContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.adParameter`. + * @param ctx the parse tree + */ + exitAdParameter?: (ctx: AdParameterContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.mlCommand`. + * @param ctx the parse tree + */ + enterMlCommand?: (ctx: MlCommandContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.mlCommand`. + * @param ctx the parse tree + */ + exitMlCommand?: (ctx: MlCommandContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.mlArg`. + * @param ctx the parse tree + */ + enterMlArg?: (ctx: MlArgContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.mlArg`. + * @param ctx the parse tree + */ + exitMlArg?: (ctx: MlArgContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.fromClause`. + * @param ctx the parse tree + */ + enterFromClause?: (ctx: FromClauseContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.fromClause`. + * @param ctx the parse tree + */ + exitFromClause?: (ctx: FromClauseContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.tableSourceClause`. + * @param ctx the parse tree + */ + enterTableSourceClause?: (ctx: TableSourceClauseContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.tableSourceClause`. + * @param ctx the parse tree + */ + exitTableSourceClause?: (ctx: TableSourceClauseContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.renameClasue`. + * @param ctx the parse tree + */ + enterRenameClasue?: (ctx: RenameClasueContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.renameClasue`. + * @param ctx the parse tree + */ + exitRenameClasue?: (ctx: RenameClasueContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.byClause`. + * @param ctx the parse tree + */ + enterByClause?: (ctx: ByClauseContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.byClause`. + * @param ctx the parse tree + */ + exitByClause?: (ctx: ByClauseContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.statsByClause`. + * @param ctx the parse tree + */ + enterStatsByClause?: (ctx: StatsByClauseContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.statsByClause`. + * @param ctx the parse tree + */ + exitStatsByClause?: (ctx: StatsByClauseContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.bySpanClause`. + * @param ctx the parse tree + */ + enterBySpanClause?: (ctx: BySpanClauseContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.bySpanClause`. + * @param ctx the parse tree + */ + exitBySpanClause?: (ctx: BySpanClauseContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.spanClause`. + * @param ctx the parse tree + */ + enterSpanClause?: (ctx: SpanClauseContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.spanClause`. + * @param ctx the parse tree + */ + exitSpanClause?: (ctx: SpanClauseContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.sortbyClause`. + * @param ctx the parse tree + */ + enterSortbyClause?: (ctx: SortbyClauseContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.sortbyClause`. + * @param ctx the parse tree + */ + exitSortbyClause?: (ctx: SortbyClauseContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.evalClause`. + * @param ctx the parse tree + */ + enterEvalClause?: (ctx: EvalClauseContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.evalClause`. + * @param ctx the parse tree + */ + exitEvalClause?: (ctx: EvalClauseContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.statsAggTerm`. + * @param ctx the parse tree + */ + enterStatsAggTerm?: (ctx: StatsAggTermContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.statsAggTerm`. + * @param ctx the parse tree + */ + exitStatsAggTerm?: (ctx: StatsAggTermContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.statsFunction`. + * @param ctx the parse tree + */ + enterStatsFunction?: (ctx: StatsFunctionContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.statsFunction`. + * @param ctx the parse tree + */ + exitStatsFunction?: (ctx: StatsFunctionContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.statsFunctionName`. + * @param ctx the parse tree + */ + enterStatsFunctionName?: (ctx: StatsFunctionNameContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.statsFunctionName`. + * @param ctx the parse tree + */ + exitStatsFunctionName?: (ctx: StatsFunctionNameContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.takeAggFunction`. + * @param ctx the parse tree + */ + enterTakeAggFunction?: (ctx: TakeAggFunctionContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.takeAggFunction`. + * @param ctx the parse tree + */ + exitTakeAggFunction?: (ctx: TakeAggFunctionContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.percentileAggFunction`. + * @param ctx the parse tree + */ + enterPercentileAggFunction?: (ctx: PercentileAggFunctionContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.percentileAggFunction`. + * @param ctx the parse tree + */ + exitPercentileAggFunction?: (ctx: PercentileAggFunctionContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.expression`. + * @param ctx the parse tree + */ + enterExpression?: (ctx: ExpressionContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.expression`. + * @param ctx the parse tree + */ + exitExpression?: (ctx: ExpressionContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.logicalExpression`. + * @param ctx the parse tree + */ + enterLogicalExpression?: (ctx: LogicalExpressionContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.logicalExpression`. + * @param ctx the parse tree + */ + exitLogicalExpression?: (ctx: LogicalExpressionContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.comparisonExpression`. + * @param ctx the parse tree + */ + enterComparisonExpression?: (ctx: ComparisonExpressionContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.comparisonExpression`. + * @param ctx the parse tree + */ + exitComparisonExpression?: (ctx: ComparisonExpressionContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.valueExpression`. + * @param ctx the parse tree + */ + enterValueExpression?: (ctx: ValueExpressionContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.valueExpression`. + * @param ctx the parse tree + */ + exitValueExpression?: (ctx: ValueExpressionContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.primaryExpression`. + * @param ctx the parse tree + */ + enterPrimaryExpression?: (ctx: PrimaryExpressionContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.primaryExpression`. + * @param ctx the parse tree + */ + exitPrimaryExpression?: (ctx: PrimaryExpressionContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.constantFunction`. + * @param ctx the parse tree + */ + enterConstantFunction?: (ctx: ConstantFunctionContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.constantFunction`. + * @param ctx the parse tree + */ + exitConstantFunction?: (ctx: ConstantFunctionContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.booleanExpression`. + * @param ctx the parse tree + */ + enterBooleanExpression?: (ctx: BooleanExpressionContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.booleanExpression`. + * @param ctx the parse tree + */ + exitBooleanExpression?: (ctx: BooleanExpressionContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.relevanceExpression`. + * @param ctx the parse tree + */ + enterRelevanceExpression?: (ctx: RelevanceExpressionContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.relevanceExpression`. + * @param ctx the parse tree + */ + exitRelevanceExpression?: (ctx: RelevanceExpressionContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.singleFieldRelevanceFunction`. + * @param ctx the parse tree + */ + enterSingleFieldRelevanceFunction?: (ctx: SingleFieldRelevanceFunctionContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.singleFieldRelevanceFunction`. + * @param ctx the parse tree + */ + exitSingleFieldRelevanceFunction?: (ctx: SingleFieldRelevanceFunctionContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.multiFieldRelevanceFunction`. + * @param ctx the parse tree + */ + enterMultiFieldRelevanceFunction?: (ctx: MultiFieldRelevanceFunctionContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.multiFieldRelevanceFunction`. + * @param ctx the parse tree + */ + exitMultiFieldRelevanceFunction?: (ctx: MultiFieldRelevanceFunctionContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.tableSource`. + * @param ctx the parse tree + */ + enterTableSource?: (ctx: TableSourceContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.tableSource`. + * @param ctx the parse tree + */ + exitTableSource?: (ctx: TableSourceContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.tableFunction`. + * @param ctx the parse tree + */ + enterTableFunction?: (ctx: TableFunctionContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.tableFunction`. + * @param ctx the parse tree + */ + exitTableFunction?: (ctx: TableFunctionContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.fieldList`. + * @param ctx the parse tree + */ + enterFieldList?: (ctx: FieldListContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.fieldList`. + * @param ctx the parse tree + */ + exitFieldList?: (ctx: FieldListContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.wcFieldList`. + * @param ctx the parse tree + */ + enterWcFieldList?: (ctx: WcFieldListContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.wcFieldList`. + * @param ctx the parse tree + */ + exitWcFieldList?: (ctx: WcFieldListContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.sortField`. + * @param ctx the parse tree + */ + enterSortField?: (ctx: SortFieldContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.sortField`. + * @param ctx the parse tree + */ + exitSortField?: (ctx: SortFieldContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.sortFieldExpression`. + * @param ctx the parse tree + */ + enterSortFieldExpression?: (ctx: SortFieldExpressionContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.sortFieldExpression`. + * @param ctx the parse tree + */ + exitSortFieldExpression?: (ctx: SortFieldExpressionContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.fieldExpression`. + * @param ctx the parse tree + */ + enterFieldExpression?: (ctx: FieldExpressionContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.fieldExpression`. + * @param ctx the parse tree + */ + exitFieldExpression?: (ctx: FieldExpressionContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.wcFieldExpression`. + * @param ctx the parse tree + */ + enterWcFieldExpression?: (ctx: WcFieldExpressionContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.wcFieldExpression`. + * @param ctx the parse tree + */ + exitWcFieldExpression?: (ctx: WcFieldExpressionContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.evalFunctionCall`. + * @param ctx the parse tree + */ + enterEvalFunctionCall?: (ctx: EvalFunctionCallContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.evalFunctionCall`. + * @param ctx the parse tree + */ + exitEvalFunctionCall?: (ctx: EvalFunctionCallContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.dataTypeFunctionCall`. + * @param ctx the parse tree + */ + enterDataTypeFunctionCall?: (ctx: DataTypeFunctionCallContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.dataTypeFunctionCall`. + * @param ctx the parse tree + */ + exitDataTypeFunctionCall?: (ctx: DataTypeFunctionCallContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.booleanFunctionCall`. + * @param ctx the parse tree + */ + enterBooleanFunctionCall?: (ctx: BooleanFunctionCallContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.booleanFunctionCall`. + * @param ctx the parse tree + */ + exitBooleanFunctionCall?: (ctx: BooleanFunctionCallContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.convertedDataType`. + * @param ctx the parse tree + */ + enterConvertedDataType?: (ctx: ConvertedDataTypeContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.convertedDataType`. + * @param ctx the parse tree + */ + exitConvertedDataType?: (ctx: ConvertedDataTypeContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.evalFunctionName`. + * @param ctx the parse tree + */ + enterEvalFunctionName?: (ctx: EvalFunctionNameContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.evalFunctionName`. + * @param ctx the parse tree + */ + exitEvalFunctionName?: (ctx: EvalFunctionNameContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.functionArgs`. + * @param ctx the parse tree + */ + enterFunctionArgs?: (ctx: FunctionArgsContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.functionArgs`. + * @param ctx the parse tree + */ + exitFunctionArgs?: (ctx: FunctionArgsContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.functionArg`. + * @param ctx the parse tree + */ + enterFunctionArg?: (ctx: FunctionArgContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.functionArg`. + * @param ctx the parse tree + */ + exitFunctionArg?: (ctx: FunctionArgContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.relevanceArg`. + * @param ctx the parse tree + */ + enterRelevanceArg?: (ctx: RelevanceArgContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.relevanceArg`. + * @param ctx the parse tree + */ + exitRelevanceArg?: (ctx: RelevanceArgContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.relevanceArgName`. + * @param ctx the parse tree + */ + enterRelevanceArgName?: (ctx: RelevanceArgNameContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.relevanceArgName`. + * @param ctx the parse tree + */ + exitRelevanceArgName?: (ctx: RelevanceArgNameContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.relevanceFieldAndWeight`. + * @param ctx the parse tree + */ + enterRelevanceFieldAndWeight?: (ctx: RelevanceFieldAndWeightContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.relevanceFieldAndWeight`. + * @param ctx the parse tree + */ + exitRelevanceFieldAndWeight?: (ctx: RelevanceFieldAndWeightContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.relevanceFieldWeight`. + * @param ctx the parse tree + */ + enterRelevanceFieldWeight?: (ctx: RelevanceFieldWeightContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.relevanceFieldWeight`. + * @param ctx the parse tree + */ + exitRelevanceFieldWeight?: (ctx: RelevanceFieldWeightContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.relevanceField`. + * @param ctx the parse tree + */ + enterRelevanceField?: (ctx: RelevanceFieldContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.relevanceField`. + * @param ctx the parse tree + */ + exitRelevanceField?: (ctx: RelevanceFieldContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.relevanceQuery`. + * @param ctx the parse tree + */ + enterRelevanceQuery?: (ctx: RelevanceQueryContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.relevanceQuery`. + * @param ctx the parse tree + */ + exitRelevanceQuery?: (ctx: RelevanceQueryContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.relevanceArgValue`. + * @param ctx the parse tree + */ + enterRelevanceArgValue?: (ctx: RelevanceArgValueContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.relevanceArgValue`. + * @param ctx the parse tree + */ + exitRelevanceArgValue?: (ctx: RelevanceArgValueContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.mathematicalFunctionBase`. + * @param ctx the parse tree + */ + enterMathematicalFunctionBase?: (ctx: MathematicalFunctionBaseContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.mathematicalFunctionBase`. + * @param ctx the parse tree + */ + exitMathematicalFunctionBase?: (ctx: MathematicalFunctionBaseContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.trigonometricFunctionName`. + * @param ctx the parse tree + */ + enterTrigonometricFunctionName?: (ctx: TrigonometricFunctionNameContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.trigonometricFunctionName`. + * @param ctx the parse tree + */ + exitTrigonometricFunctionName?: (ctx: TrigonometricFunctionNameContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.dateAndTimeFunctionBase`. + * @param ctx the parse tree + */ + enterDateAndTimeFunctionBase?: (ctx: DateAndTimeFunctionBaseContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.dateAndTimeFunctionBase`. + * @param ctx the parse tree + */ + exitDateAndTimeFunctionBase?: (ctx: DateAndTimeFunctionBaseContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.constantFunctionName`. + * @param ctx the parse tree + */ + enterConstantFunctionName?: (ctx: ConstantFunctionNameContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.constantFunctionName`. + * @param ctx the parse tree + */ + exitConstantFunctionName?: (ctx: ConstantFunctionNameContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.conditionFunctionBase`. + * @param ctx the parse tree + */ + enterConditionFunctionBase?: (ctx: ConditionFunctionBaseContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.conditionFunctionBase`. + * @param ctx the parse tree + */ + exitConditionFunctionBase?: (ctx: ConditionFunctionBaseContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.systemFunctionBase`. + * @param ctx the parse tree + */ + enterSystemFunctionBase?: (ctx: SystemFunctionBaseContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.systemFunctionBase`. + * @param ctx the parse tree + */ + exitSystemFunctionBase?: (ctx: SystemFunctionBaseContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.textFunctionBase`. + * @param ctx the parse tree + */ + enterTextFunctionBase?: (ctx: TextFunctionBaseContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.textFunctionBase`. + * @param ctx the parse tree + */ + exitTextFunctionBase?: (ctx: TextFunctionBaseContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.comparisonOperator`. + * @param ctx the parse tree + */ + enterComparisonOperator?: (ctx: ComparisonOperatorContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.comparisonOperator`. + * @param ctx the parse tree + */ + exitComparisonOperator?: (ctx: ComparisonOperatorContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.binaryOperator`. + * @param ctx the parse tree + */ + enterBinaryOperator?: (ctx: BinaryOperatorContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.binaryOperator`. + * @param ctx the parse tree + */ + exitBinaryOperator?: (ctx: BinaryOperatorContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.singleFieldRelevanceFunctionName`. + * @param ctx the parse tree + */ + enterSingleFieldRelevanceFunctionName?: (ctx: SingleFieldRelevanceFunctionNameContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.singleFieldRelevanceFunctionName`. + * @param ctx the parse tree + */ + exitSingleFieldRelevanceFunctionName?: (ctx: SingleFieldRelevanceFunctionNameContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.multiFieldRelevanceFunctionName`. + * @param ctx the parse tree + */ + enterMultiFieldRelevanceFunctionName?: (ctx: MultiFieldRelevanceFunctionNameContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.multiFieldRelevanceFunctionName`. + * @param ctx the parse tree + */ + exitMultiFieldRelevanceFunctionName?: (ctx: MultiFieldRelevanceFunctionNameContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.literalValue`. + * @param ctx the parse tree + */ + enterLiteralValue?: (ctx: LiteralValueContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.literalValue`. + * @param ctx the parse tree + */ + exitLiteralValue?: (ctx: LiteralValueContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.intervalLiteral`. + * @param ctx the parse tree + */ + enterIntervalLiteral?: (ctx: IntervalLiteralContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.intervalLiteral`. + * @param ctx the parse tree + */ + exitIntervalLiteral?: (ctx: IntervalLiteralContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.stringLiteral`. + * @param ctx the parse tree + */ + enterStringLiteral?: (ctx: StringLiteralContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.stringLiteral`. + * @param ctx the parse tree + */ + exitStringLiteral?: (ctx: StringLiteralContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.integerLiteral`. + * @param ctx the parse tree + */ + enterIntegerLiteral?: (ctx: IntegerLiteralContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.integerLiteral`. + * @param ctx the parse tree + */ + exitIntegerLiteral?: (ctx: IntegerLiteralContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.decimalLiteral`. + * @param ctx the parse tree + */ + enterDecimalLiteral?: (ctx: DecimalLiteralContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.decimalLiteral`. + * @param ctx the parse tree + */ + exitDecimalLiteral?: (ctx: DecimalLiteralContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.booleanLiteral`. + * @param ctx the parse tree + */ + enterBooleanLiteral?: (ctx: BooleanLiteralContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.booleanLiteral`. + * @param ctx the parse tree + */ + exitBooleanLiteral?: (ctx: BooleanLiteralContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.datetimeLiteral`. + * @param ctx the parse tree + */ + enterDatetimeLiteral?: (ctx: DatetimeLiteralContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.datetimeLiteral`. + * @param ctx the parse tree + */ + exitDatetimeLiteral?: (ctx: DatetimeLiteralContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.dateLiteral`. + * @param ctx the parse tree + */ + enterDateLiteral?: (ctx: DateLiteralContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.dateLiteral`. + * @param ctx the parse tree + */ + exitDateLiteral?: (ctx: DateLiteralContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.timeLiteral`. + * @param ctx the parse tree + */ + enterTimeLiteral?: (ctx: TimeLiteralContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.timeLiteral`. + * @param ctx the parse tree + */ + exitTimeLiteral?: (ctx: TimeLiteralContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.timestampLiteral`. + * @param ctx the parse tree + */ + enterTimestampLiteral?: (ctx: TimestampLiteralContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.timestampLiteral`. + * @param ctx the parse tree + */ + exitTimestampLiteral?: (ctx: TimestampLiteralContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.intervalUnit`. + * @param ctx the parse tree + */ + enterIntervalUnit?: (ctx: IntervalUnitContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.intervalUnit`. + * @param ctx the parse tree + */ + exitIntervalUnit?: (ctx: IntervalUnitContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.timespanUnit`. + * @param ctx the parse tree + */ + enterTimespanUnit?: (ctx: TimespanUnitContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.timespanUnit`. + * @param ctx the parse tree + */ + exitTimespanUnit?: (ctx: TimespanUnitContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.valueList`. + * @param ctx the parse tree + */ + enterValueList?: (ctx: ValueListContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.valueList`. + * @param ctx the parse tree + */ + exitValueList?: (ctx: ValueListContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.qualifiedName`. + * @param ctx the parse tree + */ + enterQualifiedName?: (ctx: QualifiedNameContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.qualifiedName`. + * @param ctx the parse tree + */ + exitQualifiedName?: (ctx: QualifiedNameContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.wcQualifiedName`. + * @param ctx the parse tree + */ + enterWcQualifiedName?: (ctx: WcQualifiedNameContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.wcQualifiedName`. + * @param ctx the parse tree + */ + exitWcQualifiedName?: (ctx: WcQualifiedNameContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.ident`. + * @param ctx the parse tree + */ + enterIdent?: (ctx: IdentContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.ident`. + * @param ctx the parse tree + */ + exitIdent?: (ctx: IdentContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.wildcard`. + * @param ctx the parse tree + */ + enterWildcard?: (ctx: WildcardContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.wildcard`. + * @param ctx the parse tree + */ + exitWildcard?: (ctx: WildcardContext) => void; + + /** + * Enter a parse tree produced by `OpenSearchPPLParser.keywordsCanBeId`. + * @param ctx the parse tree + */ + enterKeywordsCanBeId?: (ctx: KeywordsCanBeIdContext) => void; + /** + * Exit a parse tree produced by `OpenSearchPPLParser.keywordsCanBeId`. + * @param ctx the parse tree + */ + exitKeywordsCanBeId?: (ctx: KeywordsCanBeIdContext) => void; +} + diff --git a/dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLParserVisitor.ts b/dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLParserVisitor.ts new file mode 100644 index 000000000..b9261e6a3 --- /dev/null +++ b/dashboards-observability/common/query_manager/antlr/output/OpenSearchPPLParserVisitor.ts @@ -0,0 +1,1038 @@ +// Generated from ./common/query_manager/antlr/grammar/OpenSearchPPLParser.g4 by ANTLR 4.9.0-SNAPSHOT + + +import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; + +import { BinaryArithmeticContext } from "./OpenSearchPPLParser"; +import { ParentheticBinaryArithmeticContext } from "./OpenSearchPPLParser"; +import { ValueExpressionDefaultContext } from "./OpenSearchPPLParser"; +import { CompareExprContext } from "./OpenSearchPPLParser"; +import { InExprContext } from "./OpenSearchPPLParser"; +import { IdentsAsWildcardQualifiedNameContext } from "./OpenSearchPPLParser"; +import { SearchFromContext } from "./OpenSearchPPLParser"; +import { SearchFromFilterContext } from "./OpenSearchPPLParser"; +import { SearchFilterFromContext } from "./OpenSearchPPLParser"; +import { StatsFunctionCallContext } from "./OpenSearchPPLParser"; +import { CountAllFunctionCallContext } from "./OpenSearchPPLParser"; +import { DistinctCountFunctionCallContext } from "./OpenSearchPPLParser"; +import { PercentileAggFunctionCallContext } from "./OpenSearchPPLParser"; +import { TakeAggFunctionCallContext } from "./OpenSearchPPLParser"; +import { IdentsAsQualifiedNameContext } from "./OpenSearchPPLParser"; +import { ComparsionContext } from "./OpenSearchPPLParser"; +import { LogicalNotContext } from "./OpenSearchPPLParser"; +import { LogicalOrContext } from "./OpenSearchPPLParser"; +import { LogicalAndContext } from "./OpenSearchPPLParser"; +import { LogicalXorContext } from "./OpenSearchPPLParser"; +import { BooleanExprContext } from "./OpenSearchPPLParser"; +import { RelevanceExprContext } from "./OpenSearchPPLParser"; +import { RootContext } from "./OpenSearchPPLParser"; +import { PplStatementContext } from "./OpenSearchPPLParser"; +import { PplCommandsContext } from "./OpenSearchPPLParser"; +import { CommandsContext } from "./OpenSearchPPLParser"; +import { SearchCommandContext } from "./OpenSearchPPLParser"; +import { DescribeCommandContext } from "./OpenSearchPPLParser"; +import { ShowCatalogsCommandContext } from "./OpenSearchPPLParser"; +import { WhereCommandContext } from "./OpenSearchPPLParser"; +import { FieldsCommandContext } from "./OpenSearchPPLParser"; +import { RenameCommandContext } from "./OpenSearchPPLParser"; +import { StatsCommandContext } from "./OpenSearchPPLParser"; +import { DedupCommandContext } from "./OpenSearchPPLParser"; +import { SortCommandContext } from "./OpenSearchPPLParser"; +import { EvalCommandContext } from "./OpenSearchPPLParser"; +import { HeadCommandContext } from "./OpenSearchPPLParser"; +import { TopCommandContext } from "./OpenSearchPPLParser"; +import { RareCommandContext } from "./OpenSearchPPLParser"; +import { GrokCommandContext } from "./OpenSearchPPLParser"; +import { ParseCommandContext } from "./OpenSearchPPLParser"; +import { PatternsCommandContext } from "./OpenSearchPPLParser"; +import { PatternsParameterContext } from "./OpenSearchPPLParser"; +import { PatternsMethodContext } from "./OpenSearchPPLParser"; +import { KmeansCommandContext } from "./OpenSearchPPLParser"; +import { KmeansParameterContext } from "./OpenSearchPPLParser"; +import { AdCommandContext } from "./OpenSearchPPLParser"; +import { AdParameterContext } from "./OpenSearchPPLParser"; +import { MlCommandContext } from "./OpenSearchPPLParser"; +import { MlArgContext } from "./OpenSearchPPLParser"; +import { FromClauseContext } from "./OpenSearchPPLParser"; +import { TableSourceClauseContext } from "./OpenSearchPPLParser"; +import { RenameClasueContext } from "./OpenSearchPPLParser"; +import { ByClauseContext } from "./OpenSearchPPLParser"; +import { StatsByClauseContext } from "./OpenSearchPPLParser"; +import { BySpanClauseContext } from "./OpenSearchPPLParser"; +import { SpanClauseContext } from "./OpenSearchPPLParser"; +import { SortbyClauseContext } from "./OpenSearchPPLParser"; +import { EvalClauseContext } from "./OpenSearchPPLParser"; +import { StatsAggTermContext } from "./OpenSearchPPLParser"; +import { StatsFunctionContext } from "./OpenSearchPPLParser"; +import { StatsFunctionNameContext } from "./OpenSearchPPLParser"; +import { TakeAggFunctionContext } from "./OpenSearchPPLParser"; +import { PercentileAggFunctionContext } from "./OpenSearchPPLParser"; +import { ExpressionContext } from "./OpenSearchPPLParser"; +import { LogicalExpressionContext } from "./OpenSearchPPLParser"; +import { ComparisonExpressionContext } from "./OpenSearchPPLParser"; +import { ValueExpressionContext } from "./OpenSearchPPLParser"; +import { PrimaryExpressionContext } from "./OpenSearchPPLParser"; +import { ConstantFunctionContext } from "./OpenSearchPPLParser"; +import { BooleanExpressionContext } from "./OpenSearchPPLParser"; +import { RelevanceExpressionContext } from "./OpenSearchPPLParser"; +import { SingleFieldRelevanceFunctionContext } from "./OpenSearchPPLParser"; +import { MultiFieldRelevanceFunctionContext } from "./OpenSearchPPLParser"; +import { TableSourceContext } from "./OpenSearchPPLParser"; +import { TableFunctionContext } from "./OpenSearchPPLParser"; +import { FieldListContext } from "./OpenSearchPPLParser"; +import { WcFieldListContext } from "./OpenSearchPPLParser"; +import { SortFieldContext } from "./OpenSearchPPLParser"; +import { SortFieldExpressionContext } from "./OpenSearchPPLParser"; +import { FieldExpressionContext } from "./OpenSearchPPLParser"; +import { WcFieldExpressionContext } from "./OpenSearchPPLParser"; +import { EvalFunctionCallContext } from "./OpenSearchPPLParser"; +import { DataTypeFunctionCallContext } from "./OpenSearchPPLParser"; +import { BooleanFunctionCallContext } from "./OpenSearchPPLParser"; +import { ConvertedDataTypeContext } from "./OpenSearchPPLParser"; +import { EvalFunctionNameContext } from "./OpenSearchPPLParser"; +import { FunctionArgsContext } from "./OpenSearchPPLParser"; +import { FunctionArgContext } from "./OpenSearchPPLParser"; +import { RelevanceArgContext } from "./OpenSearchPPLParser"; +import { RelevanceArgNameContext } from "./OpenSearchPPLParser"; +import { RelevanceFieldAndWeightContext } from "./OpenSearchPPLParser"; +import { RelevanceFieldWeightContext } from "./OpenSearchPPLParser"; +import { RelevanceFieldContext } from "./OpenSearchPPLParser"; +import { RelevanceQueryContext } from "./OpenSearchPPLParser"; +import { RelevanceArgValueContext } from "./OpenSearchPPLParser"; +import { MathematicalFunctionBaseContext } from "./OpenSearchPPLParser"; +import { TrigonometricFunctionNameContext } from "./OpenSearchPPLParser"; +import { DateAndTimeFunctionBaseContext } from "./OpenSearchPPLParser"; +import { ConstantFunctionNameContext } from "./OpenSearchPPLParser"; +import { ConditionFunctionBaseContext } from "./OpenSearchPPLParser"; +import { SystemFunctionBaseContext } from "./OpenSearchPPLParser"; +import { TextFunctionBaseContext } from "./OpenSearchPPLParser"; +import { ComparisonOperatorContext } from "./OpenSearchPPLParser"; +import { BinaryOperatorContext } from "./OpenSearchPPLParser"; +import { SingleFieldRelevanceFunctionNameContext } from "./OpenSearchPPLParser"; +import { MultiFieldRelevanceFunctionNameContext } from "./OpenSearchPPLParser"; +import { LiteralValueContext } from "./OpenSearchPPLParser"; +import { IntervalLiteralContext } from "./OpenSearchPPLParser"; +import { StringLiteralContext } from "./OpenSearchPPLParser"; +import { IntegerLiteralContext } from "./OpenSearchPPLParser"; +import { DecimalLiteralContext } from "./OpenSearchPPLParser"; +import { BooleanLiteralContext } from "./OpenSearchPPLParser"; +import { DatetimeLiteralContext } from "./OpenSearchPPLParser"; +import { DateLiteralContext } from "./OpenSearchPPLParser"; +import { TimeLiteralContext } from "./OpenSearchPPLParser"; +import { TimestampLiteralContext } from "./OpenSearchPPLParser"; +import { IntervalUnitContext } from "./OpenSearchPPLParser"; +import { TimespanUnitContext } from "./OpenSearchPPLParser"; +import { ValueListContext } from "./OpenSearchPPLParser"; +import { QualifiedNameContext } from "./OpenSearchPPLParser"; +import { WcQualifiedNameContext } from "./OpenSearchPPLParser"; +import { IdentContext } from "./OpenSearchPPLParser"; +import { WildcardContext } from "./OpenSearchPPLParser"; +import { KeywordsCanBeIdContext } from "./OpenSearchPPLParser"; + + +/** + * This interface defines a complete generic visitor for a parse tree produced + * by `OpenSearchPPLParser`. + * + * @param The return type of the visit operation. Use `void` for + * operations with no return type. + */ +export interface OpenSearchPPLParserVisitor extends ParseTreeVisitor { + /** + * Visit a parse tree produced by the `binaryArithmetic` + * labeled alternative in `OpenSearchPPLParser.valueExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBinaryArithmetic?: (ctx: BinaryArithmeticContext) => Result; + + /** + * Visit a parse tree produced by the `parentheticBinaryArithmetic` + * labeled alternative in `OpenSearchPPLParser.valueExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitParentheticBinaryArithmetic?: (ctx: ParentheticBinaryArithmeticContext) => Result; + + /** + * Visit a parse tree produced by the `valueExpressionDefault` + * labeled alternative in `OpenSearchPPLParser.valueExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitValueExpressionDefault?: (ctx: ValueExpressionDefaultContext) => Result; + + /** + * Visit a parse tree produced by the `compareExpr` + * labeled alternative in `OpenSearchPPLParser.comparisonExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCompareExpr?: (ctx: CompareExprContext) => Result; + + /** + * Visit a parse tree produced by the `inExpr` + * labeled alternative in `OpenSearchPPLParser.comparisonExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitInExpr?: (ctx: InExprContext) => Result; + + /** + * Visit a parse tree produced by the `identsAsWildcardQualifiedName` + * labeled alternative in `OpenSearchPPLParser.wcQualifiedName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIdentsAsWildcardQualifiedName?: (ctx: IdentsAsWildcardQualifiedNameContext) => Result; + + /** + * Visit a parse tree produced by the `searchFrom` + * labeled alternative in `OpenSearchPPLParser.searchCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSearchFrom?: (ctx: SearchFromContext) => Result; + + /** + * Visit a parse tree produced by the `searchFromFilter` + * labeled alternative in `OpenSearchPPLParser.searchCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSearchFromFilter?: (ctx: SearchFromFilterContext) => Result; + + /** + * Visit a parse tree produced by the `searchFilterFrom` + * labeled alternative in `OpenSearchPPLParser.searchCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSearchFilterFrom?: (ctx: SearchFilterFromContext) => Result; + + /** + * Visit a parse tree produced by the `statsFunctionCall` + * labeled alternative in `OpenSearchPPLParser.statsFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStatsFunctionCall?: (ctx: StatsFunctionCallContext) => Result; + + /** + * Visit a parse tree produced by the `countAllFunctionCall` + * labeled alternative in `OpenSearchPPLParser.statsFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCountAllFunctionCall?: (ctx: CountAllFunctionCallContext) => Result; + + /** + * Visit a parse tree produced by the `distinctCountFunctionCall` + * labeled alternative in `OpenSearchPPLParser.statsFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDistinctCountFunctionCall?: (ctx: DistinctCountFunctionCallContext) => Result; + + /** + * Visit a parse tree produced by the `percentileAggFunctionCall` + * labeled alternative in `OpenSearchPPLParser.statsFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPercentileAggFunctionCall?: (ctx: PercentileAggFunctionCallContext) => Result; + + /** + * Visit a parse tree produced by the `takeAggFunctionCall` + * labeled alternative in `OpenSearchPPLParser.statsFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTakeAggFunctionCall?: (ctx: TakeAggFunctionCallContext) => Result; + + /** + * Visit a parse tree produced by the `identsAsQualifiedName` + * labeled alternative in `OpenSearchPPLParser.qualifiedName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIdentsAsQualifiedName?: (ctx: IdentsAsQualifiedNameContext) => Result; + + /** + * Visit a parse tree produced by the `comparsion` + * labeled alternative in `OpenSearchPPLParser.logicalExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitComparsion?: (ctx: ComparsionContext) => Result; + + /** + * Visit a parse tree produced by the `logicalNot` + * labeled alternative in `OpenSearchPPLParser.logicalExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLogicalNot?: (ctx: LogicalNotContext) => Result; + + /** + * Visit a parse tree produced by the `logicalOr` + * labeled alternative in `OpenSearchPPLParser.logicalExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLogicalOr?: (ctx: LogicalOrContext) => Result; + + /** + * Visit a parse tree produced by the `logicalAnd` + * labeled alternative in `OpenSearchPPLParser.logicalExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLogicalAnd?: (ctx: LogicalAndContext) => Result; + + /** + * Visit a parse tree produced by the `logicalXor` + * labeled alternative in `OpenSearchPPLParser.logicalExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLogicalXor?: (ctx: LogicalXorContext) => Result; + + /** + * Visit a parse tree produced by the `booleanExpr` + * labeled alternative in `OpenSearchPPLParser.logicalExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBooleanExpr?: (ctx: BooleanExprContext) => Result; + + /** + * Visit a parse tree produced by the `relevanceExpr` + * labeled alternative in `OpenSearchPPLParser.logicalExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRelevanceExpr?: (ctx: RelevanceExprContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.root`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRoot?: (ctx: RootContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.pplStatement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPplStatement?: (ctx: PplStatementContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.pplCommands`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPplCommands?: (ctx: PplCommandsContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.commands`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCommands?: (ctx: CommandsContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.searchCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSearchCommand?: (ctx: SearchCommandContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.describeCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDescribeCommand?: (ctx: DescribeCommandContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.showCatalogsCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowCatalogsCommand?: (ctx: ShowCatalogsCommandContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.whereCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWhereCommand?: (ctx: WhereCommandContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.fieldsCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFieldsCommand?: (ctx: FieldsCommandContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.renameCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRenameCommand?: (ctx: RenameCommandContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.statsCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStatsCommand?: (ctx: StatsCommandContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.dedupCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDedupCommand?: (ctx: DedupCommandContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.sortCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSortCommand?: (ctx: SortCommandContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.evalCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitEvalCommand?: (ctx: EvalCommandContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.headCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitHeadCommand?: (ctx: HeadCommandContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.topCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTopCommand?: (ctx: TopCommandContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.rareCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRareCommand?: (ctx: RareCommandContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.grokCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGrokCommand?: (ctx: GrokCommandContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.parseCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitParseCommand?: (ctx: ParseCommandContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.patternsCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPatternsCommand?: (ctx: PatternsCommandContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.patternsParameter`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPatternsParameter?: (ctx: PatternsParameterContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.patternsMethod`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPatternsMethod?: (ctx: PatternsMethodContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.kmeansCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitKmeansCommand?: (ctx: KmeansCommandContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.kmeansParameter`. + * @param ctx the parse tree + * @return the visitor result + */ + visitKmeansParameter?: (ctx: KmeansParameterContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.adCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAdCommand?: (ctx: AdCommandContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.adParameter`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAdParameter?: (ctx: AdParameterContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.mlCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMlCommand?: (ctx: MlCommandContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.mlArg`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMlArg?: (ctx: MlArgContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.fromClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFromClause?: (ctx: FromClauseContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.tableSourceClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTableSourceClause?: (ctx: TableSourceClauseContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.renameClasue`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRenameClasue?: (ctx: RenameClasueContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.byClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitByClause?: (ctx: ByClauseContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.statsByClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStatsByClause?: (ctx: StatsByClauseContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.bySpanClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBySpanClause?: (ctx: BySpanClauseContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.spanClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSpanClause?: (ctx: SpanClauseContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.sortbyClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSortbyClause?: (ctx: SortbyClauseContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.evalClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitEvalClause?: (ctx: EvalClauseContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.statsAggTerm`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStatsAggTerm?: (ctx: StatsAggTermContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.statsFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStatsFunction?: (ctx: StatsFunctionContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.statsFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStatsFunctionName?: (ctx: StatsFunctionNameContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.takeAggFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTakeAggFunction?: (ctx: TakeAggFunctionContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.percentileAggFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPercentileAggFunction?: (ctx: PercentileAggFunctionContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.expression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExpression?: (ctx: ExpressionContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.logicalExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLogicalExpression?: (ctx: LogicalExpressionContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.comparisonExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitComparisonExpression?: (ctx: ComparisonExpressionContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.valueExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitValueExpression?: (ctx: ValueExpressionContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPrimaryExpression?: (ctx: PrimaryExpressionContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.constantFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitConstantFunction?: (ctx: ConstantFunctionContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.booleanExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBooleanExpression?: (ctx: BooleanExpressionContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.relevanceExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRelevanceExpression?: (ctx: RelevanceExpressionContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.singleFieldRelevanceFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSingleFieldRelevanceFunction?: (ctx: SingleFieldRelevanceFunctionContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.multiFieldRelevanceFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMultiFieldRelevanceFunction?: (ctx: MultiFieldRelevanceFunctionContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.tableSource`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTableSource?: (ctx: TableSourceContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.tableFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTableFunction?: (ctx: TableFunctionContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.fieldList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFieldList?: (ctx: FieldListContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.wcFieldList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWcFieldList?: (ctx: WcFieldListContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.sortField`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSortField?: (ctx: SortFieldContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.sortFieldExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSortFieldExpression?: (ctx: SortFieldExpressionContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.fieldExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFieldExpression?: (ctx: FieldExpressionContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.wcFieldExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWcFieldExpression?: (ctx: WcFieldExpressionContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.evalFunctionCall`. + * @param ctx the parse tree + * @return the visitor result + */ + visitEvalFunctionCall?: (ctx: EvalFunctionCallContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.dataTypeFunctionCall`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDataTypeFunctionCall?: (ctx: DataTypeFunctionCallContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.booleanFunctionCall`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBooleanFunctionCall?: (ctx: BooleanFunctionCallContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.convertedDataType`. + * @param ctx the parse tree + * @return the visitor result + */ + visitConvertedDataType?: (ctx: ConvertedDataTypeContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.evalFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitEvalFunctionName?: (ctx: EvalFunctionNameContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.functionArgs`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFunctionArgs?: (ctx: FunctionArgsContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.functionArg`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFunctionArg?: (ctx: FunctionArgContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.relevanceArg`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRelevanceArg?: (ctx: RelevanceArgContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.relevanceArgName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRelevanceArgName?: (ctx: RelevanceArgNameContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.relevanceFieldAndWeight`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRelevanceFieldAndWeight?: (ctx: RelevanceFieldAndWeightContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.relevanceFieldWeight`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRelevanceFieldWeight?: (ctx: RelevanceFieldWeightContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.relevanceField`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRelevanceField?: (ctx: RelevanceFieldContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.relevanceQuery`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRelevanceQuery?: (ctx: RelevanceQueryContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.relevanceArgValue`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRelevanceArgValue?: (ctx: RelevanceArgValueContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.mathematicalFunctionBase`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMathematicalFunctionBase?: (ctx: MathematicalFunctionBaseContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.trigonometricFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTrigonometricFunctionName?: (ctx: TrigonometricFunctionNameContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.dateAndTimeFunctionBase`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDateAndTimeFunctionBase?: (ctx: DateAndTimeFunctionBaseContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.constantFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitConstantFunctionName?: (ctx: ConstantFunctionNameContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.conditionFunctionBase`. + * @param ctx the parse tree + * @return the visitor result + */ + visitConditionFunctionBase?: (ctx: ConditionFunctionBaseContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.systemFunctionBase`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSystemFunctionBase?: (ctx: SystemFunctionBaseContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.textFunctionBase`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTextFunctionBase?: (ctx: TextFunctionBaseContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.comparisonOperator`. + * @param ctx the parse tree + * @return the visitor result + */ + visitComparisonOperator?: (ctx: ComparisonOperatorContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.binaryOperator`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBinaryOperator?: (ctx: BinaryOperatorContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.singleFieldRelevanceFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSingleFieldRelevanceFunctionName?: (ctx: SingleFieldRelevanceFunctionNameContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.multiFieldRelevanceFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMultiFieldRelevanceFunctionName?: (ctx: MultiFieldRelevanceFunctionNameContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.literalValue`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLiteralValue?: (ctx: LiteralValueContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.intervalLiteral`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIntervalLiteral?: (ctx: IntervalLiteralContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.stringLiteral`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStringLiteral?: (ctx: StringLiteralContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.integerLiteral`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIntegerLiteral?: (ctx: IntegerLiteralContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.decimalLiteral`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDecimalLiteral?: (ctx: DecimalLiteralContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.booleanLiteral`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBooleanLiteral?: (ctx: BooleanLiteralContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.datetimeLiteral`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDatetimeLiteral?: (ctx: DatetimeLiteralContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.dateLiteral`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDateLiteral?: (ctx: DateLiteralContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.timeLiteral`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTimeLiteral?: (ctx: TimeLiteralContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.timestampLiteral`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTimestampLiteral?: (ctx: TimestampLiteralContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.intervalUnit`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIntervalUnit?: (ctx: IntervalUnitContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.timespanUnit`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTimespanUnit?: (ctx: TimespanUnitContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.valueList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitValueList?: (ctx: ValueListContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.qualifiedName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQualifiedName?: (ctx: QualifiedNameContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.wcQualifiedName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWcQualifiedName?: (ctx: WcQualifiedNameContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.ident`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIdent?: (ctx: IdentContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.wildcard`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWildcard?: (ctx: WildcardContext) => Result; + + /** + * Visit a parse tree produced by `OpenSearchPPLParser.keywordsCanBeId`. + * @param ctx the parse tree + * @return the visitor result + */ + visitKeywordsCanBeId?: (ctx: KeywordsCanBeIdContext) => Result; +} + diff --git a/dashboards-observability/common/query_manager/antlr/ppl_syntax_parser.ts b/dashboards-observability/common/query_manager/antlr/ppl_syntax_parser.ts new file mode 100644 index 000000000..6f62bce1c --- /dev/null +++ b/dashboards-observability/common/query_manager/antlr/ppl_syntax_parser.ts @@ -0,0 +1,30 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { CharStreams, CommonTokenStream } from 'antlr4ts'; +import { CaseInsensitiveCharStream } from './adaptors/case_insensitive_char_stream'; +import { OpenSearchPPLLexer } from './output/OpenSearchPPLLexer'; +import { OpenSearchPPLParser } from './output/OpenSearchPPLParser'; + +/** + * PPL Syntax Parser. + */ +export class PPLSyntaxParser { + /** + * Analyze the query syntax. + */ + + parse(query: string) { + return this.createParser(this.createLexer(query)); + } + + createLexer(query: string) { + return new OpenSearchPPLLexer(new CaseInsensitiveCharStream(CharStreams.fromString(query))); + } + + createParser(lexer: OpenSearchPPLLexer) { + return new OpenSearchPPLParser(new CommonTokenStream(lexer)); + } +} diff --git a/dashboards-observability/common/query_manager/ast/builder/query_builder.ts b/dashboards-observability/common/query_manager/ast/builder/query_builder.ts new file mode 100644 index 000000000..a6b6494c0 --- /dev/null +++ b/dashboards-observability/common/query_manager/ast/builder/query_builder.ts @@ -0,0 +1,8 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +export interface QueryBuilder { + build: () => T; +} diff --git a/dashboards-observability/common/query_manager/ast/builder/stats_ast_builder.ts b/dashboards-observability/common/query_manager/ast/builder/stats_ast_builder.ts new file mode 100644 index 000000000..6a396654a --- /dev/null +++ b/dashboards-observability/common/query_manager/ast/builder/stats_ast_builder.ts @@ -0,0 +1,232 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { isFunction, isEqual } from 'lodash'; +import { AbstractParseTreeVisitor } from 'antlr4ts/tree/AbstractParseTreeVisitor'; +import { + RootContext, + PplStatementContext, + CommandsContext, + StatsCommandContext, + BooleanLiteralContext, + BySpanClauseContext, + FieldExpressionContext, + FieldListContext, + IntegerLiteralContext, + LiteralValueContext, + QualifiedNameContext, + SpanClauseContext, + StatsAggTermContext, + StatsByClauseContext, + StatsFunctionContext, + StatsFunctionNameContext, + StringLiteralContext, + TimespanUnitContext, + ValueExpressionContext, + WcFieldExpressionContext, +} from '../../antlr/output/OpenSearchPPLParser'; +import { OpenSearchPPLParserVisitor } from '../../antlr/output/OpenSearchPPLParserVisitor'; +import { PPLNode } from '../node'; +import { Aggregations } from '../tree/aggragations'; +import { + AggregateFunction, + AggregateTerm, + GroupBy, + Field, + Span, + SpanExpression, +} from '../expression'; + +type VisitResult = PPLNode | Array | string; + +export class StatsAstBuilder + extends AbstractParseTreeVisitor + implements OpenSearchPPLParserVisitor { + protected defaultResult(): PPLNode { + return new PPLNode('default', [] as Array); + } + + visitRoot(ctx: RootContext) { + if (!ctx.pplStatement()) return this.defaultResult(); + return this.visitPplStatement(ctx.pplStatement()!); + } + + visitPplStatement(ctx: PplStatementContext): PPLNode { + let statsTree: VisitResult = this.defaultResult(); + ctx.commands().map((pplCommandContext) => { + if ( + isFunction(this.visitChildren(pplCommandContext).getName) && + isEqual(this.visitChildren(pplCommandContext).getName(), 'stats_command') + ) + statsTree = this.visitChildren(pplCommandContext); + }); + return statsTree; + } + + visitCommands(ctx: CommandsContext) { + if (ctx.statsCommand()) { + return this.visitStatsCommand(ctx.statsCommand()!); + } + return this.defaultResult(); + } + + /** + * Stats command + */ + visitStatsCommand(ctx: StatsCommandContext): PPLNode { + return new Aggregations( + 'stats_command', + [] as Array, + ctx.PARTITIONS() && ctx.integerLiteral() + ? { + keyword: ctx.PARTITIONS()?.text, + sign: '=', + value: ctx.integerLiteral()?.text, + } + : {}, // visit partitions partial + ctx.ALLNUM() && ctx.booleanLiteral() + ? { + keyword: ctx.ALLNUM()?.text, + sign: '=', + value: this.visitBooleanLiteral(ctx.booleanLiteral()[0]), + } + : {}, // visit allnum partial + ctx.DELIM() && ctx.stringLiteral() + ? { + keyword: ctx.DELIM()?.text, + sign: '=', + value: this.visitStringLiteral(ctx.stringLiteral()!), + } + : '', // visit delim partial + ctx.statsAggTerm().map((aggTermAlternative) => this.visitStatsAggTerm(aggTermAlternative)), // visit statsAggTerm + ctx.statsByClause() ? this.visitStatsByClause(ctx.statsByClause()!) : ({} as GroupBy), // visit group list + ctx.DEDUP_SPLITVALUES() && ctx.booleanLiteral() + ? { + keyword: ctx.DEDUP_SPLITVALUES()?.text, + sign: '=', + value: this.visitBooleanLiteral(ctx.booleanLiteral()[1]), + } + : '', // visit dedup split value + { + start: ctx.start.startIndex, + end: ctx.stop?.stopIndex, + } // stats start/end indices in query for later query concatenation + ); + } + + visitIntegerLiteral(ctx: IntegerLiteralContext): string { + return ctx.text; + } + + visitBooleanLiteral(ctx: BooleanLiteralContext): string { + return ctx.text; + } + + visitStringLiteral(ctx: StringLiteralContext): string { + return ctx.text; + } + + visitStatsAggTerm(ctx: StatsAggTermContext): PPLNode { + return new AggregateTerm( + 'stats_agg_term', + [] as Array, + this.visitStatsFunction(ctx.statsFunction()), + ctx.wcFieldExpression() ? this.visitWcFieldExpression(ctx.wcFieldExpression()!) : '' + ); + } + + visitWcFieldExpression(ctx: WcFieldExpressionContext): string { + // return only text from here to all its chilren for now + return ctx.wcQualifiedName().text; + } + + visitStatsByClause(ctx: StatsByClauseContext): PPLNode { + return new GroupBy( + 'stats_by_clause', + [] as Array, + ctx.fieldList() ? this.visitFieldList(ctx.fieldList()!) : [], + ctx.bySpanClause() ? this.visitBySpanClause(ctx.bySpanClause()!) : this.defaultResult() + ); + } + + visitBySpanClause(ctx: BySpanClauseContext): PPLNode { + return new Span( + 'span_clause', + [] as Array, + this.visitSpanClause(ctx.spanClause()), + ctx.qualifiedName() ? this.visitQualifiedName(ctx.qualifiedName()!) : '' + ); + } + + visitSpanClause(ctx: SpanClauseContext): PPLNode { + return new SpanExpression( + 'span_expression', + [] as Array, + this.visitFieldExpression(ctx.fieldExpression()), + this.visitLiteralValue(ctx.literalValue()), + ctx.timespanUnit() ? this.visitTimespanUnit(ctx.timespanUnit()!) : '' + ); + } + + visitLiteralValue(ctx: LiteralValueContext): string { + return ctx.text; + } + + visitTimespanUnit(ctx: TimespanUnitContext): string { + return ctx.text; + } + + visitStatsFunction(ctx: StatsFunctionContext): PPLNode { + let funcName = ''; + let valueExpr = ''; + + if (typeof ctx.valueExpression === 'function') { + valueExpr = this.visitValueExpression(ctx.valueExpression()); + if (typeof ctx.statsFunctionName === 'function') { + funcName = this.visitStatsFunctionName(ctx.statsFunctionName()); + } else { + funcName = ctx.DISTINCT_COUNT() ? ctx.DISTINCT_COUNT().text : ctx.DC().text; + } + } else if (typeof ctx.percentileAggFunction === 'function') { + // for now just return plain text + } else { + funcName = ctx.COUNT().text; + } + + return new AggregateFunction( + 'stats_function', + [] as Array, + funcName, + valueExpr, + typeof ctx.percentileAggFunction === 'function' ? ctx.text : '' + ); + } + + visitValueExpression(ctx: ValueExpressionContext): string { + return ctx.text; + } + + visitStatsFunctionName(ctx: StatsFunctionNameContext): string { + return ctx.text; + } + + visitFieldList(ctx: FieldListContext): Array { + return ctx.fieldExpression().map((fieldExprAlternative) => { + return new Field( + 'field_expression', + [] as Array, + this.visitFieldExpression(fieldExprAlternative) + ); + }); + } + + visitFieldExpression(ctx: FieldExpressionContext): string { + return this.visitQualifiedName(ctx.qualifiedName()); + } + + visitQualifiedName(ctx: QualifiedNameContext): string { + return ctx.text; + } +} diff --git a/dashboards-observability/common/query_manager/ast/builder/stats_builder.ts b/dashboards-observability/common/query_manager/ast/builder/stats_builder.ts new file mode 100644 index 000000000..064ac8c5d --- /dev/null +++ b/dashboards-observability/common/query_manager/ast/builder/stats_builder.ts @@ -0,0 +1,136 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { isEmpty } from 'lodash'; +import { QueryBuilder } from './query_builder'; +import { Aggregations } from '../tree/aggragations'; +import { PPLNode } from '../node'; +import { + AggregateFunction, + AggregateTerm, + Field, + GroupBy, + Span, + SpanExpression, +} from '../expression'; +import { + ExpressionChunk, + SpanChunk, + StatsAggregationChunk, + StatsAggregationFunctionChunk, + GroupByChunk, + GroupField, + StatsChunk, + SpanExpressionChunk, +} from '../types'; +import { CUSTOM_LABEL } from '../../../../common/constants/explorer'; + +export class StatsBuilder implements QueryBuilder { + constructor(private statsChunk: StatsChunk) {} + + build(): Aggregations { + // return a new stats subtree + return new Aggregations( + 'stats_command', + [] as PPLNode[], + !isEmpty(this.statsChunk.partitions) ? this.buildParttions(this.statsChunk.partitions) : '', + !isEmpty(this.statsChunk.all_num) ? this.buildAllNum(this.statsChunk.all_num) : '', + !isEmpty(this.statsChunk.delim) ? this.buildDelim(this.statsChunk.delim) : '', + !isEmpty(this.statsChunk.aggregations) + ? this.buildAggList(this.statsChunk.aggregations) + : ([] as PPLNode[]), + !isEmpty(this.statsChunk.groupby) + ? this.buildGroupList(this.statsChunk.groupby) + : new GroupBy('stats_by_clause', [] as PPLNode[], [], null), + !isEmpty(this.statsChunk.dedup_split_value) + ? this.buildDedupSplitValue(this.statsChunk.dedup_split_value) + : '' + ); + } + + /** + * Flags + */ + buildParttions(partitions: ExpressionChunk) { + return `${partitions.keyword} ${partitions.sign} ${partitions.value}`; + } + + buildAllNum(allNum: ExpressionChunk) { + return `${allNum.keyword} ${allNum.sign} ${allNum.value}`; + } + + buildDelim(delim: ExpressionChunk) { + return `${delim.keyword} ${delim.sign} ${delim.value}`; + } + + buildDedupSplitValue(dedupSplitvalue: ExpressionChunk) { + return `${dedupSplitvalue.keyword} ${dedupSplitvalue.sign} ${dedupSplitvalue.value}`; + } + + /** + * Aggregations + */ + buildAggList(aggregations: StatsAggregationChunk[]) { + return aggregations.map((aggregation) => { + return this.buildAggTerm(aggregation); + }); + } + + buildAggTerm(aggTerm: StatsAggregationChunk) { + return new AggregateTerm( + 'stats_agg_term', + [] as PPLNode[], + this.buildAggregateFunction(aggTerm.function), + aggTerm.function_alias + ); + } + + buildAggregateFunction(aggFunction: StatsAggregationFunctionChunk) { + return new AggregateFunction( + 'stats_function', + [] as PPLNode[], + aggFunction.name, + aggFunction.value_expression, + aggFunction.percentile_agg_function + ); + } + + /** + * Groups + */ + buildGroupList(groupby: GroupByChunk) { + return new GroupBy( + 'stats_by_clause', + [] as PPLNode[], + this.buildFieldList(groupby.group_fields), + groupby.span ? this.buildSpan(groupby.span) : null + ); + } + + buildFieldList(group_fields: GroupField[]) { + return group_fields.map((gf: GroupField) => { + return new Field('field_expression', [] as PPLNode[], gf.name); + }); + } + + buildSpan(span: SpanChunk) { + return new Span( + 'span_clause', + [] as PPLNode[], + this.buildeSpanExpression(span.span_expression), + span[CUSTOM_LABEL] + ); + } + + buildeSpanExpression(spanExpression: SpanExpressionChunk) { + return new SpanExpression( + 'span_expression', + [] as PPLNode[], + spanExpression.field, + spanExpression.literal_value, + spanExpression.time_unit + ); + } +} diff --git a/dashboards-observability/common/query_manager/ast/expression/AggregateFunction.ts b/dashboards-observability/common/query_manager/ast/expression/AggregateFunction.ts new file mode 100644 index 000000000..06c05cec6 --- /dev/null +++ b/dashboards-observability/common/query_manager/ast/expression/AggregateFunction.ts @@ -0,0 +1,37 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { PPLNode } from '../node'; + +export class AggregateFunction extends PPLNode { + constructor( + name: string, + children: Array, + private statsFunctionName: string, + private valueExpression: string, + private percentileAggFunction: string + ) { + super(name, children); + } + + getTokens() { + return { + name: this.statsFunctionName, + value_expression: this.valueExpression, + percentile_agg_function: this.percentileAggFunction, + }; + } + + toString(): string { + if (this.statsFunctionName && this.valueExpression) { + return `${this.statsFunctionName}(${this.valueExpression})`; + } else if (this.statsFunctionName) { + return `${this.statsFunctionName}()`; + } else if (this.percentileAggFunction) { + return `${this.percentileAggFunction}`; + } + return ''; + } +} diff --git a/dashboards-observability/common/query_manager/ast/expression/AggregateTerm.ts b/dashboards-observability/common/query_manager/ast/expression/AggregateTerm.ts new file mode 100644 index 000000000..9864bbfcd --- /dev/null +++ b/dashboards-observability/common/query_manager/ast/expression/AggregateTerm.ts @@ -0,0 +1,32 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ +import { CUSTOM_LABEL } from '../../../../common/constants/explorer'; +import { PPLNode } from '../node'; +export class AggregateTerm extends PPLNode { + constructor( + name: string, + children: PPLNode[], + private statsFunction: PPLNode, + private customLabel: string + ) { + super(name, children); + } + + getTokens() { + return { + function: this.statsFunction.getTokens(), + [CUSTOM_LABEL]: this[CUSTOM_LABEL], + }; + } + + toString(): string { + if (this[CUSTOM_LABEL]) { + return `${this.statsFunction.toString()}${ + this[CUSTOM_LABEL] ? ` as ${this[CUSTOM_LABEL]}` : '' + }`; + } + return `${this.statsFunction.toString()}`; + } +} diff --git a/dashboards-observability/common/query_manager/ast/expression/field.ts b/dashboards-observability/common/query_manager/ast/expression/field.ts new file mode 100644 index 000000000..3bc35ce70 --- /dev/null +++ b/dashboards-observability/common/query_manager/ast/expression/field.ts @@ -0,0 +1,20 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { PPLNode } from '../node'; + +export class Field extends PPLNode { + constructor(name: string, children: Array, private fieldExpression: string) { + super(name, children); + } + + getTokens() { + return { name: this.fieldExpression ?? '' }; + } + + toString(): string { + return this.fieldExpression ?? ''; + } +} diff --git a/dashboards-observability/common/query_manager/ast/expression/group_by.ts b/dashboards-observability/common/query_manager/ast/expression/group_by.ts new file mode 100644 index 000000000..1d0a1ad07 --- /dev/null +++ b/dashboards-observability/common/query_manager/ast/expression/group_by.ts @@ -0,0 +1,35 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { isEmpty } from 'lodash'; +import { PPLNode } from '../node'; +import { Field } from './field'; + +export class GroupBy extends PPLNode { + constructor( + name: string, + children: Array, + private fields: Array, + private span: PPLNode | null + ) { + super(name, children); + } + + getTokens() { + return { + group_fields: this.fields.map((field) => field.getTokens()), + span: this.span?.getTokens(), + }; + } + + toString(): string { + return ( + `${!isEmpty(this.fields) || !isEmpty(this.span) ? 'by ' : ''}` + + `${ + !isEmpty(this.span) ? `${this.span.toString()}${this.fields.length > 0 ? ', ' : ''}` : '' + }${this.fields.map((field) => field.toString()).join(', ')}` + ); + } +} diff --git a/dashboards-observability/common/query_manager/ast/expression/index.ts b/dashboards-observability/common/query_manager/ast/expression/index.ts new file mode 100644 index 000000000..222ca12ca --- /dev/null +++ b/dashboards-observability/common/query_manager/ast/expression/index.ts @@ -0,0 +1,6 @@ +export { AggregateFunction } from './AggregateFunction'; +export { AggregateTerm } from './AggregateTerm'; +export { GroupBy } from './group_by'; +export { Span } from './span'; +export { SpanExpression } from './spanExpression'; +export { Field } from './field'; diff --git a/dashboards-observability/common/query_manager/ast/expression/span.ts b/dashboards-observability/common/query_manager/ast/expression/span.ts new file mode 100644 index 000000000..278ca18eb --- /dev/null +++ b/dashboards-observability/common/query_manager/ast/expression/span.ts @@ -0,0 +1,28 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { PPLNode } from '../node'; + +export class Span extends PPLNode { + constructor( + name: string, + children: PPLNode[], + private spanExpression: PPLNode, + private customLabel: string + ) { + super(name, children); + } + + getTokens() { + return { + span_expression: this.spanExpression.getTokens(), + customLabel: this.customLabel, + }; + } + + toString(): string { + return `${this.spanExpression.toString()}${this.customLabel ? ` as ${this.customLabel}` : ''}`; + } +} diff --git a/dashboards-observability/common/query_manager/ast/expression/spanExpression.ts b/dashboards-observability/common/query_manager/ast/expression/spanExpression.ts new file mode 100644 index 000000000..c3f8d15ed --- /dev/null +++ b/dashboards-observability/common/query_manager/ast/expression/spanExpression.ts @@ -0,0 +1,30 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { PPLNode } from '../node'; + +export class SpanExpression extends PPLNode { + constructor( + name: string, + children: Array, + private fieldExpression: string, + private literalValue: string, + private timeUnit: string + ) { + super(name, children); + } + + getTokens() { + return { + field: this.fieldExpression, + literal_value: this.literalValue, + time_unit: this.timeUnit, + }; + } + + toString(): string { + return `span(${this.fieldExpression}, ${this.literalValue}${this.timeUnit})`; + } +} diff --git a/dashboards-observability/common/query_manager/ast/index.ts b/dashboards-observability/common/query_manager/ast/index.ts new file mode 100644 index 000000000..eb0dbf6a7 --- /dev/null +++ b/dashboards-observability/common/query_manager/ast/index.ts @@ -0,0 +1,6 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +export { PPLNode } from './node'; diff --git a/dashboards-observability/common/query_manager/ast/node.ts b/dashboards-observability/common/query_manager/ast/node.ts new file mode 100644 index 000000000..c28877369 --- /dev/null +++ b/dashboards-observability/common/query_manager/ast/node.ts @@ -0,0 +1,31 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +interface PPLNodeProps { + getName: () => string; + getChildren: () => Array; + toString: () => string; + getTokens: () => any; +} + +export class PPLNode implements PPLNodeProps { + constructor(private name: string, private children: Array) {} + + getChildren(): Array { + return this.children; + } + + getName(): string { + return this.name; + } + + toString(): string { + return ''; + } + + getTokens(): any { + return null; + } +} diff --git a/dashboards-observability/common/query_manager/ast/tree/aggragations.ts b/dashboards-observability/common/query_manager/ast/tree/aggragations.ts new file mode 100644 index 000000000..39281a0a7 --- /dev/null +++ b/dashboards-observability/common/query_manager/ast/tree/aggragations.ts @@ -0,0 +1,58 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { isEmpty } from 'lodash'; +import { PPLNode } from '../node'; +import { GroupBy } from '../expression/group_by'; + +export class Aggregations extends PPLNode { + constructor( + name: string, + children: Array, + private partitions: String, + private allNum: string, + private delim: string, + private aggExprList: Array, + private groupExprList: GroupBy, + private dedupSplitValue: string, + private indices?: { start: number; end: number } + ) { + super(name, children); + } + + getStartEndIndicesOfOriginQuery(): { start: number; end: number } { + if (this.indices === undefined) { + return { + start: -1, + end: -1, + }; + } + return { + start: this.indices.start, + end: this.indices.end, + }; + } + + getTokens() { + return { + partitions: this.partitions, + all_num: this.allNum, + delim: this.delim, + aggregations: this.aggExprList.map((aggTerm) => aggTerm.getTokens()), + groupby: !isEmpty(this.groupExprList) ? this.groupExprList.getTokens() : '', + dedup_split_value: this.dedupSplitValue, + }; + } + + toString() { + return `stats ${!isEmpty(this.partitions) ? `${this.partitions} ` : ''}${ + !isEmpty(this.allNum) ? `${this.allNum} ` : '' + }${!isEmpty(this.delim) ? `${this.delim} ` : ''}${this.aggExprList + .map((aggTerm) => aggTerm.toString()) + .join(', ')}${!isEmpty(this.groupExprList) ? ` ${this.groupExprList.toString()}` : ''}${ + !isEmpty(this.dedupSplitValue) ? ` ${this.dedupSplitValue}` : '' + }`; + } +} diff --git a/dashboards-observability/common/query_manager/ast/types/index.ts b/dashboards-observability/common/query_manager/ast/types/index.ts new file mode 100644 index 000000000..3256b0992 --- /dev/null +++ b/dashboards-observability/common/query_manager/ast/types/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +export { + ExpressionChunk, + SpanChunk, + StatsAggregationChunk, + StatsAggregationFunctionChunk, + GroupByChunk, + GroupField, + StatsChunk, + SpanExpressionChunk, + AggregationConfigurations, + PreviouslyParsedStaleStats +} from './stats'; diff --git a/dashboards-observability/common/query_manager/ast/types/stats.ts b/dashboards-observability/common/query_manager/ast/types/stats.ts new file mode 100644 index 000000000..a67565042 --- /dev/null +++ b/dashboards-observability/common/query_manager/ast/types/stats.ts @@ -0,0 +1,75 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * stats chunck types + */ +export interface StatsAggregationChunk { + function: StatsAggregationFunctionChunk; + function_alias: string; +} + +export interface StatsAggregationFunctionChunk { + name: string; + value_expression: string; + percentile_agg_function: string; +} + +export interface GroupField { + name: string; +} + +export interface SpanChunk { + customLabel: string; + span_expression: SpanExpressionChunk; +} + +export interface SpanExpressionChunk { + type: string; + field: string; + time_unit: string; + literal_value: string; +} + +export interface GroupByChunk { + group_fields: GroupField[]; + span: SpanChunk | null; +} + +export interface statsChunk { + aggregations: StatsAggregationChunk[]; + groupby: GroupByChunk; + partitions: ExpressionChunk; + all_num: ExpressionChunk; + delim: ExpressionChunk; + dedup_split_value: ExpressionChunk; +} + +export interface ExpressionChunk { + keyword: string; + sign: string; + value: string | number; +} + +export interface DataConfigSeries { + customLabel: string; + label: string; + name: string; + aggregation: string; +} + +export interface AggregationConfigurations { + series: DataConfigSeries[]; + dimensions: GroupField[]; + span: SpanChunk; + breakdowns: GroupField[]; +} + +export interface PreviouslyParsedStaleStats { + partitions: ExpressionChunk; + all_num: ExpressionChunk; + delim: ExpressionChunk; + dedup_split_value: ExpressionChunk; +} diff --git a/dashboards-observability/common/query_manager/index.ts b/dashboards-observability/common/query_manager/index.ts new file mode 100644 index 000000000..72b5cd2f6 --- /dev/null +++ b/dashboards-observability/common/query_manager/index.ts @@ -0,0 +1,6 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +export { QueryManager } from './ppl_query_manager'; diff --git a/dashboards-observability/common/query_manager/ppl_query_manager.ts b/dashboards-observability/common/query_manager/ppl_query_manager.ts new file mode 100644 index 000000000..513485cf5 --- /dev/null +++ b/dashboards-observability/common/query_manager/ppl_query_manager.ts @@ -0,0 +1,17 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { PPLQueryBuilder } from './query_builder/ppl_query_builder'; +import { PPLQueryParser } from './query_parser/ppl_query_parser'; + +export class QueryManager { + queryBuilder(): PPLQueryBuilder { + return new PPLQueryBuilder(); + } + + queryParser(): PPLQueryParser { + return new PPLQueryParser(); + } +} diff --git a/dashboards-observability/common/query_manager/query_builder/index.ts b/dashboards-observability/common/query_manager/query_builder/index.ts new file mode 100644 index 000000000..24e0492f5 --- /dev/null +++ b/dashboards-observability/common/query_manager/query_builder/index.ts @@ -0,0 +1,6 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +export { PPLQueryBuilder } from './ppl_query_builder'; diff --git a/dashboards-observability/common/query_manager/query_builder/ppl_query_builder.ts b/dashboards-observability/common/query_manager/query_builder/ppl_query_builder.ts new file mode 100644 index 000000000..50ea50b41 --- /dev/null +++ b/dashboards-observability/common/query_manager/query_builder/ppl_query_builder.ts @@ -0,0 +1,39 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { PPLSyntaxParser } from '../antlr/ppl_syntax_parser'; +import { StatsBuilder } from '../ast/builder/stats_builder'; +import { StatsAstBuilder } from '../ast/builder/stats_ast_builder'; + +export class PPLQueryBuilder { + parser: PPLSyntaxParser | null = null; + + build(query: string, pplTokens: any) { + this.parser = new PPLSyntaxParser().parse(query); + return this.buildStats(query, pplTokens); + } + + buildStats(query: string, statsTokens: any) { + const statsTree = new StatsAstBuilder().visitRoot(this.parser!.root()); + const newStatsAstTree = new StatsBuilder(statsTokens).build(); + if (typeof statsTree.getStartEndIndicesOfOriginQuery !== 'function') { + return query + ' | ' + newStatsAstTree.toString(); + } + + const indices = statsTree.getStartEndIndicesOfOriginQuery(); + + if (indices.start !== -1 && indices.end !== -1) { + return ( + query.substring(0, indices.start) + + newStatsAstTree.toString() + + query.substring(indices.end + 1, query.length) + ); + } else if (indices && newStatsAstTree) { + return query + ' | ' + newStatsAstTree.toString(); + } + + return ''; + } +} diff --git a/dashboards-observability/common/query_manager/query_parser/index.ts b/dashboards-observability/common/query_manager/query_parser/index.ts new file mode 100644 index 000000000..c4afe0e5d --- /dev/null +++ b/dashboards-observability/common/query_manager/query_parser/index.ts @@ -0,0 +1,6 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +export { PPLQueryParser } from './ppl_query_parser'; diff --git a/dashboards-observability/common/query_manager/query_parser/ppl_query_parser.ts b/dashboards-observability/common/query_manager/query_parser/ppl_query_parser.ts new file mode 100644 index 000000000..9a39276e0 --- /dev/null +++ b/dashboards-observability/common/query_manager/query_parser/ppl_query_parser.ts @@ -0,0 +1,25 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { PPLSyntaxParser } from '../antlr/ppl_syntax_parser'; +import { OpenSearchPPLParser } from '../antlr/output/OpenSearchPPLParser'; +import { StatsAstBuilder } from '../ast/builder/stats_ast_builder'; + +export class PPLQueryParser { + parser: OpenSearchPPLParser | null = null; + visitor: any = null; + rawQuery: string = ''; + + parse(pplQuery: string) { + this.rawQuery = pplQuery; + this.parser = new PPLSyntaxParser().parse(this.rawQuery); + return this; + } + + getStats() { + this.visitor = new StatsAstBuilder(); + return this.visitor.visitRoot(this.parser!.root()).getTokens(); + } +} diff --git a/dashboards-observability/common/query_manager/utils/index.ts b/dashboards-observability/common/query_manager/utils/index.ts new file mode 100644 index 000000000..d93983382 --- /dev/null +++ b/dashboards-observability/common/query_manager/utils/index.ts @@ -0,0 +1,48 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { CUSTOM_LABEL } from '../../../common/constants/explorer'; +import { AggregationConfigurations, PreviouslyParsedStaleStats } from '../ast/types'; +import { removeBacktick } from '../../../common/utils'; + +export const composeAggregations = ( + aggConfig: AggregationConfigurations, + staleStats: PreviouslyParsedStaleStats +) => { + return { + aggregations: aggConfig.series.map((metric) => ({ + function_alias: metric[CUSTOM_LABEL], + function: { + name: metric.aggregation, + value_expression: metric.name, + percentile_agg_function: '', + }, + })), + groupby: { + group_fields: [ + ...(aggConfig.dimensions || []), + ...(aggConfig.breakdowns || []), + ].map((dimension) => ({ name: `\`${removeBacktick(dimension.name)}\`` })), + ...(aggConfig.span && + JSON.stringify(aggConfig?.span) !== '{}' && { span: composeSpan(aggConfig.span) }), + }, + partitions: staleStats?.partitions ?? {}, + all_num: staleStats?.all_num ?? {}, + delim: staleStats?.delim ?? {}, + dedup_split_value: staleStats?.dedup_split_value ?? {}, + }; +}; + +const composeSpan = (spanConfig) => { + return { + [CUSTOM_LABEL]: spanConfig[CUSTOM_LABEL] ?? '', + span_expression: { + type: spanConfig.time_field[0]?.type ?? 'timestamp', + field: spanConfig.time_field[0]?.name ?? 'timestamp', + time_unit: spanConfig.unit[0]?.value ?? 'd', + literal_value: spanConfig.interval ?? 1, + }, + }; +}; diff --git a/dashboards-observability/common/types/explorer.ts b/dashboards-observability/common/types/explorer.ts index 5a735a440..3174d5c0b 100644 --- a/dashboards-observability/common/types/explorer.ts +++ b/dashboards-observability/common/types/explorer.ts @@ -5,6 +5,8 @@ import { History } from 'history'; import Plotly from 'plotly.js-dist'; +import { QueryManager } from 'common/query_manager'; +import { VIS_CHART_TYPES } from '../../common/constants/shared'; import { RAW_QUERY, SELECTED_FIELDS, @@ -15,13 +17,23 @@ import { FINAL_QUERY, SELECTED_TIMESTAMP, SELECTED_DATE_RANGE, + GROUPBY, + AGGREGATIONS, + CUSTOM_LABEL, + BREAKDOWNS, } from '../constants/explorer'; -import { CoreStart, HttpStart, NotificationsStart } from '../../../../src/core/public'; +import { + CoreStart, + CoreSetup, + HttpSetup, + HttpStart, + NotificationsStart, +} from '../../../../src/core/public'; import SavedObjects from '../../public/services/saved_objects/event_analytics/saved_objects'; import TimestampUtils from '../../public/services/timestamp/timestamp'; import PPLService from '../../public/services/requests/ppl'; import DSLService from '../../public/services/requests/dsl'; - +import { SavedObjectsStart } from '../../../../src/core/public/saved_objects'; export interface IQueryTab { id: string; name: React.ReactNode | string; @@ -31,6 +43,20 @@ export interface IQueryTab { export interface IField { name: string; type: string; + label?: string; +} + +export interface TimeUnit { + name: string; + label: string; + value: string; +} + +export interface ExplorerFields { + availableFields: IField[]; + queriedFields: IField[]; + selectedFields: IField[]; + unselectedFields: IField[]; } export interface ITabQueryResults { @@ -82,6 +108,7 @@ export interface ILogExplorerProps { ) => void; savedObjectId: string; getExistingEmptyTab: (params: EmptyTabParams) => string; + queryManager: QueryManager; } export interface IExplorerProps { @@ -112,6 +139,7 @@ export interface IExplorerProps { appBaseQuery?: string; callback?: any; callbackInApp?: any; + queryManager?: QueryManager; } export interface SavedQuery { @@ -150,6 +178,31 @@ export interface SavedVizRes { tenant: string; } +export interface ExplorerDataType { + jsonData: object[]; + jsonDataAll: object[]; +} + +export interface Query { + index: string; + isLoaded: boolean; + objectType: string; + rawQuery: string; + savedObjectId: string; + selectedDateRange: string[]; + selectedTimestamp: string; + tabCreatedType: string; + finalQuery?: string; +} + +export interface ExplorerData { + explorerData?: ExplorerDataType; + explorerFields?: IExplorerFields; + query?: Query; + http?: HttpSetup; + pplService?: PPLService; +} + export interface IVisualizationContainerPropsData { appData?: { fromApp: boolean }; rawVizData?: any; @@ -160,6 +213,7 @@ export interface IVisualizationContainerPropsData { xaxis: IField[]; yaxis: IField[]; }; + explorer?: ExplorerData; } export interface IVisualizationContainerPropsVis { @@ -186,9 +240,11 @@ export interface IConfigPanelOptions { export interface IConfigPanelOptionSection { name: string; component: null; - mapTo: 'mode'; + mapTo: string; props?: any; isSingleSelection?: boolean; + defaultState?: boolean | string; + eleType?: string; } export interface IVisualizationTypeDefination { @@ -196,13 +252,13 @@ export interface IVisualizationTypeDefination { type: string; id: string; label: string; - fullLabel: string; + fulllabel: string; category: string; icon: React.ReactNode; - editorConfig: { + editorconfig: { panelTabs: IConfigPanelTab; }; - visConfig: { + visconfig: { layout: Partial; config: Partial; }; @@ -232,4 +288,99 @@ export interface PatternTableData { count: number; pattern: string; sampleLog: string; + anomalyCount?: number; +}; + +export interface ConfigListEntry { + label: string; + aggregation: string; + [CUSTOM_LABEL]: string; + name: string; + side: string; + type: string; + alias?: string; +} + +export interface HistogramConfigList { + bucketSize: string; + bucketOffset: string; +} + +export interface DimensionSpan { + time_field: IField[]; + interval: number; + unit: TimeUnit[]; +} + +export interface ConfigList { + [GROUPBY]?: ConfigListEntry[] | HistogramConfigList[]; + [AGGREGATIONS]?: ConfigListEntry[]; + [BREAKDOWNS]?: ConfigListEntry[] | HistogramConfigList[]; + span?: DimensionSpan; +} + +export interface Breadcrumbs { + text: string; + href: string; +} + +export interface EventAnalyticsProps { + chrome: CoreSetup; + parentBreadcrumbs: Breadcrumbs[]; + pplService: any; + dslService: any; + savedObjects: SavedObjectsStart; + timestampUtils: TimestampUtils; + http: HttpStart; + notifications: NotificationsStart; + queryManager: QueryManager; +} + +export interface DataConfigPanelProps { + fieldOptionList: IField[]; + visualizations: IVisualizationContainerProps; + queryManager?: QueryManager; +} +export interface GetTooltipHoverInfoType { + tooltipMode: string; + tooltipText: string; +} + +export interface SelectedConfigItem { + index: number; + name: string; +} + +export interface ParentUnitType { + name: string; + label: string; + type: string; +} + +export interface TreemapParentsProps { + selectedAxis: ParentUnitType[]; + setSelectedParentItem: (item: { isClicked: boolean; index: number }) => void; + handleUpdateParentFields: (arr: ParentUnitType[]) => void; +} + +export interface DataConfigPanelFieldProps { + list: ConfigListEntry[]; + dimensionSpan: DimensionSpan; + sectionName: string; + visType: VIS_CHART_TYPES; + addButtonText: string; + handleServiceAdd: (name: string) => void; + handleServiceRemove: (index: number, name: string) => void; + handleServiceEdit: (arrIndex: number, sectionName: string, isTimeStamp: boolean) => void; +} + +export interface VisMeta { + visId: string; +} + +export interface VisualizationState { + query: Query; + visData: any; + visConfMetadata: ConfigList; + visMeta: VisMeta; } diff --git a/dashboards-observability/common/types/metrics.ts b/dashboards-observability/common/types/metrics.ts new file mode 100644 index 000000000..64ebd07ab --- /dev/null +++ b/dashboards-observability/common/types/metrics.ts @@ -0,0 +1,22 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { VisualizationType } from './custom_panels'; + +export interface MetricData { + metricId: string; + metricType: 'savedCustomMetric' | 'prometheusMetric'; + metricName: string; +} + +export interface MetricType extends VisualizationType { + id: string; + savedVisualizationId: string; + x: number; + y: number; + w: number; + h: number; + metricType: 'savedCustomMetric' | 'prometheusMetric'; +} diff --git a/dashboards-observability/common/utils/index.ts b/dashboards-observability/common/utils/index.ts index e5f765ccd..8ec98b14f 100644 --- a/dashboards-observability/common/utils/index.ts +++ b/dashboards-observability/common/utils/index.ts @@ -3,5 +3,11 @@ * SPDX-License-Identifier: Apache-2.0 */ -export { getIndexPatternFromRawQuery, preprocessQuery, buildQuery } from './query_utils'; +export { + getIndexPatternFromRawQuery, + preprocessQuery, + buildQuery, + composeFinalQuery, + removeBacktick, +} from './query_utils'; export { uiSettingsService } from './settings_service'; diff --git a/dashboards-observability/common/utils/query_utils.ts b/dashboards-observability/common/utils/query_utils.ts index 985964d7b..8b1c7d22d 100644 --- a/dashboards-observability/common/utils/query_utils.ts +++ b/dashboards-observability/common/utils/query_utils.ts @@ -5,13 +5,22 @@ import datemath from '@elastic/datemath'; import { isEmpty } from 'lodash'; -import { DATE_PICKER_FORMAT } from '../../common/constants/explorer'; +import { DATE_PICKER_FORMAT, PPL_DEFAULT_PATTERN_REGEX_FILETER } from '../../common/constants/explorer'; import { PPL_INDEX_INSERT_POINT_REGEX, PPL_INDEX_REGEX, PPL_NEWLINE_REGEX, + PPL_STATS_REGEX, } from '../../common/constants/shared'; +/** + * @param literal - string literal that will be put inside single quotes in PPL command + * @returns string with inner single quotes escaped + */ +const escapeQuotes = (literal: string) => { + return literal.replaceAll("'", "''"); +} + export const getIndexPatternFromRawQuery = (query: string): string => { const matches = query.match(PPL_INDEX_REGEX); if (matches) { @@ -27,12 +36,18 @@ export const preprocessQuery = ({ endTime, timeField, isLiveQuery, + selectedPatternField, + patternRegex, + filteredPattern, }: { rawQuery: string; startTime: string; endTime: string; timeField?: string; isLiveQuery: boolean; + selectedPatternField?: string; + patternRegex?: string; + filteredPattern?: string; }) => { let finalQuery = ''; @@ -48,12 +63,33 @@ export const preprocessQuery = ({ finalQuery = `${tokens![1]}=${ tokens![2] } | where ${timeField} >= '${start}' and ${timeField} <= '${end}'${tokens![3]}`; + if (isLiveQuery) { finalQuery = finalQuery + ` | sort - ${timeField}`; } + + // if a pattern is selected as filter, build it into finalQuery + if (selectedPatternField && filteredPattern) + finalQuery = buildPatternsQuery(finalQuery, selectedPatternField, patternRegex, filteredPattern); + return finalQuery; }; +export const buildPatternsQuery = (baseQuery: string, selectedPatternField?: string, patternRegex?: string, filteredPattern?: string) => { + let finalQuery = baseQuery; + if (selectedPatternField) { + finalQuery += ` | patterns `; + if (patternRegex && patternRegex !== PPL_DEFAULT_PATTERN_REGEX_FILETER) { + finalQuery += `pattern='${escapeQuotes(patternRegex)}' `; + } + finalQuery += `\`${selectedPatternField}\` `; + if (filteredPattern) { + finalQuery += `| where patterns_field='${escapeQuotes(filteredPattern)}'`; + } + } + return finalQuery; +} + export const buildQuery = (baseQuery: string, currQuery: string) => { let fullQuery: string; if (baseQuery) { @@ -66,3 +102,33 @@ export const buildQuery = (baseQuery: string, currQuery: string) => { } return fullQuery; }; + +export const composeFinalQuery = ( + curQuery: string, + startingTime: string, + endingTime: string, + timeField: string, + isLiveQuery: boolean, + appBaseQuery: string, + selectedPatternField?: string, + patternRegex?: string, + filteredPattern?: string, +) => { + const fullQuery = buildQuery(appBaseQuery, curQuery); + if (isEmpty(fullQuery)) return ''; + return preprocessQuery({ + rawQuery: fullQuery, + startTime: startingTime, + endTime: endingTime, + timeField, + isLiveQuery, + selectedPatternField, + patternRegex, + filteredPattern + }); +}; + +export const removeBacktick = (stringContainsBacktick: string) => { + if (!stringContainsBacktick) return ''; + return stringContainsBacktick.replace(/`/g, ''); +}; diff --git a/dashboards-observability/package.json b/dashboards-observability/package.json index e47cb401e..eeaa60697 100644 --- a/dashboards-observability/package.json +++ b/dashboards-observability/package.json @@ -17,15 +17,23 @@ "@nteract/outputs": "^3.0.11", "@nteract/presentational-components": "^3.4.3", "@reduxjs/toolkit": "^1.6.1", + "ag-grid-community": "^27.3.0", + "ag-grid-react": "^27.3.0", + "antlr4": "4.8.0", + "antlr4ts": "^0.5.0-alpha.4", "plotly.js-dist": "^2.2.0", + "postinstall": "^0.7.4", "react-graph-vis": "^1.0.5", - "react-plotly.js": "^2.5.1" + "react-paginate": "^8.1.3", + "react-plotly.js": "^2.5.1", + "redux-persist": "^6.0.0" }, "devDependencies": { "@cypress/skip-test": "^2.6.1", "@types/enzyme-adapter-react-16": "^1.0.6", "@types/react-plotly.js": "^2.5.0", "@types/react-test-renderer": "^16.9.1", + "antlr4ts-cli": "^0.5.0-alpha.4", "cypress": "^5.0.0", "eslint": "^6.8.0", "jest-dom": "^4.0.0", @@ -38,6 +46,7 @@ "lodash": "^4.17.21", "glob-parent": "^6.0.1", "ansi-regex": "^5.0.1", - "json-schema": "^0.4.0" + "json-schema": "^0.4.0", + "minimatch": "^3.0.5" } } diff --git a/dashboards-observability/public/.DS_Store b/dashboards-observability/public/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..dbd07c1a1c1d289c1b490405a326e8a55ae29325 GIT binary patch literal 6148 zcmeHKJ8r^25S>XVP-t9I?iIMf%5qNN3m_#C4KXMr)UI+aj>emhq98+&f+l(+&Ai>& zd29I<9*>A<`}MjKX+&fWH%Fk~B9M^^Pys6Nqkw%M3f!hP6`=yd49* i9b;qdc*nm7hJ9eJk%`7>a;(5S$@6*vQa;1$mR literal 0 HcmV?d00001 diff --git a/dashboards-observability/public/components/app.tsx b/dashboards-observability/public/components/app.tsx index b4d164331..d7b863eb0 100644 --- a/dashboards-observability/public/components/app.tsx +++ b/dashboards-observability/public/components/app.tsx @@ -7,6 +7,7 @@ import { I18nProvider } from '@osd/i18n/react'; import React from 'react'; import { Provider } from 'react-redux'; import { HashRouter, Route, Switch } from 'react-router-dom'; +import { QueryManager } from 'common/query_manager'; import { CoreStart } from '../../../../src/core/public'; import { observabilityID, observabilityTitle } from '../../common/constants/shared'; import store from '../framework/redux/store'; @@ -16,6 +17,7 @@ import { Home as CustomPanelsHome } from './custom_panels/home'; import { EventAnalytics } from './event_analytics'; import { Main as NotebooksHome } from './notebooks/components/main'; import { Home as TraceAnalyticsHome } from './trace_analytics/home'; +import { Home as MetricsHome } from './metrics/index'; interface ObservabilityAppDeps { CoreStartProp: CoreStart; @@ -24,6 +26,7 @@ interface ObservabilityAppDeps { dslService: any; savedObjects: any; timestampUtils: any; + queryManager: QueryManager; } // for cypress to test redux store @@ -38,6 +41,7 @@ export const App = ({ dslService, savedObjects, timestampUtils, + queryManager, }: ObservabilityAppDeps) => { const { chrome, http, notifications } = CoreStartProp; const parentBreadcrumb = { @@ -56,6 +60,25 @@ export const App = ({ <> + { + chrome.setBreadcrumbs([ + parentBreadcrumb, + { text: 'Metrics analytics', href: '#/metrics_analytics/' }, + ]); + return ( + + ); + }} + /> { @@ -130,6 +153,7 @@ export const App = ({ timestampUtils={timestampUtils} http={http} notifications={notifications} + queryManager={queryManager} {...props} /> ); diff --git a/dashboards-observability/public/components/application_analytics/components/config_components/trace_config.tsx b/dashboards-observability/public/components/application_analytics/components/config_components/trace_config.tsx index e0ff9a1bb..92d0d40bf 100644 --- a/dashboards-observability/public/components/application_analytics/components/config_components/trace_config.tsx +++ b/dashboards-observability/public/components/application_analytics/components/config_components/trace_config.tsx @@ -55,7 +55,7 @@ export const TraceConfig = (props: TraceConfigProps) => { useEffect(() => { setLoading(true); const timeFilterDSL = filtersToDsl([], '', startTime, endTime); - const latencyTrendStartTime = dateMath.parse(endTime)?.subtract(24, 'hours').toISOString()!; + const latencyTrendStartTime = dateMath.parse(endTime, { roundUp: true })?.subtract(24, 'hours').toISOString()!; const latencyTrendDSL = filtersToDsl(filters, query, latencyTrendStartTime, endTime); handleDashboardRequest( http, diff --git a/dashboards-observability/public/components/common/field_button/field_button.scss b/dashboards-observability/public/components/common/field_button/field_button.scss index 8ae66b433..e9fdd6a30 100644 --- a/dashboards-observability/public/components/common/field_button/field_button.scss +++ b/dashboards-observability/public/components/common/field_button/field_button.scss @@ -78,3 +78,45 @@ margin-right: $euiSizeXS; } } + +.shard__fieldSelectorField { + &:hover, + &:focus-within, + &[class*='-isActive'] { + .dscSidebarItem__action { + opacity: 1; + } + } + + & > .osdFieldButton__button { + padding: 0; + } + + & .osdFieldButton__name { + padding: $euiSizeS $euiSizeS $euiSizeS 0; + } + + & > button { + align-items: stretch; + } + + & .osdFieldIcon { + box-shadow: none; + height: 100%; + flex-shrink: 0; + line-height: 0; + } + + & .osdFieldButton__fieldIcon { + box-shadow: none; + margin-right: 8px; + } +} + +#vis__mainContent .explorer__fieldSelectorField { + @include euiBottomShadowSmall; + + background-color: $euiColorEmptyShade; + border: $euiBorderThin; + margin-top: $euiSizeS; +} diff --git a/dashboards-observability/public/components/common/field_button/field_button.tsx b/dashboards-observability/public/components/common/field_button/field_button.tsx index 5ceac9875..963cdf84a 100644 --- a/dashboards-observability/public/components/common/field_button/field_button.tsx +++ b/dashboards-observability/public/components/common/field_button/field_button.tsx @@ -76,6 +76,7 @@ export function FieldButton({ buttonProps, ...rest }: FieldButtonProps) { + const classes = classNames( 'osdFieldButton', size ? sizeToClassNameMap[size] : null, diff --git a/dashboards-observability/public/components/common/field_icon/field_icon.tsx b/dashboards-observability/public/components/common/field_icon/field_icon.tsx index a63dfe5ad..467c2c7c0 100644 --- a/dashboards-observability/public/components/common/field_icon/field_icon.tsx +++ b/dashboards-observability/public/components/common/field_icon/field_icon.tsx @@ -26,7 +26,7 @@ export interface FieldIconProps extends Omit { } // defaultIcon => a unknown datatype -const defaultIcon = { iconType: 'questionInCircle', color: 'gray' }; +const defaultIcon = { iconType: 'tokenString' }; export const typeToEuiIconMap: Partial> = { boolean: { iconType: 'tokenBoolean' }, @@ -50,13 +50,12 @@ export const typeToEuiIconMap: Partial> = { export function FieldIcon({ type, label, - size = 's', + size = 'l', scripted, className, ...rest }: FieldIconProps) { const token = typeToEuiIconMap[type] || defaultIcon; - return ( {
-
+ + {fullWord.slice(0, -item.suggestion.length)} + {item.suggestion} + +
+ {/*
{ }
`, }} - /> + /> */}
diff --git a/dashboards-observability/public/components/common/search/search.test.tsx b/dashboards-observability/public/components/common/search/search.test.tsx index 6a7543fec..f204369c4 100644 --- a/dashboards-observability/public/components/common/search/search.test.tsx +++ b/dashboards-observability/public/components/common/search/search.test.tsx @@ -33,6 +33,7 @@ describe('Search bar', () => { const popoverItems = jest.fn(); const isLiveTailOn = jest.fn(); const countDistribution = jest.fn(); + const setMetricLabel = jest.fn(); const utils = render( { popoverItems={popoverItems} isLiveTailOn={isLiveTailOn} countDistribution={countDistribution} + curVisId={'line'} + spanValue={false} + setSubType={'metric'} + setMetricMeasure={'hours (h)'} + setMetricLabel={setMetricLabel} /> ); diff --git a/dashboards-observability/public/components/common/search/search.tsx b/dashboards-observability/public/components/common/search/search.tsx index b4e2ebb16..f6d30725a 100644 --- a/dashboards-observability/public/components/common/search/search.tsx +++ b/dashboards-observability/public/components/common/search/search.tsx @@ -16,8 +16,8 @@ import { EuiBadge, EuiContextMenuPanel, EuiToolTip, + EuiCallOut } from '@elastic/eui'; -import _ from 'lodash'; import { DatePicker } from './date_picker'; import '@algolia/autocomplete-theme-classic'; import { Autocomplete } from './autocomplete'; @@ -82,10 +82,17 @@ export const Search = (props: any) => { stopLive, setIsLiveTailPopoverOpen, liveTailName, + searchError = null, + curVisId, + spanValue, + setSubType, + metricMeasure, + setMetricMeasure, + setMetricLabel, + metricChecked, } = props; - + const appLogEvents = tabId.match(APP_ANALYTICS_TAB_ID_REGEX); - const [isSavePanelOpen, setIsSavePanelOpen] = useState(false); const [isFlyoutVisible, setIsFlyoutVisible] = useState(false); @@ -214,7 +221,15 @@ export const Search = (props: any) => { showOptionList={ showSavePanelOptionsList && searchBarConfigs[selectedSubTabId]?.showSavePanelOptionsList + } + curVisId={curVisId} + spanValue={spanValue} + setSubType={setSubType} + metricMeasure={metricMeasure} + setMetricMeasure={setMetricMeasure} + setMetricLabel={setMetricLabel} + metricChecked={metricChecked} /> @@ -247,6 +262,17 @@ export const Search = (props: any) => { )} + { searchError && searchError.error && ( + + + +

+ {JSON.parse(searchError.message).error.details} +

+
+
+
) + } {flyout}
); diff --git a/dashboards-observability/public/components/common/side_nav.tsx b/dashboards-observability/public/components/common/side_nav.tsx index 0f63ed243..cf6f46714 100644 --- a/dashboards-observability/public/components/common/side_nav.tsx +++ b/dashboards-observability/public/components/common/side_nav.tsx @@ -79,13 +79,18 @@ export function ObservabilitySideBar(props: { children: React.ReactNode }) { href: '#/event_analytics', }, { - name: 'Operational panels', + name: 'Metrics analytics', id: 4, + href: '#/metrics_analytics/', + }, + { + name: 'Operational panels', + id: 5, href: '#/operational_panels/', }, { name: 'Notebooks', - id: 5, + id: 6, href: '#/notebooks', }, ], diff --git a/dashboards-observability/public/components/custom_panels/helpers/__tests__/__snapshots__/utils.test.tsx.snap b/dashboards-observability/public/components/custom_panels/helpers/__tests__/__snapshots__/utils.test.tsx.snap index 5a513f839..3b6fa66d6 100644 --- a/dashboards-observability/public/components/custom_panels/helpers/__tests__/__snapshots__/utils.test.tsx.snap +++ b/dashboards-observability/public/components/custom_panels/helpers/__tests__/__snapshots__/utils.test.tsx.snap @@ -10,19 +10,83 @@ exports[`Utils helper functions renders displayVisualization function 1`] = ` "defaultAxes": Object { "xaxis": Array [ Object { + "label": "Carrier", "name": "Carrier", "type": "keyword", }, ], "yaxis": Array [ Object { + "label": "avg(FlightDelayMin)", "name": "avg(FlightDelayMin)", "type": "double", }, ], }, + "explorer": Object { + "explorerData": Object { + "data": Object { + "Carrier": Array [ + "BeatsWest", + "Logstash Airways", + "OpenSearch Dashboards Airlines", + "OpenSearch-Air", + ], + "avg(FlightDelayMin)": Array [ + 53.65384615384615, + 45.36144578313253, + 63.1578947368421, + 46.81318681318681, + ], + }, + "jsonData": Array [ + Object { + "Carrier": "BeatsWest", + "avg(FlightDelayMin)": 53.65384615384615, + }, + Object { + "Carrier": "Logstash Airways", + "avg(FlightDelayMin)": 45.36144578313253, + }, + Object { + "Carrier": "OpenSearch Dashboards Airlines", + "avg(FlightDelayMin)": 63.1578947368421, + }, + Object { + "Carrier": "OpenSearch-Air", + "avg(FlightDelayMin)": 46.81318681318681, + }, + ], + "metadata": Object { + "fields": Array [ + Object { + "name": "avg(FlightDelayMin)", + "type": "double", + }, + Object { + "name": "Carrier", + "type": "keyword", + }, + ], + }, + "size": 4, + "status": 200, + }, + "explorerFields": Array [ + Object { + "name": "avg(FlightDelayMin)", + "type": "double", + }, + Object { + "name": "Carrier", + "type": "keyword", + }, + ], + }, "indexFields": Object {}, - "query": Object {}, + "query": Object { + "rawQuery": "source=opensearch_dashboards_sample_data_flights | fields Carrier,FlightDelayMin | stats sum(FlightDelayMin) as delays by Carrier", + }, "rawVizData": Object { "data": Object { "Carrier": Array [ @@ -71,105 +135,275 @@ exports[`Utils helper functions renders displayVisualization function 1`] = ` "size": 4, "status": 200, }, - "userConfigs": Object {}, + "userConfigs": Object { + "dataConfig": Object { + "dimensions": Array [ + Object { + "customLabel": "", + "label": "Carrier", + "name": "Carrier", + }, + ], + "series": Array [ + Object { + "aggregation": "sum", + "customLabel": "delays", + "label": "FlightDelayMin", + "name": "FlightDelayMin", + }, + ], + "span": undefined, + }, + }, }, "vis": Object { + "barwidth": 0.97, "category": "Visualizations", - "categoryAxis": "xaxis", + "categoryaxis": "xaxis", "component": [Function], - "editorConfig": Object { + "editorconfig": Object { "panelTabs": Array [ Object { "editor": [Function], "id": "data-panel", "mapTo": "dataConfig", - "name": "Data", + "name": "Style", "sections": Array [ Object { "editor": [Function], - "id": "value_options", - "mapTo": "valueOptions", - "name": "Value options", + "id": "tooltip_options", + "mapTo": "tooltipOptions", + "name": "Tooltip options", "schemas": Array [ Object { "component": null, - "isSingleSelection": false, - "mapTo": "xaxis", - "name": "X-axis", + "mapTo": "tooltipMode", + "name": "Tooltip mode", + "props": Object { + "defaultSelections": Array [ + Object { + "id": "show", + "name": "Show", + }, + ], + "options": Array [ + Object { + "id": "show", + "name": "Show", + }, + Object { + "id": "hidden", + "name": "Hidden", + }, + ], + }, }, Object { "component": null, - "isSingleSelection": false, - "mapTo": "yaxis", - "name": "Y-axis", + "mapTo": "tooltipText", + "name": "Tooltip text", + "props": Object { + "defaultSelections": Array [ + Object { + "id": "all", + "name": "All", + }, + ], + "options": Array [ + Object { + "id": "all", + "name": "All", + }, + Object { + "id": "x", + "name": "Dimension", + }, + Object { + "id": "y", + "name": "Series", + }, + ], + }, }, ], }, Object { "editor": [Function], - "id": "chart_options", - "mapTo": "chartOptions", - "name": "Chart options", + "id": "legend", + "mapTo": "legend", + "name": "Legend", "schemas": Array [ Object { "component": null, - "isSingleSelection": true, - "mapTo": "orientation", - "name": "Orientation", + "mapTo": "showLegend", + "name": "Show legend", "props": Object { "defaultSelections": Array [ Object { - "name": "Vertical", - "orientationId": "v", + "id": "show", + "name": "Show", }, ], - "dropdownList": Array [ + "options": Array [ Object { - "name": "Vertical", - "orientationId": "v", + "id": "show", + "name": "Show", }, Object { - "name": "Horizontal", - "orientationId": "h", + "id": "hidden", + "name": "Hidden", }, ], }, }, Object { "component": null, - "isSingleSelection": true, + "mapTo": "position", + "name": "Position", + "props": Object { + "defaultSelections": Array [ + Object { + "id": "v", + "name": "Right", + }, + ], + "options": Array [ + Object { + "id": "v", + "name": "Right", + }, + Object { + "id": "h", + "name": "Bottom", + }, + ], + }, + }, + Object { + "component": [Function], + "eleType": "input", + "mapTo": "legendSize", + "name": "Legend size", + "title": "Legend size", + }, + ], + }, + Object { + "editor": [Function], + "id": "chart_styles", + "mapTo": "chartStyles", + "name": "Chart styles", + "schemas": Array [ + Object { + "component": [Function], + "eleType": "buttons", "mapTo": "mode", "name": "Mode", "props": Object { "defaultSelections": Array [ Object { - "modeId": "group", + "id": "group", "name": "Group", }, ], - "dropdownList": Array [ + "options": Array [ Object { - "modeId": "group", + "id": "group", "name": "Group", }, Object { - "modeId": "stack", + "id": "stack", "name": "Stack", }, ], }, }, + Object { + "component": [Function], + "eleType": "input", + "mapTo": "labelSize", + "name": "Label size", + }, + Object { + "component": [Function], + "defaultState": 0, + "eleType": "slider", + "mapTo": "rotateBarLabels", + "name": "Rotate bar labels", + "props": Object { + "max": 90, + "min": -90, + "showTicks": true, + "ticks": Array [ + Object { + "label": "-90°", + "value": -90, + }, + Object { + "label": "-45°", + "value": -45, + }, + Object { + "label": "0°", + "value": 0, + }, + Object { + "label": "45°", + "value": 45, + }, + Object { + "label": "90°", + "value": 90, + }, + ], + }, + }, + Object { + "component": [Function], + "defaultState": 0.7, + "eleType": "slider", + "mapTo": "groupWidth", + "name": "Group width", + "props": Object { + "max": 1, + "step": 0.01, + }, + }, + Object { + "component": [Function], + "defaultState": 0.97, + "eleType": "slider", + "mapTo": "barWidth", + "name": "Bar width", + "props": Object { + "max": 1, + "step": 0.01, + }, + }, + Object { + "component": [Function], + "defaultState": 2, + "eleType": "slider", + "mapTo": "lineWidth", + "name": "Line width", + "props": Object { + "max": 10, + }, + }, + Object { + "component": [Function], + "defaultState": 70, + "eleType": "slider", + "mapTo": "fillOpacity", + "name": "Fill opacity", + "props": Object { + "max": 100, + }, + }, ], }, ], }, - Object { - "content": Array [], - "editor": [Function], - "id": "style-panel", - "mapTo": "layoutConfig", - "name": "Layout", - }, Object { "editor": [Function], "id": "availability-panel", @@ -178,26 +412,33 @@ exports[`Utils helper functions renders displayVisualization function 1`] = ` }, ], }, - "fullLabel": "Bar", + "fillopacity": 70, + "fulllabel": "Vertical bar", + "groupwidth": 0.7, "icon": [Function], - "iconType": "visBarVerticalStacked", + "icontype": "visBarVerticalStacked", "id": "bar", - "label": "Bar", + "label": "Vertical bar", + "labelangle": 0, + "legendposition": "v", + "linewidth": 2, + "mode": "group", "name": "bar", "orientation": "v", "selection": Object { "dataLoss": "nothing", }, - "seriesAxis": "yaxis", + "seriesaxis": "yaxis", + "showlegend": "show", "type": "bar", - "visConfig": Object { + "visconfig": Object { "config": Object { "displaylogo": false, "responsive": true, }, "isUniColor": false, "layout": Object { - "height": 500, + "height": 1180, "legend": Object { "orientation": "v", "traceorder": "normal", @@ -224,19 +465,83 @@ exports[`Utils helper functions renders displayVisualization function 1`] = ` "defaultAxes": Object { "xaxis": Array [ Object { + "label": "Carrier", "name": "Carrier", "type": "keyword", }, ], "yaxis": Array [ + Object { + "label": "avg(FlightDelayMin)", + "name": "avg(FlightDelayMin)", + "type": "double", + }, + ], + }, + "explorer": Object { + "explorerData": Object { + "data": Object { + "Carrier": Array [ + "BeatsWest", + "Logstash Airways", + "OpenSearch Dashboards Airlines", + "OpenSearch-Air", + ], + "avg(FlightDelayMin)": Array [ + 53.65384615384615, + 45.36144578313253, + 63.1578947368421, + 46.81318681318681, + ], + }, + "jsonData": Array [ + Object { + "Carrier": "BeatsWest", + "avg(FlightDelayMin)": 53.65384615384615, + }, + Object { + "Carrier": "Logstash Airways", + "avg(FlightDelayMin)": 45.36144578313253, + }, + Object { + "Carrier": "OpenSearch Dashboards Airlines", + "avg(FlightDelayMin)": 63.1578947368421, + }, + Object { + "Carrier": "OpenSearch-Air", + "avg(FlightDelayMin)": 46.81318681318681, + }, + ], + "metadata": Object { + "fields": Array [ + Object { + "name": "avg(FlightDelayMin)", + "type": "double", + }, + Object { + "name": "Carrier", + "type": "keyword", + }, + ], + }, + "size": 4, + "status": 200, + }, + "explorerFields": Array [ Object { "name": "avg(FlightDelayMin)", "type": "double", }, + Object { + "name": "Carrier", + "type": "keyword", + }, ], }, "indexFields": Object {}, - "query": Object {}, + "query": Object { + "rawQuery": "source=opensearch_dashboards_sample_data_flights | fields Carrier,FlightDelayMin | stats sum(FlightDelayMin) as delays by Carrier", + }, "rawVizData": Object { "data": Object { "Carrier": Array [ @@ -285,133 +590,310 @@ exports[`Utils helper functions renders displayVisualization function 1`] = ` "size": 4, "status": 200, }, - "userConfigs": Object {}, + "userConfigs": Object { + "dataConfig": Object { + "dimensions": Array [ + Object { + "customLabel": "", + "label": "Carrier", + "name": "Carrier", + }, + ], + "series": Array [ + Object { + "aggregation": "sum", + "customLabel": "delays", + "label": "FlightDelayMin", + "name": "FlightDelayMin", + }, + ], + "span": undefined, + }, + }, }, "vis": Object { + "barwidth": 0.97, "category": "Visualizations", - "categoryAxis": "xaxis", + "categoryaxis": "xaxis", "component": [Function], - "editorConfig": Object { + "editorconfig": Object { "panelTabs": Array [ Object { "editor": [Function], "id": "data-panel", "mapTo": "dataConfig", - "name": "Data", + "name": "Style", "sections": Array [ Object { "editor": [Function], - "id": "value_options", - "mapTo": "valueOptions", - "name": "Value options", + "id": "tooltip_options", + "mapTo": "tooltipOptions", + "name": "Tooltip options", "schemas": Array [ Object { "component": null, - "isSingleSelection": false, - "mapTo": "xaxis", - "name": "X-axis", + "mapTo": "tooltipMode", + "name": "Tooltip mode", + "props": Object { + "defaultSelections": Array [ + Object { + "id": "show", + "name": "Show", + }, + ], + "options": Array [ + Object { + "id": "show", + "name": "Show", + }, + Object { + "id": "hidden", + "name": "Hidden", + }, + ], + }, }, Object { "component": null, - "isSingleSelection": false, - "mapTo": "yaxis", - "name": "Y-axis", + "mapTo": "tooltipText", + "name": "Tooltip text", + "props": Object { + "defaultSelections": Array [ + Object { + "id": "all", + "name": "All", + }, + ], + "options": Array [ + Object { + "id": "all", + "name": "All", + }, + Object { + "id": "x", + "name": "Dimension", + }, + Object { + "id": "y", + "name": "Series", + }, + ], + }, }, ], }, Object { "editor": [Function], - "id": "chart_options", - "mapTo": "chartOptions", - "name": "Chart options", + "id": "legend", + "mapTo": "legend", + "name": "Legend", "schemas": Array [ Object { "component": null, - "isSingleSelection": true, - "mapTo": "orientation", - "name": "Orientation", + "mapTo": "showLegend", + "name": "Show legend", "props": Object { "defaultSelections": Array [ Object { - "name": "Vertical", - "orientationId": "v", + "id": "show", + "name": "Show", }, ], - "dropdownList": Array [ + "options": Array [ Object { - "name": "Vertical", - "orientationId": "v", + "id": "show", + "name": "Show", }, Object { - "name": "Horizontal", - "orientationId": "h", + "id": "hidden", + "name": "Hidden", }, ], }, }, Object { "component": null, - "isSingleSelection": true, - "mapTo": "mode", - "name": "Mode", + "mapTo": "position", + "name": "Position", "props": Object { "defaultSelections": Array [ Object { - "modeId": "group", - "name": "Group", + "id": "v", + "name": "Right", }, ], - "dropdownList": Array [ + "options": Array [ Object { - "modeId": "group", - "name": "Group", + "id": "v", + "name": "Right", }, Object { - "modeId": "stack", - "name": "Stack", + "id": "h", + "name": "Bottom", }, ], }, }, + Object { + "component": [Function], + "eleType": "input", + "mapTo": "legendSize", + "name": "Legend size", + "title": "Legend size", + }, ], }, - ], - }, - Object { - "content": Array [], - "editor": [Function], - "id": "style-panel", - "mapTo": "layoutConfig", - "name": "Layout", - }, - Object { - "editor": [Function], - "id": "availability-panel", - "mapTo": "availabilityConfig", - "name": "Availability", - }, + Object { + "editor": [Function], + "id": "chart_styles", + "mapTo": "chartStyles", + "name": "Chart styles", + "schemas": Array [ + Object { + "component": [Function], + "eleType": "buttons", + "mapTo": "mode", + "name": "Mode", + "props": Object { + "defaultSelections": Array [ + Object { + "id": "group", + "name": "Group", + }, + ], + "options": Array [ + Object { + "id": "group", + "name": "Group", + }, + Object { + "id": "stack", + "name": "Stack", + }, + ], + }, + }, + Object { + "component": [Function], + "eleType": "input", + "mapTo": "labelSize", + "name": "Label size", + }, + Object { + "component": [Function], + "defaultState": 0, + "eleType": "slider", + "mapTo": "rotateBarLabels", + "name": "Rotate bar labels", + "props": Object { + "max": 90, + "min": -90, + "showTicks": true, + "ticks": Array [ + Object { + "label": "-90°", + "value": -90, + }, + Object { + "label": "-45°", + "value": -45, + }, + Object { + "label": "0°", + "value": 0, + }, + Object { + "label": "45°", + "value": 45, + }, + Object { + "label": "90°", + "value": 90, + }, + ], + }, + }, + Object { + "component": [Function], + "defaultState": 0.7, + "eleType": "slider", + "mapTo": "groupWidth", + "name": "Group width", + "props": Object { + "max": 1, + "step": 0.01, + }, + }, + Object { + "component": [Function], + "defaultState": 0.97, + "eleType": "slider", + "mapTo": "barWidth", + "name": "Bar width", + "props": Object { + "max": 1, + "step": 0.01, + }, + }, + Object { + "component": [Function], + "defaultState": 2, + "eleType": "slider", + "mapTo": "lineWidth", + "name": "Line width", + "props": Object { + "max": 10, + }, + }, + Object { + "component": [Function], + "defaultState": 70, + "eleType": "slider", + "mapTo": "fillOpacity", + "name": "Fill opacity", + "props": Object { + "max": 100, + }, + }, + ], + }, + ], + }, + Object { + "editor": [Function], + "id": "availability-panel", + "mapTo": "availabilityConfig", + "name": "Availability", + }, ], }, - "fullLabel": "Bar", + "fillopacity": 70, + "fulllabel": "Vertical bar", + "groupwidth": 0.7, "icon": [Function], - "iconType": "visBarVerticalStacked", + "icontype": "visBarVerticalStacked", "id": "bar", - "label": "Bar", + "label": "Vertical bar", + "labelangle": 0, + "legendposition": "v", + "linewidth": 2, + "mode": "group", "name": "bar", "orientation": "v", "selection": Object { "dataLoss": "nothing", }, - "seriesAxis": "yaxis", + "seriesaxis": "yaxis", + "showlegend": "show", "type": "bar", - "visConfig": Object { + "visconfig": Object { "config": Object { "displaylogo": false, "responsive": true, }, "isUniColor": false, "layout": Object { - "height": 500, + "height": 1180, "legend": Object { "orientation": "v", "traceorder": "normal", @@ -437,23 +919,7 @@ exports[`Utils helper functions renders displayVisualization function 1`] = ` "responsive": true, } } - layout={ - Object { - "height": 500, - "legend": Object { - "orientation": "v", - "traceorder": "normal", - }, - "margin": Object { - "b": 30, - "l": 60, - "pad": 0, - "r": 30, - "t": 50, - }, - "showlegend": true, - } - } + layout={[Function]} visualizations={ Object { "data": Object { @@ -461,19 +927,83 @@ exports[`Utils helper functions renders displayVisualization function 1`] = ` "defaultAxes": Object { "xaxis": Array [ Object { + "label": "Carrier", "name": "Carrier", "type": "keyword", }, ], "yaxis": Array [ + Object { + "label": "avg(FlightDelayMin)", + "name": "avg(FlightDelayMin)", + "type": "double", + }, + ], + }, + "explorer": Object { + "explorerData": Object { + "data": Object { + "Carrier": Array [ + "BeatsWest", + "Logstash Airways", + "OpenSearch Dashboards Airlines", + "OpenSearch-Air", + ], + "avg(FlightDelayMin)": Array [ + 53.65384615384615, + 45.36144578313253, + 63.1578947368421, + 46.81318681318681, + ], + }, + "jsonData": Array [ + Object { + "Carrier": "BeatsWest", + "avg(FlightDelayMin)": 53.65384615384615, + }, + Object { + "Carrier": "Logstash Airways", + "avg(FlightDelayMin)": 45.36144578313253, + }, + Object { + "Carrier": "OpenSearch Dashboards Airlines", + "avg(FlightDelayMin)": 63.1578947368421, + }, + Object { + "Carrier": "OpenSearch-Air", + "avg(FlightDelayMin)": 46.81318681318681, + }, + ], + "metadata": Object { + "fields": Array [ + Object { + "name": "avg(FlightDelayMin)", + "type": "double", + }, + Object { + "name": "Carrier", + "type": "keyword", + }, + ], + }, + "size": 4, + "status": 200, + }, + "explorerFields": Array [ Object { "name": "avg(FlightDelayMin)", "type": "double", }, + Object { + "name": "Carrier", + "type": "keyword", + }, ], }, "indexFields": Object {}, - "query": Object {}, + "query": Object { + "rawQuery": "source=opensearch_dashboards_sample_data_flights | fields Carrier,FlightDelayMin | stats sum(FlightDelayMin) as delays by Carrier", + }, "rawVizData": Object { "data": Object { "Carrier": Array [ @@ -522,105 +1052,275 @@ exports[`Utils helper functions renders displayVisualization function 1`] = ` "size": 4, "status": 200, }, - "userConfigs": Object {}, + "userConfigs": Object { + "dataConfig": Object { + "dimensions": Array [ + Object { + "customLabel": "", + "label": "Carrier", + "name": "Carrier", + }, + ], + "series": Array [ + Object { + "aggregation": "sum", + "customLabel": "delays", + "label": "FlightDelayMin", + "name": "FlightDelayMin", + }, + ], + "span": undefined, + }, + }, }, "vis": Object { + "barwidth": 0.97, "category": "Visualizations", - "categoryAxis": "xaxis", + "categoryaxis": "xaxis", "component": [Function], - "editorConfig": Object { + "editorconfig": Object { "panelTabs": Array [ Object { "editor": [Function], "id": "data-panel", "mapTo": "dataConfig", - "name": "Data", + "name": "Style", "sections": Array [ Object { "editor": [Function], - "id": "value_options", - "mapTo": "valueOptions", - "name": "Value options", + "id": "tooltip_options", + "mapTo": "tooltipOptions", + "name": "Tooltip options", "schemas": Array [ Object { "component": null, - "isSingleSelection": false, - "mapTo": "xaxis", - "name": "X-axis", + "mapTo": "tooltipMode", + "name": "Tooltip mode", + "props": Object { + "defaultSelections": Array [ + Object { + "id": "show", + "name": "Show", + }, + ], + "options": Array [ + Object { + "id": "show", + "name": "Show", + }, + Object { + "id": "hidden", + "name": "Hidden", + }, + ], + }, }, Object { "component": null, - "isSingleSelection": false, - "mapTo": "yaxis", - "name": "Y-axis", + "mapTo": "tooltipText", + "name": "Tooltip text", + "props": Object { + "defaultSelections": Array [ + Object { + "id": "all", + "name": "All", + }, + ], + "options": Array [ + Object { + "id": "all", + "name": "All", + }, + Object { + "id": "x", + "name": "Dimension", + }, + Object { + "id": "y", + "name": "Series", + }, + ], + }, }, ], }, Object { "editor": [Function], - "id": "chart_options", - "mapTo": "chartOptions", - "name": "Chart options", + "id": "legend", + "mapTo": "legend", + "name": "Legend", "schemas": Array [ Object { "component": null, - "isSingleSelection": true, - "mapTo": "orientation", - "name": "Orientation", + "mapTo": "showLegend", + "name": "Show legend", "props": Object { "defaultSelections": Array [ Object { - "name": "Vertical", - "orientationId": "v", + "id": "show", + "name": "Show", }, ], - "dropdownList": Array [ + "options": Array [ Object { - "name": "Vertical", - "orientationId": "v", + "id": "show", + "name": "Show", }, Object { - "name": "Horizontal", - "orientationId": "h", + "id": "hidden", + "name": "Hidden", }, ], }, }, Object { "component": null, - "isSingleSelection": true, + "mapTo": "position", + "name": "Position", + "props": Object { + "defaultSelections": Array [ + Object { + "id": "v", + "name": "Right", + }, + ], + "options": Array [ + Object { + "id": "v", + "name": "Right", + }, + Object { + "id": "h", + "name": "Bottom", + }, + ], + }, + }, + Object { + "component": [Function], + "eleType": "input", + "mapTo": "legendSize", + "name": "Legend size", + "title": "Legend size", + }, + ], + }, + Object { + "editor": [Function], + "id": "chart_styles", + "mapTo": "chartStyles", + "name": "Chart styles", + "schemas": Array [ + Object { + "component": [Function], + "eleType": "buttons", "mapTo": "mode", "name": "Mode", "props": Object { "defaultSelections": Array [ Object { - "modeId": "group", + "id": "group", "name": "Group", }, ], - "dropdownList": Array [ + "options": Array [ Object { - "modeId": "group", + "id": "group", "name": "Group", }, Object { - "modeId": "stack", + "id": "stack", "name": "Stack", }, ], }, }, + Object { + "component": [Function], + "eleType": "input", + "mapTo": "labelSize", + "name": "Label size", + }, + Object { + "component": [Function], + "defaultState": 0, + "eleType": "slider", + "mapTo": "rotateBarLabels", + "name": "Rotate bar labels", + "props": Object { + "max": 90, + "min": -90, + "showTicks": true, + "ticks": Array [ + Object { + "label": "-90°", + "value": -90, + }, + Object { + "label": "-45°", + "value": -45, + }, + Object { + "label": "0°", + "value": 0, + }, + Object { + "label": "45°", + "value": 45, + }, + Object { + "label": "90°", + "value": 90, + }, + ], + }, + }, + Object { + "component": [Function], + "defaultState": 0.7, + "eleType": "slider", + "mapTo": "groupWidth", + "name": "Group width", + "props": Object { + "max": 1, + "step": 0.01, + }, + }, + Object { + "component": [Function], + "defaultState": 0.97, + "eleType": "slider", + "mapTo": "barWidth", + "name": "Bar width", + "props": Object { + "max": 1, + "step": 0.01, + }, + }, + Object { + "component": [Function], + "defaultState": 2, + "eleType": "slider", + "mapTo": "lineWidth", + "name": "Line width", + "props": Object { + "max": 10, + }, + }, + Object { + "component": [Function], + "defaultState": 70, + "eleType": "slider", + "mapTo": "fillOpacity", + "name": "Fill opacity", + "props": Object { + "max": 100, + }, + }, ], }, ], }, - Object { - "content": Array [], - "editor": [Function], - "id": "style-panel", - "mapTo": "layoutConfig", - "name": "Layout", - }, Object { "editor": [Function], "id": "availability-panel", @@ -629,26 +1329,33 @@ exports[`Utils helper functions renders displayVisualization function 1`] = ` }, ], }, - "fullLabel": "Bar", + "fillopacity": 70, + "fulllabel": "Vertical bar", + "groupwidth": 0.7, "icon": [Function], - "iconType": "visBarVerticalStacked", + "icontype": "visBarVerticalStacked", "id": "bar", - "label": "Bar", + "label": "Vertical bar", + "labelangle": 0, + "legendposition": "v", + "linewidth": 2, + "mode": "group", "name": "bar", "orientation": "v", "selection": Object { "dataLoss": "nothing", }, - "seriesAxis": "yaxis", + "seriesaxis": "yaxis", + "showlegend": "show", "type": "bar", - "visConfig": Object { + "visconfig": Object { "config": Object { "displaylogo": false, "responsive": true, }, "isUniColor": false, "layout": Object { - "height": 500, + "height": 1180, "legend": Object { "orientation": "v", "traceorder": "normal", @@ -677,15 +1384,15 @@ exports[`Utils helper functions renders displayVisualization function 1`] = ` data={ Array [ Object { + "hoverinfo": "all", "marker": Object { - "color": Array [ - "#3CA1C7", - "#8C55A3", - "#DB748A", - "#F2BE4B", - ], + "color": "rgba(60,161,199,0.35)", + "line": Object { + "color": "#3CA1C7", + "width": 2, + }, }, - "name": "avg(FlightDelayMin)", + "name": "delays", "orientation": "v", "type": "bar", "x": Array [ @@ -695,17 +1402,19 @@ exports[`Utils helper functions renders displayVisualization function 1`] = ` "OpenSearch-Air", ], "y": Array [ - 53.65384615384615, - 45.36144578313253, - 63.1578947368421, - 46.81318681318681, + undefined, + undefined, + undefined, + undefined, ], }, ] } layout={ Object { - "barmode": "", + "bargap": 0.30000000000000004, + "bargroupgap": 0.030000000000000027, + "barmode": "group", "colorway": Array [ "#3CA1C7", "#8C55A3", @@ -718,20 +1427,32 @@ exports[`Utils helper functions renders displayVisualization function 1`] = ` "#BD6F26", "#4C636F", ], - "height": 500, + "hovermode": "closest", "legend": Object { "orientation": "v", - "traceorder": "normal", }, "margin": Object { "b": 30, - "l": 60, - "pad": 0, - "r": 30, + "l": 30, + "pad": 4, + "r": 5, "t": 50, }, - "showlegend": true, + "showlegend": "show", "title": "", + "xaxis": Object { + "automargin": true, + "tickangle": 0, + "tickfont": Object { + "size": 12, + }, + }, + "yaxis": Object { + "automargin": true, + "tickfont": Object { + "size": 12, + }, + }, } } > @@ -746,15 +1467,15 @@ exports[`Utils helper functions renders displayVisualization function 1`] = ` data={ Array [ Object { + "hoverinfo": "all", "marker": Object { - "color": Array [ - "#3CA1C7", - "#8C55A3", - "#DB748A", - "#F2BE4B", - ], + "color": "rgba(60,161,199,0.35)", + "line": Object { + "color": "#3CA1C7", + "width": 2, + }, }, - "name": "avg(FlightDelayMin)", + "name": "delays", "orientation": "v", "type": "bar", "x": Array [ @@ -764,10 +1485,10 @@ exports[`Utils helper functions renders displayVisualization function 1`] = ` "OpenSearch-Air", ], "y": Array [ - 53.65384615384615, - 45.36144578313253, - 63.1578947368421, - 46.81318681318681, + undefined, + undefined, + undefined, + undefined, ], }, ] @@ -777,7 +1498,9 @@ exports[`Utils helper functions renders displayVisualization function 1`] = ` layout={ Object { "autosize": true, - "barmode": "", + "bargap": 0.30000000000000004, + "bargroupgap": 0.030000000000000027, + "barmode": "group", "colorway": Array [ "#3CA1C7", "#8C55A3", @@ -790,31 +1513,31 @@ exports[`Utils helper functions renders displayVisualization function 1`] = ` "#BD6F26", "#4C636F", ], - "height": 500, "hovermode": "closest", "legend": Object { "orientation": "v", - "traceorder": "normal", }, "margin": Object { "b": 30, - "l": 60, - "pad": 0, - "r": 30, + "l": 30, + "pad": 4, + "r": 5, "t": 50, }, - "showlegend": true, + "showlegend": "show", "title": "", "xaxis": Object { "automargin": true, - "rangemode": "normal", - "showgrid": true, - "zeroline": false, + "tickangle": 0, + "tickfont": Object { + "size": 12, + }, }, "yaxis": Object { - "rangemode": "normal", - "showgrid": true, - "zeroline": false, + "automargin": true, + "tickfont": Object { + "size": 12, + }, }, } } @@ -853,42 +1576,110 @@ exports[`Utils helper functions renders displayVisualization function 2`] = ` "defaultAxes": Object { "xaxis": Array [ Object { - "name": "Carrier", - "type": "keyword", + "label": "", + "name": "", }, ], "yaxis": Array [ Object { + "label": "avg(FlightDelayMin)", "name": "avg(FlightDelayMin)", "type": "double", }, - ], - }, - "indexFields": Object {}, - "query": Object {}, - "rawVizData": Object { - "data": Object { - "Carrier": Array [ - "BeatsWest", - "Logstash Airways", - "OpenSearch Dashboards Airlines", - "OpenSearch-Air", - ], - "avg(FlightDelayMin)": Array [ - 53.65384615384615, - 45.36144578313253, - 63.1578947368421, - 46.81318681318681, - ], - }, - "jsonData": Array [ Object { - "Carrier": "BeatsWest", - "avg(FlightDelayMin)": 53.65384615384615, + "label": "Carrier", + "name": "Carrier", + "type": "keyword", }, - Object { - "Carrier": "Logstash Airways", - "avg(FlightDelayMin)": 45.36144578313253, + ], + }, + "explorer": Object { + "explorerData": Object { + "data": Object { + "Carrier": Array [ + "BeatsWest", + "Logstash Airways", + "OpenSearch Dashboards Airlines", + "OpenSearch-Air", + ], + "avg(FlightDelayMin)": Array [ + 53.65384615384615, + 45.36144578313253, + 63.1578947368421, + 46.81318681318681, + ], + }, + "jsonData": Array [ + Object { + "Carrier": "BeatsWest", + "avg(FlightDelayMin)": 53.65384615384615, + }, + Object { + "Carrier": "Logstash Airways", + "avg(FlightDelayMin)": 45.36144578313253, + }, + Object { + "Carrier": "OpenSearch Dashboards Airlines", + "avg(FlightDelayMin)": 63.1578947368421, + }, + Object { + "Carrier": "OpenSearch-Air", + "avg(FlightDelayMin)": 46.81318681318681, + }, + ], + "metadata": Object { + "fields": Array [ + Object { + "name": "avg(FlightDelayMin)", + "type": "double", + }, + Object { + "name": "Carrier", + "type": "keyword", + }, + ], + }, + "size": 4, + "status": 200, + }, + "explorerFields": Array [ + Object { + "name": "avg(FlightDelayMin)", + "type": "double", + }, + Object { + "name": "Carrier", + "type": "keyword", + }, + ], + }, + "indexFields": Object {}, + "query": Object { + "rawQuery": "source = opensearch_dashboards_sample_data_logs | where match(machine.os,'win') | stats avg(machine.ram) by span(timestamp,1d)", + }, + "rawVizData": Object { + "data": Object { + "Carrier": Array [ + "BeatsWest", + "Logstash Airways", + "OpenSearch Dashboards Airlines", + "OpenSearch-Air", + ], + "avg(FlightDelayMin)": Array [ + 53.65384615384615, + 45.36144578313253, + 63.1578947368421, + 46.81318681318681, + ], + }, + "jsonData": Array [ + Object { + "Carrier": "BeatsWest", + "avg(FlightDelayMin)": 53.65384615384615, + }, + Object { + "Carrier": "Logstash Airways", + "avg(FlightDelayMin)": 45.36144578313253, }, Object { "Carrier": "OpenSearch Dashboards Airlines", @@ -914,74 +1705,305 @@ exports[`Utils helper functions renders displayVisualization function 2`] = ` "size": 4, "status": 200, }, - "userConfigs": Object {}, + "userConfigs": Object { + "dataConfig": Object { + "dimensions": Array [], + "series": Array [ + Object { + "aggregation": "avg", + "customLabel": "", + "label": "machine.ram", + "name": "machine.ram", + }, + ], + "span": Object { + "interval": "1", + "time_field": Array [ + Object { + "label": "timestamp", + "name": "timestamp", + "type": "timestamp", + }, + ], + "unit": Array [ + Object { + "label": "Day", + "text": "Day", + "value": "d", + }, + ], + }, + }, + }, }, "vis": Object { "category": "Visualizations", - "categoryAxis": "xaxis", + "categoryaxis": "xaxis", "component": [Function], - "editorConfig": Object { + "editorconfig": Object { "panelTabs": Array [ Object { "editor": [Function], "id": "data-panel", "mapTo": "dataConfig", - "name": "Data", + "name": "Style", "sections": Array [ Object { "editor": [Function], - "id": "value_options", - "mapTo": "valueOptions", - "name": "Value options", + "id": "legend", + "mapTo": "legend", + "name": "Legend", "schemas": Array [ Object { "component": null, - "isSingleSelection": true, - "mapTo": "xaxis", - "name": "X-axis", + "mapTo": "showLegend", + "name": "Show legend", + "props": Object { + "defaultSelections": Array [ + Object { + "id": "show", + "name": "Show", + }, + ], + "options": Array [ + Object { + "id": "show", + "name": "Show", + }, + Object { + "id": "hidden", + "name": "Hidden", + }, + ], + }, }, Object { "component": null, - "isSingleSelection": false, - "mapTo": "yaxis", - "name": "Y-axis", + "mapTo": "position", + "name": "Position", + "props": Object { + "defaultSelections": Array [ + Object { + "id": "v", + "name": "Right", + }, + ], + "options": Array [ + Object { + "id": "v", + "name": "Right", + }, + Object { + "id": "h", + "name": "Bottom", + }, + ], + }, + }, + Object { + "component": [Function], + "eleType": "input", + "mapTo": "legendSize", + "name": "Legend size", + "title": "Legend size", }, ], }, Object { "editor": [Function], - "id": "chart_options", - "mapTo": "chartOptions", - "name": "Chart options", + "id": "tooltip_options", + "mapTo": "tooltipOptions", + "name": "Tooltip options", "schemas": Array [ Object { "component": null, - "isSingleSelection": true, - "mapTo": "mode", + "mapTo": "tooltipMode", + "name": "Tooltip mode", + "props": Object { + "defaultSelections": Array [ + Object { + "id": "show", + "name": "Show", + }, + ], + "options": Array [ + Object { + "id": "show", + "name": "Show", + }, + Object { + "id": "hidden", + "name": "Hidden", + }, + ], + }, + }, + Object { + "component": null, + "mapTo": "tooltipText", + "name": "Tooltip text", + "props": Object { + "defaultSelections": Array [ + Object { + "id": "all", + "name": "All", + }, + ], + "options": Array [ + Object { + "id": "all", + "name": "All", + }, + Object { + "id": "x", + "name": "Dimension", + }, + Object { + "id": "y", + "name": "Series", + }, + ], + }, + }, + ], + }, + Object { + "editor": [Function], + "id": "chart_styles", + "mapTo": "chartStyles", + "name": "Chart styles", + "schemas": Array [ + Object { + "component": [Function], + "eleType": "buttons", + "mapTo": "style", "name": "Mode", "props": Object { "defaultSelections": Array [ Object { - "modeId": "lines", + "id": "lines", "name": "Lines", }, ], - "dropdownList": Array [ + "options": Array [ Object { - "modeId": "markers", - "name": "Markers", + "id": "lines", + "name": "Lines", }, Object { - "modeId": "lines", - "name": "Lines", + "id": "markers", + "name": "Marker", }, Object { - "modeId": "lines+markers", + "id": "lines+markers", "name": "Lines + Markers", }, ], }, }, + Object { + "component": [Function], + "eleType": "buttons", + "mapTo": "interpolation", + "name": "Interpolation", + "props": Object { + "defaultSelections": Array [ + Object { + "id": "spline", + "name": "Smooth", + }, + ], + "options": Array [ + Object { + "id": "linear", + "name": "Linear", + }, + Object { + "id": "spline", + "name": "Smooth", + }, + Object { + "id": "hv", + "name": "Step before", + }, + Object { + "id": "vh", + "name": "Step after", + }, + ], + }, + }, + Object { + "component": [Function], + "defaultState": 2, + "eleType": "slider", + "mapTo": "lineWidth", + "name": "Line width", + "props": Object { + "max": 10, + }, + }, + Object { + "component": [Function], + "defaultState": 70, + "eleType": "slider", + "mapTo": "fillOpacity", + "name": "Fill opacity", + "props": Object { + "max": 100, + }, + }, + Object { + "component": [Function], + "defaultState": 5, + "eleType": "slider", + "mapTo": "pointSize", + "name": "Point size", + "props": Object { + "max": 40, + }, + }, + Object { + "component": [Function], + "eleType": "input", + "mapTo": "labelSize", + "name": "Label size", + "title": "Label size", + }, + Object { + "component": [Function], + "defaultState": 0, + "eleType": "slider", + "mapTo": "rotateLabels", + "name": "Rotate labels", + "props": Object { + "max": 90, + "min": -90, + "showTicks": true, + "ticks": Array [ + Object { + "label": "-90°", + "value": -90, + }, + Object { + "label": "-45°", + "value": -45, + }, + Object { + "label": "0°", + "value": 0, + }, + Object { + "label": "45°", + "value": 45, + }, + Object { + "label": "90°", + "value": 90, + }, + ], + }, + }, ], }, Object { @@ -994,13 +2016,6 @@ exports[`Utils helper functions renders displayVisualization function 2`] = ` }, ], }, - Object { - "content": Array [], - "editor": [Function], - "id": "style-panel", - "mapTo": "layoutConfig", - "name": "Layout", - }, Object { "editor": [Function], "id": "availability-panel", @@ -1009,18 +2024,18 @@ exports[`Utils helper functions renders displayVisualization function 2`] = ` }, ], }, - "fullLabel": "Line", + "fulllabel": "Time series", "icon": [Function], - "iconType": "visLine", + "icontype": "visLine", "id": "line", - "label": "Line", + "label": "Time series", "name": "line", "selection": Object { "dataLoss": "nothing", }, - "seriesAxis": "yaxis", + "seriesaxis": "yaxis", "type": "line", - "visConfig": Object { + "visconfig": Object { "config": Object { "barmode": "line", "displaylogo": false, @@ -1045,7 +2060,7 @@ exports[`Utils helper functions renders displayVisualization function 2`] = ` "#BD6F26", "#4C636F", ], - "height": 500, + "height": 1180, "legend": Object { "orientation": "v", "traceorder": "normal", @@ -1084,135 +2099,434 @@ exports[`Utils helper functions renders displayVisualization function 2`] = ` "defaultAxes": Object { "xaxis": Array [ Object { - "name": "Carrier", - "type": "keyword", + "label": "", + "name": "", }, ], "yaxis": Array [ Object { + "label": "avg(FlightDelayMin)", "name": "avg(FlightDelayMin)", "type": "double", }, - ], - }, - "indexFields": Object {}, - "query": Object {}, - "rawVizData": Object { - "data": Object { - "Carrier": Array [ - "BeatsWest", - "Logstash Airways", - "OpenSearch Dashboards Airlines", - "OpenSearch-Air", - ], - "avg(FlightDelayMin)": Array [ - 53.65384615384615, - 45.36144578313253, - 63.1578947368421, - 46.81318681318681, - ], - }, - "jsonData": Array [ - Object { - "Carrier": "BeatsWest", - "avg(FlightDelayMin)": 53.65384615384615, - }, - Object { - "Carrier": "Logstash Airways", - "avg(FlightDelayMin)": 45.36144578313253, - }, - Object { - "Carrier": "OpenSearch Dashboards Airlines", - "avg(FlightDelayMin)": 63.1578947368421, - }, Object { - "Carrier": "OpenSearch-Air", - "avg(FlightDelayMin)": 46.81318681318681, + "label": "Carrier", + "name": "Carrier", + "type": "keyword", }, ], - "metadata": Object { - "fields": Array [ - Object { - "name": "avg(FlightDelayMin)", - "type": "double", - }, - Object { - "name": "Carrier", - "type": "keyword", - }, - ], - }, + }, + "explorer": Object { + "explorerData": Object { + "data": Object { + "Carrier": Array [ + "BeatsWest", + "Logstash Airways", + "OpenSearch Dashboards Airlines", + "OpenSearch-Air", + ], + "avg(FlightDelayMin)": Array [ + 53.65384615384615, + 45.36144578313253, + 63.1578947368421, + 46.81318681318681, + ], + }, + "jsonData": Array [ + Object { + "Carrier": "BeatsWest", + "avg(FlightDelayMin)": 53.65384615384615, + }, + Object { + "Carrier": "Logstash Airways", + "avg(FlightDelayMin)": 45.36144578313253, + }, + Object { + "Carrier": "OpenSearch Dashboards Airlines", + "avg(FlightDelayMin)": 63.1578947368421, + }, + Object { + "Carrier": "OpenSearch-Air", + "avg(FlightDelayMin)": 46.81318681318681, + }, + ], + "metadata": Object { + "fields": Array [ + Object { + "name": "avg(FlightDelayMin)", + "type": "double", + }, + Object { + "name": "Carrier", + "type": "keyword", + }, + ], + }, + "size": 4, + "status": 200, + }, + "explorerFields": Array [ + Object { + "name": "avg(FlightDelayMin)", + "type": "double", + }, + Object { + "name": "Carrier", + "type": "keyword", + }, + ], + }, + "indexFields": Object {}, + "query": Object { + "rawQuery": "source = opensearch_dashboards_sample_data_logs | where match(machine.os,'win') | stats avg(machine.ram) by span(timestamp,1d)", + }, + "rawVizData": Object { + "data": Object { + "Carrier": Array [ + "BeatsWest", + "Logstash Airways", + "OpenSearch Dashboards Airlines", + "OpenSearch-Air", + ], + "avg(FlightDelayMin)": Array [ + 53.65384615384615, + 45.36144578313253, + 63.1578947368421, + 46.81318681318681, + ], + }, + "jsonData": Array [ + Object { + "Carrier": "BeatsWest", + "avg(FlightDelayMin)": 53.65384615384615, + }, + Object { + "Carrier": "Logstash Airways", + "avg(FlightDelayMin)": 45.36144578313253, + }, + Object { + "Carrier": "OpenSearch Dashboards Airlines", + "avg(FlightDelayMin)": 63.1578947368421, + }, + Object { + "Carrier": "OpenSearch-Air", + "avg(FlightDelayMin)": 46.81318681318681, + }, + ], + "metadata": Object { + "fields": Array [ + Object { + "name": "avg(FlightDelayMin)", + "type": "double", + }, + Object { + "name": "Carrier", + "type": "keyword", + }, + ], + }, "size": 4, "status": 200, }, - "userConfigs": Object {}, + "userConfigs": Object { + "dataConfig": Object { + "dimensions": Array [], + "series": Array [ + Object { + "aggregation": "avg", + "customLabel": "", + "label": "machine.ram", + "name": "machine.ram", + }, + ], + "span": Object { + "interval": "1", + "time_field": Array [ + Object { + "label": "timestamp", + "name": "timestamp", + "type": "timestamp", + }, + ], + "unit": Array [ + Object { + "label": "Day", + "text": "Day", + "value": "d", + }, + ], + }, + }, + }, }, "vis": Object { "category": "Visualizations", - "categoryAxis": "xaxis", + "categoryaxis": "xaxis", "component": [Function], - "editorConfig": Object { + "editorconfig": Object { "panelTabs": Array [ Object { "editor": [Function], "id": "data-panel", "mapTo": "dataConfig", - "name": "Data", + "name": "Style", "sections": Array [ Object { "editor": [Function], - "id": "value_options", - "mapTo": "valueOptions", - "name": "Value options", + "id": "legend", + "mapTo": "legend", + "name": "Legend", "schemas": Array [ Object { "component": null, - "isSingleSelection": true, - "mapTo": "xaxis", - "name": "X-axis", + "mapTo": "showLegend", + "name": "Show legend", + "props": Object { + "defaultSelections": Array [ + Object { + "id": "show", + "name": "Show", + }, + ], + "options": Array [ + Object { + "id": "show", + "name": "Show", + }, + Object { + "id": "hidden", + "name": "Hidden", + }, + ], + }, }, Object { "component": null, - "isSingleSelection": false, - "mapTo": "yaxis", - "name": "Y-axis", + "mapTo": "position", + "name": "Position", + "props": Object { + "defaultSelections": Array [ + Object { + "id": "v", + "name": "Right", + }, + ], + "options": Array [ + Object { + "id": "v", + "name": "Right", + }, + Object { + "id": "h", + "name": "Bottom", + }, + ], + }, + }, + Object { + "component": [Function], + "eleType": "input", + "mapTo": "legendSize", + "name": "Legend size", + "title": "Legend size", }, ], }, Object { "editor": [Function], - "id": "chart_options", - "mapTo": "chartOptions", - "name": "Chart options", + "id": "tooltip_options", + "mapTo": "tooltipOptions", + "name": "Tooltip options", "schemas": Array [ Object { "component": null, - "isSingleSelection": true, - "mapTo": "mode", + "mapTo": "tooltipMode", + "name": "Tooltip mode", + "props": Object { + "defaultSelections": Array [ + Object { + "id": "show", + "name": "Show", + }, + ], + "options": Array [ + Object { + "id": "show", + "name": "Show", + }, + Object { + "id": "hidden", + "name": "Hidden", + }, + ], + }, + }, + Object { + "component": null, + "mapTo": "tooltipText", + "name": "Tooltip text", + "props": Object { + "defaultSelections": Array [ + Object { + "id": "all", + "name": "All", + }, + ], + "options": Array [ + Object { + "id": "all", + "name": "All", + }, + Object { + "id": "x", + "name": "Dimension", + }, + Object { + "id": "y", + "name": "Series", + }, + ], + }, + }, + ], + }, + Object { + "editor": [Function], + "id": "chart_styles", + "mapTo": "chartStyles", + "name": "Chart styles", + "schemas": Array [ + Object { + "component": [Function], + "eleType": "buttons", + "mapTo": "style", "name": "Mode", "props": Object { "defaultSelections": Array [ Object { - "modeId": "lines", + "id": "lines", "name": "Lines", }, ], - "dropdownList": Array [ + "options": Array [ Object { - "modeId": "markers", - "name": "Markers", + "id": "lines", + "name": "Lines", }, Object { - "modeId": "lines", - "name": "Lines", + "id": "markers", + "name": "Marker", }, Object { - "modeId": "lines+markers", + "id": "lines+markers", "name": "Lines + Markers", }, ], }, }, + Object { + "component": [Function], + "eleType": "buttons", + "mapTo": "interpolation", + "name": "Interpolation", + "props": Object { + "defaultSelections": Array [ + Object { + "id": "spline", + "name": "Smooth", + }, + ], + "options": Array [ + Object { + "id": "linear", + "name": "Linear", + }, + Object { + "id": "spline", + "name": "Smooth", + }, + Object { + "id": "hv", + "name": "Step before", + }, + Object { + "id": "vh", + "name": "Step after", + }, + ], + }, + }, + Object { + "component": [Function], + "defaultState": 2, + "eleType": "slider", + "mapTo": "lineWidth", + "name": "Line width", + "props": Object { + "max": 10, + }, + }, + Object { + "component": [Function], + "defaultState": 70, + "eleType": "slider", + "mapTo": "fillOpacity", + "name": "Fill opacity", + "props": Object { + "max": 100, + }, + }, + Object { + "component": [Function], + "defaultState": 5, + "eleType": "slider", + "mapTo": "pointSize", + "name": "Point size", + "props": Object { + "max": 40, + }, + }, + Object { + "component": [Function], + "eleType": "input", + "mapTo": "labelSize", + "name": "Label size", + "title": "Label size", + }, + Object { + "component": [Function], + "defaultState": 0, + "eleType": "slider", + "mapTo": "rotateLabels", + "name": "Rotate labels", + "props": Object { + "max": 90, + "min": -90, + "showTicks": true, + "ticks": Array [ + Object { + "label": "-90°", + "value": -90, + }, + Object { + "label": "-45°", + "value": -45, + }, + Object { + "label": "0°", + "value": 0, + }, + Object { + "label": "45°", + "value": 45, + }, + Object { + "label": "90°", + "value": 90, + }, + ], + }, + }, ], }, Object { @@ -1225,13 +2539,6 @@ exports[`Utils helper functions renders displayVisualization function 2`] = ` }, ], }, - Object { - "content": Array [], - "editor": [Function], - "id": "style-panel", - "mapTo": "layoutConfig", - "name": "Layout", - }, Object { "editor": [Function], "id": "availability-panel", @@ -1240,18 +2547,18 @@ exports[`Utils helper functions renders displayVisualization function 2`] = ` }, ], }, - "fullLabel": "Line", + "fulllabel": "Time series", "icon": [Function], - "iconType": "visLine", + "icontype": "visLine", "id": "line", - "label": "Line", + "label": "Time series", "name": "line", "selection": Object { "dataLoss": "nothing", }, - "seriesAxis": "yaxis", + "seriesaxis": "yaxis", "type": "line", - "visConfig": Object { + "visconfig": Object { "config": Object { "barmode": "line", "displaylogo": false, @@ -1276,7 +2583,7 @@ exports[`Utils helper functions renders displayVisualization function 2`] = ` "#BD6F26", "#4C636F", ], - "height": 500, + "height": 1180, "legend": Object { "orientation": "v", "traceorder": "normal", @@ -1321,47 +2628,7 @@ exports[`Utils helper functions renders displayVisualization function 2`] = ` }, } } - layout={ - Object { - "colorway": Array [ - "#3CA1C7", - "#8C55A3", - "#DB748A", - "#F2BE4B", - "#68CCC2", - "#2A7866", - "#843769", - "#374FB8", - "#BD6F26", - "#4C636F", - ], - "height": 500, - "legend": Object { - "orientation": "v", - "traceorder": "normal", - }, - "margin": Object { - "b": 30, - "l": 60, - "pad": 0, - "r": 30, - "t": 50, - }, - "paper_bgcolor": "rgba(0, 0, 0, 0)", - "plot_bgcolor": "rgba(0, 0, 0, 0)", - "showlegend": true, - "xaxis": Object { - "fixedrange": true, - "showgrid": false, - "visible": true, - }, - "yaxis": Object { - "fixedrange": true, - "showgrid": false, - "visible": true, - }, - } - } + layout={[Function]} visualizations={ Object { "data": Object { @@ -1369,29 +2636,97 @@ exports[`Utils helper functions renders displayVisualization function 2`] = ` "defaultAxes": Object { "xaxis": Array [ Object { - "name": "Carrier", - "type": "keyword", + "label": "", + "name": "", }, ], "yaxis": Array [ Object { + "label": "avg(FlightDelayMin)", "name": "avg(FlightDelayMin)", "type": "double", }, + Object { + "label": "Carrier", + "name": "Carrier", + "type": "keyword", + }, ], }, - "indexFields": Object {}, - "query": Object {}, - "rawVizData": Object { - "data": Object { - "Carrier": Array [ - "BeatsWest", - "Logstash Airways", - "OpenSearch Dashboards Airlines", - "OpenSearch-Air", - ], - "avg(FlightDelayMin)": Array [ - 53.65384615384615, + "explorer": Object { + "explorerData": Object { + "data": Object { + "Carrier": Array [ + "BeatsWest", + "Logstash Airways", + "OpenSearch Dashboards Airlines", + "OpenSearch-Air", + ], + "avg(FlightDelayMin)": Array [ + 53.65384615384615, + 45.36144578313253, + 63.1578947368421, + 46.81318681318681, + ], + }, + "jsonData": Array [ + Object { + "Carrier": "BeatsWest", + "avg(FlightDelayMin)": 53.65384615384615, + }, + Object { + "Carrier": "Logstash Airways", + "avg(FlightDelayMin)": 45.36144578313253, + }, + Object { + "Carrier": "OpenSearch Dashboards Airlines", + "avg(FlightDelayMin)": 63.1578947368421, + }, + Object { + "Carrier": "OpenSearch-Air", + "avg(FlightDelayMin)": 46.81318681318681, + }, + ], + "metadata": Object { + "fields": Array [ + Object { + "name": "avg(FlightDelayMin)", + "type": "double", + }, + Object { + "name": "Carrier", + "type": "keyword", + }, + ], + }, + "size": 4, + "status": 200, + }, + "explorerFields": Array [ + Object { + "name": "avg(FlightDelayMin)", + "type": "double", + }, + Object { + "name": "Carrier", + "type": "keyword", + }, + ], + }, + "indexFields": Object {}, + "query": Object { + "rawQuery": "source = opensearch_dashboards_sample_data_logs | where match(machine.os,'win') | stats avg(machine.ram) by span(timestamp,1d)", + }, + "rawVizData": Object { + "data": Object { + "Carrier": Array [ + "BeatsWest", + "Logstash Airways", + "OpenSearch Dashboards Airlines", + "OpenSearch-Air", + ], + "avg(FlightDelayMin)": Array [ + 53.65384615384615, 45.36144578313253, 63.1578947368421, 46.81318681318681, @@ -1430,74 +2765,305 @@ exports[`Utils helper functions renders displayVisualization function 2`] = ` "size": 4, "status": 200, }, - "userConfigs": Object {}, + "userConfigs": Object { + "dataConfig": Object { + "dimensions": Array [], + "series": Array [ + Object { + "aggregation": "avg", + "customLabel": "", + "label": "machine.ram", + "name": "machine.ram", + }, + ], + "span": Object { + "interval": "1", + "time_field": Array [ + Object { + "label": "timestamp", + "name": "timestamp", + "type": "timestamp", + }, + ], + "unit": Array [ + Object { + "label": "Day", + "text": "Day", + "value": "d", + }, + ], + }, + }, + }, }, "vis": Object { "category": "Visualizations", - "categoryAxis": "xaxis", + "categoryaxis": "xaxis", "component": [Function], - "editorConfig": Object { + "editorconfig": Object { "panelTabs": Array [ Object { "editor": [Function], "id": "data-panel", "mapTo": "dataConfig", - "name": "Data", + "name": "Style", "sections": Array [ Object { "editor": [Function], - "id": "value_options", - "mapTo": "valueOptions", - "name": "Value options", + "id": "legend", + "mapTo": "legend", + "name": "Legend", "schemas": Array [ Object { "component": null, - "isSingleSelection": true, - "mapTo": "xaxis", - "name": "X-axis", + "mapTo": "showLegend", + "name": "Show legend", + "props": Object { + "defaultSelections": Array [ + Object { + "id": "show", + "name": "Show", + }, + ], + "options": Array [ + Object { + "id": "show", + "name": "Show", + }, + Object { + "id": "hidden", + "name": "Hidden", + }, + ], + }, }, Object { "component": null, - "isSingleSelection": false, - "mapTo": "yaxis", - "name": "Y-axis", + "mapTo": "position", + "name": "Position", + "props": Object { + "defaultSelections": Array [ + Object { + "id": "v", + "name": "Right", + }, + ], + "options": Array [ + Object { + "id": "v", + "name": "Right", + }, + Object { + "id": "h", + "name": "Bottom", + }, + ], + }, + }, + Object { + "component": [Function], + "eleType": "input", + "mapTo": "legendSize", + "name": "Legend size", + "title": "Legend size", }, ], }, Object { "editor": [Function], - "id": "chart_options", - "mapTo": "chartOptions", - "name": "Chart options", + "id": "tooltip_options", + "mapTo": "tooltipOptions", + "name": "Tooltip options", "schemas": Array [ Object { "component": null, - "isSingleSelection": true, - "mapTo": "mode", + "mapTo": "tooltipMode", + "name": "Tooltip mode", + "props": Object { + "defaultSelections": Array [ + Object { + "id": "show", + "name": "Show", + }, + ], + "options": Array [ + Object { + "id": "show", + "name": "Show", + }, + Object { + "id": "hidden", + "name": "Hidden", + }, + ], + }, + }, + Object { + "component": null, + "mapTo": "tooltipText", + "name": "Tooltip text", + "props": Object { + "defaultSelections": Array [ + Object { + "id": "all", + "name": "All", + }, + ], + "options": Array [ + Object { + "id": "all", + "name": "All", + }, + Object { + "id": "x", + "name": "Dimension", + }, + Object { + "id": "y", + "name": "Series", + }, + ], + }, + }, + ], + }, + Object { + "editor": [Function], + "id": "chart_styles", + "mapTo": "chartStyles", + "name": "Chart styles", + "schemas": Array [ + Object { + "component": [Function], + "eleType": "buttons", + "mapTo": "style", "name": "Mode", "props": Object { "defaultSelections": Array [ Object { - "modeId": "lines", + "id": "lines", "name": "Lines", }, ], - "dropdownList": Array [ + "options": Array [ Object { - "modeId": "markers", - "name": "Markers", + "id": "lines", + "name": "Lines", }, Object { - "modeId": "lines", - "name": "Lines", + "id": "markers", + "name": "Marker", }, Object { - "modeId": "lines+markers", + "id": "lines+markers", "name": "Lines + Markers", }, ], }, }, + Object { + "component": [Function], + "eleType": "buttons", + "mapTo": "interpolation", + "name": "Interpolation", + "props": Object { + "defaultSelections": Array [ + Object { + "id": "spline", + "name": "Smooth", + }, + ], + "options": Array [ + Object { + "id": "linear", + "name": "Linear", + }, + Object { + "id": "spline", + "name": "Smooth", + }, + Object { + "id": "hv", + "name": "Step before", + }, + Object { + "id": "vh", + "name": "Step after", + }, + ], + }, + }, + Object { + "component": [Function], + "defaultState": 2, + "eleType": "slider", + "mapTo": "lineWidth", + "name": "Line width", + "props": Object { + "max": 10, + }, + }, + Object { + "component": [Function], + "defaultState": 70, + "eleType": "slider", + "mapTo": "fillOpacity", + "name": "Fill opacity", + "props": Object { + "max": 100, + }, + }, + Object { + "component": [Function], + "defaultState": 5, + "eleType": "slider", + "mapTo": "pointSize", + "name": "Point size", + "props": Object { + "max": 40, + }, + }, + Object { + "component": [Function], + "eleType": "input", + "mapTo": "labelSize", + "name": "Label size", + "title": "Label size", + }, + Object { + "component": [Function], + "defaultState": 0, + "eleType": "slider", + "mapTo": "rotateLabels", + "name": "Rotate labels", + "props": Object { + "max": 90, + "min": -90, + "showTicks": true, + "ticks": Array [ + Object { + "label": "-90°", + "value": -90, + }, + Object { + "label": "-45°", + "value": -45, + }, + Object { + "label": "0°", + "value": 0, + }, + Object { + "label": "45°", + "value": 45, + }, + Object { + "label": "90°", + "value": 90, + }, + ], + }, + }, ], }, Object { @@ -1510,13 +3076,6 @@ exports[`Utils helper functions renders displayVisualization function 2`] = ` }, ], }, - Object { - "content": Array [], - "editor": [Function], - "id": "style-panel", - "mapTo": "layoutConfig", - "name": "Layout", - }, Object { "editor": [Function], "id": "availability-panel", @@ -1525,18 +3084,18 @@ exports[`Utils helper functions renders displayVisualization function 2`] = ` }, ], }, - "fullLabel": "Line", + "fulllabel": "Time series", "icon": [Function], - "iconType": "visLine", + "icontype": "visLine", "id": "line", - "label": "Line", + "label": "Time series", "name": "line", "selection": Object { "dataLoss": "nothing", }, - "seriesAxis": "yaxis", + "seriesaxis": "yaxis", "type": "line", - "visConfig": Object { + "visconfig": Object { "config": Object { "barmode": "line", "displaylogo": false, @@ -1561,7 +3120,7 @@ exports[`Utils helper functions renders displayVisualization function 2`] = ` "#BD6F26", "#4C636F", ], - "height": 500, + "height": 1180, "legend": Object { "orientation": "v", "traceorder": "normal", @@ -1609,63 +3168,71 @@ exports[`Utils helper functions renders displayVisualization function 2`] = ` data={ Array [ Object { - "mode": "line", - "name": "avg(FlightDelayMin)", + "fill": "tozeroy", + "fillcolor": "rgba(60,161,199,0.35)", + "hoverinfo": "all", + "line": Object { + "color": "#3CA1C7", + "shape": "spline", + "width": 2, + }, + "marker": Object { + "color": "rgba(60,161,199,0.35)", + "line": Object { + "color": "#3CA1C7", + "width": 2, + }, + "size": 5, + }, + "mode": "lines", + "name": "avg(machine.ram)", "type": "line", "x": Array [ - "BeatsWest", - "Logstash Airways", - "OpenSearch Dashboards Airlines", - "OpenSearch-Air", + "", + "", + "", + "", ], "y": Array [ - 53.65384615384615, - 45.36144578313253, - 63.1578947368421, - 46.81318681318681, + undefined, + undefined, + undefined, + undefined, ], }, + Object { + "mode": "text", + "showlegend": false, + "text": Array [], + "x": Array [], + "y": Array [], + }, ] } layout={ Object { - "colorway": Array [ - "#3CA1C7", - "#8C55A3", - "#DB748A", - "#F2BE4B", - "#68CCC2", - "#2A7866", - "#843769", - "#374FB8", - "#BD6F26", - "#4C636F", - ], - "height": 500, + "autosize": true, "legend": Object { "orientation": "v", - "traceorder": "normal", }, "margin": Object { "b": 30, - "l": 60, - "pad": 0, - "r": 30, + "l": 30, + "pad": 4, + "r": 5, "t": 50, }, - "paper_bgcolor": "rgba(0, 0, 0, 0)", - "plot_bgcolor": "rgba(0, 0, 0, 0)", + "shapes": Array [], "showlegend": true, "title": "", "xaxis": Object { - "fixedrange": true, - "showgrid": false, - "visible": true, + "automargin": true, + "tickangle": 0, + "tickfont": Object {}, }, "yaxis": Object { - "fixedrange": true, - "showgrid": false, - "visible": true, + "automargin": true, + "tickfont": Object {}, }, } } @@ -1688,22 +3255,45 @@ exports[`Utils helper functions renders displayVisualization function 2`] = ` data={ Array [ Object { - "mode": "line", - "name": "avg(FlightDelayMin)", + "fill": "tozeroy", + "fillcolor": "rgba(60,161,199,0.35)", + "hoverinfo": "all", + "line": Object { + "color": "#3CA1C7", + "shape": "spline", + "width": 2, + }, + "marker": Object { + "color": "rgba(60,161,199,0.35)", + "line": Object { + "color": "#3CA1C7", + "width": 2, + }, + "size": 5, + }, + "mode": "lines", + "name": "avg(machine.ram)", "type": "line", "x": Array [ - "BeatsWest", - "Logstash Airways", - "OpenSearch Dashboards Airlines", - "OpenSearch-Air", + "", + "", + "", + "", ], "y": Array [ - 53.65384615384615, - 45.36144578313253, - 63.1578947368421, - 46.81318681318681, + undefined, + undefined, + undefined, + undefined, ], }, + Object { + "mode": "text", + "showlegend": false, + "text": Array [], + "x": Array [], + "y": Array [], + }, ] } debug={false} @@ -1712,44 +3302,28 @@ exports[`Utils helper functions renders displayVisualization function 2`] = ` Object { "autosize": true, "barmode": "stack", - "colorway": Array [ - "#3CA1C7", - "#8C55A3", - "#DB748A", - "#F2BE4B", - "#68CCC2", - "#2A7866", - "#843769", - "#374FB8", - "#BD6F26", - "#4C636F", - ], - "height": 500, "hovermode": "closest", "legend": Object { "orientation": "v", - "traceorder": "normal", }, "margin": Object { "b": 30, - "l": 60, - "pad": 0, - "r": 30, + "l": 30, + "pad": 4, + "r": 5, "t": 50, }, - "paper_bgcolor": "rgba(0, 0, 0, 0)", - "plot_bgcolor": "rgba(0, 0, 0, 0)", + "shapes": Array [], "showlegend": true, "title": "", "xaxis": Object { - "fixedrange": true, - "showgrid": false, - "visible": true, + "automargin": true, + "tickangle": 0, + "tickfont": Object {}, }, "yaxis": Object { - "fixedrange": true, - "showgrid": false, - "visible": true, + "automargin": true, + "tickfont": Object {}, }, } } @@ -1788,25 +3362,89 @@ exports[`Utils helper functions renders displayVisualization function 3`] = ` "defaultAxes": Object { "xaxis": Array [ Object { + "label": "Carrier", "name": "Carrier", "type": "keyword", }, ], "yaxis": Array [ Object { + "label": "avg(FlightDelayMin)", "name": "avg(FlightDelayMin)", "type": "double", }, ], }, - "indexFields": Object {}, - "query": Object {}, - "rawVizData": Object { - "data": Object { - "Carrier": Array [ - "BeatsWest", - "Logstash Airways", - "OpenSearch Dashboards Airlines", + "explorer": Object { + "explorerData": Object { + "data": Object { + "Carrier": Array [ + "BeatsWest", + "Logstash Airways", + "OpenSearch Dashboards Airlines", + "OpenSearch-Air", + ], + "avg(FlightDelayMin)": Array [ + 53.65384615384615, + 45.36144578313253, + 63.1578947368421, + 46.81318681318681, + ], + }, + "jsonData": Array [ + Object { + "Carrier": "BeatsWest", + "avg(FlightDelayMin)": 53.65384615384615, + }, + Object { + "Carrier": "Logstash Airways", + "avg(FlightDelayMin)": 45.36144578313253, + }, + Object { + "Carrier": "OpenSearch Dashboards Airlines", + "avg(FlightDelayMin)": 63.1578947368421, + }, + Object { + "Carrier": "OpenSearch-Air", + "avg(FlightDelayMin)": 46.81318681318681, + }, + ], + "metadata": Object { + "fields": Array [ + Object { + "name": "avg(FlightDelayMin)", + "type": "double", + }, + Object { + "name": "Carrier", + "type": "keyword", + }, + ], + }, + "size": 4, + "status": 200, + }, + "explorerFields": Array [ + Object { + "name": "avg(FlightDelayMin)", + "type": "double", + }, + Object { + "name": "Carrier", + "type": "keyword", + }, + ], + }, + "indexFields": Object {}, + "query": Object { + "rawQuery": "source = opensearch_dashboards_sample_data_logs | stats avg(machine.ram) by machine.os", + }, + "rawVizData": Object { + "data": Object { + "Carrier": Array [ + "BeatsWest", + "Logstash Airways", + "OpenSearch Dashboards Airlines", "OpenSearch-Air", ], "avg(FlightDelayMin)": Array [ @@ -1849,127 +3487,310 @@ exports[`Utils helper functions renders displayVisualization function 3`] = ` "size": 4, "status": 200, }, - "userConfigs": Object {}, + "userConfigs": Object { + "dataConfig": Object { + "dimensions": Array [ + Object { + "customLabel": "", + "label": "machine.os", + "name": "machine.os", + }, + ], + "series": Array [ + Object { + "aggregation": "avg", + "customLabel": "", + "label": "machine.ram", + "name": "machine.ram", + }, + ], + "span": undefined, + }, + }, }, "vis": Object { + "barwidth": 0.97, "category": "Visualizations", - "categoryAxis": "xaxis", + "categoryaxis": "xaxis", "component": [Function], - "editorConfig": Object { + "editorconfig": Object { "panelTabs": Array [ Object { "editor": [Function], "id": "data-panel", "mapTo": "dataConfig", - "name": "Data", + "name": "Style", "sections": Array [ Object { "editor": [Function], - "id": "value_options", - "mapTo": "valueOptions", - "name": "Value options", + "id": "tooltip_options", + "mapTo": "tooltipOptions", + "name": "Tooltip options", "schemas": Array [ Object { "component": null, - "isSingleSelection": false, - "mapTo": "xaxis", - "name": "X-axis", + "mapTo": "tooltipMode", + "name": "Tooltip mode", + "props": Object { + "defaultSelections": Array [ + Object { + "id": "show", + "name": "Show", + }, + ], + "options": Array [ + Object { + "id": "show", + "name": "Show", + }, + Object { + "id": "hidden", + "name": "Hidden", + }, + ], + }, }, Object { "component": null, - "isSingleSelection": false, - "mapTo": "yaxis", - "name": "Y-axis", + "mapTo": "tooltipText", + "name": "Tooltip text", + "props": Object { + "defaultSelections": Array [ + Object { + "id": "all", + "name": "All", + }, + ], + "options": Array [ + Object { + "id": "all", + "name": "All", + }, + Object { + "id": "x", + "name": "Dimension", + }, + Object { + "id": "y", + "name": "Series", + }, + ], + }, }, ], }, Object { "editor": [Function], - "id": "chart_options", - "mapTo": "chartOptions", - "name": "Chart options", + "id": "legend", + "mapTo": "legend", + "name": "Legend", "schemas": Array [ Object { "component": null, - "isSingleSelection": true, - "mapTo": "orientation", - "name": "Orientation", + "mapTo": "showLegend", + "name": "Show legend", "props": Object { "defaultSelections": Array [ Object { - "name": "Horizontal", - "orientationId": "h", + "id": "show", + "name": "Show", }, ], - "dropdownList": Array [ + "options": Array [ Object { - "name": "Vertical", - "orientationId": "v", + "id": "show", + "name": "Show", }, Object { - "name": "Horizontal", - "orientationId": "h", + "id": "hidden", + "name": "Hidden", }, ], }, }, Object { "component": null, - "isSingleSelection": true, + "mapTo": "position", + "name": "Position", + "props": Object { + "defaultSelections": Array [ + Object { + "id": "v", + "name": "Right", + }, + ], + "options": Array [ + Object { + "id": "v", + "name": "Right", + }, + Object { + "id": "h", + "name": "Bottom", + }, + ], + }, + }, + Object { + "component": [Function], + "eleType": "input", + "mapTo": "legendSize", + "name": "Legend size", + "title": "Legend size", + }, + ], + }, + Object { + "editor": [Function], + "id": "chart_styles", + "mapTo": "chartStyles", + "name": "Chart styles", + "schemas": Array [ + Object { + "component": [Function], + "eleType": "buttons", "mapTo": "mode", "name": "Mode", "props": Object { "defaultSelections": Array [ Object { - "modeId": "group", + "id": "group", "name": "Group", }, ], - "dropdownList": Array [ + "options": Array [ Object { - "modeId": "group", + "id": "group", "name": "Group", }, Object { - "modeId": "stack", + "id": "stack", "name": "Stack", }, ], }, }, + Object { + "component": [Function], + "eleType": "input", + "mapTo": "labelSize", + "name": "Label size", + }, + Object { + "component": [Function], + "defaultState": 0, + "eleType": "slider", + "mapTo": "rotateBarLabels", + "name": "Rotate bar labels", + "props": Object { + "max": 90, + "min": -90, + "showTicks": true, + "ticks": Array [ + Object { + "label": "-90°", + "value": -90, + }, + Object { + "label": "-45°", + "value": -45, + }, + Object { + "label": "0°", + "value": 0, + }, + Object { + "label": "45°", + "value": 45, + }, + Object { + "label": "90°", + "value": 90, + }, + ], + }, + }, + Object { + "component": [Function], + "defaultState": 0.7, + "eleType": "slider", + "mapTo": "groupWidth", + "name": "Group width", + "props": Object { + "max": 1, + "step": 0.01, + }, + }, + Object { + "component": [Function], + "defaultState": 0.97, + "eleType": "slider", + "mapTo": "barWidth", + "name": "Bar width", + "props": Object { + "max": 1, + "step": 0.01, + }, + }, + Object { + "component": [Function], + "defaultState": 2, + "eleType": "slider", + "mapTo": "lineWidth", + "name": "Line width", + "props": Object { + "max": 10, + }, + }, + Object { + "component": [Function], + "defaultState": 70, + "eleType": "slider", + "mapTo": "fillOpacity", + "name": "Fill opacity", + "props": Object { + "max": 100, + }, + }, ], }, ], }, Object { - "content": Array [], "editor": [Function], - "id": "style-panel", - "mapTo": "layoutConfig", - "name": "Layout", + "id": "availability-panel", + "mapTo": "availabilityConfig", + "name": "Availability", }, ], }, - "fullLabel": "Bar", + "fillopacity": 70, + "fulllabel": "Horizontal bar", + "groupwidth": 0.7, "icon": [Function], - "iconType": "visBarVerticalStacked", + "icontype": "visBarHorizontalStacked", "id": "horizontal_bar", - "label": "Bar", + "label": "Horizontal bar", + "labelangle": 0, + "legendposition": "v", + "linewidth": 2, + "mode": "group", "name": "horizontal_bar", "orientation": "h", "selection": Object { "dataLoss": "nothing", }, - "seriesAxis": "yaxis", + "seriesaxis": "yaxis", + "showlegend": "show", "type": "bar", - "visConfig": Object { + "visconfig": Object { "config": Object { "displaylogo": false, "responsive": true, }, "isUniColor": false, "layout": Object { - "height": 500, + "height": 1180, "legend": Object { "orientation": "v", "traceorder": "normal", @@ -1996,19 +3817,83 @@ exports[`Utils helper functions renders displayVisualization function 3`] = ` "defaultAxes": Object { "xaxis": Array [ Object { + "label": "Carrier", "name": "Carrier", "type": "keyword", }, ], "yaxis": Array [ + Object { + "label": "avg(FlightDelayMin)", + "name": "avg(FlightDelayMin)", + "type": "double", + }, + ], + }, + "explorer": Object { + "explorerData": Object { + "data": Object { + "Carrier": Array [ + "BeatsWest", + "Logstash Airways", + "OpenSearch Dashboards Airlines", + "OpenSearch-Air", + ], + "avg(FlightDelayMin)": Array [ + 53.65384615384615, + 45.36144578313253, + 63.1578947368421, + 46.81318681318681, + ], + }, + "jsonData": Array [ + Object { + "Carrier": "BeatsWest", + "avg(FlightDelayMin)": 53.65384615384615, + }, + Object { + "Carrier": "Logstash Airways", + "avg(FlightDelayMin)": 45.36144578313253, + }, + Object { + "Carrier": "OpenSearch Dashboards Airlines", + "avg(FlightDelayMin)": 63.1578947368421, + }, + Object { + "Carrier": "OpenSearch-Air", + "avg(FlightDelayMin)": 46.81318681318681, + }, + ], + "metadata": Object { + "fields": Array [ + Object { + "name": "avg(FlightDelayMin)", + "type": "double", + }, + Object { + "name": "Carrier", + "type": "keyword", + }, + ], + }, + "size": 4, + "status": 200, + }, + "explorerFields": Array [ Object { "name": "avg(FlightDelayMin)", "type": "double", }, + Object { + "name": "Carrier", + "type": "keyword", + }, ], }, "indexFields": Object {}, - "query": Object {}, + "query": Object { + "rawQuery": "source = opensearch_dashboards_sample_data_logs | stats avg(machine.ram) by machine.os", + }, "rawVizData": Object { "data": Object { "Carrier": Array [ @@ -2057,898 +3942,310 @@ exports[`Utils helper functions renders displayVisualization function 3`] = ` "size": 4, "status": 200, }, - "userConfigs": Object {}, + "userConfigs": Object { + "dataConfig": Object { + "dimensions": Array [ + Object { + "customLabel": "", + "label": "machine.os", + "name": "machine.os", + }, + ], + "series": Array [ + Object { + "aggregation": "avg", + "customLabel": "", + "label": "machine.ram", + "name": "machine.ram", + }, + ], + "span": undefined, + }, + }, }, "vis": Object { + "barwidth": 0.97, "category": "Visualizations", - "categoryAxis": "xaxis", + "categoryaxis": "xaxis", "component": [Function], - "editorConfig": Object { + "editorconfig": Object { "panelTabs": Array [ Object { "editor": [Function], "id": "data-panel", "mapTo": "dataConfig", - "name": "Data", + "name": "Style", "sections": Array [ Object { "editor": [Function], - "id": "value_options", - "mapTo": "valueOptions", - "name": "Value options", - "schemas": Array [ - Object { - "component": null, - "isSingleSelection": false, - "mapTo": "xaxis", - "name": "X-axis", - }, - Object { - "component": null, - "isSingleSelection": false, - "mapTo": "yaxis", - "name": "Y-axis", - }, - ], - }, - Object { - "editor": [Function], - "id": "chart_options", - "mapTo": "chartOptions", - "name": "Chart options", + "id": "tooltip_options", + "mapTo": "tooltipOptions", + "name": "Tooltip options", "schemas": Array [ Object { "component": null, - "isSingleSelection": true, - "mapTo": "orientation", - "name": "Orientation", + "mapTo": "tooltipMode", + "name": "Tooltip mode", "props": Object { "defaultSelections": Array [ Object { - "name": "Horizontal", - "orientationId": "h", + "id": "show", + "name": "Show", }, ], - "dropdownList": Array [ + "options": Array [ Object { - "name": "Vertical", - "orientationId": "v", + "id": "show", + "name": "Show", }, Object { - "name": "Horizontal", - "orientationId": "h", + "id": "hidden", + "name": "Hidden", }, ], }, }, Object { "component": null, - "isSingleSelection": true, - "mapTo": "mode", - "name": "Mode", + "mapTo": "tooltipText", + "name": "Tooltip text", "props": Object { "defaultSelections": Array [ Object { - "modeId": "group", - "name": "Group", + "id": "all", + "name": "All", }, ], - "dropdownList": Array [ + "options": Array [ Object { - "modeId": "group", - "name": "Group", + "id": "all", + "name": "All", }, Object { - "modeId": "stack", - "name": "Stack", + "id": "x", + "name": "Dimension", + }, + Object { + "id": "y", + "name": "Series", }, ], }, }, ], }, - ], - }, - Object { - "content": Array [], - "editor": [Function], - "id": "style-panel", - "mapTo": "layoutConfig", - "name": "Layout", - }, - ], - }, - "fullLabel": "Bar", - "icon": [Function], - "iconType": "visBarVerticalStacked", - "id": "horizontal_bar", - "label": "Bar", - "name": "horizontal_bar", - "orientation": "h", - "selection": Object { - "dataLoss": "nothing", - }, - "seriesAxis": "yaxis", - "type": "bar", - "visConfig": Object { - "config": Object { - "displaylogo": false, - "responsive": true, - }, - "isUniColor": false, - "layout": Object { - "height": 500, - "legend": Object { - "orientation": "v", - "traceorder": "normal", - }, - "margin": Object { - "b": 30, - "l": 60, - "pad": 0, - "r": 30, - "t": 50, - }, - "showlegend": true, - }, - }, - }, - } - } - > - - - -
- - - - - -
-`; - -exports[`Utils helper functions renders displayVisualization function 4`] = ` -
- - @@ -3235,14 +4819,29 @@ exports[`Utils helper functions renders displayVisualization function 4`] = ` data={ Array [ Object { + "hoverinfo": "all", "marker": Object { - "color": Array [], + "color": "rgba(60,161,199,0.35)", + "line": Object { + "color": "#3CA1C7", + "width": 2, + }, }, - "name": "count('ip')", + "name": "avg(machine.ram)", "orientation": "h", "type": "bar", - "x": Array [], - "y": Array [], + "x": Array [ + undefined, + undefined, + undefined, + undefined, + ], + "y": Array [ + "", + "", + "", + "", + ], }, ] } @@ -3251,7 +4850,9 @@ exports[`Utils helper functions renders displayVisualization function 4`] = ` layout={ Object { "autosize": true, - "barmode": "", + "bargap": 0.30000000000000004, + "bargroupgap": 0.030000000000000027, + "barmode": "group", "colorway": Array [ "#3CA1C7", "#8C55A3", @@ -3264,31 +4865,31 @@ exports[`Utils helper functions renders displayVisualization function 4`] = ` "#BD6F26", "#4C636F", ], - "height": 500, "hovermode": "closest", "legend": Object { "orientation": "v", - "traceorder": "normal", }, "margin": Object { "b": 30, - "l": 60, - "pad": 0, - "r": 30, + "l": 30, + "pad": 4, + "r": 5, "t": 50, }, - "showlegend": true, + "showlegend": "show", "title": "", "xaxis": Object { "automargin": true, - "rangemode": "normal", - "showgrid": true, - "zeroline": false, + "tickfont": Object { + "size": 12, + }, }, "yaxis": Object { - "rangemode": "normal", - "showgrid": true, - "zeroline": false, + "automargin": true, + "tickangle": 0, + "tickfont": Object { + "size": 12, + }, }, } } @@ -3316,3 +4917,5 @@ exports[`Utils helper functions renders displayVisualization function 4`] = `
`; + +exports[`Utils helper functions renders displayVisualization function 4`] = `
`; diff --git a/dashboards-observability/public/components/custom_panels/helpers/__tests__/utils.test.tsx b/dashboards-observability/public/components/custom_panels/helpers/__tests__/utils.test.tsx index e1d1f1dbb..55e6349e0 100644 --- a/dashboards-observability/public/components/custom_panels/helpers/__tests__/utils.test.tsx +++ b/dashboards-observability/public/components/custom_panels/helpers/__tests__/utils.test.tsx @@ -24,6 +24,10 @@ import { samplePPLEmptyResponse, samplePPLResponse, sampleSavedVisualization, + sampleSavedVisualizationForHorizontalBar, + sampleSavedVisualizationForLine, + sampleSavedVisualizationForPie, + sampleSavedVisualizationForTreeMap, } from '../../../../../test/panels_constants'; import { PPL_DATE_FORMAT } from '../../../../../common/constants/shared'; import React from 'react'; @@ -104,25 +108,31 @@ describe('Utils helper functions', () => { it('renders displayVisualization function', () => { const wrapper1 = mount( -
{displayVisualization(sampleSavedVisualization, samplePPLResponse, 'bar')}
+
+ {displayVisualization(sampleSavedVisualization.visualization, samplePPLResponse, 'bar')} +
); expect(wrapper1).toMatchSnapshot(); const wrapper2 = mount( -
{displayVisualization(sampleSavedVisualization, samplePPLResponse, 'line')}
+
{displayVisualization(sampleSavedVisualizationForLine, samplePPLResponse, 'line')}
); expect(wrapper2).toMatchSnapshot(); - const wrapper3 = mount( + const wrapper4 = mount(
- {displayVisualization(sampleSavedVisualization, samplePPLResponse, 'horizontal_bar')} + {displayVisualization( + sampleSavedVisualizationForHorizontalBar, + samplePPLResponse, + 'horizontal_bar' + )}
); - expect(wrapper3).toMatchSnapshot(); + expect(wrapper4).toMatchSnapshot(); - const wrapper4 = mount( + const wrapper6 = mount(
{displayVisualization({}, samplePPLEmptyResponse, 'horizontal_bar')}
); - expect(wrapper4).toMatchSnapshot(); + expect(wrapper6).toMatchSnapshot(); }); }); diff --git a/dashboards-observability/public/components/custom_panels/helpers/utils.tsx b/dashboards-observability/public/components/custom_panels/helpers/utils.tsx index 3121ddeee..0523391f2 100644 --- a/dashboards-observability/public/components/custom_panels/helpers/utils.tsx +++ b/dashboards-observability/public/components/custom_panels/helpers/utils.tsx @@ -18,6 +18,8 @@ import { CUSTOM_PANELS_API_PREFIX } from '../../../../common/constants/custom_pa import { VisualizationType, SavedVisualizationType } from '../../../../common/types/custom_panels'; import { Visualization } from '../../visualizations/visualization'; import { getVizContainerProps } from '../../../components/visualizations/charts/helpers'; +import { QueryManager } from '../../../../common/query_manager'; +import { getDefaultVisConfig } from '../../event_analytics/utils'; /* * "Utils" This file contains different reused functions in operational panels @@ -75,6 +77,24 @@ export const mergeLayoutAndVisualizations = ( setPanelVisualizations(newPanelVisualizations); }; +/* Update Span interval for a Query + * Input query -> source = opensearch_dashboards_sample_data_logs | stats avg(bytes) by span(timestamp,1d) + * spanParam -> 1M + * + * Updates the span command interval + * Returns -> source = opensearch_dashboards_sample_data_logs | stats avg(bytes) by span(timestamp,1M) + */ +export const updateQuerySpanInterval = ( + query: string, + timestampField: string, + spanParam: string +) => { + return query.replace( + new RegExp(`span\\(\\s*${timestampField}\\s*,(.*?)\\)`), + `span(${timestampField},${spanParam})` + ); +}; + /* Builds Final Query by adding time and query filters(From panel UI) to the original visualization query * -> Final Query is as follows: * -> finalQuery = indexPartOfQuery + timeQueryFilter + panelFilterQuery + filterPartOfQuery @@ -82,6 +102,7 @@ export const mergeLayoutAndVisualizations = ( * + | where utc_time > ‘2021-07-01 00:00:00’ and utc_time < ‘2021-07-02 00:00:00’ * + | where Carrier='OpenSearch-Air' * + | stats sum(FlightDelayMin) as delays by Carrier + * */ const queryAccumulator = ( originalQuery: string, @@ -100,7 +121,9 @@ const queryAccumulator = ( startTime )}' and ${timestampField} <= '${convertDateTime(endTime, false)}'`; const pplFilterQuery = panelFilterQuery === '' ? '' : ` | ${panelFilterQuery}`; - return indexPartOfQuery + timeQueryFilter + pplFilterQuery + filterPartOfQuery; + + const finalQuery = indexPartOfQuery + timeQueryFilter + pplFilterQuery + filterPartOfQuery; + return finalQuery; }; // PPL Service requestor @@ -143,7 +166,6 @@ export const fetchVisualizationById = async ( setIsError(`Could not locate saved visualization id:${savedVisualizationId}`); console.error('Issue in fetching the saved Visualization by Id', err); }); - return savedVisualization; }; @@ -185,6 +207,7 @@ export const renderSavedVisualization = async ( startTime: string, endTime: string, filterQuery: string, + spanParam: string | undefined, setVisualizationTitle: React.Dispatch>, setVisualizationType: React.Dispatch>, setVisualizationData: React.Dispatch>, @@ -196,6 +219,7 @@ export const renderSavedVisualization = async ( setIsError(''); let visualization = {} as SavedVisualizationType; + let updatedVisualizationQuery = ''; visualization = await fetchVisualizationById(http, savedVisualizationId, setIsError); if (_.isEmpty(visualization)) { @@ -211,11 +235,21 @@ export const renderSavedVisualization = async ( setVisualizationType(visualization.type); } - setVisualizationMetaData(visualization); + if (spanParam !== undefined) { + updatedVisualizationQuery = updateQuerySpanInterval( + visualization.query, + visualization.timeField, + spanParam + ); + } else { + updatedVisualizationQuery = visualization.query; + } + + setVisualizationMetaData({ ...visualization, query: updatedVisualizationQuery }); getQueryResponse( pplService, - visualization.query, + updatedVisualizationQuery, visualization.type, startTime, endTime, @@ -227,6 +261,90 @@ export const renderSavedVisualization = async ( ); }; +const createCatalogVisualizationMetaData = ( + catalogSource: string, + visualizationQuery: string, + visualizationType: string, + visualizationTimeField: string +) => { + return { + name: catalogSource, + description: '', + query: visualizationQuery, + type: visualizationType, + selected_date_range: { + start: 'now/y', + end: 'now', + text: '', + }, + selected_timestamp: { + name: visualizationTimeField, + type: 'timestamp', + }, + selected_fields: { + text: '', + tokens: [], + }, + }; +}; + +//Creates a catalogVisualization for a runtime catalog based PPL query and runs getQueryResponse +export const renderCatalogVisualization = async ( + http: CoreStart['http'], + pplService: PPLService, + catalogSource: string, + startTime: string, + endTime: string, + filterQuery: string, + spanParam: string | undefined, + setVisualizationTitle: React.Dispatch>, + setVisualizationType: React.Dispatch>, + setVisualizationData: React.Dispatch>, + setVisualizationMetaData: React.Dispatch>, + setIsLoading: React.Dispatch>, + setIsError: React.Dispatch>, + spanResolution?: string +) => { + setIsLoading(true); + setIsError(''); + + const visualizationType = 'line'; + const visualizationTimeField = '@timestamp'; + let visualizationQuery = `source = ${catalogSource} | stats avg(@value) by span(${visualizationTimeField},1h)`; + + if (spanParam !== undefined) { + visualizationQuery = updateQuerySpanInterval( + visualizationQuery, + visualizationTimeField, + spanParam + ); + } + + const visualizationMetaData = createCatalogVisualizationMetaData( + catalogSource, + visualizationQuery, + visualizationType, + visualizationTimeField + ); + setVisualizationTitle(catalogSource); + setVisualizationType(visualizationType); + + setVisualizationMetaData({ ...visualizationMetaData, query: visualizationQuery }); + + getQueryResponse( + pplService, + visualizationQuery, + visualizationType, + startTime, + endTime, + setVisualizationData, + setIsLoading, + setIsError, + filterQuery, + visualizationTimeField + ); +}; + // Function to store recently used time filters and set start and end time. export const onTimeChange = ( start: ShortDate, @@ -289,17 +407,29 @@ export const isPPLFilterValid = ( // Renders visualization in the vizualization container component export const displayVisualization = (metaData: any, data: any, type: string) => { - if (metaData === undefined || metaData === {}) { + if (metaData === undefined || _.isEmpty(metaData)) { return <>; } + const userVisConfig = + !_.isEmpty(metaData.user_configs) && !_.isEmpty(metaData.user_configs.series) + ? metaData.user_configs + : { + dataConfig: { + ...getDefaultVisConfig( + new QueryManager().queryParser().parse(metaData.query).getStats() + ), + }, + }; + return ( ); diff --git a/dashboards-observability/public/components/custom_panels/panel_modules/visualization_container/visualization_container.tsx b/dashboards-observability/public/components/custom_panels/panel_modules/visualization_container/visualization_container.tsx index bb1a25e04..12eaa4977 100644 --- a/dashboards-observability/public/components/custom_panels/panel_modules/visualization_container/visualization_container.tsx +++ b/dashboards-observability/public/components/custom_panels/panel_modules/visualization_container/visualization_container.tsx @@ -4,13 +4,20 @@ */ import { + EuiButton, EuiButtonIcon, + EuiCodeBlock, EuiContextMenuItem, EuiContextMenuPanel, EuiFlexGroup, EuiFlexItem, EuiIcon, EuiLoadingChart, + EuiModal, + EuiModalBody, + EuiModalFooter, + EuiModalHeader, + EuiModalHeaderTitle, EuiPanel, EuiPopover, EuiSpacer, @@ -20,7 +27,11 @@ import { import React, { useEffect, useMemo, useState } from 'react'; import { CoreStart } from '../../../../../../../src/core/public'; import PPLService from '../../../../services/requests/ppl'; -import { displayVisualization, renderSavedVisualization } from '../../helpers/utils'; +import { + displayVisualization, + renderCatalogVisualization, + renderSavedVisualization, +} from '../../helpers/utils'; import './visualization_container.scss'; /* @@ -40,6 +51,8 @@ import './visualization_container.scss'; * pplFilterValue: string with panel PPL filter value * showFlyout: function to show the flyout * removeVisualization: function to remove all the visualizations + * catalogVisualization: boolean pointing if the container is used for catalog metrics + * spanParam: Override the span(timestamp, 1h) in visualization to span(timestamp, spanParam) */ interface Props { @@ -57,6 +70,8 @@ interface Props { cloneVisualization?: (visualzationTitle: string, savedVisualizationId: string) => void; showFlyout?: (isReplacement?: boolean | undefined, replaceVizId?: string | undefined) => void; removeVisualization?: (visualizationId: string) => void; + catalogVisualization?: boolean; + spanParam?: string; } export const VisualizationContainer = ({ @@ -74,6 +89,8 @@ export const VisualizationContainer = ({ cloneVisualization, showFlyout, removeVisualization, + catalogVisualization, + spanParam, }: Props) => { const [isPopoverOpen, setIsPopoverOpen] = useState(false); const [disablePopover, setDisablePopover] = useState(false); @@ -86,6 +103,39 @@ export const VisualizationContainer = ({ const onActionsMenuClick = () => setIsPopoverOpen((currPopoverOpen) => !currPopoverOpen); const closeActionsMenu = () => setIsPopoverOpen(false); + const [isModalVisible, setIsModalVisible] = useState(false); + + const closeModal = () => setIsModalVisible(false); + const showModal = () => setIsModalVisible(true); + + let modal; + + if (isModalVisible) { + modal = ( + + + +

{visualizationMetaData.name}

+
+
+ + + This PPL Query is generated in runtime from selected data source + + + {visualizationMetaData.query} + + + + + + Close + + +
+ ); + } + let popoverPanel = [ , ]; + let showModelPanel = [ + { + closeActionsMenu(); + showModal(); + }} + > + View query + , + ]; + if (usedInNotebooks) { - popoverPanel = [popoverPanel[0]]; + popoverPanel = catalogVisualization ? [showModelPanel] : [popoverPanel[0]]; } const loadVisaulization = async () => { - await renderSavedVisualization( - http, - pplService, - savedVisualizationId, - fromTime, - toTime, - pplFilterValue, - setVisualizationTitle, - setVisualizationType, - setVisualizationData, - setVisualizationMetaData, - setIsLoading, - setIsError - ); + if (catalogVisualization) + await renderCatalogVisualization( + http, + pplService, + savedVisualizationId, + fromTime, + toTime, + pplFilterValue, + spanParam, + setVisualizationTitle, + setVisualizationType, + setVisualizationData, + setVisualizationMetaData, + setIsLoading, + setIsError + ); + else + await renderSavedVisualization( + http, + pplService, + savedVisualizationId, + fromTime, + toTime, + pplFilterValue, + spanParam, + setVisualizationTitle, + setVisualizationType, + setVisualizationData, + setVisualizationMetaData, + setIsLoading, + setIsError + ); }; const memoisedVisualizationBox = useMemo( @@ -171,52 +253,55 @@ export const VisualizationContainer = ({ }, [editMode]); return ( - -
- - - - -
{visualizationTitle}
-
-
-
- - {disablePopover ? ( - { - removeVisualization(visualizationId); - }} - /> - ) : ( - - } - isOpen={isPopoverOpen} - closePopover={closeActionsMenu} - anchorPosition="downLeft" - > - - - )} - -
-
- {memoisedVisualizationBox} -
+ <> + +
+ + + + +
{visualizationTitle}
+
+
+
+ + {disablePopover ? ( + { + removeVisualization(visualizationId); + }} + /> + ) : ( + + } + isOpen={isPopoverOpen} + closePopover={closeActionsMenu} + anchorPosition="downLeft" + > + + + )} + +
+
+ {memoisedVisualizationBox} +
+ {modal} + ); }; diff --git a/dashboards-observability/public/components/custom_panels/panel_modules/visualization_flyout/visualization_flyout.tsx b/dashboards-observability/public/components/custom_panels/panel_modules/visualization_flyout/visualization_flyout.tsx index 2c97e7095..7c1f2dc9b 100644 --- a/dashboards-observability/public/components/custom_panels/panel_modules/visualization_flyout/visualization_flyout.tsx +++ b/dashboards-observability/public/components/custom_panels/panel_modules/visualization_flyout/visualization_flyout.tsx @@ -239,6 +239,7 @@ export const VisaulizationFlyout = ({ hasNoInitialSelection onChange={(e) => onChangeSelection(e)} options={visualizationOptions} + value={selectValue} /> diff --git a/dashboards-observability/public/components/event_analytics/explorer/explorer.scss b/dashboards-observability/public/components/event_analytics/explorer/explorer.scss index 423e226e3..1b9696545 100644 --- a/dashboards-observability/public/components/event_analytics/explorer/explorer.scss +++ b/dashboards-observability/public/components/event_analytics/explorer/explorer.scss @@ -3,15 +3,22 @@ * SPDX-License-Identifier: Apache-2.0 */ - .liveStream { - margin : 8px; - height: 40px; - align-items: center; - justify-content: center; - flex-direction: row; - display: flex; - flex-grow: 1; - vertical-align: baseline; - } +#opensearch-dashboards-body { + overflow-y: hidden; +} +.liveStream { + margin : 8px; + height: 40px; + align-items: center; + justify-content: center; + flex-direction: row; + display: flex; + flex-grow: 1; + vertical-align: baseline; +} + +.mainContentTabs .euiResizableContainer { + height: calc(100vh - 298px); +} \ No newline at end of file diff --git a/dashboards-observability/public/components/event_analytics/explorer/explorer.tsx b/dashboards-observability/public/components/event_analytics/explorer/explorer.tsx index 9f46d43ee..1db108a1f 100644 --- a/dashboards-observability/public/components/event_analytics/explorer/explorer.tsx +++ b/dashboards-observability/public/components/event_analytics/explorer/explorer.tsx @@ -2,86 +2,109 @@ * Copyright OpenSearch Contributors * SPDX-License-Identifier: Apache-2.0 */ -/* eslint-disable react-hooks/exhaustive-deps */ -import './explorer.scss'; -import React, { useState, useMemo, useEffect, useRef, useCallback, ReactElement } from 'react'; -import { batch, useDispatch, useSelector } from 'react-redux'; -import { isEmpty, cloneDeep, isEqual, has, reduce } from 'lodash'; -import { FormattedMessage } from '@osd/i18n/react'; -import { EuiHorizontalRule, EuiLoadingSpinner, EuiSpacer, EuiTitle } from '@elastic/eui'; +import dateMath from '@elastic/datemath'; import { - EuiText, + EuiButton, + EuiButtonEmpty, EuiButtonIcon, - EuiTabbedContent, - EuiTabbedContentTab, + EuiContextMenuItem, + EuiFieldText, EuiFlexGroup, EuiFlexItem, + EuiFormRow, + EuiHorizontalRule, EuiLink, - EuiContextMenuItem, + EuiLoadingSpinner, + EuiPopover, + EuiPopoverFooter, + EuiSpacer, + EuiTabbedContent, + EuiTabbedContentTab, + EuiText, + EuiTitle, } from '@elastic/eui'; -import dateMath from '@elastic/datemath'; +import { FormattedMessage } from '@osd/i18n/react'; import classNames from 'classnames'; -import { Search } from '../../common/search/search'; -import { CountDistribution } from './visualizations/count_distribution'; -import { DataGrid } from './events_views/data_grid'; -import { Sidebar } from './sidebar'; -import { NoResults } from './no_results'; -import { HitsCounter } from './hits_counter/hits_counter'; -import { TimechartHeader } from './timechart_header'; -import { ExplorerVisualizations } from './visualizations'; -import { IField, IQueryTab, IDefaultTimestampState } from '../../../../common/types/explorer'; +import { cloneDeep, has, isEmpty, isEqual, reduce } from 'lodash'; +import React, { ReactElement, useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import { batch, useDispatch, useSelector } from 'react-redux'; import { - TAB_CHART_TITLE, - TAB_EVENT_TITLE, + AVAILABLE_FIELDS, + DATE_PICKER_FORMAT, + DEFAULT_AVAILABILITY_QUERY, + EVENT_ANALYTICS_DOCUMENTATION_URL, + FILTERED_PATTERN, + NEW_TAB, + PATTERNS_EXTRACTOR_REGEX, + PATTERNS_REGEX, + PATTERN_REGEX, + PPL_DEFAULT_PATTERN_REGEX_FILETER, RAW_QUERY, + SAVED_OBJECT_ID, + SAVED_OBJECT_TYPE, + SAVED_QUERY, + SAVED_VISUALIZATION, SELECTED_DATE_RANGE, SELECTED_FIELDS, + SELECTED_PATTERN_FIELD, SELECTED_TIMESTAMP, - AVAILABLE_FIELDS, - TIME_INTERVAL_OPTIONS, - SAVED_QUERY, - SAVED_VISUALIZATION, - SAVED_OBJECT_ID, - SAVED_OBJECT_TYPE, - NEW_TAB, + TAB_CHART_ID, + TAB_CHART_TITLE, TAB_CREATED_TYPE, - EVENT_ANALYTICS_DOCUMENTATION_URL, TAB_EVENT_ID, - TAB_CHART_ID, - DEFAULT_AVAILABILITY_QUERY, - DATE_PICKER_FORMAT, - PPL_PATTERNS_REGEX, - SELECTED_PATTERN, + TAB_EVENT_TITLE, + TIME_INTERVAL_OPTIONS, } from '../../../../common/constants/explorer'; import { - PPL_STATS_REGEX, - PPL_NEWLINE_REGEX, - LIVE_OPTIONS, LIVE_END_TIME, + LIVE_OPTIONS, + PPL_NEWLINE_REGEX, + PPL_PATTERNS_DOCUMENTATION_URL, + PPL_STATS_REGEX, } from '../../../../common/constants/shared'; -import { getIndexPatternFromRawQuery, preprocessQuery, buildQuery } from '../../../../common/utils'; -import { useFetchEvents, useFetchVisualizations } from '../hooks'; -import { changeQuery, changeDateRange, selectQueries } from '../redux/slices/query_slice'; +import { GroupByChunk } from '../../../../common/query_manager/ast/types'; +import { + IDefaultTimestampState, + IExplorerProps, + IField, + IQueryTab, + IVisualizationContainerProps, +} from '../../../../common/types/explorer'; +import { + buildQuery, + composeFinalQuery, + getIndexPatternFromRawQuery, +} from '../../../../common/utils'; +import { sleep } from '../../common/live_tail/live_tail_button'; +import { onItemSelect, parseGetSuggestions } from '../../common/search/autocomplete_logic'; +import { Search } from '../../common/search/search'; +import { getVizContainerProps } from '../../visualizations/charts/helpers'; +import { TabContext, useFetchEvents, useFetchPatterns, useFetchVisualizations } from '../hooks'; +import { selectCountDistribution } from '../redux/slices/count_distribution_slice'; +import { selectFields, sortFields, updateFields } from '../redux/slices/field_slice'; +import { selectPatterns } from '../redux/slices/patterns_slice'; import { selectQueryResult } from '../redux/slices/query_result_slice'; -import { selectFields, updateFields, sortFields } from '../redux/slices/field_slice'; +import { changeDateRange, changeQuery, selectQueries } from '../redux/slices/query_slice'; import { updateTabName } from '../redux/slices/query_tab_slice'; -import { selectCountDistribution } from '../redux/slices/count_distribution_slice'; import { selectExplorerVisualization } from '../redux/slices/visualization_slice'; import { - selectVisualizationConfig, change as changeVisualizationConfig, + change as changeVizConfig, + change as updateVizConfig, + selectVisualizationConfig, } from '../redux/slices/viualization_config_slice'; -import { change as updateVizConfig } from '../redux/slices/viualization_config_slice'; -import { IExplorerProps, IVisualizationContainerProps } from '../../../../common/types/explorer'; -import { TabContext } from '../hooks'; -import { getVizContainerProps } from '../../visualizations/charts/helpers'; -import { parseGetSuggestions, onItemSelect } from '../../common/search/autocomplete_logic'; -import { formatError } from '../utils'; -import { sleep } from '../../common/live_tail/live_tail_button'; +import { formatError, getDefaultVisConfig } from '../utils'; +import { DataGrid } from './events_views/data_grid'; +import './explorer.scss'; +import { HitsCounter } from './hits_counter/hits_counter'; import { PatternsTable } from './log_patterns/patterns_table'; -import { selectPatterns } from '../redux/slices/patterns_slice'; -import { useFetchPatterns } from '../hooks/use_fetch_patterns'; +import { NoResults } from './no_results'; +import { Sidebar } from './sidebar'; +import { TimechartHeader } from './timechart_header'; +import { ExplorerVisualizations } from './visualizations'; +import { CountDistribution } from './visualizations/count_distribution'; +import { QueryManager } from '../../../../common/query_manager'; const TYPE_TAB_MAPPING = { [SAVED_QUERY]: TAB_EVENT_ID, @@ -110,6 +133,7 @@ export const Explorer = ({ setEndTime, callback, callbackInApp, + queryManager = new QueryManager(), }: IExplorerProps) => { const dispatch = useDispatch(); const requestParams = { tabId }; @@ -121,7 +145,11 @@ export const Explorer = ({ pplService, requestParams, }); - const { getPatterns, setDefaultPatternsField } = useFetchPatterns({ + const { + isEventsLoading: isPatternLoading, + getPatterns, + setDefaultPatternsField, + } = useFetchPatterns({ pplService, requestParams, }); @@ -143,6 +171,8 @@ export const Explorer = ({ const [timeIntervalOptions, setTimeIntervalOptions] = useState(TIME_INTERVAL_OPTIONS); const [isOverridingTimestamp, setIsOverridingTimestamp] = useState(false); const [isOverridingPattern, setIsOverridingPattern] = useState(false); + const [isPatternConfigPopoverOpen, setIsPatternConfigPopoverOpen] = useState(false); + const [patternRegexInput, setPatternRegexInput] = useState(PPL_DEFAULT_PATTERN_REGEX_FILETER); const [tempQuery, setTempQuery] = useState(query[RAW_QUERY]); const [isLiveTailPopoverOpen, setIsLiveTailPopoverOpen] = useState(false); const [isLiveTailOn, setIsLiveTailOn] = useState(false); @@ -152,7 +182,17 @@ export const Explorer = ({ const [browserTabFocus, setBrowserTabFocus] = useState(true); const [liveTimestamp, setLiveTimestamp] = useState(DATE_PICKER_FORMAT); const [triggerAvailability, setTriggerAvailability] = useState(false); + + const selectedIntervalRef = useRef<{ + text: string; + value: string; + }>(); const [viewLogPatterns, setViewLogPatterns] = useState(false); + const [spanValue, setSpanValue] = useState(false); + const [subType, setSubType] = useState('visualization'); + const [metricMeasure, setMetricMeasure] = useState(''); + const [metricLabel, setMetricLabel] = useState([]); + const [metricChecked, setMetricChecked] = useState(false); const queryRef = useRef(); const appBasedRef = useRef(''); appBasedRef.current = appBaseQuery; @@ -168,13 +208,11 @@ export const Explorer = ({ liveTailTabIdRef.current = liveTailTabId; liveTailNameRef.current = liveTailName; - let minInterval = 'y'; const findAutoInterval = (start: string = '', end: string = '') => { - if (start?.length === 0 || end?.length === 0 || start === end) - return ['d', [...TIME_INTERVAL_OPTIONS]]; const momentStart = dateMath.parse(start)!; - const momentEnd = dateMath.parse(end)!; + const momentEnd = dateMath.parse(end, { roundUp: true })!; const diffSeconds = momentEnd.unix() - momentStart.unix(); + let minInterval = 'y' // less than 1 second if (diffSeconds <= 1) minInterval = 'ms'; @@ -195,6 +233,7 @@ export const Explorer = ({ { text: 'Auto', value: 'auto_' + minInterval }, ...TIME_INTERVAL_OPTIONS, ]); + selectedIntervalRef.current = ({ text: 'Auto', value: 'auto_' + minInterval }) }; useEffect(() => { @@ -216,24 +255,6 @@ export const Explorer = ({ }; }; - const composeFinalQuery = ( - curQuery: any, - startingTime: string, - endingTime: string, - timeField: string, - isLiveQuery: boolean - ) => { - const fullQuery = buildQuery(appBasedRef.current, curQuery![RAW_QUERY]); - if (isEmpty(fullQuery)) return ''; - return preprocessQuery({ - rawQuery: fullQuery, - startTime: startingTime, - endTime: endingTime, - timeField, - isLiveQuery, - }); - }; - const getSavedDataById = async (objectId: string) => { // load saved query/visualization if object id exists await savedObjects @@ -245,6 +266,7 @@ export const Explorer = ({ const isSavedQuery = has(savedData, SAVED_QUERY); const savedType = isSavedQuery ? SAVED_QUERY : SAVED_VISUALIZATION; const objectData = isSavedQuery ? savedData.savedQuery : savedData.savedVisualization; + const isSavedVisualization = savedData.savedVisualization; const currQuery = appLogEvents ? objectData?.query.replace(appBaseQuery + '| ', '') : objectData?.query || ''; @@ -289,11 +311,19 @@ export const Explorer = ({ ); // fill saved user configs if (objectData?.type) { + let visConfig = {}; + const customConfig = objectData.user_configs ? JSON.parse(objectData.user_configs) : {}; + if (!isEmpty(customConfig.dataConfig) && !isEmpty(customConfig.dataConfig?.series)) { + visConfig = { ...customConfig }; + } else { + const statsTokens = queryManager.queryParser().parse(objectData.query).getStats(); + visConfig = { dataConfig: { ...getDefaultVisConfig(statsTokens) } }; + } await dispatch( updateVizConfig({ tabId, vizId: objectData?.type, - data: JSON.parse(objectData.user_configs), + data: visConfig, }) ); } @@ -305,6 +335,13 @@ export const Explorer = ({ setTempQuery((staleTempQuery: string) => { return appLogEvents ? currQuery : objectData?.query || staleTempQuery; }); + if (isSavedVisualization?.sub_type) { + if (isSavedVisualization?.sub_type === 'metric') { + setMetricChecked(true); + setMetricMeasure(isSavedVisualization?.units_of_measure); + } + setSubType(isSavedVisualization?.sub_type); + } const tabToBeFocused = isSavedQuery ? TYPE_TAB_MAPPING[SAVED_QUERY] : TYPE_TAB_MAPPING[SAVED_VISUALIZATION]; @@ -326,6 +363,7 @@ export const Explorer = ({ const curQuery = queryRef.current; const rawQueryStr = buildQuery(appBasedRef.current, curQuery![RAW_QUERY]); const curIndex = getIndexPatternFromRawQuery(rawQueryStr); + if (isEmpty(rawQueryStr)) return; if (isEmpty(curIndex)) { @@ -334,7 +372,6 @@ export const Explorer = ({ } let curTimestamp: string = curQuery![SELECTED_TIMESTAMP]; - if (isEmpty(curTimestamp)) { const defaultTimestamp = await getDefaultTimestampByIndexPattern(curIndex); if (isEmpty(defaultTimestamp.default_timestamp)) { @@ -347,13 +384,13 @@ export const Explorer = ({ } } - let curPattern: string = curQuery![SELECTED_PATTERN]; + let curPattern: string = curQuery![SELECTED_PATTERN_FIELD]; if (isEmpty(curPattern)) { const patternErrorHandler = getErrorHandler('Error fetching default pattern field'); await setDefaultPatternsField(curIndex, '', patternErrorHandler); const newQuery = queryRef.current; - curPattern = newQuery![SELECTED_PATTERN]; + curPattern = newQuery![SELECTED_PATTERN_FIELD]; if (isEmpty(curPattern)) { setToast('Index does not contain a valid pattern field.', 'danger'); return; @@ -367,11 +404,15 @@ export const Explorer = ({ // compose final query const finalQuery = composeFinalQuery( - curQuery, + curQuery![RAW_QUERY], startingTime!, endingTime!, curTimestamp, - isLiveTailOnRef.current + isLiveTailOnRef.current, + appBasedRef.current, + curQuery![SELECTED_PATTERN_FIELD], + curQuery![PATTERN_REGEX], + curQuery![FILTERED_PATTERN] ); await dispatch( @@ -386,22 +427,33 @@ export const Explorer = ({ // search if (finalQuery.match(PPL_STATS_REGEX)) { + const cusVisIds = userVizConfigs ? Object.keys(userVizConfigs) : []; getVisualizations(); getAvailableFields(`search source=${curIndex}`); + for (const visId of cusVisIds) { + dispatch( + changeVisualizationConfig({ + tabId, + vizId: visId, + data: { ...userVizConfigs[visId] }, + }) + ); + } } else { - findAutoInterval(startTime, endTime); + if (!selectedIntervalRef.current || selectedIntervalRef.current.text === 'Auto') { + findAutoInterval(startingTime, endingTime); + } if (isLiveTailOnRef.current) { getLiveTail(undefined, getErrorHandler('Error fetching events')); } else { getEvents(undefined, getErrorHandler('Error fetching events')); } - getCountVisualizations(minInterval); + getCountVisualizations(selectedIntervalRef.current!.value.replace(/^auto_/, '')); // to fetch patterns data on current query - if (!finalQuery.match(PPL_PATTERNS_REGEX)) { - const patternErrorHandler = getErrorHandler('Error fetching patterns'); - getPatterns(patternErrorHandler); - } + if (!finalQuery.match(PATTERNS_REGEX)) { + getPatterns(selectedIntervalRef.current!.value.replace(/^auto_/, '')); + } } // for comparing usage if for the same tab, user changed index from one to another @@ -500,8 +552,22 @@ export const Explorer = ({ ); }; - const handleTimeRangePickerRefresh = (availability?: boolean) => { + const handleTimeRangePickerRefresh = async (availability?: boolean) => { handleQuerySearch(availability); + if (availability !== true && query.rawQuery.match(PATTERNS_REGEX)) { + let currQuery = query.rawQuery; + const currPattern = currQuery.match(PATTERNS_EXTRACTOR_REGEX)!.groups!.pattern; + // Remove existing pattern selection if it exists + if (currQuery.match(PATTERNS_REGEX)) { + currQuery = currQuery.replace(PATTERNS_REGEX, ''); + } + const patternSelectQuery = `${currQuery.trim()} | patterns ${currPattern}`; + await setTempQuery(patternSelectQuery); + await updateQueryInStore(patternSelectQuery); + // Passing in empty string will remove pattern query + const patternErrorHandler = getErrorHandler('Error fetching patterns'); + getPatterns(minInterval, patternErrorHandler); + } }; /** @@ -575,7 +641,7 @@ export const Explorer = ({ getErrorHandler('Error overriding default pattern') ); setIsOverridingPattern(false); - await getPatterns(getErrorHandler('Error fetching patterns')); + await getPatterns(minInterval, getErrorHandler('Error fetching patterns')); }; const totalHits: number = useMemo(() => { @@ -594,17 +660,19 @@ export const Explorer = ({ }, [countDistribution?.data]); const onPatternSelection = async (pattern: string) => { - let currQuery = queryRef.current![RAW_QUERY] as string; - const currPattern = queryRef.current![SELECTED_PATTERN] as string; - // Remove existing pattern selection if it exists - if (currQuery.match(PPL_PATTERNS_REGEX)) { - currQuery = currQuery.replace(PPL_PATTERNS_REGEX, ''); + if (queryRef.current![FILTERED_PATTERN] === pattern) { + return; } - const patternSelectQuery = `${currQuery.trim()} | patterns ${currPattern} | where patterns_field = '${pattern}'`; - // Passing in empty string will remove pattern query - const newQuery = pattern ? patternSelectQuery : currQuery; - await setTempQuery(newQuery); - await updateQueryInStore(newQuery); + dispatch( + changeQuery({ + tabId, + query: { + [FILTERED_PATTERN]: pattern, + }, + }) + ); + // workaround to refresh callback and trigger fetch data + await setTempQuery(queryRef.current![RAW_QUERY]); await handleTimeRangePickerRefresh(true); }; @@ -618,13 +686,13 @@ export const Explorer = ({ data-test-subj="eventExplorer__sidebar" > {!isSidebarClosed && ( -
+
handleAddField(field)} @@ -678,10 +746,14 @@ export const Explorer = ({ { + onChangeInterval={(selectedIntrv) => { + const intervalOptionsIndex = timeIntervalOptions.findIndex(item => item.value === selectedIntrv) + const intrv = selectedIntrv.replace(/^auto_/, '') getCountVisualizations(intrv); + selectedIntervalRef.current = timeIntervalOptions[intervalOptionsIndex] + getPatterns(intrv, getErrorHandler('Error fetching patterns')); }} - stateInterval="auto" + stateInterval={selectedIntervalRef.current?.value} /> @@ -695,34 +767,123 @@ export const Explorer = ({ > {viewLogPatterns && ( - -

- Patterns - - {' '} - ( - {patternsData.patternTableData - ? patternsData.patternTableData.length - : 0} - ) - -

-
+ + + +

+ Patterns{' '} + + ({patternsData.patternTableData?.length || 0}) + +

+
+
+ + + setIsPatternConfigPopoverOpen(!isPatternConfigPopoverOpen) + } + /> + } + isOpen={isPatternConfigPopoverOpen} + closePopover={() => setIsPatternConfigPopoverOpen(false)} + anchorPosition="upCenter" + > + +

Pattern regex

+
+ + Log patterns allow you to cluster your logs, to help + + summarize large volume of logs. + + + Pattern regex is used to reduce logs into log groups.{' '} + + help + + + } + > + setPatternRegexInput(e.target.value)} + /> + + + + + setIsPatternConfigPopoverOpen(false)} + > + Cancel + + + + { + await setIsPatternConfigPopoverOpen(false); + await dispatch( + changeQuery({ + tabId, + query: { + [PATTERN_REGEX]: patternRegexInput, + }, + }) + ); + await getPatterns( + minInterval, + getErrorHandler('Error fetching patterns') + ); + }} + > + Apply + + + + +
+
+
)}
{viewLogPatterns && ( - onPatternSelection('')}> - Clear Selection - + + onPatternSelection('')}> + Clear Selection + + )} - setViewLogPatterns(!viewLogPatterns)}> - {`${viewLogPatterns ? 'Hide' : 'Show'} Patterns`} - + + { + // hide patterns will also clear pattern selection + if (viewLogPatterns) { + onPatternSelection(''); + } + setViewLogPatterns(!viewLogPatterns); + setIsPatternConfigPopoverOpen(false); + }} + > + {`${viewLogPatterns ? 'Hide' : 'Show'} Patterns`} + + @@ -734,6 +895,8 @@ export const Explorer = ({ tableData={patternsData.patternTableData || []} onPatternSelection={onPatternSelection} tabId={tabId} + query={query} + isPatternLoading={isPatternLoading} /> @@ -845,8 +1008,9 @@ export const Explorer = ({ rawVizData: explorerVisualizations, query, indexFields: explorerFields, - userConfigs: userVizConfigs[curVisId] || {}, + userConfigs: { ...userVizConfigs[curVisId] } || {}, appData: { fromApp: appLogEvents }, + explorer: { explorerData, explorerFields, query, http, pplService }, }); }, [curVisId, explorerVisualizations, explorerFields, query, userVizConfigs]); @@ -871,6 +1035,7 @@ export const Explorer = ({ visualizations={visualizations} handleOverrideTimestamp={handleOverrideTimestamp} callback={callbackForConfig} + queryManager={queryManager} /> ); }; @@ -907,8 +1072,10 @@ export const Explorer = ({ isLiveTailOnRef.current, patternsData, viewLogPatterns, + isPatternConfigPopoverOpen, + patternRegexInput, + userVizConfigs, ]); - const handleContentTabClick = (selectedTab: IQueryTab) => setSelectedContentTab(selectedTab.id); const updateQueryInStore = async (updateQuery: string) => { @@ -942,18 +1109,30 @@ export const Explorer = ({ isIndexPatternChanged(tempQuery, query[RAW_QUERY]) ) { await updateCurrentTimeStamp(''); + await setDefaultPatternsField('', ''); } if (availability !== true) { await updateQueryInStore(tempQuery); } - fetchData(); + await fetchData(); + + if (selectedContentTabId === TAB_CHART_ID) { + // parse stats section on every search + const statsTokens = queryManager.queryParser().parse(tempQuery).getStats(); + const updatedDataConfig = getDefaultVisConfig(statsTokens); + await dispatch( + changeVizConfig({ + tabId, + vizId: curVisId, + data: { dataConfig: { ...updatedDataConfig } }, + }) + ); + } }, - [tempQuery, query[RAW_QUERY]] + [tempQuery, query, selectedContentTabId, curVisId] ); - const handleQueryChange = async (newQuery: string) => { - setTempQuery(newQuery); - }; + const handleQueryChange = async (newQuery: string) => setTempQuery(newQuery); const handleSavingObject = async () => { const currQuery = queryRef.current; @@ -1076,6 +1255,7 @@ export const Explorer = ({ ? JSON.stringify(userVizConfigs[curVisId]) : JSON.stringify({}), description: vizDescription, + subType: subType, }) .then((res: any) => { setToast( @@ -1110,6 +1290,7 @@ export const Explorer = ({ ? JSON.stringify(userVizConfigs[curVisId]) : JSON.stringify({}), description: vizDescription, + subType: subType, }) .then((res: any) => { batch(() => { @@ -1180,7 +1361,7 @@ export const Explorer = ({ setIsLiveTailOn(true); setToast('Live tail On', 'success'); setIsLiveTailPopoverOpen(false); - setLiveTimestamp(dateMath.parse(endingTime)?.utc().format(DATE_PICKER_FORMAT) || ''); + setLiveTimestamp(dateMath.parse(endingTime, { roundUp: true })?.utc().format(DATE_PICKER_FORMAT) || ''); setLiveHits(0); await sleep(2000); const curLiveTailname = liveTailNameRef.current; @@ -1249,6 +1430,14 @@ export const Explorer = ({ [tempQuery] ); + useEffect(() => { + if (isEqual(selectedContentTabId, TAB_CHART_ID)) { + const statsTokens = queryManager.queryParser().parse(tempQuery).getStats(); + const updatedDataConfig = getDefaultVisConfig(statsTokens); + setSpanValue(!isEqual(typeof updatedDataConfig.span, 'undefined')); + } + }, [tempQuery, selectedContentTabId, curVisId]); + return (
@@ -1294,6 +1491,14 @@ export const Explorer = ({ stopLive={stopLive} setIsLiveTailPopoverOpen={setIsLiveTailPopoverOpen} liveTailName={liveTailNameRef.current} + searchError={explorerVisualizations} + curVisId={curVisId} + spanValue={spanValue} + setSubType={setSubType} + metricMeasure={metricMeasure} + setMetricMeasure={setMetricMeasure} + setMetricLabel={setMetricLabel} + metricChecked={metricChecked} /> { const dispatch = useDispatch(); const tabIds = useSelector(selectQueryTabs).queryTabIds.filter( @@ -184,6 +185,7 @@ export const LogExplorer = ({ curSelectedTabId={curSelectedTabIdRef} http={http} searchBarConfigs={searchBarConfigs} + queryManager={queryManager} /> ), diff --git a/dashboards-observability/public/components/event_analytics/explorer/log_patterns/patterns_table.tsx b/dashboards-observability/public/components/event_analytics/explorer/log_patterns/patterns_table.tsx index 97b7e3066..bd02b7d52 100644 --- a/dashboards-observability/public/components/event_analytics/explorer/log_patterns/patterns_table.tsx +++ b/dashboards-observability/public/components/event_analytics/explorer/log_patterns/patterns_table.tsx @@ -4,17 +4,18 @@ */ import { - EuiLink, - EuiText, - EuiInMemoryTable, - Direction, EuiEmptyPrompt, EuiIcon, + EuiInMemoryTable, + EuiLink, + EuiText, + SortDirection, } from '@elastic/eui'; import { PatternTableData } from 'common/types/explorer'; -import { reduce, round } from 'lodash'; -import React, { useState } from 'react'; +import { round } from 'lodash'; +import React from 'react'; import { useSelector } from 'react-redux'; +import { FILTERED_PATTERN } from '../../../../../common/constants/explorer'; import { PPL_DOCUMENTATION_URL } from '../../../../../common/constants/shared'; import { selectPatterns } from '../../redux/slices/patterns_slice'; @@ -22,49 +23,50 @@ interface PatternsTableProps { tableData: PatternTableData[]; onPatternSelection: any; tabId: string; + query: any; + isPatternLoading: boolean; } export function PatternsTable(props: PatternsTableProps) { - const { tableData, tabId, onPatternSelection } = props; - const patternsData = useSelector(selectPatterns)[tabId]; - const [selectedPattern, setSelectedPattern] = useState(); + const { tableData, onPatternSelection, query } = props; + const totalHits = tableData.reduce((p, v) => p + v.count, 0); const tableColumns = [ { field: 'count', name: 'Count', - width: '4%', + width: '6%', sortable: true, - render: (item: string, row: PatternTableData) => { - return {item}; + render: (item: string) => { + return {item}; }, }, { - field: 'ratio', + field: 'count', name: 'Ratio', - width: '4%', + width: '6%', sortable: (row: PatternTableData) => row.count, - render: (item: number, row: PatternTableData) => { - const ratio = - (row.count / - reduce( - patternsData.total, - (sum, n) => { - return sum + n; - }, - 0 - )) * - 100; - return {`${round(ratio, 2)}%`}; + render: (item: number) => { + const ratio = (item / totalHits) * 100; + return {`${round(ratio, 2)}%`}; + }, + }, + { + field: 'anomalyCount', + name: 'Anomalies', + width: '6%', + sortable: (row: PatternTableData) => row.anomalyCount, + render: (item: number) => { + return {item ?? 'N/A'}; }, }, { field: 'sampleLog', name: 'Sample Log', - width: '92%', + width: '82%', sortable: true, - render: (item: string, row: PatternTableData) => { - return {item}; + render: (item: string) => { + return {item}; }, }, ]; @@ -72,7 +74,7 @@ export function PatternsTable(props: PatternsTableProps) { const sorting = { sort: { field: 'count', - direction: 'desc' as Direction, + direction: SortDirection.DESC, }, allowNeutralSort: true, enableAllColumns: true, @@ -107,10 +109,11 @@ export function PatternsTable(props: PatternsTableProps) { 'data-test-subj': `row-${pattern}`, className: 'customRowClass', onClick: () => { - onPatternSelection(pattern); - setSelectedPattern(pattern); + if (!props.isPatternLoading) { + onPatternSelection(pattern); + } }, - isSelected: pattern === selectedPattern, + isSelected: pattern === query[FILTERED_PATTERN], }; }; @@ -123,6 +126,7 @@ export function PatternsTable(props: PatternsTableProps) { message={message} rowProps={getRowProps} isSelectable={true} + tableLayout="auto" /> ); } diff --git a/dashboards-observability/public/components/event_analytics/explorer/no_results.tsx b/dashboards-observability/public/components/event_analytics/explorer/no_results.tsx index 802099729..91cc8ab62 100644 --- a/dashboards-observability/public/components/event_analytics/explorer/no_results.tsx +++ b/dashboards-observability/public/components/event_analytics/explorer/no_results.tsx @@ -38,8 +38,7 @@ export const NoResults = () => {

diff --git a/dashboards-observability/public/components/event_analytics/explorer/save_panel/__tests__/__snapshots__/save_panel.test.tsx.snap b/dashboards-observability/public/components/event_analytics/explorer/save_panel/__tests__/__snapshots__/save_panel.test.tsx.snap index ef52659b1..b94209851 100644 --- a/dashboards-observability/public/components/event_analytics/explorer/save_panel/__tests__/__snapshots__/save_panel.test.tsx.snap +++ b/dashboards-observability/public/components/event_analytics/explorer/save_panel/__tests__/__snapshots__/save_panel.test.tsx.snap @@ -2,8 +2,11 @@ exports[`Saved query table component Renders saved query table 1`] = `
+ +
+
+ + + +
+ + + Save as Metric + +
+
+
+
+
+
+
`; diff --git a/dashboards-observability/public/components/event_analytics/explorer/save_panel/__tests__/save_panel.test.tsx b/dashboards-observability/public/components/event_analytics/explorer/save_panel/__tests__/save_panel.test.tsx index 6eec4ca91..a35b7b58a 100644 --- a/dashboards-observability/public/components/event_analytics/explorer/save_panel/__tests__/save_panel.test.tsx +++ b/dashboards-observability/public/components/event_analytics/explorer/save_panel/__tests__/save_panel.test.tsx @@ -18,6 +18,7 @@ describe('Saved query table component', () => { it('Renders saved query table', async () => { const handleNameChange = jest.fn(); const handleOptionChange = jest.fn(); + const setMetricLabel = jest.fn(); const savedObjects = new SavedObjects(httpClientMock); const wrapper = mount( @@ -28,6 +29,13 @@ describe('Saved query table component', () => { savedObjects={savedObjects} savePanelName={'Count by depature'} showOptionList={true} + curVisId={'line'} + spanValue={false} + setSubType={'metric'} + setMetricMeasure={'hours (h)'} + setMetricLabel={setMetricLabel} + metricMeasure={'hours (h)'} + metricChecked={true} /> ); diff --git a/dashboards-observability/public/components/event_analytics/explorer/save_panel/save_panel.tsx b/dashboards-observability/public/components/event_analytics/explorer/save_panel/save_panel.tsx index c0b4793b5..277d194ec 100644 --- a/dashboards-observability/public/components/event_analytics/explorer/save_panel/save_panel.tsx +++ b/dashboards-observability/public/components/event_analytics/explorer/save_panel/save_panel.tsx @@ -5,10 +5,20 @@ import React, { useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; -import { EuiTitle, EuiComboBox, EuiFormRow, EuiSpacer, EuiFieldText } from '@elastic/eui'; +import { + EuiTitle, + EuiComboBox, + EuiFormRow, + EuiSpacer, + EuiFieldText, + EuiSwitch, + EuiToolTip, + EuiSelect, +} from '@elastic/eui'; import { useEffect } from 'react'; -import { isEmpty } from 'lodash'; +import { isEmpty, isEqual } from 'lodash'; import SavedObjects from '../../../../services/saved_objects/event_analytics/saved_objects'; +import { UNITS_OF_MEASURE } from '../../../../../common/constants/explorer'; interface ISavedPanelProps { selectedOptions: any; @@ -17,6 +27,13 @@ interface ISavedPanelProps { savedObjects: SavedObjects; savePanelName: string; showOptionList: boolean; + curVisId: string; + spanValue: boolean; + setSubType: any; + metricMeasure: string; + setMetricMeasure: any; + setMetricLabel: any; + metricChecked: boolean; } interface CustomPanelOptions { @@ -33,8 +50,18 @@ export const SavePanel = ({ savedObjects, savePanelName, showOptionList, + curVisId, + spanValue, + setSubType, + metricMeasure, + setMetricMeasure, + setMetricLabel, + metricChecked, }: ISavedPanelProps) => { const [options, setOptions] = useState([]); + const [checked, setChecked] = useState(false); + const [measure, setMeasure] = useState(''); + const [label, setLabel] = useState([]); const getCustomPabnelList = async (savedObjects: SavedObjects) => { const optionRes = await savedObjects @@ -50,6 +77,32 @@ export const SavePanel = ({ getCustomPabnelList(savedObjects); }, []); + const onToggleChange = (e: { target: { checked: React.SetStateAction } }) => { + setChecked(e.target.checked); + if (e.target.checked) { + setSubType("metric") + } else { + setSubType("visualization") + } + }; + + const onMeasureChange = (selectedMeasures: string) => { + setMeasure(selectedMeasures); + setMetricMeasure(selectedMeasures); + }; + + const onLabelChange = (selectedLabels: React.SetStateAction) => { + setLabel(selectedLabels); + setMetricLabel(selectedLabels); + }; + + useEffect(() => { + if (metricChecked) { + setChecked(true); + setMeasure(metricMeasure); + } + }, []) + return ( <> {showOptionList && ( @@ -90,6 +143,23 @@ export const SavePanel = ({ data-test-subj="eventExplorer__querySaveName" /> + {showOptionList && ( + <> + + + + + + + )} ); }; diff --git a/dashboards-observability/public/components/event_analytics/explorer/sidebar/__tests__/__snapshots__/field.test.tsx.snap b/dashboards-observability/public/components/event_analytics/explorer/sidebar/__tests__/__snapshots__/field.test.tsx.snap index 6bcdbaa2e..35c8c3a91 100644 --- a/dashboards-observability/public/components/event_analytics/explorer/sidebar/__tests__/__snapshots__/field.test.tsx.snap +++ b/dashboards-observability/public/components/event_analytics/explorer/sidebar/__tests__/__snapshots__/field.test.tsx.snap @@ -21,7 +21,7 @@ exports[`Field component Renders a sidebar field 1`] = ` anchorPosition="rightUp" button={ @@ -87,7 +87,7 @@ exports[`Field component Renders a sidebar field 1`] = ` } isActive={false} onClick={[Function]} - size="s" + size="m" /> } closePopover={[Function]} @@ -105,7 +105,7 @@ exports[`Field component Renders a sidebar field 1`] = ` className="euiPopover__anchor" > @@ -171,10 +171,10 @@ exports[`Field component Renders a sidebar field 1`] = ` } isActive={false} onClick={[Function]} - size="s" + size="m" >
-
- - - - - - - - - - - - - -
-
-
-
-
- - - -
  • - - - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - host - - } - isActive={false} - onClick={[Function]} - size="s" - /> - } - closePopover={[Function]} - display="block" - hasArrow={true} - isOpen={false} - ownFocus={true} - panelClassName="dscSidebarItem__fieldPopoverPanel" - panelPaddingSize="m" - > -
    + + + + + + Query fields + + + + +
    +
    + +
    - - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - host - - } - isActive={false} - onClick={[Function]} - size="s" +
      -
      - -
      - - - - - - - - + + + + + + + + + + + + + + + + double_per_ip_bytes + + + +
      + + + + + + + + + + + + + +
      +
      + +
      +
    + + +
  • +
  • + + + + + + + + + + + + + + + } + fieldIcon={ + + } + fieldName={ + + host + + } + isActive={false} + onClick={[Function]} + size="m" + /> + } + closePopover={[Function]} + display="block" + hasArrow={true} + isOpen={false} + ownFocus={true} + panelClassName="dscSidebarItem__fieldPopoverPanel" + panelPaddingSize="m" + > +
    - - - - - -
    -
  • - - - - - - -
  • - - - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - + + + + + + + + + + + + + + + + host + + + +
    + + + + + + + + + + + + + +
    + + + + +
    +
    +
  • +
  • - ip_count - - } - isActive={false} - onClick={[Function]} - size="s" - /> - } - closePopover={[Function]} - display="block" - hasArrow={true} - isOpen={false} - ownFocus={true} - panelClassName="dscSidebarItem__fieldPopoverPanel" - panelPaddingSize="m" - > -
    -
    - - - - - - - - - - + + + + + + + + + + + + + + } + fieldIcon={ + + } + fieldName={ + + ip_count + + } + isActive={false} + onClick={[Function]} + size="m" /> - - - - } - fieldIcon={ - - } - fieldName={ - - ip_count - - } - isActive={false} - onClick={[Function]} - size="s" - > -
    - -
    - - - - - - - - + + + + + + + + + + + + + + + + ip_count + + + +
    + + + + + + + + + + + + + +
    +
    + +
    +
    + + +
  • +
  • + + + + + + + + + + + + + + + } + fieldIcon={ + + } + fieldName={ + + per_ip_bytes + + } + isActive={false} + onClick={[Function]} + size="m" + /> + } + closePopover={[Function]} + display="block" + hasArrow={true} + isOpen={false} + ownFocus={true} + panelClassName="dscSidebarItem__fieldPopoverPanel" + panelPaddingSize="m" + > +
    - - - - - -
    - - - - -
    -
    -
  • -
  • - - - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - + + + + + + + + + + + + + + + + per_ip_bytes + + + +
    + + + + + + + + + + + + + +
    + + + + +
    +
    +
  • +
  • - per_ip_bytes - - } - isActive={false} - onClick={[Function]} - size="s" - /> - } - closePopover={[Function]} - display="block" - hasArrow={true} - isOpen={false} - ownFocus={true} - panelClassName="dscSidebarItem__fieldPopoverPanel" - panelPaddingSize="m" - > -
    -
    - - - - - - - - - - + + + + + + + + + + + + + + } + fieldIcon={ + + } + fieldName={ + + resp_code + + } + isActive={false} + onClick={[Function]} + size="m" /> - - - - } - fieldIcon={ - - } - fieldName={ - - per_ip_bytes - - } - isActive={false} - onClick={[Function]} - size="s" - > -
    - -
    - - - - - - - - + + + + + + + + + + + + + + + + resp_code + + + +
    + + + + + + + + + + + + + +
    +
    + +
    +
    + + +
  • +
  • + + + + + + + + + + + + + + + } + fieldIcon={ + + } + fieldName={ + + sum_bytes + + } + isActive={false} + onClick={[Function]} + size="m" + /> + } + closePopover={[Function]} + display="block" + hasArrow={true} + isOpen={false} + ownFocus={true} + panelClassName="dscSidebarItem__fieldPopoverPanel" + panelPaddingSize="m" + > +
    - - - - - -
    - - + +
    + + + + + + + + + + + + + +
    + + + + +
    +
    +
  • + - - - -
  • + + + + +
    + + + + Selected Fields + + + } + id="fieldSelector__selectedFields" + initialIsOpen={true} + isLoading={false} + isLoadingMessage={false} + paddingSize="xs" + > +
    - - - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - resp_code - - } - isActive={false} - onClick={[Function]} - size="s" - /> - } - closePopover={[Function]} - display="block" - hasArrow={true} - isOpen={false} - ownFocus={true} - panelClassName="dscSidebarItem__fieldPopoverPanel" - panelPaddingSize="m" + -
    - - - - - - - - - - - - - -
    -
    - -
    - - - -
  • -
  • - - - - - - - - - - - - - - - } - fieldIcon={ - + - } - fieldName={ - - sum_bytes - - } - isActive={false} - onClick={[Function]} - size="s" - /> - } - closePopover={[Function]} - display="block" - hasArrow={true} - isOpen={false} - ownFocus={true} - panelClassName="dscSidebarItem__fieldPopoverPanel" - panelPaddingSize="m" - > -
    + + + -
    - - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - sum_bytes - - } - isActive={false} - onClick={[Function]} - size="s" + -
    - -
    - - - - - - - - - - - - - -
    -
    -
    + Selected Fields + + + + +
    +
    + +
    +
    +
    - - -
  • - - -

    - - Selected Fields - -

    -
    + + + +
    -
      -
      - -

      - + Available Fields - -

      -
      + + + } + id="fieldSelector__availableFields" + initialIsOpen={true} + isLoading={false} + isLoadingMessage={false} + paddingSize="xs" + >
      - - -
      -
      -
        -
      • - +
        - - - - - Override - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - agent - - } - isActive={false} - onClick={[Function]} - size="s" - /> - } - closePopover={[Function]} - display="block" - hasArrow={true} - isOpen={false} - ownFocus={true} - panelClassName="dscSidebarItem__fieldPopoverPanel" - panelPaddingSize="m" + -
        +
        - - - - - Override - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - agent - - } - isActive={false} - onClick={[Function]} - size="s" +
          -
          - -
          - - - + } + isActive={false} onClick={[Function]} - size="s" + size="m" + /> + } + closePopover={[Function]} + display="block" + hasArrow={true} + isOpen={false} + ownFocus={true} + panelClassName="dscSidebarItem__fieldPopoverPanel" + panelPaddingSize="m" + > +
          +
          - - - - - - - - - - + + + + + + + + + + + + + + + + agent + + + +
          + + + + + + + + + + + + + + + + + +
          +
          + +
          +
          + + + +
        • + + + + + + + + + + + + + + + } + fieldIcon={ + + } + fieldName={ + + bytes + + } + isActive={false} onClick={[Function]} + size="m" + /> + } + closePopover={[Function]} + display="block" + hasArrow={true} + isOpen={false} + ownFocus={true} + panelClassName="dscSidebarItem__fieldPopoverPanel" + panelPaddingSize="m" + > +
          +
          - - - - -
          -
          - -
        • -
        - - -
      • -
      • - - - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - + + + + + + + + + + + + + + + + bytes + + + +
        + + + + + + + + + + + + + +
        +
    + + + + + + +
  • - bytes - - } - isActive={false} - onClick={[Function]} - size="s" - /> - } - closePopover={[Function]} - display="block" - hasArrow={true} - isOpen={false} - ownFocus={true} - panelClassName="dscSidebarItem__fieldPopoverPanel" - panelPaddingSize="m" - > -
    -
    - - - - - - - - - - + + + + + + + + + + + + + + } + fieldIcon={ + + } + fieldName={ + + clientip + + } + isActive={false} onClick={[Function]} + size="m" /> - - - - } - fieldIcon={ - - } - fieldName={ - - bytes - - } - isActive={false} - onClick={[Function]} - size="s" - > -
    - -
    - - - - - - - - - + + + + + + + + + + + + + + + + clientip + + + +
    + + + + + + + + + + + + + +
    +
    + +
    +
    + + +
  • +
  • + + + + + + + + + + + + + + + } + fieldIcon={ + + } + fieldName={ + + event + + } + isActive={false} onClick={[Function]} + size="m" + /> + } + closePopover={[Function]} + display="block" + hasArrow={true} + isOpen={false} + ownFocus={true} + panelClassName="dscSidebarItem__fieldPopoverPanel" + panelPaddingSize="m" + > +
    +
    - - - - -
    -
    - - - -
    -
    -
  • -
  • - - - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - + + + + + + + + + + + + + + + + event + + + +
    + + + + + + + + + + + + + +
    + + + + +
    +
    +
  • +
  • - clientip - - } - isActive={false} - onClick={[Function]} - size="s" - /> - } - closePopover={[Function]} - display="block" - hasArrow={true} - isOpen={false} - ownFocus={true} - panelClassName="dscSidebarItem__fieldPopoverPanel" - panelPaddingSize="m" - > -
    -
    - - - - - - - - - - + + + + + Override + + + + + + + + + + + + + } + fieldIcon={ + + } + fieldName={ + + extension + + } + isActive={false} onClick={[Function]} + size="m" /> - - - - } - fieldIcon={ - - } - fieldName={ - - clientip - - } - isActive={false} - onClick={[Function]} - size="s" - > -
    - -
    - - - - - - - - - + + + + + + + + + + + + + + + extension + + + +
    + + + + + + + + + + + + + + + + + +
    +
    + +
    +
    + + +
  • +
  • + + + + + + + + + + + + + + + } + fieldIcon={ + + } + fieldName={ + + geo + + } + isActive={false} onClick={[Function]} + size="m" + /> + } + closePopover={[Function]} + display="block" + hasArrow={true} + isOpen={false} + ownFocus={true} + panelClassName="dscSidebarItem__fieldPopoverPanel" + panelPaddingSize="m" + > +
    +
    - - - - -
    -
    - - - -
    -
    -
  • -
  • - - - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - event - - } - isActive={false} - onClick={[Function]} - size="s" - /> - } - closePopover={[Function]} - display="block" - hasArrow={true} - isOpen={false} - ownFocus={true} - panelClassName="dscSidebarItem__fieldPopoverPanel" - panelPaddingSize="m" - > -
    -
    - - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - event - - } - isActive={false} - onClick={[Function]} - size="s" - > -
    - -
    - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -
    -
  • -
  • - - - - - - Override - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - extension - - } - isActive={false} - onClick={[Function]} - size="s" - /> - } - closePopover={[Function]} - display="block" - hasArrow={true} - isOpen={false} - ownFocus={true} - panelClassName="dscSidebarItem__fieldPopoverPanel" - panelPaddingSize="m" - > -
    -
    - - - - - Override - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - extension - - } - isActive={false} - onClick={[Function]} - size="s" - > -
    - -
    - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -
    -
  • -
  • - - - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - geo - - } - isActive={false} - onClick={[Function]} - size="s" - /> - } - closePopover={[Function]} - display="block" - hasArrow={true} - isOpen={false} - ownFocus={true} - panelClassName="dscSidebarItem__fieldPopoverPanel" - panelPaddingSize="m" - > -
    -
    - - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - geo - - } - isActive={false} - onClick={[Function]} - size="s" - > -
    - -
    - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -
    -
  • -
  • - - - - - - Override - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - host - - } - isActive={false} - onClick={[Function]} - size="s" - /> - } - closePopover={[Function]} - display="block" - hasArrow={true} - isOpen={false} - ownFocus={true} - panelClassName="dscSidebarItem__fieldPopoverPanel" - panelPaddingSize="m" - > -
    -
    - - - - - Override - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - host - - } - isActive={false} - onClick={[Function]} - size="s" - > -
    - -
    - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -
    -
  • -
  • - - - - - - Override - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - index - - } - isActive={false} - onClick={[Function]} - size="s" - /> - } - closePopover={[Function]} - display="block" - hasArrow={true} - isOpen={false} - ownFocus={true} - panelClassName="dscSidebarItem__fieldPopoverPanel" - panelPaddingSize="m" - > -
    -
    - - - - - Override - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - index - - } - isActive={false} - onClick={[Function]} - size="s" - > -
    - -
    - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -
    -
  • -
  • - - - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - ip - - } - isActive={false} - onClick={[Function]} - size="s" - /> - } - closePopover={[Function]} - display="block" - hasArrow={true} - isOpen={false} - ownFocus={true} - panelClassName="dscSidebarItem__fieldPopoverPanel" - panelPaddingSize="m" - > -
    -
    - - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - ip - - } - isActive={false} - onClick={[Function]} - size="s" - > -
    - -
    - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -
    -
  • -
  • - - - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - machine - - } - isActive={false} - onClick={[Function]} - size="s" - /> - } - closePopover={[Function]} - display="block" - hasArrow={true} - isOpen={false} - ownFocus={true} - panelClassName="dscSidebarItem__fieldPopoverPanel" - panelPaddingSize="m" - > -
    -
    - - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - machine - - } - isActive={false} - onClick={[Function]} - size="s" - > -
    - -
    - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -
    -
  • -
  • - - - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - memory - - } - isActive={false} - onClick={[Function]} - size="s" - /> - } - closePopover={[Function]} - display="block" - hasArrow={true} - isOpen={false} - ownFocus={true} - panelClassName="dscSidebarItem__fieldPopoverPanel" - panelPaddingSize="m" - > -
    -
    - - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - memory - - } - isActive={false} - onClick={[Function]} - size="s" - > -
    - -
    - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -
    -
  • -
  • - - - - - - Override - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - message - - } - isActive={false} - onClick={[Function]} - size="s" - /> - } - closePopover={[Function]} - display="block" - hasArrow={true} - isOpen={false} - ownFocus={true} - panelClassName="dscSidebarItem__fieldPopoverPanel" - panelPaddingSize="m" - > -
    -
    - - - - - Override - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - message - - } - isActive={false} - onClick={[Function]} - size="s" - > -
    - -
    - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -
    -
  • -
  • - - - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - phpmemory - - } - isActive={false} - onClick={[Function]} - size="s" - /> - } - closePopover={[Function]} - display="block" - hasArrow={true} - isOpen={false} - ownFocus={true} - panelClassName="dscSidebarItem__fieldPopoverPanel" - panelPaddingSize="m" - > -
    -
    - - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - phpmemory - - } - isActive={false} - onClick={[Function]} - size="s" - > -
    - -
    - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -
    -
  • -
  • - - - - - - Override - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - referer - - } - isActive={false} - onClick={[Function]} - size="s" - /> - } - closePopover={[Function]} - display="block" - hasArrow={true} - isOpen={false} - ownFocus={true} - panelClassName="dscSidebarItem__fieldPopoverPanel" - panelPaddingSize="m" - > -
    -
    - - - - - Override - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - referer - - } - isActive={false} - onClick={[Function]} - size="s" - > -
    - -
    - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -
    -
  • -
  • - - - - - - Override - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - request - - } - isActive={false} - onClick={[Function]} - size="s" - /> - } - closePopover={[Function]} - display="block" - hasArrow={true} - isOpen={false} - ownFocus={true} - panelClassName="dscSidebarItem__fieldPopoverPanel" - panelPaddingSize="m" - > -
    -
    - - - - - Override - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - request - - } - isActive={false} - onClick={[Function]} - size="s" - > -
    - -
    - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -
    -
  • -
  • - - - - - - Override - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - response - - } - isActive={false} - onClick={[Function]} - size="s" - /> - } - closePopover={[Function]} - display="block" - hasArrow={true} - isOpen={false} - ownFocus={true} - panelClassName="dscSidebarItem__fieldPopoverPanel" - panelPaddingSize="m" - > -
    -
    - - - - - Override - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - response - - } - isActive={false} - onClick={[Function]} - size="s" - > -
    + + + + + + + + + + + + + + + + geo + + + +
    + + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
  • +
  • - -
    - - - - - - - - - - - - - - - - - -
    - - - - - - -
  • -
  • - - - - - - Override - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - tags - - } - isActive={false} - onClick={[Function]} - size="s" - /> - } - closePopover={[Function]} - display="block" - hasArrow={true} - isOpen={false} - ownFocus={true} - panelClassName="dscSidebarItem__fieldPopoverPanel" - panelPaddingSize="m" - > -
    -
    - - - - - Override - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - - tags - - } - isActive={false} - onClick={[Function]} - size="s" - > -
    - -
    - - - + + + + + + + + + + + + + + + + host + + + +
    + + + + + + + + + + + + + + + + + +
    +
    + +
    +
    + + +
  • +
  • + + + + + + Override + + + + + + + + + + + + + } + fieldIcon={ + + } + fieldName={ + + index + + } + isActive={false} onClick={[Function]} - size="s" + size="m" + /> + } + closePopover={[Function]} + display="block" + hasArrow={true} + isOpen={false} + ownFocus={true} + panelClassName="dscSidebarItem__fieldPopoverPanel" + panelPaddingSize="m" + > +
    +
    - - - - - - - - - - + + + + + + + + + + + + + + + + index + + + +
    + + + + + + + + + + + + + + + + + +
    +
    + +
    + +
    +
    +
  • +
  • + + + + + + + + + + + + + + + } + fieldIcon={ + + } + fieldName={ + + ip + + } + isActive={false} onClick={[Function]} + size="m" + /> + } + closePopover={[Function]} + display="block" + hasArrow={true} + isOpen={false} + ownFocus={true} + panelClassName="dscSidebarItem__fieldPopoverPanel" + panelPaddingSize="m" + > +
    +
    - - - - -
    -
    - - - -
    -
    -
  • -
  • - - - - - - - - - Default Timestamp - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - + + + + + + + + + + + + + + + + ip + + + +
    + + + + + + + + + + + + + +
    + + + + +
    +
    +
  • +
  • - timestamp - - } - isActive={false} - onClick={[Function]} - size="s" - /> - } - closePopover={[Function]} - display="block" - hasArrow={true} - isOpen={false} - ownFocus={true} - panelClassName="dscSidebarItem__fieldPopoverPanel" - panelPaddingSize="m" - > -
    -
    - - - - - - - - Default Timestamp - - - - - - + + + + + + + + + + + + + + } + fieldIcon={ + + } + fieldName={ + + machine + + } + isActive={false} onClick={[Function]} + size="m" /> - - - - } - fieldIcon={ - - } - fieldName={ - - timestamp - - } - isActive={false} - onClick={[Function]} - size="s" - > -
    - -
    - - - - - + + + + + + + + + + + + + + + + machine + + + +
    + + + + + + + + + + + + + +
    +
    + +
    +
    + + +
  • +
  • + + + + + + + + + + + + + + + } + fieldIcon={ + + } + fieldName={ + + memory + + } + isActive={false} + onClick={[Function]} + size="m" + /> + } + closePopover={[Function]} + display="block" + hasArrow={true} + isOpen={false} + ownFocus={true} + panelClassName="dscSidebarItem__fieldPopoverPanel" + panelPaddingSize="m" + > +
    - - + + + + + + + + + + + + + } + fieldIcon={ + + } + fieldName={ + + memory + + } + isActive={false} + onClick={[Function]} + size="m" > - Default Timestamp - - - - - - - + +
    + + + + + + + + + + + + + +
    +
    + + + +
    +
    +
  • +
  • + + + + + + Override + + + + + + + + + + + + + } + fieldIcon={ + + } + fieldName={ + + message + + } + isActive={false} onClick={[Function]} + size="m" + /> + } + closePopover={[Function]} + display="block" + hasArrow={true} + isOpen={false} + ownFocus={true} + panelClassName="dscSidebarItem__fieldPopoverPanel" + panelPaddingSize="m" + > +
    +
    - - - - -
    -
    - - - -
    -
    -
  • -
  • - - - - - - Override - - - - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - + + + + + + + + + + + + + + + + message + + + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
  • +
  • - url - - } - isActive={false} - onClick={[Function]} - size="s" - /> - } - closePopover={[Function]} - display="block" - hasArrow={true} - isOpen={false} - ownFocus={true} - panelClassName="dscSidebarItem__fieldPopoverPanel" - panelPaddingSize="m" - > -
    -
    - - - - + + + + + + + + + + + + + + } + fieldIcon={ + + } + fieldName={ + + phpmemory + + } + isActive={false} onClick={[Function]} - size="s" + size="m" + /> + } + closePopover={[Function]} + display="block" + hasArrow={true} + isOpen={false} + ownFocus={true} + panelClassName="dscSidebarItem__fieldPopoverPanel" + panelPaddingSize="m" + > +
    +
    - Override - - - - - - - - - + + + + + + + + + + + + + } + fieldIcon={ + + } + fieldName={ + + phpmemory + + } + isActive={false} + onClick={[Function]} + size="m" + > +
    + +
    + + + + + + + + + + + + + +
    +
    + +
    +
    + + +
  • +
  • + + + + + + Override + + + + + + + + + + + + + } + fieldIcon={ + + } + fieldName={ + + referer + + } + isActive={false} onClick={[Function]} + size="m" /> - - - - } - fieldIcon={ - - } - fieldName={ - - url - - } - isActive={false} - onClick={[Function]} - size="s" - > -
    - -
    - - - + + + + + + + + + + + + + + + + referer + + + +
    + + + + + + + + + + + + + + + + + +
    +
    + +
    + +
    +
    +
  • +
  • + + + + + + Override + + + + + + + + + + + + + } + fieldIcon={ + + } + fieldName={ + + request + + } + isActive={false} onClick={[Function]} - size="s" + size="m" + /> + } + closePopover={[Function]} + display="block" + hasArrow={true} + isOpen={false} + ownFocus={true} + panelClassName="dscSidebarItem__fieldPopoverPanel" + panelPaddingSize="m" + > +
    +
    - - - - - - - - - - + + + + + + + + + + + + + + + + request + + + +
    + + + + + + + + + + + + + + + + + +
    +
    + +
    + +
    +
    +
  • +
  • + + + + + + Override + + + + + + + + + + + + + } + fieldIcon={ + + } + fieldName={ + + response + + } + isActive={false} onClick={[Function]} + size="m" + /> + } + closePopover={[Function]} + display="block" + hasArrow={true} + isOpen={false} + ownFocus={true} + panelClassName="dscSidebarItem__fieldPopoverPanel" + panelPaddingSize="m" + > +
    +
    - - - - -
    -
    - - - -
    -
    -
  • -
  • - - - - - - - - - Override - - - - - - - - - - } - fieldIcon={ - - } - fieldName={ - + + + + + + + + + + + + + + + + response + + + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
  • +
  • - utc_time - - } - isActive={false} - onClick={[Function]} - size="s" - /> - } - closePopover={[Function]} - display="block" - hasArrow={true} - isOpen={false} - ownFocus={true} - panelClassName="dscSidebarItem__fieldPopoverPanel" - panelPaddingSize="m" - > -
    -
    - - - - - - - + + + + + Override + + + + + + + + + + + + + } + fieldIcon={ + + } + fieldName={ + + tags + + } + isActive={false} onClick={[Function]} - size="s" + size="m" + /> + } + closePopover={[Function]} + display="block" + hasArrow={true} + isOpen={false} + ownFocus={true} + panelClassName="dscSidebarItem__fieldPopoverPanel" + panelPaddingSize="m" + > +
    +
    - Override - - - - - - + + + + Override + + + + + + + + + + + + + } + fieldIcon={ + + } + fieldName={ + + tags + + } + isActive={false} + onClick={[Function]} + size="m" + > +
    + +
    + + + + + + + + + + + + + + + + + +
    +
    + +
    +
    + + +
  • +
  • + + + + + + + + + Default Timestamp + + + + + + + + + + } + fieldIcon={ + + } + fieldName={ + + timestamp + + } + isActive={false} onClick={[Function]} + size="m" /> - - - - } - fieldIcon={ - - } - fieldName={ - - utc_time - - } - isActive={false} - onClick={[Function]} - size="s" - > -
    - -
    - - - - - - + + + + + + + + + + + + + + + + timestamp + + + +
    + + + + + + + + Default Timestamp + + + + + + + + + + + +
    +
    + +
    + +
    +
    +
  • +
  • + + + + + + Override + + + + + + + + + + + + + } + fieldIcon={ + + } + fieldName={ + + url + + } + isActive={false} onClick={[Function]} - size="s" + size="m" + /> + } + closePopover={[Function]} + display="block" + hasArrow={true} + isOpen={false} + ownFocus={true} + panelClassName="dscSidebarItem__fieldPopoverPanel" + panelPaddingSize="m" + > +
    +
    - - - - - - - + + + + + + + + + + + + + + + + url + + + +
    + + + + + + + + + + + + + + + + + +
    +
    + +
    + +
    +
    +
  • +
  • + + + + + + + + + Override + + + + + + + + + + } + fieldIcon={ + + } + fieldName={ + + utc_time + + } + isActive={false} onClick={[Function]} + size="m" + /> + } + closePopover={[Function]} + display="block" + hasArrow={true} + isOpen={false} + ownFocus={true} + panelClassName="dscSidebarItem__fieldPopoverPanel" + panelPaddingSize="m" + > +
    +
    - - - - -
    -
    - + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
  • + - - - - + + + + diff --git a/dashboards-observability/public/components/event_analytics/explorer/sidebar/field.tsx b/dashboards-observability/public/components/event_analytics/explorer/sidebar/field.tsx index de8604b4d..2b18be672 100644 --- a/dashboards-observability/public/components/event_analytics/explorer/sidebar/field.tsx +++ b/dashboards-observability/public/components/event_analytics/explorer/sidebar/field.tsx @@ -10,11 +10,8 @@ import { EuiPopover, EuiButtonIcon, EuiToolTip, - EuiButton, EuiMark, EuiLoadingSpinner, - EuiPopoverTitle, - EuiPanel, EuiFlexGroup, EuiFlexItem, EuiTitle, @@ -182,8 +179,8 @@ export const Field = (props: IFieldProps) => { panelClassName="dscSidebarItem__fieldPopoverPanel" button={ } diff --git a/dashboards-observability/public/components/event_analytics/explorer/sidebar/field_insights.tsx b/dashboards-observability/public/components/event_analytics/explorer/sidebar/field_insights.tsx index 6a682cc5c..b9414ba70 100644 --- a/dashboards-observability/public/components/event_analytics/explorer/sidebar/field_insights.tsx +++ b/dashboards-observability/public/components/event_analytics/explorer/sidebar/field_insights.tsx @@ -48,8 +48,8 @@ export const FieldInsights = ({ field, query }: any) => { format: 'viz', }, ]; - const numericalTypes = ['short', 'integer', 'long', 'float', 'double']; - const isNumericalField = indexOf(numericalTypes, field.type) > 0; + const NUMERICAL_TYPES = ['short', 'integer', 'long', 'float', 'double']; + const isNumericalField = indexOf(NUMERICAL_TYPES, field.type) > 0; const [curReport, setCurReport] = useState({ ...generalReports[0] }); const [reportContent, setReportContent] = useState({}); @@ -137,7 +137,7 @@ export const FieldInsights = ({ field, query }: any) => { ); })} - {indexOf(numericalTypes, field.type) > 0 && + {indexOf(NUMERICAL_TYPES, field.type) > 0 && numericalOnlyReports.map((report) => { return ( diff --git a/dashboards-observability/public/components/event_analytics/explorer/sidebar/sidebar.scss b/dashboards-observability/public/components/event_analytics/explorer/sidebar/sidebar.scss index 8ef4cc875..a5ab8d061 100644 --- a/dashboards-observability/public/components/event_analytics/explorer/sidebar/sidebar.scss +++ b/dashboards-observability/public/components/event_analytics/explorer/sidebar/sidebar.scss @@ -37,25 +37,11 @@ background-color: lightOrDarkTheme(tint($euiColorPrimary, 90%), $euiColorLightShade); } -.dscFieldChooser { - padding-left: $euiSize; -} - .dscFieldChooser__toggle { color: $euiColorMediumShade; margin-left: $euiSizeS !important; } -.dscSidebarItem { - &:hover, - &:focus-within, - &[class*='-isActive'] { - .dscSidebarItem__action { - opacity: 1; - } - } -} - /** * 1. Only visually hide the action, so that it's still accessible to screen readers. * 2. When tabbed to, this element needs to be visible for keyboard accessibility. @@ -110,3 +96,47 @@ .override_timestamp_loading { vertical-align: middle; } + +.explorerFieldSelector { + padding: $euiSizeS; +} + +#vis__mainContent { + .explorer__insights { + min-height: 0; + display: grid; + grid-template-columns: 50% 50%; + height: 100%; + .explorerFieldSelector, .explorer__vizDataConfig { + padding: $euiSizeS; + overflow: auto; + + &__fieldGroups { + @include euiYScrollWithShadows; + + overflow-y: auto; + margin-right: -$euiSizeS; + padding-right: $euiSizeS; + margin-top: $euiSizeS; + } + + &__fieldGroup { + margin-top: $euiSizeS; + + &:first-child { + margin-top: 0; + } + } + } + .explorerFieldSelector { + @include euiYScrollWithShadows; + .sidebar-list { + height: 100%; + } + } + } +} + +.ws__configPanel--right{ + overflow-y: unset; +} diff --git a/dashboards-observability/public/components/event_analytics/explorer/sidebar/sidebar.tsx b/dashboards-observability/public/components/event_analytics/explorer/sidebar/sidebar.tsx index c54b89baa..794ce5328 100644 --- a/dashboards-observability/public/components/event_analytics/explorer/sidebar/sidebar.tsx +++ b/dashboards-observability/public/components/event_analytics/explorer/sidebar/sidebar.tsx @@ -7,10 +7,8 @@ import './sidebar.scss'; import React, { useState } from 'react'; import { isEmpty } from 'lodash'; -import { EuiTitle, EuiSpacer, EuiButtonIcon, EuiFieldSearch } from '@elastic/eui'; -import { i18n } from '@osd/i18n'; -import { FormattedMessage, I18nProvider } from '@osd/i18n/react'; -import { cssNumber } from 'jquery'; +import { EuiTitle, EuiSpacer, EuiFieldSearch, EuiAccordion } from '@elastic/eui'; +import { I18nProvider } from '@osd/i18n/react'; import { Field } from './field'; import { IExplorerFields, IField } from '../../../../../common/types/explorer'; @@ -51,7 +49,6 @@ export const Sidebar = (props: ISidebarProps) => { return (
    -
    { !isEmpty(explorerFields.availableFields)) && ( <> {explorerFields?.queriedFields && explorerFields.queriedFields?.length > 0 && ( - <> - -

    - -

    -
    - + + Query fields + + } + paddingSize="xs" + >
      {explorerFields.queriedFields && @@ -111,93 +108,28 @@ export const Sidebar = (props: ISidebarProps) => { ); })}
    - +
    )} - -

    - -

    -
    - -
      - {explorerData && - !isEmpty(explorerData.jsonData) && - explorerFields.selectedFields && - explorerFields.selectedFields.map((field) => { - return ( -
    • - -
    • - ); - })} -
    -
    - -

    - -

    -
    -
    - setShowFields(!showFields)} - aria-label={ - showFields - ? i18n.translate( - 'discover.fieldChooser.filter.indexAndFieldsSectionHideAriaLabel', - { - defaultMessage: 'Hide fields', - } - ) - : i18n.translate( - 'discover.fieldChooser.filter.indexAndFieldsSectionShowAriaLabel', - { - defaultMessage: 'Show fields', - } - ) - } - /> -
    -
    -
      + + Selected Fields + + } + paddingSize="xs" > - {explorerFields.availableFields && - explorerFields.availableFields - .filter((field) => searchTerm === '' || field.name.indexOf(searchTerm) !== -1) - .map((field) => { +
        + {explorerData && + !isEmpty(explorerData.jsonData) && + explorerFields.selectedFields && + explorerFields.selectedFields.map((field) => { return (
      • { selectedTimestamp={selectedTimestamp} isOverridingTimestamp={isOverridingTimestamp} handleOverrideTimestamp={handleOverrideTimestamp} - onToggleField={handleAddField} - selected={false} + selected={true} isFieldToggleButtonDisabled={isFieldToggleButtonDisabled} showTimestampOverrideButton={true} + onToggleField={handleRemoveField} />
      • ); })} -
      +
    + + + + Available Fields + + } + paddingSize="xs" + > +
      + {explorerFields.availableFields && + explorerFields.availableFields + .filter((field) => searchTerm === '' || field.name.indexOf(searchTerm) !== -1) + .map((field) => { + return ( +
    • + +
    • + ); + })} +
    +
    )}
    diff --git a/dashboards-observability/public/components/event_analytics/explorer/timechart_header/__tests__/__snapshots__/timechart_header.test.tsx.snap b/dashboards-observability/public/components/event_analytics/explorer/timechart_header/__tests__/__snapshots__/timechart_header.test.tsx.snap index 9c302d242..7255e68b3 100644 --- a/dashboards-observability/public/components/event_analytics/explorer/timechart_header/__tests__/__snapshots__/timechart_header.test.tsx.snap +++ b/dashboards-observability/public/components/event_analytics/explorer/timechart_header/__tests__/__snapshots__/timechart_header.test.tsx.snap @@ -32,7 +32,7 @@ exports[`Time chart header component Renders Time chart header component 1`] = ` }, ] } - stateInterval="auto" + stateInterval="w" >