TypeInferenceUtils { public static TSDataType getPredictedDataType(Object value, boolean inferType) { if (inferType) { String strValue = value.toString(); if (isBoolean(strValue)) { return booleanStringInferType; } else if (isNumber(strValue)){ if (!strValue.contains(TsFileConstant.PATH_SEPARATOR)) { return integerStringInferType; } else { return floatingStringInferType; } } else if ("NaN".equals(strValue)) { return nanStringInferType; } else { return TSDataType.TEXT; } } else if (value instanceof Boolean) { return TSDataType.BOOLEAN; } else if (value instanceof Integer) { return TSDataType.INT32; } else if (value instanceof Long) { return TSDataType.INT64; } else if (value instanceof Float) { return TSDataType.FLOAT; } else if (value instanceof Double) { return TSDataType.DOUBLE; } return TSDataType.TEXT; } private  TypeInferenceUtils(); static TSDataType getPredictedDataType(Object value, boolean inferType);  }
@Test public void testInferType() { Object[] values = {123, "abc", 123.123d, true, 123.1f, "123", "12.2", "true"}; TSDataType[] encodings = {IoTDBDescriptor.getInstance().getConfig().getIntegerStringInferType(), TSDataType.TEXT, IoTDBDescriptor.getInstance().getConfig().getFloatingStringInferType(), TSDataType.BOOLEAN, TSDataType.FLOAT, IoTDBDescriptor.getInstance().getConfig().getIntegerStringInferType(), IoTDBDescriptor.getInstance().getConfig().getFloatingStringInferType(), IoTDBDescriptor.getInstance().getConfig().getBooleanStringInferType() }; for (int i = 0; i < values.length; i++) { assertEquals(encodings[i], TypeInferenceUtils.getPredictedDataType(values[i], true)); } }
@Test public void testNotInferType() { Object[] values = {123, "abc", 123.123d, true, 123.1f, "123", "12.2", "true"}; TSDataType[] encodings = {TSDataType.INT32, TSDataType.TEXT, TSDataType.DOUBLE, TSDataType.BOOLEAN, TSDataType.FLOAT, TSDataType.TEXT, TSDataType.TEXT, TSDataType.TEXT }; for (int i = 0; i < values.length; i++) { assertEquals(encodings[i], TypeInferenceUtils.getPredictedDataType(values[i], false)); } }