Search in sources :

Example 1 with PrimaryTableMeta

use of com.qlangtech.tis.sql.parser.er.PrimaryTableMeta in project tis by qlangtech.

the class MergeData method getPTableDBPKName.

/**
 * 取得主索引表的数据库主键索引字段名称
 *
 * @param tabName 必须为 primary table
 * @return
 */
public String getPTableDBPKName(String tabName) {
    Optional<PrimaryTableMeta> p = getPrimaryTableMetaOption(tabName);
    if (!p.isPresent()) {
        throw new IllegalStateException("tabName:" + tabName + " is not one of the primayTab");
    }
    PrimaryTableMeta ptabMeta = p.get();
    return ptabMeta.getDBPrimayKeyName().getName();
}
Also used : PrimaryTableMeta(com.qlangtech.tis.sql.parser.er.PrimaryTableMeta)

Example 2 with PrimaryTableMeta

use of com.qlangtech.tis.sql.parser.er.PrimaryTableMeta in project tis by qlangtech.

the class MergeData method getSharedId.

public String getSharedId(EntityName e) {
    Optional<PrimaryTableMeta> ptmeta = getPrimaryTableMetaOption(e.getTabName());
    if (ptmeta.isPresent()) {
        return ptmeta.get().getSharedKey();
    } else {
        // #set($parentTabRef=$config.getFirstParent($i.tabName))
        // #set($tabName=$i.tabName)
        // #* List<TableRelation> *#
        // #set($childTabRef=$config.getChildTabReference($i.tabName))
        Optional<TableRelation> firstParent = this.getFirstParent(e.getTabName());
        if (firstParent.isPresent()) {
            ptmeta = getPrimaryTableMetaOption(firstParent.get().getParent().getName());
            if (ptmeta.isPresent()) {
                return ptmeta.get().getSharedKey();
            }
        }
        List<TableRelation> childTabRefs = this.getChildTabReference(e.getTabName());
        for (TableRelation childRef : childTabRefs) {
            ptmeta = getPrimaryTableMetaOption(childRef.getChild().getName());
            if (ptmeta.isPresent()) {
                return ptmeta.get().getSharedKey();
            }
        }
    }
    throw new IllegalStateException("can not find shareId with table:" + e.getTabName());
}
Also used : PrimaryTableMeta(com.qlangtech.tis.sql.parser.er.PrimaryTableMeta) TableRelation(com.qlangtech.tis.sql.parser.er.TableRelation)

Example 3 with PrimaryTableMeta

use of com.qlangtech.tis.sql.parser.er.PrimaryTableMeta in project tis by qlangtech.

the class StreamComponentCodeGeneratorFlink method getERRule.

// @Override
private IERRules getERRule() {
    ERRules erRules = new ERRules() {

        public List<PrimaryTableMeta> getPrimaryTabs() {
            TabExtraMeta tabMeta = new TabExtraMeta();
            PrimaryTableMeta ptab = new PrimaryTableMeta("tabName", tabMeta);
            return Collections.singletonList(ptab);
        }
    };
    return erRules;
}
Also used : PrimaryTableMeta(com.qlangtech.tis.sql.parser.er.PrimaryTableMeta) TabExtraMeta(com.qlangtech.tis.sql.parser.meta.TabExtraMeta) IERRules(com.qlangtech.tis.sql.parser.er.IERRules) ERRules(com.qlangtech.tis.sql.parser.er.ERRules)

Example 4 with PrimaryTableMeta

use of com.qlangtech.tis.sql.parser.er.PrimaryTableMeta in project tis by qlangtech.

the class OfflineDatasourceAction method doSaveErRule.

/**
 * 保存ER关系
 *
 * @param context
 * @throws Exception
 */
