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) {