Skip to content

Commit 6874e0c

Browse files
pdxzzzbeikov
authored andcommitted
Fix SQL formatting bug where a newline is missing after a single-line comment
1 parent 160b3ad commit 6874e0c

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

hibernate-core/src/main/java/org/hibernate/engine/jdbc/internal/BasicFormatterImpl.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,20 +76,21 @@ public String perform() {
7676
token = tokens.nextToken();
7777
}
7878
while ( !"\n".equals( token ) && tokens.hasMoreTokens() );
79+
result.append( "\n" );
7980
}
8081

8182
lcToken = token.toLowerCase( Locale.ROOT );
8283
switch ( lcToken ) {
8384
case "'":
8485
case "`":
8586
case "\"":
86-
appendUntilToken(lcToken);
87+
appendUntilToken( lcToken );
8788
misc();
8889
break;
8990
// SQL Server uses "[" and "]" to escape reserved words
9091
// see SQLServerDialect.openQuote and SQLServerDialect.closeQuote
9192
case "[":
92-
appendUntilToken("]");
93+
appendUntilToken( "]" );
9394
misc();
9495
break;
9596

hibernate-core/src/test/java/org/hibernate/orm/test/jdbc/util/BasicFormatterTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,20 @@ public void testProblematic() {
7878
assertNoLoss( "select * from ((select e.id from Entity e union all select e.id from Entity e) union select e.id from Entity e) grp" );
7979
}
8080

81+
@Test
82+
public void testSingleLineComment(){
83+
assertNoLoss("CREATE TRIGGER before_employee_delete\n"
84+
+ "BEFORE DELETE ON employees\n"
85+
+ "FOR EACH ROW\n"
86+
+ "BEGIN\n"
87+
+ " -- abcd\n"
88+
+ " IF EXISTS (SELECT 1 FROM orders WHERE employee_id = OLD.id) THEN\n"
89+
+ " SIGNAL SQLSTATE '45000'\n"
90+
+ " SET MESSAGE_TEXT = 'Cannot delete employee because they have related orders';\n"
91+
+ " END IF;\n"
92+
+ "END ");
93+
}
94+
8195
private void assertNoLoss(String query) {
8296
String formattedQuery = FormatStyle.BASIC.getFormatter().format( query );
8397
StringTokenizer formatted = new StringTokenizer( formattedQuery, " \t\n\r\f()" );

0 commit comments

Comments
 (0)