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

95.83% Statements 46/48
83.33% Branches 10/12
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 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 4x 4x 4x 4x 4x 4x 4x 4x 3x 4x 1x 1x 4x 6x 6x 5x 5x 5x 6x     5x 5x 1x
import * as Expressions from "../../2_statements/expressions";
import {StatementNode} from "../../nodes";
import {CurrentScope} from "../_current_scope";
import {InlineFS} from "../expressions/inline_fs";
import {Source} from "../expressions/source";
import {Target} from "../expressions/target";
import {FSTarget} from "../expressions/fstarget";
import {AbstractType} from "../../types/basic/_abstract_type";
import {TableType} from "../../types/basic";
import {StatementSyntax} from "../_statement_syntax";
 
export class InsertInternal implements StatementSyntax {
  public runSyntax(node: StatementNode, scope: CurrentScope, filename: string): void {
 
    let targetType: AbstractType | undefined;
    for (const t of node.findDirectExpressions(Expressions.Target)) {
      targetType = new Target().runSyntax(t, scope, filename);
    }
    if (targetType instanceof TableType) {
      targetType = targetType.getRowType();
    }
 
    const afterAssigning = node.findExpressionAfterToken("ASSIGNING");
    if (afterAssigning?.get() instanceof Expressions.FSTarget) {
      let source = node.findDirectExpression(Expressions.SimpleSource2);
      if (source === undefined) {
        source = node.findDirectExpression(Expressions.Source);
      }
      const sourceType = source ? new Source().runSyntax(source, scope, filename, targetType) : targetType;
 
      const inlinefs = afterAssigning?.findDirectExpression(Expressions.InlineFS);
      if (inlinefs) {
        new InlineFS().runSyntax(inlinefs, scope, filename, sourceType);
      } else {
        new FSTarget().runSyntax(afterAssigning, scope, filename, sourceType);
      }
    }
 
    for (const s of node.findDirectExpressions(Expressions.Source)) {
      new Source().runSyntax(s, scope, filename, targetType);
    }
 
    for (const s of node.findDirectExpressions(Expressions.SimpleSource1)) {
      new Source().runSyntax(s, scope, filename, targetType);
    }
 
  }
}