diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JSqlParserQueryEnhancer.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JSqlParserQueryEnhancer.java index cd76876ac..7536a5eb9 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JSqlParserQueryEnhancer.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JSqlParserQueryEnhancer.java @@ -96,7 +96,7 @@ public class JSqlParserQueryEnhancer implements QueryEnhancer { } else if (statement instanceof Merge) { return ParsedType.MERGE; } else { - return ParsedType.SELECT; + return ParsedType.OTHER; } } catch (JSQLParserException e) { throw new IllegalArgumentException("The query you provided is not a valid SQL Query!", e); @@ -314,10 +314,10 @@ public class JSqlParserQueryEnhancer implements QueryEnhancer { Select selectStatement = parseSelectStatement(query); /* - For all the other types ({@link ValuesStatement} and {@link SetOperationList}) it does not make sense to provide - alias since: - * ValuesStatement has no alias - * SetOperation can have multiple alias for each operation item + * For all the other types ({@link ValuesStatement} and {@link SetOperationList}) it does not make sense to provide + * alias since: + * ValuesStatement has no alias + * SetOperation can have multiple alias for each operation item */ if (!(selectStatement.getSelectBody() instanceof PlainSelect)) { return null; @@ -516,10 +516,11 @@ public class JSqlParserQueryEnhancer implements QueryEnhancer { *
  • {@code ParsedType.SELECT}: means the top level statement is {@link Select}
  • *
  • {@code ParsedType.INSERT}: means the top level statement is {@link Insert}
  • *
  • {@code ParsedType.MERGE}: means the top level statement is {@link Merge}
  • + *
  • {@code ParsedType.OTHER}: means the top level statement is a different top-level type
  • * */ enum ParsedType { - DELETE, UPDATE, SELECT, INSERT, MERGE; + DELETE, UPDATE, SELECT, INSERT, MERGE, OTHER; } } diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JSqlParserQueryEnhancerUnitTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JSqlParserQueryEnhancerUnitTests.java index 5d9780243..2f84a4c1e 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JSqlParserQueryEnhancerUnitTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JSqlParserQueryEnhancerUnitTests.java @@ -191,6 +191,23 @@ public class JSqlParserQueryEnhancerUnitTests extends QueryEnhancerTckTests { assertThat(queryEnhancer.hasConstructorExpression()).isFalse(); } + @Test // GH-3038 + void truncateStatementShouldWork() { + + StringQuery stringQuery = new StringQuery("TRUNCATE TABLE foo", true); + QueryEnhancer queryEnhancer = QueryEnhancerFactory.forQuery(stringQuery); + + assertThat(stringQuery.getAlias()).isNull(); + assertThat(stringQuery.getProjection()).isEmpty(); + assertThat(stringQuery.hasConstructorExpression()).isFalse(); + + assertThat(queryEnhancer.applySorting(Sort.by("day").descending())).isEqualTo("TRUNCATE TABLE foo"); + assertThat(queryEnhancer.getJoinAliases()).isEmpty(); + assertThat(queryEnhancer.detectAlias()).isNull(); + assertThat(queryEnhancer.getProjection()).isEmpty(); + assertThat(queryEnhancer.hasConstructorExpression()).isFalse(); + } + @ParameterizedTest // GH-2641 @MethodSource("mergeStatementWorksSource") void mergeStatementWorksWithJSqlParser(String query, String alias) {