Browse Source

fix data convertion for BigInteger values(example: SIM, ICCID) that stored in DB as strings

pull/8002/head
ShvaykaD 4 years ago
parent
commit
8060c6780d
  1. 10
      dao/src/main/java/org/thingsboard/server/dao/sql/query/EntityDataAdapter.java
  2. 3
      dao/src/test/java/org/thingsboard/server/dao/sql/query/EntityDataAdapterTest.java

10
dao/src/main/java/org/thingsboard/server/dao/sql/query/EntityDataAdapter.java

@ -92,8 +92,9 @@ public class EntityDataAdapter {
}
try {
double dblVal = Double.parseDouble(strVal);
if (!Double.isInfinite(dblVal)) {
return Double.toString(dblVal);
String doubleAsString = Double.toString(dblVal);
if (!Double.isInfinite(dblVal) && isSimpleDouble(doubleAsString)) {
return doubleAsString;
}
} catch (NumberFormatException ignored) {
}
@ -104,4 +105,9 @@ public class EntityDataAdapter {
}
}
private static boolean isSimpleDouble(String valueAsString) {
return valueAsString.contains(".") && !valueAsString.contains("E") && !valueAsString.contains("e");
}
}

3
dao/src/test/java/org/thingsboard/server/dao/sql/query/EntityDataAdapterTest.java

@ -25,6 +25,7 @@ public class EntityDataAdapterTest {
public void testConvertValue() {
assertThat(EntityDataAdapter.convertValue("500")).isEqualTo("500");
assertThat(EntityDataAdapter.convertValue("500D")).isEqualTo("500D"); //do not convert to Double !!!
assertThat(EntityDataAdapter.convertValue("0101010521130565")).isEqualTo("0101010521130565");
assertThat(EntityDataAdapter.convertValue("0101010521130565")).isEqualTo("0101010521130565"); //do not convert to Double !!!
assertThat(EntityDataAdapter.convertValue("89010303310033979663")).isEqualTo("89010303310033979663"); //do not convert to Double !!!
}
}

Loading…
Cancel
Save