class ChainRead extends AbstractSqlRead {

    public ChainRead(SQLParserVO config) {
        super(config);
    }

    @Override
    public boolean hasEnableFiled() {
        String chainEnableField = super.config.getChainEnableField();
        return StrUtil.isNotBlank(chainEnableField);
    }

    @Override
    public boolean getEnableFiledValue(ResultSet rs) throws SQLException {
        String chainEnableField = super.config.getChainEnableField();
        byte enable = rs.getByte(chainEnableField);

        return enable == 1;
    }

    @Override
    public String buildQuerySql() {
        String chainTableName = super.config.getChainTableName();
        String chainApplicationNameField = super.config.getChainApplicationNameField();

        return StrUtil.format(SqlReadConstant.SQL_PATTERN, chainTableName, chainApplicationNameField);
    }

    @Override
    public void checkConfig() {<FILL_FUNCTION_BODY>}

    @Override
    public String buildXmlElement(ResultSet rs) throws SQLException {
        String elDataField = super.config.getElDataField();

        return getStringFromRs(rs, elDataField);
    }

    @Override
    public String buildXmlElementUniqueKey(ResultSet rs) throws SQLException {
        String chainNameField = super.config.getChainNameField();

        return getStringFromRsWithCheck(rs, chainNameField);
    }

    @Override
    public ReadType type() {
        return ReadType.CHAIN;
    }
}

        String chainTableName = super.config.getChainTableName();
        String elDataField = super.config.getElDataField();
        String chainNameField = super.config.getChainNameField();
        String chainApplicationNameField = super.config.getChainApplicationNameField();
        String applicationName = super.config.getApplicationName();

        if (StrUtil.isBlank(chainTableName)){
            throw new ELSQLException("You did not define the chainTableName property");
        }
        if (StrUtil.isBlank(elDataField)){
            throw new ELSQLException("You did not define the elDataField property");
        }
        if (StrUtil.isBlank(chainNameField)){
            throw new ELSQLException("You did not define the chainNameField property");
        }
        if (StrUtil.isBlank(chainApplicationNameField)){
            throw new ELSQLException("You did not define the chainApplicationNameField property");
        }
        if (StrUtil.isBlank(applicationName)){
            throw new ELSQLException("You did not define the applicationName property");
        }
    
<methods>public void <init>(com.yomahub.liteflow.parser.sql.vo.SQLParserVO) ,public abstract java.lang.String buildQuerySql() ,public abstract java.lang.String buildXmlElement(java.sql.ResultSet) throws java.sql.SQLException,public abstract java.lang.String buildXmlElementUniqueKey(java.sql.ResultSet) throws java.sql.SQLException,public abstract void checkConfig() ,public abstract boolean getEnableFiledValue(java.sql.ResultSet) throws java.sql.SQLException,public java.lang.String getStringFromRs(java.sql.ResultSet, java.lang.String) throws java.sql.SQLException,public java.lang.String getStringFromRsWithCheck(java.sql.ResultSet, java.lang.String) throws java.sql.SQLException,public abstract boolean hasEnableFiled() ,public boolean needRead() ,public Map<java.lang.String,java.lang.String> read() <variables>private static com.yomahub.liteflow.log.LFLog LOG,public final non-sealed com.yomahub.liteflow.parser.sql.vo.SQLParserVO config