@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_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 parse_1_create_view() { final String commandText = "create view my_view \n" + "as \n" + "select * \n" + "from some_table \n"; SqlStatement statement = parseScriptWithOneStatement(commandText); assertThat(statement.getSourceText()).contains("create view", "from some_table"); }
@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"); }
@Test public void parse_1x() { final String commandText = "select something\n" + "from some_table\n"; SqlStatement statement = parseScriptWithOneStatement(commandText); assertThat(statement.getSourceText()).contains("select something", "from some_table"); }
@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_1_PL_block() { final String commandText = "create or replace procedure My_Proc as \n" + "declare X natural := 2; \n" + "begin \n" + " dbms_Output.put_line(X); \n" + "end; \n"; SqlStatement statement = parseScriptWithOneStatement(commandText); assertThat(statement.getSourceText()).contains("create or replace procedure My_Proc", "declare X natural := 2;", "begin", "dbms_Output.put_line(X);", "end;"); }
@Test public void fileWithOneCommand_script() { Scriptum scriptum1 = Scriptum.of(ScriptumBasicTest.class, "FileWithOneCommand"); SqlScript script = scriptum1.script("TheCommand"); assertThat(script).isNotNull(); assertThat(script.count()).isEqualTo(1); List<? extends SqlStatement> statements = script.getStatements(); SqlStatement statement = statements.get(0); assertThat(statement.getSourceText()).contains("select something", "from some_table"); }
@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"); }
@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); }
@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_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_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)*/"); }
@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)"); }