Ejemplo n.º 1
0
        private void InsertOne(RamDriverChangeset changesetRec)
        {
            int docIndex;

            changesetRec.DocumentContainer.TryAddDocument(changesetRec.ChangeBuffer.InternalEntityId, out docIndex);
            UpdateAtPosition(changesetRec, changesetRec.ChangeBuffer, docIndex);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
 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();
     }
 }
Ejemplo n.º 4
0
        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);
                }
            }
        }
Ejemplo n.º 5
0
        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;
            }
        }
Ejemplo n.º 6
0
 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;
 }
Ejemplo n.º 7
0
        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);
                }
            }
        }
Ejemplo n.º 8
0
 private void InsertOne(RamDriverChangeset changesetRec)
 {
     int docIndex;
     changesetRec.DocumentContainer.TryAddDocument(changesetRec.ChangeBuffer.InternalEntityId, out docIndex);
     UpdateAtPosition(changesetRec, changesetRec.ChangeBuffer, docIndex);
 }
Ejemplo n.º 9
0
 private bool DeleteOne(RamDriverChangeset changesetRec)
 {
     return changesetRec.DocumentContainer.TryDeleteDocument(changesetRec.ChangeBuffer.InternalEntityId);
 }
Ejemplo n.º 10
0
 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();
     }
 }
Ejemplo n.º 11
0
        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;
            }
        }
Ejemplo n.º 12
0
 private bool DeleteOne(RamDriverChangeset changesetRec)
 {
     return(changesetRec.DocumentContainer.TryDeleteDocument(changesetRec.ChangeBuffer.InternalEntityId));
 }