byte[] storedContent = storage.readRecord(rid, null, false, false, null).getResult().getBuffer();
recordContent = compression.uncompress(recordContent); return new ORawBuffer(recordContent, recordVersion, recordType);
recordContent = compression.uncompress(recordContent); return new ORawBuffer(recordContent, recordVersion, recordType);
@Override public byte[] onUpdate(OStorage storage, byte iRecordType, final ORecordId rid, final int iRecordVersion, final byte[] iRecordContent, final AtomicInteger iDatabaseVersion) { if (iRecordType == ODocument.RECORD_TYPE) { // No need lock, is already inside a lock. Use database to read temporary objects too OStorageOperationResult<ORawBuffer> res = storage.readRecord(rid, null, false, false, null); final ODocument storedRecord = new ODocument(rid).fromStream(res.getResult().getBuffer()); ODocument newRecord = (ODocument) ORecordSaveThreadLocal.getLast(); if (newRecord == null || !newRecord.getIdentity().equals(rid)) newRecord = new ODocument(rid).fromStream(iRecordContent); storedRecord.merge(newRecord, true, true); iDatabaseVersion.set(Math.max(iDatabaseVersion.get(), iRecordVersion) + 1); return storedRecord.toStream(); } else // NO DOCUMENT, CANNOT MERGE SO RELY TO THE VERSION CHECK checkVersions(rid, iRecordVersion, iDatabaseVersion.get()); return null; }
@Override public byte[] onUpdate(OStorage storage, final byte iRecordType, final ORecordId rid, final int iRecordVersion, final byte[] iRecordContent, final AtomicInteger iDatabaseVersion) { final boolean hasSameContent; if (iRecordType == ODocument.RECORD_TYPE) { // No need lock, is already inside a lock. OStorageOperationResult<ORawBuffer> res = storage.readRecord(rid, null, false, false, null); final ODocument storedRecord = new ODocument(rid).fromStream(res.getResult().getBuffer()); final ODocument newRecord = new ODocument().fromStream(iRecordContent); final ODatabaseDocumentInternal currentDb = ODatabaseRecordThreadLocal.instance().get(); hasSameContent = ODocumentHelper.hasSameContentOf(storedRecord, currentDb, newRecord, currentDb, null, false); } else { // CHECK BYTE PER BYTE final ORecordAbstract storedRecord = rid.getRecord(); hasSameContent = Arrays.equals(storedRecord.toStream(), iRecordContent); } if (hasSameContent) // OK iDatabaseVersion.set(Math.max(iDatabaseVersion.get(), iRecordVersion)); else // NO DOCUMENT, CANNOT MERGE SO RELY TO THE VERSION CHECK checkVersions(rid, iRecordVersion, iDatabaseVersion.get()); return null; }
throw new OSystemException("The record has been deleted"); if ("ORecordSerializerBinary".equals(currentDatabase.getSerializer().toString())) { byte[] buff = record.getBuffer(); ORecordSerializerBinaryDebug debugger = new ORecordSerializerBinaryDebug(); ORecordSerializationDebug deserializeDebug = debugger.deserializeDebug(buff, currentDatabase);