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

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

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 1x
import {plusPrio, seq, ver, tok, Expression, optPrio, altPrio} from "../combi";
import {Constant, SQLFieldName, Dynamic, Field, SQLAggregation, SQLCase} from ".";
import {Version} from "../../../version";
import {WAt} from "../../1_lexer/tokens";
import {IStatementRunnable} from "../statement_runnable";
import {SQLFunction} from "./sql_function";
import {SimpleFieldChain} from "./simple_field_chain";
import {SQLPath} from "./sql_path";
 
export class SQLFieldList extends Expression {
  public getRunnable(): IStatementRunnable {
    const comma = optPrio(ver(Version.v740sp05, ","));
 
    const abap = ver(Version.v740sp05, seq(tok(WAt), SimpleFieldChain));
 
    const as = seq("AS", Field);
 
    const field = altPrio(SQLAggregation,
                          SQLCase,
                          SQLFunction,
                          SQLPath,
                          SQLFieldName,
                          abap,
                          Constant);
 
    const arith = ver(Version.v740sp05, plusPrio(seq(altPrio("+", "-", "*", "/"), field)));
    const concat = ver(Version.v740sp05, plusPrio(seq("&&", field)));
 
    return altPrio("*",
                   Dynamic,
                   plusPrio(seq(field, optPrio(concat), optPrio(arith), optPrio(as), comma)));
  }
}