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

jackietien pushed a commit to branch tsbs/iot
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/tsbs/iot by this push:
     new ad1b38d8161 take null attribute into account
ad1b38d8161 is described below

commit ad1b38d81614f1d40c3afcb19bef2f04ae61970e
Author: JackieTien97 <[email protected]>
AuthorDate: Tue May 7 20:58:09 2024 +0800

    take null attribute into account
---
 .../protocol/thrift/impl/ClientRPCServiceImpl.java | 24 +++++++--------
 .../apache/iotdb/db/utils/QueryDataSetUtils.java   | 36 +++++++++++++---------
 2 files changed, 33 insertions(+), 27 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
index f026e3f1d99..f1c02d96852 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
@@ -277,8 +277,6 @@ public class ClientRPCServiceImpl implements 
IClientRPCServiceWithHandler {
 
   private static final String NOMINAL_FUEL_CONSUMPTION_COLUMN_NAME = 
"nominal_fuel_consumption";
 
-  private static final String FUEL_CAPACITY_COLUMN_NAME = "fuel_capacity";
-
   private static final String FLEET_COLUMN_NAME = "fleet";
 
   private static final String MODEL_COLUMN_NAME = "model";
@@ -531,17 +529,15 @@ public class ClientRPCServiceImpl implements 
IClientRPCServiceWithHandler {
   private volatile Map<String, DeviceAttributes> deviceAttributesHashMap = 
null;
 
   public static class DeviceAttributes {
-    public final double nominalFuelConsumption;
+    public final Double nominalFuelConsumption;
 
-    public final double loadCapacity;
+    public final Double loadCapacity;
 
-    public final double fuelCapacity;
 
     public DeviceAttributes(
-        double nominalFuelConsumption, double loadCapacity, double 
fuelCapacity) {
+        Double nominalFuelConsumption, Double loadCapacity) {
       this.nominalFuelConsumption = nominalFuelConsumption;
       this.loadCapacity = loadCapacity;
-      this.fuelCapacity = fuelCapacity;
     }
   }
 
@@ -2558,9 +2554,12 @@ public class ClientRPCServiceImpl implements 
IClientRPCServiceWithHandler {
                         String key = tmpArray[0].substring(1, 
tmpArray[0].length() - 1);
                         String value = tmpArray[1].substring(1, 
tmpArray[1].length() - 1);
                         if (NOMINAL_FUEL_CONSUMPTION_COLUMN_NAME.equals(key)
-                            || LOAD_CAPACITY_COLUMN_NAME.equals(key)
-                            || FUEL_CAPACITY_COLUMN_NAME.equals(key)) {
-                          parsedMap.put(key, Double.parseDouble(value));
+                            || LOAD_CAPACITY_COLUMN_NAME.equals(key)) {
+                          try {
+                            parsedMap.put(key, Double.parseDouble(value));
+                          } catch (NumberFormatException e) {
+                            // ignore
+                          }
                         }
                       }
                     }
@@ -2569,9 +2568,8 @@ public class ClientRPCServiceImpl implements 
IClientRPCServiceWithHandler {
                     tmp.put(
                         timeSeries.substring(16, timeSeries.length() - 5),
                         new DeviceAttributes(
-                            
parsedMap.getOrDefault(NOMINAL_FUEL_CONSUMPTION_COLUMN_NAME, 1.0d),
-                            parsedMap.getOrDefault(LOAD_CAPACITY_COLUMN_NAME, 
1.0d),
-                            parsedMap.getOrDefault(FUEL_CAPACITY_COLUMN_NAME, 
1.0d)));
+                            
parsedMap.get(NOMINAL_FUEL_CONSUMPTION_COLUMN_NAME),
+                            parsedMap.get(LOAD_CAPACITY_COLUMN_NAME)));
                   }
                 }
               }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/QueryDataSetUtils.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/QueryDataSetUtils.java
