ips1ap101.lib.core.db.util.InterpreteSqlSQLServer.java Source code

Java tutorial

Introduction

Here is the source code for ips1ap101.lib.core.db.util.InterpreteSqlSQLServer.java

Source

/*
 * Este programa es software libre; usted puede redistribuirlo y/o modificarlo bajo los trminos
 * de la licencia "GNU General Public License" publicada por la Fundacin "Free Software Foundation".
 * Este programa se distribuye con la esperanza de que pueda ser til, pero SIN NINGUNA GARANTIA;
 * vea la licencia "GNU General Public License" para obtener cursor informacion.
 */
package ips1ap101.lib.core.db.util;

import java.sql.SQLException;
import ips1ap101.lib.core.app.Bitacora;
import ips1ap101.lib.core.enumeration.EnumTipoResultadoSQL;
import org.apache.commons.lang.StringUtils;

/**
 * @author Jorge Campins
 */
public class InterpreteSqlSQLServer extends InterpreteSqlAbstracto {

    // <editor-fold defaultstate="collapsed" desc="constantes protegidas">
    private static final String LIKE = " ILIKE ";

    private static final String NOT_LIKE = " NOT ILIKE ";

    @Override
    protected String getLike() {
        return LIKE;
    }

    @Override
    protected String getNotLike() {
        return NOT_LIKE;
    }
    // </editor-fold>

    private static final String COMANDO_SELECT_1 = "SELECT";

    private static final String COMANDO_SELECT_2 = "SELECT TOP";

    /* para funciones que retornan tipos basicos */
    private static final String COMANDO_EXECUTE_1 = "SELECT dbo.";

    /* para funciones que retornan tipos compuestos (records, rows, sets, ...) */
    private static final String COMANDO_EXECUTE_2 = "SELECT dbo.";

    private void stamp() {
        Bitacora.stamp(this);
    }

    InterpreteSqlSQLServer() {
        stamp();
    }

    @Override
    public String getComandoSelect(String comando, int limite) {
        String select = super.getComandoSelect(comando, limite);
        if (select != null && limite > 0) {
            boolean b1 = StringUtils.startsWithIgnoreCase(select, COMANDO_SELECT_1);
            boolean b2 = StringUtils.startsWithIgnoreCase(select, COMANDO_SELECT_2);
            if (b1 && !b2) {
                select = StringUtils.replaceOnce(select, COMANDO_SELECT_1, COMANDO_SELECT_2 + " " + limite);
            }
        }
        return select;
    }

    @Override
    public String getComandoExecute(String comando, int argumentos) {
        return this.getComandoExecute(comando, argumentos, EnumTipoResultadoSQL.VOID);
    }

    @Override
    public String getComandoExecute(String comando, int argumentos, EnumTipoResultadoSQL tipoResultado) {
        boolean retornaResultadoCompuesto = EnumTipoResultadoSQL.COMPOUND.equals(tipoResultado);
        String execute = StringUtils.stripToNull(comando);
        String command = retornaResultadoCompuesto ? COMANDO_EXECUTE_2 : COMANDO_EXECUTE_1;
        if (execute != null) {
            String[] token = StringUtils.split(execute);
            String parametros = "()";
            if (argumentos > 0) {
                parametros = "";
                for (int i = 0; i < argumentos; i++, parametros += ",?") {
                }
                parametros = "(" + parametros.substring(1) + ")";
            }
            if (!token[0].equalsIgnoreCase(COMANDO_EXECUTE_1)) {
                execute = command + " " + execute;
            }
            if (!execute.endsWith(parametros) && !execute.endsWith(";")) {
                execute += parametros;
            }
        }
        Bitacora.trace(execute);
        return execute;
    }

    @Override
    public boolean isCommandIgnoredException(SQLException sqle) {
        boolean is = false;
        if (sqle != null) {
            String token1 = "current transaction is aborted";
            String token2 = "commands ignored until end of transaction block";
            is = sqle.getMessage().contains(token1) && sqle.getMessage().contains(token2);
        }
        return is;
    }

    @Override
    public boolean isNotNullConstraintViolation(SQLException sqle) {
        boolean is = false;
        if (sqle != null) {
            String token1 = "null value in column";
            String token2 = "violates not-null constraint";
            is = sqle.getMessage().contains(token1) && sqle.getMessage().contains(token2);
        }
        return is;
    }

    @Override
    public String getNotNullConstraintViolationColumn(SQLException sqle) {
        String column = null;
        boolean is = this.isNotNullConstraintViolation(sqle);
        if (is) {
            String[] token = sqle.getMessage().split("\"");
            if (token.length > 2) {
                column = token[1];
            }
        }
        return column;
    }

}