in src/Apache.IoTDB/DataStructure/Tablet.cs [181:272]
public Tablet(
string deviceId,
List<string> measurements,
List<List<object>> values,
List<long> timestamps)
{
if (timestamps.Count != values.Count)
{
throw new Exception(
$"Input error. Timestamps.Count({timestamps.Count}) does not equal to Values.Count({values.Count}).",
null);
}
if (!_utilFunctions.IsSorted(timestamps))
{
var sorted = timestamps
.Select((x, index) => (timestamp: x, values: values[index]))
.OrderBy(x => x.timestamp).ToList();
_timestamps = sorted.Select(x => x.timestamp).ToList();
_values = sorted.Select(x => x.values).ToList();
}
else
{
_values = values;
_timestamps = timestamps;
}
InsertTargetName = deviceId;
Measurements = measurements;
RowNumber = timestamps.Count;
ColNumber = measurements.Count;
DataTypes = new List<TSDataType>();
for (int i = 0; i < ColNumber; i++)
{
bool columnAllNull = true;
for (int j = 0; j < RowNumber; j++)
{
if (_values[j][i] != null)
{
switch (_values[j][i])
{
case bool _:
DataTypes.Add(TSDataType.BOOLEAN);
break;
case int _:
DataTypes.Add(TSDataType.INT32);
break;
case long _:
DataTypes.Add(TSDataType.INT64);
break;
case float _:
DataTypes.Add(TSDataType.FLOAT);
break;
case double _:
DataTypes.Add(TSDataType.DOUBLE);
break;
case string _:
DataTypes.Add(TSDataType.TEXT);
break;
case byte[] _:
DataTypes.Add(TSDataType.BLOB);
break;
case DateTime _:
DataTypes.Add(TSDataType.DATE);
break;
default:
throw new Exception(
$"Input error. Data type {_values[j][i].GetType().Name} is not supported.",
null);
}
columnAllNull = false;
break;
}
}
if (columnAllNull)
{
throw new Exception($"Input error. Column {measurements[i]} of device {deviceId} is empty.", null);
}
}
// reset bitmap
if (BitMaps != null)
{
foreach (var bitmap in BitMaps)
{
if (bitmap != null)
{
bitmap.reset();
}
}
}
}