package edu.harvard.i2b2.crc.dao.setfinder.querybuilder;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class DirectQueryForSinglePanel {
protected final Log log = LogFactory.getLog(DirectQueryForSinglePanel.class);
public DirectQueryForSinglePanel() {
}
public String buildSqlWithOR(String tempTableSql) {
String[] individualSql = tempTableSql.split("<\\*>");
StringBuffer convertedSqlBuffer = new StringBuffer();
String individualSqlLowerCase = "";
for (int i =0 ; i<individualSql.length-1;i++) {
individualSqlLowerCase = individualSql[i].toLowerCase();
if (individualSqlLowerCase.indexOf("select")>0) {
String constraint = "";
Pattern p = Pattern.compile("\\bwhere\\b(.*?)(?:(\\bgroup by\\b|\\border by\\b|$))", Pattern.DOTALL|Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(individualSqlLowerCase);
if (m.find() && m.groupCount()>0)
constraint = m.group(1).trim();
convertedSqlBuffer.append( "( " + constraint + ")");
//System.out.println("original split sql " + individualSql[i]);
if (i+1<individualSql.length-1) {
convertedSqlBuffer.append("\n OR \n");
}
}
}
return convertedSqlBuffer.toString();
}
public String buildSqlWithUnion(String tempTableSql) {
String[] individualSql = tempTableSql.split("<\\*>");
StringBuffer convertedSqlBuffer = new StringBuffer();
String individualSqlLowerCase = "";
for (int i =0 ; i<individualSql.length-1;i++) {
individualSqlLowerCase = individualSql[i].toLowerCase();
if (individualSqlLowerCase.indexOf("select")>0) {
convertedSqlBuffer.append(individualSql[i].substring(individualSqlLowerCase.indexOf("select"),individualSqlLowerCase.length()));
//System.out.println("original split sql " + individualSql[i]);
if (i+1<individualSql.length-1) {
convertedSqlBuffer.append("\n UNION ALL \n");
}
}
}
return convertedSqlBuffer.toString();
}
}