9
9
import java .util .Set ;
10
10
import java .util .StringTokenizer ;
11
11
12
- import org .hibernate .internal .util .StringHelper ;
12
+ import static java .lang .Character .isJavaIdentifierStart ;
13
+ import static org .hibernate .internal .util .StringHelper .WHITESPACE ;
13
14
14
15
/**
15
16
* Performs formatting of basic SQL statements (DML + query).
@@ -37,7 +38,6 @@ private static class FormatProcess {
37
38
boolean afterByOrSetOrFromOrSelect ;
38
39
int afterOn ;
39
40
boolean afterBetween ;
40
- boolean afterExtract ;
41
41
boolean afterInsert ;
42
42
int inFunction ;
43
43
int parensSinceSelect ;
@@ -58,7 +58,7 @@ public FormatProcess(String sql) {
58
58
59
59
tokens = new StringTokenizer (
60
60
sql ,
61
- "()+*/-=<>'`\" []," + StringHelper . WHITESPACE ,
61
+ "()+*/-=<>'`\" []," + WHITESPACE ,
62
62
true
63
63
);
64
64
}
@@ -105,13 +105,22 @@ public String perform() {
105
105
closeParen ();
106
106
break ;
107
107
108
+ case "for" :
109
+ forUpdate ();
110
+ break ;
111
+
108
112
case "select" :
109
113
select ();
110
114
break ;
111
- case "merge" :
112
- case "insert" :
113
115
case "update" :
116
+ if ( "for" .equals ( lastToken ) ) {
117
+ out ();
118
+ break ;
119
+ }
120
+ // else fall through
121
+ case "insert" :
114
122
case "delete" :
123
+ case "merge" :
115
124
updateOrInsertOrDelete ();
116
125
break ;
117
126
@@ -127,11 +136,6 @@ public String perform() {
127
136
afterBetween = true ;
128
137
misc ();
129
138
break ;
130
- case "trim" :
131
- case "extract" :
132
- afterExtract = true ;
133
- misc ();
134
- break ;
135
139
136
140
//TODO: detect when 'left', 'right' are function names
137
141
case "left" :
@@ -201,6 +205,18 @@ public String perform() {
201
205
return result .toString ();
202
206
}
203
207
208
+ private void forUpdate () {
209
+ if ( inFunction ==0 ) {
210
+ decrementIndent ();
211
+ newline ();
212
+ out ();
213
+ beginLine = false ;
214
+ }
215
+ else {
216
+ misc ();
217
+ }
218
+ }
219
+
204
220
private void or () {
205
221
logical ();
206
222
}
@@ -216,12 +232,11 @@ private void and() {
216
232
}
217
233
218
234
private void from () {
219
- if ( afterExtract ) {
220
- misc ();
221
- afterExtract = false ;
235
+ if ( inFunction == 0 ) {
236
+ endNewClause ();
222
237
}
223
238
else {
224
- endNewClause ();
239
+ misc ();
225
240
}
226
241
}
227
242
@@ -480,17 +495,18 @@ private void decrementIndent() {
480
495
}
481
496
482
497
private static boolean isFunctionName (String tok ) {
483
- if ( tok == null || tok .length () == 0 ) {
498
+ if ( tok == null || tok .isEmpty () ) {
484
499
return false ;
485
500
}
486
-
487
- final char begin = tok .charAt ( 0 );
488
- final boolean isIdentifier = Character .isJavaIdentifierStart ( begin ) || '"' == begin ;
489
- return isIdentifier && !NON_FUNCTION_NAMES .contains ( tok );
501
+ else {
502
+ final char begin = tok .charAt ( 0 );
503
+ final boolean isIdentifier = isJavaIdentifierStart ( begin ) || '"' == begin ;
504
+ return isIdentifier && !NON_FUNCTION_NAMES .contains ( tok );
505
+ }
490
506
}
491
507
492
508
private static boolean isWhitespace (String token ) {
493
- return StringHelper . WHITESPACE .contains ( token );
509
+ return WHITESPACE .contains ( token );
494
510
}
495
511
496
512
private void newline () {
@@ -500,15 +516,15 @@ private void newline() {
500
516
}
501
517
502
518
private void appendUntilToken (String stopToken ) {
503
- final StringBuilder sb = new StringBuilder ( this .token );
519
+ final StringBuilder quoted = new StringBuilder ( this .token );
504
520
String t ;
505
521
do {
506
522
t = tokens .nextToken ();
507
- sb .append ( t );
523
+ quoted .append ( t );
508
524
}
509
525
while ( !stopToken .equals ( t ) && tokens .hasMoreTokens () );
510
- this .token = sb .toString ();
511
- lcToken = token ;
526
+ this .token = quoted .toString ();
527
+ lcToken = this . token ;
512
528
}
513
529
}
514
530
0 commit comments