Skip to content

Use mapping for pairs

8a3f12b
Select commit
Loading
Failed to load commit list.
Sign in for the full log view
Open

feat: Introduce YawnProjection.mapping #115

Use mapping for pairs
8a3f12b
Select commit
Loading
Failed to load commit list.
GitHub Actions / Test Results failed Mar 12, 2026 in 0s

226 passed, 1 failed and 0 skipped

Tests failed

Report Passed Failed Skipped Time
yawn-api/build/test-results/test/TEST-com.faire.yawn.pagination.PageNumberTest.xml 5✅ 109ms
yawn-api/build/test-results/test/TEST-com.faire.yawn.pagination.PageTest.xml 1✅ 0ms
yawn-api/build/test-results/test/TEST-com.faire.yawn.pagination.PaginationResultTest.xml 6✅ 36ms
yawn-api/build/test-results/test/TEST-com.faire.yawn.query.YawnAliasManagerTest.xml 6✅ 47ms
yawn-database-test/build/test-results/test/TEST-com.faire.yawn.database.LikeQueriesTest.xml 17✅ 6s
yawn-database-test/build/test-results/test/TEST-com.faire.yawn.database.ValueClassTest.xml 11✅ 1s
yawn-database-test/build/test-results/test/TEST-com.faire.yawn.database.YawnAggregationNullabilityTest.xml 7✅ 861ms
yawn-database-test/build/test-results/test/TEST-com.faire.yawn.database.YawnCriterionTest.xml 32✅ 3s
yawn-database-test/build/test-results/test/TEST-com.faire.yawn.database.YawnForeignAndCompositeKeyTest.xml 7✅ 356ms
yawn-database-test/build/test-results/test/TEST-com.faire.yawn.database.YawnJoinsTest.xml 29✅ 2s
yawn-database-test/build/test-results/test/TEST-com.faire.yawn.database.YawnLockModeTest.xml 6✅ 435ms
yawn-database-test/build/test-results/test/TEST-com.faire.yawn.database.YawnMinAndMaxByTest.xml 4✅ 168ms
yawn-database-test/build/test-results/test/TEST-com.faire.yawn.database.YawnPaginationQueriesTest.xml 11✅ 513ms
yawn-database-test/build/test-results/test/TEST-com.faire.yawn.database.YawnProjectionMappingTest.xml 1❌ 90ms
yawn-database-test/build/test-results/test/TEST-com.faire.yawn.database.YawnProjectionTest.xml 30✅ 2s
yawn-database-test/build/test-results/test/TEST-com.faire.yawn.database.YawnSimpleQueriesTest.xml 31✅ 2s
yawn-database-test/build/test-results/test/TEST-com.faire.yawn.database.YawnSubQueryTest.xml 7✅ 482ms
yawn-gradle-plugin/build/test-results/test/TEST-com.faire.gradle.yawn.FaireYawnTest.xml 1✅ 70s
yawn-integration-test/build/test-results/test/TEST-com.faire.yawn.YawnEntityPathTest.xml 4✅ 241ms
yawn-integration-test/build/test-results/test/TEST-com.faire.yawn.YawnEntityProcessorJoinsTest.xml 2✅ 729ms
yawn-integration-test/build/test-results/test/TEST-com.faire.yawn.YawnEntityProcessorTest.xml 8✅ 292ms
yawn-integration-test/build/test-results/test/TEST-com.faire.yawn.YawnProjectionProcessorTest.xml 1✅ 40ms

✅ yawn-api/build/test-results/test/TEST-com.faire.yawn.pagination.PageNumberTest.xml

5 tests were completed in 109ms with 5 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
com.faire.yawn.pagination.PageNumberTest 5✅ 109ms

✅ com.faire.yawn.pagination.PageNumberTest

✅ cannot create invalid page numbers()
✅ can use Long overloads to create page numbers()
✅ can create one-indexed page numbers()
✅ can create zero-indexed page numbers()
✅ can use starting and next helpers()

✅ yawn-api/build/test-results/test/TEST-com.faire.yawn.pagination.PageTest.xml

1 tests were completed in 0ms with 1 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
com.faire.yawn.pagination.PageTest 1✅ 0ms

✅ com.faire.yawn.pagination.PageTest

✅ can create page from page number and obtain offset()

✅ yawn-api/build/test-results/test/TEST-com.faire.yawn.pagination.PaginationResultTest.xml

