@NotNull public SqlScript build() { return new SqlScript(myStatements); }
public void add(@NotNull SqlScript... scripts) { for (SqlScript script : scripts) { if (script.hasStatements()) { for (SqlStatement statement : script.getStatements()) { myStatements.add(statement); } } } }
@Override @NotNull public String toString() { switch (myCount) { case 0: return ""; case 1: return myStatements[0].getSourceText(); default: final StringBuilder b = new StringBuilder(); final String delimiterString = getScriptDelimiterString(); b.append(myStatements[0].getSourceText()); for (int i = 1; i < myCount; i++) { if (b.charAt(b.length()-1) != '\n') b.append('\n'); b.append(delimiterString).append('\n'); b.append(myStatements[i].getSourceText()); } return b.toString(); } // TODO cache it }
@Test public void parse_2_in_2_lines() { String text = "create table X;\n drop table X"; final SqlScript script = build(text); assertThat(script.count()).isEqualTo(2); assertThat(script.getStatements().get(0).getSourceText()).isEqualTo("create table X"); assertThat(script.getStatements().get(1).getSourceText()).isEqualTo("drop table X"); }
@Test public void parse_singleLineComment_preserveOracleHint() { String text = "select --+index(i) \n" + " all fields \n" + "from my_table \n"; final SqlScript script = build(text); assertThat(script.hasStatements()).isTrue(); assertThat(script.count()).isEqualTo(1); final String queryText = script.getStatements().get(0).getSourceText(); assertThat(queryText).contains("--+index(i)"); }
@Test public void construct_2() { SqlScript script1 = new SqlScript("command1"), script2 = new SqlScript("command2"); SqlScript script = new SqlScript(script1, script2); assertThat((Integer)script.getStatements().size()).isEqualTo((Integer)2); assertThat(script.getStatements().get(0).getSourceText()).isEqualTo("command1"); assertThat(script.getStatements().get(1).getSourceText()).isEqualTo("command2"); }
private static List<SqlStatement> joinStatements(SqlScript[] scripts) { List<SqlStatement> b = new ArrayList<SqlStatement>(); for (SqlScript script : scripts) { b.addAll(script.getStatements()); } return b; }
public SqlScript(@NotNull final String... statements) { this(makeStatementsFromStrings(statements)); }
public SqlScript(@NotNull final SqlScript... scripts) { this(joinStatements(scripts)); }
@Test public void parse_multiLineComment_3() { String text = "/* \n" + " * a multi-line comment \n" + " */ \n" + "do something \n"; final SqlScript script = build(text); assertThat(script.count()).isEqualTo(1); assertThat(script.getStatements().get(0).getSourceText()).isEqualTo("do something"); }
@Override public DBScriptRunner run() { List<? extends SqlStatement> statements = myScript.getStatements(); for (SqlStatement statement : statements) { if (statement instanceof SqlCommand) { runCommand((SqlCommand)statement); } if (statement instanceof SqlQuery) { runQuery((SqlQuery) statement); } } return this; }
@Test public void parse_multiLineComment_1() { String text = "/* a multi-line comment*/\n" + "do something"; final SqlScript script = build(text); assertThat(script.count()).isEqualTo(1); assertThat(script.getStatements().get(0).getSourceText()).isEqualTo("do something"); }
@Test public void parse_1() { String commandText = "select * from dual"; final SqlScript script = build(commandText); assertThat(script.hasStatements()).isTrue(); assertThat(script.getStatements()).hasSize(1); SqlStatement statement = script.getStatements().get(0); assertThat(statement.getSourceText()).isEqualTo(commandText); assertThat(statement.getRow()).isEqualTo(1); }
private static SqlStatement parseScriptWithOneStatement(final String commandText) { final SqlScript script = build(commandText); List<? extends SqlStatement> statements = script.getStatements(); assertThat(statements).hasSize(1); return statements.get(0); }
@NotNull public final SqlScript script(@NotNull final String name) { TextFragment fragment = getText(name); SqlScriptBuilder b = new SqlScriptBuilder(); b.parse(fragment.text); return new SqlScript(b.build()); }
@Test public void parse_singleLineComment() { String text = "-- a single line comment \n" + "do something"; final SqlScript script = build(text); assertThat(script.count()).isEqualTo(1); assertThat(script.getStatements().get(0).getSourceText()).isEqualTo("do something"); }
@Test public void parse_OraclePackage() { final SqlScript script = build(ORACLE_PKG1); assertThat(script.getStatements()).hasSize(2); assertThat(script.getStatements().get(0).getSourceText()).startsWith("create package pkg1") .endsWith("end pkg1;"); assertThat(script.getStatements().get(1).getSourceText()).startsWith("create package body") .endsWith("end;"); }
@Test public void basic_2() { final SqlScript script = new SqlScript("create table TT2(X1 integer)", "drop table TT2"); myFacade.inSession(new InSessionNoResult() { @Override public void run(@NotNull final DBSession session) { session.script(script).run(); } }); }
@Test public void parse_multiLineComment_preserveOracleHint() { String text = "select /*+index(i)*/ * \n" + "from table \n"; final SqlScript script = build(text); assertThat(script.count()).isEqualTo(1); final String queryText = script.getStatements().get(0).getSourceText(); assertThat(queryText).contains("/*+index(i)*/"); }