Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Changes to speed up Configuration #509

Closed
wants to merge 123 commits into from
Closed
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
123 commits
Select commit Hold shift + click to select a range
838333d
Speed up configuration by parallelizing creation of the MappingXmlFile
cedarcranson Nov 15, 2021
10bb362
speed up configuation by paralelizing creation of mapping classes
cedar-cranson Nov 15, 2021
3e4a4e5
property.Name is not a simple property so speed up configuration by e…
cedar-cranson Nov 15, 2021
ee3c6fa
keep order of the iteration
cedar-cranson Jan 13, 2022
e78c02c
allow caller of configuration to set the number of threads to use in …
cedar-cranson Jan 20, 2022
ad61c07
Merge branch 'master' into master
cedar-cranson Jan 20, 2022
4317364
Remove unused using statements
JAelwynTyler Aug 31, 2022
dff9a4d
Rename tests for better consistency
JAelwynTyler Aug 31, 2022
c211184
Add further "CanAdd*" tests
JAelwynTyler Aug 31, 2022
e5544bf
Add tests for passing dupe items to Add* methods
JAelwynTyler Sep 2, 2022
80b9d16
Implement duplicate tests using reference equality
JAelwynTyler Sep 2, 2022
2ecf386
Add test for AddOrReplace* methods
JAelwynTyler Sep 2, 2022
5bbf82d
Use dict to reduce dupe detection from O(n) to O(1)
JAelwynTyler Sep 2, 2022
a6e8d83
Merge pull request #1 from JAelwynTyler/improve-mappedmembers-efficiency
cedar-cranson Sep 7, 2022
c1bbcc3
Create HbmConverter classes to parallel XmlWriter*
JAelwynTyler Jun 20, 2022
17747cb
Tweak base conversion interfaces
JAelwynTyler Jun 22, 2022
b504dc4
Fix test and variable naming to use converters
JAelwynTyler Jun 22, 2022
f29e4c7
Make resolver test failures more informative
JAelwynTyler Jun 22, 2022
2807bac
Exclude abstract types from resolver testing
JAelwynTyler Jun 22, 2022
0435832
Add helper for Fluent→HBM test utility methods
JAelwynTyler Jun 22, 2022
84ecbf4
Add shared parent for Fluent→HBM converters
JAelwynTyler Jun 22, 2022
f5decb7
Add core HibernateMapping→HbmMapping converter
JAelwynTyler Jun 22, 2022
ffbb1ce
Add Set(…) support to ImportMapping for consistency and convenience.
JAelwynTyler Jun 17, 2022
afe803e
Update test names to not reference "Attribute"
JAelwynTyler Jun 22, 2022
ae01112
Add ImportMapping→HbmImport converter
JAelwynTyler Jun 22, 2022
5324058
Add ImportMapping→HbmImport converter
JAelwynTyler Jun 22, 2022
7ffa188
Rename BaseHbmConverter to HbmConverterBase
JAelwynTyler Jun 22, 2022
ab8e304
Remove unused namespaces
JAelwynTyler Jun 22, 2022
5c4517c
Add a bi-dictionary for XML string←→enum lookups
JAelwynTyler Jun 23, 2022
1e76e80
Fix whitespace between methods
JAelwynTyler Jun 23, 2022
0467b9a
Minor comment & documentation cleanups
JAelwynTyler Jun 23, 2022
8cf6e69
First pass of ClassMapping→HbmClass converter
JAelwynTyler Jun 24, 2022
db4aa72
Extend helper for Fluent→HBM test utility methods
JAelwynTyler Jun 27, 2022
554c78f
Second pass of ClassMapping→HbmClass converter
JAelwynTyler Jun 27, 2022
6369acd
Extend helper for Fluent→HBM test utility methods
JAelwynTyler Jun 27, 2022
642abd0
Further implement HbmClassConverter
JAelwynTyler Jun 27, 2022
404046b
Move example doc comments to the correct section
JAelwynTyler Jun 28, 2022
e79a424
Add test utility method for checking descendants
JAelwynTyler Jun 28, 2022
33dd307
Add IIdentityMapping converter
JAelwynTyler Jun 28, 2022
ba5fccd
Add CompositeIdMapping→HbmCompositeId converter
JAelwynTyler Jun 28, 2022
91407ec
Add ColumnMapping→HbmColumn converter
JAelwynTyler Jun 29, 2022
1db3c78
Add KeyPropertyMapping→HbmKeyProperty converter
JAelwynTyler Jun 29, 2022
5a5ca44
Remove stray commented code
JAelwynTyler Jun 29, 2022
e1c60b9
Add LookupEnumValueIn to HbmConverterBase
JAelwynTyler Jun 29, 2022
f0485a1
Add KeyManyToOneMapping→HbmKeyManyToOne converter
JAelwynTyler Jun 29, 2022
77f753b
Fix enum lookup handling to be consistent
JAelwynTyler Jun 29, 2022
7b35f9d
Set *Specified properties when relevant
JAelwynTyler Jun 29, 2022
dc29d81
Remove stray commented code
JAelwynTyler Jun 29, 2022
c2c53fe
Refactor to extract ToHbmType as a utility method
JAelwynTyler Jun 29, 2022
75ad7c1
Add IdMapping→HbmId converter
JAelwynTyler Jun 29, 2022
0ca3d9d
Extract ToHbmFilterParam as an extension
JAelwynTyler Jun 30, 2022
155a82a
Add ToHbmParam extension
JAelwynTyler Jun 30, 2022
5b8cd15
Add GeneratorMapping→HbmGenerator converter
JAelwynTyler Jun 30, 2022
9718252
Fix a bunch of test comments
JAelwynTyler Jun 30, 2022
a02b4fd
Add StoredProcedureMapping→HbmCustomSQL converter
JAelwynTyler Jun 30, 2022
b887ef4
Add CacheMapping→HbmCache converter
JAelwynTyler Jul 1, 2022
48d47f6
Switch to string-based type conversion
JAelwynTyler Jul 1, 2022
486e449
Add PropertyMapping→HbmProperty converter
JAelwynTyler Jul 1, 2022
8b85e43
Add FilterMapping→HbmFilter converter
JAelwynTyler Jul 1, 2022
7c477bc
Add ManyToOneMapping→HbmManyToOne converter
JAelwynTyler Jul 2, 2022
afa809d
Add DiscriminatorMapping→HbmDiscriminator converter
JAelwynTyler Jul 5, 2022
ae065b5
Refactor to extract ToHbmSubselect as an extension
JAelwynTyler Jul 5, 2022
1877a27
Clean up unused imports
JAelwynTyler Jul 5, 2022
b66b3ea
Add JoinMapping→HbmJoin converter
JAelwynTyler Jul 5, 2022
ccb93e9
Add KeyMapping→HbmKey converter
JAelwynTyler Jul 6, 2022
d8454ef
Add SubclassMapping→* conversion dispatcher
JAelwynTyler Jul 6, 2022
7acc0d4
Update test helper to handle recursive testing
JAelwynTyler Jul 7, 2022
b0ce6ff
Refine subselect test for class converter
JAelwynTyler Jul 7, 2022
18fe56f
Fix comment wording
JAelwynTyler Jul 8, 2022
255c1bb
Support more custom construction options
JAelwynTyler Jul 8, 2022
080b3ee
Add SubclassMapping→* converters
JAelwynTyler Jul 8, 2022
a6ef828
Minor documentation/comment fixes
JAelwynTyler Jul 9, 2022
af29a2f
Refactor to extract a subtype test helper method
JAelwynTyler Jul 9, 2022
a34fc8a
Fix buggy field targeting in test
JAelwynTyler Jul 9, 2022
9b63d39
Refactor to extract reusable EnumBiDictionary
JAelwynTyler Jul 11, 2022
bbcac25
Add CollectionMapping→* conversion dispatcher
JAelwynTyler Jul 11, 2022
6145607
Add CollectionMapping→HbmBag converter
JAelwynTyler Jul 12, 2022
7db4a78
Add CollectionMapping→HbmSet converter
JAelwynTyler Jul 12, 2022
e14d6ad
Relax parameter boundings related to IMapping
JAelwynTyler Jul 12, 2022
6a72532
Add CollectionMapping→HbmMap converter
JAelwynTyler Jul 12, 2022
9ca80c6
Add CollectionMapping→HbmList converter
JAelwynTyler Jul 12, 2022
84a1ef2
Add CollectionMapping→HbmArray converter
JAelwynTyler Jul 12, 2022
ca6f0f8
Add ICollectionRelationshipMapping→* dispatcher
JAelwynTyler Jul 12, 2022
3974db4
Add ManyToManyMapping→HbmManyToMany converter
JAelwynTyler Jul 12, 2022
9966496
Add OneToManyMapping→HbmOneToMany converter
JAelwynTyler Jul 12, 2022
6bade5a
Add IIndexMapping→* conversion dispatcher
JAelwynTyler Jul 12, 2022
29fbc04
Add IndexManyToManyMapping→HbmIndexManyToMany converter
JAelwynTyler Jul 12, 2022
a595fbb
Add hybrid test helper method
JAelwynTyler Jul 13, 2022
7aa19db
Handle IndexMapping→HbmListIndex dispatching
JAelwynTyler Jul 13, 2022
4035455
Add IndexMapping→HbmListIndex converter
JAelwynTyler Jul 13, 2022
8447ac5
Add IndexMapping→HbmIndex converter
JAelwynTyler Jul 13, 2022
b5322ab
Remove unused 'using' that snuck in
JAelwynTyler Jul 13, 2022
243a362
Add mapping application strategies
JAelwynTyler Jul 13, 2022
9f85525
Invert EnumBiMap ordering to be consistent
JAelwynTyler Jul 14, 2022
6fc3b1c
Support incomplete enum mappings from dictionaries
JAelwynTyler Jul 14, 2022
b9be914
Support non-XML lookups in converter base
JAelwynTyler Jul 14, 2022
061ddb9
Add TuplizerMapping→HbmTuplizer support
JAelwynTyler Jul 14, 2022
d811cc3
Add Set(…) support for consistency and convenience.
JAelwynTyler Jul 15, 2022
4f25799
Add NaturalIdMapping→HbmNaturalId converter
JAelwynTyler Jul 15, 2022
24604e5
Add VerisonMapping→HbmVersion converter
JAelwynTyler Jul 15, 2022
84ad8b3
Add OneToOneMapping→HbmOneToOne converter
JAelwynTyler Jul 15, 2022
d24bd25
Add ElementMapping→HbmElement converter
JAelwynTyler Jul 15, 2022
094c0b9
Add CompositeElementMapping→HbmCompositeElement converter
JAelwynTyler Jul 19, 2022
f701059
Add NestedCompositeElementMapping→HbmNestedCompositeElement converter
JAelwynTyler Jul 19, 2022
b58efd1
Add ParentMapping→HbmParent converter
JAelwynTyler Jul 19, 2022
f7a0006
Add AnyMapping→HbmAny converter
JAelwynTyler Jul 19, 2022
227029f
Remove extraneous XML enum dicts
JAelwynTyler Jul 26, 2022
30c0605
Add MetaValueMapping→HbmMetaValue converter
JAelwynTyler Jul 19, 2022
92a5e8e
Remove extraneous FIXME comment
JAelwynTyler Jul 22, 2022
b880726
Add IComponentMapping→* conversion dispatchers
JAelwynTyler Jul 22, 2022
2bc4760
Add ComponentMapping→HbmComponent converter
JAelwynTyler Jul 22, 2022
6f76c71
Add ComponentMapping→HbmDynamicComponent converter
JAelwynTyler Jul 26, 2022
b3c0cc1
Extract known types to a fixed list
JAelwynTyler Jul 26, 2022
e5eb481
Add more known types
JAelwynTyler Jul 26, 2022
bfcc15f
Configure MappingApplicationStrategy via MappingConfiguration
JAelwynTyler Jul 26, 2022
407ce26
Reorder known types list + remove duplicates
JAelwynTyler Jul 27, 2022
63591c5
Add several Hbm* classes to the known types list
JAelwynTyler Jul 27, 2022
3349a9a
Handle mutable attribute on collections
JAelwynTyler Jul 27, 2022
2a376dd
Fix missing doc comment bits
JAelwynTyler Jul 27, 2022
5521920
Label direct conversions as "(Direct)"
JAelwynTyler Jul 27, 2022
c226746
Merge pull request #2 from JAelwynTyler/hbm-direct-conversion
cedar-cranson Sep 7, 2022
07b4650
Cache typestrings to avoid significant duplication
JAelwynTyler Dec 6, 2022
a6963a8
Merge pull request #3 from JAelwynTyler/typestring-cache
cedar-cranson Jan 3, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 3 additions & 2 deletions src/FluentNHibernate/MappingModel/MappedMembers.cs
Expand Up @@ -55,8 +55,9 @@ public void AddOrReplaceFilter(FilterMapping mapping)