6 tests were completed in 36ms with 6 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
com.faire.yawn.pagination.PaginationResultTest 6✅ 36ms

✅ com.faire.yawn.pagination.PaginationResultTest

✅ has next - partial last page()
✅ has next - full last page()
✅ can create PaginationResult from list()
✅ can create and map PaginationResult()
✅ has next - empty()
✅ can create empty PaginationResult()

✅ yawn-api/build/test-results/test/TEST-com.faire.yawn.query.YawnAliasManagerTest.xml

6 tests were completed in 47ms with 6 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
com.faire.yawn.query.YawnAliasManagerTest 6✅ 47ms

✅ com.faire.yawn.query.YawnAliasManagerTest

✅ verify correct prefix for camelCase table()
✅ verify correct prefix for table()
✅ verify alias generation for different paths does not use numbers until necessary()
✅ nested paths use the last part to generate a prefix()
✅ verify alias generation for repeated paths()
✅ verify correct prefix for association path()

✅ yawn-database-test/build/test-results/test/TEST-com.faire.yawn.database.LikeQueriesTest.xml

17 tests were completed in 6s with 17 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
com.faire.yawn.database.LikeQueriesTest 17✅ 6s

✅ com.faire.yawn.database.LikeQueriesTest

✅ iLike with match mode on nullable column - notes starting with Note for()
✅ not like - authors that do not start with J()
✅ like with match mode END - books ending in Mermaid()
✅ not iLike is case-insensitive - authors that do not start with j()
✅ iLike on nullable column - notes starting with Note for()
✅ like is case-sensitive - books starting with the()
✅ like via restriction - books starting with The()
✅ iLike via restriction - books starting with the()
✅ iLike is case-insensitive - books starting with the()
✅ like on non-nullable column - authors starting with JRR()
✅ like on nullable column - notes starting with Note for()
✅ not like is case-sensitive - authors that do not start with j()
✅ like - books starting with The()
✅ like with match mode on non-nullable column - authors starting with JRR()
✅ like with match mode on nullable column - notes starting with Note for()
✅ iLike with match mode on non-nullable column - authors starting with JRR()
✅ iLike on non-nullable column - authors starting with JRR()

✅ yawn-database-test/build/test-results/test/TEST-com.faire.yawn.database.ValueClassTest.xml

11 tests were completed in 1s with 11 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
com.faire.yawn.database.ValueClassTest 11✅ 1s

✅ com.faire.yawn.database.ValueClassTest

✅ query with addNotEq()
✅ query with addNotIn()
✅ query with eq()
✅ can fetch and unwrap()
✅ query with addBetween()
✅ query with addGe()
✅ query with addGt()
✅ query with addIn()
✅ query with addLe()
✅ query with addLt()
✅ query with addEqOrIsNull()

✅ yawn-database-test/build/test-results/test/TEST-com.faire.yawn.database.YawnAggregationNullabilityTest.xml

7 tests were completed in 861ms with 7 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
com.faire.yawn.database.YawnAggregationNullabilityTest 7✅ 861ms

✅ com.faire.yawn.database.YawnAggregationNullabilityTest

✅ groupBy with addIsNotNull()
✅ count with addIsNotNull()
✅ max with addIsNotNull()
✅ countDistinct with addIsNotNull()
✅ min with addIsNotNull()
✅ sum with addIsNotNull()
✅ avg with addIsNotNull()

✅ yawn-database-test/build/test-results/test/TEST-com.faire.yawn.database.YawnCriterionTest.xml

32 tests were completed in 3s with 32 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
com.faire.yawn.database.YawnCriterionTest 32✅ 3s

✅ com.faire.yawn.database.YawnCriterionTest

✅ isNotEmpty with collection column()
✅ or with and combinations()
✅ isNull with column()
✅ lt column against column()
✅ all and and or overloads - varargs versions()
✅ addOrOfNotNull filters out null criteria()
✅ addAndOfNotNull filters out null criteria()
✅ eq column against String()
✅ like with String and match mode()
✅ lt column against long()
✅ eq column against column()
✅ empty or means true()
✅ gt column against hibernate supported object()
✅ all and and or overloads - two operands versions()
✅ iLike with String and match mode()
✅ addIsNotNull filters to non-null rows()
✅ le column against long()
✅ joins with book and author()
✅ between column with low and high values()
✅ ne column against String()
✅ isEmpty with collection column()
✅ gt column against long()
✅ notIn with column and collection()
✅ ne column against column()
✅ le column against column()
✅ not with criterion()
✅ addIsNotNull with FK column filters to non-null rows()
✅ all and and or overloads - list versions()
✅ eqOrIsNull with column and value()
✅ empty and means true()
✅ isNotNull with column()
✅ in with column and collection()

