in tablestore/src/main/java/com/alicloud/openservices/tablestore/core/protocol/timeseries/TimeseriesProtocolBuilder.java [97:194]
public static int buildRowToRowGroupOffset(TimeseriesRow row, FlatBufferBuilder fbb, String timeseriesTableName, Cache<String, Long> timeseriesMetaCache) {
int fieldCount = row.getFields().size();
byte[] fieldValueTypes = new byte[fieldCount];
int[] fieldNameOffs = new int[fieldCount];
int idx = 0;
int longValueCount = 0;
int boolValueCount = 0;
int doubleValueCount = 0;
int stringValueCount = 0;
int binaryValueCount = 0;
for (Map.Entry<String, ColumnValue> entry : row.getFields().entrySet()) {
fieldNameOffs[idx] = fbb.createString(entry.getKey());
switch (entry.getValue().getType()) {
case INTEGER: {
fieldValueTypes[idx] = DataType.LONG;
longValueCount++;
break;
}
case BOOLEAN: {
fieldValueTypes[idx] = DataType.BOOLEAN;
boolValueCount++;
break;
}
case DOUBLE: {
fieldValueTypes[idx] = DataType.DOUBLE;
doubleValueCount++;
break;
}
case STRING: {
fieldValueTypes[idx] = DataType.STRING;
stringValueCount++;
break;
}
case BINARY: {
fieldValueTypes[idx] = DataType.BINARY;
binaryValueCount++;
break;
}
default:
throw new IllegalStateException();
}
idx++;
}
long[] longValues = new long[longValueCount];
boolean[] boolValues = new boolean[boolValueCount];
double[] doubleValues = new double[doubleValueCount];
int[] strValueOffs = new int[stringValueCount];
int[] binaryValueOffs = new int[binaryValueCount];
longValueCount = 0;
boolValueCount = 0;
doubleValueCount = 0;
stringValueCount = 0;
binaryValueCount = 0;
for (Map.Entry<String, ColumnValue> entry : row.getFields().entrySet()) {
switch (entry.getValue().getType()) {
case INTEGER: {
longValues[longValueCount++] = entry.getValue().asLong();
break;
}
case BOOLEAN: {
boolValues[boolValueCount++] = entry.getValue().asBoolean();
break;
}
case DOUBLE: {
doubleValues[doubleValueCount++] = entry.getValue().asDouble();
break;
}
case STRING: {
strValueOffs[stringValueCount++] = fbb.createString(entry.getValue().asString());
break;
}
case BINARY: {
binaryValueOffs[binaryValueCount++] = BytesValue.createBytesValue(fbb,
BytesValue.createValueVector(fbb, entry.getValue().asBinary()));
break;
}
default:
throw new IllegalStateException();
}
}
int fieldValueOff = FieldValues.createFieldValues(fbb,
longValueCount == 0 ? 0 : FieldValues.createLongValuesVector(fbb, longValues),
boolValueCount == 0 ? 0 : FieldValues.createBoolValuesVector(fbb, boolValues),
doubleValueCount == 0 ? 0 : FieldValues.createDoubleValuesVector(fbb, doubleValues),
stringValueCount == 0 ? 0 : FieldValues.createStringValuesVector(fbb, strValueOffs),
binaryValueCount == 0 ? 0 : FieldValues.createBinaryValuesVector(fbb, binaryValueOffs));
int[] rowInGroupOffs = new int[1];
Long updateTimeInSec = timeseriesMetaCache.getIfPresent(row.getTimeseriesKey().buildMetaCacheKey(timeseriesTableName));
long updateTime = updateTimeInSec == null ? 0 : updateTimeInSec;
rowInGroupOffs[0] = FlatBufferRowInGroup.createFlatBufferRowInGroup(fbb,
row.getTimeseriesKey().getDataSource() == null ? fbb.createString("") : fbb.createString(row.getTimeseriesKey().getDataSource()),
fbb.createString(""),
row.getTimeInUs(), fieldValueOff, updateTime, buildTags(row.getTimeseriesKey().getTags(), fbb));
return FlatBufferRowGroup.createFlatBufferRowGroup(fbb, fbb.createString(row.getTimeseriesKey().getMeasurementName()),
FlatBufferRowGroup.createFieldNamesVector(fbb, fieldNameOffs),
FlatBufferRowGroup.createFieldTypesVector(fbb, fieldValueTypes),
FlatBufferRowGroup.createRowsVector(fbb, rowInGroupOffs));
}