public void AddProperty(PropertyMapping property)
{
if (Properties.Any(x => x.Name == property.Name))
throw new InvalidOperationException("Tried to add property '" + property.Name + "' when already added.");
string propertyName = property.Name;
if (Properties.Any(x => x.Name == propertyName))
throw new InvalidOperationException("Tried to add property '" + propertyName + "' when already added.");
AddMapping(property, MappingType.Property);
}

Expand Down
26 changes: 14 additions & 12 deletions src/FluentNHibernate/PersistenceModel.cs
Expand Up @@ -77,12 +77,15 @@ public void AddMappingsFromAssembly(Assembly assembly)

public void AddMappingsFromSource(ITypeSource source)
{
source.GetTypes()
foreach (object o in source.GetTypes()
.Where(x => IsMappingOf<IMappingProvider>(x) ||
IsMappingOf<IIndeterminateSubclassMappingProvider>(x) ||
IsMappingOf<IExternalComponentMappingProvider>(x) ||
IsMappingOf<IFilterDefinition>(x))
.Each(Add);
.AsParallel().Select(t => t.InstantiateUsingParameterlessConstructor()))
hazzik marked this conversation as resolved.
Show resolved Hide resolved
{
AddObject(o);
}

log.LoadedFluentMappingsFromSource(source);
}
Expand Down Expand Up @@ -129,7 +132,11 @@ public void Add(IExternalComponentMappingProvider provider)
public void Add(Type type)
{
var mapping = type.InstantiateUsingParameterlessConstructor();

AddObject(mapping);
}
public void AddObject(object mapping)
{
Type type = mapping.GetType();
if (mapping is IMappingProvider)
{
log.FluentMappingDiscovered(type);
Expand Down Expand Up @@ -276,20 +283,15 @@ public virtual void Configure(Configuration cfg)
{
EnsureMappingsBuilt();

foreach (var mapping in compiledMappings.Where(m => !m.Classes.Any()))
foreach (var document in compiledMappings.Where(m => !m.Classes.Any()).AsParallel().Select(m=>new MappingXmlSerializer().Serialize(m)))
{
var serializer = new MappingXmlSerializer();
XmlDocument document = serializer.Serialize(mapping);
cfg.AddDocument(document);
}

foreach (var mapping in compiledMappings.Where(m => m.Classes.Any()))
foreach (var t in compiledMappings.Where(m => m.Classes.Any()).AsParallel().Select(m=>Tuple.Create(m, new MappingXmlSerializer().Serialize(m))))
{
var serializer = new MappingXmlSerializer();
XmlDocument document = serializer.Serialize(mapping);

if (cfg.GetClassMapping(mapping.Classes.First().Type) == null)
cfg.AddDocument(document);
if (cfg.GetClassMapping(t.Item1.Classes.First().Type) == null)
cfg.AddDocument(t.Item2);
}
}

Expand Down