package com.liangjian.dataplatform.member.service;

import com.liangjian.dataplatform.member.entity.vo.TagRuleVo;
import com.liangjian.dataplatform.member.entity.vo.datanodes.PDM;
import com.liangjian.dataplatform.member.entity.vo.tagrules.ConditionNode;
import com.liangjian.dataplatform.member.entity.vo.tagrules.SqlAndResult;
import com.liangjian.dataplatform.member.entity.vo.tagrules.SqlContext;

import java.util.List;
import java.util.Map;

/**
 * @Author: 黄子奇
 * @Date: 2019/9/21 10:13
 */
public interface ITagRuleSqlService {

    /**
     * 由pdm生成toSql所需的context
     * @param pdm
     * @return
     */
    SqlContext makeContext(PDM pdm);

    /**
     * 将条件节点中的条件输出where的条件sql
     * @param conditionNode
     * @return
     */
     String toSqlWhere(ConditionNode conditionNode, SqlContext context);

     String toSqlJoin(SqlContext context);

    /**
     * 默认是父表的所有字段，且这里的字段仅支持父表的
     * @param cols
     * @return
     */
     String toSqlSelect(SqlContext context,List<String> cols);

    /**
     * sql -> 结果(id -> 标签名)
     * @param vo
     * @return
     */
     List<SqlAndResult> getSqlAndResult(TagRuleVo vo, List<String> cols, Integer type);

     List<SqlAndResult> getSqlAndResult(String id, List<String> cols);
}
