All files / src/abap/2_statements/expressions sql_field.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 321x 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, SQLAggregation, SQLCase, SQLAsName, SimpleFieldChain2, SQLCast} from ".";
import {Version} from "../../../version";
import {WAt, WParenLeftW, WParenRight, WParenRightW} from "../../1_lexer/tokens";
import {IStatementRunnable} from "../statement_runnable";
import {SQLFunction} from "./sql_function";
import {SQLPath} from "./sql_path";
 
export class SQLField extends Expression {
  public getRunnable(): IStatementRunnable {
 
    const abap = ver(Version.v740sp05, seq(tok(WAt), SimpleFieldChain2), Version.OpenABAP);
 
    const as = seq("AS", SQLAsName);
 
    const paren = seq(tok(WParenLeftW), SQLFieldName, altPrio(tok(WParenRightW), tok(WParenRight)));
 
    const field = altPrio(SQLAggregation,
                          SQLCase,
                          SQLCast,
                          SQLFunction,
                          SQLPath,
                          SQLFieldName,
                          abap,
                          Constant,
                          paren);
    const sub = plusPrio(seq(altPrio("+", "-", "*", "/", "&&"), optPrio(tok(WParenLeftW)), field, optPrio(tok(WParenRightW))));
    const arith = ver(Version.v740sp05, sub);
 
    return seq(field, optPrio(arith), optPrio(as));
  }
}