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

100% Statements 19/19
100% Branches 0/0
100% Functions 1/1
100% Lines 19/19

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 371x 1x 1x   1x 1x 1x 1x   1x   3x   3x   3x 3x   3x 3x   3x   3x       3x   3x         3x    
import {seq, per, str, Expression, altPrio, optPrio, ver, tok} from "../combi";
import {SQLFieldList, SQLFrom, SQLCond, SQLSource, DatabaseConnection, SQLIntoTable, SQLOrderBy, SQLHaving, SQLForAllEntries} 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";
 
export class Select extends Expression {
  public getRunnable(): IStatementRunnable {
    const into = altPrio(SQLIntoTable, SQLIntoStructure);
 
    const where = seq("WHERE", SQLCond);
 
    const up = seq("UP TO", SQLSource, "ROWS");
    const offset = ver(Version.v751, seq("OFFSET", SQLSource));
 
    const client = str("CLIENT SPECIFIED");
    const bypass = str("BYPASSING BUFFER");
 
    const fields = seq("FIELDS", SQLFieldList);
 
    const perm = per(SQLFrom, into, SQLForAllEntries, where,
                     SQLOrderBy, up, offset, client, 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);
 
    return ret;
  }
}