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

Issue #2258 - Typeful Metadata #2270

Merged
merged 241 commits into from
Sep 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
241 commits
Select commit Hold shift + click to select a range
8a70dc8
Merge branch 'develop' into Issue-#2180
Feb 21, 2024
d04e065
#2180 Copied existing retrieval model implementation classes to new s…
Feb 22, 2024
f948309
Merge branch 'develop' into Issue-#2180
Feb 23, 2024
e949c1b
Merge branch 'develop' into Issue-#2180
Mar 5, 2024
6159e1e
Merge branch 'develop' into Issue-#2180
Mar 10, 2024
b1a996d
Merge branch 'develop' into Issue-#2180
Mar 14, 2024
66c5804
Merge branch 'develop' into Issue-#2180
homedirectory Apr 30, 2024
97c1a0f
#2180 Document fetch and IRetrievalModel classes
homedirectory Apr 29, 2024
5d28d7b
#2180 Simplify EntityContainerEnhancer.getDataInBatches
homedirectory May 1, 2024
1827cd0
#2180 Minor simplifications in EntityContainerEnhancer
homedirectory May 1, 2024
c9ec48e
#2180 Simplify yields enhancement during stage 1-2 tranformation
homedirectory May 1, 2024
e19065f
#2238 Add missing Test annotation and fix a failing assertion
homedirectory May 7, 2024
71a9988
#2180 Add utilities for test assertions about Optionals
homedirectory May 7, 2024
dabdd6b
#2180 Utility for retrieving the first element of a collection
homedirectory May 7, 2024
3883bc5
#2180 Decompose yields enhancement to improve clarity
homedirectory May 7, 2024
3f7b3be
Fix malformed format string
homedirectory May 7, 2024
b8782a1
#2180 Refactor Finder.findCommonProperties using functional style
homedirectory May 8, 2024
d79eac6
Documentation improvements
homedirectory May 9, 2024
a691456
#2258 Introduce core abstractions for typeful metadata
homedirectory May 13, 2024
fa6b476
#2258 Provide an implementation of PropertyMetadata
homedirectory May 13, 2024
bc09b8d
#2258 Provide an implementation of TypeMetadata.Entity
homedirectory May 13, 2024
ee75ae3
#2258 Provide an implementation of TypeMetadata.Composite
homedirectory May 13, 2024
f9eecda
#2258 Enhance metadata interfaces with convenient methods as alternat…
homedirectory May 14, 2024
b484bb9
#2258 Enhance sealed interfaces with convenient predicates
homedirectory May 14, 2024
35851e4
#2258 Enhance PropertyMetadata with a convenient method for metadata …
homedirectory May 14, 2024
9c40e1d
#2258 Introduce 2 more interfaces that assist with metadata access
homedirectory May 14, 2024
86840a2
#2258 Extract NewProperty.newParameterizedType into a reusable utility
homedirectory May 14, 2024
e1de099
#2258 Enhance PropertyTypeMetadata with access to the underlying Java…
homedirectory May 14, 2024
313a385
#2258 Migrate container enhancer and retrieval models to typeful meta…
homedirectory May 14, 2024
41cb6e0
#2258 Enhance IDomainMetadata with method for accessing all existing …
homedirectory May 15, 2024
d99bcad
#2258 Provide a signature of EntityProxyContainer.proxy that accepts …
homedirectory May 15, 2024
fc55d13
#2258 Migrate IdOnlyProxiedEntityTypeCache to typeful metadata
homedirectory May 15, 2024
cf0745b
#2258 Enhance typeful metadata with access to sub-properites of a pro…
homedirectory May 15, 2024
457edc1
#2258 Refactor PropertyMetadata interface to remove parameterisation
homedirectory May 15, 2024
dfa4e1e
#2258 Refactor EntityMetadata interface to remove parameterisation
homedirectory May 15, 2024
24c4a32
#2258 Migrate HibernateMappingsGenerator to typeful metadata
homedirectory May 15, 2024
a72fb59
#2258 Use instanceof bindings instead of type casts
homedirectory May 15, 2024
9c4eca0
#2258 Migrate PersistDomainMetadataModel to typeful metadata
homedirectory May 15, 2024
d5c5541
#2258 Make PersistDomainMetadataModel correclty identify properties t…
homedirectory May 16, 2024
deca3d4
#2258 Replace redundant bounded wildcard by its bound
homedirectory May 16, 2024
b9b8fbc
#2258 Narrow down return type of EntityMetadata.Union.javaType()
homedirectory May 16, 2024
8e33c2a
#2258 Migrate QuerySourceInfoProvider to typeful metadata
homedirectory May 16, 2024
58e8812
#2258 More convient methods for various metadata types
homedirectory May 16, 2024
b5c6a84
#2258 Partial migration of MigrationUtils to typeful metadata
homedirectory May 16, 2024
05aa0ce
#2258 [break] Migrate DbCreator to typeful metadata
homedirectory May 16, 2024
f954adf
#2258 [break] Replace most usages of EQL3 and EQL2 metadata with type…
homedirectory May 16, 2024
062c10a
#2258 Adjust DataMigrator to use typeful metadata
homedirectory May 16, 2024
90620fe
#2258 Replace usages of EntityTypeInfo in QuerySourceInfoProvider
homedirectory May 16, 2024
c926160
#2258 Add DomainMetadataBuilder to fix compilation errors
homedirectory May 16, 2024
61140d2
#2258 Extend PropertyTypeMetadata with a type corresponding to NoKey
homedirectory May 20, 2024
7f80ed7
#2258 Provide implementations of PropertyTypeMetadata
homedirectory May 20, 2024
5682ff7
#2258 Reflect entity metadata type hierarchy in the builder
homedirectory May 21, 2024
a410d0c
#2258 Implement generation of metadata for property types
homedirectory May 21, 2024
10d98cf
#2258 Test property type metadata generation
homedirectory May 21, 2024
f0f2087
#2258 Implement generation of entity metadata
homedirectory May 21, 2024
b30f7e1
#2258 Create a testing harness for entity and property metadata
homedirectory May 21, 2024
4e98f61
#2258 Test metadata generation for union entities
homedirectory May 21, 2024
bb1d68a
#2258 Test metadata generation for properties "id", "key", "version"
homedirectory May 21, 2024
64d2758
#2258 Implement toString() for entity and property metadata
homedirectory May 21, 2024
627b1d6
#2258 Take care of properties that have no corresponding Hibernate type
homedirectory May 22, 2024
bb65257
#2258 Improve documentation
homedirectory May 22, 2024
58389c6
#2258 Test metadata generation for collectional properties
homedirectory May 22, 2024
aa2bdd6
#2258 Test metadata generation for crit-only properties
homedirectory May 22, 2024
50259c5
#2258 Test metadata generation for calculated properties
homedirectory May 22, 2024
f714b03
#2258 Test metadata generation for transient properties
homedirectory May 22, 2024
eb65ef6
#2258 Extract listings of known property types into a separate class …
homedirectory May 22, 2024
cbcf33a
#2258 Implement metadata generation for composite types
homedirectory May 22, 2024
d65753f
#2258 Test metadata generation for composite types
homedirectory May 22, 2024
85d3aa6
#2258 Throw an exception if entity metadata can't be generated
homedirectory May 23, 2024
3f8e118
#2258 Add tests for entities that shouldn't have metadata generated
homedirectory May 23, 2024
d431e5e
#2258 Consider IsProperty annotation during processing of collectiona…
homedirectory May 23, 2024
2c2e198
#2258 Adjust tests
homedirectory May 23, 2024
93fa8b8
#2258 Extract Hibernate type resolution logic into a standalone class
homedirectory May 24, 2024
8a992db
#2258 Test Hibernate type resolution for property metadata
homedirectory May 24, 2024
2262f59
#2258 Minor miscellaneous improvements
homedirectory May 24, 2024
5f944bf
#2258 Don't generate metadata for properties with unknown types
homedirectory May 24, 2024
493d0e6
#2258 Test metadata generation for properties with unknown types
homedirectory May 24, 2024
36e1040
#2258 Add missing test entity
homedirectory May 24, 2024
14b93bc
#2258 Generate metadata for value entity property types
homedirectory May 24, 2024
82d447e
#2258 Test metadata generation for PropertyDescriptor property type
homedirectory May 24, 2024
540fd46
#2258 Change property type int to Integer in MainMenuItem and DomainType
homedirectory May 27, 2024
e938117
#2258 Support Class as a primitive property type
homedirectory May 27, 2024
f367936
#2258 Test metadata generation for property type Class
homedirectory May 27, 2024
29e1574
#2258 Implement sub-properties access for composite types
homedirectory May 27, 2024
31a7b2d
#2258 Test sub-properties access for composite types
homedirectory May 27, 2024
70da088
#2258 Mark property metadata for union entity members
homedirectory May 27, 2024
c8cf66e
#2258 Test union entity member properties access
homedirectory May 27, 2024
41b21e9
#2258 Implement sub-properties access for union entity-typed properties
homedirectory May 27, 2024
028e8c8
#2258 Test sub-properties access for union entity-typed properties
homedirectory May 27, 2024
e24054c
#2258 Code formatting improvements
homedirectory May 27, 2024
a52f7e0
#2258 Provide an implementation of IDomainMetadata
homedirectory May 27, 2024
b8b7650
#2258 Implement DomainMetadataBuilder
homedirectory May 27, 2024
8309bc0
#2258 Test property metadata access using dot-notation
homedirectory May 27, 2024
376ed01
#2258 Replace property type BigInteger by Long in test entities
homedirectory May 28, 2024
582a343
#2258 Replace property type Double by BigDecimal in test entities
homedirectory May 28, 2024
dd966da
#2258 Support range validation for BigDecimal properties
homedirectory May 28, 2024
d0ce74e
#2258 Adjust PropertyMetadataUtils.isPropEntityType so that it doesn'…
homedirectory May 28, 2024
17305c8
#2258 Modify IDomainMetadata.allTypes to support all metadata types
homedirectory May 28, 2024
5a2a4fc
#2258 Initialise EqlTable and tables for batch insertion in domain me…
homedirectory May 28, 2024
589a934
#2258 HibernateMappingsGenerator: correctly handle properties with co…
homedirectory May 28, 2024
d7266e0
#2258 Sub-properties access to always return empty list for propertie…
homedirectory May 28, 2024
c590714
#2258 HibernateMappingsGenerator: sort mappings for testing purposes
homedirectory May 28, 2024
a60b0e9
#2258 Rethrow internal Hibernate exceptions with an informative message
homedirectory May 28, 2024
19cda34
#2258 QuerySourceInfoProvider: handle entity types with no metadata
homedirectory May 28, 2024
697b68c
#2258 Initialise QuerySourceInfoProvider in domain metadata
homedirectory May 28, 2024
58c6244
#2258 Provide sub-properties access to all property natures provided …
homedirectory May 29, 2024
42a8fe4
#2258 Simplify Hibernate type resolution to use only property type
homedirectory May 29, 2024
3a6073c
#2258 Adjust tests related to Hibernate type resolution
homedirectory May 29, 2024
bc8e2b8
#2258 Miscellaneous minor improvements
homedirectory May 29, 2024
c98698f
#2258 Introduce "wrapper" property types that wrap another type
homedirectory May 29, 2024
12b5e2d
#2258 Transform 'if' into 'else if' (prior refactoring blunder)
homedirectory May 30, 2024
82f23c6
#2258 Take into account collectional properties during construction o…
homedirectory May 30, 2024
2d7241d
#2258 QuerySourceInfoProvider: exclude transient properties of persis…
homedirectory May 30, 2024
2ae210c
#2258 Minor refactoring to improve readability
homedirectory May 30, 2024
0b235c0
#2258 Associate KEY_MEMBER property metadata key with corresponding C…
homedirectory May 30, 2024
785cbf1
#2258 Implement access to key members of an entity via metadata
homedirectory May 30, 2024
1eeff92
#2258 Introduce a type that proves presence of a key in property meta…
homedirectory May 30, 2024
a683826
#2258 Use key-presence proof to increase type-safety of composite key…
homedirectory May 30, 2024
9c4c4eb
#2258 Document and simplify entity containers enhancement with collec…
homedirectory May 31, 2024
4d7723d
#2258 Introduce and use exception type for entity retrieval
homedirectory May 31, 2024
bd3e47a
#2258 Crit-only properties should not be proxied
homedirectory May 31, 2024
cbc8d25
#2258 Calculated properties should be proxied
homedirectory May 31, 2024
ea9c2c1
#2258 Update test assertions about proxying of calculated properties
homedirectory May 31, 2024
92a118e
#2258 Fix variable usage blunder that was breaking entity batch inser…
homedirectory May 31, 2024
f0730df
Merge branch 'Issue-#2180' into Issue-#2258
homedirectory May 31, 2024
1ad28f9
Revert "#2180 Copied existing retrieval model implementation classes …
homedirectory May 31, 2024
90f29d3
#2258 Align PropertyMetadata type hierarchy with PropertyNature
homedirectory May 31, 2024
413e658
#2258 Remove entity metadata for nature Other
homedirectory May 31, 2024
e480517
#2258 Simplify PropertyMetadataVisitor
homedirectory May 31, 2024
9946e51
#2258 [break] Remove EQL3 and EQL2 metadata
homedirectory May 31, 2024
1dc2158
#2258 Install a method that had been removed previously
homedirectory May 31, 2024
461d912
#2258 [break] DbCreator: hide public fields and use getters instead
homedirectory May 31, 2024
795445f
#2258 Simplify property filter in proxying logic
homedirectory Jun 3, 2024
caf08fb
#2258 Always include calculated properties with composite type during…
homedirectory Jun 4, 2024
01a2d46
#2258 Test: calculated properties with composite type are included in…
homedirectory Jun 4, 2024
a4c2b1d
#2258 Formatting and naming improvements
homedirectory Jun 4, 2024
3c49298
#2258 Test: when a property is overriden, metadata is generated for t…
homedirectory Jun 5, 2024
1aa3564
#2258 Minor improvements to metadata generation
homedirectory Jun 5, 2024
a786b10
#2258 Additional rules for choosing proxied properties for id-only pr…
homedirectory Jun 5, 2024
fe2777a
#2258 Test: proxying of properties in id-only proxied entity types
homedirectory Jun 5, 2024
c8a56da
#2258 Remove EntityMetadata.SPECIAL_PROPS and localise its usages
homedirectory Jun 5, 2024
774c9f4
#2258 Remove old metadata utility class, localise its usages
homedirectory Jun 5, 2024
72908b9
#2258 Update documentation
homedirectory Jun 5, 2024
18f88d9
#2258 Simplify entity/property nature predicate usages
homedirectory Jun 5, 2024
b25393c
#2258 Use a general predicate for synthetic-based-on-persistent entit…
homedirectory Jun 5, 2024
7fe2bd0
#2258 More precise error message
homedirectory Jun 5, 2024
502cb6f
#2258 Implement a stream util: foldLeft
homedirectory Jun 5, 2024
f3b66d3
#2258 Test: StreamUtils.foldLeft
homedirectory Jun 5, 2024
47c1ac7
#2258 Use StreamUtils.foldLeft for clarity
homedirectory Jun 5, 2024
9135db2
#2258 Replace Collection by Stream in return type of IDomainMetadata.…
homedirectory Jun 5, 2024
db0e4b4
#2258 Simplify switch expression with a single clause
homedirectory Jun 5, 2024
b4c27a1
#2258 Implement a util method to stream entity type hierarchy
homedirectory Jun 5, 2024
b57b8b3
#2258 PersistDomainMetadataModel: exhaustively handle synthetic-based…
homedirectory Jun 5, 2024
30817b0
#2258 PersistDomainMetadataModel: correctly handle entity types witho…
homedirectory Jun 5, 2024
ad620b6
#2258 Remove outdated comment
homedirectory Jun 6, 2024
d142941
#2258 Ability to provide interfaces to be implemented by generated en…
homedirectory Jun 6, 2024
32dc0ef
#2258 Identify proxy entity types by a special marker interface
homedirectory Jun 6, 2024
df36fb7
#2258 Identify id-only proxy entity types by a special marker interface
homedirectory Jun 6, 2024
60721c6
#2258 Optimise usages of EntityProxyContainer
homedirectory Jun 7, 2024
529d203
#2258 Minor improvements to EntityProxyContainer
homedirectory Jun 7, 2024
e0f549b
#2258 Fix typo in variable name that was leading to incorrect generat…
homedirectory Jun 7, 2024
7d69a80
#2258 PersistDomainMetadataModel: more changes to align with previous…
homedirectory Jun 7, 2024
18410d9
#2258 EntityMetadataUtils: ensure composite key members are ordered
homedirectory Jun 7, 2024
5600cf8
#2258 Avoid non-termination during fetch model construction
homedirectory Jun 7, 2024
050fa7e
#2258 PersistDomainMetadataModel: no need for column name for propert…
homedirectory Jun 7, 2024
b4e12dd
#2258 Test: fetch model construction for a case of circular relations…
homedirectory Jun 10, 2024
d7849f9
#2258 Minor improvements to FetchModelTest
homedirectory Jun 10, 2024
bb53bc9
#2258 Adjust a test after adding a static field to AbstractEntity
homedirectory Jun 10, 2024
7da5d23
#2258 DomainPropertyHolder: add meaningful properties descriptions
homedirectory Jun 10, 2024
37a1802
Merge branch 'develop' into Issue-#2258
homedirectory Jun 10, 2024
bec19b8
#2258 Create missing parent directories when saving a script to file …
homedirectory Jun 10, 2024
f2bb2e0
Merge branch 'develop' into Issue-#2258
homedirectory Jun 17, 2024
50b24cf
#2258 Synced with develop.
01es Jun 22, 2024
0fd54bc
#2258 Introduce exception type NoSuchPropertyException
homedirectory Aug 5, 2024
f56b485
#2258 Provide throwing and Optional versions of property metadata acc…
homedirectory Aug 5, 2024
ffed039
#2258 Add a method to obtain property metadata from a MetaProperty
homedirectory Aug 6, 2024
b1b1c89
#2258 Use Cache instead of ConcurrentMap to store type metadata
homedirectory Aug 6, 2024
e176f51
#2258 Move metadata cache to the generator
homedirectory Aug 6, 2024
faa9b0b
#2258 Introduce temporary metadata cache for generated entity types
homedirectory Aug 6, 2024
1cbb58c
#2258 Optimise metadata generation for generated entity types
homedirectory Aug 6, 2024
1250408
Merge branch '2.0.0-SNAPSHOT' into Issue-#2258
homedirectory Aug 21, 2024
9f08f2e
#2258 Post-merge adjustments
homedirectory Aug 21, 2024
8141bf1
#2258 Replace usages of EqlDomainMetadata in EQL transformations by I…
homedirectory Aug 21, 2024
1e524a0
#2258 Minor Javadoc and formatting adjustment.
01es Aug 22, 2024
e78ece9
#2258 Refactored Either.
01es Aug 22, 2024
0bb231c
#2258 A bit of a post-merge cleanup.
01es Aug 22, 2024
7618a19
#2258 Optimise CollectionUtil.listCopy
homedirectory Aug 22, 2024
923edfb
#2258 Used Result.failure to report exceptions.
01es Aug 22, 2024
4aa2eb6
#2258 Used more conventional name 'reduceLeft' + Javadoc + more tests.
01es Aug 22, 2024
e95f541
#2258 Bit more Javadoc.
01es Aug 22, 2024
9fff2e5
#2258 One more test.
01es Aug 22, 2024
3a227a1
#2258 CharSequence to property names.
01es Aug 22, 2024
7ac4f16
#2258 Filter before sort.
01es Aug 22, 2024
9fa5136
#2258 Addressed TODO as collections are now supported in EQL DSL.
01es Aug 23, 2024
a9dd42e
#2258 Minor formatting, javadoc adjustments, applied De Morgan's law …
01es Aug 23, 2024
58cee69
#2258 A test to be explicit about non-fetched collectional properties…
01es Aug 23, 2024
ebcc655
#2091, #2258 Implemented issue requirements.
01es Aug 23, 2024
0b453c7
#2091, #2258 Minor final adjustment.
01es Aug 23, 2024
b14c60c
#2258 Javadoc adjustment, permits for Transient.
01es Aug 27, 2024
bee2053
#2258 Minor renaming and javadoc improvements.
01es Aug 28, 2024
946511b
#2258 Adjusted TypeRegistry.
01es Aug 28, 2024
b84b58b
#2258 Refacting to use 'component type' instead of 'composite type'.
01es Aug 28, 2024
1ae3a2b
#2258 More javadoc and rationalisation.
01es Aug 28, 2024
71cdac5
#2258 Further alignment with the adoption of 'component type' termino…
01es Aug 28, 2024
db6d772
#2258, #440 Applied De Morgan's law to simplify condition for excludi…
01es Aug 28, 2024
306044b
#2258 Renamed Money-related Hibernate types to align with names for o…
01es Aug 28, 2024
e325816
#2258 Additional renaming of 'composite' to 'component'
homedirectory Aug 28, 2024
6d3acbd
#2258 Clarified the meaning of isPure.
01es Aug 28, 2024
24a0870
#2258 More clarifications.
01es Aug 28, 2024
524ba78
#2258 Aligned error message names with the established convention.
01es Aug 28, 2024
f843f65
#2258 Clarified the situation around fech model construction for unio…
01es Aug 28, 2024
c06df44
#2258 A test for future verification of fetch models for Synthetic En…
01es Aug 28, 2024
b710a8d
#2258 Add a test to ensure that union members can be yielded with dot…
homedirectory Aug 28, 2024
823f9b6
#2258 Fix typos in test names
homedirectory Aug 28, 2024
7701667
#2258 Commented out the code for automatic expansion of fetch models …
01es Aug 28, 2024
e64af5d
#2258 More consistent formatting, prefer static for helper methods, m…
01es Aug 29, 2024
1838b71
#2258 Formatting and documentation.
01es Aug 29, 2024
80da2d0
#2258 Tiny clarification of a comment
homedirectory Aug 29, 2024
95f9cf6
#2258 SequencedSet to be returned from Finder.findCommonProperties.
01es Aug 30, 2024
5dda354
#2258 AbstractUnionEntity.commonProperties to return SequencedSet.
01es Sep 2, 2024
b57ffed
#2258 Additional clarifications with and a new TODO.
01es Sep 2, 2024
afc67f7
#2258 Minor alignment with current coding practices.
01es Sep 2, 2024
dad60e3
#2258 A bit of tidy up around DynamicQueryBuilder.
01es Sep 2, 2024
d710ae4
#2258 Entity centres should use companions that retrieve uninstrument…
01es Sep 2, 2024
4673caf
#2258 It is important to determine the totals-only fetch models befor…
01es Sep 2, 2024
4e0fb98
#2258 Minor clarification.
01es Sep 4, 2024
560f1e2
#2258 Minor refactoring and Javadoc for clarity.
01es Sep 4, 2024
4a37b49
#2258 Clarifications + Javadoc.
01es Sep 4, 2024
c61531f
#2258 Some Javadoc, a bit of renaming.
01es Sep 4, 2024
c3d55c1
#2258 Incremental Finder improvements.
01es Sep 4, 2024
632bc05
#2258 Minor DomainMetadataGenerator refactoring and documentation.
01es Sep 4, 2024
9dfc510
#2258 Reverted the change to GeneratedEntityDao to use instrumented c…
01es Sep 4, 2024
0bb2ca5
#2258 Cosmetic adjustments.
01es Sep 5, 2024
0e0c737
#2258 Minor Javadoc adjustment.
01es Sep 5, 2024
70ab819
#2258 Bit more Javadoc and other minor adjustments.
01es Sep 5, 2024
38999f9
#2258 Removed a commented out exception from PropertyTypeMetadataGene…
01es Sep 5, 2024
e510333
#2258 Minor Javadoc adjustments.
01es Sep 5, 2024
84c9e9d
#2258 Minor code layout normalisation.
01es Sep 5, 2024
97f95e0
#2258 A bit of name normalistion with preference for dot-expression o…
01es Sep 5, 2024
d8e204d
#2258 Clarified test names and used constants ID, KEY, VERSION.
01es Sep 5, 2024
9ec6f11
#2258 Minor improvements to type parametarisation + a bit of code nor…
01es Sep 5, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,17 @@

