コード例 #1
0
        public DocumentDataContainerEnumerator_IndexScan(
            int untrimmedCount,
            DriverRowData rowData,
            DocumentDataContainer dataContainer,
            IReadOnlyList <FieldMetadata> fields,
            int countOfMainFields,
            SortIndex sortIndex,
            bool descending)
            : base(untrimmedCount, rowData, dataContainer, fields, countOfMainFields)
        {
            if (sortIndex == null)
            {
                throw new ArgumentNullException("sortIndex");
            }

            // note that we ignore value of sortIndex.IsValid here
            // that's because invalidation of index only happens when the data is stale
            // we only check state of an index and optionally update it in the beginning of processing pipeline
            if (sortIndex.OrderData == null || sortIndex.OrderData.Length > untrimmedCount)
            {
                throw new ArgumentException("Index on column is in invalid state", "sortIndex");
            }

            m_sortIndex     = sortIndex;
            m_descending    = descending;
            PositionInIndex = descending ? m_sortIndex.ValidDocCount : -1;

            ReadStructureAndTakeLocks();
        }
コード例 #2
0
        public DocumentDataContainer RequireDocumentContainer(int docType)
        {
            DocumentDataContainer docStore;

            if (m_documentDataContainers.TryGetValue(docType, out docStore))
            {
                return(docStore);
            }

            var doclock = m_documentDataContainerLocks[docType];

            lock (doclock)
            {
                if (!m_documentDataContainers.TryGetValue(docType, out docStore))
                {
                    docStore = new DocumentDataContainer(
                        m_dataContainerDescriptor,
                        m_dataContainerDescriptor.RequireDocumentType(docType),
                        m_memoryPool,
                        m_tracer);
                    if (!string.IsNullOrEmpty(m_storageRoot))
                    {
                        var stats = ReadStatsFromStore(m_storageRoot);
                        docStore.ReadDataFromStore(GetDocRootPath(m_storageRoot, m_dataContainerDescriptor.RequireDocumentType(docType)), stats.TryGetDocumentCount(docType));
                    }

                    m_documentDataContainers.Add(docType, docStore);
                }

                return(docStore);
            }
        }
        public DocumentDataContainerEnumerator_IndexScan(
            int untrimmedCount,
            DriverRowData rowData,
            DocumentDataContainer dataContainer,
            IReadOnlyList<FieldMetadata> fields,
            int countOfMainFields,
            SortIndex sortIndex,
            bool descending)
            : base(untrimmedCount, rowData, dataContainer, fields, countOfMainFields)
        {
            if (sortIndex == null)
            {
                throw new ArgumentNullException("sortIndex");
            }

            // note that we ignore value of sortIndex.IsValid here
            // that's because invalidation of index only happens when the data is stale
            // we only check state of an index and optionally update it in the beginning of processing pipeline
            if (sortIndex.OrderData == null || sortIndex.OrderData.Length > untrimmedCount)
            {
                throw new ArgumentException("Index on column is in invalid state", "sortIndex");
            }

            m_sortIndex = sortIndex;
            m_descending = descending;
            PositionInIndex = descending ? m_sortIndex.ValidDocCount : -1;

            ReadStructureAndTakeLocks();
        }
 public DocumentDataContainerEnumerator_FullScan(
     int untrimmedCount,
     DriverRowData rowData,
     DocumentDataContainer dataContainer,
     IReadOnlyList<FieldMetadata> fields,
     int countOfMainFields)
     : base(untrimmedCount, rowData, dataContainer, fields, countOfMainFields)
 {
     ReadStructureAndTakeLocks();
 }
コード例 #5
0
 public DocumentDataContainerEnumerator_FullScan(
     int untrimmedCount,
     DriverRowData rowData,
     DocumentDataContainer dataContainer,
     IReadOnlyList <FieldMetadata> fields,
     int countOfMainFields)
     : base(untrimmedCount, rowData, dataContainer, fields, countOfMainFields)
 {
     ReadStructureAndTakeLocks();
 }
        public DocumentDataContainerEnumerator_BulkPkScan(
            int untrimmedCount, DriverRowData rowData, DocumentDataContainer dataContainer, List<FieldMetadata> fields, IDriverDataEnumerator inputDataEnumerator)
            : base(untrimmedCount, rowData, dataContainer, fields, fields.Count - 1)
        {
            if (inputDataEnumerator == null)
            {
                throw new ArgumentNullException("inputDataEnumerator");
            }

            m_inputEnumerator = inputDataEnumerator;

            ReadStructureAndTakeLocks();
        }
