All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.talanlabs.mybatis.rsql.statement.sqlsource.RsqlSqlSource Maven / Gradle / Ivy

The newest version!
package com.talanlabs.mybatis.rsql.statement.sqlsource;

import com.talanlabs.component.IComponent;
import com.talanlabs.mybatis.component.session.ComponentConfiguration;
import com.talanlabs.mybatis.rsql.configuration.IRsqlConfiguration;
import com.talanlabs.mybatis.rsql.engine.EngineContext;
import com.talanlabs.mybatis.rsql.statement.IPageStatementFactory;
import com.talanlabs.mybatis.rsql.statement.Request;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.SqlSource;

import java.util.HashMap;
import java.util.Map;

public class RsqlSqlSource extends AbstractRsqlSqlSource {

    public RsqlSqlSource(ComponentConfiguration componentConfiguration, IRsqlConfiguration rsqlConfiguration, Class componentClass) {
        super(componentConfiguration, rsqlConfiguration, componentClass);
    }

    @Override
    public BoundSql getBoundSql(Object parameterObject) {
        String rsql;
        Request.ICustomRequest customRequest = null;
        String sort = null;
        Request.ICustomSort customSortLeft = null;
        Request.ICustomSort customSortRight = null;
        Request.Rows rows = null;
        if (parameterObject instanceof Request) {
            Request request = (Request) parameterObject;
            rsql = request.getRsql();
            customRequest = request.getCustomRequest();
            sort = request.getSort();
            customSortLeft = request.getCustomSortLeft();
            customSortRight = request.getCustomSortRight();
            rows = request.getRows();
        } else {
            rsql = (String) parameterObject;
        }

        Map additionalParameters = new HashMap<>();
        EngineContext context = rsqlConfiguration.newEngineContext();

        String sqlFromWhereOrderBy = buildSqlFromWhereOrderBy(rsql, customRequest, sort, customSortLeft, customSortRight, additionalParameters, context);

        String sql;
        if (rows != null) {
            IPageStatementFactory pageStatementFactory = rsqlConfiguration.getPageStatementFactory();
            if (pageStatementFactory == null) {
                throw new IllegalArgumentException("Failed to build SQL for component=" + componentClass + " rows is not null but PageStatementFactory not found");
            }
            sql = pageStatementFactory.buildPageSql(componentClass, sqlFromWhereOrderBy, rows, additionalParameters, context);
        } else {
            sql = "SELECT " + (StringUtils.isNotBlank(context.getDefaultTableName()) ? context.getDefaultTableName() + "." : "") + "* " + sqlFromWhereOrderBy;
        }

        SqlSource sqlSource = sqlSourceParser.parse(sql, String.class, additionalParameters);
        BoundSql boundSql = sqlSource.getBoundSql(parameterObject);
        additionalParameters.entrySet().forEach(e -> boundSql.setAdditionalParameter(e.getKey(), e.getValue()));
        return boundSql;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy