View Javadoc

1   package org.codehaus.mojo.sql;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   * http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import junit.framework.TestCase;
23  
24  public class SqlSplitterTest extends TestCase {
25  
26      public void testContainsSqlString() throws Exception {
27          containsNot("");
28          containsNot(" ");
29          containsNot("  \t  ");
30  
31          contains(";", 1);
32          contains("SELECT * from myTable;", 22);
33  
34          contains("SELECT * from myTable; -- with sl comment", 22);
35          contains("SELECT * from myTable; /* with part comment */", 22);
36  
37          contains("SELECT * from myTable /* with part comment inside*/  ; ", 54);
38  
39          contains("SELECT * from myTable /* with ; semicolon*/  ; ", 46);
40  
41          contains("INSERT INTO testTable (thevalue) VALUES ('value  !'); -- comment at the end", 53);
42  
43          // a " inside a ' quoted text
44          contains("INSERT INTO testTable (thevalue) VALUES ('value \"  !');", 55);
45  
46          // a ' inside a " quoted text
47          contains("INSERT INTO testTable (thevalue) VALUES (\"value '  !\");", 55);
48  
49          contains("INSERT INTO testTable (thevalue) VALUES (\"value --  \");", 55);
50          contains("INSERT INTO testTable (thevalue) VALUES ('value --  ');", 55);
51  
52          containsNot("SELECT * from myTable where value = ';' AND -- semicolon is quoted!");
53  
54          contains("INSERT INTO testTable (thevalue) VALUES (' text '' other ');", 60);
55  
56      }
57  
58      public void testMsSQLStrings() throws Exception {
59          String del = "GO";
60  
61          containsNot("SELECT COUNT(*) FROM Logs", del);
62          containsNot("SELECT * FROM TPersons", del);
63          contains("GO", del, 2);
64      }
65  
66      private void contains(String sql, int expectedIndex) throws Exception {
67          contains(sql, ";", expectedIndex);
68      }
69  
70      private void containsNot(String sql) throws Exception {
71          containsNot(sql, ";");
72      }
73  
74      private void contains(String sql, String delimiter, int expectedIndex) throws Exception {
75          assertEquals(sql, SqlSplitter.containsSqlEnd(sql, delimiter), expectedIndex);
76      }
77  
78      private void containsNot(String sql, String delimiter) throws Exception {
79          assertTrue(sql, SqlSplitter.containsSqlEnd(sql, delimiter) == SqlSplitter.NO_END);
80      }
81  }