Skip to content

Commit f50b4d6

Browse files
authored
Merge pull request #282 from DataObjects-NET/master-ignore-indexes
Adds ability to ignore indexes as well as columns
2 parents 8096d82 + 866218e commit f50b4d6

15 files changed

+2258
-471
lines changed

ChangeLog/7.1.0-Beta-2-dev.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
[main] SqlCustomFunctionCall and SqlFunctionCall share one base type
1313
[main] SqlFunctionCall.Arguments property is IReadOnlyList now and parameters can't be changed after instance creation
1414
[main] Xtensive.Sql.Dml.Extensions.IsNullReference() extension method is marked obsolete, use 'is null' operator instead
15+
[main] IgnoreRule now has only one public constructor - parameterless
16+
[main] IgnoreRule supports indexes
1517
[main] BitFaster.Caching package reference is updated to 1.0.7
1618
[main] No error caused by ambiguity due to new IQueryable extension methods of .Net 6
1719
[reprocessing] DomainBuildErrorEventArgs (not sealed) became read-only structure

Orm/Xtensive.Orm.Tests/App.config

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,15 +125,22 @@
125125
<ignoreRules>
126126
<rule database="Other-DO40-Tests" schema="some-schema1" table="table1"/>
127127
<rule database="some-database" schema="some-schema2" column="column2"/>
128+
<rule database="some-database" schema="some-schema2" index="index2"/>
128129
<rule database="some-database" schema="some-schema3" table="table2" column="col3"/>
130+
<rule database="some-database" schema="some-schema3" table="table2" index="index3"/>
129131
<rule database="another-some-database" table="some-table" />
130132
<rule database="database1" column ="some-column"/>
133+
<rule database="database1" index ="some-index"/>
131134
<rule schema="schema1" table="table1"/>
132135
<rule schema="schema1" column="column2"/>
136+
<rule schema="schema1" index="index2" />
133137
<rule schema="schema1" table="table2" column="column3"/>
138+
<rule schema="schema1" table="table2" index="index3"/>
134139
<rule table="table4" column="column3"/>
140+
<rule table="table4" index ="index2" />
135141
<rule table="single-table"/>
136142
<rule column="single-column"/>
143+
<rule index ="single-index" />
137144
</ignoreRules>
138145
<databases>
139146
<database name="main" realName="DO40-Tests" />

Orm/Xtensive.Orm.Tests/Configuration/AppConfigTest.cs

Lines changed: 131 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,8 @@ public void IgnoreRuleConfigTest()
203203

204204
var good = configuration.Clone();
205205
good.IgnoreRules.Clear();
206-
good.IgnoreRules.IgnoreTable("ignored-table").WhenDatabase("Other-DO40-Test").WhenSchema("dbo");
207-
good.IgnoreRules.IgnoreColumn("ignored-column");
206+
_ = good.IgnoreRules.IgnoreTable("ignored-table").WhenDatabase("Other-DO40-Test").WhenSchema("dbo");
207+
_ = good.IgnoreRules.IgnoreColumn("ignored-column");
208208
good.Lock();
209209
}
210210

