private IQueryFilter GetQueryFilter([NotNull] IFeatureClass featureClass,
                                            int tableIndex,
                                            [CanBeNull] IGeometry geometry)
        {
            Assert.ArgumentNotNull(featureClass, nameof(featureClass));

            string routeIdFieldName = GetRouteIdFieldName(featureClass, tableIndex);

            IQueryFilter result;

            if (geometry == null)
            {
                result = new QueryFilterClass();
            }
            else
            {
                result = new SpatialFilterClass
                {
                    GeometryField = featureClass.ShapeFieldName,
                    SpatialRel    = esriSpatialRelEnum.esriSpatialRelIntersects,
                    Geometry      = geometry
                };
            }

            result.WhereClause = GetWhereClause(tableIndex, routeIdFieldName);

            GdbQueryUtils.SetSubFields(result,
                                       featureClass.OIDFieldName,
                                       featureClass.ShapeFieldName,
                                       routeIdFieldName);

            return(result);
        }
Exemple #2
0
        private IQueryFilter CreateFilter([NotNull] IFeatureClass featureClass,
                                          [CanBeNull] string filterExpression)
        {
            IQueryFilter filter =
                new QueryFilterClass
            {
                SubFields   = _shapeFieldName,
                WhereClause =
                    GetWhereClause(featureClass, filterExpression,
                                   _dontFilterPolycurvesByZeroLength)
            };

            var subfields = new List <string> {
                _shapeFieldName
            };

            if (featureClass.HasOID)
            {
                subfields.Add(featureClass.OIDFieldName);
            }

            GdbQueryUtils.SetSubFields(filter, subfields);

            return(filter);
        }
Exemple #3
0
        private int ExecuteGeometry([CanBeNull] IGeometry geometry)
        {
            if (!_canHaveNonLinearSegments)
            {
                return(NoError);
            }

            IQueryFilter filter = TestUtils.CreateFilter(geometry, AreaOfInterest,
                                                         GetConstraint(0),
                                                         (ITable)_featureClass,
                                                         null);

            GdbQueryUtils.SetSubFields(filter,
                                       _featureClass.OIDFieldName,
                                       _featureClass.ShapeFieldName);

            int errorCount = 0;

            const bool recycle = true;

            foreach (IFeature feature in
                     GdbQueryUtils.GetFeatures(_featureClass, filter, recycle))
            {
                errorCount += VerifyFeature(feature);
            }

            return(errorCount);
        }
Exemple #4
0
        private static IQueryFilter GetQueryFilter([NotNull] IEnumerable <string> keyFields,
                                                   [CanBeNull] string whereClause)
        {
            var result = new QueryFilterClass {
                WhereClause = whereClause
            };

            GdbQueryUtils.SetSubFields(result, keyFields);

            return(result);
        }
Exemple #5
0
        private void EnsureReferenceInfos()
        {
            if (_referencingTableInfos != null)
            {
                return;
            }

            _referencedTableInfo = new ReferencedTableInfo(_referencedTable,
                                                           _referencedTableKey);
            _referencingTableInfos = new List <ReferencingTableInfo>();

            for (var i = 0; i < _referencingTables.Count; i++)
            {
                ITable referencingTable = _referencingTables[i];

                int    referencingTableIndex = i + 1;              // first index is referenced table
                string whereClause           = GetConstraint(referencingTableIndex);

                string relation = _relations[i];

                var referencingTableInfo = new ReferencingTableInfo(
                    referencingTable, relation, whereClause);

                bool supported =
                    KeySetUtils.IsSupportedTypeCombination(
                        _referencedTableInfo.KeyFieldType,
                        referencingTableInfo.ForeignKeyFieldType);

                Assert.ArgumentCondition(
                    supported,
                    "key fields have unsupported combination of types: " +
                    "referencing table = {0}, foreign key = {1}, referenced key = {2}",
                    ((IDataset)referencingTableInfo.Table).Name,
                    referencingTableInfo.ForeignKeyFieldType,
                    _referencedTableInfo.KeyFieldType);

                _referencingTableInfos.Add(referencingTableInfo);
            }

            _referencedTableFilter = new QueryFilterClass
            {
                WhereClause = GetConstraint(0)
            };

            GdbQueryUtils.SetSubFields(_referencedTableFilter,
                                       _referencedTableInfo.KeyFieldName,
                                       _referencedTable.OIDFieldName);
        }
            private IEnumerable <KeyValuePair <int, object> > LookupKeys(
                [NotNull] IEnumerable <int> oids)
            {
                string oidFieldName = _table.OIDFieldName;

                var queryFilter = new QueryFilterClass();

                GdbQueryUtils.SetSubFields(queryFilter, oidFieldName, KeyFieldName);

                const bool recycle = true;

                foreach (IRow row in GdbQueryUtils.GetRowsInList(
                             _table, oidFieldName, oids, recycle, queryFilter))
                {
                    yield return(new KeyValuePair <int, object>(row.OID, row.Value[_keyFieldIndex]));
                }
            }
