001 /** 002 * Copyright 2006-2011 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.codehaus.mojo.sql; 017 018 import junit.framework.TestCase; 019 020 public class SqlSplitterTest extends TestCase { 021 022 public void testContainsSqlString() throws Exception { 023 containsNot(""); 024 containsNot(" "); 025 containsNot(" \t "); 026 027 contains(";", 1); 028 contains("SELECT * from myTable;", 22); 029 030 contains("SELECT * from myTable; -- with sl comment", 22); 031 contains("SELECT * from myTable; /* with part comment */", 22); 032 033 contains("SELECT * from myTable /* with part comment inside*/ ; ", 54); 034 035 contains("SELECT * from myTable /* with ; semicolon*/ ; ", 46); 036 037 contains( 038 "INSERT INTO testTable (thevalue) VALUES ('value !'); -- comment at the end", 039 53); 040 041 // a " inside a ' quoted text 042 contains("INSERT INTO testTable (thevalue) VALUES ('value \" !');", 55); 043 044 // a ' inside a " quoted text 045 contains("INSERT INTO testTable (thevalue) VALUES (\"value ' !\");", 046 55); 047 048 contains("INSERT INTO testTable (thevalue) VALUES (\"value -- \");", 049 55); 050 contains("INSERT INTO testTable (thevalue) VALUES ('value -- ');", 55); 051 052 containsNot("SELECT * from myTable where value = ';' AND -- semicolon is quoted!"); 053 054 contains( 055 "INSERT INTO testTable (thevalue) VALUES (' text '' other ');", 056 60); 057 058 } 059 060 public void testMsSQLStrings() throws Exception { 061 String del = "GO"; 062 063 containsNot("SELECT COUNT(*) FROM Logs", del); 064 containsNot("SELECT * FROM TPersons", del); 065 contains("GO", del, 2); 066 } 067 068 private void contains(String sql, int expectedIndex) throws Exception { 069 contains(sql, ";", expectedIndex); 070 } 071 072 private void containsNot(String sql) throws Exception { 073 containsNot(sql, ";"); 074 } 075 076 private void contains(String sql, String delimiter, int expectedIndex) 077 throws Exception { 078 assertEquals(sql, SqlSplitter.containsSqlEnd(sql, delimiter), 079 expectedIndex); 080 } 081 082 private void containsNot(String sql, String delimiter) throws Exception { 083 assertTrue( 084 sql, 085 SqlSplitter.containsSqlEnd(sql, delimiter) == SqlSplitter.NO_END); 086 } 087 }