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

95.83% Statements 46/48
80% Branches 8/10
100% Functions 1/1
95.83% Lines 46/48

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 44 45 46 47 481x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 8x 8x 4x 4x 8x 8x 8x 8x 8x 8x 1x 1x 1x 1x 1x 1x 8x 7x 7x 6x 6x 7x 8x 8x 8x     8x 8x 4x 4x 6x 6x 1x
import * as Expressions from "../../2_statements/expressions";
import {StatementNode} from "../../nodes";
import {CurrentScope} from "../_current_scope";
import {Target} from "../expressions/target";
import {Source} from "../expressions/source";
import {ComponentCompare} from "../expressions/component_compare";
import {ComponentCond} from "../expressions/component_cond";
import {StatementSyntax} from "../_statement_syntax";
import {ILookupResult} from "../../../ddic";
import {AbstractType} from "../../types/basic/_abstract_type";
import {TableType} from "../../types/basic";
 
export class DeleteInternal implements StatementSyntax {
  public runSyntax(node: StatementNode, scope: CurrentScope, filename: string): void {
 
    for (const s of node.findDirectExpressions(Expressions.Source)) {
      new Source().runSyntax(s, scope, filename);
    }
 
    let targetType: AbstractType | undefined = undefined;
    const target = node.findDirectExpression(Expressions.Target);
    if (target) {
      let tabl: ILookupResult | undefined = undefined;
      if (node.getChildren().length === 5 && node.getChildren()[2].concatTokens().toUpperCase() === "FROM") {
        // it might be a database table
        tabl = scope.getDDIC()?.lookupTableOrView(target.concatTokens());
        if (tabl) {
          scope.getDDICReferences().addUsing(scope.getParentObj(), {object: tabl.object});
        }
      }
      if (tabl === undefined) {
        targetType = new Target().runSyntax(target, scope, filename);
        if (targetType instanceof TableType) {
          targetType = targetType.getRowType();
        }
      }
    }
 
    for (const t of node.findDirectExpressions(Expressions.ComponentCompare)) {
      new ComponentCompare().runSyntax(t, scope, filename, targetType);
    }
 
    for (const t of node.findDirectExpressions(Expressions.ComponentCond)) {
      new ComponentCond().runSyntax(t, scope, filename, targetType);
    }
 
  }
}