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

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

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 461x 1x 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 4x 1x 1x
import {IStatement} from "./_statement";
import {seq, alt, opt, optPrio, per, plus, altPrio, verNotLang} from "../combi";
import {Target, Source, Dynamic, ComponentCompare, ComponentCond, SimpleName, FieldOffset, FieldLength, SimpleFieldChain2} from "../expressions";
import {IStatementRunnable} from "../statement_runnable";
import {LanguageVersion} from "../../../version";
 
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 = seq("FROM", Source);
 
    const fromTo = seq(optPrio(from),
                       optPrio(seq("TO", Source)));
 
    // WHERE (dynamic) blocked in KeyUser
    const where = seq("WHERE", alt(ComponentCond, verNotLang(LanguageVersion.KeyUser, Dynamic)));
 
    const key = seq("WITH TABLE KEY",
                    opt(seq(keyName, "COMPONENTS")),
                    plus(ComponentCompare));
 
    const table = seq("TABLE",
                      Target,
                      alt(per(index, using), seq(optPrio(from), optPrio(using)), key));
 
    const other = seq(Target,
                      alt(per(index, using), fromTo, key), opt(where));
 
    const f = seq(SimpleFieldChain2, 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));
  }
 
}