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

100% Statements 44/44
100% Branches 1/1
100% Functions 1/1
100% Lines 44/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 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 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 from = optPrio(seq("FROM", Source));
 
    const fromTo = seq(from,
                       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("TABLE",
                      Target,
                      alt(per(index, using), from, key));
 
    const other = seq(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, other));
  }
 
}