From 0685920fd405963ab21cd20caeecf5e24dfeb7f5 Mon Sep 17 00:00:00 2001 From: Chen Dai <46505291+dai-chen@users.noreply.github.com> Date: Tue, 7 Jan 2020 16:26:03 -0800 Subject: [PATCH] Sql test bench (#335) * Initial commit with clean code from PoC branch * Refactor code * Fix float number parse issue * Fix sqlite memory db issue * Save reports * Handle date type * Load ecommerce test data * Refactor comparison test class * Support command line args from gradlew * Support command line args from gradlew * Close connection * Use ES rest client only * Rename es host url argument * Refactor test set * Print log to console * Add unit test for es connection * Add unit test for jdbc connection * Fix connect issue * Add more unit test * Refactor DBResult and Row * Fix unit tests * Refactor * Support command line args via gradle * Retry different database if mismatch on first one * Add more test data * Add documentation * Add documentation * Add documentation * Add documentation * Add documentation * Clean up old report files * Add missing java doc * Create report folder if not exist * Upgrade our JDBC dependency to 1.3 * Generate JSON by serializing java bean and use Lombok * Run doctest by default --- build.gradle | 34 +++ docs/dev/Testing.md | 289 ++++++++++++++++++ docs/dev/img/how-we-do-comparison-test.png | Bin 0 -> 100614 bytes docs/dev/img/test-framework-components.png | Bin 0 -> 118710 bytes .../img/the-workflow-of-comparison-test.png | Bin 0 -> 88186 bytes .../sql/correctness/CorrectnessIT.java | 138 +++++++++ .../sql/correctness/TestConfig.java | 154 ++++++++++ .../sql/correctness/report/ErrorTestCase.java | 40 +++ .../correctness/report/FailedTestCase.java | 45 +++ .../correctness/report/SuccessTestCase.java | 35 +++ .../correctness/report/TestCaseReport.java | 53 ++++ .../sql/correctness/report/TestReport.java | 50 +++ .../sql/correctness/report/TestSummary.java | 46 +++ .../correctness/runner/ComparisonTest.java | 168 ++++++++++ .../runner/connection/DBConnection.java | 70 +++++ .../runner/connection/ESConnection.java | 113 +++++++ .../runner/connection/JDBCConnection.java | 175 +++++++++++ .../runner/resultset/DBResult.java | 88 ++++++ .../sql/correctness/runner/resultset/Row.java | 60 ++++ .../correctness/tests/ComparisonTestTest.java | 182 +++++++++++ .../sql/correctness/tests/DBResultTest.java | 52 ++++ .../correctness/tests/ESConnectionTest.java | 109 +++++++ .../correctness/tests/JDBCConnectionTest.java | 187 ++++++++++++ .../sql/correctness/tests/RowTest.java | 49 +++ .../sql/correctness/tests/TestConfigTest.java | 72 +++++ .../correctness/tests/TestDataSetTest.java | 70 +++++ .../correctness/tests/TestQuerySetTest.java | 41 +++ .../sql/correctness/tests/TestReportTest.java | 137 +++++++++ .../sql/correctness/tests/UnitTests.java | 34 +++ .../sql/correctness/testset/TestDataSet.java | 96 ++++++ .../sql/correctness/testset/TestQuerySet.java | 65 ++++ .../kibana_sample_data_ecommerce.csv | 21 ++ .../kibana_sample_data_ecommerce.json | 100 ++++++ .../kibana_sample_data_flights.csv | 21 ++ .../kibana_sample_data_flights.json | 81 +++++ .../correctness/sanity_integration_tests.txt | 8 + .../correctness/tableau_integration_tests.txt | 215 +++++++++++++ .../resources/correctness/test_data_test.csv | 3 + .../resources/correctness/test_data_test.json | 21 ++ 39 files changed, 3122 insertions(+) create mode 100644 docs/dev/Testing.md create mode 100644 docs/dev/img/how-we-do-comparison-test.png create mode 100644 docs/dev/img/test-framework-components.png create mode 100644 docs/dev/img/the-workflow-of-comparison-test.png create mode 100644 src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/CorrectnessIT.java create mode 100644 src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/TestConfig.java create mode 100644 src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/report/ErrorTestCase.java create mode 100644 src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/report/FailedTestCase.java create mode 100644 src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/report/SuccessTestCase.java create mode 100644 src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/report/TestCaseReport.java create mode 100644 src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/report/TestReport.java create mode 100644 src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/report/TestSummary.java create mode 100644 src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/runner/ComparisonTest.java create mode 100644 src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/runner/connection/DBConnection.java create mode 100644 src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/runner/connection/ESConnection.java create mode 100644 src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/runner/connection/JDBCConnection.java create mode 100644 src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/runner/resultset/DBResult.java create mode 100644 src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/runner/resultset/Row.java create mode 100644 src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/ComparisonTestTest.java create mode 100644 src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/DBResultTest.java create mode 100644 src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/ESConnectionTest.java create mode 100644 src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/JDBCConnectionTest.java create mode 100644 src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/RowTest.java create mode 100644 src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/TestConfigTest.java create mode 100644 src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/TestDataSetTest.java create mode 100644 src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/TestQuerySetTest.java create mode 100644 src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/TestReportTest.java create mode 100644 src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/UnitTests.java create mode 100644 src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/testset/TestDataSet.java create mode 100644 src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/testset/TestQuerySet.java create mode 100644 src/test/resources/correctness/kibana_sample_data_ecommerce.csv create mode 100644 src/test/resources/correctness/kibana_sample_data_ecommerce.json create mode 100644 src/test/resources/correctness/kibana_sample_data_flights.csv create mode 100644 src/test/resources/correctness/kibana_sample_data_flights.json create mode 100644 src/test/resources/correctness/sanity_integration_tests.txt create mode 100644 src/test/resources/correctness/tableau_integration_tests.txt create mode 100644 src/test/resources/correctness/test_data_test.csv create mode 100644 src/test/resources/correctness/test_data_test.json diff --git a/build.gradle b/build.gradle index eba53b88b6..6f9fa1eba8 100644 --- a/build.gradle +++ b/build.gradle @@ -112,6 +112,7 @@ compileJava { // TODO: Similarly, need to fix compiling errors in test source code compileTestJava.options.warnings = false compileTestJava { + options.compilerArgs.addAll(["-processor", 'lombok.launch.AnnotationProcessorHider$AnnotationProcessor']) doFirst { options.compilerArgs.remove('-Werror') options.compilerArgs.remove('-Xdoclint:all') @@ -132,6 +133,33 @@ integTestRunner { systemProperty 'tests.security.manager', 'false' // allows integration test classes to access test resource from project root path systemProperty('project.root', project.rootDir.absolutePath) + + // Run different task based on test type. "exclude" is required for each task. + def testType = System.getProperty("testType") + if (testType == 'doctest') { // Doctest to generate documentation + include 'com/amazon/opendistroforelasticsearch/sql/doctest/**/*IT.class' + exclude 'com/amazon/opendistroforelasticsearch/sql/correctness/**' + exclude 'com/amazon/opendistroforelasticsearch/sql/esintgtest/**' + + } else if (testType == 'comparison') { // Comparision testing + include 'com/amazon/opendistroforelasticsearch/sql/correctness/CorrectnessIT.class' + exclude 'com/amazon/opendistroforelasticsearch/sql/doctest/**' + exclude 'com/amazon/opendistroforelasticsearch/sql/esintgtest/**' + + // Enable logging output to console + testLogging.showStandardStreams true + + // Pass down system properties to IT class + systemProperty "esHost", System.getProperty("esHost") + systemProperty "dbUrl", System.getProperty("dbUrl") + systemProperty "otherDbUrls", System.getProperty("otherDbUrls") + systemProperty "queries", System.getProperty("queries") + + } else { // Run all other integration tests and doctest by default + include 'com/amazon/opendistroforelasticsearch/sql/esintgtest/**/*IT.class' + include 'com/amazon/opendistroforelasticsearch/sql/doctest/**/*IT.class' + exclude 'com/amazon/opendistroforelasticsearch/sql/correctness/**' + } } integTestCluster { @@ -214,6 +242,12 @@ dependencies { // testCompile group: 'com.alibaba', name: 'fastjson', version:'1.2.56' // testCompile group: 'org.mockito', name: 'mockito-core', version:'2.23.4' testCompile group: "org.elasticsearch.client", name: 'transport', version: "${es_version}" + + // JDBC drivers for comparison test. Somehow Apache Derby throws security permission exception. + testCompile group: 'com.amazon.opendistroforelasticsearch.client', name: 'opendistro-sql-jdbc', version: '1.3.0.0' + testCompile group: 'com.h2database', name: 'h2', version: '1.4.200' + testCompile group: 'org.xerial', name: 'sqlite-jdbc', version: '3.28.0' + //testCompile group: 'org.apache.derby', name: 'derby', version: '10.15.1.3' } apply plugin: 'nebula.ospackage' diff --git a/docs/dev/Testing.md b/docs/dev/Testing.md new file mode 100644 index 0000000000..96ae0d3930 --- /dev/null +++ b/docs/dev/Testing.md @@ -0,0 +1,289 @@ +# How OpenDistro SQL Is Tested + +## 1.Introduction + +### 1.1 Problem Statement + +Currently there are quite a few unit tests and integration tests in the codebase. However, there are still problems to rely on these test cases only to ensure the correctness of our plugin: + + 1. **Test coverage**: Although the amount of test cases seems large, we’ve found that more than one important case was missed, for example use table alias in FROM clause, GROUP BY field alias etc. + 2. **Test correctness**: Some test case make assertion on the result set too simple to capture the issue if any. For example, some assertion is as loose as checking if result set is not empty. Unfortunately with strict assertion, we’re still not sure if the assertion is correct or not. For example, there were issue [#124](https://github.com/opendistro-for-elasticsearch/sql/issues/124) and [#226](https://github.com/opendistro-for-elasticsearch/sql/issues/226) regarding LEFT JOIN with WHERE clause and SUBSTRING. The correct semantic was actually different from what we thought. We did have MySQL reference docs at hands but it’s possible to miss some cases or misunderstand the correct use. So some mechanism is required to replace the loose assertion and be able to enforce the verification of our understanding. + 3. **Test Bench**: We want to run this new test on a regular basis to improving our implementation continuously. + +### 1.2 Our Goals + +In this work, we want to address the problems above for our testing to get more confidence of the correctness of our plugin. To achieve this goal, we need to improve both the quantity and quality of our tests and also keep it running on a regular basis. Although the search space of SQL is infinite, we can cover typical use cases and corner cases and most importantly make sure it does demonstrate the correctness of our implementation if it can pass. + +> Note that performance is also another important area that we want to test and understand how efficient or where is the bottleneck of typical queries. Since Elasticsearch provides ESRally benchmark tool which is totally different from our homemade test harness, we will be focuses on the correctness and won't cover performance testing here. + +## 2.Design + +### 2.1 Approaches + +First we can improve the test coverage by improving the diversity of our test case set, including diversity of test schema, test data and test cases. Secondly although it's difficult to provide rigorous mathematical proof for the result set of each query, we can make our best to ensure relative correctness by comparing with a few other database implementations. Of course the comparison testing doesn't guarantee 100% correctness and heavily depends on the correctness of reference implementation. But it should be much more reliable than hand written assertions after reading specification documentation previously. + +### 2.2 Components + +At this stage we don’t want to spend too much efforts on setting up a complicated infrastructure for testing. So we can take full advantage of capabilities that GitHub provides: + + 1. **Test Data & Cases**: Use test case set with Kibana flights and ecommerce sample index. + 2. **Trigger**: Set up another GitHub Action workflow. + 3. **Test Runner**: Use embedded Elasticsearch and other IMDBs. + 4. **Reporting**: Use standard JUnit report or simple custom json format. + 5. **Visualization**: Enable GitHub Pages for viewing or feed into Elasticsearch. + +![Test Framework Components](img/test-framework-components.png) + +## 3.Implementation + +### 3.1 Test Data + +For schema, we can just use Elasticsearch mapping as the format of schema and convert it to `INSERT` statement. For data we use CSV format simply. + +``` +{ + "_doc": { + "properties": { + "AvgTicketPrice": { + "type": "float" + }, + "Cancelled": { + "type": "boolean" + }, + "Carrier": { + "type": "keyword" + }, + ... + ... + "dayOfWeek": { + "type": "integer" + } + } + } +} + +FlightNum,Origin,FlightDelay,DistanceMiles,...,DestCityName +9HY9SWR,Frankfurt am Main Airport,false,10247.856675613455,...,Sydney +X98CCZO,Cape Town International Airport,false,5482.606664853586,...,Venice +...... +``` + +### 3.2 Test Cases + +For now we don't implement a Fuzzer to generate test queries because test queries prepared manually is sufficient to help identify issues. So we just put all queries in a text file. In future, a fuzzer can generate queries and save to file to integrate with Test Runner smoothly. + +``` +SELECT 1 AS `empty` FROM `kibana_sample_data_flights` +SELECT substring(OriginWeather, 1, 2) AS OriginWeather FROM kibana_sample_data_flights +SELECT SUM(FlightDelayMin) AS sum_FlightDelayMin_ok FROM kibana_sample_data_flights +SELECT SUM(FlightDelay) AS sum_FlightDelay_ok FROM kibana_sample_data_flights +SELECT SUM(DistanceMiles) AS sum_DistanceMiles_ok FROM kibana_sample_data_flights +``` + +### 3.3 Test Runner + +To simplify the test and be confident about the test result, Test Runner runs query by JDBC driver of OpenDistro SQL and other databases. In this case we don’t need to parse the data format returned from our plugin. And obviously another benefit is the correctness of JDBC driver is also covered. + +![How We Do Comparison Test](img/how-we-do-comparison-test.png) + +### 3.4 Trigger + +GitHub Action can be set up to trigger Gradle task to generate test report. + +### 3.5 Reporting + +Elasticsearch integration test is still using JUnit 4 which has many problems, such as dynamic test cases. So we can define our own report format for flexibility: + +``` +{ + "summary": { + "total": 3, + "success": 1, + "failure": 2 + }, + "tests": [ + { + "id": 1, + "sql": "...", + "result": "Success" + }, + { + "id": 2, + "sql": "...", + "result": "Failed", + "resultSets": [ + { + "database": "Elasticsearch", + "resultSet": { + "schema": [{"name":"","type":""},...], + "dataRows": [[...],...,[...]] + } + }, + { + "database": "Other database", + "resultSet": { + "schema": [...], + "dataRows": [[...],...,[...]] + } + } + ] + }, + { + "id": 3, + "sql": "...", + "result": "Failed", + "reason": "..." + }, + ] +} +``` + +The workflow of generating test result is: + +![The Workflow of Comparison Test](img/the-workflow-of-comparison-test.png) + +### 3.6 Visualization + +TODO + +--- + +## Appendix + +### I.Sample Usage + +Use default test set and reference databases by `testType` argument given only. Because `integTestRunner` triggers quite a few integration tests which take long time and runs with `gradlew build` every time, `testType` is added to run doctest for documentation and comparison test separately. + +Note that for now test data set argument is not supported because it often requires code changes to map more ES data type to JDBC type as well as convert data. + +``` +$ ./gradlew integTestRunner -DtestType=comparison + + [2020-01-06T11:37:57,437][INFO ][c.a.o.s.c.CorrectnessIT ] [performComparisonTest] Starting comparison test + ================================= + Tested Database : (Use internal Elasticsearch in workspace) + Other Databases : + SQLite = jdbc:sqlite::memory: + H2 = jdbc:h2:mem:test;DB_CLOSE_DELAY=-1 + Test data set(s) : + Test data set : + Table name: kibana_sample_data_flights + Schema: { + "mappings": { + "properties": { + "AvgTicketPrice": { + "type": "float" + }, + "Cancelled": { + "type": "boolean" + }, + "Carrier": { + "type": "keyword" + }, + ... + } + } + } + + Data rows (first 5 in 21): + [FlightNum, Origin, FlightDelay, DistanceMiles, FlightTimeMin, OriginWeather, dayOfWeek, AvgTicketPrice, Carrier, FlightDelayMin, OriginRegion, FlightDelayType, DestAirportID, Dest, FlightTimeHour, Cancelled, DistanceKilometers, OriginCityName, DestWeather, OriginCountry, DestCountry, DestRegion, OriginAirportID, DestCityName, timestamp] + [RGXY9H5, Chubu Centrair International Airport, false, 1619.970725161303, 124.1471507959044, Heavy Fog, 0, 626.1297405910661, Kibana Airlines, 0, SE-BD, No Delay, CAN, Guangzhou Baiyun International Airport, 2.06911917993174, true, 2607.0901667139924, Tokoname, Clear, JP, CN, SE-BD, NGO, Guangzhou, 2019-12-23T11:19:32] + [WOPNZEP, Munich Airport, true, 198.57903689856937, 34.9738738474057, Sunny, 0, 681.9911763989377, Kibana Airlines, 15, DE-BY, Carrier Delay, VE05, Venice Marco Polo Airport, 0.5828978974567617, false, 319.58198155849124, Munich, Cloudy, DE, IT, IT-34, MUC, Venice, 2019-12-23T12:32:26] + [G9J5O2V, Frankfurt am Main Airport, false, 4857.154739888458, 651.402736475921, Clear, 0, 868.0507463122127, Kibana Airlines, 0, DE-HE, No Delay, XIY, Xi'an Xianyang International Airport, 10.856712274598683, false, 7816.832837711051, Frankfurt am Main, Thunder & Lightning, DE, CN, SE-BD, FRA, Xi'an, 2019-12-23T03:48:33] + [HM80A5V, Itami Airport, false, 5862.6666599206, 555.0027890084269, Heavy Fog, 0, 765.0413127727119, Logstash Airways, 0, SE-BD, No Delay, TV01, Treviso-Sant'Angelo Airport, 9.250046483473783, true, 9435.047413143258, Osaka, Clear, JP, IT, IT-34, ITM, Treviso, 2019-12-23T19:50:48] + + Test data set : + Table name: kibana_sample_data_ecommerce + Schema: { + "mappings": { + "properties": { + "category": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword" + } + } + }, + "currency": { + "type": "keyword" + }, + "customer_birth_date": { + "type": "date" + }, + ... + } + } + } + Data rows (first 5 in 21): + [customer_first_name, customer_phone, type, manufacturer, customer_full_name, order_date, customer_last_name, day_of_week_i, total_quantity, currency, taxless_total_price, total_unique_products, category, customer_id, sku, order_id, user, customer_gender, email, day_of_week, taxful_total_price] + [Irwin, , order, [Elitelligence, Microlutions], Irwin Mcdonald, 2019-12-19T23:21:07+00:00, Mcdonald, 3, 2, EUR, 26.98, 2, [Men's Clothing], 14, [ZO0564605646, ZO0117401174], 551689, irwin, MALE, irwin@mcdonald-family.zzz, Thursday, 26.98] + [Wilhemina St., , order, [Spherecords Maternity, Oceanavigations], Wilhemina St. Washington, 2019-12-19T08:03:50+00:00, Washington, 3, 2, EUR, 72.98, 2, [Women's Clothing], 17, [ZO0705107051, ZO0270302703], 550817, wilhemina, FEMALE, wilhemina st.@washington-family.zzz, Thursday, 72.98] + [Kamal, , order, [Elitelligence, Oceanavigations], Kamal Foster, 2019-12-19T08:47:02+00:00, Foster, 3, 2, EUR, 45.98, 2, [Men's Clothing], 39, [ZO0532905329, ZO0277802778], 550864, kamal, MALE, kamal@foster-family.zzz, Thursday, 45.98] + [Diane, , order, [Tigress Enterprises, Low Tide Media], Diane Turner, 2019-12-22T13:45:07+00:00, Turner, 6, 2, EUR, 107.94, 2, [Women's Clothing, Women's Shoes], 22, [ZO0059900599, ZO0381103811], 555222, diane, FEMALE, diane@turner-family.zzz, Sunday, 107.94] + + Test query set : SQL queries (first 5 in 215): + SELECT SUBSTRING(`kibana_sample_data_flights`.`OriginWeather`, 1, 1024) AS `OriginWeather` FROM `kibana_sample_data_flights` GROUP BY 1 + SELECT SUM(`kibana_sample_data_flights`.`FlightDelayMin`) AS `sum_Offset_ok` FROM `kibana_sample_data_flights` GROUP BY 1 + SELECT SUM(`kibana_sample_data_flights`.`FlightDelay`) AS `sum_FlightDelay_ok` FROM `kibana_sample_data_flights` GROUP BY 1 + SELECT SUM(`kibana_sample_data_flights`.`DistanceMiles`) AS `sum_DistanceMiles_ok` FROM `kibana_sample_data_flights` GROUP BY 1 + SELECT YEAR(`kibana_sample_data_flights`.`timestamp`) AS `yr_timestamp_ok` FROM `kibana_sample_data_flights` GROUP BY 1 + + ================================= + + [2020-01-06T11:37:57,996][INFO ][c.a.o.s.c.CorrectnessIT ] [performComparisonTest] Loading test data set... + [2020-01-06T11:38:06,308][INFO ][c.a.o.s.c.CorrectnessIT ] [performComparisonTest] Verifying test queries... + [2020-01-06T11:38:21,180][INFO ][c.a.o.s.c.CorrectnessIT ] [performComparisonTest] Saving test report to disk... + [2020-01-06T11:38:21,202][INFO ][c.a.o.s.c.CorrectnessIT ] [performComparisonTest] Report file location is /Users/xxx/Workspace/sql/reports/report_2020-01-06-19.json + [2020-01-06T11:38:21,204][INFO ][c.a.o.s.c.CorrectnessIT ] [performComparisonTest] Cleaning up test data... + [2020-01-06T11:38:21,849][INFO ][c.a.o.s.c.CorrectnessIT ] [performComparisonTest] Completed comparison test. +``` + +Specify different test case set by `queries` argument: + +``` +$ ./gradlew integTestRunner -DtestType=comparison -Dqueries=sanity_integration_tests.txt + + ... + Test query set : SQL queries (first 5 in 7): + SELECT AvgTicketPrice, Cancelled, Carrier, FlightDelayMin, timestamp FROM kibana_sample_data_flights + SELECT AvgTicketPrice AS avg, Cancelled AS cancel, Carrier AS carrier, FlightDelayMin AS delay, timestamp AS ts FROM kibana_sample_data_flights + SELECT Carrier, AVG(FlightDelayMin) FROM kibana_sample_data_flights GROUP BY Carrier + SELECT Carrier, AVG(FlightDelayMin) FROM kibana_sample_data_flights GROUP BY Carrier HAVING AVG(FlightDelayMin) > 5 + SELECT YEAR(timestamp) FROM kibana_sample_data_flights + ... +``` + +Specify external Elasticsearch cluster by `esHost` argument, otherwise an internal Elasticsearch in workspace is in use by default. + +``` +$ ./gradlew integTestRunner -DtestType=comparison -DesHost=localhost:9200 + + ================================= + Tested Database : localhost:9200 + Other Databases : + SQLite = jdbc:sqlite::memory: + H2 = jdbc:h2:mem:test;DB_CLOSE_DELAY=-1 + ... +``` + +Specify different databases for comparison. `dbUrl` is for database to be tested. `otherDbUrls` is for other databases whose result set be referenced and compared. + +``` +$ ./gradlew integTestRunner -DtestType=comparison -Dqueries=sanity_integration_tests.txt -DdbUrl=jdbc:sqlite::memory: + + ================================= + Tested Database : jdbc:sqlite::memory: + Other Databases : + SQLite = jdbc:sqlite::memory: + H2 = jdbc:h2:mem:test;DB_CLOSE_DELAY=-1 + ... + +$ ./gradlew integTestRunner -DtestType=comparison -Dqueries=sanity_integration_tests.txt -DdbUrl=jdbc:sqlite::memory: -DotherDbUrls=Unknown=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1 + + ================================= + Tested Database : jdbc:sqlite::memory: + Other Databases : + Unknown = jdbc:h2:mem:test + ... +``` diff --git a/docs/dev/img/how-we-do-comparison-test.png b/docs/dev/img/how-we-do-comparison-test.png new file mode 100644 index 0000000000000000000000000000000000000000..b8dab8b6350b340704af14098ea3814d76e8aaf5 GIT binary patch literal 100614 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%0AAYPX9L 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 Kc7>)x^#1_?wgd?P literal 0 HcmV?d00001 diff --git a/docs/dev/img/test-framework-components.png b/docs/dev/img/test-framework-components.png new file mode 100644 index 0000000000000000000000000000000000000000..35d25aa7cca7fee8cce8bfe1054e053d8dc51f46 GIT binary patch literal 118710 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 LOQU-RZc+aq4pxO| literal 0 HcmV?d00001 diff --git a/docs/dev/img/the-workflow-of-comparison-test.png b/docs/dev/img/the-workflow-of-comparison-test.png new file mode 100644 index 0000000000000000000000000000000000000000..df3e839139f8d3c622ceb77d55d2975602c95a6a GIT binary patch literal 88186 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%0D@6WRK$V_O^d=M)l`y6 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 literal 0 HcmV?d00001 diff --git a/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/CorrectnessIT.java b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/CorrectnessIT.java new file mode 100644 index 0000000000..d52282c817 --- /dev/null +++ b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/CorrectnessIT.java @@ -0,0 +1,138 @@ +/* + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.opendistroforelasticsearch.sql.correctness; + +import com.amazon.opendistroforelasticsearch.sql.correctness.report.TestReport; +import com.amazon.opendistroforelasticsearch.sql.correctness.runner.ComparisonTest; +import com.amazon.opendistroforelasticsearch.sql.correctness.runner.connection.DBConnection; +import com.amazon.opendistroforelasticsearch.sql.correctness.runner.connection.ESConnection; +import com.amazon.opendistroforelasticsearch.sql.correctness.runner.connection.JDBCConnection; +import com.amazon.opendistroforelasticsearch.sql.correctness.testset.TestDataSet; +import com.amazon.opendistroforelasticsearch.sql.esintgtest.SQLIntegTestCase; +import com.google.common.collect.Maps; +import org.apache.http.HttpHost; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.elasticsearch.client.RestClient; +import org.json.JSONObject; +import org.junit.Test; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Map; +import java.util.TimeZone; + +import static com.amazon.opendistroforelasticsearch.sql.esintgtest.TestUtils.getResourceFilePath; + +/** + * Correctness integration test by performing comparison test with other databases. + */ +public class CorrectnessIT extends SQLIntegTestCase { + + private static final Logger LOG = LogManager.getLogger(); + + @Test + public void performComparisonTest() { + TestConfig config = new TestConfig(getCmdLineArgs()); + LOG.info("Starting comparison test {}", config); + + try (ComparisonTest test = new ComparisonTest(getThisDBConnection(config), + getOtherDBConnections(config))) { + LOG.info("Loading test data set..."); + test.connect(); + for (TestDataSet dataSet : config.getTestDataSets()) { + test.loadData(dataSet); + } + + LOG.info("Verifying test queries..."); + TestReport report = test.verify(config.getTestQuerySet()); + + LOG.info("Saving test report to disk..."); + store(report); + + LOG.info("Cleaning up test data..."); + for (TestDataSet dataSet : config.getTestDataSets()) { + test.cleanUp(dataSet); + } + } + LOG.info("Completed comparison test."); + } + + private Map<String, String> getCmdLineArgs() { + return Maps.fromProperties(System.getProperties()); + } + + private DBConnection getThisDBConnection(TestConfig config) { + String dbUrl = config.getDbConnectionUrl(); + if (dbUrl.isEmpty()) { + return getESConnection(config); + } + return new JDBCConnection("DB Tested", dbUrl); + } + + /** Use Elasticsearch cluster given on CLI arg or internal embedded in SQLIntegTestCase */ + private DBConnection getESConnection(TestConfig config) { + RestClient client; + String esHost = config.getESHostUrl(); + if (esHost.isEmpty()) { + client = getRestClient(); + esHost = client.getNodes().get(0).getHost().toString(); + } else { + client = RestClient.builder(HttpHost.create(esHost)).build(); + } + return new ESConnection("jdbc:elasticsearch://" + esHost, client); + } + + /** Create database connection with database name and connect URL */ + private DBConnection[] getOtherDBConnections(TestConfig config) { + return config.getOtherDbConnectionNameAndUrls(). + entrySet().stream(). + map(e -> new JDBCConnection(e.getKey(), e.getValue())). + toArray(DBConnection[]::new); + } + + private void store(TestReport report) { + try { + // Create reports folder if not exists + String folderPath = "reports/"; + Path path = Paths.get(getResourceFilePath(folderPath)); + if (Files.notExists(path)) { + Files.createDirectory(path); + } + + // Write to report file + String relFilePath = folderPath + reportFileName(); + String absFilePath = getResourceFilePath(relFilePath); + byte[] content = new JSONObject(report).toString(2).getBytes(); + + LOG.info("Report file location is {}", absFilePath); + Files.write(Paths.get(absFilePath), content); + } catch (Exception e) { + throw new IllegalStateException("Failed to store report file", e); + } + } + + private String reportFileName() { + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd-HH"); + df.setTimeZone(TimeZone.getTimeZone("GMT")); + String dateTime = df.format(new Date()); + return "report_" + dateTime + ".json"; + } + +} diff --git a/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/TestConfig.java b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/TestConfig.java new file mode 100644 index 0000000000..3d55a00b6d --- /dev/null +++ b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/TestConfig.java @@ -0,0 +1,154 @@ +/* + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.opendistroforelasticsearch.sql.correctness; + +import com.amazon.opendistroforelasticsearch.sql.correctness.testset.TestDataSet; +import com.amazon.opendistroforelasticsearch.sql.correctness.testset.TestQuerySet; +import com.amazon.opendistroforelasticsearch.sql.utils.StringUtils; +import com.google.common.base.Charsets; +import com.google.common.io.Resources; + +import java.net.URL; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +import static java.util.stream.Collectors.joining; + +/** + * Test configuration parse the following information from command line arguments: + * 1) Test schema and data + * 2) Test queries + * 3) Elasticsearch connection URL + * 4) Other database connection URLs + */ +public class TestConfig { + + private static final String DEFAULT_TEST_QUERIES = "tableau_integration_tests.txt"; + private static final String DEFAULT_OTHER_DB_URLS = "H2=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1," + "SQLite=jdbc:sqlite::memory:"; + + private final TestDataSet[] testDataSets; + + private final TestQuerySet testQuerySet; + + private final String esHostUrl; + + /** Test against some database rather than Elasticsearch via our JDBC driver */ + private final String dbConnectionUrl; + + private final Map<String, String> otherDbConnectionNameAndUrls = new HashMap<>(); + + public TestConfig(Map<String, String> cliArgs) { + testDataSets = buildDefaultTestDataSet(); // TODO: parse test data set argument + testQuerySet = buildTestQuerySet(cliArgs); + esHostUrl = cliArgs.getOrDefault("esHost", ""); + dbConnectionUrl = cliArgs.getOrDefault("dbUrl", ""); + + parseOtherDbConnectionInfo(cliArgs); + } + + public TestDataSet[] getTestDataSets() { + return testDataSets; + } + + public TestQuerySet getTestQuerySet() { + return testQuerySet; + } + + public String getESHostUrl() { + return esHostUrl; + } + + public String getDbConnectionUrl() { + return dbConnectionUrl; + } + + public Map<String, String> getOtherDbConnectionNameAndUrls() { + return otherDbConnectionNameAndUrls; + } + + private TestDataSet[] buildDefaultTestDataSet() { + return new TestDataSet[]{ + new TestDataSet("kibana_sample_data_flights", + readFile("kibana_sample_data_flights.json"), + readFile("kibana_sample_data_flights.csv")), + new TestDataSet("kibana_sample_data_ecommerce", + readFile("kibana_sample_data_ecommerce.json"), + readFile("kibana_sample_data_ecommerce.csv")), + }; + } + + private TestQuerySet buildTestQuerySet(Map<String, String> cliArgs) { + String queryFilePath = cliArgs.getOrDefault("queries", ""); // Gradle set it empty always + if (queryFilePath.isEmpty()) { + queryFilePath = DEFAULT_TEST_QUERIES; + } + return new TestQuerySet(readFile(queryFilePath)); + } + + private void parseOtherDbConnectionInfo(Map<String, String> cliArgs) { + String otherDbUrls = cliArgs.getOrDefault("otherDbUrls", ""); + if (otherDbUrls.isEmpty()) { + otherDbUrls = DEFAULT_OTHER_DB_URLS; + } + + for (String dbNameAndUrl : otherDbUrls.split(",")) { + int firstEq = dbNameAndUrl.indexOf('='); + String dbName = dbNameAndUrl.substring(0, firstEq); + String dbUrl = dbNameAndUrl.substring(firstEq + 1); + otherDbConnectionNameAndUrls.put(dbName, dbUrl); + } + } + + private static String readFile(String relativePath) { + try { + URL url = Resources.getResource("correctness/" + relativePath); + return Resources.toString(url, Charsets.UTF_8); + } catch (Exception e) { + throw new IllegalStateException("Failed to read test file [" + relativePath + "]"); + } + } + + @Override + public String toString() { + return "\n=================================\n" + + "Tested Database : " + esHostUrlToString() + '\n' + + "Other Databases :\n" + otherDbConnectionInfoToString() + '\n' + + "Test data set(s) :\n" + testDataSetsToString() + '\n' + + "Test query set : " + testQuerySet + '\n' + + "=================================\n"; + } + + private String testDataSetsToString() { + return Arrays.stream(testDataSets). + map(TestDataSet::toString). + collect(joining("\n")); + } + + private String esHostUrlToString() { + if (!dbConnectionUrl.isEmpty()) { + return dbConnectionUrl; + } + return esHostUrl.isEmpty() ? "(Use internal Elasticsearch in workspace)" : esHostUrl; + } + + private String otherDbConnectionInfoToString() { + return otherDbConnectionNameAndUrls.entrySet().stream(). + map(e -> StringUtils.format(" %s = %s", e.getKey(), e.getValue())). + collect(joining("\n")); + } + +} diff --git a/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/report/ErrorTestCase.java b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/report/ErrorTestCase.java new file mode 100644 index 0000000000..2aaf593548 --- /dev/null +++ b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/report/ErrorTestCase.java @@ -0,0 +1,40 @@ +/* + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.opendistroforelasticsearch.sql.correctness.report; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.ToString; + +import static com.amazon.opendistroforelasticsearch.sql.correctness.report.TestCaseReport.TestResult.FAILURE; + +/** + * Report for test case that ends with an error. + */ +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Getter +public class ErrorTestCase extends TestCaseReport { + + /** Root cause of the error */ + private final String reason; + + public ErrorTestCase(int id, String sql, String reason) { + super(id, sql, FAILURE); + this.reason = reason; + } + +} diff --git a/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/report/FailedTestCase.java b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/report/FailedTestCase.java new file mode 100644 index 0000000000..93a6dbaec2 --- /dev/null +++ b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/report/FailedTestCase.java @@ -0,0 +1,45 @@ +/* + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.opendistroforelasticsearch.sql.correctness.report; + +import com.amazon.opendistroforelasticsearch.sql.correctness.runner.resultset.DBResult; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.ToString; + +import java.util.Comparator; +import java.util.List; + +import static com.amazon.opendistroforelasticsearch.sql.correctness.report.TestCaseReport.TestResult.FAILURE; + +/** + * Report for test case that fails due to inconsistent result set. + */ +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Getter +public class FailedTestCase extends TestCaseReport { + + /** Inconsistent result sets for reporting */ + private final List<DBResult> resultSets; + + public FailedTestCase(int id, String sql, List<DBResult> resultSets) { + super(id, sql, FAILURE); + this.resultSets = resultSets; + this.resultSets.sort(Comparator.comparing(DBResult::getDatabaseName)); + } + +} diff --git a/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/report/SuccessTestCase.java b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/report/SuccessTestCase.java new file mode 100644 index 0000000000..7653c22eb0 --- /dev/null +++ b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/report/SuccessTestCase.java @@ -0,0 +1,35 @@ +/* + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.opendistroforelasticsearch.sql.correctness.report; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.ToString; + +import static com.amazon.opendistroforelasticsearch.sql.correctness.report.TestCaseReport.TestResult.SUCCESS; + +/** + * Report for successful test case result. + */ +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Getter +public class SuccessTestCase extends TestCaseReport { + + public SuccessTestCase(int id, String sql) { + super(id, sql, SUCCESS); + } +} diff --git a/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/report/TestCaseReport.java b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/report/TestCaseReport.java new file mode 100644 index 0000000000..42406adaa3 --- /dev/null +++ b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/report/TestCaseReport.java @@ -0,0 +1,53 @@ +/* + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.opendistroforelasticsearch.sql.correctness.report; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.ToString; + +import static com.amazon.opendistroforelasticsearch.sql.correctness.report.TestCaseReport.TestResult.SUCCESS; + +/** + * Base class for different test result. + */ +@EqualsAndHashCode +@ToString +public abstract class TestCaseReport { + + public enum TestResult { + SUCCESS, FAILURE; + } + + @Getter + private final int id; + + @Getter + private final String sql; + + private final TestResult result; + + public TestCaseReport(int id, String sql, TestResult result) { + this.id = id; + this.sql = sql; + this.result = result; + } + + public String getResult() { + return result == SUCCESS ? "Success" : "Failed"; + } + +} diff --git a/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/report/TestReport.java b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/report/TestReport.java new file mode 100644 index 0000000000..8ef1c4264f --- /dev/null +++ b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/report/TestReport.java @@ -0,0 +1,50 @@ +/* + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.opendistroforelasticsearch.sql.correctness.report; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.ToString; + +import java.util.ArrayList; +import java.util.List; + +/** + * Test report class to generate JSON report. + */ +@EqualsAndHashCode +@ToString +@Getter +public class TestReport { + + private final TestSummary summary = new TestSummary(); + + private final List<TestCaseReport> tests = new ArrayList<>(); + + /** + * Add a test case report to the whole report. + * @param testCase report for a single test case + */ + public void addTestCase(TestCaseReport testCase) { + tests.add(testCase); + if ("Success".equals(testCase.getResult())) { + summary.addSuccess(); + } else { + summary.addFailure(); + } + } + +} diff --git a/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/report/TestSummary.java b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/report/TestSummary.java new file mode 100644 index 0000000000..4da3c832e7 --- /dev/null +++ b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/report/TestSummary.java @@ -0,0 +1,46 @@ +/* + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.opendistroforelasticsearch.sql.correctness.report; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.ToString; + +/** + * Test summary section. + */ +@EqualsAndHashCode +@ToString +@Getter +public class TestSummary { + + private int total; + + private int success; + + private int failure; + + public void addSuccess() { + success++; + total++; + } + + public void addFailure() { + failure++; + total++; + } + +} diff --git a/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/runner/ComparisonTest.java b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/runner/ComparisonTest.java new file mode 100644 index 0000000000..49e583d57d --- /dev/null +++ b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/runner/ComparisonTest.java @@ -0,0 +1,168 @@ +/* + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.opendistroforelasticsearch.sql.correctness.runner; + +import com.amazon.opendistroforelasticsearch.sql.correctness.report.ErrorTestCase; +import com.amazon.opendistroforelasticsearch.sql.correctness.report.FailedTestCase; +import com.amazon.opendistroforelasticsearch.sql.correctness.report.SuccessTestCase; +import com.amazon.opendistroforelasticsearch.sql.correctness.report.TestCaseReport; +import com.amazon.opendistroforelasticsearch.sql.correctness.report.TestReport; +import com.amazon.opendistroforelasticsearch.sql.correctness.runner.connection.DBConnection; +import com.amazon.opendistroforelasticsearch.sql.correctness.runner.resultset.DBResult; +import com.amazon.opendistroforelasticsearch.sql.correctness.testset.TestDataSet; +import com.amazon.opendistroforelasticsearch.sql.correctness.testset.TestQuerySet; +import com.amazon.opendistroforelasticsearch.sql.utils.StringUtils; +import com.google.common.collect.Iterators; + +import java.util.Arrays; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; + +import static com.google.common.collect.ObjectArrays.concat; + +/** + * Comparison test runner for query result correctness. + */ +public class ComparisonTest implements AutoCloseable { + + /** Next id for test case */ + private int testCaseId = 1; + + /** Connection for database being tested */ + private final DBConnection thisConnection; + + /** Database connections for reference databases */ + private final DBConnection[] otherDbConnections; + + public ComparisonTest(DBConnection thisConnection, DBConnection[] otherDbConnections) { + this.thisConnection = thisConnection; + this.otherDbConnections = otherDbConnections; + + // Guarantee ordering of other database in comparison test + Arrays.sort(this.otherDbConnections, Comparator.comparing(DBConnection::getDatabaseName)); + } + + /** + * Open database connection. + */ + public void connect() { + for (DBConnection conn : concat(thisConnection, otherDbConnections)) { + conn.connect(); + } + } + + /** + * Create table and load test data. + * @param dataSet test data set + */ + public void loadData(TestDataSet dataSet) { + for (DBConnection conn : concat(thisConnection, otherDbConnections)) { + conn.create(dataSet.getTableName(), dataSet.getSchema()); + insertTestDataInBatch(conn, dataSet.getTableName(), dataSet.getDataRows()); + } + } + + /** + * Verify queries one by one by comparing between databases. + * @param querySet SQL queries + * @return Test result report + */ + public TestReport verify(TestQuerySet querySet) { + TestReport report = new TestReport(); + for (String sql : querySet) { + try { + DBResult esResult = thisConnection.select(sql); + report.addTestCase(compareWithOtherDb(sql, esResult)); + } catch (Exception e) { + report.addTestCase(new ErrorTestCase(nextId(), sql, + StringUtils.format("%s: %s", e.getClass().getSimpleName(), extractRootCause(e)))); + } + } + return report; + } + + /** + * Clean up test table. + * @param dataSet test data set + */ + public void cleanUp(TestDataSet dataSet) { + for (DBConnection conn : concat(thisConnection, otherDbConnections)) { + conn.drop(dataSet.getTableName()); + } + } + + @Override + public void close() { + for (DBConnection conn : concat(thisConnection, otherDbConnections)) { + try { + conn.close(); + } catch (Exception e) { + // Ignore + } + } + } + + /** Execute the query and compare with current result */ + private TestCaseReport compareWithOtherDb(String sql, DBResult esResult) { + StringBuilder reasons = new StringBuilder(); + for (int i = 0; i < otherDbConnections.length; i++) { + try { + DBResult otherDbResult = otherDbConnections[i].select(sql); + if (esResult.equals(otherDbResult)) { + return new SuccessTestCase(nextId(), sql); + } + + // Cannot find any database result match + if (i == otherDbConnections.length - 1) { + return new FailedTestCase(nextId(), sql, Arrays.asList(esResult, otherDbResult)); + } + } catch (Exception e) { + // Ignore and move on to next database + reasons.append(extractRootCause(e)).append(";"); + } + } + + // Cannot find any database support this query + return new ErrorTestCase(nextId(), sql, "No other databases support this query: " + reasons); + } + + private int nextId() { + return testCaseId++; + } + + private void insertTestDataInBatch(DBConnection conn, String tableName, List<String[]> testData) { + Iterator<String[]> iterator = testData.iterator(); + String[] fieldNames = iterator.next(); // first row is header of column names + Iterators.partition(iterator, 100). + forEachRemaining(batch -> conn.insert(tableName, fieldNames, batch)); + } + + private String extractRootCause(Throwable e) { + while (e.getCause() != null) { + e = e.getCause(); + } + + if (e.getLocalizedMessage() != null) { + return e.getLocalizedMessage(); + } + if (e.getMessage() != null) { + return e.getMessage(); + } + return e.toString(); + } + +} diff --git a/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/runner/connection/DBConnection.java b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/runner/connection/DBConnection.java new file mode 100644 index 0000000000..df2174d471 --- /dev/null +++ b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/runner/connection/DBConnection.java @@ -0,0 +1,70 @@ +/* + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.opendistroforelasticsearch.sql.correctness.runner.connection; + +import com.amazon.opendistroforelasticsearch.sql.correctness.runner.resultset.DBResult; + +import java.util.List; + +/** + * Abstraction for different databases. + */ +public interface DBConnection { + + /** + * @return database name + */ + String getDatabaseName(); + + /** + * Connect to database by opening a connection. + */ + void connect(); + + /** + * Create table with the schema. + * @param tableName table name + * @param schema schema json in ES mapping format + */ + void create(String tableName, String schema); + + /** + * Insert batch of data to database. + * @param tableName table name + * @param columnNames column names + * @param batch batch of rows + */ + void insert(String tableName, String[] columnNames, List<String[]> batch); + + /** + * Fetch data from database. + * @param query SQL query + * @return result set + */ + DBResult select(String query); + + /** + * Drop table. + * @param tableName table name + */ + void drop(String tableName); + + /** + * Close the database connection. + */ + void close(); + +} diff --git a/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/runner/connection/ESConnection.java b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/runner/connection/ESConnection.java new file mode 100644 index 0000000000..17fe6afd8b --- /dev/null +++ b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/runner/connection/ESConnection.java @@ -0,0 +1,113 @@ +/* + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.opendistroforelasticsearch.sql.correctness.runner.connection; + +import com.amazon.opendistroforelasticsearch.sql.correctness.runner.resultset.DBResult; +import org.elasticsearch.client.Request; +import org.elasticsearch.client.Response; +import org.elasticsearch.client.RestClient; +import org.json.JSONObject; + +import java.io.IOException; +import java.util.List; + +/** + * Elasticsearch database connection for insertion. This class wraps JDBCConnection to delegate query method. + */ +public class ESConnection implements DBConnection { + + /** Connection via our Elasticsearch JDBC driver */ + private final DBConnection connection; + + /** Native Elasticsearch REST client for operation unsupported by driver such as CREATE/INSERT */ + private final RestClient client; + + public ESConnection(String connectionUrl, RestClient client) { + this.connection = new JDBCConnection("Elasticsearch", connectionUrl); + this.client = client; + } + + @Override + public String getDatabaseName() { + return "Elasticsearch"; + } + + @Override + public void connect() { + connection.connect(); + } + + @Override + public void create(String tableName, String schema) { + Request request = new Request("PUT", "/" + tableName); + request.setJsonEntity(schema); + performRequest(request); + } + + @Override + public void drop(String tableName) { + performRequest(new Request("DELETE", "/" + tableName)); + } + + @Override + public void insert(String tableName, String[] columnNames, List<String[]> batch) { + Request request = new Request("POST", "/" + tableName + "/_bulk"); + request.setJsonEntity(buildBulkBody(columnNames, batch)); + performRequest(request); + } + + @Override + public DBResult select(String query) { + return connection.select(query); + } + + @Override + public void close() { + connection.close(); + try { + client.close(); + } catch (IOException e) { + // Ignore + } + } + + private void performRequest(Request request) { + try { + Response response = client.performRequest(request); + int status = response.getStatusLine().getStatusCode(); + if (status != 200) { + throw new IllegalStateException("Failed to perform request. Error code: " + status); + } + } catch (IOException e) { + throw new IllegalStateException("Failed to perform request", e); + } + } + + private String buildBulkBody(String[] columnNames, List<String[]> batch) { + StringBuilder body = new StringBuilder(); + for (String[] fieldValues : batch) { + JSONObject json = new JSONObject(); + for (int i = 0; i < columnNames.length; i++) { + json.put(columnNames[i], fieldValues[i]); + } + + body.append("{\"index\":{}}\n"). + append(json).append("\n"); + } + return body.toString(); + } + +} diff --git a/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/runner/connection/JDBCConnection.java b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/runner/connection/JDBCConnection.java new file mode 100644 index 0000000000..96c14798c6 --- /dev/null +++ b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/runner/connection/JDBCConnection.java @@ -0,0 +1,175 @@ +/* + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.opendistroforelasticsearch.sql.correctness.runner.connection; + +import com.amazon.opendistroforelasticsearch.sql.correctness.runner.resultset.DBResult; +import com.amazon.opendistroforelasticsearch.sql.correctness.runner.resultset.Row; +import com.amazon.opendistroforelasticsearch.sql.utils.StringUtils; +import org.json.JSONObject; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Arrays; +import java.util.List; + +import static java.util.stream.Collectors.joining; + +/** + * Database connection by JDBC driver. + */ +public class JDBCConnection implements DBConnection { + + private static final String SINGLE_QUOTE = "'"; + private static final String DOUBLE_QUOTE = "''"; + + /** Database name for display */ + private final String databaseName; + + /** Database connection URL */ + private final String connectionUrl; + + /** Current live connection */ + private Connection connection; + + public JDBCConnection(String databaseName, String connectionUrl) { + this.databaseName = databaseName; + this.connectionUrl = connectionUrl; + } + + @Override + public void connect() { + try { + connection = DriverManager.getConnection(connectionUrl); + } catch (Exception e) { + throw new IllegalStateException("Failed to open connection", e); + } + } + + @Override + public String getDatabaseName() { + return databaseName; + } + + @Override + public void create(String tableName, String schema) { + try (Statement stmt = connection.createStatement()) { + String types = parseColumnNameAndTypesInSchemaJson(schema); + stmt.executeUpdate(StringUtils.format("CREATE TABLE %s(%s)", tableName, types)); + } catch (SQLException e) { + throw new IllegalStateException("Failed to create table [" + tableName + "]", e); + } + } + + @Override + public void drop(String tableName) { + try (Statement stmt = connection.createStatement()) { + stmt.executeUpdate("DROP TABLE " + tableName); + } catch (SQLException e) { + throw new IllegalStateException("Failed to drop table [" + tableName + "]", e); + } + } + + @Override + public void insert(String tableName, String[] columnNames, List<String[]> batch) { + try (Statement stmt = connection.createStatement()) { + String names = String.join(",", columnNames); + for (String[] fieldValues : batch) { + stmt.addBatch(StringUtils.format( + "INSERT INTO %s(%s) VALUES (%s)", tableName, names, getValueList(fieldValues))); + } + stmt.executeBatch(); + } catch (SQLException e) { + throw new IllegalStateException("Failed to execute update", e); + } + } + + @Override + public DBResult select(String query) { + try (Statement stmt = connection.createStatement()) { + ResultSet resultSet = stmt.executeQuery(query); + DBResult result = new DBResult(databaseName); + populateMetaData(resultSet, result); + populateData(resultSet, result); + return result; + } catch (SQLException e) { + throw new IllegalStateException("Failed to execute query [" + query + "]", e); + } + } + + @Override + public void close() { + try { + connection.close(); + } catch (SQLException e) { + // Ignore + } + } + + /** Parse out type in schema json and convert to field name and type pairs for CREATE TABLE statement. */ + private String parseColumnNameAndTypesInSchemaJson(String schema) { + JSONObject json = (JSONObject) new JSONObject(schema).query("/mappings/properties"); + return json.keySet().stream(). + map(colName -> colName + " " + mapToJDBCType(json.getJSONObject(colName).getString("type"))). + collect(joining(",")); + } + + private String getValueList(String[] fieldValues) { + return Arrays.stream(fieldValues). + map(val -> val.replace(SINGLE_QUOTE, DOUBLE_QUOTE)). + map(val -> SINGLE_QUOTE + val + SINGLE_QUOTE). + collect(joining(",")); + } + + private void populateMetaData(ResultSet resultSet, DBResult result) throws SQLException { + ResultSetMetaData metaData = resultSet.getMetaData(); + for (int i = 1; i <= metaData.getColumnCount(); i++) { + result.addColumn(metaData.getColumnName(i), metaData.getColumnTypeName(i)); + } + } + + private void populateData(ResultSet resultSet, DBResult result) throws SQLException { + while (resultSet.next()) { + Row row = new Row(); + for (int i = 1; i <= result.columnSize(); i++) { + row.add(resultSet.getObject(i)); + } + result.addRow(row); + } + } + + private String mapToJDBCType(String esType) { + switch (esType.toUpperCase()) { + case "KEYWORD": + case "TEXT": + return "VARCHAR"; + case "DATE": + return "TIMESTAMP"; + case "HALF_FLOAT": + return "FLOAT"; + default: + return esType; + } + } + + /** Setter for unit test mock */ + public void setConnection(Connection connection) { + this.connection = connection; + } +} diff --git a/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/runner/resultset/DBResult.java b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/runner/resultset/DBResult.java new file mode 100644 index 0000000000..a40f79e6a1 --- /dev/null +++ b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/runner/resultset/DBResult.java @@ -0,0 +1,88 @@ +/* + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.opendistroforelasticsearch.sql.correctness.runner.resultset; + +import com.amazon.opendistroforelasticsearch.sql.utils.StringUtils; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.json.JSONPropertyName; + +import java.util.Collection; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * Query result for equality comparison. Based on different type of query, such as query with/without ORDER BY and + * query with SELECT columns or just *, order of column and row may matter or not. So the internal data structure of this + * class is passed in from outside either list or set, hash map or linked hash map etc. + */ +@EqualsAndHashCode(exclude = "databaseName") +@ToString +public class DBResult { + + /** Database name for display */ + private final String databaseName; + + /** Column name and types from result set meta data */ + private final Map<String, String> colNameAndTypes; + + /** Data rows from result set */ + private final Collection<Row> dataRows; + + /** + * By default treat both columns and data rows in order. This makes sense for typical query + * with specific column names in SELECT but without ORDER BY. + */ + public DBResult(String databaseName) { + this(databaseName, new LinkedHashMap<>(), new HashSet<>()); + } + + public DBResult(String databaseName, Map<String, String> colNameAndTypes, Collection<Row> rows) { + this.databaseName = databaseName; + this.colNameAndTypes = colNameAndTypes; + this.dataRows = rows; + } + + public int columnSize() { + return colNameAndTypes.size(); + } + + public void addColumn(String name, String type) { + colNameAndTypes.put(StringUtils.toUpper(name), StringUtils.toUpper(type)); + } + + public void addRow(Row row) { + dataRows.add(row); + } + + @JSONPropertyName("database") + public String getDatabaseName() { + return databaseName; + } + + @JSONPropertyName("schema") + public Map<String, String> getColumnNameAndTypes() { + return colNameAndTypes; + } + + /** Flatten for simplifying json generated */ + public Collection<Collection<Object>> getDataRows() { + return dataRows.stream().map(Row::getValues).collect(Collectors.toSet()); + } + +} diff --git a/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/runner/resultset/Row.java b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/runner/resultset/Row.java new file mode 100644 index 0000000000..a1cf33d728 --- /dev/null +++ b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/runner/resultset/Row.java @@ -0,0 +1,60 @@ +/* + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.opendistroforelasticsearch.sql.correctness.runner.resultset; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.ToString; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.Collection; + +/** + * Row in result set. + */ +@EqualsAndHashCode +@ToString +@Getter +public class Row { + + private final Collection<Object> values; + + public Row() { + this(new ArrayList<>()); // values in order by default + } + + public Row(Collection<Object> values) { + this.values = values; + } + + public void add(Object value) { + values.add(roundFloatNum(value)); + } + + private Object roundFloatNum(Object value) { + if (value instanceof Float) { + BigDecimal decimal = BigDecimal.valueOf((Float) value).setScale(2, RoundingMode.CEILING); + value = decimal.floatValue(); + } else if (value instanceof Double) { + BigDecimal decimal = BigDecimal.valueOf((Double) value).setScale(2, RoundingMode.CEILING); + value = decimal.doubleValue(); + } + return value; + } + +} diff --git a/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/ComparisonTestTest.java b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/ComparisonTestTest.java new file mode 100644 index 0000000000..ee0b202e65 --- /dev/null +++ b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/ComparisonTestTest.java @@ -0,0 +1,182 @@ +/* + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.opendistroforelasticsearch.sql.correctness.tests; + +import com.amazon.opendistroforelasticsearch.sql.correctness.report.ErrorTestCase; +import com.amazon.opendistroforelasticsearch.sql.correctness.report.FailedTestCase; +import com.amazon.opendistroforelasticsearch.sql.correctness.report.SuccessTestCase; +import com.amazon.opendistroforelasticsearch.sql.correctness.report.TestReport; +import com.amazon.opendistroforelasticsearch.sql.correctness.runner.ComparisonTest; +import com.amazon.opendistroforelasticsearch.sql.correctness.runner.connection.DBConnection; +import com.amazon.opendistroforelasticsearch.sql.correctness.runner.resultset.DBResult; +import com.amazon.opendistroforelasticsearch.sql.correctness.runner.resultset.Row; +import com.amazon.opendistroforelasticsearch.sql.correctness.testset.TestQuerySet; +import com.google.common.collect.ImmutableMap; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; + +import static java.util.Arrays.asList; +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +/** + * Tests for {@link ComparisonTest} + */ +@RunWith(MockitoJUnitRunner.class) +public class ComparisonTestTest { + + @Mock + private DBConnection esConnection; + + @Mock + private DBConnection otherDbConnection; + + private ComparisonTest correctnessTest; + + @Before + public void setUp() { + when(esConnection.getDatabaseName()).thenReturn("ES"); + when(otherDbConnection.getDatabaseName()).thenReturn("Other"); + correctnessTest = new ComparisonTest( + esConnection, new DBConnection[]{otherDbConnection} + ); + } + + @Test + public void testSuccess() { + when(esConnection.select(anyString())).thenReturn( + new DBResult("ES", ImmutableMap.of("firstname", "text"), asList(new Row(asList("John")))) + ); + when(otherDbConnection.select(anyString())).thenReturn( + new DBResult("Other DB", ImmutableMap.of("firstname", "text"), asList(new Row(asList("John")))) + ); + + TestReport expected = new TestReport(); + expected.addTestCase(new SuccessTestCase(1, "SELECT * FROM accounts")); + TestReport actual = correctnessTest.verify(querySet("SELECT * FROM accounts")); + assertEquals(expected, actual); + } + + @Test + public void testFailureDueToInconsistency() { + DBResult esResult = new DBResult("ES", ImmutableMap.of("firstname", "text"), asList(new Row(asList("John")))); + DBResult otherDbResult = new DBResult("Other DB", ImmutableMap.of("firstname", "text"), asList(new Row(asList("JOHN")))); + when(esConnection.select(anyString())).thenReturn(esResult); + when(otherDbConnection.select(anyString())).thenReturn(otherDbResult); + + TestReport expected = new TestReport(); + expected.addTestCase(new FailedTestCase(1, "SELECT * FROM accounts", asList(esResult, otherDbResult))); + TestReport actual = correctnessTest.verify(querySet("SELECT * FROM accounts")); + assertEquals(expected, actual); + } + + @Test + public void testSuccessFinally() { + DBConnection anotherDbConnection = mock(DBConnection.class); + when(anotherDbConnection.getDatabaseName()).thenReturn("Another"); + correctnessTest = new ComparisonTest( + esConnection, new DBConnection[]{otherDbConnection, anotherDbConnection} + ); + + DBResult esResult = new DBResult("ES", ImmutableMap.of("firstname", "text"), asList(new Row(asList("John")))); + DBResult otherDbResult = new DBResult("Other DB", ImmutableMap.of("firstname", "text"), asList(new Row(asList("JOHN")))); + DBResult anotherDbResult = new DBResult("Another DB", ImmutableMap.of("firstname", "text"), asList(new Row(asList("John")))); + when(esConnection.select(anyString())).thenReturn(esResult); + when(otherDbConnection.select(anyString())).thenReturn(otherDbResult); + when(anotherDbConnection.select(anyString())).thenReturn(anotherDbResult); + + TestReport expected = new TestReport(); + expected.addTestCase(new SuccessTestCase(1, "SELECT * FROM accounts")); + TestReport actual = correctnessTest.verify(querySet("SELECT * FROM accounts")); + assertEquals(expected, actual); + } + + @Test + public void testFailureDueToEventualInconsistency() { + DBConnection anotherDbConnection = mock(DBConnection.class); + when(anotherDbConnection.getDatabaseName()).thenReturn("ZZZ DB"); // Make sure this will be called after Other DB + correctnessTest = new ComparisonTest( + esConnection, new DBConnection[]{otherDbConnection, anotherDbConnection} + ); + + DBResult esResult = new DBResult("ES", ImmutableMap.of("firstname", "text"), asList(new Row(asList("John")))); + DBResult otherDbResult = new DBResult("Other DB", ImmutableMap.of("firstname", "text"), asList(new Row(asList("JOHN")))); + DBResult anotherDbResult = new DBResult("ZZZ DB", ImmutableMap.of("firstname", "text"), asList(new Row(asList("Hank")))); + when(esConnection.select(anyString())).thenReturn(esResult); + when(otherDbConnection.select(anyString())).thenReturn(otherDbResult); + when(anotherDbConnection.select(anyString())).thenReturn(anotherDbResult); + + TestReport expected = new TestReport(); + expected.addTestCase(new FailedTestCase(1, "SELECT * FROM accounts", asList(esResult, anotherDbResult))); + TestReport actual = correctnessTest.verify(querySet("SELECT * FROM accounts")); + assertEquals(expected, actual); + } + + @Test + public void testErrorDueToESException() { + when(esConnection.select(anyString())).thenThrow(new RuntimeException("All shards failure")); + + TestReport expected = new TestReport(); + expected.addTestCase(new ErrorTestCase(1, "SELECT * FROM accounts", "RuntimeException: All shards failure")); + TestReport actual = correctnessTest.verify(querySet("SELECT * FROM accounts")); + assertEquals(expected, actual); + } + + @Test + public void testErrorDueToNoOtherDBSupportThisQuery() { + when(esConnection.select(anyString())).thenReturn( + new DBResult("ES", ImmutableMap.of("firstname", "text"), asList(new Row(asList("John")))) + ); + when(otherDbConnection.select(anyString())).thenThrow(new RuntimeException("Unsupported feature")); + + TestReport expected = new TestReport(); + expected.addTestCase(new ErrorTestCase(1, "SELECT * FROM accounts", "No other databases support this query: Unsupported feature;")); + TestReport actual = correctnessTest.verify(querySet("SELECT * FROM accounts")); + assertEquals(expected, actual); + } + + @Test + public void testSuccessWhenOneDBSupportThisQuery() { + DBConnection anotherDbConnection = mock(DBConnection.class); + when(anotherDbConnection.getDatabaseName()).thenReturn("Another"); + correctnessTest = new ComparisonTest( + esConnection, new DBConnection[]{otherDbConnection, anotherDbConnection} + ); + + when(esConnection.select(anyString())).thenReturn( + new DBResult("ES", ImmutableMap.of("firstname", "text"), asList(new Row(asList("John")))) + ); + when(otherDbConnection.select(anyString())).thenThrow(new RuntimeException("Unsupported feature")); + when(anotherDbConnection.select(anyString())).thenReturn( + new DBResult("Another DB", ImmutableMap.of("firstname", "text"), asList(new Row(asList("John")))) + ); + + TestReport expected = new TestReport(); + expected.addTestCase(new SuccessTestCase(1, "SELECT * FROM accounts")); + TestReport actual = correctnessTest.verify(querySet("SELECT * FROM accounts")); + assertEquals(expected, actual); + } + + private TestQuerySet querySet(String query) { + return new TestQuerySet(new String[]{ query }); + } + +} diff --git a/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/DBResultTest.java b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/DBResultTest.java new file mode 100644 index 0000000000..d3c16b7a27 --- /dev/null +++ b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/DBResultTest.java @@ -0,0 +1,52 @@ +/* + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.opendistroforelasticsearch.sql.correctness.tests; + +import com.amazon.opendistroforelasticsearch.sql.correctness.runner.resultset.DBResult; +import com.google.common.collect.ImmutableMap; +import org.junit.Test; + +import static java.util.Collections.emptyList; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + +/** + * Unit tests for {@link DBResult} + */ +public class DBResultTest { + + @Test + public void dbResultFromDifferentDbNameShouldEqual() { + DBResult result1 = new DBResult("DB 1", ImmutableMap.of("name", "VARCHAR"), emptyList()); + DBResult result2 = new DBResult("DB 2", ImmutableMap.of("name", "VARCHAR"), emptyList()); + assertEquals(result1, result2); + } + + @Test + public void dbResultWithDifferentColumnShouldNotEqual() { + DBResult result1 = new DBResult("DB 1", ImmutableMap.of("name", "VARCHAR"), emptyList()); + DBResult result2 = new DBResult("DB 2", ImmutableMap.of("age", "INT"), emptyList()); + assertNotEquals(result1, result2); + } + + @Test + public void dbResultWithDifferentColumnTypeShouldNotEqual() { + DBResult result1 = new DBResult("DB 1", ImmutableMap.of("age", "FLOAT"), emptyList()); + DBResult result2 = new DBResult("DB 2", ImmutableMap.of("age", "INT"), emptyList()); + assertNotEquals(result1, result2); + } + +} diff --git a/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/ESConnectionTest.java b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/ESConnectionTest.java new file mode 100644 index 0000000000..aa4f10a6f9 --- /dev/null +++ b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/ESConnectionTest.java @@ -0,0 +1,109 @@ +/* + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.opendistroforelasticsearch.sql.correctness.tests; + +import com.amazon.opendistroforelasticsearch.sql.correctness.runner.connection.ESConnection; +import com.google.common.io.CharStreams; +import org.apache.http.ProtocolVersion; +import org.apache.http.message.BasicStatusLine; +import org.elasticsearch.client.Request; +import org.elasticsearch.client.Response; +import org.elasticsearch.client.RestClient; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.Arrays; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +/** + * Tests for {@link ESConnection} + */ +@RunWith(MockitoJUnitRunner.class) +public class ESConnectionTest { + + @Mock + private RestClient client; + + private ESConnection conn; + + @Before + public void setUp() throws IOException { + conn = new ESConnection("jdbc:elasticsearch://localhost:12345", client); + + Response response = mock(Response.class); + when(client.performRequest(any(Request.class))).thenReturn(response); + when(response.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 2, 0), 200, "")); + } + + @Test + public void testCreateTable() throws IOException { + conn.create("test", "mapping"); + + Request actual = captureActualArg(); + assertEquals("PUT", actual.getMethod()); + assertEquals("/test", actual.getEndpoint()); + assertEquals("mapping", getBody(actual)); + } + + @Test + public void testInsertData() throws IOException { + conn.insert("test", new String[]{"name"}, Arrays.asList(new String[]{"John"}, new String[]{"Hank"})); + + Request actual = captureActualArg(); + assertEquals("POST", actual.getMethod()); + assertEquals("/test/_bulk", actual.getEndpoint()); + assertEquals( + "{\"index\":{}}\n" + + "{\"name\":\"John\"}\n" + + "{\"index\":{}}\n" + + "{\"name\":\"Hank\"}\n", + getBody(actual) + ); + } + + @Test + public void testDropTable() throws IOException { + conn.drop("test"); + + Request actual = captureActualArg(); + assertEquals("DELETE", actual.getMethod()); + assertEquals("/test", actual.getEndpoint()); + } + + private Request captureActualArg() throws IOException { + ArgumentCaptor<Request> argCap = ArgumentCaptor.forClass(Request.class); + verify(client).performRequest(argCap.capture()); + return argCap.getValue(); + } + + private String getBody(Request request) throws IOException { + InputStream inputStream = request.getEntity().getContent(); + return CharStreams.toString(new InputStreamReader(inputStream)); + } + +} diff --git a/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/JDBCConnectionTest.java b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/JDBCConnectionTest.java new file mode 100644 index 0000000000..b039bd94a1 --- /dev/null +++ b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/JDBCConnectionTest.java @@ -0,0 +1,187 @@ +/* + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.opendistroforelasticsearch.sql.correctness.tests; + +import com.amazon.opendistroforelasticsearch.sql.correctness.runner.connection.JDBCConnection; +import com.amazon.opendistroforelasticsearch.sql.correctness.runner.resultset.DBResult; +import com.amazon.opendistroforelasticsearch.sql.correctness.runner.resultset.Row; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Sets; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.stubbing.OngoingStubbing; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +/** + * Tests for {@link JDBCConnection} + */ +@RunWith(MockitoJUnitRunner.class) +public class JDBCConnectionTest { + + @Mock + private Connection connection; + + @Mock + private Statement statement; + + private JDBCConnection conn; + + @Before + public void setUp() throws SQLException { + conn = new JDBCConnection("Test DB", "jdbc:testdb://localhost:12345"); + conn.setConnection(connection); + + when(connection.createStatement()).thenReturn(statement); + } + + @Test + public void testCreateTable() throws SQLException { + conn.create("test", "{\"mappings\":{\"properties\":{\"name\":{\"type\":\"keyword\"},\"age\":{\"type\":\"INT\"}}}}"); + + ArgumentCaptor<String> argCap = ArgumentCaptor.forClass(String.class); + verify(statement).executeUpdate(argCap.capture()); + String actual = argCap.getValue(); + + assertEquals("CREATE TABLE test(name VARCHAR,age INT)", actual); + } + + @Test + public void testDropTable() throws SQLException { + conn.drop("test"); + + ArgumentCaptor<String> argCap = ArgumentCaptor.forClass(String.class); + verify(statement).executeUpdate(argCap.capture()); + String actual = argCap.getValue(); + + assertEquals("DROP TABLE test", actual); + } + + @Test + public void testInsertData() throws SQLException { + conn.insert("test", new String[]{"name", "age"}, + Arrays.asList(new String[]{"John", "25"}, new String[]{"Hank", "30"})); + + ArgumentCaptor<String> argCap = ArgumentCaptor.forClass(String.class); + verify(statement, times(2)).addBatch(argCap.capture()); + List<String> actual = argCap.getAllValues(); + + assertEquals( + Arrays.asList( + "INSERT INTO test(name,age) VALUES ('John','25')", + "INSERT INTO test(name,age) VALUES ('Hank','30')" + ), actual + ); + } + + @Test + public void testSelectQuery() throws SQLException { + ResultSetMetaData metaData = mockMetaData(ImmutableMap.of("name", "VARCHAR", "age", "INT")); + ResultSet resultSet = mockResultSet(new Object[]{"John", 25}, new Object[]{"Hank", 30}); + when(statement.executeQuery(anyString())).thenReturn(resultSet); + when(resultSet.getMetaData()).thenReturn(metaData); + + DBResult result = conn.select("SELECT * FROM test"); + assertEquals("Test DB", result.getDatabaseName()); + assertEquals( + ImmutableMap.of("NAME", "VARCHAR", "AGE", "INT"), + result.getColumnNameAndTypes() + ); + assertEquals( + Sets.newHashSet( + Arrays.asList("John", 25), + Arrays.asList("Hank", 30) + ), + result.getDataRows() + ); + } + + @Test + public void testSelectQueryWithFloatInResultSet() throws SQLException { + ResultSetMetaData metaData = mockMetaData(ImmutableMap.of("name", "VARCHAR", "balance", "FLOAT")); + ResultSet resultSet = mockResultSet( + new Object[]{"John", 25.123}, + new Object[]{"Hank", 30.456}, + new Object[]{"Allen", 15.1} + ); + when(statement.executeQuery(anyString())).thenReturn(resultSet); + when(resultSet.getMetaData()).thenReturn(metaData); + + DBResult result = conn.select("SELECT * FROM test"); + assertEquals( + Sets.newHashSet( + Arrays.asList("John", 25.13), + Arrays.asList("Hank", 30.46), + Arrays.asList("Allen", 15.1) + ), + result.getDataRows() + ); + } + + private ResultSet mockResultSet(Object[]... rows) throws SQLException { + ResultSet resultSet = mock(ResultSet.class); + OngoingStubbing<Boolean> next = when(resultSet.next()); + for (int i = 0; i < rows.length; i++) { + next = next.thenReturn(true); + } + next.thenReturn(false); + + OngoingStubbing<Object> getObject = when(resultSet.getObject(anyInt())); + for (Object[] row : rows) { + for (Object val : row) { + getObject = getObject.thenReturn(val); + } + } + return resultSet; + } + + private ResultSetMetaData mockMetaData(Map<String, String> nameAndTypes) throws SQLException { + ResultSetMetaData metaData = mock(ResultSetMetaData.class); + + OngoingStubbing<String> getColumnName = when(metaData.getColumnName(anyInt())); + for (String name : nameAndTypes.keySet()) { + getColumnName = getColumnName.thenReturn(name); + } + + OngoingStubbing<String> getColumnTypeName = when(metaData.getColumnTypeName(anyInt())); + for (String value : nameAndTypes.values()) { + getColumnTypeName = getColumnTypeName.thenReturn(value); + } + + when(metaData.getColumnCount()).thenReturn(nameAndTypes.size()); + return metaData; + } + +} diff --git a/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/RowTest.java b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/RowTest.java new file mode 100644 index 0000000000..5992c975f1 --- /dev/null +++ b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/RowTest.java @@ -0,0 +1,49 @@ +/* + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.opendistroforelasticsearch.sql.correctness.tests; + +import com.amazon.opendistroforelasticsearch.sql.correctness.runner.resultset.Row; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + +/** + * Unit test {@link Row} + */ +public class RowTest { + + @Test + public void rowShouldEqualToOtherRowWithSimilarFloat() { + Row row1 = new Row(); + Row row2 = new Row(); + row1.add(1.000001); + row2.add(1.000002); + assertEquals(row1, row2); + assertEquals(row2, row1); + } + + @Test + public void rowShouldNotEqualToOtherRowWithDifferentString() { + Row row1 = new Row(); + Row row2 = new Row(); + row1.add("hello"); + row2.add("hello1"); + assertNotEquals(row1, row2); + assertNotEquals(row2, row1); + } + +} diff --git a/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/TestConfigTest.java b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/TestConfigTest.java new file mode 100644 index 0000000000..a66719e4eb --- /dev/null +++ b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/TestConfigTest.java @@ -0,0 +1,72 @@ +/* + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.opendistroforelasticsearch.sql.correctness.tests; + +import com.amazon.opendistroforelasticsearch.sql.correctness.TestConfig; +import com.google.common.collect.ImmutableMap; +import org.junit.Test; + +import java.util.Map; + +import static java.util.Collections.emptyMap; +import static org.hamcrest.Matchers.allOf; +import static org.hamcrest.Matchers.emptyString; +import static org.hamcrest.Matchers.hasEntry; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; + +/** + * Tests for {@link TestConfig} + */ +public class TestConfigTest { + + @Test + public void testDefaultConfig() { + TestConfig config = new TestConfig(emptyMap()); + assertThat(config.getESHostUrl(), is(emptyString())); + assertThat( + config.getOtherDbConnectionNameAndUrls(), + allOf( + hasEntry("H2", "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"), + hasEntry("SQLite", "jdbc:sqlite::memory:") + ) + ); + } + + @Test + public void testCustomESUrls() { + Map<String, String> args = ImmutableMap.of("esHost", "localhost:9200"); + TestConfig config = new TestConfig(args); + assertThat(config.getESHostUrl(), is("localhost:9200")); + } + + @Test + public void testCustomDbUrls() { + Map<String, String> args = ImmutableMap.of("otherDbUrls", + "H2=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1," + + "Derby=jdbc:derby:memory:myDb;create=true"); + + TestConfig config = new TestConfig(args); + assertThat( + config.getOtherDbConnectionNameAndUrls(), + allOf( + hasEntry("H2", "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"), + hasEntry("Derby", "jdbc:derby:memory:myDb;create=true") + ) + ); + } + +} diff --git a/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/TestDataSetTest.java b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/TestDataSetTest.java new file mode 100644 index 0000000000..e67ba4e8c4 --- /dev/null +++ b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/TestDataSetTest.java @@ -0,0 +1,70 @@ +/* + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.opendistroforelasticsearch.sql.correctness.tests; + +import com.amazon.opendistroforelasticsearch.sql.correctness.testset.TestDataSet; +import org.junit.Test; + +import static org.hamcrest.Matchers.contains; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; + +/** + * Tests for {@link TestDataSet} + */ +public class TestDataSetTest { + + @Test + public void testDataSetWithSingleColumnData() { + TestDataSet dataSet = new TestDataSet("test", "mappings", "hello\nworld\n123"); + assertEquals("test", dataSet.getTableName()); + assertEquals("mappings", dataSet.getSchema()); + assertThat( + dataSet.getDataRows(), + contains( + new String[]{"hello"}, + new String[]{"world"}, + new String[]{"123"} + ) + ); + } + + @Test + public void testDataSetWithMultiColumnsData() { + TestDataSet dataSet = new TestDataSet("test", "mappings", "hello,world\n123"); + assertThat( + dataSet.getDataRows(), + contains( + new String[]{"hello", "world"}, + new String[]{"123"} + ) + ); + } + + @Test + public void testDataSetWithEscapedComma() { + TestDataSet dataSet = new TestDataSet("test", "mappings", "hello,\"hello,world,123\"\n123\n\"[abc,def,ghi]\",456"); + assertThat( + dataSet.getDataRows(), + contains( + new String[]{"hello", "hello,world,123"}, + new String[]{"123"}, + new String[]{"[abc,def,ghi]", "456"} + ) + ); + } + +} diff --git a/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/TestQuerySetTest.java b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/TestQuerySetTest.java new file mode 100644 index 0000000000..61b33d2927 --- /dev/null +++ b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/TestQuerySetTest.java @@ -0,0 +1,41 @@ +/* + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.opendistroforelasticsearch.sql.correctness.tests; + +import com.amazon.opendistroforelasticsearch.sql.correctness.testset.TestQuerySet; +import org.junit.Test; + +import static org.hamcrest.Matchers.contains; +import static org.junit.Assert.assertThat; + +/** + * Tests for {@link TestQuerySet} + */ +public class TestQuerySetTest { + + @Test + public void testQuerySet() { + TestQuerySet querySet = new TestQuerySet("SELECT * FROM accounts\nSELECT * FROM accounts LIMIT 5"); + assertThat( + querySet, + contains( + "SELECT * FROM accounts", + "SELECT * FROM accounts LIMIT 5" + ) + ); + } + +} diff --git a/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/TestReportTest.java b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/TestReportTest.java new file mode 100644 index 0000000000..4bf917e25b --- /dev/null +++ b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/TestReportTest.java @@ -0,0 +1,137 @@ +/* + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.opendistroforelasticsearch.sql.correctness.tests; + +import com.amazon.opendistroforelasticsearch.sql.correctness.report.ErrorTestCase; +import com.amazon.opendistroforelasticsearch.sql.correctness.report.FailedTestCase; +import com.amazon.opendistroforelasticsearch.sql.correctness.report.SuccessTestCase; +import com.amazon.opendistroforelasticsearch.sql.correctness.report.TestReport; +import com.amazon.opendistroforelasticsearch.sql.correctness.runner.resultset.DBResult; +import com.amazon.opendistroforelasticsearch.sql.correctness.runner.resultset.Row; +import com.google.common.collect.ImmutableMap; +import org.json.JSONObject; +import org.junit.Test; + +import static java.util.Arrays.asList; +import static java.util.Collections.singleton; +import static org.junit.Assert.fail; + +/** + * Test for {@link TestReport} + */ +public class TestReportTest { + + private TestReport report = new TestReport(); + + @Test + public void testSuccessReport() { + report.addTestCase(new SuccessTestCase(1, "SELECT * FROM accounts")); + JSONObject actual = new JSONObject(report); + JSONObject expected = new JSONObject( + "{" + + " \"summary\": {" + + " \"total\": 1," + + " \"success\": 1," + + " \"failure\": 0" + + " }," + + " \"tests\": [" + + " {" + + " \"id\": 1," + + " \"result\": 'Success'," + + " \"sql\": \"SELECT * FROM accounts\"," + + " }" + + " ]" + + "}" + ); + + if (!actual.similar(expected)) { + fail("Actual JSON is different from expected: " + actual.toString(2)); + } + } + + @Test + public void testFailedReport() { + report.addTestCase(new FailedTestCase(1, "SELECT * FROM accounts", asList( + new DBResult("Elasticsearch", ImmutableMap.of("firstName", "text"), singleton(new Row(asList("hello")))), + new DBResult("H2", ImmutableMap.of("firstName", "text"), singleton(new Row(asList("world")))) + ))); + JSONObject actual = new JSONObject(report); + JSONObject expected = new JSONObject( + "{" + + " \"summary\": {" + + " \"total\": 1," + + " \"success\": 0," + + " \"failure\": 1" + + " }," + + " \"tests\": [" + + " {" + + " \"id\": 1," + + " \"result\": 'Failed'," + + " \"sql\": \"SELECT * FROM accounts\"," + + " \"resultSets\": [" + + " {" + + " \"database\": \"Elasticsearch\"," + + " \"schema\": {" + + " \"firstName\": \"text\"" + + " }," + + " \"dataRows\": [[\"hello\"]]" + + " }," + + " {" + + " \"database\": \"H2\"," + + " \"schema\": {" + + " \"firstName\": \"text\"" + + " }," + + " \"dataRows\": [[\"world\"]]" + + " }" + + " ]" + + " }" + + " ]" + + "}" + ); + + if (!actual.similar(expected)) { + fail("Actual JSON is different from expected: " + actual.toString(2)); + } + } + + @Test + public void testErrorReport() { + report.addTestCase(new ErrorTestCase(1, "SELECT * FROM", "Missing table name in query")); + JSONObject actual = new JSONObject(report); + JSONObject expected = new JSONObject( + "{" + + " \"summary\": {" + + " \"total\": 1," + + " \"success\": 0," + + " \"failure\": 1" + + " }," + + " \"tests\": [" + + " {" + + " \"id\": 1," + + " \"result\": 'Failed'," + + " \"sql\": \"SELECT * FROM\"," + + " \"reason\": \"Missing table name in query\"," + + " }" + + " ]" + + "}" + ); + + if (!actual.similar(expected)) { + fail("Actual JSON is different from expected: " + actual.toString(2)); + } + } + +} diff --git a/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/UnitTests.java b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/UnitTests.java new file mode 100644 index 0000000000..dc766150b5 --- /dev/null +++ b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/tests/UnitTests.java @@ -0,0 +1,34 @@ +/* + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.opendistroforelasticsearch.sql.correctness.tests; + +import org.junit.runner.RunWith; +import org.junit.runners.Suite; + +@RunWith(Suite.class) +@Suite.SuiteClasses({ + ComparisonTestTest.class, + TestConfigTest.class, + TestDataSetTest.class, + TestQuerySetTest.class, + TestReportTest.class, + ESConnectionTest.class, + JDBCConnectionTest.class, + DBResultTest.class, + RowTest.class, +}) +public class UnitTests { +} diff --git a/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/testset/TestDataSet.java b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/testset/TestDataSet.java new file mode 100644 index 0000000000..1294afe3c7 --- /dev/null +++ b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/testset/TestDataSet.java @@ -0,0 +1,96 @@ +/* + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.opendistroforelasticsearch.sql.correctness.testset; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static com.amazon.opendistroforelasticsearch.sql.utils.StringUtils.unquoteSingleField; +import static java.util.stream.Collectors.joining; + +/** + * Test data set + */ +public class TestDataSet { + + private final String tableName; + private final String schema; + private final List<String[]> dataRows; + + public TestDataSet(String tableName, String schemaFileContent, String dataFileContent) { + this.tableName = tableName; + this.schema = schemaFileContent; + this.dataRows = splitColumns(dataFileContent, ','); + } + + public String getTableName() { + return tableName; + } + + public String getSchema() { + return schema; + } + + public List<String[]> getDataRows() { + return dataRows; + } + + /** Split columns in each line by separator and ignore escaped separator(s) in quoted string. */ + private List<String[]> splitColumns(String content, char separator) { + List<String[]> result = new ArrayList<>(); + for (String line : content.split("\\r?\\n")) { + + List<String> columns = new ArrayList<>(); + boolean isQuoted = false; + int start = 0; + for (int i = 0; i < line.length(); i++) { + + char c = line.charAt(i); + if (c == separator) { + if (isQuoted) { // Ignore comma(s) in quoted string + continue; + } + + String column = line.substring(start, i); + columns.add(unquoteSingleField(column, "\"")); + start = i + 1; + + } else if (c == '\"') { + isQuoted = !isQuoted; + } + } + + columns.add(unquoteSingleField(line.substring(start), "\"")); + result.add(columns.toArray(new String[0])); + } + return result; + } + + @Override + public String toString() { + int total = dataRows.size(); + return "Test data set :\n" + + " Table name: " + tableName + '\n' + + " Schema: " + schema + '\n' + + " Data rows (first 5 in " + total + "):" + + dataRows.stream(). + limit(5). + map(Arrays::toString). + collect(joining("\n ", "\n ", "\n")); + } + +} diff --git a/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/testset/TestQuerySet.java b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/testset/TestQuerySet.java new file mode 100644 index 0000000000..dbad112b2f --- /dev/null +++ b/src/test/java/com/amazon/opendistroforelasticsearch/sql/correctness/testset/TestQuerySet.java @@ -0,0 +1,65 @@ +/* + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.opendistroforelasticsearch.sql.correctness.testset; + +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; + +import static java.util.stream.Collectors.joining; + +/** + * Test query set including SQL queries for comparison testing. + */ +public class TestQuerySet implements Iterable<String> { + + private List<String> queries; + + /** + * Construct by a test query file. + * @param queryFileContent file content with query per line + */ + public TestQuerySet(String queryFileContent) { + queries = lines(queryFileContent); + } + + /** + * Construct by a test query array. + * @param queries query in array + */ + public TestQuerySet(String[] queries) { + this.queries = Arrays.asList(queries); + } + + @Override + public Iterator<String> iterator() { + return queries.iterator(); + } + + private List<String> lines(String content) { + return Arrays.asList(content.split("\\r?\\n")); + } + + @Override + public String toString() { + int total = queries.size(); + return "SQL queries (first 5 in " + total + "):" + + queries.stream(). + limit(5). + collect(joining("\n ", "\n ", "\n")); + } + +} diff --git a/src/test/resources/correctness/kibana_sample_data_ecommerce.csv b/src/test/resources/correctness/kibana_sample_data_ecommerce.csv new file mode 100644 index 0000000000..fbb0486a5d --- /dev/null +++ b/src/test/resources/correctness/kibana_sample_data_ecommerce.csv @@ -0,0 +1,21 @@ +customer_first_name,customer_phone,type,manufacturer,customer_full_name,order_date,customer_last_name,day_of_week_i,total_quantity,currency,taxless_total_price,total_unique_products,category,customer_id,sku,order_id,user,customer_gender,email,day_of_week,taxful_total_price +Irwin,,order,"[Elitelligence, Microlutions]",Irwin Mcdonald,2019-12-19T23:21:07+00:00,Mcdonald,3,2,EUR,26.98,2,[Men's Clothing],14,"[ZO0564605646, ZO0117401174]",551689,irwin,MALE,irwin@mcdonald-family.zzz,Thursday,26.98 +Wilhemina St.,,order,"[Spherecords Maternity, Oceanavigations]",Wilhemina St. Washington,2019-12-19T08:03:50+00:00,Washington,3,2,EUR,72.98,2,[Women's Clothing],17,"[ZO0705107051, ZO0270302703]",550817,wilhemina,FEMALE,wilhemina st.@washington-family.zzz,Thursday,72.98 +Kamal,,order,"[Elitelligence, Oceanavigations]",Kamal Foster,2019-12-19T08:47:02+00:00,Foster,3,2,EUR,45.98,2,[Men's Clothing],39,"[ZO0532905329, ZO0277802778]",550864,kamal,MALE,kamal@foster-family.zzz,Thursday,45.98 +Diane,,order,"[Tigress Enterprises, Low Tide Media]",Diane Turner,2019-12-22T13:45:07+00:00,Turner,6,2,EUR,107.94,2,"[Women's Clothing, Women's Shoes]",22,"[ZO0059900599, ZO0381103811]",555222,diane,FEMALE,diane@turner-family.zzz,Sunday,107.94 +Elyssa,,order,"[Pyramidustries, Low Tide Media]",Elyssa Willis,2019-12-22T15:00:00+00:00,Willis,6,2,EUR,84.98,2,[Women's Shoes],27,"[ZO0132901329, ZO0370903709]",555282,elyssa,FEMALE,elyssa@willis-family.zzz,Sunday,84.98 +Betty,,order,"[Spherecords, Angeldale]",Betty Simpson,2019-12-19T09:17:17+00:00,Simpson,3,2,EUR,78.98,2,"[Women's Clothing, Women's Shoes]",44,"[ZO0633506335, ZO0669306693]",550896,betty,FEMALE,betty@simpson-family.zzz,Thursday,78.98 +Abd,,order,"[Low Tide Media, Elitelligence]",Abd Benson,2019-12-20T10:27:50+00:00,Benson,4,2,EUR,61.98,2,"[Men's Shoes, Men's Clothing]",52,"[ZO0387703877, ZO0595705957]",552324,abd,MALE,abd@benson-family.zzz,Friday,61.98 +Abigail,,order,"[Low Tide Media, Champion Arts]",Abigail Thompson,2019-12-20T10:56:38+00:00,Thompson,4,2,EUR,84.98,2,"[Women's Shoes, Women's Clothing]",46,"[ZO0382403824, ZO0486904869]",552363,abigail,FEMALE,abigail@thompson-family.zzz,Friday,84.98 +Pia,,order,[Tigress Enterprises],Pia Banks,2019-12-20T03:07:12+00:00,Banks,4,2,EUR,41.98,2,"[Women's Shoes, Women's Clothing]",45,"[ZO0021800218, ZO0055100551]",551923,pia,FEMALE,pia@banks-family.zzz,Friday,41.98 +Samir,,order,"[Elitelligence, Low Tide Media]",Samir Baker,2019-12-20T04:10:34+00:00,Baker,4,2,EUR,74.98,2,[Men's Clothing],34,"[ZO0586805868, ZO0428604286]",551981,samir,MALE,samir@baker-family.zzz,Friday,74.98 +Oliver,,order,"[Angeldale, Elitelligence]",Oliver Hampton,2019-12-20T04:43:41+00:00,Hampton,4,2,EUR,105.98,2,"[Men's Shoes, Men's Clothing]",7,"[ZO0691806918, ZO0595805958]",552009,oliver,MALE,oliver@hampton-family.zzz,Friday,105.98 +Yasmine,,order,"[Oceanavigations, Pyramidustries]",Yasmine Lewis,2019-12-24T21:50:24+00:00,Lewis,1,2,EUR,46.98,2,[Women's Clothing],43,"[ZO0261802618, ZO0166001660]",558404,yasmine,FEMALE,yasmine@lewis-family.zzz,Tuesday,46.98 +Hicham,,order,"[Microlutions, Elitelligence]",Hicham Gregory,2019-12-26T23:08:10+00:00,Gregory,3,2,EUR,49.98,2,"[Men's Accessories, Men's Clothing]",8,"[ZO0126901269, ZO0533205332]",561156,hicham,MALE,hicham@gregory-family.zzz,Thursday,49.98 +Samir,,order,[Elitelligence],Samir Holland,2019-12-25T00:07:12+00:00,Holland,2,1,EUR,32.99,1,[Men's Clothing],34,[ZO0539205392],739226,samir,MALE,samir@holland-family.zzz,Wednesday,32.99 +Brigitte,,order,"[Tigress Enterprises, Low Tide Media]",Brigitte Sutton,2020-01-03T13:43:41+00:00,Sutton,4,2,EUR,79.98,2,[Women's Shoes],12,"[ZO0019300193, ZO0367503675]",571473,brigitte,FEMALE,brigitte@sutton-family.zzz,Friday,79.98 +Phil,,order,"[Low Tide Media, Angeldale]",Phil Rowe,2020-01-03T18:31:41+00:00,Rowe,4,2,EUR,95.98,2,"[Men's Clothing, Men's Shoes]",50,"[ZO0439004390, ZO0690706907]",571728,phil,MALE,phil@rowe-family.zzz,Friday,95.98 +Betty,,order,"[Tigress Enterprises, Spherecords]",Betty Reyes,2020-01-03T19:10:34+00:00,Reyes,4,2,EUR,53.98,2,"[Women's Shoes, Women's Clothing]",44,"[ZO0002200022, ZO0661506615]",571757,betty,FEMALE,betty@reyes-family.zzz,Friday,53.98 +Wilhemina St.,,order,"[Champion Arts, Tigress Enterprises]",Wilhemina St. Marshall,2020-01-03T17:29:46+00:00,Marshall,4,2,EUR,43.98,2,[Women's Clothing],17,"[ZO0505405054, ZO0081700817]",571672,wilhemina,FEMALE,wilhemina st.@marshall-family.zzz,Friday,43.98 +rania,,order,"[Pyramidustries, Gnomehouse]",rania Fletcher,2020-01-15T23:29:46+00:00,Fletcher,2,2,EUR,82.98,2,[Women's Clothing],24,"[ZO0174901749, ZO0352403524]",588090,rani,FEMALE,rania@fletcher-family.zzz,Wednesday,82.98 +Gwen,,order,"[Tigress Enterprises, Tigress Enterprises MAMA]",Gwen Marshall,2019-12-26T21:57:36+00:00,Marshall,3,2,EUR,43.98,2,[Women's Clothing],26,"[ZO0033900339, ZO0228102281]",561090,gwen,FEMALE,gwen@marshall-family.zzz,Thursday,43.98 diff --git a/src/test/resources/correctness/kibana_sample_data_ecommerce.json b/src/test/resources/correctness/kibana_sample_data_ecommerce.json new file mode 100644 index 0000000000..dad8d6a1ba --- /dev/null +++ b/src/test/resources/correctness/kibana_sample_data_ecommerce.json @@ -0,0 +1,100 @@ +{ + "mappings": { + "properties": { + "category": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword" + } + } + }, + "currency": { + "type": "keyword" + }, + "customer_birth_date": { + "type": "date" + }, + "customer_first_name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "customer_full_name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "customer_gender": { + "type": "keyword" + }, + "customer_id": { + "type": "keyword" + }, + "customer_last_name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "customer_phone": { + "type": "keyword" + }, + "day_of_week": { + "type": "keyword" + }, + "day_of_week_i": { + "type": "integer" + }, + "email": { + "type": "keyword" + }, + "manufacturer": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword" + } + } + }, + "order_date": { + "type": "date" + }, + "order_id": { + "type": "keyword" + }, + "sku": { + "type": "keyword" + }, + "taxful_total_price": { + "type": "half_float" + }, + "taxless_total_price": { + "type": "half_float" + }, + "total_quantity": { + "type": "integer" + }, + "total_unique_products": { + "type": "integer" + }, + "type": { + "type": "keyword" + }, + "user": { + "type": "keyword" + } + } + } +} \ No newline at end of file diff --git a/src/test/resources/correctness/kibana_sample_data_flights.csv b/src/test/resources/correctness/kibana_sample_data_flights.csv new file mode 100644 index 0000000000..b3ffb73e23 --- /dev/null +++ b/src/test/resources/correctness/kibana_sample_data_flights.csv @@ -0,0 +1,21 @@ +FlightNum,Origin,FlightDelay,DistanceMiles,FlightTimeMin,OriginWeather,dayOfWeek,AvgTicketPrice,Carrier,FlightDelayMin,OriginRegion,FlightDelayType,DestAirportID,Dest,FlightTimeHour,Cancelled,DistanceKilometers,OriginCityName,DestWeather,OriginCountry,DestCountry,DestRegion,OriginAirportID,DestCityName,timestamp +RGXY9H5,Chubu Centrair International Airport,false,1619.970725161303,124.1471507959044,Heavy Fog,0,626.1297405910661,Kibana Airlines,0,SE-BD,No Delay,CAN,Guangzhou Baiyun International Airport,2.06911917993174,true,2607.0901667139924,Tokoname,Clear,JP,CN,SE-BD,NGO,Guangzhou,2019-12-23T11:19:32 +WOPNZEP,Munich Airport,true,198.57903689856937,34.9738738474057,Sunny,0,681.9911763989377,Kibana Airlines,15,DE-BY,Carrier Delay,VE05,Venice Marco Polo Airport,0.5828978974567617,false,319.58198155849124,Munich,Cloudy,DE,IT,IT-34,MUC,Venice,2019-12-23T12:32:26 +G9J5O2V,Frankfurt am Main Airport,false,4857.154739888458,651.402736475921,Clear,0,868.0507463122127,Kibana Airlines,0,DE-HE,No Delay,XIY,Xi'an Xianyang International Airport,10.856712274598683,false,7816.832837711051,Frankfurt am Main,Thunder & Lightning,DE,CN,SE-BD,FRA,Xi'an,2019-12-23T03:48:33 +HM80A5V,Itami Airport,false,5862.6666599206,555.0027890084269,Heavy Fog,0,765.0413127727119,Logstash Airways,0,SE-BD,No Delay,TV01,Treviso-Sant'Angelo Airport,9.250046483473783,true,9435.047413143258,Osaka,Clear,JP,IT,IT-34,ITM,Treviso,2019-12-23T19:50:48 +84B0Y32,Charles de Gaulle International Airport,false,4397.926660603864,372.51457282541395,Thunder & Lightning,0,913.1638984616233,Kibana Airlines,0,FR-J,No Delay,STL,St Louis Lambert International Airport,6.208576213756899,false,7077.776883682865,Paris,Thunder & Lightning,FR,US,US-MO,CDG,St Louis,2019-12-23T11:30:48 +2AZWPJX,Rajiv Gandhi International Airport,true,0,180,Sunny,0,103.25307304704197,Logstash Airways,180,SE-BD,Security Delay,HYD,Rajiv Gandhi International Airport,3,false,0,Hyderabad,Hail,IN,IN,SE-BD,HYD,Hyderabad,2019-12-23T19:52:54 +SFLRI9O,Erie International Tom Ridge Field,false,6961.655654280931,622.4277087379495,Clear,0,775.1109173747694,Kibana Airlines,0,US-PA,No Delay,CJU,Jeju International Airport,10.373795145632492,false,11203.698757283091,Erie,Clear,US,KR,SE-BD,ERI,Jeju City,2019-12-23T07:32:32 +QDQMOD6,Brisbane International Airport,false,8013.330880747018,716.4558873858294,Thunder & Lightning,0,832.082612870741,ES-Air,0,SE-BD,No Delay,DEN,Denver International Airport,11.94093145643049,false,12896.20597294493,Brisbane,Cloudy,AU,US,US-CO,BNE,Denver,2019-12-23T10:59:26 +XTGFN9A,Jorge Chavez International Airport,false,3946.924514217792,396.99745533808243,Thunder & Lightning,0,348.23579123315324,Kibana Airlines,0,SE-BD,No Delay,YOW,Ottawa Macdonald-Cartier International Airport,6.616624255634707,false,6351.959285409319,Lima,Rain,PE,CA,CA-ON,LIM,Ottawa,2019-12-23T21:10:09 +USRQ3KK,Stockholm-Arlanda Airport,false,996.8381561540818,94.36797091633146,Clear,0,661.3465606549407,ES-Air,0,SE-AB,No Delay,TV01,Treviso-Sant'Angelo Airport,1.572799515272191,false,1604.2555055776347,Stockholm,Clear,SE,IT,IT-34,ARN,Treviso,2019-12-23T04:33:56 +PK46NHH,Milano Linate Airport,false,5261.396351845886,604.8140464617903,Rain,0,600.4401843290168,JetBeats,0,IT-25,No Delay,GEG,Spokane International Airport,10.080234107696505,false,8467.396650465065,Milan,Clear,IT,US,US-WA,MI11,Spokane,2019-12-23T20:35:25 +G80VHCJ,Bari Karol Wojty__a Airport,false,5630.111629019724,604.0524246328747,Sunny,0,738.260189539631,Logstash Airways,0,IT-75,No Delay,CJU,Jeju International Airport,10.067540410547911,false,9060.78636949312,Bari,Rain,IT,KR,SE-BD,BA02,Jeju City,2019-12-23T10:59:56 +PDS4U17,El Dorado International Airport,false,5591.079567130033,499.887241937962,Thunder & Lightning,0,437.9253204442997,ES-Air,0,SE-BD,No Delay,TO11,Turin Airport,8.331454032299368,false,8997.970354883317,Bogota,Hail,CO,IT,IT-21,BOG,Torino,2019-12-23T10:33:53 +2MXRGRK,Abu Dhabi International Airport,false,8160.7690090650885,656.6742320062424,Cloudy,0,825.9174161826418,JetBeats,0,SE-BD,No Delay,ABQ,Albuquerque International Sunport Airport,10.944570533437373,false,13133.484640124847,Abu Dhabi,Thunder & Lightning,AE,US,US-NM,AUH,Albuquerque,2019-12-23T19:27:11 +57CZEDA,London Heathrow Airport,true,4757.876231054233,720.4152685405732,Damaging Wind,0,836.1010286937247,ES-Air,270,GB-ENG,Carrier Delay,XHBU,Ukrainka Air Base,12.006921142342886,false,7657.059565189745,London,Sunny,GB,RU,RU-AMU,LHR,Belogorsk,2019-12-23T18:48:49 +5FYALP0,Malpensa International Airport,false,5812.230334559898,492.30936923905085,Damaging Wind,0,417.34744554513884,JetBeats,0,IT-25,No Delay,LAS,McCarran International Airport,8.20515615398418,false,9353.878015541966,Milan,Clear,IT,US,US-NV,MI12,Las Vegas,2019-12-23T10:37:54 +HVWAL6J,Comodoro Arturo Merino Benitez International Airport,false,7292.7292896018525,617.7110592550002,Cloudy,0,946.888426456834,Logstash Airways,0,SE-BD,No Delay,PA03,Falcone Borsellino Airport,10.29518432091667,false,11736.510125845005,Santiago,Cloudy,CL,IT,IT-82,SCL,Palermo,2019-12-23T03:54:12 +7ORM12S,Leonardo da Vinci___Fiumicino Airport,false,160.39074208529965,23.46580713004768,Sunny,0,118.37483602607261,Kibana Airlines,0,IT-62,No Delay,PI05,Pisa International Airport,0.39109678550079463,false,258.1238784305245,Rome,Sunny,IT,IT,IT-52,RM11,Pisa,2019-12-23T03:54:12 +2P36OEP,New Chitose Airport,true,5340.290617241973,941.1970552595557,Cloudy,0,705.7149863531135,Kibana Airlines,225,SE-BD,Late Aircraft Delay,VIE,Vienna International Airport,15.686617587659262,false,8594.364663114668,Chitose / Tomakomai,Rain,JP,AT,AT-9,CTS,Vienna,2019-12-23T09:41:52 +HLNZHCX,Verona Villafranca Airport,false,0,0,Sunny,0,172.3790782673846,ES-Air,0,IT-34,No Delay,VR10,Verona Villafranca Airport,0,false,0,Verona,Sunny,IT,IT,IT-34,VR10,Verona,2019-12-23T19:34:51 diff --git a/src/test/resources/correctness/kibana_sample_data_flights.json b/src/test/resources/correctness/kibana_sample_data_flights.json new file mode 100644 index 0000000000..ca6030983a --- /dev/null +++ b/src/test/resources/correctness/kibana_sample_data_flights.json @@ -0,0 +1,81 @@ +{ + "mappings": { + "properties": { + "AvgTicketPrice": { + "type": "float" + }, + "Cancelled": { + "type": "boolean" + }, + "Carrier": { + "type": "keyword" + }, + "Dest": { + "type": "keyword" + }, + "DestAirportID": { + "type": "keyword" + }, + "DestCityName": { + "type": "keyword" + }, + "DestCountry": { + "type": "keyword" + }, + "DestRegion": { + "type": "keyword" + }, + "DestWeather": { + "type": "keyword" + }, + "DistanceKilometers": { + "type": "float" + }, + "DistanceMiles": { + "type": "float" + }, + "FlightDelay": { + "type": "boolean" + }, + "FlightDelayMin": { + "type": "integer" + }, + "FlightDelayType": { + "type": "keyword" + }, + "FlightNum": { + "type": "keyword" + }, + "FlightTimeHour": { + "type": "keyword" + }, + "FlightTimeMin": { + "type": "float" + }, + "Origin": { + "type": "keyword" + }, + "OriginAirportID": { + "type": "keyword" + }, + "OriginCityName": { + "type": "keyword" + }, + "OriginCountry": { + "type": "keyword" + }, + "OriginRegion": { + "type": "keyword" + }, + "OriginWeather": { + "type": "keyword" + }, + "dayOfWeek": { + "type": "integer" + }, + "timestamp" : { + "type" : "date" + } + } + } +} diff --git a/src/test/resources/correctness/sanity_integration_tests.txt b/src/test/resources/correctness/sanity_integration_tests.txt new file mode 100644 index 0000000000..82cd2f8471 --- /dev/null +++ b/src/test/resources/correctness/sanity_integration_tests.txt @@ -0,0 +1,8 @@ +SELECT AvgTicketPrice, Cancelled, Carrier, FlightDelayMin, timestamp FROM kibana_sample_data_flights +SELECT AvgTicketPrice AS avg, Cancelled AS cancel, Carrier AS carrier, FlightDelayMin AS delay, timestamp AS ts FROM kibana_sample_data_flights +SELECT f.AvgTicketPrice AS avg, f.Cancelled AS cancel, f.Carrier AS carrier, f.FlightDelayMin AS delay, timestamp AS ts FROM kibana_sample_data_flights f +SELECT Carrier, AVG(FlightDelayMin) FROM kibana_sample_data_flights GROUP BY Carrier +SELECT Carrier, AVG(FlightDelayMin) FROM kibana_sample_data_flights GROUP BY Carrier HAVING AVG(FlightDelayMin) > 5 +SELECT YEAR(timestamp) FROM kibana_sample_data_flights +SELECT AvgTicketPrice AS AvgTicketPrice, DestCountry AS DestCountry FROM kibana_sample_data_ecommerce e JOIN kibana_sample_data_flights f ON (e.day_of_week_i = f.dayOfWeek) LIMIT 1000 +SELECT AvgTicketPrice AS AvgTicketPrice, DestCountry AS DestCountry FROM kibana_sample_data_ecommerce e LEFT JOIN kibana_sample_data_flights f ON (e.day_of_week_i = f.dayOfWeek) LIMIT 1000 diff --git a/src/test/resources/correctness/tableau_integration_tests.txt b/src/test/resources/correctness/tableau_integration_tests.txt new file mode 100644 index 0000000000..e10ef3ae5a --- /dev/null +++ b/src/test/resources/correctness/tableau_integration_tests.txt @@ -0,0 +1,215 @@ +SELECT SUBSTRING(`kibana_sample_data_flights`.`OriginWeather`, 1, 1024) AS `OriginWeather` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(`kibana_sample_data_flights`.`FlightDelayMin`) AS `sum_Offset_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(`kibana_sample_data_flights`.`FlightDelay`) AS `sum_FlightDelay_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(`kibana_sample_data_flights`.`DistanceMiles`) AS `sum_DistanceMiles_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT YEAR(`kibana_sample_data_flights`.`timestamp`) AS `yr_timestamp_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(ABS(`kibana_sample_data_flights`.`dayOfWeek`)) AS `sum_Calculation_160722252357632000_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(ACOS(`kibana_sample_data_flights`.`dayOfWeek`)) AS `sum_Calculation_160722252358221825_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(ASIN(`kibana_sample_data_flights`.`dayOfWeek`)) AS `sum_Calculation_160722252358545410_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(ATAN(`kibana_sample_data_flights`.`dayOfWeek`)) AS `sum_Calculation_160722252358811651_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(ATAN2(`kibana_sample_data_flights`.`dayOfWeek`,`kibana_sample_data_flights`.`FlightDelayMin`)) AS `sum_Calculation_160722252358811651_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(`kibana_sample_data_flights`.`dayOfWeek`) AS `sum_Calculation_160722252357632000_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(COS(`kibana_sample_data_flights`.`dayOfWeek`)) AS `sum_Calculation_160722252357632000_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(COT(`kibana_sample_data_flights`.`dayOfWeek`)) AS `sum_Calculation_160722252357632000_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(DEGREES(`kibana_sample_data_flights`.`dayOfWeek`)) AS `sum_Calculation_160722252357632000_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM((`kibana_sample_data_flights`.`dayOfWeek` DIV `kibana_sample_data_flights`.`FlightDelayMin`)) AS `sum_Calculation_160722252357632000_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(EXP(`kibana_sample_data_flights`.`dayOfWeek`)) AS `sum_Calculation_160722252357632000_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(`kibana_sample_data_flights`.`dayOfWeek`) AS `sum_Calculation_160722252357632000_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM((((CASE WHEN (ABS((`kibana_sample_data_flights`.`FlightDelayMin`) - (ROUND( ( (`kibana_sample_data_flights`.`FlightDelayMin`) / SQRT(3.0) ), 0 ) * SQRT(3.0)))) + SQRT(3.0) * ((ABS((`kibana_sample_data_flights`.`dayOfWeek`) - (ROUND( ( (`kibana_sample_data_flights`.`dayOfWeek`) / 3.0 ), 0 ) * 3.0))) - 1.0) > 0.0 THEN 1.5 ELSE 0.0 END) - (CASE WHEN ((`kibana_sample_data_flights`.`dayOfWeek`) - (ROUND( ( (`kibana_sample_data_flights`.`dayOfWeek`) / 3.0 ), 0 ) * 3.0) < 0.0) AND ((CASE WHEN (ABS((`kibana_sample_data_flights`.`FlightDelayMin`) - (ROUND( ( (`kibana_sample_data_flights`.`FlightDelayMin`) / SQRT(3.0) ), 0 ) * SQRT(3.0)))) + SQRT(3.0) * ((ABS((`kibana_sample_data_flights`.`dayOfWeek`) - (ROUND( ( (`kibana_sample_data_flights`.`dayOfWeek`) / 3.0 ), 0 ) * 3.0))) - 1.0) > 0.0 THEN SQRT(3.0) / 2.0 ELSE 0.0 END) > 0.0) THEN 3.0 ELSE 0.0 END)) + (ROUND( ( (`kibana_sample_data_flights`.`dayOfWeek`) / 3.0 ), 0 ) * 3.0))) AS `sum_Calculation_160722252357632000_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(ROUND( (((CASE WHEN (ABS((`kibana_sample_data_flights`.`FlightDelayMin`) - (ROUND( ( (`kibana_sample_data_flights`.`FlightDelayMin`) / SQRT(3.0) ), 0 ) * SQRT(3.0)))) + SQRT(3.0) * ((ABS((`kibana_sample_data_flights`.`dayOfWeek`) - (ROUND( ( (`kibana_sample_data_flights`.`dayOfWeek`) / 3.0 ), 0 ) * 3.0))) - 1.0) > 0.0 THEN SQRT(3.0) / 2.0 ELSE 0.0 END) - (CASE WHEN ((`kibana_sample_data_flights`.`FlightDelayMin`) - (ROUND( ( (`kibana_sample_data_flights`.`FlightDelayMin`) / SQRT(3.0) ), 0 ) * SQRT(3.0)) < 0.0) AND ((CASE WHEN (ABS((`kibana_sample_data_flights`.`FlightDelayMin`) - (ROUND( ( (`kibana_sample_data_flights`.`FlightDelayMin`) / SQRT(3.0) ), 0 ) * SQRT(3.0)))) + SQRT(3.0) * ((ABS((`kibana_sample_data_flights`.`dayOfWeek`) - (ROUND( ( (`kibana_sample_data_flights`.`dayOfWeek`) / 3.0 ), 0 ) * 3.0))) - 1.0) > 0.0 THEN SQRT(3.0) / 2.0 ELSE 0.0 END) > 0.0) THEN SQRT(3.0) ELSE 0.0 END)) + (ROUND( ( (`kibana_sample_data_flights`.`FlightDelayMin`) / SQRT(3.0) ), 0 ) * SQRT(3.0))), 3)) AS `sum_Calculation_160722252357632000_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(LOG(`kibana_sample_data_flights`.`dayOfWeek`)) AS `sum_Calculation_160722252357632000_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM((LOG(`kibana_sample_data_flights`.`dayOfWeek`)/LOG(10))) AS `sum_Calculation_160722252357632000_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT MAX(`kibana_sample_data_flights`.`dayOfWeek`) AS `usr_Calculation_160722252357632000_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT MIN(`kibana_sample_data_flights`.`dayOfWeek`) AS `usr_Calculation_160722252357632000_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM((CASE WHEN `kibana_sample_data_flights`.`dayOfWeek` >= 0 OR FLOOR(2) = 2 THEN POWER(`kibana_sample_data_flights`.`dayOfWeek`,2) END)) AS `sum_Calculation_160722252357632000_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(RADIANS(`kibana_sample_data_flights`.`dayOfWeek`)) AS `sum_Calculation_160722252357632000_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(ROUND(`kibana_sample_data_flights`.`dayOfWeek`)) AS `sum_Calculation_160722252357632000_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(SIGN(`kibana_sample_data_flights`.`dayOfWeek`)) AS `sum_Calculation_160722252357632000_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(SIN(`kibana_sample_data_flights`.`dayOfWeek`)) AS `sum_Calculation_160722252357632000_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(SQRT(`kibana_sample_data_flights`.`dayOfWeek`)) AS `sum_Calculation_160722252357632000_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(POWER(`kibana_sample_data_flights`.`dayOfWeek`, 2)) AS `sum_Calculation_160722252357632000_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(TAN(`kibana_sample_data_flights`.`dayOfWeek`)) AS `sum_Calculation_160722252357632000_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(`kibana_sample_data_flights`.`dayOfWeek`) AS `sum_Calculation_160722252357632000_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(ASCII(SUBSTRING(`kibana_sample_data_flights`.`OriginWeather`, 1, 1024))) AS `sum_Calculation_160722252357632000_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT `kibana_sample_data_flights`.`Dest` AS `Dest` FROM `kibana_sample_data_flights` WHERE ((`kibana_sample_data_flights`.`Dest` = 'caching_sha2_password') AND (LOCATE('in',LOWER(`kibana_sample_data_flights`.`Dest`)) > 0)) GROUP BY 1 +SELECT SUBSTRING(`kibana_sample_data_flights`.`OriginWeather`, 1, 1024) AS `OriginWeather` FROM `kibana_sample_data_flights` WHERE (RIGHT(RTRIM(LOWER(SUBSTRING(`kibana_sample_data_flights`.`OriginWeather`, 1, 1024))), LENGTH('.')) = '.') GROUP BY 1 +SELECT SUM(IF(ISNULL(1), NULL, LOCATE('Cape',`kibana_sample_data_flights`.`Origin`,GREATEST(1,FLOOR(1))))) AS `sum_Calculation_462181953493630977_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT (CASE WHEN 3 >= 0 THEN LEFT(`kibana_sample_data_flights`.`Origin`,3) ELSE NULL END) AS `Calculation_462181953493630977` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT LENGTH(`kibana_sample_data_flights`.`Origin`) AS `Calculation_462181953493630977` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT LOWER(`kibana_sample_data_flights`.`Origin`) AS `Calculation_462181953493630977` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT LTRIM(`kibana_sample_data_flights`.`Origin`) AS `Calculation_462181953493630977` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT MAX(`kibana_sample_data_flights`.`Origin`) AS `usr_Calculation_462181953493630977_nk` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT IF(ISNULL(0), NULL, SUBSTRING(`kibana_sample_data_flights`.`Origin`,GREATEST(1,FLOOR(0)),FLOOR(5))) AS `Calculation_462181953493630977` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT MIN(`kibana_sample_data_flights`.`Origin`) AS `usr_Calculation_462181953493630977_nk` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT REPLACE(`kibana_sample_data_flights`.`Origin`,'Airport','') AS `Calculation_462181953493630977` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT (CASE WHEN 3 >= 0 THEN RIGHT(`kibana_sample_data_flights`.`Origin`,3) ELSE NULL END) AS `Calculation_462181953493630977` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT RTRIM(`kibana_sample_data_flights`.`Origin`) AS `Calculation_462181953493630977` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT IF(`kibana_sample_data_flights`.`AvgTicketPrice` >= 0, SPACE(FLOOR(`kibana_sample_data_flights`.`AvgTicketPrice`)), NULL) AS `Calculation_462181953493630977` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT TRIM(LEADING '-' FROM TRIM(LEADING SUBSTRING_INDEX(`kibana_sample_data_flights`.`Origin`, '-', (2 - 1)) FROM SUBSTRING_INDEX(`kibana_sample_data_flights`.`Origin`, '-', 2))) AS `Calculation_462181953493630977` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUBSTRING(`kibana_sample_data_flights`.`OriginWeather`, 1, 1024) AS `OriginWeather` FROM `kibana_sample_data_flights` WHERE (LEFT(LTRIM(LOWER(SUBSTRING(`kibana_sample_data_flights`.`OriginWeather`, 1, 1024))), LENGTH('$')) = '$') GROUP BY 1 +SELECT TRIM(`kibana_sample_data_flights`.`Origin`) AS `Calculation_462181953493630977` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT UPPER(`kibana_sample_data_flights`.`Origin`) AS `Calculation_462181953493630977` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT ADDDATE( DATE_FORMAT( DATE(`kibana_sample_data_flights`.`password_last_changed`), '%Y-01-01 00:00:00' ), INTERVAL 0 SECOND ) AS `tyr_Calculation_160722252357632000_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT YEAR(DATE(`kibana_sample_data_flights`.`timestamp`)) AS `yr_Calculation_462181953481519104_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT (YEAR(`kibana_sample_data_flights`.`timestamp`) - YEAR(DATE('1990-01-01'))) AS `Calculation_1706301351891775489` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT MONTHNAME(`kibana_sample_data_flights`.`timestamp`) AS `Calculation_1706301351891775489` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT YEAR(TIMESTAMP(STR_TO_DATE('5.April.2004', '%d.%i.%Y'))) AS `yr_Calculation_462181953481519104_ok` FROM `kibana_sample_data_flights` +SELECT YEAR(ADDDATE( CONCAT( DATE_FORMAT( `kibana_sample_data_flights`.`timestamp`, '%Y-' ), (3*(QUARTER(`kibana_sample_data_flights`.`timestamp`)-1)+1), '-01 00:00:00' ), INTERVAL 0 SECOND )) AS `yr_Calculation_1706301351891775489_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT DAYOFMONTH(`kibana_sample_data_flights`.`timestamp`) AS `Calculation_462181953481519104` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT 2019 AS `yr_Calculation_462181953481519104_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT YEAR(ADDTIME(CAST(CAST(`kibana_sample_data_flights`.`timestamp` AS DATE) AS DATETIME), TIME(`kibana_sample_data_flights`.`timestamp`))) AS `yr_Calculation_1706301351891775489_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT YEAR(MAKETIME(`kibana_sample_data_flights`.`dayOfWeek`, `kibana_sample_data_flights`.`dayOfWeek`, `kibana_sample_data_flights`.`dayOfWeek`)) AS `yr_Calculation_1706301351891775489_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT MAX(`kibana_sample_data_flights`.`timestamp`) AS `max_timestamp_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT MIN(`kibana_sample_data_flights`.`timestamp`) AS `min_timestamp_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT MONTH(`kibana_sample_data_flights`.`timestamp`) AS `mn_timestamp_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT YEAR(NOW()) AS `yr_Calculation_462181953481519104_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT YEAR(CURDATE()) AS `yr_Calculation_462181953481519104_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT YEAR(`kibana_sample_data_flights`.`timestamp`) AS `yr_timestamp_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT ((`kibana_sample_data_flights`.`Origin` = 'Frankfurt am Main Airport') AND (`kibana_sample_data_flights`.`Dest` = 'Sydney Kingsford Smith International Airport')) AS `Calculation_462181953506873347` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT (CASE `kibana_sample_data_flights`.`OriginWeather` WHEN 'Sunny' THEN '1' WHEN 'Rain' THEN '0' ELSE 'NA' END) AS `Calculation_462181953506873347` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT (CASE WHEN (`kibana_sample_data_flights`.`FlightDelay` = 0) THEN 'No delay' ELSE CAST(NULL AS CHAR(1)) END) AS `Calculation_462181953506873347` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT (CASE WHEN (`kibana_sample_data_flights`.`FlightDelay` = 0) THEN 'No delay' WHEN (`kibana_sample_data_flights`.`FlightDelay` = 1) THEN 'Delay' ELSE CAST(NULL AS CHAR(1)) END) AS `Calculation_462181953506873347` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT (RIGHT(RTRIM(`kibana_sample_data_flights`.`Origin`), LENGTH('Airport')) = 'Airport') AS `Calculation_462181953506873347` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT (CASE WHEN (`kibana_sample_data_flights`.`FlightDelay` = 0) THEN 'No delay' ELSE CAST(NULL AS CHAR(1)) END) AS `Calculation_462181953506873347` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT IFNULL(`kibana_sample_data_flights`.`Cancelled`, `kibana_sample_data_flights`.`AvgTicketPrice`) AS `Calculation_462181953506873347` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT (CASE WHEN (`kibana_sample_data_flights`.`AvgTicketPrice` > 500) THEN 'High' WHEN NOT (`kibana_sample_data_flights`.`AvgTicketPrice` > 500) THEN 'Low' ELSE NULL END) AS `Calculation_462181953506873347` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT (NOT ISNULL(DATE_FORMAT(`kibana_sample_data_flights`.`Origin`, '%Y'))) AS `Calculation_462181953506873347` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT ISNULL(`kibana_sample_data_flights`.`FlightNum`) AS `Calculation_462181953506873347` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT MAX(`kibana_sample_data_flights`.`dayOfWeek`) AS `max_max_questions_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT MIN(`kibana_sample_data_flights`.`dayOfWeek`) AS `min_max_questions_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT (NOT ISNULL(DATE_FORMAT(`kibana_sample_data_flights`.`Origin`, '%Y'))) AS `Calculation_462181953506873347` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT ((`kibana_sample_data_flights`.`Origin` = 'Frankfurt am Main Airport') OR (`kibana_sample_data_flights`.`Dest` = 'Sydney Kingsford Smith International Airport')) AS `Calculation_462181953506873347` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT (CASE WHEN (`kibana_sample_data_flights`.`AvgTicketPrice` > 500) THEN 'High' WHEN NOT (`kibana_sample_data_flights`.`AvgTicketPrice` > 500) THEN 'Low' ELSE NULL END) AS `Calculation_462181953506873347` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT (CASE WHEN (`kibana_sample_data_flights`.`AvgTicketPrice` > 500) THEN 'High' WHEN NOT (`kibana_sample_data_flights`.`AvgTicketPrice` > 500) THEN 'Low' ELSE NULL END) AS `Calculation_462181953506873347` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT IFNULL(`kibana_sample_data_flights`.`FlightDelay`, 0) AS `Calculation_462181953506873347` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT MIN(`kibana_sample_data_flights`.`Origin`) AS `TEMP(Calculation_462181953504628738)(2376748618)(0)`, MAX(`kibana_sample_data_flights`.`Origin`) AS `TEMP(Calculation_462181953504628738)(2968235173)(0)` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT AVG(`kibana_sample_data_flights`.`FlightDelayMin`) AS `avg_max_user_connections_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(1) AS `cnt_max_user_connections_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT MAX(`kibana_sample_data_flights`.`max_questions`) AS `max_max_questions_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT MIN(`kibana_sample_data_flights`.`dayOfWeek`) AS `min_max_questions_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM((`kibana_sample_data_flights`.`AvgTicketPrice` * `kibana_sample_data_flights`.`AvgTicketPrice`)) AS `TEMP(Calculation_462181953506873347)(1705728846)(0)`, SUM(`kibana_sample_data_flights`.`AvgTicketPrice`) AS `TEMP(Calculation_462181953506873347)(2465277995)(0)`, COUNT(`kibana_sample_data_flights`.`AvgTicketPrice`) AS `TEMP(Calculation_462181953506873347)(2633997250)(0)` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT COUNT(`kibana_sample_data_flights`.`DistanceMiles`) AS `TEMP(Calculation_462181953506873347)(2070533874)(0)`, SUM(`kibana_sample_data_flights`.`DistanceMiles`) AS `TEMP(Calculation_462181953506873347)(3496560911)(0)`, SUM((`kibana_sample_data_flights`.`DistanceMiles` * `kibana_sample_data_flights`.`DistanceMiles`)) AS `TEMP(Calculation_462181953506873347)(3595387140)(0)` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(`kibana_sample_data_flights`.`dayOfWeek`) AS `usr_Calculation_160722252357632000_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(`kibana_sample_data_flights`.`dayOfWeek`) AS `TEMP(Calculation_462181953506873347)(105357904)(0)`, COUNT(`kibana_sample_data_flights`.`dayOfWeek`) AS `TEMP(Calculation_462181953506873347)(2584840543)(0)`, SUM(((`kibana_sample_data_flights`.`dayOfWeek` + 0.0) * (`kibana_sample_data_flights`.`dayOfWeek` + 0.0))) AS `TEMP(Calculation_462181953506873347)(3340567470)(0)` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(`kibana_sample_data_flights`.`DistanceKilometers`) AS `TEMP(Calculation_462181953506873347)(1474522238)(0)`, COUNT(`kibana_sample_data_flights`.`DistanceKilometers`) AS `TEMP(Calculation_462181953506873347)(2841334535)(0)`, SUM((`kibana_sample_data_flights`.`DistanceKilometers` * `kibana_sample_data_flights`.`DistanceKilometers`)) AS `TEMP(Calculation_462181953506873347)(461715975)(0)` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUBSTRING(`kibana_sample_data_flights`.`OriginWeather`, 1, 1024) AS `OriginWeather` FROM `kibana_sample_data_flights` WHERE (SUBSTRING(`kibana_sample_data_flights`.`OriginWeather`, 1, 1024) = 'ABC') GROUP BY 1 +SELECT SUM((CASE \tWHEN ISNULL(`kibana_sample_data_flights`.`dayOfWeek`) THEN NULL \tWHEN ISNULL(10) THEN NULL \tELSE GREATEST(`kibana_sample_data_flights`.`dayOfWeek`, 10) END)) AS `sum_Calculation_160722252357632000_ok` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT `kibana_sample_data_flights`.`AvgTicketPrice` AS `AvgTicketPrice`, `kibana_sample_data_flights`.`Cancelled` AS `Cancelled`, `kibana_sample_data_flights`.`Carrier` AS `Carrier`, `kibana_sample_data_flights`.`DestAirportID` AS `DestAirportID`, `kibana_sample_data_flights`.`DestCityName` AS `DestCityName`, `kibana_sample_data_flights`.`DestCountry` AS `DestCountry`, `kibana_sample_data_flights`.`DestLocation` AS `DestLocation`, `kibana_sample_data_flights`.`DestRegion` AS `Dest~~~<<<query-trunc>>>~~~e`.`kibana_sample_data_flights` AS `kibana_sample_data_flights` FROM `kibana_sample_data_ecommerce` LEFT JOIN `kibana_sample_data_flights` ON (`kibana_sample_data_ecommerce`.`day_of_week_i` = `kibana_sample_data_flights`.`dayOfWeek`) LIMIT 1000 +SELECT `kibana_sample_data_flights`.`AvgTicketPrice` AS `AvgTicketPrice`, `kibana_sample_data_flights`.`Cancelled` AS `Cancelled`, `kibana_sample_data_flights`.`Carrier` AS `Carrier`, `kibana_sample_data_flights`.`DestAirportID` AS `DestAirportID`, `kibana_sample_data_flights`.`DestCityName` AS `DestCityName`, `kibana_sample_data_flights`.`DestCountry` AS `DestCountry`, `kibana_sample_data_flights`.`DestLocation` AS `DestLocation`, `kibana_sample_data_flights`.`DestRegion` AS `Dest~~~<<<query-trunc>>>~~~`.`kibana_sample_data_flights` AS `kibana_sample_data_flights` FROM `kibana_sample_data_ecommerce` RIGHT JOIN `kibana_sample_data_flights` ON (`kibana_sample_data_ecommerce`.`day_of_week_i` = `kibana_sample_data_flights`.`dayOfWeek`) LIMIT 1000 +SELECT `kibana_sample_data_flights`.`OriginCityName` AS `OriginCityName` FROM `kibana_sample_data_flights` GROUP BY 1 ORDER BY `OriginCityName` ASC +SELECT `kibana_sample_data_flights`.`OriginCityName` AS `OriginCityName` FROM `kibana_sample_data_flights` GROUP BY 1 ORDER BY `OriginCityName` ASC +SELECT `kibana_sample_data_flights`.`DestCityName` AS `DestCityName`, SUM(`kibana_sample_data_flights`.`AvgTicketPrice`) AS `$__alias__0` FROM `kibana_sample_data_flights` GROUP BY 1 ORDER BY `$__alias__0` DESC, `DestCityName` ASC LIMIT 10 +SELECT 'DESKTOP-7APIVOE\\\\Rupal' AS `Calculation_1122522251639717888` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT 0 AS `Calculation_1122522251639717888` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT 0 AS `Calculation_1122522251639717888` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT 1 AS `Calculation_1122522251639717888` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT 'DESKTOP-7APIVOE' AS `Calculation_1122522251639717888` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT 'ABC' AS `Calculation_1122522251639717888` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT MAX(`kibana_sample_data_flights`.`AvgTicketPrice`) AS `TEMP(TC_)(3575797393)(0)` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(`kibana_sample_data_flights`.`dayOfWeek`) AS `TEMP(TEMP(TC_)(4001152001)(0))(105357904)(0)`, COUNT(`kibana_sample_data_flights`.`dayOfWeek`) AS `TEMP(TEMP(TC_)(4001152001)(0))(2584840543)(0)` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT MIN(`kibana_sample_data_flights`.`AvgTicketPrice`) AS `TEMP(TC_)(2076389572)(0)` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(`kibana_sample_data_flights`.`AvgTicketPrice`) AS `TEMP(TEMP(TC_)(4079199159)(0))(2465277995)(0)`, COUNT(`kibana_sample_data_flights`.`AvgTicketPrice`) AS `TEMP(TEMP(TC_)(4079199159)(0))(2633997250)(0)` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(`kibana_sample_data_flights`.`AvgTicketPrice`) AS `TEMP(TC_)(2465277995)(0)` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT COUNT(`kibana_sample_data_flights`.`AvgTicketPrice`) AS `TEMP(TC_)(2633997250)(0)` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT MAX(`kibana_sample_data_flights`.`dayOfWeek`) AS `TEMP(TC_)(718966039)(0)` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT MIN(`kibana_sample_data_flights`.`dayOfWeek`) AS `TEMP(TC_)(2462140059)(0)` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT SUM(`kibana_sample_data_flights`.`dayOfWeek`) AS `TEMP(TC_)(105357904)(0)`, SUM(`kibana_sample_data_flights`.`AvgTicketPrice`) AS `TEMP(TC_)(2465277995)(0)` FROM `kibana_sample_data_flights` GROUP BY 1 +SELECT 1 AS `empty` FROM `kibana_sample_data_flights` +SELECT substring(OriginWeather, 1, 2) AS OriginWeather FROM kibana_sample_data_flights +SELECT SUM(FlightDelayMin) AS sum_FlightDelayMin_ok FROM kibana_sample_data_flights +SELECT SUM(FlightDelay) AS sum_FlightDelay_ok FROM kibana_sample_data_flights +SELECT SUM(DistanceMiles) AS sum_DistanceMiles_ok FROM kibana_sample_data_flights +SELECT year(timestamp) AS yr_timestamp_ok FROM kibana_sample_data_flights +SELECT abs(AvgTicketPrice) AS sum_Calculation_160722252357632000_ok FROM kibana_sample_data_flights +SELECT acos(FlightDelayMin) AS sum_Calculation_160722252358221825_ok FROM kibana_sample_data_flights +SELECT asin(FlightDelayMin) AS sum_Calculation_160722252358545410_ok FROM kibana_sample_data_flights +SELECT atan(FlightDelayMin) AS sum_Calculation_160722252358811651_ok FROM kibana_sample_data_flights +SELECT atan2(FlightDelayMin,dayOfWeek) AS sum_Calculation_160722252358811651_ok FROM kibana_sample_data_flights +SELECT SUM(FlightDelayMin) AS sum_Calculation_160722252357632000_ok FROM kibana_sample_data_flights +SELECT cos(FlightDelayMin) AS sum_Calculation_160722252358221825_ok FROM kibana_sample_data_flights +SELECT cot(AvgTicketPrice) AS sum_Calculation_160722252357632000_ok FROM kibana_sample_data_flights +SELECT degrees(FlightDelayMin) AS sum_Calculation_160722252357632000_ok FROM kibana_sample_data_flights +SELECT FlightDelayMin div AvgTicketPrice AS sum_Calculation_160722252357632000_ok FROM kibana_sample_data_flights +SELECT exp(FlightDelayMin) AS sum_Calculation_160722252357632000_ok FROM kibana_sample_data_flights +SELECT SUM(dayOfWeek) AS sum_Calculation_160722252357632000_ok FROM kibana_sample_data_flights +SELECT SUM((((CASE WHEN (ABS((AvgTicketPrice) - (ROUND( ( (AvgTicketPrice) / SQRT(3.0) ), 0 ) * SQRT(3.0)))) + SQRT(3.0) * ((ABS((FlightDelayMin) - (ROUND( ( (FlightDelayMin) / 3.0 ), 0 ) * 3.0))) - 1.0) > 0.0 THEN 1.5 ELSE 0.0 END) - (CASE WHEN ((FlightDelayMin) - (ROUND( ( (FlightDelayMin) / 3.0 ), 0 ) * 3.0) < 0.0) AND ((CASE WHEN (ABS((AvgTicketPrice) - (ROUND( ( (AvgTicketPrice) / SQRT(3.0) ), 0 ) * SQRT(3.0)))) + SQRT(3.0) * ((ABS((FlightDelayMin) - (ROUND( ( (FlightDelayMin) / 3.0 ), 0 ) * 3.0))) - 1.0) > 0.0 THEN SQRT(3.0) / 2.0 ELSE 0.0 END) > 0.0) THEN 3.0 ELSE 0.0 END)) + (ROUND( ( (FlightDelayMin) / 3.0 ), 0 ) * 3.0))) AS sum_Calculation_160722252357632000_ok FROM kibana_sample_data_flights +SELECT SUM(ROUND( (((CASE WHEN (ABS((AvgTicketPrice) - (ROUND( ( (AvgTicketPrice) / SQRT(3.0) ), 0 ) * SQRT(3.0)))) + SQRT(3.0) * ((ABS((FlightDelayMin) - (ROUND( ( (FlightDelayMin) / 3.0 ), 0 ) * 3.0))) - 1.0) > 0.0 THEN SQRT(3.0) / 2.0 ELSE 0.0 END) - (CASE WHEN ((AvgTicketPrice) - (ROUND( ( (AvgTicketPrice) / SQRT(3.0) ), 0 ) * SQRT(3.0)) < 0.0) AND ((CASE WHEN (ABS((AvgTicketPrice) - (ROUND( ( (AvgTicketPrice) / SQRT(3.0) ), 0 ) * SQRT(3.0)))) + SQRT(3.0) * ((ABS((FlightDelayMin) - (ROUND( ( (FlightDelayMin) / 3.0 ), 0 ) * 3.0))) - 1.0) > 0.0 THEN SQRT(3.0) / 2.0 ELSE 0.0 END) > 0.0) THEN SQRT(3.0) ELSE 0.0 END)) + (ROUND( ( (AvgTicketPrice) / SQRT(3.0) ), 0 ) * SQRT(3.0))), 3)) AS sum_Calculation_160722252357632000_ok FROM kibana_sample_data_flights +SELECT log(FlightDelayMin) AS sum_Calculation_160722252357632000_ok FROM kibana_sample_data_flights +SELECT (log(FlightDelayMin)/log(10)) AS sum_Calculation_160722252357632000_ok FROM kibana_sample_data_flights +SELECT MAX(FlightDelayMin) AS usr_Calculation_160722252357632000_ok FROM kibana_sample_data_flights +SELECT MIN(FlightDelayMin) AS usr_Calculation_160722252357632000_ok FROM kibana_sample_data_flights +SELECT sum((case when dayOfWeek >= 0 or floor(2) = 2 then power(dayOfWeek,2) end)) AS sum_Calculation_160722252357632000_ok FROM kibana_sample_data_flights +SELECT radians(dayOfWeek) AS sum_Calculation_160722252357632000_ok FROM kibana_sample_data_flights +SELECT round(dayOfWeek) AS sum_Calculation_160722252357632000_ok FROM kibana_sample_data_flights +SELECT sign(dayOfWeek) AS sum_Calculation_160722252357632000_ok FROM kibana_sample_data_flights +SELECT sin(dayOfWeek) AS sum_Calculation_160722252357632000_ok FROM kibana_sample_data_flights +SELECT sqrt(dayOfWeek) AS sum_Calculation_160722252357632000_ok FROM kibana_sample_data_flights +SELECT power(dayOfWeek, 2) AS sum_Calculation_160722252357632000_ok FROM kibana_sample_data_flights +SELECT tan(dayOfWeek) AS sum_Calculation_160722252357632000_ok FROM kibana_sample_data_flights +SELECT SUM(dayOfWeek) AS sum_Calculation_160722252357632000_ok FROM kibana_sample_data_flights +SELECT ascii(substring(OriginWeather, 1, 5)) AS sum_Calculation_160722252357632000_ok FROM kibana_sample_data_flights +SELECT Dest, locate('air',Dest) FROM kibana_sample_data_flights +SELECT substring(OriginWeather, 1, 1024) AS OriginWeather FROM kibana_sample_data_flights WHERE (right(rtrim(lower(substring(OriginWeather, 1, 5))), length('.')) ='.') +SELECT sum(if(isnull(1), null, locate('Cape',Origin,greatest(1,floor(1))))) AS sum_Calculation_462181953493630977_ok FROM kibana_sample_data_flights +SELECT (case when 3 >= 0 then left(Origin,3) else null end) AS Calculation_462181953493630977 FROM kibana_sample_data_flights +SELECT length(Origin) AS Calculation_462181953493630977 FROM kibana_sample_data_flights +SELECT lower(Origin) AS Calculation_462181953493630977 FROM kibana_sample_data_flights +SELECT ltrim(Origin) AS Calculation_462181953493630977 FROM kibana_sample_data_flights +SELECT max(Origin) AS usr_Calculation_462181953493630977_nk FROM kibana_sample_data_flights +SELECT if(isnull(0), null, substring(Origin,greatest(1,floor(0)),floor(5))) AS Calculation_462181953493630977 FROM kibana_sample_data_flights +SELECT min(Origin) AS usr_Calculation_462181953493630977_nk FROM kibana_sample_data_flights +SELECT replace(Origin,'Airport','') AS Calculation_462181953493630977 FROM kibana_sample_data_flights +SELECT (case when 3 >= 0 then right(Origin,3) else null end) AS Calculation_462181953493630977 FROM kibana_sample_data_flights +SELECT rtrim(Origin) AS Calculation_462181953493630977 FROM kibana_sample_data_flights +SELECT if(AvgTicketPrice >= 0, space(floor(AvgTicketPrice)), null) AS Calculation_462181953493630977 FROM kibana_sample_data_flights +SELECT trim(leading '-' FROM trim(leading substring(Origin, '-', (2 - 1)) FROM substring_index(Origin, '-', 2))) AS Calculation_462181953493630977 FROM kibana_sample_data_flights +SELECT substring(OriginWeather, 1, 5) AS OriginWeather FROM kibana_sample_data_flights where (left(ltrim(lower(substring(OriginWeather, 1, 5))), length('$')) = '$') +SELECT trim(Origin) AS Calculation_462181953493630977 FROM kibana_sample_data_flights +SELECT upper(Origin) AS Calculation_462181953493630977 FROM kibana_sample_data_flights +SELECT adddate( date_format( date(timestamp), '%Y-01-01 00:00:00' ), interval 0 second ) AS tyr_Calculation_160722252357632000_ok FROM kibana_sample_data_flights +SELECT year(date(timestamp)) AS yr_Calculation_462181953481519104_ok FROM kibana_sample_data_flights +SELECT year(timestamp(str_to_date('5.April.2004', '%d.%i.%Y'))) AS yr_Calculation_462181953481519104_ok FROM kibana_sample_data_flights +SELECT dayofmonth(timestamp) AS Calculation_462181953481519104 FROM kibana_sample_data_flights +SELECT 2019 AS yr_Calculation_462181953481519104_ok FROM kibana_sample_data_flights +SELECT max(timestamp) AS max_timestamp_ok FROM kibana_sample_data_flights +SELECT min(timestamp) AS max_timestamp_ok FROM kibana_sample_data_flights +SELECT month(timestamp) AS mn_timestamp_ok FROM kibana_sample_data_flights +SELECT year(now()) AS yr_Calculation_462181953481519104_ok FROM kibana_sample_data_flights +SELECT year(curdate()) AS yr_Calculation_462181953481519104_ok FROM kibana_sample_data_flights +SELECT year(timestamp) AS yr_timestamp_ok FROM kibana_sample_data_flights +SELECT ((Origin = 'Frankfurt am Main Airport') and (Dest = 'Sydney Kingsford Smith International Airport')) AS Calculation_462181953506873347 FROM kibana_sample_data_flights +SELECT (case OriginWeather when 'Sunny' then '1' when 'Rain' then '0' else 'NA' end) AS Calculation_462181953506873347 FROM kibana_sample_data_flights +SELECT (case when (FlightDelay = 0) then 'No delay' else cast(null as char(1)) end) AS Calculation_462181953506873347 FROM kibana_sample_data_flights +SELECT (case when (FlightDelay = 0) then 'No delay' when (FlightDelay = 1) then 'Delay' else cast(null as char(1)) end) AS Calculation_462181953506873347 FROM kibana_sample_data_flights +SELECT (right(rtrim(Origin), length('Airport')) = 'Airport') AS Calculation_462181953506873347 FROM kibana_sample_data_flights +SELECT (case when (FlightDelay = 0) then 'No delay' else cast(null as char(1)) end) AS Calculation_462181953506873347 FROM kibana_sample_data_flights +SELECT ifnull(Cancelled, AvgTicketPrice) AS Calculation_462181953506873347 FROM kibana_sample_data_flights +SELECT (case when (AvgTicketPrice > 500) THEN 'High' when not (AvgTicketPrice > 500) then 'Low' else null end) AS Calculation_462181953506873347 FROM kibana_sample_data_flights +SELECT (not isnull(date_format(Origin, '%Y'))) AS Calculation_462181953506873347 FROM kibana_sample_data_flights +SELECT isnull(FlightNum) AS Calculation_462181953506873347 FROM kibana_sample_data_flights +SELECT MAX(AvgTicketPrice) AS max_AvgTicketPrice_ok FROM kibana_sample_data_flights +SELECT MIN(AvgTicketPrice) AS min_AvgTicketPrice_ok FROM kibana_sample_data_flights +SELECT (not isnull(date_format(Origin, '%Y'))) AS Calculation_462181953506873347 FROM kibana_sample_data_flights +SELECT ((Origin = 'Frankfurt am Main Airport') or (Dest = 'Sydney Kingsford Smith International Airport')) AS Calculation_462181953506873347 FROM kibana_sample_data_flights +SELECT (case when (AvgTicketPrice > 500) THEN 'High' when not (AvgTicketPrice > 500) then 'Low' else null end) AS Calculation_462181953506873347 FROM kibana_sample_data_flights +SELECT (case when (AvgTicketPrice > 500) THEN 'High' when not (AvgTicketPrice > 500) then 'Low' else null end) AS Calculation_462181953506873347 FROM kibana_sample_data_flights +SELECT ifnull(FlightDelay, 0) AS Calculation_462181953506873347 FROM kibana_sample_data_flights +SELECT min(Origin) AS temp(Calculation_462181953504628738)(2376748618)(0), max(Origin) AS temp(Calculation_462181953504628738)(2968235173)(0) FROM kibana_sample_data_flights +SELECT AVG(dayOfWeek) AS avg_dayOfWeek_ok FROM kibana_sample_data_flights +SELECT SUM(1) AS cnt_dayOfWeek_ok FROM kibana_sample_data_flights +SELECT COUNT(DISTINCT AvgTicketPrice) AS ctd_AvgTicketPrice_ok FROM kibana_sample_data_flights +SELECT MAX(AvgTicketPrice) AS max_AvgTicketPrice_ok FROM kibana_sample_data_flights +SELECT MIN(AvgTicketPrice) AS min_AvgTicketPrice_ok FROM kibana_sample_data_flights +SELECT sum((AvgTicketPrice * AvgTicketPrice)) AS temp(Calculation_462181953506873347)(1705728846)(0), sum(AvgTicketPrice) AS temp(Calculation_462181953506873347)(2465277995)(0), count(AvgTicketPrice) AS temp(Calculation_462181953506873347)(2633997250)(0) FROM kibana_sample_data_flights +SELECT count(DistanceMiles) AS temp(Calculation_462181953506873347)(2070533874)(0), sum(DistanceMiles) AS temp(Calculation_462181953506873347)(3496560911)(0), sum((DistanceMiles * DistanceMiles)) AS temp(Calculation_462181953506873347)(3595387140)(0) FROM kibana_sample_data_flights +SELECT SUM(dayOfWeek) AS usr_Calculation_160722252357632000_ok FROM kibana_sample_data_flights +SELECT substring(OriginWeather, 1, 5) AS OriginWeather FROM kibana_sample_data_flights WHERE (substring(OriginWeather, 1, 5) = 'ABC') +SELECT sum((case when isnull(FlightDelayMin) then null when isnull(10) then null else greatest(FlightDelayMin, 10) end)) AS sum_Calculation_160722252357632000_ok FROM kibana_sample_data_flights +SELECT AvgTicketPrice AS AvgTicketPrice, Cancelled AS Cancelled, Carrier AS Carrier, DestAirportID AS DestAirportID, DestCityName AS DestCityName, DestCountry AS DestCountry, DestLocation AS DestLocation FROM kibana_sample_data_ecommerce INNER JOIN kibana_sample_data_flights ON (kibana_sample_data_ecommerce.day_of_week_i = dayOfWeek) LIMIT 1000 +SELECT AvgTicketPrice AS AvgTicketPrice, Cancelled AS Cancelled, Carrier AS Carrier, DestAirportID AS DestAirportID, DestCityName AS DestCityName, DestCountry AS DestCountry, DestLocation AS DestLocation FROM kibana_sample_data_ecommerce LEFT JOIN kibana_sample_data_flights ON (kibana_sample_data_ecommerce.day_of_week_i = dayOfWeek) LIMIT 1000 +SELECT AvgTicketPrice AS AvgTicketPrice, Cancelled AS Cancelled, Carrier AS Carrier, DestAirportID AS DestAirportID, DestCityName AS DestCityName, DestCountry AS DestCountry, DestLocation AS DestLocation FROM kibana_sample_data_ecommerce RIGHT JOIN kibana_sample_data_flights ON (kibana_sample_data_ecommerce.day_of_week_i = dayOfWeek) LIMIT 1000 +SELECT OriginCityName FROM kibana_sample_data_flights ORDER BY OriginCityName ASC +SELECT OriginCityName FROM kibana_sample_data_flights ORDER BY OriginCityName DESC +SELECT DestCityName, SUM(AvgTicketPrice) AS $__alias__0 FROM kibana_sample_data_flights ORDER BY $__alias__0 DESC, DestCityName ASC LIMIT 10 +SELECT AvgTicketPrice AS AvgTicketPrice, Cancelled AS Cancelled, Carrier AS Carrier FROM kibana_sample_data_ecommerce INNER JOIN kibana_sample_data_flights ON (kibana_sample_data_ecommerce.day_of_week_i = dayOfWeek) LIMIT 1000 +SELECT AvgTicketPrice AS AvgTicketPrice, Cancelled AS Cancelled, Carrier AS Carrier FROM kibana_sample_data_ecommerce LEFT JOIN kibana_sample_data_flights ON (kibana_sample_data_ecommerce.day_of_week_i = dayOfWeek) LIMIT 1000 diff --git a/src/test/resources/correctness/test_data_test.csv b/src/test/resources/correctness/test_data_test.csv new file mode 100644 index 0000000000..29489d2f77 --- /dev/null +++ b/src/test/resources/correctness/test_data_test.csv @@ -0,0 +1,3 @@ +AvgTicketPrice,Cancelled,Carrier,dayOfWeek,timestamp +1000,true,Delta,1,123 +2000,false,Southwest,2,456 \ No newline at end of file diff --git a/src/test/resources/correctness/test_data_test.json b/src/test/resources/correctness/test_data_test.json new file mode 100644 index 0000000000..c77772d674 --- /dev/null +++ b/src/test/resources/correctness/test_data_test.json @@ -0,0 +1,21 @@ +{ + "mappings": { + "properties": { + "AvgTicketPrice": { + "type": "float" + }, + "Cancelled": { + "type": "boolean" + }, + "Carrier": { + "type": "keyword" + }, + "dayOfWeek": { + "type": "integer" + }, + "timestamp": { + "type": "date" + } + } + } +}