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

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

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  1x 1x 1x     1x     43x   43x   43x             43x     43x             43x      
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));
  }
 
}