All files / src/abap/2_statements/statements delete_internal.ts

100% Statements 39/39
100% Branches 1/1
100% Functions 1/1
100% Lines 39/39

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 391x 1x 1x 1x 1x 1x 1x 1x 66x 66x 66x 66x 66x 66x 66x 66x 66x 66x 66x 66x 66x 66x 66x 66x 66x 66x 66x 66x 66x 66x 66x 66x 66x 66x 66x 66x 66x 1x 1x
import {IStatement} from "./_statement";
import {seq, alt, opt, optPrio, per, plus, altPrio} from "../combi";
import {Target, Source, Dynamic, ComponentCompare, ComponentCond, SimpleName, FieldSub, FieldOffset, FieldLength} from "../expressions";
import {IStatementRunnable} from "../statement_runnable";
 
export class DeleteInternal implements IStatement {
 
  public getMatcher(): IStatementRunnable {
// todo, is READ and DELETE similar? something can be reused?
    const index = seq("INDEX", Source);
 
    const keyName = altPrio(SimpleName, Dynamic);
    const using = seq("USING KEY", keyName);
 
    const fromTo = seq(optPrio(seq("FROM", Source)),
                       optPrio(seq("TO", Source)));
 
    const where = seq("WHERE", alt(ComponentCond, Dynamic));
 
    const key = seq("WITH TABLE KEY",
                    opt(seq(keyName, "COMPONENTS")),
                    plus(ComponentCompare));
 
    const table = seq(opt("TABLE"),
                      Target,
                      alt(per(index, using), fromTo, key), opt(where));
 
    const f = seq(FieldSub, optPrio(FieldOffset), optPrio(FieldLength));
 
    const adjacent = seq("ADJACENT DUPLICATES FROM",
                         Target,
                         optPrio(using),
                         opt(seq("COMPARING", altPrio("ALL FIELDS", plus(altPrio(f, Dynamic))))),
                         optPrio(using));
 
    return seq("DELETE", alt(table, adjacent));
  }
 
}