diff --git a/library/src/main/java/com/readystatesoftware/sqliteasset/Utils.java b/library/src/main/java/com/readystatesoftware/sqliteasset/Utils.java index 67cecaf..3f114ac 100644 --- a/library/src/main/java/com/readystatesoftware/sqliteasset/Utils.java +++ b/library/src/main/java/com/readystatesoftware/sqliteasset/Utils.java @@ -20,9 +20,19 @@ public static List splitSqlScript(String script, char delim) { StringBuilder sb = new StringBuilder(); boolean inLiteral = false; char[] content = script.toCharArray(); + int openDelimiter = -1, lastCharacter = -1; for (int i = 0; i < script.length(); i++) { - if (content[i] == '"') { - inLiteral = !inLiteral; + if (content[i] == '"' || content[i] == '\'') { + if (openDelimiter == -1) { + // We were not inside a literal; store the delimiter's value. + openDelimiter = content[i]; + inLiteral = true; + } else if (openDelimiter == content[i] && lastCharacter != '\\') { + // We exit from the literal only on the same character + // AND unless we're being escaped by a bachslash. + inLiteral = false; + openDelimiter = -1; + } } if (content[i] == delim && !inLiteral) { if (sb.length() > 0) { @@ -32,6 +42,12 @@ public static List splitSqlScript(String script, char delim) { } else { sb.append(content[i]); } + if (lastCharacter == '\\' && content[i] == '\\') { + // It was an escaped backslash, don't accumulate. + lastCharacter = -1; + } else { + lastCharacter = content[i]; + } } if (sb.length() > 0) { statements.add(sb.toString().trim());