private void InsertOne(RamDriverChangeset changesetRec) { int docIndex; changesetRec.DocumentContainer.TryAddDocument(changesetRec.ChangeBuffer.InternalEntityId, out docIndex); UpdateAtPosition(changesetRec, changesetRec.ChangeBuffer, docIndex); }
private bool UpdateOne(RamDriverChangeset changesetRec) { int docIndex = 0; var entityId = changesetRec.ChangeBuffer.InternalEntityId; if (changesetRec.DocumentContainer.DocumentIdToIndex.TryGetValueInt32(entityId, ref docIndex)) { UpdateAtPosition(changesetRec, changesetRec.ChangeBuffer, docIndex); return(true); } return(false); }
private static void InvalidateIndexes(RamDriverChangeset changesetRec) { if (changesetRec.ChangeBuffer.ChangeType == DriverChangeType.Update || changesetRec.ChangeBuffer.ChangeType == DriverChangeType.Insert) { foreach (var field in changesetRec.ChangeBuffer.Fields) { changesetRec.DocumentContainer.SortIndexManager.InvalidateIndex(field.FieldId); } } else { changesetRec.DocumentContainer.SortIndexManager.InvalidateAllIndexes(); } }
private void UpdateAtPosition(RamDriverChangeset changesetRec, DriverChangeBuffer change, int docIndex) { var changeData = change.Data; for (var ordinal = 0; ordinal < change.Fields.Length; ordinal++) { var colStore = changesetRec.ColumnStores[ordinal]; if (BitVector.Get(changeData.NotNulls, ordinal)) { colStore.NotNulls.SafeSet(docIndex); var indexInArray = changeData.GetIndexInArray(ordinal); colStore.AssignFromDriverRow(docIndex, changeData, indexInArray); } else { colStore.NotNulls.SafeClear(docIndex); } } }
public long CreateChangeset(DriverChangeBuffer changeBuffer, bool isBulk) { CheckInitialized(); if (changeBuffer == null) { throw new ArgumentNullException("changeBuffer"); } var key = Interlocked.Increment(ref m_lastChangesetHandle); ColumnDataBase[] columnStores = null; var documentContainer = m_dataContainer.RequireDocumentContainer(changeBuffer.TargetEntity); if (changeBuffer.Fields != null && changeBuffer.Fields.Length > 0) { columnStores = new ColumnDataBase[changeBuffer.Fields.Length]; for (var i = 0; i < changeBuffer.Fields.Length; i++) { var field = changeBuffer.Fields[i]; columnStores[i] = documentContainer.RequireColumnStore(field.FieldId); } } var changesetRec = new RamDriverChangeset(this, changeBuffer, isBulk, documentContainer, columnStores); documentContainer.StructureLock.EnterReadLock(); try { if (!m_changesets.TryAdd(key, changesetRec)) { throw new Exception("Internal error"); } return(key); } catch { documentContainer.StructureLock.ExitReadLock(); throw; } }
private bool UpdateOne(RamDriverChangeset changesetRec) { int docIndex = 0; var entityId = changesetRec.ChangeBuffer.InternalEntityId; if (changesetRec.DocumentContainer.DocumentIdToIndex.TryGetValueInt32(entityId, ref docIndex)) { UpdateAtPosition(changesetRec, changesetRec.ChangeBuffer, docIndex); return true; } return false; }
private bool DeleteOne(RamDriverChangeset changesetRec) { return changesetRec.DocumentContainer.TryDeleteDocument(changesetRec.ChangeBuffer.InternalEntityId); }
public long CreateChangeset(DriverChangeBuffer changeBuffer, bool isBulk) { CheckInitialized(); if (changeBuffer == null) { throw new ArgumentNullException("changeBuffer"); } var key = Interlocked.Increment(ref m_lastChangesetHandle); ColumnDataBase[] columnStores = null; var documentContainer = m_dataContainer.RequireDocumentContainer(changeBuffer.TargetEntity); if (changeBuffer.Fields != null && changeBuffer.Fields.Length > 0) { columnStores = new ColumnDataBase[changeBuffer.Fields.Length]; for (var i = 0; i < changeBuffer.Fields.Length; i++) { var field = changeBuffer.Fields[i]; columnStores[i] = documentContainer.RequireColumnStore(field.FieldId); } } var changesetRec = new RamDriverChangeset(this, changeBuffer, isBulk, documentContainer, columnStores); documentContainer.StructureLock.EnterReadLock(); try { if (!m_changesets.TryAdd(key, changesetRec)) { throw new Exception("Internal error"); } return key; } catch { documentContainer.StructureLock.ExitReadLock(); throw; } }
private bool DeleteOne(RamDriverChangeset changesetRec) { return(changesetRec.DocumentContainer.TryDeleteDocument(changesetRec.ChangeBuffer.InternalEntityId)); }