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  
27      public void testContainsSqlString() throws Exception
28      {
29          containsNot( "" );
30          containsNot( " " );
31          containsNot( "  \t  " );
32  
33          contains( ";", 1 );
34          contains( "SELECT * from myTable;", 22 );
35          
36          contains( "SELECT * from myTable; -- with sl comment", 22 );
37          contains( "SELECT * from myTable; /* with part comment */", 22 );
38  
39          contains( "SELECT * from myTable /* with part comment inside*/  ; ", 54 );
40          
41          contains( "SELECT * from myTable /* with ; semicolon*/  ; ", 46 );
42          
43          contains( "INSERT INTO testTable (thevalue) VALUES ('value  !'); -- comment at the end", 53 );
44  
45          // a " inside a ' quoted text
46          contains( "INSERT INTO testTable (thevalue) VALUES ('value \"  !');", 55 );
47  
48          // a ' inside a " quoted text
49          contains( "INSERT INTO testTable (thevalue) VALUES (\"value '  !\");", 55 );
50  
51          contains( "INSERT INTO testTable (thevalue) VALUES (\"value --  \");", 55 );
52          contains( "INSERT INTO testTable (thevalue) VALUES ('value --  ');", 55 );
53  
54          containsNot( "SELECT * from myTable where value = ';' AND -- semicolon is quoted!" );
55  
56          contains( "INSERT INTO testTable (thevalue) VALUES (' text '' other ');", 60 );
57  
58      }
59  
60      public void testMsSQLStrings() throws Exception
61      {
62          String del = "GO";
63          
64          containsNot( "SELECT COUNT(*) FROM Logs", del );
65          containsNot( "SELECT * FROM TPersons", del );
66          contains( "GO", del, 2 ); 
67      }
68      
69      
70      private void contains( String sql, int expectedIndex ) throws Exception
71      {
72          contains( sql, ";", expectedIndex );
73      }
74  
75      private void containsNot( String sql ) throws Exception
76      {
77          containsNot( sql, ";" );
78      }
79  
80      private void contains( String sql, String delimiter, int expectedIndex ) throws Exception
81      {
82          assertEquals( sql, SqlSplitter.containsSqlEnd( sql, delimiter ), expectedIndex);
83      }
84  
85      private void containsNot( String sql, String delimiter ) throws Exception
86      {
87          assertTrue( sql, SqlSplitter.containsSqlEnd( sql, delimiter ) == SqlSplitter.NO_END);
88      }
89  }