All files / src/abap/2_statements/statements insert_database.ts

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

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 39 40 41 42 43 44 451x 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 3x 3x 3x 3x 1x 1x  
import {IStatement} from "./_statement";
import {seq, alt, opt, tok, optPrio, verNotLang} from "../combi";
import {DatabaseTable, SQLSource, Select, DatabaseConnection, SQLClient, SQLIndicators, SQLMappingFromEntity, SQLDmlOptions} from "../expressions";
import {WParenLeftW, WParenRightW} from "../../1_lexer/tokens";
import {LanguageVersion} from "../../../version";
import {IStatementRunnable} from "../statement_runnable";
 
export class InsertDatabase implements IStatement {
 
  public getMatcher(): IStatementRunnable {
    const sub = seq(tok(WParenLeftW), Select, tok(WParenRightW));
 
    const fromItabOrWa = seq("FROM",
                             opt("TABLE"),
                             SQLSource,
                             optPrio(SQLIndicators),
                             optPrio(SQLMappingFromEntity));
    const fromSubquery = seq("FROM", sub);
    const fromClause = alt(fromItabOrWa, fromSubquery);
 
    const fromTrailer = seq(opt(SQLClient),
                            opt(DatabaseConnection),
                            fromClause,
                            opt("ACCEPTING DUPLICATE KEYS"),
                            optPrio(SQLDmlOptions));
 
    const insertFromForm = seq(DatabaseTable,
                               opt(alt(fromTrailer, SQLClient, DatabaseConnection)));
 
    const insertIntoForm = seq("INTO",
                               DatabaseTable,
                               opt(SQLClient),
                               opt(DatabaseConnection),
                               "VALUES",
                               SQLSource,
                               optPrio(SQLIndicators),
                               optPrio(SQLMappingFromEntity),
                               optPrio(SQLDmlOptions));
 
    return verNotLang(LanguageVersion.KeyUser,
                      seq("INSERT", alt(insertFromForm, insertIntoForm)));
  }
 
}