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

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

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 361x 1x 1x 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 1x
import {seq, per, str, Expression, altPrio, optPrio, ver, tok} from "../combi";
import {SQLFieldList, SQLFrom, SQLCond, SQLSource, SQLClient, DatabaseConnection, SQLIntoTable, SQLOrderBy, SQLHaving, SQLForAllEntries, SQLHints} from ".";
import {Version} from "../../../version";
import {IStatementRunnable} from "../statement_runnable";
import {SQLGroupBy} from "./sql_group_by";
import {SQLIntoStructure} from "./sql_into_structure";
import {WParenLeftW, WParenRightW} from "../../1_lexer/tokens";
import {SQLFieldName} from "./sql_field_name";
import {SQLUpTo} from "./sql_up_to";
 
export class Select extends Expression {
  public getRunnable(): IStatementRunnable {
    const into = altPrio(SQLIntoTable, SQLIntoStructure);
 
    const where = seq("WHERE", SQLCond);
 
    const offset = ver(Version.v751, seq("OFFSET", SQLSource));
 
    const bypass = str("BYPASSING BUFFER");
 
    const fields = seq("FIELDS", SQLFieldList);
 
    const perm = per(SQLFrom, into, SQLForAllEntries, where,
                     SQLOrderBy, SQLUpTo, offset, SQLClient, SQLHaving,
                     bypass, SQLGroupBy, fields, DatabaseConnection);
 
    const paren = seq(tok(WParenLeftW), SQLFieldName, tok(WParenRightW));
 
    const ret = seq("SELECT",
                    altPrio("DISTINCT", optPrio(seq("SINGLE", optPrio("FOR UPDATE")))),
                    optPrio(altPrio(SQLFieldList, paren)),
                    perm, optPrio(SQLHints));
 
    return ret;
  }
}