@@ -382,13 +382,136 @@ private void ValidateIgnoringConfiguration(DomainConfiguration configuration)
382382
{
383383
Assert.That(configuration.DefaultDatabase, Is.EqualTo("main"));
384384
Assert.That(configuration.DefaultSchema, Is.EqualTo("dbo"));
385-
Assert.That(configuration.IgnoreRules.Count, Is.EqualTo(11));
386-
var rule = configuration.IgnoreRules[0];
385+
386+
var rules = configuration.IgnoreRules;
387+
Assert.That(rules.Count, Is.EqualTo(18));
388+
389+
var rule = rules[0];
387390
Assert.That(rule.Database, Is.EqualTo("Other-DO40-Tests"));
388-
var rule2 = configuration.IgnoreRules[2];
389-
Assert.That(rule2.Schema, Is.EqualTo("some-schema3"));
390-
Assert.That(rule2.Table, Is.EqualTo("table2"));
391-
Assert.That(rule2.Column, Is.EqualTo("col3"));
391+
Assert.That(rule.Schema, Is.EqualTo("some-schema1"));
392+
Assert.That(rule.Table, Is.EqualTo("table1"));
393+
Assert.That(rule.Column, Is.Null.Or.Empty);
394+
Assert.That(rule.Index, Is.Null.Or.Empty);
395+
396+
rule = rules[1];
397+
Assert.That(rule.Database, Is.EqualTo("some-database"));
398+
Assert.That(rule.Schema, Is.EqualTo("some-schema2"));
399+
Assert.That(rule.Table, Is.Null.Or.Empty);
400+
Assert.That(rule.Column, Is.EqualTo("column2"));
401+
Assert.That(rule.Index, Is.Null.Or.Empty);
402+
403+
rule = rules[2];
404+
Assert.That(rule.Database, Is.EqualTo("some-database"));
405+
Assert.That(rule.Schema, Is.EqualTo("some-schema2"));
406+
Assert.That(rule.Table, Is.Null.Or.Empty);
407+
Assert.That(rule.Column, Is.Null.Or.Empty);
408+
Assert.That(rule.Index, Is.EqualTo("index2"));
409+
410+
rule = rules[3];
411+
Assert.That(rule.Database, Is.EqualTo("some-database"));
412+
Assert.That(rule.Schema, Is.EqualTo("some-schema3"));
413+
Assert.That(rule.Table, Is.EqualTo("table2"));
414+
Assert.That(rule.Column, Is.EqualTo("col3"));
415+
Assert.That(rule.Index, Is.Null.Or.Empty);
416+
417+
rule = rules[4];
418+
Assert.That(rule.Database, Is.EqualTo("some-database"));
419+
Assert.That(rule.Schema, Is.EqualTo("some-schema3"));
420+
Assert.That(rule.Table, Is.EqualTo("table2"));
421+
Assert.That(rule.Column, Is.Null.Or.Empty);
422+
Assert.That(rule.Index, Is.EqualTo("index3"));
423+
424+
rule = rules[5];
425+
Assert.That(rule.Database, Is.EqualTo("another-some-database"));
426+
Assert.That(rule.Schema, Is.Null.Or.Empty);
427+
Assert.That(rule.Table, Is.EqualTo("some-table"));
428+
Assert.That(rule.Column, Is.Null.Or.Empty);
429+
Assert.That(rule.Index, Is.Null.Or.Empty);
430+
431+
rule = rules[6];
432+
Assert.That(rule.Database, Is.EqualTo("database1"));
433+
Assert.That(rule.Schema, Is.Null.Or.Empty);
434+
Assert.That(rule.Table, Is.Null.Or.Empty);
435+
Assert.That(rule.Column, Is.EqualTo("some-column"));
436+
Assert.That(rule.Index, Is.Null.Or.Empty);
437+
438+
rule = rules[7];
439+
Assert.That(rule.Database, Is.EqualTo("database1"));
440+
Assert.That(rule.Schema, Is.Null.Or.Empty);
441+
Assert.That(rule.Table, Is.Null.Or.Empty);
442+
Assert.That(rule.Column, Is.Null.Or.Empty);
443+
Assert.That(rule.Index, Is.EqualTo("some-index"));
444+
445+
rule = rules[8];
446+
Assert.That(rule.Database, Is.Null.Or.Empty);
447+
Assert.That(rule.Schema, Is.EqualTo("schema1"));
448+
Assert.That(rule.Table, Is.EqualTo("table1"));
449+
Assert.That(rule.Column, Is.Null.Or.Empty);
450+
Assert.That(rule.Index, Is.Null.Or.Empty);
451+
452+
rule = rules[9];
453+
Assert.That(rule.Database, Is.Null.Or.Empty);
454+
Assert.That(rule.Schema, Is.EqualTo("schema1"));
455+
Assert.That(rule.Table, Is.Null.Or.Empty);
456+
Assert.That(rule.Column, Is.EqualTo("column2"));
457+
Assert.That(rule.Index, Is.Null.Or.Empty);
458+
459+
rule = rules[10];
460+
Assert.That(rule.Database, Is.Null.Or.Empty);
461+
Assert.That(rule.Schema, Is.EqualTo("schema1"));
462+
Assert.That(rule.Table, Is.Null.Or.Empty);
463+
Assert.That(rule.Column, Is.Null.Or.Empty);
464+
Assert.That(rule.Index, Is.EqualTo("index2"));
465+
466+
rule = rules[11];
467+
Assert.That(rule.Database, Is.Null.Or.Empty);
468+
Assert.That(rule.Schema, Is.EqualTo("schema1"));
469+
Assert.That(rule.Table, Is.EqualTo("table2"));
470+
Assert.That(rule.Column, Is.EqualTo("column3"));
471+
Assert.That(rule.Index, Is.Null.Or.Empty);
472+
473+
rule = rules[12];
474+
Assert.That(rule.Database, Is.Null.Or.Empty);
475+
Assert.That(rule.Schema, Is.EqualTo("schema1"));
476+
Assert.That(rule.Table, Is.EqualTo("table2"));
477+
Assert.That(rule.Column, Is.Null.Or.Empty);
478+
Assert.That(rule.Index, Is.EqualTo("index3"));
479+
480+
rule = rules[13];
481+
Assert.That(rule.Database, Is.Null.Or.Empty);
482+
Assert.That(rule.Schema, Is.Null.Or.Empty);
483+
Assert.That(rule.Table, Is.EqualTo("table4"));
484+
Assert.That(rule.Column, Is.EqualTo("column3"));
485+
Assert.That(rule.Index, Is.Null.Or.Empty);
486+
487+
rule = rules[14];
488+
Assert.That(rule.Database, Is.Null.Or.Empty);
489+
Assert.That(rule.Schema, Is.Null.Or.Empty);
490+
Assert.That(rule.Table, Is.EqualTo("table4"));
491+
Assert.That(rule.Column, Is.Null.Or.Empty);
492+
Assert.That(rule.Index, Is.EqualTo("index2"));
493+
494+
rule = rules[15];
495+
Assert.That(rule.Database, Is.Null.Or.Empty);
496+
Assert.That(rule.Schema, Is.Null.Or.Empty);
497+
Assert.That(rule.Table, Is.EqualTo("single-table"));
498+
Assert.That(rule.Column, Is.Null.Or.Empty);
499+
Assert.That(rule.Index, Is.Null.Or.Empty);
500+
501+
rule = rules[16];
502+
Assert.That(rule.Database, Is.Null.Or.Empty);
503+
Assert.That(rule.Schema, Is.Null.Or.Empty);
504+
Assert.That(rule.Table, Is.Null.Or.Empty);
505+
Assert.That(rule.Column, Is.EqualTo("single-column"));
506+
Assert.That(rule.Index, Is.Null.Or.Empty);
507+
508+
rule = rules[17];
509+
Assert.That(rule.Database, Is.Null.Or.Empty);
510+
Assert.That(rule.Schema, Is.Null.Or.Empty);
511+
Assert.That(rule.Table, Is.Null.Or.Empty);
512+
Assert.That(rule.Column, Is.Null.Or.Empty);
513+
Assert.That(rule.Index, Is.EqualTo("single-index"));
514+
392515
var databases = configuration.Databases;
393516
Assert.That(databases.Count, Is.EqualTo(2));
394517
Assert.That(databases[0].Name, Is.EqualTo("main"));
Lines changed: 39 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
// Copyright (C) 2003-2010 Xtensive LLC.
2-
// All rights reserved.
3-
// For conditions of distribution and use, see license.
1+
// Copyright (C) 2013-2022 Xtensive LLC.
2+
// This code is distributed under MIT license terms.
3+
// See the License.txt file in the project root for more information.
44
// Created by: Alena Mikshina
55
// Created: 2013.10.04
66

77
using System;
8-
using System.Collections.Generic;
98
using System.Diagnostics;
109
using System.IO;
1110
using System.Xml;
@@ -18,39 +17,41 @@ namespace Xtensive.Orm.Tests.Configuration
1817
[TestFixture]
1918
public class SchemaTest
2019
{
21-
private const string originalConfigFileName = "Xtensive.Orm.Tests.dll.config";
22-
private const string xsdFileName = "Xtensive.Orm.xsd";
23-
private const string xsdInLowerCaseFileName = "Test.xsd";
24-
private const string configFileName = "Test.config";
25-
private const string originalRootElementName = "AppConfigTest";
26-
private const string rootElementName = "Xtensive.Orm";
27-
private const string configXmlNamespace = "http://dataobjects.net/schemas/appconfig/";
20+
private const string OriginalConfigFileName = "Xtensive.Orm.Tests.dll.config";
21+
private const string XsdFileName = "Xtensive.Orm.xsd";
22+
private const string XsdInLowerCaseFileName = "Test.xsd";
23+
private const string ConfigFileName = "Test.config";
24+
private const string OriginalRootElementName = "AppConfigTest";
25+
private const string RootElementName = "Xtensive.Orm";
26+
private const string ConfigXmlNamespace = "http://dataobjects.net/schemas/appconfig/";
2827
private bool hasErrors;
2928

3029
[Test]
3130
public void TestSchema()
3231
{
3332
hasErrors = false;
3433

35-
XElement segmentConfig = XElement.Load(originalConfigFileName).Element(originalRootElementName);
36-
Debug.Assert(segmentConfig!=null, "segmentConfig != null");
37-
segmentConfig.Name = rootElementName;
34+
var segmentConfig = XElement.Load(OriginalConfigFileName).Element(OriginalRootElementName);
35+
Debug.Assert(segmentConfig != null, "segmentConfig != null");
36+
segmentConfig.Name = RootElementName;
3837

39-
foreach (XElement element in segmentConfig.DescendantsAndSelf())
40-
element.Name = (XNamespace) configXmlNamespace + element.Name.LocalName;
38+
foreach (var element in segmentConfig.DescendantsAndSelf()) {
39+
element.Name = (XNamespace) ConfigXmlNamespace + element.Name.LocalName;
40+
}
4141

42-
using (StreamWriter segmentConfigWriter = File.CreateText(configFileName))
42+
using (var segmentConfigWriter = File.CreateText(ConfigFileName)) {
4343
segmentConfigWriter.Write(segmentConfig.ToString().ToLower());
44+
}
4445

4546
ChangeXsdElementsToLowerCase();
4647

4748
try {
48-
XmlReaderSettings schemaSettings = new XmlReaderSettings();
49-
schemaSettings.Schemas.Add(configXmlNamespace, xsdInLowerCaseFileName);
49+
var schemaSettings = new XmlReaderSettings();
50+
_ = schemaSettings.Schemas.Add(ConfigXmlNamespace, XsdInLowerCaseFileName);
5051
schemaSettings.ValidationType = ValidationType.Schema;
5152
schemaSettings.ValidationEventHandler += new ValidationEventHandler(ValidationHandler);
5253

53-
XmlReader configReader = XmlReader.Create(configFileName, schemaSettings);
54+
var configReader = XmlReader.Create(ConfigFileName, schemaSettings);
5455
while (configReader.Read()) {
5556
}
5657
configReader.Close();
@@ -61,12 +62,6 @@ public void TestSchema()
6162
Console.WriteLine("LineNumber = {0}", exception.LineNumber);
6263
Console.WriteLine("LinePosition = {0}", exception.LinePosition);
6364
}
64-
catch (XmlSchemaValidationException exception) {
65-
hasErrors = true;
66-
Console.WriteLine("{0}: {1}", exception.GetType(), exception.Message);
67-
Console.WriteLine("LineNumber = {0}", exception.LineNumber);
68-
Console.WriteLine("LinePosition = {0}", exception.LinePosition);
69-
}
7065
catch (XmlSchemaException exception) {
7166
hasErrors = true;
7267
Console.WriteLine("{0}: {1}", exception.GetType(), exception.Message);
@@ -86,33 +81,39 @@ public void TestSchema()
8681
Console.WriteLine("{0}: {1}", exception.GetType(), exception.Message);
8782
}
8883
finally {
89-
File.Delete(configFileName);
90-
File.Delete(xsdInLowerCaseFileName);
84+
File.Delete(ConfigFileName);
85+
File.Delete(XsdInLowerCaseFileName);
9186
}
9287

9388
Assert.IsFalse(hasErrors);
9489
}
9590

96-
public void ValidationHandler(object sender, ValidationEventArgs exception)
91+
public void ValidationHandler(object sender, ValidationEventArgs validationEventArgs)
9792
{
9893
hasErrors = true;
99-
Console.WriteLine("({0}) {1}: {2}", exception.Severity, exception.GetType(), exception.Message);
94+
var exception = validationEventArgs.Exception;
95+
Console.WriteLine($"({validationEventArgs.Severity}) {exception.GetType()}: {validationEventArgs.Message}");
96+
Console.WriteLine($"LineNumber = {exception.LineNumber}");
97+
Console.WriteLine($"LinePosition = {exception.LinePosition}");
10098
}
10199

102100
private static void ChangeXsdElementsToLowerCase()
103101
{
104-
var elementsUsedInXsd = new List<string> {"element", "complexType", "attribute", "simpleType", "restriction", "enumeration", "pattern"};
102+
var elementsUsedInXsd = new string[] { "element", "complexType", "attribute", "simpleType", "restriction", "enumeration", "pattern" };
105103

106-
XNamespace namespaceXsd = XNamespace.Get("http://www.w3.org/2001/XMLSchema");
107-
XElement xsdWithElementsToLowerCase = XElement.Load(xsdFileName);
104+
var namespaceXsd = XNamespace.Get("http://www.w3.org/2001/XMLSchema");
105+
var xsdWithElementsToLowerCase = XElement.Load(XsdFileName);
108106

109-
foreach (var element in elementsUsedInXsd)
110-
foreach (var attributes in xsdWithElementsToLowerCase.Descendants(namespaceXsd + element))
111-
foreach (var attribute in attributes.Attributes())
107+
foreach (var element in elementsUsedInXsd) {
108+
foreach (var attributes in xsdWithElementsToLowerCase.Descendants(namespaceXsd + element)) {
109+
foreach (var attribute in attributes.Attributes()) {
112110
attribute.Value = attribute.Value.ToLower();
111+
}
112+
}
113+
}
113114

114-
using (StreamWriter xElementXsdWriter = File.CreateText(xsdInLowerCaseFileName))
115-
xElementXsdWriter.Write(xsdWithElementsToLowerCase);
115+
using var xElementXsdWriter = File.CreateText(XsdInLowerCaseFileName);
116+
xElementXsdWriter.Write(xsdWithElementsToLowerCase);
116117
}
117118
}
118119
}

0 commit comments

Comments
 (0)