示例#1
0
 public static IGeometry GetShapeCopy([NotNull] IRow row,
                                      [CanBeNull] RelatedTables relatedTables)
 {
     return(relatedTables == null
                                ? GetShapeCopy(row)
                                : relatedTables.GetGeometry(row));
 }
示例#2
0
        protected IList <InvolvedRow> GetInvolvedRows([NotNull] ITableIndexRow tableIndexRow)
        {
            IRow          row     = tableIndexRow.GetRow(InvolvedTables);
            RelatedTables related = GetRelatedTables(row);

            return(related?.GetInvolvedRows(row) ?? new[] { new InvolvedRow(row) });
        }
示例#3
0
        private static int CompareRelatedRows([NotNull] IRow row0,
                                              [NotNull] IRow row1,
                                              [NotNull] RelatedTables relTables)
        {
            IList <InvolvedRow> relatedList0 = relTables.GetInvolvedRows(row0);
            IList <InvolvedRow> relatedList1 = relTables.GetInvolvedRows(row1);

            int relatedCount = relatedList0.Count;

            Assert.AreEqual(relatedCount, relatedList1.Count, "Invalid involved rows");

            for (var idxRelated = 0; idxRelated < relatedCount; idxRelated++)
            {
                InvolvedRow relatedRow0 = relatedList0[idxRelated];
                InvolvedRow relatedRow1 = relatedList1[idxRelated];

                Assert.AreEqual(relatedRow0.TableName, relatedRow1.TableName,
                                "Involved Rows not sorted");

                int relOidDifference = relatedRow0.OID - relatedRow1.OID;
                if (relOidDifference != 0)
                {
                    return(relOidDifference);
                }
            }

            return(0);
        }
示例#4
0
        public int Compare(IRow row0, IRow row1)
        {
            if (row0 == row1)
            {
                return(0);
            }

            int oidDifference = row0.OID - row1.OID;

            if (oidDifference != 0)
            {
                return(oidDifference);
            }

            // oids are equal
            ITable table0 = row0.Table;
            ITable table1 = row1.Table;

            if (table0 == table1)
            {
                RelatedTables relTables = _relatedTablesProvider.GetRelatedTables(row0);
                return(relTables == null
                                               ? 0
                                               : CompareRelatedRows(row0, row1, relTables));
            }

            // TODO names might not be unique (if multiple workspaces are involved)
            string name0 = ((IDataset)table0).Name;
            string name1 = ((IDataset)table1).Name;

            return(string.Compare(name0, name1, StringComparison.Ordinal));
        }
示例#5
0
        public void SetRelatedTables([NotNull] IList <ITable> relatedTables)
        {
            Assert.True(_tables.Count == 1,
                        "Related tables are not supported for multiple test tables");

            _relatedTables = RelatedTables.Create(relatedTables, _tables[0]);
        }
示例#6
0
        public void AddRelatedTables([NotNull] ITable joined,
                                     [NotNull] IList <ITable> related)
        {
            Assert.ArgumentNotNull(joined, nameof(joined));
            Assert.ArgumentNotNull(related, nameof(related));

            if (_dictRelated == null)
            {
                _dictRelated = new Dictionary <ITable, RelatedTables>();
            }

            RelatedTables relatedTables = RelatedTables.Create(related, joined);

            _dictRelated.Add(joined, relatedTables);
        }
示例#7
0
            /// <summary>
            /// Initializes a new instance of the <see cref="DistinctValueGroupStatistics"/> class.
            /// </summary>
            /// <param name="groupExpression">The group expression.</param>
            /// <param name="minDistinctCount">The min distinct count.</param>
            /// <param name="maxDistinctCount">The max distinct count.</param>
            /// <param name="tableNames">The table names.</param>
            /// <param name="relatedTables">The related tables (optional).</param>
            /// <param name="relatedOidFields">The related oid fields (optional).</param>
            public DistinctValueGroupStatistics(
                [NotNull] string groupExpression,
                int minDistinctCount,
                int?maxDistinctCount,
                [NotNull] IList <string> tableNames,
                [CanBeNull] RelatedTables relatedTables,
                [CanBeNull] IDictionary <RelatedTable, int> relatedOidFields)
            {
                Assert.ArgumentNotNull(groupExpression, nameof(groupExpression));
                Assert.ArgumentNotNull(tableNames, nameof(tableNames));

                _groupExpression  = groupExpression;
                _minDistinctCount = minDistinctCount;
                _maxDistinctCount = maxDistinctCount;
                _tableNames       = tableNames;
                _relatedTables    = relatedTables;
                _relatedOidFields = relatedOidFields;
            }
示例#8
0
        /// <summary>
        /// Get involved rows related to IRow
        /// </summary>
        /// <param name="row"></param>
        /// <returns></returns>
        protected IList <InvolvedRow> GetInvolvedRows([NotNull] IRow row)
        {
            RelatedTables related = GetRelatedTables(row);

            return(related?.GetInvolvedRows(row) ?? new[] { new InvolvedRow(row) });
        }