package com.dbdeploy.database;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.text.StrBuilder;
import org.apache.commons.lang.text.StrMatcher;
import org.apache.commons.lang.text.StrTokenizer;
import java.util.ArrayList;
import java.util.List;
public class QueryStatementSplitter {
private String delimiter = ";";
private DelimiterType delimiterType = DelimiterType.normal;
private LineEnding lineEnding = LineEnding.platform;
public QueryStatementSplitter() {
}
public List<String> split(String input) {
List<String> statements = new ArrayList<String>();
StrBuilder currentSql = new StrBuilder();
StrTokenizer lineTokenizer = new StrTokenizer(input);
lineTokenizer.setDelimiterMatcher(StrMatcher.charSetMatcher("\r\n"));
for (String line : lineTokenizer.getTokenArray()) {
String strippedLine = StringUtils.stripEnd(line, null);
if (!currentSql.isEmpty()) {
currentSql.append(lineEnding.get());
}
currentSql.append(strippedLine);
if (delimiterType.matches(strippedLine, delimiter)) {
statements.add(currentSql.substring(0, currentSql.length() - delimiter.length()));
currentSql.clear();
}
}
if (!currentSql.isEmpty()) {
statements.add(currentSql.toString());
}
return statements;
}
public String getDelimiter() {
return delimiter;
}
public void setDelimiter(String delimiter) {
this.delimiter = delimiter;
}
public DelimiterType getDelimiterType() {
return delimiterType;
}
public void setDelimiterType(DelimiterType delimiterType) {
this.delimiterType = delimiterType;
}
public void setOutputLineEnding(LineEnding lineEnding) {
this.lineEnding = lineEnding;
}
}