1   //
2   // Copyright (c) 2004, International Decision Systems
3   // all rights reserved
4   /*
5    * Copyright (c) 2005 Your Corporation. All Rights Reserved.
6    */
7   package net.sourceforge.addam.ddlrun.runners;
8   
9   import junit.framework.TestCase;
10  
11  import java.util.HashMap;
12  import java.util.Map;
13  import java.util.Iterator;
14  
15  import net.sourceforge.addam.ddlrun.grammars.OracleGrammar;
16  import net.sourceforge.addam.ddlrun.runners.JDBCScriptRunner;
17  import net.sourceforge.addam.ddlrun.runners.Runner;
18  import net.sourceforge.addam.ddlrun.utils.MockReaderFactory;
19  
20  public class JDBCScriptRunnerUTEST extends TestCase {
21  
22      public void testComments() throws Exception {
23          Map<String,String> contentMap = new HashMap<String,String>();
24          contentMap.put("script1.sql", "-- comment line then blank\n" +
25                  "\n" +
26                  "--select * from foo\n" +
27                  "  --/\n" +
28                  "--select * from \n--foo;" +
29                  "  --select * from \n--foo;\n" +
30                  "select * from foo;" +
31                  "");
32          MockReaderFactory readerFactory = new MockReaderFactory(contentMap);
33          MockRunner statementRunner = new MockRunner();
34          Runner scriptRunner = new JDBCScriptRunner(readerFactory, new OracleGrammar(), statementRunner);
35          scriptRunner.run("script1.sql");
36          assertEquals("select * from foo", statementRunner.getResourcesRun().get(0));
37      }
38  
39      public void testSimpleStatements() throws Exception {
40          Map<String,String> contentMap = new HashMap<String,String>();
41          contentMap.put("script1.sql", "-- comment line then blank\n" +
42                  "\n" +
43                  "select * from foo;\n" +
44                  "select * from foo; \n" +
45                  "select * from foo\n" +
46                  ";\n" +
47                  "select * from \nfoo;");
48          MockReaderFactory readerFactory = new MockReaderFactory(contentMap);
49          MockRunner statementRunner = new MockRunner();
50          Runner scriptRunner = new JDBCScriptRunner(readerFactory, new OracleGrammar(), statementRunner);
51          scriptRunner.run("script1.sql");
52          assertEquals(4, statementRunner.getResourcesRun().size());
53          assertEquals("select * from foo", statementRunner.getResourcesRun().get(0));
54          assertEquals("select * from foo", statementRunner.getResourcesRun().get(1));
55          assertEquals("select * from foo\n", statementRunner.getResourcesRun().get(2));
56          assertEquals("select * from \nfoo", statementRunner.getResourcesRun().get(3));
57      }
58  
59      public void testComplexStatementWithBeginAndEnd() throws Exception {
60          Map<String,String> contentMap = new HashMap<String,String>();
61          contentMap.put("script1.sql", "-- comment line then blank\n" +
62                  "\n" +
63                  "BEGIN something\n" +
64                  "some more stuff\n" +
65                  "END;\n" +
66                  "/");
67          MockReaderFactory readerFactory = new MockReaderFactory(contentMap);
68          MockRunner statementRunner = new MockRunner();
69          Runner scriptRunner = new JDBCScriptRunner(readerFactory, new OracleGrammar(), statementRunner);
70          scriptRunner.run("script1.sql");
71          assertEquals(1, statementRunner.getResourcesRun().size());
72          assertEquals("BEGIN something\nsome more stuff\nEND;", statementRunner.getResourcesRun().get(0));
73      }
74  
75      public void testComplexStatementWithDeclareBeginAndEnd() throws Exception {
76          Map<String,String> contentMap = new HashMap<String,String>();
77          contentMap.put("script1.sql", "-- comment line then blank\n" +
78                  "\n" +
79                  "DECLARE\n" +
80                  "v_cache_size\n" +
81                  "BEGIN something\n" +
82                  "some more stuff\n" +
83                  "END;\n" +
84                  "/");
85          MockReaderFactory readerFactory = new MockReaderFactory(contentMap);
86          MockRunner statementRunner = new MockRunner();
87          Runner scriptRunner = new JDBCScriptRunner(readerFactory, new OracleGrammar(), statementRunner);
88          scriptRunner.run("script1.sql");
89          assertEquals(1, statementRunner.getResourcesRun().size());
90          assertEquals("DECLARE\nv_cache_size\nBEGIN something\nsome more stuff\nEND;", statementRunner.getResourcesRun().get(0));
91      }
92  
93      public void testComplexStatementWithCreateOrReplace() throws Exception {
94          Map<String,String> contentMap = new HashMap<String,String>();
95          contentMap.put("script1.sql", "-- comment line then blank\n" +
96                  "\n" +
97                  "CREATE OR REPLACE someFunction\n" +
98                  "v_cache_size\n" +
99                  "BEGIN something\n" +
100                 "BEGIN somethingElse\n" +
101                 "END;\n" +
102                 "some more stuff\n" +
103                 "END somefunction;\n" +
104                 "/");
105         MockReaderFactory readerFactory = new MockReaderFactory(contentMap);
106         MockRunner statementRunner = new MockRunner();
107         Runner scriptRunner = new JDBCScriptRunner(readerFactory, new OracleGrammar(), statementRunner);
108         scriptRunner.run("script1.sql");
109         assertEquals(1, statementRunner.getResourcesRun().size());
110         assertEquals("CREATE OR REPLACE someFunction\nv_cache_size\nBEGIN something\nBEGIN somethingElse\nEND;\nsome more stuff\nEND somefunction;", statementRunner.getResourcesRun().get(0));
111     }
112 
113     public void testCreateOrReplaceView() throws Exception {
114         Map<String,String> contentMap = new HashMap<String,String>();
115         contentMap.put("script1.sql", "-- comment line then blank\n" +
116                 "\n" +
117                 "CREATE OR REPLACE VIEW AV_ASSET\n" +
118                 "as\n" +
119                 "SELECT * \n" +
120                 "FROM av_asset_all\n" +
121                 "WHERE ownerofrecordid IS NULL and STATUSHISTORY not in ('LW_DISPOSED')\n" +
122                 "/\n" +
123                 "\n" +
124                 "select 'test SQL' from dual;");
125         MockReaderFactory readerFactory = new MockReaderFactory(contentMap);
126         MockRunner statementRunner = new MockRunner();
127         Runner scriptRunner = new JDBCScriptRunner(readerFactory, new OracleGrammar(), statementRunner);
128         scriptRunner.run("script1.sql");
129         assertEquals(2, statementRunner.getResourcesRun().size());
130         assertEquals("CREATE OR REPLACE VIEW AV_ASSET\nas\nSELECT * \nFROM av_asset_all\nWHERE ownerofrecordid IS NULL and STATUSHISTORY not in ('LW_DISPOSED')",statementRunner.getResourcesRun().get(0));
131         assertEquals("select 'test SQL' from dual",statementRunner.getResourcesRun().get(1));
132     }
133 
134     public void testComplexStatementsWithCreateOrReplace() throws Exception {
135         Map<String,String> contentMap = new HashMap<String,String>();
136         contentMap.put("script1.sql", "-- comment line then blank\n" +
137                 "\n" +
138                 "CREATE OR REPLACE someFunction\n" +
139                 "v_cache_size\n" +
140                 "BEGIN something\n" +
141                 "BEGIN somethingElse\n" +
142                 "END;\n" +
143                 "some more stuff\n" +
144                 "END somefunction;\n" +
145                 "/" +
146                 "\n\n" +
147                 "CREATE OR REPLACE someOtherFunction\n" +
148                 "v_cache_size\n" +
149                 "BEGIN something\n" +
150                 "BEGIN somethingElse\n" +
151                 "END;\n" +
152                 "some more stuff\n" +
153                 "END somefunction;\n" +
154                 "/");
155         MockReaderFactory readerFactory = new MockReaderFactory(contentMap);
156         MockRunner statementRunner = new MockRunner();
157         Runner scriptRunner = new JDBCScriptRunner(readerFactory, new OracleGrammar(), statementRunner);
158         scriptRunner.run("script1.sql");
159         assertEquals(2, statementRunner.getResourcesRun().size());
160         assertEquals("CREATE OR REPLACE someFunction\nv_cache_size\nBEGIN something\nBEGIN somethingElse\nEND;\nsome more stuff\nEND somefunction;", statementRunner.getResourcesRun().get(0));
161         assertEquals("CREATE OR REPLACE someOtherFunction\nv_cache_size\nBEGIN something\nBEGIN somethingElse\nEND;\nsome more stuff\nEND somefunction;", statementRunner.getResourcesRun().get(1));
162     }
163 
164     public void testMixOfComplexAndSimpleStatements() throws Exception {
165         Map<String,String> contentMap = new HashMap<String,String>();
166         contentMap.put("script1.sql", "-- comment line then blank\n" +
167                 "\n" +
168                 "select * from foo;\n" +
169                 "CREATE OR REPLACE someFunction\n" +
170                 "v_cache_size\n" +
171                 "BEGIN something\n" +
172                 "BEGIN somethingElse\n" +
173                 "END;\n" +
174                 "some more stuff\n" +
175                 "END somefunction;\n" +
176                 "/\n\n" +
177                 "select * from foo;\n" +
178                 "select * from foo;\n" +
179                 "\n" +
180                 "DECLARE\n" +
181                 "v_cache_size\n" +
182                 "BEGIN something\n" +
183                 "some more stuff\n" +
184                 "END;\n" +
185                 "/\n" +
186                 "DECLARE\n" +
187                 "v_cache_size\n" +
188                 "BEGIN something\n" +
189                 "some more stuff\n" +
190                 "END;\n" +
191                 "/\n" +
192                 "select * from foo;\n"
193                 );
194         MockReaderFactory readerFactory = new MockReaderFactory(contentMap);
195         MockRunner statementRunner = new MockRunner();
196         Runner scriptRunner = new JDBCScriptRunner(readerFactory, new OracleGrammar(), statementRunner);
197         scriptRunner.run("script1.sql");
198         Iterator statements = statementRunner.getResourcesRun().iterator();
199         assertEquals("select * from foo", statements.next());
200         assertEquals("CREATE OR REPLACE someFunction\nv_cache_size\nBEGIN something\nBEGIN somethingElse\nEND;\nsome more stuff\nEND somefunction;", statements.next());
201         assertEquals("select * from foo", statements.next());
202         assertEquals("select * from foo", statements.next());
203         assertEquals("DECLARE\nv_cache_size\nBEGIN something\nsome more stuff\nEND;", statements.next());
204         assertEquals("DECLARE\nv_cache_size\nBEGIN something\nsome more stuff\nEND;", statements.next());
205         assertEquals("select * from foo", statements.next());
206         assertEquals(false, statements.hasNext());
207     }
208 
209     public void testComplexStatementsWithSetServerOutput() throws Exception {
210         Map<String,String> contentMap = new HashMap<String,String>();
211         contentMap.put("script1.sql", "-- comment line then blank\n" +
212                 "\n" +
213                 "set serveroutput on\n\n" +
214                 "CREATE OR REPLACE someFunction\n" +
215                 "v_cache_size\n" +
216                 "BEGIN something\n" +
217                 "BEGIN somethingElse\n" +
218                 "END;\n" +
219                 "some more stuff\n" +
220                 "END somefunction;\n" +
221                 "/");
222         MockReaderFactory readerFactory = new MockReaderFactory(contentMap);
223         MockRunner statementRunner = new MockRunner();
224         Runner scriptRunner = new JDBCScriptRunner(readerFactory, new OracleGrammar(), statementRunner);
225         scriptRunner.run("script1.sql");
226         assertEquals(1, statementRunner.getResourcesRun().size());
227         assertEquals("CREATE OR REPLACE someFunction\nv_cache_size\nBEGIN something\nBEGIN somethingElse\nEND;\nsome more stuff\nEND somefunction;", statementRunner.getResourcesRun().get(0));
228     }
229 
230 }