diff --git a/extensions/panache/hibernate-orm-panache/deployment/src/test/java/io/quarkus/hibernate/orm/panache/test/JpaOperationsSortTest.java b/extensions/panache/hibernate-orm-panache/deployment/src/test/java/io/quarkus/hibernate/orm/panache/test/JpaOperationsSortTest.java index fcfbfe19da71b..9ae7225bd13ae 100644 --- a/extensions/panache/hibernate-orm-panache/deployment/src/test/java/io/quarkus/hibernate/orm/panache/test/JpaOperationsSortTest.java +++ b/extensions/panache/hibernate-orm-panache/deployment/src/test/java/io/quarkus/hibernate/orm/panache/test/JpaOperationsSortTest.java @@ -11,8 +11,20 @@ public class JpaOperationsSortTest { @Test public void testSortBy() { - Sort sort = Sort.by("foo", "bar"); - assertEquals(" ORDER BY foo , bar", JpaOperations.toOrderBy(sort)); + Sort sort = Sort.by("foo", "_bar"); + assertEquals(" ORDER BY 'foo' , '_bar'", JpaOperations.toOrderBy(sort)); + } + + @Test + public void testInvalidSortByWithQuote() { + final Sort sort = Sort.by("foo'", "bar"); + assertEquals(" ORDER BY 'foo\\'' , 'bar'", JpaOperations.toOrderBy(sort)); + } + + @Test + public void testInvalidSortByWithEscapeCharacters() { + final Sort sort = Sort.by("foo", "bar\\"); + assertEquals(" ORDER BY 'foo' , 'bar\\\\'", JpaOperations.toOrderBy(sort)); } @Test diff --git a/extensions/panache/panache-common/runtime/src/main/java/io/quarkus/panache/common/Sort.java b/extensions/panache/panache-common/runtime/src/main/java/io/quarkus/panache/common/Sort.java index 42f8432437800..b96e90f3868db 100644 --- a/extensions/panache/panache-common/runtime/src/main/java/io/quarkus/panache/common/Sort.java +++ b/extensions/panache/panache-common/runtime/src/main/java/io/quarkus/panache/common/Sort.java @@ -41,6 +41,7 @@ public enum Direction { } public class Column { + private String name; private Direction direction; @@ -49,7 +50,7 @@ public Column(String name) { } public Column(String name, Direction direction) { - this.name = name; + this.name = escape(name); this.direction = direction; } @@ -68,6 +69,10 @@ public Direction getDirection() { public void setDirection(Direction direction) { this.direction = direction; } + + private String escape(String column) { + return "'" + column.replace("\\", "\\\\").replace("'", "\\'") + "'"; + } } private List columns = new ArrayList<>();