Beispiel #1
0
        public QaRowCount(
            [Doc(nameof(DocStrings.QaRowCount_table))][NotNull] ITable table,
            [Doc(nameof(DocStrings.QaRowCount_referenceTables))][NotNull]
            IList <ITable> referenceTables,
            [Doc(nameof(DocStrings.QaRowCount_minimumValueOffset))][CanBeNull]
            string minimumValueOffset,
            [Doc(nameof(DocStrings.QaRowCount_maximumValueOffset))][CanBeNull]
            string maximumValueOffset)
            : base(Union(new[] { table }, referenceTables))
        {
            Assert.ArgumentNotNull(table, nameof(table));
            Assert.ArgumentNotNull(referenceTables, nameof(referenceTables));

            _table           = table;
            _referenceTables = new List <ITable>(referenceTables);

            CultureInfo formatProvider = CultureInfo.InvariantCulture;

            _minimumValueOffset = OffsetSpecification.Parse(minimumValueOffset, formatProvider);
            _maximumValueOffset = OffsetSpecification.Parse(maximumValueOffset, formatProvider);

            Assert.ArgumentCondition(
                _minimumValueOffset != null || _maximumValueOffset != null,
                "At least one offset must be specified");
        }
Beispiel #2
0
        private int ReportErrors(int rowCount,
                                 int referenceRowCount,
                                 [CanBeNull] OffsetSpecification minimumValueOffset,
                                 [CanBeNull] OffsetSpecification maximumValueOffset)
        {
            if (minimumValueOffset != null)
            {
                var minimumRowCount =
                    (int)Math.Ceiling(minimumValueOffset.ApplyTo(referenceRowCount));

                if (rowCount < minimumRowCount)
                {
                    string description = string.Format(
                        "Row count is less than minimum value: {0:N0} < {1:N0} (reference row count: {2:N0})",
                        rowCount, minimumRowCount, referenceRowCount);

                    return(ReportError(description, _table, Codes[Code.TooFewRows], null));
                }
            }

            if (maximumValueOffset != null)
            {
                var maximumRowCount =
                    (int)Math.Floor(maximumValueOffset.ApplyTo(referenceRowCount));

                if (rowCount > maximumRowCount)
                {
                    string description = string.Format(
                        "Row count is greater than maximum value: {0:N0} > {1:N0} (reference row count: {2:N0})",
                        rowCount, maximumRowCount, referenceRowCount);

                    return(ReportError(description, _table, Codes[Code.TooManyRows], null));
                }
            }

            return(NoError);
        }