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

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

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 37 38 391x 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 3x 3x 3x 3x 3x 1x
import {seq, per, str, Expression, altPrio, optPrio, ver} from "../combi";
import {SQLFieldList, SQLFrom, SQLCond, SQLSource, SQLClient, DatabaseConnection, SQLIntoTable, SQLOrderBy, SQLHaving, SQLForAllEntries, SQLHints, SQLFields, SQLIntoList} from ".";
import {Version} from "../../../version";
import {IStatementRunnable} from "../statement_runnable";
import {SQLGroupBy} from "./sql_group_by";
import {SQLIntoStructure} from "./sql_into_structure";
import {SQLUpTo} from "./sql_up_to";
 
export class Select extends Expression {
  public getRunnable(): IStatementRunnable {
    const into = altPrio(SQLIntoTable, SQLIntoStructure, SQLIntoList);
 
    const where = seq("WHERE", SQLCond);
 
    const offset = ver(Version.v751, seq("OFFSET", SQLSource));
 
    const bypass = str("BYPASSING BUFFER");
 
    const fields = ver(Version.v750, SQLFields);
 
    // todo, HINTS cannot be anywhere, need an expression dedicated for strict sql
    const perm = per(SQLFrom, into, SQLForAllEntries, where,
                     SQLOrderBy, SQLUpTo, offset, SQLClient, SQLHaving,
                     bypass, SQLGroupBy, fields, DatabaseConnection, SQLHints);
 
    const permSingle = per(SQLFrom, altPrio(SQLIntoStructure, SQLIntoList), where, SQLClient,
                           bypass, SQLGroupBy, fields, DatabaseConnection, SQLHints);
 
    const fieldList = optPrio(SQLFieldList);
 
    const single = seq("SINGLE", optPrio("FOR UPDATE"), fieldList, permSingle);
 
    const other = seq(optPrio("DISTINCT"), fieldList, perm);
 
    const ret = seq("SELECT", altPrio(single, other));
 
    return ret;
  }
}