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

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

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 341x 1x 1x 1x 1x 1x 1x 1x 1x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 1x 1x
import {IStatement} from "./_statement";
import {str, seq, alt, opt, tok} from "../combi";
import {DatabaseTable, SQLSource, Select, DatabaseConnection} from "../expressions";
import {WParenLeftW, WParenRightW} from "../../1_lexer/tokens";
import {IStatementRunnable} from "../statement_runnable";
 
export class InsertDatabase implements IStatement {
 
  public getMatcher(): IStatementRunnable {
    const client = str("CLIENT SPECIFIED");
 
    const sub = seq(tok(WParenLeftW), Select, tok(WParenRightW));
 
    const f = seq(opt(client),
                  opt(DatabaseConnection),
                  "FROM",
                  opt("TABLE"),
                  alt(SQLSource, sub),
                  opt("ACCEPTING DUPLICATE KEYS"));
 
    const from = seq(DatabaseTable,
                     opt(alt(f, client, DatabaseConnection)));
 
    const into = seq("INTO",
                     DatabaseTable,
                     opt("CLIENT SPECIFIED"),
                     opt(DatabaseConnection),
                     "VALUES",
                     SQLSource);
 
    return seq("INSERT", alt(from, into));
  }
 
}