From bdac39150f7137ab244590131d3d8b825ccc9e5d Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Mon, 13 Aug 2018 14:31:19 +0200 Subject: [PATCH] Polish contribution Issue: SPR-17120 --- .../jdbc/datasource/init/ScriptUtils.java | 15 ++++++++------- .../datasource/init/ScriptUtilsUnitTests.java | 8 ++++++-- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ScriptUtils.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ScriptUtils.java index 15a7af602f..863280ede0 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ScriptUtils.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ScriptUtils.java @@ -344,18 +344,18 @@ public abstract class ScriptUtils { public static boolean containsSqlScriptDelimiters(String script, String delim) { boolean inLiteral = false; boolean inEscape = false; - for (int i = 0; i < script.length(); i++) { + for (int i = 0; i < script.length(); i++) { char c = script.charAt(i); - if (c == '\\') { - inEscape = !inEscape; - continue; - } - else if (inEscape) { + if (inEscape) { inEscape = false; continue; } - + // MySQL style escapes + if (c == '\\') { + inEscape = true; + continue; + } if (c == '\'') { inLiteral = !inLiteral; } @@ -363,6 +363,7 @@ public abstract class ScriptUtils { return true; } } + return false; } diff --git a/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/ScriptUtilsUnitTests.java b/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/ScriptUtilsUnitTests.java index 82df2fd770..3ffc5df631 100644 --- a/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/ScriptUtilsUnitTests.java +++ b/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/ScriptUtilsUnitTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2018 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. @@ -166,12 +166,16 @@ public class ScriptUtilsUnitTests { public void containsDelimiters() { assertFalse(containsSqlScriptDelimiters("select 1\n select ';'", ";")); assertTrue(containsSqlScriptDelimiters("select 1; select 2", ";")); + assertFalse(containsSqlScriptDelimiters("select 1; select '\\n\n';", "\n")); assertTrue(containsSqlScriptDelimiters("select 1\n select 2", "\n")); + assertFalse(containsSqlScriptDelimiters("select 1\n select 2", "\n\n")); assertTrue(containsSqlScriptDelimiters("select 1\n\n select 2", "\n\n")); - assertTrue(containsSqlScriptDelimiters("insert into users(first_name, last_name)\nvalues('Charles', 'd\\'Artagnan');", ";")); + + // MySQL style escapes '\\' assertFalse(containsSqlScriptDelimiters("insert into users(first_name, last_name)\nvalues('a\\\\', 'b;')", ";")); + assertTrue(containsSqlScriptDelimiters("insert into users(first_name, last_name)\nvalues('Charles', 'd\\'Artagnan'); select 1;", ";")); } private String readScript(String path) throws Exception {