@@ -9,15 +9,19 @@ export default class Statement {
9
9
public type : StatementType = StatementType . Unknown ;
10
10
11
11
constructor ( public tokens : Token [ ] , public range : IRange ) {
12
- const first = tokens [ 0 ] ;
12
+ this . tokens = this . tokens . filter ( newToken => newToken . type !== `newline` ) ;
13
+
14
+ let first = this . tokens [ 0 ] ;
15
+
16
+ if ( tokenIs ( first , `word` , `EXEC` ) && tokenIs ( this . tokens [ 1 ] , `word` , `SQL` ) && this ) {
17
+ first = this . tokens [ 3 ] ;
18
+ }
13
19
14
20
if ( tokenIs ( first , `statementType` ) || tokenIs ( first , `keyword` , `END` ) || tokenIs ( first , `keyword` , `BEGIN` ) ) {
15
21
const wordValue = first . value ?. toUpperCase ( ) ;
16
22
17
23
this . type = StatementTypeWord [ wordValue ] ;
18
24
}
19
-
20
- this . tokens = this . tokens . filter ( newToken => newToken . type !== `newline` )
21
25
22
26
switch ( this . type ) {
23
27
case StatementType . With :
@@ -466,6 +470,9 @@ export default class Statement {
466
470
* DECLARE .. CURSOR FOR
467
471
*/
468
472
getEmbeddedStatementAreas ( ) {
473
+ // Only these statements support the INTO clause in embedded SQL really
474
+ const validIntoStatements : StatementType [ ] = [ StatementType . Unknown , StatementType . With , StatementType . Select ] ;
475
+
469
476
let ranges : { type : "remove" | "marker" , range : IRange } [ ] = [ ] ;
470
477
let intoClause : Token | undefined ;
471
478
let declareStmt : Token | undefined ;
@@ -484,6 +491,7 @@ export default class Statement {
484
491
break ;
485
492
486
493
case `clause` :
494
+ if ( ! validIntoStatements . includes ( this . type ) ) continue ;
487
495
if ( declareStmt ) continue ;
488
496
489
497
// We need to remove the INTO clause completely.
0 commit comments