package org.objectstyle.wolips.eomodeler.core.utils; import java.util.LinkedList; import java.util.List; public class SQLUtils { /** * Splits semicolon-separate sql statements into an array of strings * * @param sql * a multi-line sql statement * @return an array of sql statements */ public static List<String> splitSQLStatements(String sql, char commandSeparatorChar) { List<String> statements = new LinkedList<String>(); if (sql != null) { StringBuffer statementBuffer = new StringBuffer(); int length = sql.length(); boolean inQuotes = false; for (int i = 0; i < length; i++) { char ch = sql.charAt(i); if (ch == '\r' || ch == '\n') { // ignore } else if (!inQuotes && ch == commandSeparatorChar) { String statement = statementBuffer.toString().trim(); if (statement.length() > 0) { statements.add(statement); } statementBuffer.setLength(0); } else { // Support for escaping apostrophes, e.g. 'Mike\'s Code' if (inQuotes && ch == '\\') { statementBuffer.append(ch); ch = sql.charAt(++ i); } else if (ch == '\'') { inQuotes = !inQuotes; } statementBuffer.append(ch); } } String statement = statementBuffer.toString().trim(); if (statement.length() > 0) { statements.add(statement); } } return statements; } }