public void TestNonUniqueIntegers() { IFieldsEdit fields = new FieldsClass(); fields.AddField(FieldUtils.CreateOIDField()); fields.AddField(FieldUtils.CreateField("Unique", esriFieldType.esriFieldTypeInteger)); ITable table = TestWorkspaceUtils.CreateSimpleTable(_pgdbWorkspace, "NonUnique", fields); for (var i = 0; i < 10; i++) { IRow row = table.CreateRow(); row.set_Value(1, i); row.Store(); } // create error values { IRow row = table.CreateRow(); row.set_Value(1, 5); row.Store(); } IRow errorRow = table.CreateRow(); errorRow.set_Value(1, 5); errorRow.Store(); { IRow row = table.CreateRow(); row.set_Value(1, 7); row.Store(); } IRow validRow = table.CreateRow(); validRow.set_Value(1, 12); validRow.Store(); foreach (bool forceInMemoryTableSort in new[] { true, false }) { // init Test var test = new QaUnique(table, "Unique") { ForceInMemoryTableSorting = forceInMemoryTableSort }; // Run global test var runner = new QaTestRunner(test); runner.Execute(); Assert.AreEqual(5, runner.Errors.Count); // each non unique row is reported // Run valid row runner = new QaTestRunner(test); runner.Execute(new[] { validRow }); AssertUtils.NoError(runner); // Run error row runner = new QaTestRunner(test); runner.Execute(new[] { errorRow }); Assert.AreEqual(3, runner.Errors.Count); // '5' exists in 3 rows // Run combined runner = new QaTestRunner(test); runner.Execute(new[] { validRow, errorRow }); Assert.AreEqual(3, runner.Errors.Count); } }
private static void CanDetectNtoMUnique([NotNull] IFeatureWorkspace workspace) { const string uniqueFieldName = "FIELD_UNIQUE"; const string foreignKeyFieldName = "FOREIGN_KEY_FIELD"; ITable tableOrig; { IFieldsEdit fields = new FieldsClass(); fields.AddField(FieldUtils.CreateOIDField()); fields.AddField(FieldUtils.CreateField(uniqueFieldName, esriFieldType.esriFieldTypeInteger)); ITable table = TestWorkspaceUtils.CreateSimpleTable(workspace, "RelateUnique1", fields, null); tableOrig = table; } ITable tableRel; { IFieldsEdit fields = new FieldsClass(); fields.AddField(FieldUtils.CreateOIDField()); fields.AddField(FieldUtils.CreateField(foreignKeyFieldName, esriFieldType.esriFieldTypeInteger)); ITable table = TestWorkspaceUtils.CreateSimpleTable(workspace, "RelateUnique2", fields, null); tableRel = table; } IRelationshipClass rel = TestWorkspaceUtils.CreateSimpleMNRelationship( workspace, "NToMRelTable", tableOrig, tableRel, uniqueFieldName, foreignKeyFieldName); { ((IWorkspaceEdit)workspace).StartEditing(false); for (var i = 0; i < 10; i++) { IRow row = tableOrig.CreateRow(); row.set_Value(1, i); row.Store(); } for (var i = 0; i < 10; i++) { IRow row = tableRel.CreateRow(); row.set_Value(1, i); row.Store(); rel.CreateRelationship((IObject)tableOrig.GetRow(i + 1), (IObject)row); } ((IWorkspaceEdit)workspace).StopEditing(true); } ITable relTab = TableJoinUtils.CreateQueryTable(rel, JoinType.InnerJoin); foreach (bool forceInMemoryTableSort in new[] { true, false }) { var test = new QaUnique(relTab, "RelateUnique1." + uniqueFieldName) { ForceInMemoryTableSorting = forceInMemoryTableSort }; var runner = new QaTestRunner(test); runner.Execute(); AssertUtils.NoError(runner); } }
public void CanTranslateSql() { IFeatureClass fc; ITable table; IRelationshipClass rc; CreateTestWorkspace( "CanTranslateSql_master", "fc", "table", "rc", out fc, out table, out rc); IFeatureClass fc_child; ITable table_child; IRelationshipClass rc_child; IFeatureWorkspace childWorkspace = CreateTestWorkspace( "CanTranslateSql_child", "fc_child", "table_child", "rc_child", out fc_child, out table_child, out rc_child); IRow t = table_child.CreateRow(); t.Value[table_child.FindField("TEXT")] = "table"; // same as table name int pk = t.OID; t.Store(); IFeature f = fc_child.CreateFeature(); f.Value[fc_child.FindField("FKEY")] = pk; f.Shape = GeometryFactory.CreatePoint(100, 200); f.Store(); var model = new SimpleModel("model", fc); ModelVectorDataset vectorDataset = model.AddDataset( new ModelVectorDataset(DatasetUtils.GetName(fc))); ModelTableDataset tableDataset = model.AddDataset( new ModelTableDataset(DatasetUtils.GetName(table))); AttributeHarvestingUtils.HarvestAttributes( vectorDataset, ModelElementUtils.GetMasterDatabaseWorkspaceContext(vectorDataset)); AttributeHarvestingUtils.HarvestAttributes( tableDataset, ModelElementUtils.GetMasterDatabaseWorkspaceContext(tableDataset)); ObjectAttribute fkAttribute = vectorDataset.GetAttribute("FKEY"); ObjectAttribute pkAttribute = tableDataset.GetAttribute(table.OIDFieldName); Assert.NotNull(fkAttribute); Assert.NotNull(pkAttribute); Association association = model.AddAssociation(new ForeignKeyAssociation(DatasetUtils.GetName(rc), AssociationCardinality.OneToMany, fkAttribute, pkAttribute)); var childWorkspaceContext = new SimpleWorkspaceContext( model, childWorkspace, new[] { new WorkspaceDataset("fc_child", null, vectorDataset), new WorkspaceDataset("table_child", null, tableDataset), }, new[] { new WorkspaceAssociation("rc_child", null, association) }); var clsDesc = new ClassDescriptor(typeof(QaRelConstraint)); var tstDesc = new TestDescriptor("RelConstraint", clsDesc); QualityCondition condition = new QualityCondition("fc_table_constraints", tstDesc); QualityConditionParameterUtils.AddParameterValue(condition, "relationTables", vectorDataset); QualityConditionParameterUtils.AddParameterValue(condition, "relationTables", tableDataset); QualityConditionParameterUtils.AddParameterValue(condition, "relation", "rc"); QualityConditionParameterUtils.AddParameterValue(condition, "join", JoinType.InnerJoin); QualityConditionParameterUtils.AddParameterValue(condition, "constraint", "(fc.OBJECTID = 1 AND table.OBJECTID = 1) AND (table.TEXT = 'table')"); var factory = new QaRelConstraint { Condition = condition }; ITest test = factory.CreateTests(new SimpleDatasetOpener(childWorkspaceContext))[0]; var runner = new QaContainerTestRunner(1000, test); runner.Execute(GeometryFactory.CreateEnvelope(0, 0, 1000, 1000)); AssertUtils.NoError(runner); }