@Func(value = PermissionConstant.DATAFLOW_UPDATE)
public void doSaveErRule(Context context) throws Exception {
    com.alibaba.fastjson.JSONObject j = this.parseJsonPost();
    ERRules erRules = new ERRules();
    final String topology = j.getString("topologyName");
    if (StringUtils.isEmpty(topology)) {
        throw new IllegalArgumentException("param 'topology' can not be empty");
    }
    SqlDataFlowTopology df = SqlTaskNodeMeta.getSqlDataFlowTopology(topology);
    com.alibaba.fastjson.JSONArray edges = j.getJSONArray("edges");
    com.alibaba.fastjson.JSONArray nodes = j.getJSONArray("nodes");
    com.alibaba.fastjson.JSONObject edge = null;
    com.alibaba.fastjson.JSONObject sourceNode = null;
    com.alibaba.fastjson.JSONObject targetNode = null;
    com.alibaba.fastjson.JSONObject linkrule = null;
    com.alibaba.fastjson.JSONArray linkKeyList = null;
    com.alibaba.fastjson.JSONObject link = null;
    com.alibaba.fastjson.JSONObject nodeTuple = null;
    com.alibaba.fastjson.JSONObject node = null;
    com.alibaba.fastjson.JSONObject ermeta = null;
    TableRelation erRelation = null;
    for (int i = 0; i < edges.size(); i++) {
        edge = edges.getJSONObject(i);
        sourceNode = edge.getJSONObject("sourceNode");
        // getTableName(sourceNode);
        targetNode = edge.getJSONObject("targetNode");
        // getTableName(targetNode);
        linkrule = edge.getJSONObject("linkrule");
        if (linkrule == null) {
            throw new IllegalStateException("linkrule can not be null");
        }
        erRelation = $(edge.getString("id"), df, getTableName(targetNode), getTableName(sourceNode), TabCardinality.parse(linkrule.getString("cardinality")));
        linkKeyList = linkrule.getJSONArray("linkKeyList");
        for (int jj = 0; jj < linkKeyList.size(); jj++) {
            link = linkKeyList.getJSONObject(jj);
            erRelation.addJoinerKey(link.getString("parentKey"), link.getString("childKey"));
        }
        erRules.addRelation(erRelation);
    }
    com.alibaba.fastjson.JSONObject nodeMeta = null;
    com.alibaba.fastjson.JSONObject colTransfer = null;
    DependencyNode dumpNode = null;
    com.alibaba.fastjson.JSONArray columnTransferList = null;
    TabExtraMeta tabMeta = null;
    String sharedKey = null;
    for (int index = 0; index < nodes.size(); index++) {
        nodeTuple = nodes.getJSONObject(index);
        node = nodeTuple.getJSONObject("node");
        ermeta = node.getJSONObject("extraMeta");
        dumpNode = new DependencyNode();
        if (ermeta != null) {
            tabMeta = new TabExtraMeta();
            tabMeta.setPrimaryIndexTab(ermeta.getBoolean("primaryIndexTab"));
            if (tabMeta.isPrimaryIndexTab()) {
                sharedKey = ermeta.getString("sharedKey");
                tabMeta.setSharedKey(sharedKey);
                com.alibaba.fastjson.JSONArray primaryIndexColumnNames = ermeta.getJSONArray("primaryIndexColumnNames");
                com.alibaba.fastjson.JSONObject primaryIndex = null;
                List<PrimaryLinkKey> names = Lists.newArrayList();
                PrimaryLinkKey plinkKey = null;
                for (int i = 0; i < primaryIndexColumnNames.size(); i++) {
                    primaryIndex = primaryIndexColumnNames.getJSONObject(i);
                    plinkKey = new PrimaryLinkKey();
                    plinkKey.setName(primaryIndex.getString("name"));
                    plinkKey.setPk(primaryIndex.getBoolean("pk"));
                    names.add(plinkKey);
                }
                tabMeta.setPrimaryIndexColumnNames(names);
            }
            tabMeta.setMonitorTrigger(ermeta.getBoolean("monitorTrigger"));
            tabMeta.setTimeVerColName(null);
            if (tabMeta.isMonitorTrigger()) {
                tabMeta.setTimeVerColName(ermeta.getString("timeVerColName"));
            }
            columnTransferList = ermeta.getJSONArray("columnTransferList");
            for (int i = 0; i < columnTransferList.size(); i++) {
                colTransfer = columnTransferList.getJSONObject(i);
                tabMeta.addColumnTransfer(new ColumnTransfer(colTransfer.getString("colKey"), colTransfer.getString("transfer"), colTransfer.getString("param")));
            }
            dumpNode.setExtraMeta(tabMeta);
        }
        dumpNode.setId(node.getString("id"));
        nodeMeta = node.getJSONObject("nodeMeta");
        dumpNode.setTabid(nodeMeta.getString("tabid"));
        dumpNode.setDbid(nodeMeta.getString("dbid"));
        Position pos = new Position();
        pos.setX(node.getIntValue("x"));
        pos.setY(node.getIntValue("y"));
        dumpNode.setPosition(pos);
        dumpNode.setName(nodeMeta.getString("tabname"));
        // dumpNode.setExtraSql(nodeMeta.getString("sqlcontent"));
        erRules.addDumpNode(dumpNode);
    }
    List<PrimaryTableMeta> primaryTabs = erRules.getPrimaryTabs();
    if (primaryTabs.size() < 1) {
        this.addErrorMessage(context, "还没有定义ER主索引表");
        return;
    }
    List<PrimaryLinkKey> pkNames = null;
    for (PrimaryTableMeta meta : primaryTabs) {
        if (StringUtils.isEmpty(meta.getSharedKey())) {
            this.addErrorMessage(context, "主索引表:" + meta.getTabName() + " 还未定义分区键");
        }
        pkNames = meta.getPrimaryKeyNames();
        if (pkNames.size() < 1) {
            this.addErrorMessage(context, "主索引表:" + meta.getTabName() + " 还未定义主键");
        }
    }
    if (this.hasErrors(context)) {
        return;
    }
    // File parent = new File(SqlTaskNode.parent, topology);
    // FileUtils.forceMkdir(parent);
    // FileUtils.write(new File(parent, ERRules.ER_RULES_FILE_NAME), ERRules.serialize(erRules), getEncode(), false);
    ERRules.write(topology, erRules);
    // System.out.println(j.toJSONString());
    long wfId = df.getProfile().getDataflowId();
    if (wfId < 1) {
        throw new IllegalStateException("topology '" + topology + "' relevant wfid can not be null");
    }
    WorkFlow wf = new WorkFlow();
    wf.setOpTime(new Date());
    WorkFlowCriteria wfCriteria = new WorkFlowCriteria();
    wfCriteria.createCriteria().andIdEqualTo((int) wfId);
    this.getWorkflowDAOFacade().getWorkFlowDAO().updateByExampleSelective(wf, wfCriteria);
}
Also used : PrimaryTableMeta(com.qlangtech.tis.sql.parser.er.PrimaryTableMeta) TableRelation(com.qlangtech.tis.sql.parser.er.TableRelation) SqlDataFlowTopology(com.qlangtech.tis.sql.parser.SqlTaskNodeMeta.SqlDataFlowTopology) WorkFlow(com.qlangtech.tis.workflow.pojo.WorkFlow) WorkFlowCriteria(com.qlangtech.tis.workflow.pojo.WorkFlowCriteria) ERRules(com.qlangtech.tis.sql.parser.er.ERRules) Func(com.qlangtech.tis.manage.spring.aop.Func)

