com.hangum.tadpole.engine.sql.util.PartQueryUtil.java Source code

Java tutorial

Introduction

Here is the source code for com.hangum.tadpole.engine.sql.util.PartQueryUtil.java

Source

/*******************************************************************************
 * Copyright (c) 2013 hangum.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Lesser Public License v2.1
 * which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 * 
 * Contributors:
 *     hangum - initial API and implementation
 ******************************************************************************/
package com.hangum.tadpole.engine.sql.util;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;

import com.hangum.tadpole.engine.define.DBDefine;
import com.hangum.tadpole.engine.query.dao.system.UserDBDAO;
import com.hangum.tadpole.engine.sql.template.CubridDMLTemplate;
import com.hangum.tadpole.engine.sql.template.HIVEDMLTemplate;
import com.hangum.tadpole.engine.sql.template.MSSQLDMLTemplate;
import com.hangum.tadpole.engine.sql.template.MySQLDMLTemplate;
import com.hangum.tadpole.engine.sql.template.OracleDMLTemplate;
import com.hangum.tadpole.engine.sql.template.PostgreDMLTemplate;
import com.hangum.tadpole.engine.sql.template.SQLiteDMLTemplate;

/**
 * ? DBMS?  ? ?.
 * 
 * @author hangum
 *
 */
public class PartQueryUtil {
    private static final Logger logger = Logger.getLogger(PartQueryUtil.class);

    /**
     *  ? DBMS?  SELECT ? ?.
     *  
     * @return
     */
    public static String makeSelect(UserDBDAO userDB, String originalQuery, int startResultPos, int endResultPos) {
        String requestQuery = "";

        if (DBDefine.MYSQL_DEFAULT == DBDefine.getDBDefine(userDB)) {
            if (!StringUtils.contains(originalQuery.toLowerCase(), "limit ")) {
                requestQuery = String.format(MySQLDMLTemplate.TMP_GET_PARTDATA, originalQuery, startResultPos,
                        endResultPos);
            } else {
                requestQuery = originalQuery;
            }

        } else if (DBDefine.ORACLE_DEFAULT == DBDefine.getDBDefine(userDB)) {

            if (!StringUtils.contains(originalQuery.toLowerCase(), "where")) {
                requestQuery = String.format(OracleDMLTemplate.TMP_GET_PARTDATA, originalQuery, startResultPos,
                        endResultPos);
            } else {
                requestQuery = originalQuery;
            }

        } else if (DBDefine.SQLite_DEFAULT == DBDefine.getDBDefine(userDB)) {
            if (!StringUtils.contains(originalQuery.toLowerCase(), "limit ")) {
                requestQuery = String.format(SQLiteDMLTemplate.TMP_GET_PARTDATA, originalQuery, startResultPos,
                        endResultPos);
            } else {
                requestQuery = originalQuery;
            }

        } else if (DBDefine.CUBRID_DEFAULT == DBDefine.getDBDefine(userDB)) {

            //         //https://github.com/hangum/TadpoleForDBTools/issues/12  ? ? ? ? ?   ?  .
            if (!StringUtils.contains(originalQuery.toLowerCase(), "limit ")) {
                requestQuery = String.format(CubridDMLTemplate.TMP_GET_PARTDATA, originalQuery, startResultPos,
                        endResultPos);
            } else {
                requestQuery = originalQuery;
            }

        } else if (DBDefine.POSTGRE_DEFAULT == DBDefine.getDBDefine(userDB)) {
            //  ? limit    .
            if (!StringUtils.contains(originalQuery.toLowerCase(), "limit ")) {
                requestQuery = String.format(PostgreDMLTemplate.TMP_GET_PARTDATA, originalQuery, endResultPos,
                        startResultPos);
            } else {
                requestQuery = originalQuery;
            }

            //      } else if(DBDefine.MSSQL_DEFAULT == DBDefine.getDBDefine(userDB.getTypes())) {
            //         if(!StringUtils.contains(originalQuery.toLowerCase(), "where")) {
            //            requestQuery = String.format(MSSQLDMLTemplate.TMP_GET_PARTDATA, originalQuery, startResultPos, endResultPos);
            //         } else {
            //            requestQuery = originalQuery;            
            //         }

            // ? ?  dbms  ? .
        } else {
            requestQuery = originalQuery;
        }

        return requestQuery;
    }

    /**
     * ? dbms?  explain query  ?.
     * 
     * @param userDB
     * @param query
     * @return
     */
    public static String makeExplainQuery(UserDBDAO userDB, String query) throws Exception {
        String resultQuery = "";

        if (DBDefine.MYSQL_DEFAULT == DBDefine.getDBDefine(userDB)
                || DBDefine.MARIADB_DEFAULT == DBDefine.getDBDefine(userDB)) {
            resultQuery = MySQLDMLTemplate.TMP_EXPLAIN_EXTENDED + query;

        } else if (DBDefine.ORACLE_DEFAULT == DBDefine.getDBDefine(userDB)) {
            resultQuery = OracleDMLTemplate.TMP_EXPLAIN_EXTENDED + "( " + query + ")";
        } else if (DBDefine.MSSQL_8_LE_DEFAULT == DBDefine.getDBDefine(userDB)
                || DBDefine.MSSQL_DEFAULT == DBDefine.getDBDefine(userDB)) {
            resultQuery = MSSQLDMLTemplate.TMP_EXPLAIN_EXTENDED + query;
        } else if (DBDefine.SQLite_DEFAULT == DBDefine.getDBDefine(userDB)) {
            resultQuery = SQLiteDMLTemplate.TMP_EXPLAIN_EXTENDED + query;

        } else if (DBDefine.CUBRID_DEFAULT == DBDefine.getDBDefine(userDB)) {
            resultQuery = query;
        } else if (DBDefine.HIVE_DEFAULT == DBDefine.getDBDefine(userDB)) {
            resultQuery = HIVEDMLTemplate.TMP_EXPLAIN_EXTENDED + query;
        } else if (DBDefine.POSTGRE_DEFAULT == DBDefine.getDBDefine(userDB)) {
            resultQuery = PostgreDMLTemplate.TMP_EXPLAIN_EXTENDED + query;
        } else {
            throw new Exception("Not Support DBMS Query Plan.");
        }

        if (logger.isDebugEnabled())
            logger.debug("[plan query]" + resultQuery);

        return resultQuery;
    }
}