Exemple #7
0
        private int ExecuteGeometry([CanBeNull] IGeometry geometry)
        {
            if (!(_referencedTable is IFeatureClass))
            {
                geometry = null;
            }

            //TODO use TableJoinUtils where appropriate
            IQueryFilter filter = TestUtils.CreateFilter(geometry, AreaOfInterest,
                                                         GetConstraint(0),
                                                         _referencedTable,
                                                         null);

            GdbQueryUtils.SetSubFields(filter,
                                       _referencedTable.OIDFieldName,
                                       _referencedTableKey);

            const bool recycle    = true;
            var        enumCursor = new EnumCursor(_referencedTable, filter, recycle);

            return(VerifyRows(enumCursor));
        }
Exemple #8
0
        private static IQueryFilter CreateQueryFilter(
            [CanBeNull] string filterExpression,
            [NotNull] string constraintField,
            [CanBeNull] string constraintDescriptionField)
        {
            IQueryFilter result = new QueryFilterClass
            {
                WhereClause = filterExpression,
                SubFields   = constraintField
            };

            var subfields = new List <string> {
                constraintField
            };

            if (StringUtils.IsNotEmpty(constraintDescriptionField))
            {
                subfields.Add(constraintDescriptionField);
            }

            GdbQueryUtils.SetSubFields(result, subfields);

            return(result);
        }
        private static ITable GetInvolvedTableAndQueryFilter(
            [NotNull] IObjectDataset involvedObjectDataset,
            [NotNull] IDatasetContext datasetContext,
            bool includeDateOfChangeField,
            [NotNull] out IQueryFilter queryFilter,
            out int dateOfChangeFieldIndex)
        {
            ITable result;

            try
            {
                result = datasetContext.OpenTable(involvedObjectDataset);
                Assert.NotNull(result, "Dataset not found in current context: {0}",
                               involvedObjectDataset.Name);
            }
            catch (Exception e)
            {
                string message;
                if (involvedObjectDataset.Deleted)
                {
                    message = string.Format(
                        "The dataset '{0}' referenced in allowed errors is registered as deleted, unable to open",
                        involvedObjectDataset.Name);
                }
                else
                {
                    message = string.Format(
                        "Error opening dataset '{0}' referenced in allowed errors: {1}",
                        involvedObjectDataset.Name,
                        e.Message);
                }

                throw new InvolvedTableOpenException(message, e);
            }

            queryFilter = new QueryFilterClass();

            var subfields = new List <string> {
                result.OIDFieldName
            };

            if (includeDateOfChangeField)
            {
                ObjectAttribute dateOfChangeAttribute =
                    involvedObjectDataset.GetAttribute(AttributeRole.DateOfChange);

                dateOfChangeFieldIndex =
                    dateOfChangeAttribute != null
                                                ? AttributeUtils.GetFieldIndex(result, dateOfChangeAttribute)
                                                : -1;

                if (dateOfChangeAttribute != null && dateOfChangeFieldIndex >= 0)
                {
                    subfields.Add(dateOfChangeAttribute.Name);
                }
            }
            else
            {
                dateOfChangeFieldIndex = -1;
            }

            GdbQueryUtils.SetSubFields(queryFilter, subfields);

            return(result);
        }