✅ yawn-database-test/build/test-results/test/TEST-com.faire.yawn.database.YawnForeignAndCompositeKeyTest.xml

7 tests were completed in 356ms with 7 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
com.faire.yawn.database.YawnForeignAndCompositeKeyTest 7✅ 356ms

✅ com.faire.yawn.database.YawnForeignAndCompositeKeyTest

✅ query on custom named non-ID foreign key works and respects foreign key type()
✅ simplified foreign key in clause syntax()
✅ simplified foreign key equals syntax()
✅ generate using the Id when foreign key not specified()
✅ simplified foreign key in clause and subquery syntax()
✅ foreign key queries work with composite foreign keys()
✅ queries work with partial or whole composite IDs()

✅ yawn-database-test/build/test-results/test/TEST-com.faire.yawn.database.YawnJoinsTest.xml

29 tests were completed in 2s with 29 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
com.faire.yawn.database.YawnJoinsTest 29✅ 2s

✅ com.faire.yawn.database.YawnJoinsTest

✅ yawn one-to-many inner join()
✅ yawn many-to-one inner join()
✅ yawn not is empty - publishers with books()
✅ yawn right join - publisher without books()
✅ simplest join reference()
✅ use attachJoinRef for basic functionality()
✅ applyJoinRef equivalence test()
✅ yawn many-to-many inner join()
✅ multiple joins to the same table using join references - book's authors favorite authors()
✅ yawn deeply-nested join structure - publishers with books published with left join()
✅ yawn one-to-one inner join()
✅ joins to the same table - book's authors favorite books()
✅ applyJoinRefs with 2 references test, one is from a multiple join - reviewer and publisher()
✅ join with criterion()
✅ yawn left join - books with publishers()
✅ yawn deeply-nested join structure - people who's favorite books are not their own writing()
✅ yawn is empty - publishers without books()
✅ yawn left join - books without publishers()
✅ applyJoinRefs with 3 references test - reviewer, book, and publisher()
✅ yawn deeply-nested join structure - anyone that published Tolkien()
✅ yawn deeply-nested join structure - authors who's favorite books are not their own writing'()
✅ multiple joins to the same table - book's authors favorite authors()
✅ applyJoinRefs with multiple references test - equivalent to multiple applyFilter calls()
✅ use attachJoinRef to reuse reference which has been called in the query before, without creating duplicate path()
✅ yawn deeply-nested join structure - publishers with pages published()
✅ applyJoinRefs usage demonstration()
✅ yawn deeply-nested join structure - publishers with books published()
✅ yawn right join - books without publisher()
✅ yawn foreign key after join()

✅ yawn-database-test/build/test-results/test/TEST-com.faire.yawn.database.YawnLockModeTest.xml

6 tests were completed in 435ms with 6 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
com.faire.yawn.database.YawnLockModeTest 6✅ 435ms

✅ com.faire.yawn.database.YawnLockModeTest

✅ forShare sets PESSIMISTIC_READ lock mode()
✅ setLockMode with PESSIMISTIC_READ()
✅ forUpdate sets PESSIMISTIC_WRITE lock mode()
✅ setLockMode with PESSIMISTIC_WRITE()
✅ setLockMode with NONE explicitly set()
✅ forUpdate can be combined with maxResults and offset()

✅ yawn-database-test/build/test-results/test/TEST-com.faire.yawn.database.YawnMinAndMaxByTest.xml

4 tests were completed in 168ms with 4 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
com.faire.yawn.database.YawnMinAndMaxByTest 4✅ 168ms

✅ com.faire.yawn.database.YawnMinAndMaxByTest

✅ yawn maxBy works()
✅ yawn minByMultiple works()
✅ yawn maxByMultiple works()
✅ yawn minBy works()

✅ yawn-database-test/build/test-results/test/TEST-com.faire.yawn.database.YawnPaginationQueriesTest.xml

11 tests were completed in 513ms with 11 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
com.faire.yawn.database.YawnPaginationQueriesTest 11✅ 513ms

✅ com.faire.yawn.database.YawnPaginationQueriesTest

