All files / src/abap/2_statements/expressions type_table_key.ts

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

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 331x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x  
import {seq, opt, alt, ver, Expression, altPrio, plus, optPrio, failStar} from "../combi";
import {FieldSub, Field} from ".";
import {Version} from "../../../version";
import {IStatementRunnable} from "../statement_runnable";
 
export class TypeTableKey extends Expression {
  public getRunnable(): IStatementRunnable {
 
    const uniqueness = alt("NON-UNIQUE", "UNIQUE");
    const defaultKey = "DEFAULT KEY";
    const emptyKey = ver(Version.v740sp02, "EMPTY KEY");
 
    const components = plus(alt(seq("WITH", failStar()), FieldSub));
 
    const further = seq(alt("WITHOUT", "WITH"), "FURTHER SECONDARY KEYS");
 
    const alias = seq("ALIAS", Field);
 
    const key = seq("WITH",
                    opt(uniqueness),
                    altPrio(defaultKey, emptyKey,
                            seq(opt(alt("SORTED", "HASHED")),
                                "KEY",
                                alt(seq(Field, opt(alias), "COMPONENTS", components),
                                    components))),
                    optPrio(further),
                    optPrio("READ-ONLY"));
 
    return key;
  }
 
}