All files / src/abap/5_syntax/statements modify_database.ts

94.59% Statements 35/37
90% Branches 9/10
100% Functions 1/1
94.59% Lines 35/37

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 371x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 6x 1x 1x 6x 6x 6x 6x 5x 5x 3x 5x 2x 2x 6x 1x 1x 6x 5x 6x     5x 5x 5x 4x 1x
import * as Expressions from "../../2_statements/expressions";
import {StatementNode} from "../../nodes";
import {CurrentScope} from "../_current_scope";
import {Dynamic} from "../expressions/dynamic";
import {DatabaseTable} from "../expressions/database_table";
import {StatementSyntax} from "../_statement_syntax";
import {Source} from "../expressions/source";
import {ReferenceType} from "../_reference";
 
export class ModifyDatabase implements StatementSyntax {
  public runSyntax(node: StatementNode, scope: CurrentScope, filename: string): void {
    for (const d of node.findAllExpressions(Expressions.Dynamic)) {
      new Dynamic().runSyntax(d, scope, filename);
    }
 
    const dbtab = node.findFirstExpression(Expressions.DatabaseTable);
    if (dbtab !== undefined) {
      if (node.getChildren().length === 5) {
        const found = scope.findVariable(dbtab.concatTokens());
        if (found) {
          scope.addReference(dbtab.getFirstToken(), found, ReferenceType.DataWriteReference, filename);
        } else {
          new DatabaseTable().runSyntax(dbtab, scope, filename);
        }
      } else {
        new DatabaseTable().runSyntax(dbtab, scope, filename);
      }
    }
 
    for (const s of node.findAllExpressions(Expressions.Source)) {
      new Source().runSyntax(s, scope, filename);
    }
    for (const s of node.findAllExpressions(Expressions.SimpleSource3)) {
      new Source().runSyntax(s, scope, filename);
    }
  }
}