From 813a3268b1ea5c6553737ffd9379c1478a1bd0c1 Mon Sep 17 00:00:00 2001 From: Kedar Sankar Behera Date: Wed, 9 Jan 2019 14:25:55 -0800 Subject: [PATCH 1/5] precision for decimal/float types --- .../sanity/maprdb/json/query10_sum.e_tsv | 2 +- .../apache/drill/test/framework/CmdParam.java | 6 ++ .../drill/test/framework/ColumnList.java | 56 ++++++++++++++----- .../drill/test/framework/DrillTestJdbc.java | 6 +- .../drill/test/framework/TestDriver.java | 47 ++++++++++++++-- .../drill/test/framework/TestVerifier.java | 53 +++++++++++++----- 6 files changed, 135 insertions(+), 35 deletions(-) diff --git a/framework/resources/Advanced/tpch/tpch_sf1/sanity/maprdb/json/query10_sum.e_tsv b/framework/resources/Advanced/tpch/tpch_sf1/sanity/maprdb/json/query10_sum.e_tsv index b257e965d..4e1dcf7f1 100755 --- a/framework/resources/Advanced/tpch/tpch_sf1/sanity/maprdb/json/query10_sum.e_tsv +++ b/framework/resources/Advanced/tpch/tpch_sf1/sanity/maprdb/json/query10_sum.e_tsv @@ -1 +1 @@ -300057.3299997481 +300057.3299998181 diff --git a/framework/src/main/java/org/apache/drill/test/framework/CmdParam.java b/framework/src/main/java/org/apache/drill/test/framework/CmdParam.java index 12df827a9..887ed99b0 100644 --- a/framework/src/main/java/org/apache/drill/test/framework/CmdParam.java +++ b/framework/src/main/java/org/apache/drill/test/framework/CmdParam.java @@ -59,6 +59,12 @@ public class CmdParam { @Parameter(names = {"-t"}, description = "timeout", required=false) public int timeout = 120; + @Parameter(names = {"-pF"}, description = "precision value for float values", required=false) + public double precisionFloat = 1.0E-6; + + @Parameter(names = {"-pD"}, description = "precision value for double values", required=false) + public double precisionDouble = 1.0E-12; + @Parameter(names = {"-w"}, description = "enable write actual query result to file", required=false) public boolean outputQueryResult = false; diff --git a/framework/src/main/java/org/apache/drill/test/framework/ColumnList.java b/framework/src/main/java/org/apache/drill/test/framework/ColumnList.java index 4d24b5b0c..d4434905f 100644 --- a/framework/src/main/java/org/apache/drill/test/framework/ColumnList.java +++ b/framework/src/main/java/org/apache/drill/test/framework/ColumnList.java @@ -32,7 +32,6 @@ public class ColumnList { private final List types; private final boolean Simba; public static final String SIMBA_JDBC = "sjdbc"; - public ColumnList(List types, List values) { this.values = values; this.types = types; @@ -63,6 +62,11 @@ public List getValues() { */ @Override public boolean equals(Object object) { + return (compare(this, (ColumnList) object)>0); + } + + + public int equallll(Object object) { return compare(this, (ColumnList) object); } @@ -132,20 +136,20 @@ public String toString() { return sb.toString(); } - private boolean compare(ColumnList o1, ColumnList o2) { + public int compare(ColumnList o1, ColumnList o2) { List list1 = o1.values; List list2 = o2.values; - if (list1.size() != list2.size()) return false; + if (list1.size() != list2.size()) return 0; for (int i = 0; i < list1.size(); i++) { if (types == null || types.size() == 0) { - if (!list1.get(i).equals(list2.get(i))) return false; + if (!list1.get(i).equals(list2.get(i))) return 0; continue; } if (bothNull(list1.get(i), list2.get(i))) { continue; } if (oneNull(list1.get(i), list2.get(i))) { - return false; + return 0; } int type = (Integer) (types.get(i)); try { @@ -155,9 +159,22 @@ private boolean compare(ColumnList o1, ColumnList o2) { float f1 = (Float) list1.get(i); float f2 = (Float) list2.get(i); if ((f1 + f2) / 2 != 0) { - if (!(Math.abs((f1 - f2) / ((f1 + f2) / 2)) < 1.0E-6)) return false; + if (!(Math.abs((f1 - f2) / ((f1 + f2) / 2)) < TestDriver.cmdParam.precisionFloat)){ + if (!(Math.abs((f1 - f2) / ((f1 + f2) / 2)) < TestDriver.cmdParam.precisionFloat*10)){ + if (!(Math.abs((f1 - f2) / ((f1 + f2) / 2)) < TestDriver.cmdParam.precisionFloat*100)){ + return 0; + } + else{ + return -1;//data precision error + } + } + else{ + return -1; + } + //return false; + } } else if (f1 != 0) { - return false; + return 0;//data verification error } break; case Types.DOUBLE: @@ -168,26 +185,39 @@ private boolean compare(ColumnList o1, ColumnList o2) { // otherwise proceed with "loosened" logic if (!d1.equals(d2)) { if ((d1 + d2) / 2 != 0) { - if (!(Math.abs((d1 - d2) / ((d1 + d2) / 2)) < 1.0E-12)) return false; + if (!(Math.abs((d1 - d2) / ((d1 + d2) / 2)) < TestDriver.cmdParam.precisionDouble)){ + if (!(Math.abs((d1 - d2) / ((d1 + d2) / 2)) < TestDriver.cmdParam.precisionDouble*10)){ + if (!(Math.abs((d1 - d2) / ((d1 + d2) / 2)) < TestDriver.cmdParam.precisionDouble*100)){ + return 0; + } + else{ + return -1; + } + } + else{ + return -1; + } + //return false; + } } else if (d1 != 0) { - return false; + return 0; } } break; case Types.DECIMAL: BigDecimal bd1 = (BigDecimal) list1.get(i); BigDecimal bd2 = (BigDecimal) list2.get(i); - if (!(bd1.compareTo(bd2) == 0)) return false; + if (!(bd1.compareTo(bd2) == 0)) return 0; break; default: - if (!(list1.get(i).equals(list2.get(i)))) return false; + if (!(list1.get(i).equals(list2.get(i)))) return 0; break; } } catch (Exception e) { - if (!(list1.get(i).equals(list2.get(i)))) return false; + if (!(list1.get(i).equals(list2.get(i)))) return 0; } } - return true; + return 1; } public static boolean bothNull(Object obj1, Object obj2) { diff --git a/framework/src/main/java/org/apache/drill/test/framework/DrillTestJdbc.java b/framework/src/main/java/org/apache/drill/test/framework/DrillTestJdbc.java index 8ee26edc0..f2d5d8159 100644 --- a/framework/src/main/java/org/apache/drill/test/framework/DrillTestJdbc.java +++ b/framework/src/main/java/org/apache/drill/test/framework/DrillTestJdbc.java @@ -22,6 +22,7 @@ import org.apache.drill.test.framework.TestCaseModeler.TestMatrix; import org.apache.drill.test.framework.TestVerifier.TestStatus; import org.apache.drill.test.framework.TestVerifier.VerificationException; +import org.apache.drill.test.framework.TestVerifier.PrecisionException; import org.apache.drill.test.framework.TestVerifier.PlanVerificationException; import org.apache.log4j.Logger; @@ -131,7 +132,10 @@ public void run() { } } catch (VerificationException e) { fail(TestStatus.DATA_VERIFICATION_FAILURE, e); - } catch (PlanVerificationException e) { + }catch (PrecisionException e) { + fail(TestStatus.DATA_PRECISION_FAILURE, e); + } + catch (PlanVerificationException e) { fail(TestStatus.PLAN_VERIFICATION_FAILURE, e); } catch (Exception e) { fail(TestStatus.EXECUTION_FAILURE, e); diff --git a/framework/src/main/java/org/apache/drill/test/framework/TestDriver.java b/framework/src/main/java/org/apache/drill/test/framework/TestDriver.java index 31a896037..f32325e8e 100644 --- a/framework/src/main/java/org/apache/drill/test/framework/TestDriver.java +++ b/framework/src/main/java/org/apache/drill/test/framework/TestDriver.java @@ -191,6 +191,7 @@ public int runTests() throws Exception { HashSet finalExecutionFailures = new HashSet(); HashSet finalDataVerificationFailures = new HashSet(); + HashSet finalDataPrecisionFailures = new HashSet(); HashSet finalPlanVerificationFailures = new HashSet(); HashSet finalCancelledFailures = new HashSet(); HashSet finalRandomFailures = new HashSet(); @@ -199,6 +200,7 @@ public int runTests() throws Exception { int totalPassingTests = 0; int totalExecutionFailures = 0; int totalDataVerificationFailures = 0; + int totalDataPrecisionFailures = 0; int totalPlanVerificationFailures = 0; int totalTimeoutFailures = 0; int totalCancelledFailures = 0; @@ -212,6 +214,7 @@ public int runTests() throws Exception { List passingTests = Lists.newArrayList(); List dataVerificationFailures = Lists.newArrayList(); + List dataPrecisionFailures = Lists.newArrayList(); List planVerificationFailures = Lists.newArrayList(); List executionFailures = Lists.newArrayList(); List timeoutFailures = Lists.newArrayList(); @@ -299,6 +302,9 @@ public int runTests() throws Exception { case DATA_VERIFICATION_FAILURE: dataVerificationFailures.add(test); break; + case DATA_PRECISION_FAILURE: + dataPrecisionFailures.add(test); + break; case PLAN_VERIFICATION_FAILURE: planVerificationFailures.add(test); break; @@ -340,6 +346,9 @@ public int runTests() throws Exception { else if(dataVerificationFailures.contains(test)){ dataVerificationFailures.remove(test); } + else if(dataPrecisionFailures.contains(test)){ + dataPrecisionFailures.remove(test); + } else if(planVerificationFailures.contains(test)){ planVerificationFailures.remove(test); } @@ -349,7 +358,7 @@ else if(timeoutFailures.contains(test)){ } } - if(executionFailures.size()>0 || dataVerificationFailures.size()>0 || planVerificationFailures.size()>0 || timeoutFailures.size()>0) { + if(executionFailures.size()>0 || dataVerificationFailures.size()>0 || dataPrecisionFailures.size()>0 || planVerificationFailures.size()>0 || timeoutFailures.size()>0) { LOG.info("\n"+DrillTestDefaults.LINE_BREAK+"\nITERATION FAILURES\n"+DrillTestDefaults.LINE_BREAK); } @@ -406,6 +415,15 @@ else if(executionFailureExceptions.get(index)==null){ LOG.info(test.getException().getMessage()); } } + + if(dataPrecisionFailures.size()>0) { + LOG.info("\nData Precision Failures:\n"); + for (DrillTest test : dataPrecisionFailures) { + LOG.info("Query: " + test.getInputFile()+ "\n" + test.getQuery()); + LOG.info("\nBaseline: "+ test.getExpectedFile()); + LOG.info(test.getException().getMessage()); + } + } if(planVerificationFailures.size()>0) { LOG.info("\nPlan Verification Failures:\n"); @@ -439,7 +457,7 @@ else if(executionFailureExceptions.get(index)==null){ } } - if(executionFailures.size()>0 || dataVerificationFailures.size()>0 || planVerificationFailures.size()>0 || timeoutFailures.size()>0 || randomFailures.size()>0) { + if(executionFailures.size()>0 || dataVerificationFailures.size()>0 || dataPrecisionFailures.size()>0 || planVerificationFailures.size()>0 || timeoutFailures.size()>0 || randomFailures.size()>0) { LOG.info("\n"+DrillTestDefaults.LINE_BREAK+"\nITERATION RESULTS\n"+DrillTestDefaults.LINE_BREAK); } @@ -479,6 +497,13 @@ else if(ii0){ + LOG.info("\nData Precision Failures:\n"); + for (DrillTest test : dataPrecisionFailures) { + LOG.info(test.getInputFile()); + } + } + if(planVerificationFailures.size()>0){ LOG.info("\nPlan Verification Failures:\n"); for (DrillTest test : planVerificationFailures) { @@ -527,9 +552,10 @@ else if(ii Execution Failures : " + executionFailures.size()); LOG.info("> Data Verification Failures : " + dataVerificationFailures.size()); + LOG.info("> Data Precision Failures : " + dataPrecisionFailures.size()); LOG.info("> Plan Verification Failures : " + planVerificationFailures.size()); LOG.info("> Timeout Failures : " + timeoutFailures.size()); @@ -559,6 +585,7 @@ else if(ii0){ LOG.info(DrillTestDefaults.LINE_BREAK+"\nRandom Failures:"); for(DrillTest test : finalRandomFailures){ @@ -603,6 +631,12 @@ else if(ii0){ + LOG.info(DrillTestDefaults.LINE_BREAK+"\nData Precision Failures"); + for(DrillTest test : finalDataPrecisionFailures){ + LOG.info(test.getInputFile()); + } + } if(finalPlanVerificationFailures.size()>0){ LOG.info(DrillTestDefaults.LINE_BREAK+"\nPlan Verification Failures"); for(DrillTest test : finalPlanVerificationFailures){ @@ -630,7 +664,7 @@ else if(ii tests, int iteration) { document.set("status", test.getTestStatus().toString()); if(test.getTestStatus().equals(TestStatus.EXECUTION_FAILURE) || test.getTestStatus().equals(TestStatus.DATA_VERIFICATION_FAILURE) - || test.getTestStatus().equals(TestStatus.PLAN_VERIFICATION_FAILURE)) { + ||test.getTestStatus().equals(TestStatus.DATA_PRECISION_FAILURE) + || test.getTestStatus().equals(TestStatus.PLAN_VERIFICATION_FAILURE)) { document.set("errorMessage", test.getException().toString().replaceAll("\n","")); }else{ document.set("errorMessage", "N/A"); diff --git a/framework/src/main/java/org/apache/drill/test/framework/TestVerifier.java b/framework/src/main/java/org/apache/drill/test/framework/TestVerifier.java index 089dd457f..2d4ab1fa6 100755 --- a/framework/src/main/java/org/apache/drill/test/framework/TestVerifier.java +++ b/framework/src/main/java/org/apache/drill/test/framework/TestVerifier.java @@ -62,7 +62,7 @@ public class TestVerifier { public enum TestStatus { PENDING, RUNNING, PASS, EXECUTION_FAILURE, VERIFICATION_FAILURE, - DATA_VERIFICATION_FAILURE, PLAN_VERIFICATION_FAILURE, ORDER_MISMATCH, TIMEOUT, CANCELED + DATA_VERIFICATION_FAILURE, DATA_PRECISION_FAILURE, PLAN_VERIFICATION_FAILURE, ORDER_MISMATCH, TIMEOUT, CANCELED }; public TestVerifier(List types, String query, @@ -91,7 +91,7 @@ public TestVerifier() { * @throws Exception */ public TestStatus verifySqllineResult(String expectedOutput, - String actualOutput, boolean verifyOrderBy) throws IOException, VerificationException, + String actualOutput, boolean verifyOrderBy) throws IOException, VerificationException, PrecisionException, IllegalAccessException { String cleanedUpFile = cleanUpSqllineOutputFile(actualOutput); return verifyResultSet(expectedOutput, cleanedUpFile, verifyOrderBy); @@ -130,7 +130,7 @@ private String cleanUpSqllineOutputFile(String actualOutput) throws IOException * @throws Exception */ public TestStatus verifyResultSet(String expectedOutput, String actualOutput) - throws IllegalAccessException, IOException, VerificationException { + throws IllegalAccessException, IOException, VerificationException, PrecisionException { return verifyResultSet(expectedOutput, actualOutput, false); } @@ -148,7 +148,7 @@ public TestStatus verifyResultSet(String expectedOutput, String actualOutput) * @throws Exception */ public TestStatus verifyResultSet(String expectedOutput, String actualOutput, boolean verifyOrderBy) - throws IOException, VerificationException, IllegalAccessException { + throws IOException, VerificationException, PrecisionException, IllegalAccessException { Map expectedMap = loadFromFileToMap(expectedOutput); if (expectedMap == null) { @@ -158,10 +158,23 @@ public TestStatus verifyResultSet(String expectedOutput, String actualOutput, bo Map actualMap = loadFromFileToMap(actualOutput); int actualCount = mapSize; - - testStatus = expectedMap.equals(actualMap) ? TestStatus.PASS : TestStatus.DATA_VERIFICATION_FAILURE; - - if (testStatus == TestStatus.DATA_VERIFICATION_FAILURE) { + boolean dataVerificationErrorDefiner = expectedMap.equals(actualMap); + testStatus = dataVerificationErrorDefiner ? TestStatus.PASS : TestStatus.DATA_VERIFICATION_FAILURE; + if(testStatus == TestStatus.DATA_VERIFICATION_FAILURE){ + Iterator> actualMapiterator = actualMap.entrySet().iterator(); + Iterator> expectedMapiterator = expectedMap.entrySet().iterator(); + while(actualMapiterator.hasNext() && expectedMapiterator.hasNext()){ + Map.Entry expectedEntry = expectedMapiterator.next(); + Map.Entry actualEntry = actualMapiterator.next(); + ColumnList expcl = expectedEntry.getKey(); + ColumnList actcl = actualEntry.getKey(); + if(expcl.equallll(actcl) == -1){ + testStatus = TestStatus.DATA_PRECISION_FAILURE; + break; + } + } + } + if (testStatus == TestStatus.DATA_VERIFICATION_FAILURE ||testStatus == TestStatus.DATA_PRECISION_FAILURE) { List unexpectedList = new ArrayList(); int unexpectedCount = 0; Iterator> iterator = actualMap.entrySet().iterator(); @@ -174,9 +187,15 @@ public TestStatus verifyResultSet(String expectedOutput, String actualOutput, bo unexpectedCount += count; } } - throw new VerificationException(printSummary(unexpectedList, unexpectedCount, + if( testStatus != TestStatus.DATA_PRECISION_FAILURE){ + throw new VerificationException(printSummary(unexpectedList, unexpectedCount, expectedMap, expectedCount, actualMap, actualCount, verifyOrderBy)); - } + } + else{ + throw new PrecisionException(printSummary(unexpectedList, unexpectedCount, + expectedMap, expectedCount, actualMap, actualCount, verifyOrderBy)); + } + } if (checkType) { Map orderByColumns = getOrderByColumns(query, columnLabels); @@ -188,7 +207,7 @@ public TestStatus verifyResultSet(String expectedOutput, String actualOutput, bo } private Map loadFromFileToMap(String filename) - throws IOException, VerificationException, IllegalAccessException { + throws IOException, VerificationException, PrecisionException, IllegalAccessException { return loadFromFileToMap(filename, false); } @@ -215,7 +234,7 @@ private int getUnexpectedCount(Map map, Map.Entry loadFromFileToMap(String filename, boolean ordered) - throws VerificationException, IOException, IllegalAccessException { + throws VerificationException, PrecisionException, IOException, IllegalAccessException { if (checkType && types == null) { throw new VerificationException("Fatal: Types in the result set is null. " + "This most likely resulted from failed execution."); @@ -240,7 +259,7 @@ private Map loadFromFileToMap(String filename, boolean orde sb.append("\nNumber of columns in actual data: " + size); sb.append("\nFirst row of expected data:\n" + line); sb.append("\nTypes in actual data: " + Utils.getTypesInStrings(types)); - reader.close(); + reader.close();//to do throw new VerificationException(sb.toString()); } List typedFields = Lists.newArrayList(); @@ -552,7 +571,7 @@ private static class IndexAndOrder { */ public TestStatus verifyResultSetOrders(String filename, List columnLabels, Map orderByColumns) - throws IOException, VerificationException, IllegalAccessException { + throws IOException, VerificationException, PrecisionException, IllegalAccessException { loadFromFileToMap(filename, true); List columnIndexAndOrder = getColumnIndexAndOrderList( columnLabels, orderByColumns, true); @@ -929,6 +948,12 @@ public VerificationException(String message) { super(message); } } + public static class PrecisionException extends Exception { + + public PrecisionException(String message) { + super(message); + } + } public static class PlanVerificationException extends Exception { public PlanVerificationException(String message) { From 8c072b9056d35029a8d6cedf89caf1f7e39206e6 Mon Sep 17 00:00:00 2001 From: Kedar Sankar Behera Date: Fri, 1 Feb 2019 14:01:34 -0800 Subject: [PATCH 2/5] Data precision tests --- .../sanity/maprdb/json/query10_sum.e_tsv | 2 +- .../resources/Functional/DataPrecision/1.e | 1 + .../resources/Functional/DataPrecision/1.q | 1 + .../resources/Functional/DataPrecision/10.e | 1 + .../resources/Functional/DataPrecision/10.q | 1 + .../resources/Functional/DataPrecision/11.e | 1 + .../resources/Functional/DataPrecision/11.q | 1 + .../resources/Functional/DataPrecision/12.e | 1 + .../resources/Functional/DataPrecision/12.q | 1 + .../resources/Functional/DataPrecision/13.e | 1 + .../resources/Functional/DataPrecision/13.q | 1 + .../resources/Functional/DataPrecision/14.e | 1 + .../resources/Functional/DataPrecision/14.q | 1 + .../resources/Functional/DataPrecision/15.e | 1 + .../resources/Functional/DataPrecision/15.q | 1 + .../resources/Functional/DataPrecision/16.e | 1 + .../resources/Functional/DataPrecision/16.q | 1 + .../resources/Functional/DataPrecision/17.e | 1 + .../resources/Functional/DataPrecision/17.q | 1 + .../resources/Functional/DataPrecision/18.e | 1 + .../resources/Functional/DataPrecision/18.q | 1 + .../resources/Functional/DataPrecision/19.e | 1 + .../resources/Functional/DataPrecision/19.q | 1 + .../resources/Functional/DataPrecision/2.e | 1 + .../resources/Functional/DataPrecision/2.q | 1 + .../resources/Functional/DataPrecision/20.e | 1 + .../resources/Functional/DataPrecision/20.q | 1 + .../resources/Functional/DataPrecision/21.e | 1 + .../resources/Functional/DataPrecision/21.q | 1 + .../resources/Functional/DataPrecision/22.e | 1 + .../resources/Functional/DataPrecision/22.q | 1 + .../resources/Functional/DataPrecision/23.e | 1 + .../resources/Functional/DataPrecision/23.q | 1 + .../resources/Functional/DataPrecision/24.e | 1 + .../resources/Functional/DataPrecision/24.q | 1 + .../resources/Functional/DataPrecision/25.e | 1 + .../resources/Functional/DataPrecision/25.q | 1 + .../resources/Functional/DataPrecision/26.e | 1 + .../resources/Functional/DataPrecision/26.q | 1 + .../resources/Functional/DataPrecision/27.e | 1 + .../resources/Functional/DataPrecision/27.q | 1 + .../resources/Functional/DataPrecision/28.e | 1 + .../resources/Functional/DataPrecision/28.q | 1 + .../resources/Functional/DataPrecision/29.e | 1 + .../resources/Functional/DataPrecision/29.q | 1 + .../resources/Functional/DataPrecision/3.e | 1 + .../resources/Functional/DataPrecision/3.q | 1 + .../resources/Functional/DataPrecision/30.e | 1 + .../resources/Functional/DataPrecision/30.q | 1 + .../resources/Functional/DataPrecision/31.e | 1 + .../resources/Functional/DataPrecision/31.q | 1 + .../resources/Functional/DataPrecision/32.e | 1 + .../resources/Functional/DataPrecision/32.q | 1 + .../resources/Functional/DataPrecision/4.e | 1 + .../resources/Functional/DataPrecision/4.q | 1 + .../resources/Functional/DataPrecision/5.e | 1 + .../resources/Functional/DataPrecision/5.q | 1 + .../resources/Functional/DataPrecision/6.e | 1 + .../resources/Functional/DataPrecision/6.q | 1 + .../resources/Functional/DataPrecision/7.e | 1 + .../resources/Functional/DataPrecision/7.q | 1 + .../resources/Functional/DataPrecision/8.e | 1 + .../resources/Functional/DataPrecision/8.q | 1 + .../resources/Functional/DataPrecision/9.e | 1 + .../resources/Functional/DataPrecision/9.q | 1 + .../DataPrecision/dataprecison.json | 22 +++++++++++++++++++ .../apache/drill/test/framework/CmdParam.java | 2 +- .../drill/test/framework/ColumnList.java | 8 ++----- 68 files changed, 90 insertions(+), 8 deletions(-) create mode 100644 framework/resources/Functional/DataPrecision/1.e create mode 100644 framework/resources/Functional/DataPrecision/1.q create mode 100644 framework/resources/Functional/DataPrecision/10.e create mode 100644 framework/resources/Functional/DataPrecision/10.q create mode 100644 framework/resources/Functional/DataPrecision/11.e create mode 100644 framework/resources/Functional/DataPrecision/11.q create mode 100644 framework/resources/Functional/DataPrecision/12.e create mode 100644 framework/resources/Functional/DataPrecision/12.q create mode 100644 framework/resources/Functional/DataPrecision/13.e create mode 100644 framework/resources/Functional/DataPrecision/13.q create mode 100644 framework/resources/Functional/DataPrecision/14.e create mode 100644 framework/resources/Functional/DataPrecision/14.q create mode 100644 framework/resources/Functional/DataPrecision/15.e create mode 100644 framework/resources/Functional/DataPrecision/15.q create mode 100644 framework/resources/Functional/DataPrecision/16.e create mode 100644 framework/resources/Functional/DataPrecision/16.q create mode 100644 framework/resources/Functional/DataPrecision/17.e create mode 100644 framework/resources/Functional/DataPrecision/17.q create mode 100644 framework/resources/Functional/DataPrecision/18.e create mode 100644 framework/resources/Functional/DataPrecision/18.q create mode 100644 framework/resources/Functional/DataPrecision/19.e create mode 100644 framework/resources/Functional/DataPrecision/19.q create mode 100644 framework/resources/Functional/DataPrecision/2.e create mode 100644 framework/resources/Functional/DataPrecision/2.q create mode 100644 framework/resources/Functional/DataPrecision/20.e create mode 100644 framework/resources/Functional/DataPrecision/20.q create mode 100644 framework/resources/Functional/DataPrecision/21.e create mode 100644 framework/resources/Functional/DataPrecision/21.q create mode 100644 framework/resources/Functional/DataPrecision/22.e create mode 100644 framework/resources/Functional/DataPrecision/22.q create mode 100644 framework/resources/Functional/DataPrecision/23.e create mode 100644 framework/resources/Functional/DataPrecision/23.q create mode 100644 framework/resources/Functional/DataPrecision/24.e create mode 100644 framework/resources/Functional/DataPrecision/24.q create mode 100644 framework/resources/Functional/DataPrecision/25.e create mode 100644 framework/resources/Functional/DataPrecision/25.q create mode 100644 framework/resources/Functional/DataPrecision/26.e create mode 100644 framework/resources/Functional/DataPrecision/26.q create mode 100644 framework/resources/Functional/DataPrecision/27.e create mode 100644 framework/resources/Functional/DataPrecision/27.q create mode 100644 framework/resources/Functional/DataPrecision/28.e create mode 100644 framework/resources/Functional/DataPrecision/28.q create mode 100644 framework/resources/Functional/DataPrecision/29.e create mode 100644 framework/resources/Functional/DataPrecision/29.q create mode 100644 framework/resources/Functional/DataPrecision/3.e create mode 100644 framework/resources/Functional/DataPrecision/3.q create mode 100644 framework/resources/Functional/DataPrecision/30.e create mode 100644 framework/resources/Functional/DataPrecision/30.q create mode 100644 framework/resources/Functional/DataPrecision/31.e create mode 100644 framework/resources/Functional/DataPrecision/31.q create mode 100644 framework/resources/Functional/DataPrecision/32.e create mode 100644 framework/resources/Functional/DataPrecision/32.q create mode 100644 framework/resources/Functional/DataPrecision/4.e create mode 100644 framework/resources/Functional/DataPrecision/4.q create mode 100644 framework/resources/Functional/DataPrecision/5.e create mode 100644 framework/resources/Functional/DataPrecision/5.q create mode 100644 framework/resources/Functional/DataPrecision/6.e create mode 100644 framework/resources/Functional/DataPrecision/6.q create mode 100644 framework/resources/Functional/DataPrecision/7.e create mode 100644 framework/resources/Functional/DataPrecision/7.q create mode 100644 framework/resources/Functional/DataPrecision/8.e create mode 100644 framework/resources/Functional/DataPrecision/8.q create mode 100644 framework/resources/Functional/DataPrecision/9.e create mode 100644 framework/resources/Functional/DataPrecision/9.q create mode 100755 framework/resources/Functional/DataPrecision/dataprecison.json diff --git a/framework/resources/Advanced/tpch/tpch_sf1/sanity/maprdb/json/query10_sum.e_tsv b/framework/resources/Advanced/tpch/tpch_sf1/sanity/maprdb/json/query10_sum.e_tsv index 4e1dcf7f1..b257e965d 100755 --- a/framework/resources/Advanced/tpch/tpch_sf1/sanity/maprdb/json/query10_sum.e_tsv +++ b/framework/resources/Advanced/tpch/tpch_sf1/sanity/maprdb/json/query10_sum.e_tsv @@ -1 +1 @@ -300057.3299998181 +300057.3299997481 diff --git a/framework/resources/Functional/DataPrecision/1.e b/framework/resources/Functional/DataPrecision/1.e new file mode 100644 index 000000000..0d005079f --- /dev/null +++ b/framework/resources/Functional/DataPrecision/1.e @@ -0,0 +1 @@ +0.00000068987 diff --git a/framework/resources/Functional/DataPrecision/1.q b/framework/resources/Functional/DataPrecision/1.q new file mode 100644 index 000000000..d5daf76a5 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/1.q @@ -0,0 +1 @@ +select cast(0.00000068989 as double); diff --git a/framework/resources/Functional/DataPrecision/10.e b/framework/resources/Functional/DataPrecision/10.e new file mode 100644 index 000000000..e4c984dd0 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/10.e @@ -0,0 +1 @@ +0.004 diff --git a/framework/resources/Functional/DataPrecision/10.q b/framework/resources/Functional/DataPrecision/10.q new file mode 100644 index 000000000..3b2514f2d --- /dev/null +++ b/framework/resources/Functional/DataPrecision/10.q @@ -0,0 +1 @@ +select cast(0.004 as double); diff --git a/framework/resources/Functional/DataPrecision/11.e b/framework/resources/Functional/DataPrecision/11.e new file mode 100644 index 000000000..d2b9e2917 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/11.e @@ -0,0 +1 @@ +0.03000000001 diff --git a/framework/resources/Functional/DataPrecision/11.q b/framework/resources/Functional/DataPrecision/11.q new file mode 100644 index 000000000..e50c6025c --- /dev/null +++ b/framework/resources/Functional/DataPrecision/11.q @@ -0,0 +1 @@ +select cast(0.03 as float); diff --git a/framework/resources/Functional/DataPrecision/12.e b/framework/resources/Functional/DataPrecision/12.e new file mode 100644 index 000000000..be5863417 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/12.e @@ -0,0 +1 @@ +0.3 diff --git a/framework/resources/Functional/DataPrecision/12.q b/framework/resources/Functional/DataPrecision/12.q new file mode 100644 index 000000000..f00a48b58 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/12.q @@ -0,0 +1 @@ +select cast(0.2 as float); diff --git a/framework/resources/Functional/DataPrecision/13.e b/framework/resources/Functional/DataPrecision/13.e new file mode 100644 index 000000000..8e7ed10c0 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/13.e @@ -0,0 +1 @@ +1.788 diff --git a/framework/resources/Functional/DataPrecision/13.q b/framework/resources/Functional/DataPrecision/13.q new file mode 100644 index 000000000..1f839fc86 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/13.q @@ -0,0 +1 @@ +select cast(1.787 as float); diff --git a/framework/resources/Functional/DataPrecision/14.e b/framework/resources/Functional/DataPrecision/14.e new file mode 100644 index 000000000..be9097024 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/14.e @@ -0,0 +1 @@ +1.78784 diff --git a/framework/resources/Functional/DataPrecision/14.q b/framework/resources/Functional/DataPrecision/14.q new file mode 100644 index 000000000..1c85498d4 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/14.q @@ -0,0 +1 @@ +select cast(1.7878 as double); diff --git a/framework/resources/Functional/DataPrecision/15.e b/framework/resources/Functional/DataPrecision/15.e new file mode 100644 index 000000000..1da666d7e --- /dev/null +++ b/framework/resources/Functional/DataPrecision/15.e @@ -0,0 +1 @@ +1.7878788878 diff --git a/framework/resources/Functional/DataPrecision/15.q b/framework/resources/Functional/DataPrecision/15.q new file mode 100644 index 000000000..251ab879c --- /dev/null +++ b/framework/resources/Functional/DataPrecision/15.q @@ -0,0 +1 @@ +select cast(1.7878787878 as double); diff --git a/framework/resources/Functional/DataPrecision/16.e b/framework/resources/Functional/DataPrecision/16.e new file mode 100644 index 000000000..46e84be3d --- /dev/null +++ b/framework/resources/Functional/DataPrecision/16.e @@ -0,0 +1 @@ +1.78788 diff --git a/framework/resources/Functional/DataPrecision/16.q b/framework/resources/Functional/DataPrecision/16.q new file mode 100644 index 000000000..9be6ed108 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/16.q @@ -0,0 +1 @@ +select cast(1.78787 as float); diff --git a/framework/resources/Functional/DataPrecision/17.e b/framework/resources/Functional/DataPrecision/17.e new file mode 100644 index 000000000..846417ed3 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/17.e @@ -0,0 +1 @@ +12.6767679 diff --git a/framework/resources/Functional/DataPrecision/17.q b/framework/resources/Functional/DataPrecision/17.q new file mode 100644 index 000000000..151f44473 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/17.q @@ -0,0 +1 @@ +select cast(12.676767 as float); diff --git a/framework/resources/Functional/DataPrecision/18.e b/framework/resources/Functional/DataPrecision/18.e new file mode 100644 index 000000000..994547731 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/18.e @@ -0,0 +1 @@ +134.67670001 diff --git a/framework/resources/Functional/DataPrecision/18.q b/framework/resources/Functional/DataPrecision/18.q new file mode 100644 index 000000000..fe42857b4 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/18.q @@ -0,0 +1 @@ +select cast(134.6767 as float); diff --git a/framework/resources/Functional/DataPrecision/19.e b/framework/resources/Functional/DataPrecision/19.e new file mode 100644 index 000000000..1452e7391 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/19.e @@ -0,0 +1 @@ +1444.666 diff --git a/framework/resources/Functional/DataPrecision/19.q b/framework/resources/Functional/DataPrecision/19.q new file mode 100644 index 000000000..f117dabc2 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/19.q @@ -0,0 +1 @@ +select cast(1444.676 as float); diff --git a/framework/resources/Functional/DataPrecision/2.e b/framework/resources/Functional/DataPrecision/2.e new file mode 100644 index 000000000..e0c6626b0 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/2.e @@ -0,0 +1 @@ +0.000000688 diff --git a/framework/resources/Functional/DataPrecision/2.q b/framework/resources/Functional/DataPrecision/2.q new file mode 100644 index 000000000..7d0672736 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/2.q @@ -0,0 +1 @@ +select cast(0.000000678 as double); diff --git a/framework/resources/Functional/DataPrecision/20.e b/framework/resources/Functional/DataPrecision/20.e new file mode 100644 index 000000000..459a0a472 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/20.e @@ -0,0 +1 @@ +15833.6767776 diff --git a/framework/resources/Functional/DataPrecision/20.q b/framework/resources/Functional/DataPrecision/20.q new file mode 100644 index 000000000..5e4c088d4 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/20.q @@ -0,0 +1 @@ +select cast(15833.6767676 as double); diff --git a/framework/resources/Functional/DataPrecision/21.e b/framework/resources/Functional/DataPrecision/21.e new file mode 100644 index 000000000..81bba8cf3 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/21.e @@ -0,0 +1 @@ +233345.6766767 diff --git a/framework/resources/Functional/DataPrecision/21.q b/framework/resources/Functional/DataPrecision/21.q new file mode 100644 index 000000000..d3e394702 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/21.q @@ -0,0 +1 @@ +select cast(233345.67676767 as double); diff --git a/framework/resources/Functional/DataPrecision/22.e b/framework/resources/Functional/DataPrecision/22.e new file mode 100644 index 000000000..0ddb73818 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/22.e @@ -0,0 +1 @@ +4523214.78 diff --git a/framework/resources/Functional/DataPrecision/22.q b/framework/resources/Functional/DataPrecision/22.q new file mode 100644 index 000000000..2b00a4315 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/22.q @@ -0,0 +1 @@ +select cast(4523214.76 as float); diff --git a/framework/resources/Functional/DataPrecision/23.e b/framework/resources/Functional/DataPrecision/23.e new file mode 100644 index 000000000..91513a511 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/23.e @@ -0,0 +1 @@ +1444.676677 diff --git a/framework/resources/Functional/DataPrecision/23.q b/framework/resources/Functional/DataPrecision/23.q new file mode 100644 index 000000000..4c4191211 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/23.q @@ -0,0 +1 @@ +select cast(1444.676676 as float); diff --git a/framework/resources/Functional/DataPrecision/24.e b/framework/resources/Functional/DataPrecision/24.e new file mode 100644 index 000000000..7aad717e1 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/24.e @@ -0,0 +1 @@ +1444.676676677 diff --git a/framework/resources/Functional/DataPrecision/24.q b/framework/resources/Functional/DataPrecision/24.q new file mode 100644 index 000000000..1e148a67e --- /dev/null +++ b/framework/resources/Functional/DataPrecision/24.q @@ -0,0 +1 @@ +select cast(1444.676676676 as double); diff --git a/framework/resources/Functional/DataPrecision/25.e b/framework/resources/Functional/DataPrecision/25.e new file mode 100644 index 000000000..f62b6dbc5 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/25.e @@ -0,0 +1 @@ +15833.67677 diff --git a/framework/resources/Functional/DataPrecision/25.q b/framework/resources/Functional/DataPrecision/25.q new file mode 100644 index 000000000..e6348ae04 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/25.q @@ -0,0 +1 @@ +select cast(15833.67676 as float); diff --git a/framework/resources/Functional/DataPrecision/26.e b/framework/resources/Functional/DataPrecision/26.e new file mode 100644 index 000000000..df9dd89fa --- /dev/null +++ b/framework/resources/Functional/DataPrecision/26.e @@ -0,0 +1 @@ +15833.676768 diff --git a/framework/resources/Functional/DataPrecision/26.q b/framework/resources/Functional/DataPrecision/26.q new file mode 100644 index 000000000..f8639c86a --- /dev/null +++ b/framework/resources/Functional/DataPrecision/26.q @@ -0,0 +1 @@ +select cast(15833.676767 as float); diff --git a/framework/resources/Functional/DataPrecision/27.e b/framework/resources/Functional/DataPrecision/27.e new file mode 100644 index 000000000..5531e1e6c --- /dev/null +++ b/framework/resources/Functional/DataPrecision/27.e @@ -0,0 +1 @@ +15833.6767677 diff --git a/framework/resources/Functional/DataPrecision/27.q b/framework/resources/Functional/DataPrecision/27.q new file mode 100644 index 000000000..5e4c088d4 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/27.q @@ -0,0 +1 @@ +select cast(15833.6767676 as double); diff --git a/framework/resources/Functional/DataPrecision/28.e b/framework/resources/Functional/DataPrecision/28.e new file mode 100644 index 000000000..6abbf82be --- /dev/null +++ b/framework/resources/Functional/DataPrecision/28.e @@ -0,0 +1 @@ +15833.67676768 diff --git a/framework/resources/Functional/DataPrecision/28.q b/framework/resources/Functional/DataPrecision/28.q new file mode 100644 index 000000000..54a410c24 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/28.q @@ -0,0 +1 @@ +select cast(15833.67676767 as double); diff --git a/framework/resources/Functional/DataPrecision/29.e b/framework/resources/Functional/DataPrecision/29.e new file mode 100644 index 000000000..43a75c5c1 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/29.e @@ -0,0 +1 @@ +15833.676767668 diff --git a/framework/resources/Functional/DataPrecision/29.q b/framework/resources/Functional/DataPrecision/29.q new file mode 100644 index 000000000..9f7bf9988 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/29.q @@ -0,0 +1 @@ +select cast(15833.676767667 as double); diff --git a/framework/resources/Functional/DataPrecision/3.e b/framework/resources/Functional/DataPrecision/3.e new file mode 100644 index 000000000..1f349cfed --- /dev/null +++ b/framework/resources/Functional/DataPrecision/3.e @@ -0,0 +1 @@ +0.0000006 diff --git a/framework/resources/Functional/DataPrecision/3.q b/framework/resources/Functional/DataPrecision/3.q new file mode 100644 index 000000000..628afee71 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/3.q @@ -0,0 +1 @@ +select cast(0.0000006 as double); diff --git a/framework/resources/Functional/DataPrecision/30.e b/framework/resources/Functional/DataPrecision/30.e new file mode 100644 index 000000000..9c1ae12d3 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/30.e @@ -0,0 +1 @@ +15833.67676766768 diff --git a/framework/resources/Functional/DataPrecision/30.q b/framework/resources/Functional/DataPrecision/30.q new file mode 100644 index 000000000..12bfe7b53 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/30.q @@ -0,0 +1 @@ +select cast(15833.67676766767 as double); diff --git a/framework/resources/Functional/DataPrecision/31.e b/framework/resources/Functional/DataPrecision/31.e new file mode 100644 index 000000000..3ff4f1d1b --- /dev/null +++ b/framework/resources/Functional/DataPrecision/31.e @@ -0,0 +1 @@ +233345.6767676768 diff --git a/framework/resources/Functional/DataPrecision/31.q b/framework/resources/Functional/DataPrecision/31.q new file mode 100644 index 000000000..8e46ff79f --- /dev/null +++ b/framework/resources/Functional/DataPrecision/31.q @@ -0,0 +1 @@ +select cast(233345.6767676767 as double); diff --git a/framework/resources/Functional/DataPrecision/32.e b/framework/resources/Functional/DataPrecision/32.e new file mode 100644 index 000000000..4a124a827 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/32.e @@ -0,0 +1 @@ +233345.676767676768 diff --git a/framework/resources/Functional/DataPrecision/32.q b/framework/resources/Functional/DataPrecision/32.q new file mode 100644 index 000000000..4d1f29e7a --- /dev/null +++ b/framework/resources/Functional/DataPrecision/32.q @@ -0,0 +1 @@ +select cast(233345.676767676767 as double); diff --git a/framework/resources/Functional/DataPrecision/4.e b/framework/resources/Functional/DataPrecision/4.e new file mode 100644 index 000000000..f088fe3cb --- /dev/null +++ b/framework/resources/Functional/DataPrecision/4.e @@ -0,0 +1 @@ +0.00000589 diff --git a/framework/resources/Functional/DataPrecision/4.q b/framework/resources/Functional/DataPrecision/4.q new file mode 100644 index 000000000..3bd71208d --- /dev/null +++ b/framework/resources/Functional/DataPrecision/4.q @@ -0,0 +1 @@ +select cast(0.00000689 as double); diff --git a/framework/resources/Functional/DataPrecision/5.e b/framework/resources/Functional/DataPrecision/5.e new file mode 100644 index 000000000..5e1644d44 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/5.e @@ -0,0 +1 @@ +0.0001689 diff --git a/framework/resources/Functional/DataPrecision/5.q b/framework/resources/Functional/DataPrecision/5.q new file mode 100644 index 000000000..8b0c2d20c --- /dev/null +++ b/framework/resources/Functional/DataPrecision/5.q @@ -0,0 +1 @@ +select cast(0.0000689 as float); diff --git a/framework/resources/Functional/DataPrecision/6.e b/framework/resources/Functional/DataPrecision/6.e new file mode 100644 index 000000000..4b9ab931e --- /dev/null +++ b/framework/resources/Functional/DataPrecision/6.e @@ -0,0 +1 @@ +0.000009 diff --git a/framework/resources/Functional/DataPrecision/6.q b/framework/resources/Functional/DataPrecision/6.q new file mode 100644 index 000000000..4d9b56790 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/6.q @@ -0,0 +1 @@ +select cast(0.000006 as float); diff --git a/framework/resources/Functional/DataPrecision/7.e b/framework/resources/Functional/DataPrecision/7.e new file mode 100644 index 000000000..622b01b7e --- /dev/null +++ b/framework/resources/Functional/DataPrecision/7.e @@ -0,0 +1 @@ +0.005 diff --git a/framework/resources/Functional/DataPrecision/7.q b/framework/resources/Functional/DataPrecision/7.q new file mode 100644 index 000000000..282bc38b0 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/7.q @@ -0,0 +1 @@ +select cast(0.00689 as float); diff --git a/framework/resources/Functional/DataPrecision/8.e b/framework/resources/Functional/DataPrecision/8.e new file mode 100644 index 000000000..d501721c9 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/8.e @@ -0,0 +1 @@ +0.00008 diff --git a/framework/resources/Functional/DataPrecision/8.q b/framework/resources/Functional/DataPrecision/8.q new file mode 100644 index 000000000..316ee4671 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/8.q @@ -0,0 +1 @@ +select cast(0.00006 as float); diff --git a/framework/resources/Functional/DataPrecision/9.e b/framework/resources/Functional/DataPrecision/9.e new file mode 100644 index 000000000..e9ced6621 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/9.e @@ -0,0 +1 @@ +0.00037 diff --git a/framework/resources/Functional/DataPrecision/9.q b/framework/resources/Functional/DataPrecision/9.q new file mode 100644 index 000000000..067d4e25a --- /dev/null +++ b/framework/resources/Functional/DataPrecision/9.q @@ -0,0 +1 @@ +select cast(0.0005 as float); diff --git a/framework/resources/Functional/DataPrecision/dataprecison.json b/framework/resources/Functional/DataPrecision/dataprecison.json new file mode 100755 index 000000000..90c3fb8a1 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/dataprecison.json @@ -0,0 +1,22 @@ +{ + "testId": "dataprecision", + "type": "group", + "description": "Test data precision queries via jdbc", + "submit-type": "jdbc", + "categories": [ + "dataprecision" + ], + "matrices": [ + { + "query-file": ".*.q", + "schema": "dfs.root", + "output-format": "tsv", + "expected-file": ".*.e", + "verification-type": [ + "in-memory" + ] + } + ], + "datasources": [ + ] +} diff --git a/framework/src/main/java/org/apache/drill/test/framework/CmdParam.java b/framework/src/main/java/org/apache/drill/test/framework/CmdParam.java index 887ed99b0..4e3312cd2 100644 --- a/framework/src/main/java/org/apache/drill/test/framework/CmdParam.java +++ b/framework/src/main/java/org/apache/drill/test/framework/CmdParam.java @@ -63,7 +63,7 @@ public class CmdParam { public double precisionFloat = 1.0E-6; @Parameter(names = {"-pD"}, description = "precision value for double values", required=false) - public double precisionDouble = 1.0E-12; + public double precisionDouble = 1.0E-7; @Parameter(names = {"-w"}, description = "enable write actual query result to file", required=false) public boolean outputQueryResult = false; diff --git a/framework/src/main/java/org/apache/drill/test/framework/ColumnList.java b/framework/src/main/java/org/apache/drill/test/framework/ColumnList.java index d4434905f..b8fb968b0 100644 --- a/framework/src/main/java/org/apache/drill/test/framework/ColumnList.java +++ b/framework/src/main/java/org/apache/drill/test/framework/ColumnList.java @@ -21,6 +21,7 @@ import java.sql.Types; import java.util.List; + /** * Class modeling a row in a ResultSet. It also stores a values of types of each * cell shared by all rows in a given ResultSet. @@ -161,12 +162,7 @@ public int compare(ColumnList o1, ColumnList o2) { if ((f1 + f2) / 2 != 0) { if (!(Math.abs((f1 - f2) / ((f1 + f2) / 2)) < TestDriver.cmdParam.precisionFloat)){ if (!(Math.abs((f1 - f2) / ((f1 + f2) / 2)) < TestDriver.cmdParam.precisionFloat*10)){ - if (!(Math.abs((f1 - f2) / ((f1 + f2) / 2)) < TestDriver.cmdParam.precisionFloat*100)){ - return 0; - } - else{ - return -1;//data precision error - } + return 0; } else{ return -1; From ea6a1c7158770cde6675c83ce00c27eddce045f3 Mon Sep 17 00:00:00 2001 From: Kedar Sankar Behera Date: Fri, 1 Mar 2019 15:49:38 -0800 Subject: [PATCH 3/5] Modification in Column List to highlight the 1st column giving the Data precision error --- .../resources/Functional/DataPrecision/16.e | 2 +- .../resources/Functional/DataPrecision/16.q | 2 +- .../drill/test/framework/ColumnList.java | 24 +++++++++++++++---- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/framework/resources/Functional/DataPrecision/16.e b/framework/resources/Functional/DataPrecision/16.e index 46e84be3d..ae955c69d 100644 --- a/framework/resources/Functional/DataPrecision/16.e +++ b/framework/resources/Functional/DataPrecision/16.e @@ -1 +1 @@ -1.78788 +1.78787 1.78788 diff --git a/framework/resources/Functional/DataPrecision/16.q b/framework/resources/Functional/DataPrecision/16.q index 9be6ed108..75ade1416 100644 --- a/framework/resources/Functional/DataPrecision/16.q +++ b/framework/resources/Functional/DataPrecision/16.q @@ -1 +1 @@ -select cast(1.78787 as float); +select cast(1.78787 as float),cast(1.78787 as float); diff --git a/framework/src/main/java/org/apache/drill/test/framework/ColumnList.java b/framework/src/main/java/org/apache/drill/test/framework/ColumnList.java index b8fb968b0..f8029e936 100644 --- a/framework/src/main/java/org/apache/drill/test/framework/ColumnList.java +++ b/framework/src/main/java/org/apache/drill/test/framework/ColumnList.java @@ -19,7 +19,7 @@ import java.math.BigDecimal; import java.sql.Types; -import java.util.List; +import java.util.*; /** @@ -32,10 +32,14 @@ public class ColumnList { private final List values; private final List types; private final boolean Simba; + //array of every row when data precision errors + private final List flags; + private int precisionErrorFlag; public static final String SIMBA_JDBC = "sjdbc"; public ColumnList(List types, List values) { this.values = values; this.types = types; + flags = new ArrayList<>(Collections.nCopies(values.size(), 0)); if (TestDriver.cmdParam.driverExt != null && TestDriver.cmdParam.driverExt.equals(ColumnList.SIMBA_JDBC)) { this.Simba = true; @@ -117,7 +121,10 @@ public String toString() { values.set(i, s1); } } - sb.append(values.get(i) + "\t"); + if(precisionErrorFlag == 1 && flags.get(i) == 1) + sb.append("\""+values.get(i)+"\"" + "\t"); + else + sb.append(values.get(i) + "\t"); } int type = (Integer) (types.get(values.size()-1)); if (Simba && (type == Types.VARCHAR)) { @@ -133,8 +140,11 @@ public String toString() { values.set(values.size()-1, s1); } } - sb.append(values.get(values.size() - 1)); - return sb.toString(); + if(precisionErrorFlag == 1 && flags.get(values.size() - 1) == 1) + sb.append("\""+values.get(values.size() - 1)+"\""); + else + sb.append(values.get(values.size() - 1)); + return sb.toString(); } public int compare(ColumnList o1, ColumnList o2) { @@ -165,6 +175,8 @@ public int compare(ColumnList o1, ColumnList o2) { return 0; } else{ + precisionErrorFlag = 1; + flags.set(i,1); return -1; } //return false; @@ -187,10 +199,14 @@ public int compare(ColumnList o1, ColumnList o2) { return 0; } else{ + precisionErrorFlag = 1; + flags.set(i,1); return -1; } } else{ + precisionErrorFlag = 1; + flags.set(i,1); return -1; } //return false; From 3fbc46c66232c98c5cb2f4c73f7cf3da62acd59a Mon Sep 17 00:00:00 2001 From: Kedar Sankar Behera Date: Tue, 12 Mar 2019 11:54:28 -0700 Subject: [PATCH 4/5] Changes --- .../main/java/org/apache/drill/test/framework/ColumnList.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/framework/src/main/java/org/apache/drill/test/framework/ColumnList.java b/framework/src/main/java/org/apache/drill/test/framework/ColumnList.java index f8029e936..fde134825 100644 --- a/framework/src/main/java/org/apache/drill/test/framework/ColumnList.java +++ b/framework/src/main/java/org/apache/drill/test/framework/ColumnList.java @@ -175,6 +175,8 @@ public int compare(ColumnList o1, ColumnList o2) { return 0; } else{ + if(Math.abs(f1-f2)>0.01) + return 0; precisionErrorFlag = 1; flags.set(i,1); return -1; @@ -199,6 +201,8 @@ public int compare(ColumnList o1, ColumnList o2) { return 0; } else{ + if(Math.abs(d1-d2)>0.01) + return 0; precisionErrorFlag = 1; flags.set(i,1); return -1; From 454625a151f5259cc1c6fb45c2d4f0fea74859f5 Mon Sep 17 00:00:00 2001 From: Kedar Sankar Behera Date: Tue, 12 Mar 2019 17:00:26 -0700 Subject: [PATCH 5/5] New 33rd test in data precision tests --- framework/resources/Functional/DataPrecision/33.e | 1 + framework/resources/Functional/DataPrecision/33.q | 1 + .../main/java/org/apache/drill/test/framework/TestDriver.java | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 framework/resources/Functional/DataPrecision/33.e create mode 100644 framework/resources/Functional/DataPrecision/33.q diff --git a/framework/resources/Functional/DataPrecision/33.e b/framework/resources/Functional/DataPrecision/33.e new file mode 100644 index 000000000..5edbd266c --- /dev/null +++ b/framework/resources/Functional/DataPrecision/33.e @@ -0,0 +1 @@ +1.67666767E8 diff --git a/framework/resources/Functional/DataPrecision/33.q b/framework/resources/Functional/DataPrecision/33.q new file mode 100644 index 000000000..a5ac99294 --- /dev/null +++ b/framework/resources/Functional/DataPrecision/33.q @@ -0,0 +1 @@ +select cast(1.67676767E8 as double); diff --git a/framework/src/main/java/org/apache/drill/test/framework/TestDriver.java b/framework/src/main/java/org/apache/drill/test/framework/TestDriver.java index f32325e8e..186c6a432 100644 --- a/framework/src/main/java/org/apache/drill/test/framework/TestDriver.java +++ b/framework/src/main/java/org/apache/drill/test/framework/TestDriver.java @@ -555,7 +555,7 @@ else if(ii Execution Failures : " + executionFailures.size()); LOG.info("> Data Verification Failures : " + dataVerificationFailures.size()); - LOG.info("> Data Precision Failures : " + dataPrecisionFailures.size()); + LOG.info("> Data Precision Failures : " + dataPrecisionFailures.size()); LOG.info("> Plan Verification Failures : " + planVerificationFailures.size()); LOG.info("> Timeout Failures : " + timeoutFailures.size());