You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by lt...@apache.org on 2019/05/24 11:35:15 UTC

[incubator-iotdb] branch fix_jira_100 created (now f632513)

This is an automated email from the ASF dual-hosted git repository.

lta pushed a change to branch fix_jira_100
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git.


      at f632513  fix jira issue 100

This branch includes the following new commits:

     new f632513  fix jira issue 100

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[incubator-iotdb] 01/01: fix jira issue 100

Posted by lt...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

lta pushed a commit to branch fix_jira_100
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit f632513637c3a7e0dc58b9cb8fb426831c60e8be
Author: lta <li...@163.com>
AuthorDate: Fri May 24 19:34:47 2019 +0800

    fix jira issue 100
---
 .../db/query/aggregation/AggregateFunction.java    |  1 -
 .../db/query/aggregation/impl/MeanAggrFunc.java    | 11 ++-
 .../db/query/aggregation/impl/SumAggrFunc.java     | 10 +++
 .../iotdb/db/integration/IoTDBAggregationIT.java   | 99 ++++++++++++++++++++--
 4 files changed, 110 insertions(+), 11 deletions(-)

diff --git a/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/AggregateFunction.java b/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/AggregateFunction.java
index a9bdba2..f50867f 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/AggregateFunction.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/AggregateFunction.java
@@ -131,5 +131,4 @@ public abstract class AggregateFunction {
   public TSDataType getResultDataType() {
     return resultDataType;
   }
-
 }
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MeanAggrFunc.java b/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MeanAggrFunc.java
index 5373018..5139c0b 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MeanAggrFunc.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MeanAggrFunc.java
@@ -34,6 +34,7 @@ public class MeanAggrFunc extends AggregateFunction {
   protected double sum = 0.0;
   private int cnt = 0;
   private TSDataType seriesDataType;
+  private static final String MEAN_AGGR_NAME = "MEAN";
 
   public MeanAggrFunc(TSDataType seriesDataType) {
     super(TSDataType.DOUBLE);
@@ -122,7 +123,8 @@ public class MeanAggrFunc extends AggregateFunction {
       case TEXT:
       case BOOLEAN:
       default:
-        throw new IOException("Unsupported data type in aggregation MEAN : " + type);
+        throw new IOException(
+            String.format("Unsupported data type in aggregation %s : %s", getAggreTypeName(), type));
     }
     cnt++;
   }
@@ -160,4 +162,11 @@ public class MeanAggrFunc extends AggregateFunction {
   public boolean isCalculatedAggregationResult() {
     return false;
   }
+
+  /**
+   * Return type name of aggregation
+   */
+  public String getAggreTypeName() {
+    return MEAN_AGGR_NAME;
+  }
 }
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/impl/SumAggrFunc.java b/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/impl/SumAggrFunc.java
index 3bb8d7d..e4311e8 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/impl/SumAggrFunc.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/impl/SumAggrFunc.java
@@ -24,6 +24,8 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 
 public class SumAggrFunc extends MeanAggrFunc {
 
+  private static final String SUM_AGGR_NAME = "SUM";
+
   public SumAggrFunc(TSDataType seriesDataType) {
     super(seriesDataType);
   }
@@ -34,4 +36,12 @@ public class SumAggrFunc extends MeanAggrFunc {
     resultData.setTimestamp(0);
     return resultData;
   }
+
+  /**
+   * Return type name of aggregation
+   */
+  @Override
+  public String getAggreTypeName() {
+    return SUM_AGGR_NAME;
+  }
 }
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBAggregationIT.java b/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBAggregationIT.java
index 47ff18c..2b637fd 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBAggregationIT.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBAggregationIT.java
@@ -54,7 +54,8 @@ public class IoTDBAggregationIT {
       "CREATE TIMESERIES root.vehicle.d0.s0 WITH DATATYPE=INT32, ENCODING=RLE",
       "CREATE TIMESERIES root.vehicle.d0.s1 WITH DATATYPE=INT64, ENCODING=RLE",
       "CREATE TIMESERIES root.vehicle.d0.s2 WITH DATATYPE=FLOAT, ENCODING=RLE",
-      "CREATE TIMESERIES root.vehicle.d0.s3 WITH DATATYPE=TEXT, ENCODING=PLAIN"
+      "CREATE TIMESERIES root.vehicle.d0.s3 WITH DATATYPE=TEXT, ENCODING=PLAIN",
+      "CREATE TIMESERIES root.vehicle.d0.s4 WITH DATATYPE=BOOLEAN, ENCODING=PLAIN"
   };
 
   private static String[] dataSet2 = new String[]{
@@ -74,8 +75,8 @@ public class IoTDBAggregationIT {
           + "values(5, 5.5, false, 55)"
   };
 
-  private String insertTemplate = "INSERT INTO root.vehicle.d0(timestamp,s0,s1,s2,s3)"
-      + " VALUES(%d,%d,%d,%f,%s)";
+  private String insertTemplate = "INSERT INTO root.vehicle.d0(timestamp,s0,s1,s2,s3,s4)"
+      + " VALUES(%d,%d,%d,%f,%s,%s)";
 
   private static final String TIMESTAMP_STR = "Time";
   private final String d0s0 = "root.vehicle.d0.s0";
@@ -483,6 +484,86 @@ public class IoTDBAggregationIT {
       }
       Assert.assertEquals(2, cnt);
       statement.close();
+
+
+      statement = connection.createStatement();
+      try {
+        hasResultSet = statement.execute("select sum(s3),mean(s2)" +
+            "from root.vehicle.d0 where time >= 6000 and time <= 9000");
+        Assert.assertTrue(hasResultSet);
+      } catch (Exception e) {
+        Assert.assertEquals("Unsupported data type in aggregation SUM : BOOLEAN", e.getMessage());
+        System.out.println(e.getMessage());
+        System.out.println();
+      }
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    } finally {
+      if (connection != null) {
+        connection.close();
+      }
+    }
+  }
+
+  @Test
+  public void meanSumErrorTest() throws SQLException {
+    Connection connection = null;
+    try {
+      connection = DriverManager.
+          getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute("select mean(s3)" +
+            "from root.vehicle.d0 where time >= 6000 and time <= 9000");
+        Assert.assertTrue(hasResultSet);
+        ResultSet resultSet = statement.getResultSet();
+      try {
+        resultSet.next();
+        fail();
+      } catch (Exception e) {
+        Assert.assertEquals("Unsupported data type in aggregation MEAN : TEXT", e.getMessage());
+      }
+      statement.close();
+
+      statement = connection.createStatement();
+      hasResultSet = statement.execute("select sum(s3)" +
+          "from root.vehicle.d0 where time >= 6000 and time <= 9000");
+      Assert.assertTrue(hasResultSet);
+      resultSet = statement.getResultSet();
+      try {
+        resultSet.next();
+        fail();
+      } catch (Exception e) {
+        Assert.assertEquals("Unsupported data type in aggregation SUM : TEXT", e.getMessage());
+      }
+      statement.close();
+
+      statement = connection.createStatement();
+      hasResultSet = statement.execute("select mean(s4)" +
+          "from root.vehicle.d0 where time >= 6000 and time <= 9000");
+      Assert.assertTrue(hasResultSet);
+      resultSet = statement.getResultSet();
+      try {
+        resultSet.next();
+        fail();
+      } catch (Exception e) {
+        Assert.assertEquals("Unsupported data type in aggregation MEAN : BOOLEAN", e.getMessage());
+      }
+      statement.close();
+
+      statement = connection.createStatement();
+      hasResultSet = statement.execute("select sum(s4)" +
+          "from root.vehicle.d0 where time >= 6000 and time <= 9000");
+      Assert.assertTrue(hasResultSet);
+      resultSet = statement.getResultSet();
+      try {
+        resultSet.next();
+        fail();
+      } catch (Exception e) {
+        Assert.assertEquals("Unsupported data type in aggregation SUM : BOOLEAN", e.getMessage());
+      }
+      statement.close();
     } catch (Exception e) {
       e.printStackTrace();
       fail(e.getMessage());
@@ -512,30 +593,30 @@ public class IoTDBAggregationIT {
       statement = connection.createStatement();
       // prepare BufferWrite file
       for (int i = 5000; i < 7000; i++) {
-        statement.execute(String.format(insertTemplate, i, i, i, (double) i, "\'" + i + "\'"));
+        statement.execute(String.format(insertTemplate, i, i, i, (double) i, "\'" + i + "\'", "true"));
       }
       statement.execute("flush");
       for (int i = 7500; i < 8500; i++) {
-        statement.execute(String.format(insertTemplate, i, i, i, (double) i, "\'" + i + "\'"));
+        statement.execute(String.format(insertTemplate, i, i, i, (double) i, "\'" + i + "\'", "false"));
       }
       statement.execute("flush");
       // prepare Unseq-File
       for (int i = 500; i < 1500; i++) {
-        statement.execute(String.format(insertTemplate, i, i, i, (double) i, "\'" + i + "\'"));
+        statement.execute(String.format(insertTemplate, i, i, i, (double) i, "\'" + i + "\'", "true"));
       }
       statement.execute("flush");
       for (int i = 3000; i < 6500; i++) {
-        statement.execute(String.format(insertTemplate, i, i, i, (double) i, "\'" + i + "\'"));
+        statement.execute(String.format(insertTemplate, i, i, i, (double) i, "\'" + i + "\'", "false"));
       }
       statement.execute("merge");
 
       // prepare BufferWrite cache
       for (int i = 9000; i < 10000; i++) {
-        statement.execute(String.format(insertTemplate, i, i, i, (double) i, "\'" + i + "\'"));
+        statement.execute(String.format(insertTemplate, i, i, i, (double) i, "\'" + i + "\'", "true"));
       }
       // prepare Overflow cache
       for (int i = 2000; i < 2500; i++) {
-        statement.execute(String.format(insertTemplate, i, i, i, (double) i, "\'" + i + "\'"));
+        statement.execute(String.format(insertTemplate, i, i, i, (double) i, "\'" + i + "\'", "false"));
       }
       statement.close();