edu.harvard.i2b2.crc.dao.setfinder.querybuilder.temporal.TemporalQuerySimpleSqlParser.java Source code

Java tutorial

Introduction

Here is the source code for edu.harvard.i2b2.crc.dao.setfinder.querybuilder.temporal.TemporalQuerySimpleSqlParser.java

Source

/*
 * Copyright (c) 2006-2013 Massachusetts General Hospital 
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the i2b2 Software License v1.0 
 * which accompanies this distribution. 
 * 
 * Contributors:
 *       Christopher Herrick
 */
package edu.harvard.i2b2.crc.dao.setfinder.querybuilder.temporal;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class TemporalQuerySimpleSqlParser {

    protected final Log log = LogFactory.getLog(TemporalQuerySimpleSqlParser.class);
    private String fullSql = null;

    private String selectClause = null;
    private String fromClause = null;
    private String whereClause = null;
    private String groupByClause = null;
    private String havingClause = null;
    private String orderByClause = null;

    public TemporalQuerySimpleSqlParser(String simpleSqlStatement) {
        fullSql = simpleSqlStatement;
        selectClause = parseSelectClause(fullSql);
        fromClause = parseFromClause(fullSql);
        whereClause = parseWhereClause(fullSql);
        groupByClause = parseGroupByClause(fullSql);
        havingClause = parseHavingClause(fullSql);
        orderByClause = parseOrderByClause(fullSql);
    }

    private String parseFromClause(String sql) {
        if (sql == null || sql.trim().length() == 0)
            return null;

        return runRegExExpression(sql, "\\bfrom\\b(.*?)(?:(\\bwhere\\b|\\bgroup by\\b|\\border by\\b|$))");
    }

    private String parseSelectClause(String sql) {
        if (sql == null || sql.trim().length() == 0)
            return null;

        return runRegExExpression(sql, "\\bselect\\b(.*?)(?:(\\bfrom\\b|$))");
    }

    private String parseWhereClause(String sql) {
        if (sql == null || sql.trim().length() == 0)
            return null;

        return runRegExExpression(sql, "\\bwhere\\b(.*?)(?:(\\bgroup by\\b|\\border by\\b|$))");
    }

    private String parseGroupByClause(String sql) {
        if (sql == null || sql.trim().length() == 0)
            return null;

        return runRegExExpression(sql, "\\bgroup by\\b(.*?)(?:(\\bhaving\\b|\\border by\\b|$))");
    }

    private String parseHavingClause(String sql) {
        if (sql == null || sql.trim().length() == 0)
            return null;

        return runRegExExpression(sql, "\\bhaving\\b(.*?)(?:(\\border by\\b|$))");
    }

    private String parseOrderByClause(String sql) {
        if (sql == null || sql.trim().length() == 0)
            return null;

        return runRegExExpression(sql, "\\border by\\b(.*)");
    }

    private String runRegExExpression(String sqlString, String regEx) {
        Pattern p = Pattern.compile(regEx, Pattern.DOTALL | Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(sqlString);
        if (m.find() && m.groupCount() > 0)
            return m.group(1).trim();
        else
            return null;
    }

    public String getSelectClause() {
        return selectClause;
    }

    public String getFromClause() {
        return fromClause;
    }

    public String getWhereClause() {
        return whereClause;
    }

    public String getGroupByClause() {
        return groupByClause;
    }

    public String getHavingClause() {
        return havingClause;
    }

    public String getOrderByClause() {
        return orderByClause;
    }

}