@Override public ORawBuffer readRecord(OStorage storage, ORecordId rid, String fetchPlan, boolean ignoreCache, final int recordVersion) throws ORecordNotFoundException { return storage.readRecord(rid, fetchPlan, ignoreCache, prefetchRecords, null).getResult(); } }
@Override public ORawBuffer call(ODatabaseDocumentInternal database) { return database.getStorage().readRecord(rid, null, true, false, null).getResult(); } });
@Override public ORawBuffer call(ODatabaseDocumentInternal database) { return database.getStorage().readRecord(rid2, null, true, false, null).getResult(); } });
byte[] storedContent = storage.readRecord(rid, null, false, false, null).getResult().getBuffer();
@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; }
ORecordId id = new ORecordId(rid); if (!(currentDatabase.getStorage() instanceof OLocalPaginatedStorage)) { record = currentDatabase.getStorage().readRecord(rid, null, false, false, null).getResult(); if (record != null) { String content;