in core/src/main/java/com/jetbrains/youtrackdb/internal/core/serialization/serializer/record/binary/RecordSerializerBinaryV1.java [876:997]
protected Object deserializeValue(
DatabaseSessionEmbedded session, final BytesContainer bytes,
final PropertyTypeInternal type,
final RecordElement owner,
boolean justRunThrough,
ImmutableSchema schema) {
if (type == null) {
throw new DatabaseException(session.getDatabaseName(), "Invalid type value: null");
}
Object value = null;
switch (type) {
case INTEGER:
value = VarIntSerializer.readAsInteger(bytes);
break;
case LONG:
value = VarIntSerializer.readAsLong(bytes);
break;
case SHORT:
value = VarIntSerializer.readAsShort(bytes);
break;
case STRING:
if (justRunThrough) {
var length = VarIntSerializer.readAsInteger(bytes);
bytes.skip(length);
} else {
value = readString(bytes);
}
break;
case DOUBLE:
if (justRunThrough) {
bytes.skip(LongSerializer.LONG_SIZE);
} else {
value = Double.longBitsToDouble(readLong(bytes));
}
break;
case FLOAT:
if (justRunThrough) {
bytes.skip(IntegerSerializer.INT_SIZE);
} else {
value = Float.intBitsToFloat(readInteger(bytes));
}
break;
case BYTE:
if (justRunThrough) {
bytes.offset++;
} else {
value = readByte(bytes);
}
break;
case BOOLEAN:
if (justRunThrough) {
bytes.offset++;
} else {
value = readByte(bytes) == 1;
}
break;
case DATETIME:
if (justRunThrough) {
VarIntSerializer.readAsLong(bytes);
} else {
value = new Date(VarIntSerializer.readAsLong(bytes));
}
break;
case DATE:
if (justRunThrough) {
VarIntSerializer.readAsLong(bytes);
} else {
var savedTime = VarIntSerializer.readAsLong(bytes) * MILLISEC_PER_DAY;
savedTime =
convertDayToTimezone(
TimeZone.getTimeZone("GMT"), DateHelper.getDatabaseTimeZone(session), savedTime);
value = new Date(savedTime);
}
break;
case EMBEDDED:
value = deserializeEmbeddedAsDocument(session, bytes, owner);
break;
case EMBEDDEDSET:
value = readEmbeddedSet(session, bytes, owner);
break;
case EMBEDDEDLIST:
value = readEmbeddedList(session, bytes, owner);
break;
case LINKSET:
value = readLinkSet(session, bytes);
break;
case LINKLIST:
EntityLinkListImpl collectionList = null;
if (!justRunThrough) {
collectionList = new EntityLinkListImpl(owner);
}
value = readLinkCollection(bytes, collectionList, justRunThrough);
break;
case BINARY:
if (justRunThrough) {
var len = VarIntSerializer.readAsInteger(bytes);
bytes.skip(len);
} else {
value = readBinary(bytes);
}
break;
case LINK:
value = readOptimizedLink(bytes, justRunThrough);
break;
case LINKMAP:
value = readLinkMap(bytes, owner, justRunThrough);
break;
case EMBEDDEDMAP:
value = readEmbeddedMap(session, bytes, owner);
break;
case DECIMAL:
value = DecimalSerializer.staticDeserialize(bytes.bytes, bytes.offset);
bytes.skip(DecimalSerializer.staticGetObjectSize(bytes.bytes, bytes.offset));
break;
case LINKBAG:
var bag = readLinkBag(session, bytes);
bag.setOwner(owner);
value = bag;
break;
}
return value;
}