From e581244370d2128462d4f5b57eabcb39f34d0210 Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Tue, 14 Apr 2015 22:15:31 +0200 Subject: [PATCH] Delete legacy JdbcTestUtils in spring-orm --- ...sactionalDataSourceSpringContextTests.java | 73 +++--------- .../test/jdbc/JdbcTestUtils.java | 104 ------------------ 2 files changed, 13 insertions(+), 164 deletions(-) delete mode 100644 spring-orm/src/test/java/org/springframework/test/jdbc/JdbcTestUtils.java diff --git a/spring-orm/src/test/java/org/springframework/test/AbstractTransactionalDataSourceSpringContextTests.java b/spring-orm/src/test/java/org/springframework/test/AbstractTransactionalDataSourceSpringContextTests.java index 16b9c577b58..e0eb638ec1b 100644 --- a/spring-orm/src/test/java/org/springframework/test/AbstractTransactionalDataSourceSpringContextTests.java +++ b/spring-orm/src/test/java/org/springframework/test/AbstractTransactionalDataSourceSpringContextTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,18 +16,12 @@ package org.springframework.test; -import java.io.IOException; -import java.io.LineNumberReader; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; import javax.sql.DataSource; -import org.springframework.core.io.support.EncodedResource; +import org.springframework.core.io.Resource; import org.springframework.dao.DataAccessException; -import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.test.jdbc.JdbcTestUtils; +import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; /** * This class is only used within tests in the spring-orm module. @@ -139,61 +133,20 @@ public abstract class AbstractTransactionalDataSourceSpringContextTests extends /** - * Execute the given SQL script. Will be rolled back by default, - * according to the fate of the current transaction. - * @param sqlResourcePath Spring resource path for the SQL script. - * Should normally be loaded by classpath. - *

Statements should be delimited with a semicolon. If statements are not delimited with - * a semicolon then there should be one statement per line. Statements are allowed to span - * lines only if they are delimited with a semicolon. + * Execute the given SQL script. + *

Use with caution outside of a transaction! + *

The script will normally be loaded by classpath. *

Do not use this method to execute DDL if you expect rollback. - * @param continueOnError whether or not to continue without throwing - * an exception in the event of an error + * @param sqlResourcePath the Spring resource path for the SQL script + * @param continueOnError whether or not to continue without throwing an + * exception in the event of an error * @throws DataAccessException if there is an error executing a statement - * and continueOnError was false + * @see ResourceDatabasePopulator + * @see #setSqlScriptEncoding */ protected void executeSqlScript(String sqlResourcePath, boolean continueOnError) throws DataAccessException { - if (logger.isInfoEnabled()) { - logger.info("Executing SQL script '" + sqlResourcePath + "'"); - } - - EncodedResource resource = - new EncodedResource(getApplicationContext().getResource(sqlResourcePath), this.sqlScriptEncoding); - long startTime = System.currentTimeMillis(); - List statements = new LinkedList(); - try { - LineNumberReader lnr = new LineNumberReader(resource.getReader()); - String script = JdbcTestUtils.readScript(lnr); - char delimiter = ';'; - if (!JdbcTestUtils.containsSqlScriptDelimiters(script, delimiter)) { - delimiter = '\n'; - } - JdbcTestUtils.splitSqlScript(script, delimiter, statements); - for (Iterator itr = statements.iterator(); itr.hasNext(); ) { - String statement = (String) itr.next(); - try { - int rowsAffected = this.jdbcTemplate.update(statement); - if (logger.isDebugEnabled()) { - logger.debug(rowsAffected + " rows affected by SQL: " + statement); - } - } - catch (DataAccessException ex) { - if (continueOnError) { - if (logger.isWarnEnabled()) { - logger.warn("SQL: " + statement + " failed", ex); - } - } - else { - throw ex; - } - } - } - long elapsedTime = System.currentTimeMillis() - startTime; - logger.info("Done executing SQL scriptBuilder '" + sqlResourcePath + "' in " + elapsedTime + " ms"); - } - catch (IOException ex) { - throw new DataAccessResourceFailureException("Failed to open SQL script '" + sqlResourcePath + "'", ex); - } + Resource resource = this.applicationContext.getResource(sqlResourcePath); + new ResourceDatabasePopulator(continueOnError, false, this.sqlScriptEncoding, resource).execute(jdbcTemplate.getDataSource()); } } diff --git a/spring-orm/src/test/java/org/springframework/test/jdbc/JdbcTestUtils.java b/spring-orm/src/test/java/org/springframework/test/jdbc/JdbcTestUtils.java deleted file mode 100644 index 47030307ae4..00000000000 --- a/spring-orm/src/test/java/org/springframework/test/jdbc/JdbcTestUtils.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.test.jdbc; - -import java.io.IOException; -import java.io.LineNumberReader; -import java.util.List; - -import org.springframework.util.StringUtils; - -/** - * JdbcTestUtils is a collection of JDBC related utility methods for - * use in unit and integration testing scenarios. - * - * @author Thomas Risberg - * @since 2.5.4 - */ -public class JdbcTestUtils { - - /** - * Read a script from the LineNumberReaded and build a String containing the lines. - * @param lineNumberReader the {@code LineNumberReader} containing the script to be processed - * @return {@code String} containing the script lines - * @throws IOException - */ - public static String readScript(LineNumberReader lineNumberReader) throws IOException { - String currentStatement = lineNumberReader.readLine(); - StringBuilder scriptBuilder = new StringBuilder(); - while (currentStatement != null) { - if (StringUtils.hasText(currentStatement)) { - if (scriptBuilder.length() > 0) { - scriptBuilder.append('\n'); - } - scriptBuilder.append(currentStatement); - } - currentStatement = lineNumberReader.readLine(); - } - return scriptBuilder.toString(); - } - - /** - * Does the provided SQL script contain the specified delimiter? - * @param script the SQL script - * @param delim charecter delimiting each statement - typically a ';' character - */ - public static boolean containsSqlScriptDelimiters(String script, char delim) { - boolean inLiteral = false; - char[] content = script.toCharArray(); - for (int i = 0; i < script.length(); i++) { - if (content[i] == '\'') { - inLiteral = !inLiteral; - } - if (content[i] == delim && !inLiteral) { - return true; - } - } - return false; - } - - /** - * Split an SQL script into separate statements delimited with the provided delimiter character. Each - * individual statement will be added to the provided {@code List}. - * @param script the SQL script - * @param delim charecter delimiting each statement - typically a ';' character - * @param statements the List that will contain the individual statements - */ - public static void splitSqlScript(String script, char delim, List statements) { - StringBuilder sb = new StringBuilder(); - boolean inLiteral = false; - char[] content = script.toCharArray(); - for (int i = 0; i < script.length(); i++) { - if (content[i] == '\'') { - inLiteral = !inLiteral; - } - if (content[i] == delim && !inLiteral) { - if (sb.length() > 0) { - statements.add(sb.toString()); - sb = new StringBuilder(); - } - } - else { - sb.append(content[i]); - } - } - if (sb.length() > 0) { - statements.add(sb.toString()); - } - } - -}