import com.google.inject.Guice;
import com.google.inject.Injector;
import org.hibernate.Hibernate;
import org.hibernate.type.YesNoType;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.infra.Blackhole;
import ua.com.fielden.platform.entity.meta.PropertyDescriptor;
import ua.com.fielden.platform.entity.query.IFilter;
import ua.com.fielden.platform.entity.query.generation.ioc.HelperIocModule;
import ua.com.fielden.platform.entity.query.metadata.DomainMetadata;
import ua.com.fielden.platform.entity.query.metadata.DomainMetadataAnalyser;
import ua.com.fielden.platform.entity.query.model.QueryModel;
import ua.com.fielden.platform.eql.meta.SimpleUserFilter;
import ua.com.fielden.platform.ioc.HibernateUserTypesModule;
import ua.com.fielden.platform.persistence.HibernateHelpers;
import ua.com.fielden.platform.meta.DomainMetadataBuilder;
import ua.com.fielden.platform.meta.IDomainMetadata;
import ua.com.fielden.platform.persistence.types.*;
import ua.com.fielden.platform.sample.domain.*;
import ua.com.fielden.platform.test.PlatformTestDomainTypes;
Expand Down Expand Up @@ -314,8 +312,7 @@ public void generated_conditions_x20(final Blackhole blackhole) {
protected static final IDates dates = injector.getInstance(IDates.class);
protected static final IFilter filter = new SimpleUserFilter();

protected static final DomainMetadata DOMAIN_METADATA;
protected static final DomainMetadataAnalyser DOMAIN_METADATA_ANALYSER;
protected static final IDomainMetadata DOMAIN_METADATA;

static {
hibTypeDefaults.put(boolean.class, YesNoType.class);
Expand All @@ -326,8 +323,7 @@ public void generated_conditions_x20(final Blackhole blackhole) {
hibTypeDefaults.put(Colour.class, ColourType.class);
hibTypeDefaults.put(Hyperlink.class, HyperlinkType.class);

DOMAIN_METADATA = new DomainMetadata(hibTypeDefaults, injector, PlatformTestDomainTypes.entityTypes, HibernateHelpers.getDialect(H2));
DOMAIN_METADATA_ANALYSER = new DomainMetadataAnalyser(DOMAIN_METADATA);
DOMAIN_METADATA = new DomainMetadataBuilder(hibTypeDefaults, injector, PlatformTestDomainTypes.entityTypes, H2).build();
}

protected static final EqlRandomGenerator ELQ_GENERATOR = new EqlRandomGenerator(new Random(9375679861L));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@
import ua.com.fielden.platform.entity.meta.MetaProperty;
import ua.com.fielden.platform.entity.query.*;
import ua.com.fielden.platform.entity.query.fluent.fetch;
import ua.com.fielden.platform.entity.query.metadata.DomainMetadata;
import ua.com.fielden.platform.entity.query.model.EntityResultQueryModel;
import ua.com.fielden.platform.file_reports.WorkbookExporter;
import ua.com.fielden.platform.meta.IDomainMetadata;
import ua.com.fielden.platform.reflection.AnnotationReflector;
import ua.com.fielden.platform.security.user.IUserProvider;
import ua.com.fielden.platform.security.user.User;
Expand Down Expand Up @@ -59,7 +59,7 @@ public abstract class CommonEntityDao<T extends AbstractEntity<?>> extends Abstr

private Session session;
private String transactionGuid;
private DomainMetadata domainMetadata;
private IDomainMetadata domainMetadata;
private IdOnlyProxiedEntityTypeCache idOnlyProxiedEntityTypeCache;

@Inject
Expand Down Expand Up @@ -110,7 +110,7 @@ protected CommonEntityDao(final IFilter filter) {
this::getSession,
entityType,
this::newQueryExecutionContext,
() -> new EntityBatchDeleteByIdsOperation<>(getSession(), getDomainMetadata().eqlDomainMetadata.entityMetadataHolder.getTableForEntityType(entityType)));
() -> new EntityBatchDeleteByIdsOperation<>(getSession(), getDomainMetadata().getTableForEntityType(entityType)));

entitySaver = new PersistentEntitySaver<>(
this::getSession,
Expand Down Expand Up @@ -141,7 +141,6 @@ protected QueryExecutionContext newQueryExecutionContext() {
getEntityFactory(),
getCoFinder(),
getDomainMetadata(),
getDomainMetadata().eqlDomainMetadata,
getFilter(),
getUsername(),
dates,
Expand All @@ -154,13 +153,13 @@ protected QueryExecutionContext newQueryExecutionContext() {
* @param domainMetadata
*/
@Inject
protected void setDomainMetadata(final DomainMetadata domainMetadata) {
protected void setDomainMetadata(final IDomainMetadata domainMetadata) {
this.domainMetadata = domainMetadata;
}

@Override
public DbVersion getDbVersion() {
return domainMetadata.getDbVersion();
return domainMetadata.dbVersion();
}

@Inject
Expand Down Expand Up @@ -329,7 +328,7 @@ public byte[] export(final QueryExecutionModel<T, ?> query, final String[] prope
return WorkbookExporter.convertToGZipByteArray(WorkbookExporter.export(stream(query), propertyNames, propertyTitles));
}

public DomainMetadata getDomainMetadata() {
public IDomainMetadata getDomainMetadata() {
return domainMetadata;
}

Expand Down Expand Up @@ -673,4 +672,4 @@ public T new_() {
return entityFactory.newEntity(getEntityType());
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,10 @@ public Class<T> getEntityType() {

@Override
public void setEntityType(final Class<T> type) {
// It is important to use a companion that produces instrumented instances.
// This is to support customisation where necessary to retrieve either instrumented or unstrumented entity instances,
// which is controlled by using lightweight query models to avoid instrumentation.
// The use of lightweight query models is the default for Entity Centres.
this.companion = coFinder.find(type);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,9 @@
package ua.com.fielden.platform.devdb_support;

import static java.lang.String.format;
import static ua.com.fielden.platform.entity.query.DbVersion.H2;

import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
Expand All @@ -25,7 +18,6 @@
import ua.com.fielden.platform.entity.DynamicEntityKey;
import ua.com.fielden.platform.entity.factory.EntityFactory;
import ua.com.fielden.platform.entity.factory.ICompanionObjectFinder;
import ua.com.fielden.platform.entity.query.metadata.PersistedEntityMetadata;
import ua.com.fielden.platform.reflection.Finder;
import ua.com.fielden.platform.test.IDomainDrivenTestCaseConfiguration;
import ua.com.fielden.platform.types.Money;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,38 +1,35 @@
package ua.com.fielden.platform.entity.query;

import ua.com.fielden.platform.entity.AbstractEntity;
import ua.com.fielden.platform.entity.query.exceptions.EqlException;
import ua.com.fielden.platform.entity.query.fluent.fetch;
import ua.com.fielden.platform.meta.IDomainMetadata;
import ua.com.fielden.platform.meta.PropertyMetadata;

import java.util.*;
import java.util.Map.Entry;

import static java.lang.Boolean.FALSE;
import static java.lang.String.format;
import static java.util.Collections.unmodifiableMap;
import static java.util.Collections.unmodifiableSet;
import static ua.com.fielden.platform.entity.AbstractEntity.ID;
import static ua.com.fielden.platform.entity.AbstractEntity.VERSION;
import static ua.com.fielden.platform.utils.EntityUtils.isEntityType;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import ua.com.fielden.platform.entity.AbstractEntity;
import ua.com.fielden.platform.entity.query.exceptions.EqlException;
import ua.com.fielden.platform.entity.query.fluent.fetch;
import ua.com.fielden.platform.entity.query.metadata.DomainMetadataAnalyser;
import ua.com.fielden.platform.entity.query.metadata.PropertyMetadata;

public abstract class AbstractRetrievalModel<T extends AbstractEntity<?>> implements IRetrievalModel<T> {

protected final fetch<T> originalFetch;
private DomainMetadataAnalyser domainMetadataAnalyser;
protected final IDomainMetadata domainMetadata;
public final boolean topLevel;

private final Map<String, EntityRetrievalModel<? extends AbstractEntity<?>>> entityProps = new HashMap<>();
private final Set<String> primProps = new HashSet<String>();
private final Set<String> proxiedProps = new HashSet<String>();

protected AbstractRetrievalModel(final fetch<T> originalFetch, final DomainMetadataAnalyser domainMetadataAnalyser, final boolean topLevel) {
protected AbstractRetrievalModel(final fetch<T> originalFetch, final IDomainMetadata domainMetadata, final boolean topLevel) {
this.originalFetch = originalFetch;
this.domainMetadataAnalyser = domainMetadataAnalyser;
this.topLevel = topLevel;
this.domainMetadata = domainMetadata;
}

public fetch<T> getOriginalFetch() {
Expand All @@ -43,10 +40,6 @@ public fetch<T> getOriginalFetch() {
public Set<String> getProxiedProps() {
return proxiedProps;
}

public DomainMetadataAnalyser getDomainMetadataAnalyser() {
return domainMetadataAnalyser;
}

@Override
public boolean containsProp(final String propName) {
Expand Down Expand Up @@ -108,26 +101,22 @@ public String toString() {
return sb.toString();
}

protected PropertyMetadata getPropMetadata(final String propName) {
final PropertyMetadata ppi = domainMetadataAnalyser.getPropPersistenceInfoExplicitly(getEntityType(), propName);
if (ppi != null) {
if (ppi.getJavaType() != null) {
return ppi;
} else {
throw new EqlException(format("Couldn't determine type of property [%s] of entity type [%s]", propName, getEntityType()));
}
} else {
protected Optional<PropertyMetadata> getPropMetadata(final String propName) {
final var optPm = domainMetadata.forPropertyOpt(getEntityType(), propName);
if (optPm.isEmpty()) {
// allow only IDs and VERSIONs to have missing PropertyMetadata; this is sometimes useful for pure synthetic entities that yield these props
if (ID.equals(propName) || VERSION.equals(propName)) {
return null; // allow only IDs and VERSIONs to have missing PropertyMetadata; this is sometimes useful for pure synthetic entities that yield these props
return Optional.empty();
}
throw new EqlException(format("Trying to fetch entity of type [%s] with non-existing property [%s]", getEntityType(), propName));
}
return optPm;
}

protected void without(final String propName) {
final Class<?> propType = getPropMetadata(propName).getJavaType();
final Optional<PropertyMetadata> optPm = getPropMetadata(propName);

if (isEntityType(propType)) {
if (optPm.map(pm -> pm.type().isEntity()).orElse(FALSE)) {
final Object removalResult = entityProps.remove(propName);
if (removalResult == null) {
throw new EqlException(format("Couldn't find property [%s] to be excluded from fetched entity properties of entity type [%s]", propName, getEntityType()));
Expand All @@ -139,4 +128,4 @@ protected void without(final String propName) {
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@
import ua.com.fielden.platform.entity.AbstractEntity;
import ua.com.fielden.platform.entity.query.exceptions.EqlException;
import ua.com.fielden.platform.entity.query.fluent.fetch;
import ua.com.fielden.platform.entity.query.metadata.DomainMetadataAnalyser;
import ua.com.fielden.platform.meta.IDomainMetadata;

public class EntityAggregatesRetrievalModel<T extends AbstractEntity<?>> extends AbstractRetrievalModel<T> {

public EntityAggregatesRetrievalModel(final fetch<T> originalFetch, final DomainMetadataAnalyser domainMetadataAnalyser) {
super(originalFetch, domainMetadataAnalyser, true);
public EntityAggregatesRetrievalModel(final fetch<T> originalFetch, final IDomainMetadata domainMetadata) {
super(originalFetch, domainMetadata, true);

validateModel();

Expand Down Expand Up @@ -42,11 +42,11 @@ private void validateModel() {
private void addEntityPropsModel(final String propName, final fetch<? extends AbstractEntity<?>> fetchModel) {
final EntityRetrievalModel<?> existingFetch = getRetrievalModels().get(propName);
fetch<?> finalFetch = existingFetch != null ? existingFetch.originalFetch.unionWith(fetchModel) : fetchModel;
addEntityPropFetchModel(propName, new EntityRetrievalModel<>(finalFetch, getDomainMetadataAnalyser(), false));
addEntityPropFetchModel(propName, new EntityRetrievalModel<>(finalFetch, domainMetadata, false));
}

@Override
public boolean containsOnlyTotals() {
return false;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
import ua.com.fielden.platform.dao.exceptions.EntityDeletionException;
import ua.com.fielden.platform.entity.query.model.AggregatedResultQueryModel;
import ua.com.fielden.platform.entity.query.model.EntityResultQueryModel;
import ua.com.fielden.platform.eql.meta.EqlDomainMetadata;
import ua.com.fielden.platform.eql.stage2.TransformationResultFromStage2To3;
import ua.com.fielden.platform.eql.stage3.queries.ResultQuery3;
import ua.com.fielden.platform.meta.IDomainMetadata;

import javax.persistence.PersistenceException;
import java.util.Collections;
Expand Down Expand Up @@ -47,13 +47,13 @@ public <E extends AbstractEntity<?>> int deleteEntities(final EntityResultQueryM
}

private <T extends AbstractEntity<?>> DeletionModel getModelSql(final EntityResultQueryModel<T> model, final Map<String, Object> paramValues) {
final EqlDomainMetadata eqlDomainMetadata = executionContext.getEqlDomainMetadata();
final IDomainMetadata domainMetadata = executionContext.getDomainMetadata();
final AggregatedResultQueryModel finalModel = select(model.getResultType()).where().prop(ID).in().model(model).yield().prop(ID).as(ID).modelAsAggregate();
final String tableName = eqlDomainMetadata.entityMetadataHolder.getTableForEntityType(model.getResultType()).name();
final TransformationResultFromStage2To3<ResultQuery3> s2tr = transform(new QueryProcessingModel(finalModel, null, null, paramValues, true), null, null, executionContext.dates(), eqlDomainMetadata);
final String tableName = domainMetadata.getTableForEntityType(model.getResultType()).name();
final TransformationResultFromStage2To3<ResultQuery3> s2tr = transform(new QueryProcessingModel(finalModel, null, null, paramValues, true), null, null, executionContext.dates(), domainMetadata);
final ResultQuery3 entQuery3 = s2tr.item;
final String selectionSql = entQuery3.sql(eqlDomainMetadata);
final String deletionSql = produceDeletionSql(selectionSql, tableName, eqlDomainMetadata.dbVersion);
final String selectionSql = entQuery3.sql(domainMetadata);
final String deletionSql = produceDeletionSql(selectionSql, tableName, domainMetadata.dbVersion());
return new DeletionModel(deletionSql, s2tr.updatedContext.getSqlParamValues());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
import ua.com.fielden.platform.dao.session.TransactionalExecution;
import ua.com.fielden.platform.entity.AbstractEntity;
import ua.com.fielden.platform.entity.query.EntityBatchInsertOperation.TableStructForBatchInsertion.PropColumnInfo;
import ua.com.fielden.platform.eql.meta.EqlDomainMetadata;
import ua.com.fielden.platform.meta.IDomainMetadata;
import ua.com.fielden.platform.utils.CollectionUtil;
import ua.com.fielden.platform.utils.StreamUtils;

Expand All @@ -47,11 +47,11 @@
*
*/
public class EntityBatchInsertOperation {
private final EqlDomainMetadata eqlDomainMetadata;
private final IDomainMetadata domainMetadata;
private final Supplier<TransactionalExecution> trExecSupplier;

public EntityBatchInsertOperation(final EqlDomainMetadata dm, final Supplier<TransactionalExecution> trExecSupplier) {
this.eqlDomainMetadata = dm;
public EntityBatchInsertOperation(final IDomainMetadata domainMetadata, final Supplier<TransactionalExecution> trExecSupplier) {
this.domainMetadata = domainMetadata;
this.trExecSupplier = trExecSupplier;
}

Expand Down Expand Up @@ -87,10 +87,10 @@ public <T extends AbstractEntity<?>> int batchInsert(final List<T> entities, fin
throw new EntityAlreadyExists("Trying to perform batch insert for persisted entities.");
}

final TableStructForBatchInsertion table = eqlDomainMetadata.getTableForEntityType(entities.get(0).getType());
final TableStructForBatchInsertion table = domainMetadata.getTableStructsForBatchInsertion(entities.get(0).getType());
final String tableName = table.name;
final List<String> columnNames = table.columns.stream().flatMap(x -> x.columnNames().stream()).collect(toList());
final String insertStmt = generateInsertStmt(tableName, columnNames, eqlDomainMetadata.dbVersion);
final String insertStmt = generateInsertStmt(tableName, columnNames, domainMetadata.dbVersion());

final AtomicInteger insertedCount = new AtomicInteger(0);

Expand Down Expand Up @@ -174,4 +174,4 @@ public PropColumnInfo(final String leafPropName, final List<String> columnNames,

}

}
}
Loading