Example 5 with PrimaryTableMeta

use of com.qlangtech.tis.sql.parser.er.PrimaryTableMeta in project tis by qlangtech.

the class TestCoreAction method createMockErRules.

public ERRules createMockErRules(TableMeta totalpayMeta) {
    ERRules erRules = mock("erRules", ERRules.class);
    if (totalpayMeta != null) {
        TabExtraMeta extraMeta = new TabExtraMeta();
        extraMeta.setSharedKey(totalpayMeta.getSharedKey());
        PrimaryTableMeta tabMeta = new PrimaryTableMeta(totalpayMeta.getTabName(), extraMeta);
        EasyMock.expect(erRules.getPrimaryTabs()).andReturn(Lists.newArrayList(tabMeta)).anyTimes();
    } else {
        EasyMock.expect(erRules.getPrimaryTabs()).andReturn(Collections.emptyList()).anyTimes();
    }
    MockERRulesGetter.erRules = erRules;
    return erRules;
}
Also used : PrimaryTableMeta(com.qlangtech.tis.sql.parser.er.PrimaryTableMeta) TabExtraMeta(com.qlangtech.tis.sql.parser.meta.TabExtraMeta) ERRules(com.qlangtech.tis.sql.parser.er.ERRules)

Aggregations

PrimaryTableMeta (com.qlangtech.tis.sql.parser.er.PrimaryTableMeta)5 ERRules (com.qlangtech.tis.sql.parser.er.ERRules)3 TableRelation (com.qlangtech.tis.sql.parser.er.TableRelation)2 TabExtraMeta (com.qlangtech.tis.sql.parser.meta.TabExtraMeta)2 Func (com.qlangtech.tis.manage.spring.aop.Func)1 SqlDataFlowTopology (com.qlangtech.tis.sql.parser.SqlTaskNodeMeta.SqlDataFlowTopology)1 IERRules (com.qlangtech.tis.sql.parser.er.IERRules)1 WorkFlow (com.qlangtech.tis.workflow.pojo.WorkFlow)1 WorkFlowCriteria (com.qlangtech.tis.workflow.pojo.WorkFlowCriteria)1