Skip to content

The "new" operator is concatenated to DTO name in JPQL query after applying constraints #5152

@Flaurite

Description

@Flaurite

Environment

Jmix version: 2.7.6

Bug Description

For instance, you have User and UserDto entities. The user entity is restricted by JPQL row level policy: {E}.username = :current_user_username. You perform the following query:

select new dev.palestiner.jmixdatamanagerbag.entity.UserDto(u.username) from User u

But the result query is built as follows:

select newdev.palestiner.jmixdatamanagerbag.entity.UserDto(u.username) from User u where u.username = :current_user_username

Steps To Reproduce

  1. Download demo project: jmix-datamanager-bug.zip
  2. Run UserTest#testLoadDtoByDataManager_fail()

Current Behavior

Stacktrace:

Errors found for input jpql:[select newdev.palestiner.jmixdatamanagerbag.entity.UserDto(u.username) from User u where u.username = :current_user_username]
CommonErrorNode [<mismatched token: [@11,58:58='(',<27>,1:58], resync=(u.username) from User u>]
io.jmix.data.impl.jpql.JpqlSyntaxException: Errors found for input jpql:[select newdev.palestiner.jmixdatamanagerbag.entity.UserDto(u.username) from User u where u.username = :current_user_username]
CommonErrorNode [<mismatched token: [@11,58:58='(',<27>,1:58], resync=(u.username) from User u>]
	at io.jmix.data.impl.jpql.Parser.checkTreeForExceptions(Parser.java:112)
	at io.jmix.data.impl.jpql.Parser.parse(Parser.java:40)
	at io.jmix.data.impl.jpql.QueryTree.<init>(QueryTree.java:50)
	at io.jmix.data.impl.jpql.QueryTree.<init>(QueryTree.java:40)
	at io.jmix.data.impl.jpql.QueryParserAstBased.getTree(QueryParserAstBased.java:74)
	at io.jmix.data.impl.jpql.QueryParserAstBased.getAnalyzer(QueryParserAstBased.java:88)
	at io.jmix.data.impl.jpql.QueryParserAstBased.getParamNames(QueryParserAstBased.java:95)
	at io.jmix.eclipselink.impl.JmixEclipseLinkQuery.processParams(JmixEclipseLinkQuery.java:629)
	at io.jmix.eclipselink.impl.JmixEclipseLinkQuery.getQuery(JmixEclipseLinkQuery.java:463)
	at io.jmix.eclipselink.impl.JmixEclipseLinkQuery.getResultList(JmixEclipseLinkQuery.java:135)
	at io.jmix.eclipselink.impl.JpaDataStore.executeQuery(JpaDataStore.java:688)
	at io.jmix.eclipselink.impl.JpaDataStore.loadAllValues(JpaDataStore.java:419)

Metadata

Metadata

Assignees

Type

Projects

Status

Done

Relationships

None yet

Development

No branches or pull requests

Issue actions