✅ count distinct()
✅ do paginate with projection()
✅ list with join()
✅ list paginated()
✅ paginate with projection()
✅ list batched()
✅ do paginated()
✅ set batched()
✅ set paginated()
✅ list with total results()
✅ list batched - projection()

❌ yawn-database-test/build/test-results/test/TEST-com.faire.yawn.database.YawnProjectionMappingTest.xml

1 tests were completed in 90ms with 0 passed, 1 failed and 0 skipped.

Test suite Passed Failed Skipped Time
com.faire.yawn.database.YawnProjectionMappingTest 1❌ 90ms

❌ com.faire.yawn.database.YawnProjectionMappingTest

❌ yawn query with projection()
	java.lang.ClassCastException: class java.lang.String cannot be cast to class [Ljava.lang.Object; (java.lang.String and [Ljava.lang.Object; are in module java.base of loader 'bootstrap')

✅ yawn-database-test/build/test-results/test/TEST-com.faire.yawn.database.YawnProjectionTest.xml

30 tests were completed in 2s with 30 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
com.faire.yawn.database.YawnProjectionTest 30✅ 2s

✅ com.faire.yawn.database.YawnProjectionTest

✅ yawn query with projection and order()
✅ non-null values can be coerced into null values in projections()
✅ project non-null column with addIsNotNull()
✅ yawn query with data class projection()
✅ yawn query with projection function - count()
✅ yawn query with projection function - count distinct()
✅ yawn query with rowCount projection()
✅ yawn query with projection function - avg with nullable columns()
✅ yawn query with projection and join()
✅ yawn query with projection function - sum with nullable columns()
✅ yawn query with maxValueOf and minValueOf()
✅ yawn query with post projection()
✅ use custom user-defined projection()
✅ yawn query with projection()
✅ yawn query with triple projection()
✅ yawn query with projection function - min & max()
✅ yawn query with exists projection()
✅ yawn query with nullable post projection()
✅ yawn query with group by()
✅ apply filter on projected query()
✅ yawn query with pair projection()
✅ yawn query with projection - foreign key via join()
✅ yawn query with projection function - avg()
✅ yawn query with projection function - sum()
✅ project non-null FK column with addIsNotNull()
✅ yawn query with projection function - distinct()
✅ apply multiple filters on projected query()
✅ use constant projection()
✅ yawn query with projection - full entity()
✅ yawn query with projection - foreign key()

✅ yawn-database-test/build/test-results/test/TEST-com.faire.yawn.database.YawnSimpleQueriesTest.xml

31 tests were completed in 2s with 31 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
com.faire.yawn.database.YawnSimpleQueriesTest 31✅ 2s

✅ com.faire.yawn.database.YawnSimpleQueriesTest

✅ exists()()
✅ nullable queries()
✅ yawn query with max results()
✅ yawn query using apply filter()
✅ yawn query with offset()
✅ yawn query against embedded fields through join()
✅ yawn fetch complete entity()
✅ yawn in()
✅ custom type adapter - EmailAddress()
✅ @ElementCollection of ids()
✅ supports nested joins()
✅ @ElementCollection queries()
✅ query against a hibernate supported object()
✅ yawn all ways of ordering()
✅ yawn not in()
✅ yawn query by string equals()
✅ view entity()
✅ supports joins()
✅ yawn query against embedded fields()
✅ @ElementCollection isEmpty()
✅ querying and joining with @TargetEntity annotation with distinct types()
✅ query a type with @SerializeAsJson()
✅ yawn order with null precedence()
✅ set finalizer()
✅ order by()
✅ yawn formula queries()
✅ people whose favorite book was written by their favorite author()
✅ yawn query by string multiple()
✅ query hints()
✅ yawn equal or is null()
✅ yawn query by id()

✅ yawn-database-test/build/test-results/test/TEST-com.faire.yawn.database.YawnSubQueryTest.xml

7 tests were completed in 482ms with 7 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
com.faire.yawn.database.YawnSubQueryTest 7✅ 482ms

✅ com.faire.yawn.database.YawnSubQueryTest

✅ yawn query with a sub query using detached criteria with join()
✅ yawn query with a sub query using detached criteria with join criteria()
✅ can find authors of large books using a correlated subquery()
✅ yawn query with a sub query using detached criteria()
✅ yawn query with a sub query using detached criteria with left join()
✅ yawn query with a sub query using detached criteria projected to a collection()
✅ can use subquery restrictions within another restriction()

✅ yawn-gradle-plugin/build/test-results/test/TEST-com.faire.gradle.yawn.FaireYawnTest.xml

1 tests were completed in 70s with 1 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
com.faire.gradle.yawn.FaireYawnTest 1✅ 70s

✅ com.faire.gradle.yawn.FaireYawnTest

✅ basic project with ksp processor(GradleRunner, File)

✅ yawn-integration-test/build/test-results/test/TEST-com.faire.yawn.YawnEntityPathTest.xml

4 tests were completed in 241ms with 4 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
com.faire.yawn.YawnEntityPathTest 4✅ 241ms

✅ com.faire.yawn.YawnEntityPathTest

✅ can generate path with an un-aliased root()
✅ join column def path contains whole chain including root aliases()
✅ join column def path contains whole chain()
✅ can generate path with an aliased root for subqueries()

✅ yawn-integration-test/build/test-results/test/TEST-com.faire.yawn.YawnEntityProcessorJoinsTest.xml

2 tests were completed in 729ms with 2 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
com.faire.yawn.YawnEntityProcessorJoinsTest 2✅ 729ms

✅ com.faire.yawn.YawnEntityProcessorJoinsTest

✅ can generate column definition for one-to-one and many-to-one relations()
✅ can generate column definition for one-to-many and many-to-many relations()

✅ yawn-integration-test/build/test-results/test/TEST-com.faire.yawn.YawnEntityProcessorTest.xml

8 tests were completed in 292ms with 8 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
com.faire.yawn.YawnEntityProcessorTest 8✅ 292ms

✅ com.faire.yawn.YawnEntityProcessorTest

✅ can generate column definition for non-relations()
✅ can generate embedded property definitions and types()
✅ can generate column definition for ElementCollection()
✅ nested class naming()
✅ ignore transient fields()
✅ can generate column definition for inheritance()
✅ match visibility of the original entity()
✅ generate a tableDef that inherit from a generic YawnTableDef abstract class()

✅ yawn-integration-test/build/test-results/test/TEST-com.faire.yawn.YawnProjectionProcessorTest.xml

1 tests were completed in 40ms with 1 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
com.faire.yawn.YawnProjectionProcessorTest 1✅ 40ms

✅ com.faire.yawn.YawnProjectionProcessorTest

✅ simple projection is generated()

Annotations

Check failure on line 321 in yawn-api/src/main/kotlin/com/faire/yawn/project/YawnProjections.kt

See this annotation in the file changed.

@github-actions github-actions / Test Results

com.faire.yawn.database.YawnProjectionMappingTest ► yawn query with projection()

Failed test found in:
  yawn-database-test/build/test-results/test/TEST-com.faire.yawn.database.YawnProjectionMappingTest.xml
Error:
  java.lang.ClassCastException: class java.lang.String cannot be cast to class [Ljava.lang.Object; (java.lang.String and [Ljava.lang.Object; are in module java.base of loader 'bootstrap')
Raw output
java.lang.ClassCastException: class java.lang.String cannot be cast to class [Ljava.lang.Object; (java.lang.String and [Ljava.lang.Object; are in module java.base of loader 'bootstrap')
	at com.faire.yawn.project.YawnProjections$Mapping2Projection.project(YawnProjections.kt:321)
	at com.faire.yawn.database.YawnProjectionMappingTest_BookNameAndNotesProjection.create$lambda$0(YawnProjectionMappingTest_BookNameAndNotesProjectionDef.kt:23)
	at com.faire.yawn.project.YawnCompositeQueryProjection.project(YawnCompositeQueryProjection.kt:28)
	at com.faire.yawn.criteria.builder.ProjectedTypeSafeCriteriaBuilder.applyFilter$lambda$2$lambda$1(ProjectedTypeSafeCriteriaBuilder.kt:41)
	at com.faire.yawn.criteria.builder.BaseTypeSafeCriteriaBuilder.uniqueResult(BaseTypeSafeCriteriaBuilder.kt:99)
	at com.faire.yawn.database.YawnProjectionMappingTest.yawn_query_with_projection$lambda$4(YawnProjectionMappingTest.kt:24)
	at com.faire.yawn.setup.hibernate.YawnTestTransactor.open(YawnTestTransactor.kt:18)
	at com.faire.yawn.database.YawnProjectionMappingTest.yawn query with projection(YawnProjectionMappingTest.kt:12)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)