コード例 #7
0
        public DocumentDataContainerEnumerator_BulkPkScan(
            int untrimmedCount, DriverRowData rowData, DocumentDataContainer dataContainer, List <FieldMetadata> fields, IDriverDataEnumerator inputDataEnumerator)
            :
            base(untrimmedCount, rowData, dataContainer, fields, fields.Count - 1)
        {
            if (inputDataEnumerator == null)
            {
                throw new ArgumentNullException("inputDataEnumerator");
            }

            m_inputEnumerator = inputDataEnumerator;

            ReadStructureAndTakeLocks();
        }
コード例 #8
0
        protected DocumentDataContainerEnumeratorBase(
            int untrimmedCount,
            DriverRowData rowData,
            DocumentDataContainer dataContainer,
            IReadOnlyList <FieldMetadata> fields,
            int countOfMainFields)
        {
            if (untrimmedCount < 0)
            {
                throw new ArgumentOutOfRangeException("untrimmedCount", untrimmedCount, "Untrimmed count cannot be negative");
            }

            if (rowData == null)
            {
                throw new ArgumentNullException("rowData");
            }

            if (dataContainer == null)
            {
                throw new ArgumentNullException("dataContainer");
            }

            if (fields == null)
            {
                throw new ArgumentNullException("fields");
            }

            if (CountOfMainFields < 0 || CountOfMainFields > fields.Count)
            {
                throw new ArgumentOutOfRangeException("countOfMainFields", countOfMainFields, "Invalid number of first-priority fetching fields");
            }

            Position          = -1;
            UntrimmedCount    = untrimmedCount;
            RowData           = rowData;
            DataContainer     = dataContainer;
            Fields            = fields;
            CountOfMainFields = countOfMainFields;

            RowDataOrdinalToColumnStoreIndex = new int[RowData.FieldTypes.Length];

            // ancestors must also invoke ReadStructureAndTakeLocks in their constructor
        }
コード例 #9
0
        protected DocumentDataContainerEnumeratorBase(
            int untrimmedCount,
            DriverRowData rowData,
            DocumentDataContainer dataContainer,
            IReadOnlyList<FieldMetadata> fields,
            int countOfMainFields)
        {
            if (untrimmedCount < 0)
            {
                throw new ArgumentOutOfRangeException("untrimmedCount", untrimmedCount, "Untrimmed count cannot be negative");
            }

            if (rowData == null)
            {
                throw new ArgumentNullException("rowData");
            }

            if (dataContainer == null)
            {
                throw new ArgumentNullException("dataContainer");
            }

            if (fields == null)
            {
                throw new ArgumentNullException("fields");
            }

            if (CountOfMainFields < 0 || CountOfMainFields > fields.Count)
            {
                throw new ArgumentOutOfRangeException("countOfMainFields", countOfMainFields, "Invalid number of first-priority fetching fields");
            }

            Position = -1;
            UntrimmedCount = untrimmedCount;
            RowData = rowData;
            DataContainer = dataContainer;
            Fields = fields;
            CountOfMainFields = countOfMainFields;

            RowDataOrdinalToColumnStoreIndex = new int[RowData.FieldTypes.Length];

            // ancestors must also invoke ReadStructureAndTakeLocks in their constructor
        }
