@@ -122,13 +122,48 @@ WHITESPACE = [ \t\r\n]+
122
122
/* * @return true if all statement info is gathered */
123
123
boolean handleNext () {
124
124
return false ;
125
- }
125
+ }
126
+
127
+ /* * @return true if all statement info is gathered */
128
+ boolean handleOperationTarget (String target ) {
129
+ return false ;
130
+ }
131
+
132
+ boolean waitingOperationTarget () {
133
+ return false ;
134
+ }
126
135
127
136
SqlStatementInfo getResult (String fullStatement ) {
128
137
return SqlStatementInfo . create(fullStatement, getClass(). getSimpleName(). toUpperCase(java.util. Locale . ROOT ), mainIdentifier);
129
138
}
130
139
}
131
140
141
+ private static abstract class CompositeOp extends Operation {
142
+ private String operationTarget = " " ;
143
+ private boolean waitingOperationTarget = true ;
144
+
145
+ boolean waitingOperationTarget () {
146
+ return waitingOperationTarget;
147
+ }
148
+
149
+ boolean handleOperationTarget (String target ) {
150
+ operationTarget = target;
151
+ waitingOperationTarget = false ;
152
+ return false ;
153
+ }
154
+
155
+ boolean shouldHandleIdentifier () {
156
+ return " TABLE" . equals(operationTarget);
157
+ }
158
+
159
+ SqlStatementInfo getResult (String fullStatement ) {
160
+ if (! " " . equals(operationTarget)) {
161
+ return SqlStatementInfo . create(fullStatement, getClass(). getSimpleName(). toUpperCase(java.util. Locale . ROOT ) + " " + operationTarget, mainIdentifier);
162
+ }
163
+ return super . getResult(fullStatement);
164
+ }
165
+ }
166
+
132
167
private static class NoOp extends Operation {
133
168
static final Operation INSTANCE = new NoOp ();
134
169
@@ -273,6 +308,33 @@ WHITESPACE = [ \t\r\n]+
273
308
}
274
309
}
275
310
311
+ private class Create extends CompositeOp {
312
+ boolean handleIdentifier () {
313
+ if (shouldHandleIdentifier()) {
314
+ mainIdentifier = readIdentifierName();
315
+ }
316
+ return true ;
317
+ }
318
+ }
319
+
320
+ private class Drop extends CompositeOp {
321
+ boolean handleIdentifier () {
322
+ if (shouldHandleIdentifier()) {
323
+ mainIdentifier = readIdentifierName();
324
+ }
325
+ return true ;
326
+ }
327
+ }
328
+
329
+ private class Alter extends CompositeOp {
330
+ boolean handleIdentifier () {
331
+ if (shouldHandleIdentifier()) {
332
+ mainIdentifier = readIdentifierName();
333
+ }
334
+ return true ;
335
+ }
336
+ }
337
+
276
338
private SqlStatementInfo getResult() {
277
339
if (builder. length() > LIMIT ) {
278
340
builder. delete(LIMIT , builder. length());
@@ -329,6 +391,27 @@ WHITESPACE = [ \t\r\n]+
329
391
appendCurrentFragment();
330
392
if (isOverLimit()) return YYEOF ;
331
393
}
394
+ "CREATE" {
395
+ if (! insideComment) {
396
+ setOperation(new Create ());
397
+ }
398
+ appendCurrentFragment();
399
+ if (isOverLimit()) return YYEOF ;
400
+ }
401
+ "DROP" {
402
+ if (! insideComment) {
403
+ setOperation(new Drop ());
404
+ }
405
+ appendCurrentFragment();
406
+ if (isOverLimit()) return YYEOF ;
407
+ }
408
+ "ALTER" {
409
+ if (! insideComment) {
410
+ setOperation(new Alter ());
411
+ }
412
+ appendCurrentFragment();
413
+ if (isOverLimit()) return YYEOF ;
414
+ }
332
415
"FROM" {
333
416
if (! insideComment && ! extractionDone) {
334
417
if (operation == NoOp . INSTANCE ) {
@@ -358,7 +441,40 @@ WHITESPACE = [ \t\r\n]+
358
441
"NEXT" {
359
442
if (! insideComment && ! extractionDone) {
360
443
extractionDone = operation. handleNext();
444
+ }
445
+ appendCurrentFragment();
446
+ if (isOverLimit()) return YYEOF ;
447
+ }
448
+ "TABLE" {
449
+ if (! insideComment && ! extractionDone) {
450
+ if (operation. waitingOperationTarget()) {
451
+ extractionDone = operation. handleOperationTarget(" TABLE" );
452
+ } else {
453
+ extractionDone = operation. handleIdentifier();
454
+ }
455
+ }
456
+ appendCurrentFragment();
457
+ if (isOverLimit()) return YYEOF ;
458
+ }
459
+ "INDEX" {
460
+ if (! insideComment && ! extractionDone) {
461
+ if (operation. waitingOperationTarget()) {
462
+ extractionDone = operation. handleOperationTarget(" INDEX" );
463
+ } else {
464
+ extractionDone = operation. handleIdentifier();
361
465
}
466
+ }
467
+ appendCurrentFragment();
468
+ if (isOverLimit()) return YYEOF ;
469
+ }
470
+ "DATABASE" {
471
+ if (! insideComment && ! extractionDone) {
472
+ if (operation. waitingOperationTarget()) {
473
+ extractionDone = operation. handleOperationTarget(" DATABASE" );
474
+ } else {
475
+ extractionDone = operation. handleIdentifier();
476
+ }
477
+ }
362
478
appendCurrentFragment();
363
479
if (isOverLimit()) return YYEOF ;
364
480
}
0 commit comments