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

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

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 381x 1x 1x 1x 1x 1x 1x 1x 1x 1x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 1x 1x
import {IStatement} from "./_statement";
import {seq, alt, opt, altPrio, optPrio, plus, per, ver} from "../combi";
import {Field, Source, Dynamic, FieldSub, ComponentCompareSimple, ReadTableTarget, SimpleSource2} from "../expressions";
import {IStatementRunnable} from "../statement_runnable";
import {Version} from "../../../version";
import {TransportingFields} from "../expressions/transporting_fields";
 
export class ReadTable implements IStatement {
 
  public getMatcher(): IStatementRunnable {
    const comparing = seq("COMPARING", alt(plus(FieldSub), plus(Dynamic)));
 
    const index = seq("INDEX", Source);
 
    const components = seq(alt(Field, Dynamic), "COMPONENTS", ComponentCompareSimple);
 
    const key = seq(altPrio("WITH KEY", "WITH TABLE KEY"),
                    alt(ComponentCompareSimple,
                        components,
                        seq(optPrio("="), Source)));
 
    const using = seq("USING KEY", alt(Field, Dynamic));
 
    const from = seq("FROM", Source);
 
    const transporting = seq("TRANSPORTING", altPrio("ALL FIELDS", "NO FIELDS", TransportingFields));
    const common = [ReadTableTarget, comparing, "CASTING", transporting, "BINARY SEARCH"] as const;
 
    const perm = alt(per(alt(index, from), using, ...common),
                     per(key, ...common),
                     per(...common));
 
    return seq("READ TABLE",
               alt(SimpleSource2, ver(Version.v740sp02, Source, Version.OpenABAP)),
               opt(perm));
  }
 
}