コード例 #10
0
        public SortIndexManager(DocumentDataContainer documentStore)
        {
            if (documentStore == null)
            {
                throw new ArgumentNullException("documentStore");
            }

            m_documentStore = documentStore;
            m_fieldIdToIndexHandle = new ConcurrentDictionary<int, int>();

            if (m_documentStore.FieldIdToColumnStore.Count != m_documentStore.DocDesc.Fields.Length)
            {
                throw new Exception("Internal error: fieldid->colstore map and array of fields in document descriptor have different lengths");
            }

            m_fieldIndexes = new SortIndex[m_documentStore.FieldIdToColumnStore.Count];
            for (var ordinal = 0; ordinal < m_fieldIndexes.Length; ordinal++)
            {
                m_fieldIndexes[ordinal] = new SortIndex();
                m_fieldIdToIndexHandle[m_documentStore.DocDesc.Fields[ordinal]] = ordinal;
            }
        }
コード例 #11
0
        public SortIndexManager(DocumentDataContainer documentStore)
        {
            if (documentStore == null)
            {
                throw new ArgumentNullException("documentStore");
            }

            m_documentStore        = documentStore;
            m_fieldIdToIndexHandle = new ConcurrentDictionary <int, int>();

            if (m_documentStore.FieldIdToColumnStore.Count != m_documentStore.DocDesc.Fields.Length)
            {
                throw new Exception("Internal error: fieldid->colstore map and array of fields in document descriptor have different lengths");
            }

            m_fieldIndexes = new SortIndex[m_documentStore.FieldIdToColumnStore.Count];
            for (var ordinal = 0; ordinal < m_fieldIndexes.Length; ordinal++)
            {
                m_fieldIndexes[ordinal] = new SortIndex();
                m_fieldIdToIndexHandle[m_documentStore.DocDesc.Fields[ordinal]] = ordinal;
            }
        }
コード例 #12
0
        /// <summary>
        /// Ctr.
        /// </summary>
        public RamDriverChangeset(RamDriver driver, DriverChangeBuffer changeBuffer, bool isBulk, DocumentDataContainer documentContainer, ColumnDataBase[] columnStores)
        {
            if (driver == null)
            {
                throw new ArgumentNullException("driver");
            }

            if (changeBuffer == null)
            {
                throw new ArgumentNullException("changeBuffer");
            }

            if (documentContainer == null)
            {
                throw new ArgumentNullException("documentContainer");
            }

            Driver            = driver;
            ChangeBuffer      = changeBuffer;
            IsBulk            = isBulk;
            ColumnStores      = columnStores;
            DocumentContainer = documentContainer;
        }
コード例 #13
0
ファイル: RamDriver.cs プロジェクト: adrobyazko-softheme/PQL
        /// <summary>
        /// Ctr.
        /// </summary>
        public RamDriverChangeset(RamDriver driver, DriverChangeBuffer changeBuffer, bool isBulk, DocumentDataContainer documentContainer, ColumnDataBase[] columnStores)
        {
            if (driver == null)
            {
                throw new ArgumentNullException("driver");
            }

            if (changeBuffer == null)
            {
                throw new ArgumentNullException("changeBuffer");
            }

            if (documentContainer == null)
            {
                throw new ArgumentNullException("documentContainer");
            }

            Driver = driver;
            ChangeBuffer = changeBuffer;
            IsBulk = isBulk;
            ColumnStores = columnStores;
            DocumentContainer = documentContainer;
        }
コード例 #14
0
        public DocumentDataContainer RequireDocumentContainer(int docType)
        {
            DocumentDataContainer docStore;
            if (m_documentDataContainers.TryGetValue(docType, out docStore))
            {
                return docStore;
            }

            var doclock = m_documentDataContainerLocks[docType];
            lock (doclock)
            {
                if (!m_documentDataContainers.TryGetValue(docType, out docStore))
                {
                    docStore = new DocumentDataContainer(
                        m_dataContainerDescriptor,
                        m_dataContainerDescriptor.RequireDocumentType(docType),
                        m_memoryPool,
                        m_tracer);
                    if (!string.IsNullOrEmpty(m_storageRoot))
                    {
                        var stats = ReadStatsFromStore(m_storageRoot);
                        docStore.ReadDataFromStore(GetDocRootPath(m_storageRoot, m_dataContainerDescriptor.RequireDocumentType(docType)), stats.TryGetDocumentCount(docType));
                    }

                    m_documentDataContainers.Add(docType, docStore);
                }

                return docStore;
            }
        }