private static IFeatureWorkspace CreateTestWorkspace(
            [NotNull] string fgdbName,
            [NotNull] string fcName, [NotNull] string tableName, [NotNull] string relClassName,
            [NotNull] out IFeatureClass fc,
            [NotNull] out ITable table,
            [NotNull] out IRelationshipClass rc)
        {
            IFeatureWorkspace ws = TestWorkspaceUtils.CreateTestFgdbWorkspace(fgdbName);

            ISpatialReference sref = SpatialReferenceUtils.CreateSpatialReference(
                (int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95, true);

            fc = DatasetUtils.CreateSimpleFeatureClass(
                ws, fcName, null,
                FieldUtils.CreateOIDField(),
                FieldUtils.CreateIntegerField("FKEY"),
                FieldUtils.CreateShapeField(
                    "SHAPE", esriGeometryType.esriGeometryPoint,
                    sref, 1000));

            table = DatasetUtils.CreateTable(ws, tableName,
                                             FieldUtils.CreateOIDField(),
                                             FieldUtils.CreateTextField("TEXT", 100));

            rc = TestWorkspaceUtils.CreateSimple1NRelationship(
                ws, relClassName,
                table, (ITable)fc,
                table.OIDFieldName, "FKEY");

            return(ws);
        }
Exemple #2
0
        private static void CanDetect1ToNUnique([NotNull] IFeatureWorkspace workspace)
        {
            const string uniqueFieldName = "Unique";

            ITable tableOrig;
            {
                IFieldsEdit fields = new FieldsClass();
                fields.AddField(FieldUtils.CreateOIDField());
                fields.AddField(FieldUtils.CreateField(
                                    uniqueFieldName, esriFieldType.esriFieldTypeInteger));
                ITable table = TestWorkspaceUtils.CreateSimpleTable(
                    workspace, "Relate1NUnique1", fields);
                for (var i = 0; i < 10; i++)
                {
                    IRow row = table.CreateRow();
                    row.set_Value(1, i);
                    row.Store();
                }

                tableOrig = table;
            }
            ITable tableRel;
            {
                IFieldsEdit fields = new FieldsClass();
                fields.AddField(FieldUtils.CreateOIDField());
                fields.AddField(FieldUtils.CreateField(
                                    "Ref", esriFieldType.esriFieldTypeInteger));
                ITable table = TestWorkspaceUtils.CreateSimpleTable(
                    workspace, "Relate1NUnique2", fields);
                for (var i = 0; i < 10; i++)
                {
                    IRow row = table.CreateRow();
                    row.set_Value(1, i);
                    row.Store();
                }

                tableRel = table;
            }
            IRelationshipClass rel =
                TestWorkspaceUtils.CreateSimple1NRelationship(workspace,
                                                              "rel1NUnique", tableOrig,
                                                              tableRel, uniqueFieldName, "Ref");

            ITable relTab = TableJoinUtils.CreateQueryTable(rel, JoinType.InnerJoin);

            foreach (bool forceInMemoryTableSort in new[] { true, false })
            {
                var test = new QaUnique(relTab, "Relate1NUnique1." + uniqueFieldName)
                {
                    ForceInMemoryTableSorting = forceInMemoryTableSort
                };

                var runner = new QaTestRunner(test);
                runner.Execute();
                AssertUtils.NoError(runner);
            }
        }
        private static void TestRelGroupContraints(IFeatureWorkspace ws)
        {
            ITable tableData =
                DatasetUtils.CreateTable(ws, "TblData1",
                                         FieldUtils.CreateOIDField(),
                                         FieldUtils.CreateField("GroupField",
                                                                esriFieldType
                                                                .esriFieldTypeInteger));

            ITable tableRel = DatasetUtils.CreateTable(ws, "TblRel1",
                                                       FieldUtils.CreateOIDField(),
                                                       FieldUtils.CreateTextField(
                                                           "Kostenstelle", 20));

            IRelationshipClass rel = TestWorkspaceUtils.CreateSimple1NRelationship(
                ws, "rel", tableRel, tableData, "ObjectId", "GroupField");

            // make sure the table is known by the workspace
            ((IWorkspaceEdit)ws).StartEditing(false);
            ((IWorkspaceEdit)ws).StopEditing(true);

            for (int i = 0; i < 20; i++)
            {
                IRow row = tableData.CreateRow();
                row.set_Value(1, 1);
                row.Store();
            }

            for (int i = 0; i < 40; i++)
            {
                IRow row = tableData.CreateRow();
                row.set_Value(1, 2);
                row.Store();
            }

            for (int i = 0; i < 30; i++)
            {
                IRow row = tableData.CreateRow();
                row.set_Value(1, 3);
                row.Store();
            }

            IRow row1 = tableRel.CreateRow();

            row1.set_Value(1, "123456-10");
            row1.Store();

            IRow row2 = tableRel.CreateRow();

            row2.set_Value(1, "123456-11");
            row2.Store();

            IRow row3 = tableRel.CreateRow();

            row3.set_Value(1, "123456-12");
            row3.Store();

            const bool limitToTestedRows = false;
            ITable     relTab            = TableJoinUtils.CreateQueryTable(rel, JoinType.InnerJoin);

            var test = new QaGroupConstraints(relTab,
                                              "IIF(LEN(TblRel1.Kostenstelle) >=6, SUBSTRING(TblRel1.Kostenstelle, 1, 6), '')",
                                              "SUBSTRING(TblRel1.Kostenstelle, 8, 9)", 1,
                                              limitToTestedRows);

            test.SetRelatedTables(new[] { tableData, tableRel });
            using (var runner = new QaTestRunner(test))
            {
                runner.Execute();
                Assert.AreEqual(1, runner.Errors.Count);
            }

            var containerRunner = new QaContainerTestRunner(100, test);

            containerRunner.Execute();
            Assert.AreEqual(1, containerRunner.Errors.Count);
        }
Exemple #4
0
        private static ITable CanDetect1toNNonUnique([NotNull] IFeatureWorkspace workspace)
        {
            ITable tableOrig;
            {
                IFieldsEdit fields = new FieldsClass();
                fields.AddField(FieldUtils.CreateOIDField());
                fields.AddField(FieldUtils.CreateField(
                                    "Unique", esriFieldType.esriFieldTypeInteger));
                ITable table = TestWorkspaceUtils.CreateSimpleTable(
                    workspace, "Relate1NNonUnique1", fields);

                for (var i = 0; i < 10; i++)
                {
                    IRow row = table.CreateRow();
                    row.set_Value(1, i);
                    row.Store();
                }

                tableOrig = table;
            }
            ITable tableRel;
            {
                IFieldsEdit fields = new FieldsClass();
                fields.AddField(FieldUtils.CreateOIDField());
                fields.AddField(FieldUtils.CreateField(
                                    "Ref", esriFieldType.esriFieldTypeInteger));
                ITable table = TestWorkspaceUtils.CreateSimpleTable(
                    workspace, "Relate1NNonUnique2", fields);
                for (var i = 0; i < 10; i++)
                {
                    IRow row = table.CreateRow();
                    row.set_Value(1, i);
                    row.Store();
                }

                {
                    IRow row = table.CreateRow();
                    row.set_Value(1, 5);
                    row.Store();
                }
                {
                    IRow row = table.CreateRow();
                    row.set_Value(1, 5);
                    row.Store();
                }
                {
                    IRow row = table.CreateRow();
                    row.set_Value(1, 7);
                    row.Store();
                }
                tableRel = table;
            }
            IRelationshipClass rel = TestWorkspaceUtils.CreateSimple1NRelationship(
                workspace, "rel1NNonUnique", tableOrig, tableRel, "Unique", "Ref");

            ITable relTab = TableJoinUtils.CreateQueryTable(rel, JoinType.InnerJoin);

            foreach (bool forceInMemoryTableSort in new[] { true, false })
            {
                var test = new QaUnique(relTab, "Relate1NNonUnique1.Unique")
                {
                    ForceInMemoryTableSorting = forceInMemoryTableSort
                };

                test.SetRelatedTables(new[] { tableOrig, tableRel });

                var runner = new QaTestRunner(test);
                runner.Execute();
                Assert.AreEqual(5, runner.Errors.Count);
            }

            return(relTab);
        }
Exemple #5
0
        public void TestRelatedFactoryMinParameters()
        {
            IFeatureWorkspace testWs = RelTestWs;

            const string  fkTable = "fkTable";
            IFeatureClass fc1     = CreateLineClass(
                testWs, "Fc1_" + Environment.TickCount,
                new List <IField> {
                FieldUtils.CreateIntegerField(fkTable)
            });
            IFeatureClass fc2 = CreateLineClass(testWs, "Fc2_" + Environment.TickCount);

            var ds1 = (IDataset)fc1;
            var ds2 = (IDataset)fc2;

            IFieldsEdit fields = new FieldsClass();

            fields.AddField(FieldUtils.CreateOIDField());
            const string IdField = "IdRel";

            fields.AddField(FieldUtils.CreateIntegerField(IdField));

            string relTableName = "Rel_" + ds1.Name;
            ITable relTable     = TestWorkspaceUtils.CreateSimpleTable(testWs, relTableName,
                                                                       fields);

            var dsRel = (IDataset)relTable;

            string             relName = "relName" + Environment.TickCount;
            IRelationshipClass rel     = TestWorkspaceUtils.CreateSimple1NRelationship(
                testWs, relName, relTable, (ITable)fc1, relTable.OIDFieldName, fkTable);

            ((IWorkspaceEdit)testWs).StartEditing(false);

            IRow r1 = AddRow(relTable, new object[] { 12 });
            IRow r2 = AddRow(relTable, new object[] { 14 });

            IFeature f11 = AddFeature(
                fc1, CurveConstruction.StartLine(0, 0).LineTo(4, 0).Curve, new object[] { r1.OID });
            IFeature f12 = AddFeature(
                fc1, CurveConstruction.StartLine(0, 0).LineTo(4, 0).Curve, new object[] { r2.OID });
            IFeature f2 = AddFeature(fc2, CurveConstruction.StartLine(10, 1).LineTo(14, 1).Curve);

            ((IWorkspaceEdit)testWs).StopEditing(true);

            var     model  = new SimpleModel("model", fc1);
            Dataset mds1   = model.AddDataset(new ModelVectorDataset(ds1.Name));
            Dataset mdsRel = model.AddDataset(new ModelTableDataset(dsRel.Name));
            Dataset mds2   = model.AddDataset(new ModelVectorDataset(ds2.Name));

            var clsDesc   = new ClassDescriptor(typeof(QaRelMustBeNearOther));
            var tstDesc   = new TestDescriptor("testNear", clsDesc);
            var condition = new QualityCondition("cndNear", tstDesc);

            QualityConditionParameterUtils.AddParameterValue(condition, "relationTables", mds1);
            QualityConditionParameterUtils.AddParameterValue(condition, "relationTables", mdsRel,
                                                             $"{relTableName}.{IdField} = 12");             // --> only f11 get's checked
            QualityConditionParameterUtils.AddParameterValue(condition, "relation", relName);
            QualityConditionParameterUtils.AddParameterValue(condition, "join", JoinType.InnerJoin);
            QualityConditionParameterUtils.AddParameterValue(condition, "nearClasses", mds2);
            QualityConditionParameterUtils.AddParameterValue(condition, "maximumDistance", 5);
            QualityConditionParameterUtils.AddParameterValue(condition, "relevantRelationCondition",
                                                             string.Empty);

            var fact = new QaRelMustBeNearOther();

            fact.Condition = condition;

            IList <ITest> tests =
                fact.CreateTests(new SimpleDatasetOpener(model.MasterDatabaseWorkspaceContext));

            Assert.AreEqual(1, tests.Count);

            var runner = new QaContainerTestRunner(1000, tests[0]);

            runner.Execute();
            Assert.AreEqual(1, runner.Errors.Count);
        }