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

95.45% Statements 42/44
85.71% Branches 6/7
100% Functions 1/1
95.45% Lines 42/44

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 37 38 39 40 41 42 43 441x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 13x 1x 1x 13x 13x 13x 13x 13x 12x 12x 4x 12x 8x 8x 13x 1x 1x 13x 13x 13x 13x     13x 13x 13x 13x 13x 13x 1x
import * as Expressions from "../../2_statements/expressions";
import {ExpressionNode, StatementNode} from "../../nodes";
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";
import {SyntaxInput} from "../_syntax_input";
import {AbstractType} from "../../types/basic/_abstract_type";
import {DatabaseTableSource} from "../expressions/database_table";
import {checkDatabaseWorkArea} from "../expressions/_check_database_work_area";
 
export class ModifyDatabase implements StatementSyntax {
  public runSyntax(node: StatementNode, input: SyntaxInput): void {
    for (const d of node.findAllExpressions(Expressions.Dynamic)) {
      Dynamic.runSyntax(d, input);
    }
 
    let dbSource: DatabaseTableSource = undefined;
    const dbtab = node.findFirstExpression(Expressions.DatabaseTable);
    if (dbtab !== undefined) {
      if (node.getChildren().length === 5) {
        const found = input.scope.findVariable(dbtab.concatTokens());
        if (found) {
          input.scope.addReference(dbtab.getFirstToken(), found, ReferenceType.DataWriteReference, input.filename);
        } else {
          dbSource = DatabaseTable.runSyntax(dbtab, input);
        }
      } else {
        dbSource = DatabaseTable.runSyntax(dbtab, input);
      }
    }
 
    const sourceTypes = new Map<ExpressionNode, AbstractType | undefined>();
    for (const s of node.findAllExpressions(Expressions.Source)) {
      sourceTypes.set(s, Source.runSyntax(s, input));
    }
    for (const s of node.findAllExpressions(Expressions.SimpleSource3)) {
      sourceTypes.set(s, Source.runSyntax(s, input));
    }
 
    checkDatabaseWorkArea(node, dbSource, sourceTypes, input);
  }
}