
package com.lideeyunji.tool.framework.sql.chain;


import com.lideeyunji.tool.framework.sql.chain.parser.StandardSQLParser;
import com.lideeyunji.tool.framework.sql.chain.parser.TenantSQLParser;
import com.lideeyunji.tool.framework.sql.entity.SqlInfoEntity;
import com.lideeyunji.tool.framework.yunji.utils.FuncBase;

/**
 * 使用责任链
 */
public class SQLParserChainClient {


    //处理sql
    public static void sqlParser(SqlInfoEntity sqlInfoEntity){

        //标准解析 -> 数据权限 -> 租户权限

        //标准SQL
        AbstractSQLParser standardSQLParser = new StandardSQLParser(AbstractSQLParser.levelStandard);

        //租户权限
        AbstractSQLParser tenantSQLParser = new TenantSQLParser(AbstractSQLParser.levelTenant);

        //单独要某一个
        Integer sqlParserLevel = sqlInfoEntity.getSqlParserLevel();
        if(FuncBase.isNotEmpty(sqlParserLevel)){
            switch (sqlParserLevel){
                case 2:
                    standardSQLParser.processed(AbstractSQLParser.levelStandard,sqlInfoEntity);
                    break;
                case 1:
                    tenantSQLParser.processed(AbstractSQLParser.levelTenant,sqlInfoEntity);
                    break;
            }
            return;
        }


        SQLParserChain sqlParserChain=new SQLParserChain();
        sqlParserChain.setSqlParserChain(standardSQLParser,tenantSQLParser);
        AbstractSQLParser sqlParser = sqlParserChain.getSqlParserChain();

        //先走标准sql解析
        sqlParser.processed(AbstractSQLParser.levelStandard, sqlInfoEntity);
    }


}