index 94a7dfa182d..1fd6ae0c756 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/QueryDataSetUtils.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/QueryDataSetUtils.java
@@ -908,9 +908,9 @@ public class QueryDataSetUtils {
           String driver = seriesArray[DRIVER_LEVEL];
           double value =
               
Double.parseDouble(valueColumn.getBinary(i).getStringValue(StandardCharsets.UTF_8));
-          double loadCapacity = deviceAttributesMap.get(name).loadCapacity;
+          Double loadCapacity = deviceAttributesMap.get(name).loadCapacity;
 
-          if (value >= 0.9 * loadCapacity) {
+          if (loadCapacity != null && value >= 0.9 * loadCapacity) {
             builder.declarePosition();
             // time column
             timeColumnBuilder.writeLong(tsBlock.getTimeByIndex(i));
@@ -1037,8 +1037,10 @@ public class QueryDataSetUtils {
           String[] seriesArray = deviceId.split("\\.");
           String model = seriesArray[MODEL_LEVEL];
           String name = seriesArray[NAME_LEVEL];
-          double nominalFuelConsumption = 
deviceAttributesMap.get(name).nominalFuelConsumption;
-
+          Double nominalFuelConsumption = 
deviceAttributesMap.get(name).nominalFuelConsumption;
+          if (nominalFuelConsumption == null) {
+            continue;
+          }
           AvgIntermediateResult result =
               map.computeIfAbsent(model, k -> new AvgIntermediateResult());
           long count = countFuelColumn.getLong(i);
@@ -1341,12 +1343,14 @@ public class QueryDataSetUtils {
           String model = deviceArray[MODEL_LEVEL];
           String name = deviceArray[NAME_LEVEL];
           double avgLoad = avgLoadColumn.getDouble(i);
-          double loadCapacity = deviceAttributesMap.get(name).loadCapacity;
+          Double loadCapacity = deviceAttributesMap.get(name).loadCapacity;
           AvgLoadKey key = new AvgLoadKey(fleet, model, loadCapacity);
           AvgLoadIntermediateResult intermediateResult =
               map.computeIfAbsent(key, k -> new AvgLoadIntermediateResult());
-          intermediateResult.sum += (avgLoad / loadCapacity);
-          intermediateResult.count++;
+          if (loadCapacity != null) {
+            intermediateResult.sum += (avgLoad / loadCapacity);
+            intermediateResult.count++;
+          }
         }
       }
     }
@@ -1365,8 +1369,13 @@ public class QueryDataSetUtils {
           timeColumnBuilder.writeLong(0L);
           fleetColumnBuilder.writeBinary(new Binary(k.fleet, 
StandardCharsets.UTF_8));
           modelColumnBuilder.writeBinary(new Binary(k.model, 
StandardCharsets.UTF_8));
-          loadCapacityColumnBuilder.writeDouble(k.loadCapacity);
-          avgLoadColumnBuilder.writeDouble(v.sum / v.count);
+          if (k.loadCapacity == null) {
+            loadCapacityColumnBuilder.appendNull();
+            avgLoadColumnBuilder.appendNull();
+          } else {
+            loadCapacityColumnBuilder.writeDouble(k.loadCapacity);
+            avgLoadColumnBuilder.writeDouble(v.sum / v.count);
+          }
         });
 
     builder.declarePositions(size);
@@ -1389,9 +1398,9 @@ public class QueryDataSetUtils {
 
     private final String model;
 
-    private final double loadCapacity;
+    private final Double loadCapacity;
 
-    public AvgLoadKey(String fleet, String model, double loadCapacity) {
+    public AvgLoadKey(String fleet, String model, Double loadCapacity) {
       this.fleet = fleet;
       this.model = model;
       this.loadCapacity = loadCapacity;
@@ -1406,9 +1415,8 @@ public class QueryDataSetUtils {
         return false;
       }
       AvgLoadKey that = (AvgLoadKey) o;
-      return Double.compare(loadCapacity, that.loadCapacity) == 0
-          && Objects.equals(fleet, that.fleet)
-          && Objects.equals(model, that.model);
+      return Objects.equals(fleet, that.fleet) && Objects.equals(model, 
that.model) &&
+          Objects.equals(loadCapacity, that.loadCapacity);
     }
 
     @Override

Reply via email to