Search in sources :

Example 1 with ITemplateContext

use of com.qlangtech.tis.fullbuild.taskflow.ITemplateContext in project tis by qlangtech.

the class TestSqlTaskNodeMeta method testGetRewriteSql.

public void testGetRewriteSql() throws Exception {
    SqlTaskNodeMeta taskNodeMeta = new SqlTaskNodeMeta();
    SqlDataFlowTopology topology = SqlTaskNodeMeta.getSqlDataFlowTopology(TestSupplyGoodsParse.topologyName);
    assertNotNull(topology);
    SqlTaskNodeMeta finalNode = topology.getFinalNode();
    assertNotNull(finalNode);
    taskNodeMeta.setSql(finalNode.getSql());
    Map<IDumpTable, ITabPartition> dumpPartition = Maps.newHashMap();
    String pt = "20200703113848";
    dumpPartition.put(EntityName.parse("scmdb.warehouse_goods"), () -> pt);
    dumpPartition.put(EntityName.parse("tis.stock_info_collapse"), () -> pt);
    dumpPartition.put(EntityName.parse("scmdb.supplier_goods"), () -> pt);
    dumpPartition.put(EntityName.parse("tis.warehouse_collapse"), () -> pt);
    dumpPartition.put(EntityName.parse("tis.supplier_collapse"), () -> pt);
    dumpPartition.put(EntityName.parse("scmdb.goods"), () -> pt);
    dumpPartition.put(EntityName.parse("scmdb.stock_info"), () -> pt);
    dumpPartition.put(EntityName.parse("scmdb.category"), () -> pt);
    dumpPartition.put(EntityName.parse("scmdb.goods_sync_shop"), () -> pt);
    ITemplateContext tplContext = EasyMock.createMock("templateContext", ITemplateContext.class);
    IJoinTaskContext joinTaskContext = EasyMock.createMock("joinTaskContext", IJoinTaskContext.class);
    EasyMock.expect(tplContext.getExecContext()).andReturn(joinTaskContext);
    EasyMock.expect(joinTaskContext.getExecutePhaseRange()).andReturn(ExecutePhaseRange.fullRange()).times(2);
    EasyMock.expect(joinTaskContext.getIndexShardCount()).andReturn(1).times(1);
    Optional<ERRules> erRule = ERRules.getErRule(TestSupplyGoodsParse.topologyName);
    assertTrue(erRule.isPresent());
    EasyMock.replay(tplContext, joinTaskContext);
    ISqlTask.RewriteSql rewriteSql = taskNodeMeta.getRewriteSql("supply_goods", new TabPartitions(dumpPartition), erRule.get(), tplContext, true);
    assertNotNull(rewriteSql);
    assertEquals(TestSqlRewriter.getScriptContent("supply_goods_rewrite_result.txt"), rewriteSql.sqlContent);
    System.out.println(rewriteSql.sqlContent);
    EasyMock.verify(tplContext, joinTaskContext);
}
Also used : ITabPartition(com.qlangtech.tis.fullbuild.indexbuild.ITabPartition) IDumpTable(com.qlangtech.tis.fullbuild.indexbuild.IDumpTable) SqlDataFlowTopology(com.qlangtech.tis.sql.parser.SqlTaskNodeMeta.SqlDataFlowTopology) IJoinTaskContext(com.qlangtech.tis.order.center.IJoinTaskContext) ITemplateContext(com.qlangtech.tis.fullbuild.taskflow.ITemplateContext) ERRules(com.qlangtech.tis.sql.parser.er.ERRules)

Example 2 with ITemplateContext

use of com.qlangtech.tis.fullbuild.taskflow.ITemplateContext in project tis by qlangtech.

the class SqlTaskNodeMeta method validateSql.

/**
 * 对sql进行粗略的校验
 *
 * @param sql
 * @param dependencyNodes
 * @return
 */
public static Optional<TisSqlFormatException> validateSql(String sql, List<String> dependencyNodes) {
    // Optional<TisSqlFormatException> result  = Optional.empty();
    SqlTaskNodeMeta taskNodeMeta = new SqlTaskNodeMeta();
    // 这个sql语句有错误,需要校验成错误,抛异常
    taskNodeMeta.setSql(sql);
    final IJoinTaskContext tskContext = new DftJoinTaskContext(ExecutePhaseRange.fullRange());
    final ITemplateContext tplContext = new ITemplateContext() {

        @Override
        public <T> T getContextValue(String key) {
            return null;
        }

        @Override
        public void putContextValue(String key, Object v) {
        }

        @Override
        public IJoinTaskContext getExecContext() {
            return tskContext;
        }
    };
    try {
        String pt = "20200703113848";
        ITabPartition p = () -> pt;
        Map<IDumpTable, ITabPartition> tabPartition = dependencyNodes.stream().collect(Collectors.toMap((r) -> EntityName.parse(r), (r) -> p));
        taskNodeMeta.getRewriteSql("testTaskName", new MockDumpPartition(tabPartition), new IPrimaryTabFinder() {

            @Override
            public Optional<TableMeta> getPrimaryTab(IDumpTable entityName) {
                return Optional.empty();
            }

            @Override
            public Map<EntityName, TabFieldProcessor> getTabFieldProcessorMap() {
                return Collections.emptyMap();
            }
        }, tplContext, false);
        return Optional.empty();
    } catch (Throwable e) {
        int indexOf;
        if ((indexOf = ExceptionUtils.indexOfType(e, TisSqlFormatException.class)) > -1) {
            TisSqlFormatException ex = (TisSqlFormatException) ExceptionUtils.getThrowables(e)[indexOf];
            // System.out.println(ex.summary());
            return Optional.of(ex);
        // assertEquals("base ref:gg can not find relevant table entity in map,mapSize:1,exist:[g:tis.commodity_goods],位置,行:1,列:44", ex.summary());
        } else {
            throw e;
        }
    }
}
Also used : LineIterator(org.apache.commons.io.LineIterator) IDumpTable(com.qlangtech.tis.fullbuild.indexbuild.IDumpTable) TableMeta(com.qlangtech.tis.sql.parser.er.TableMeta) StringUtils(org.apache.commons.lang.StringUtils) ColumnTransfer(com.qlangtech.tis.sql.parser.meta.ColumnTransfer) TIS(com.qlangtech.tis.TIS) DefaultDumpNodeMapContext(com.qlangtech.tis.sql.parser.utils.DefaultDumpNodeMapContext) Node(org.yaml.snakeyaml.nodes.Node) ExecutePhaseRange(com.qlangtech.tis.exec.ExecutePhaseRange) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) ScalarStyle(org.yaml.snakeyaml.DumperOptions.ScalarStyle) Method(java.lang.reflect.Method) ITabPartition(com.qlangtech.tis.fullbuild.indexbuild.ITabPartition) DependencyNode(com.qlangtech.tis.sql.parser.meta.DependencyNode) EntityName(com.qlangtech.tis.sql.parser.tuple.creator.EntityName) IJoinTaskContext(com.qlangtech.tis.order.center.IJoinTaskContext) Property(org.yaml.snakeyaml.introspector.Property) Collectors(java.util.stream.Collectors) SqlParser(com.facebook.presto.sql.parser.SqlParser) IOUtils(org.apache.commons.io.IOUtils) LineBreak(org.yaml.snakeyaml.DumperOptions.LineBreak) JSONObject(com.alibaba.fastjson.JSONObject) Pattern(java.util.regex.Pattern) ParsingOptions(com.facebook.presto.sql.parser.ParsingOptions) Joiner(com.google.common.base.Joiner) Types(java.sql.Types) java.util(java.util) JSONField(com.alibaba.fastjson.annotation.JSONField) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) TableTupleCreator(com.qlangtech.tis.sql.parser.tuple.creator.impl.TableTupleCreator) Yaml(org.yaml.snakeyaml.Yaml) DumperOptions(org.yaml.snakeyaml.DumperOptions) IAppSourcePipelineController(com.qlangtech.tis.order.center.IAppSourcePipelineController) Lists(com.google.common.collect.Lists) TabFieldProcessor(com.qlangtech.tis.sql.parser.er.TabFieldProcessor) TisUTF8(com.qlangtech.tis.manage.common.TisUTF8) Position(com.qlangtech.tis.sql.parser.meta.Position) Constructor(org.yaml.snakeyaml.constructor.Constructor) NodeType(com.qlangtech.tis.sql.parser.meta.NodeType) ExceptionUtils(org.apache.commons.lang.exception.ExceptionUtils) com.qlangtech.tis.plugin.ds(com.qlangtech.tis.plugin.ds) FileUtils(org.apache.commons.io.FileUtils) Tag(org.yaml.snakeyaml.nodes.Tag) Maps(com.google.common.collect.Maps) TisSqlFormatException(com.qlangtech.tis.sql.parser.exception.TisSqlFormatException) NodeTuple(org.yaml.snakeyaml.nodes.NodeTuple) FlowStyle(org.yaml.snakeyaml.DumperOptions.FlowStyle) JSON(com.alibaba.fastjson.JSON) ERRules(com.qlangtech.tis.sql.parser.er.ERRules) Expression(com.facebook.presto.sql.tree.Expression) ITemplateContext(com.qlangtech.tis.fullbuild.taskflow.ITemplateContext) java.io(java.io) IPrimaryTabFinder(com.qlangtech.tis.sql.parser.er.IPrimaryTabFinder) Representer(org.yaml.snakeyaml.representer.Representer) TypeDescription(org.yaml.snakeyaml.TypeDescription) Statement(com.facebook.presto.sql.tree.Statement) ITabPartition(com.qlangtech.tis.fullbuild.indexbuild.ITabPartition) IDumpTable(com.qlangtech.tis.fullbuild.indexbuild.IDumpTable) TisSqlFormatException(com.qlangtech.tis.sql.parser.exception.TisSqlFormatException) IPrimaryTabFinder(com.qlangtech.tis.sql.parser.er.IPrimaryTabFinder) JSONObject(com.alibaba.fastjson.JSONObject) IJoinTaskContext(com.qlangtech.tis.order.center.IJoinTaskContext) ITemplateContext(com.qlangtech.tis.fullbuild.taskflow.ITemplateContext)

Aggregations

IDumpTable (com.qlangtech.tis.fullbuild.indexbuild.IDumpTable)2 ITabPartition (com.qlangtech.tis.fullbuild.indexbuild.ITabPartition)2 ITemplateContext (com.qlangtech.tis.fullbuild.taskflow.ITemplateContext)2 IJoinTaskContext (com.qlangtech.tis.order.center.IJoinTaskContext)2 ERRules (com.qlangtech.tis.sql.parser.er.ERRules)2 JSON (com.alibaba.fastjson.JSON)1 JSONObject (com.alibaba.fastjson.JSONObject)1 JSONField (com.alibaba.fastjson.annotation.JSONField)1 ParsingOptions (com.facebook.presto.sql.parser.ParsingOptions)1 SqlParser (com.facebook.presto.sql.parser.SqlParser)1 Expression (com.facebook.presto.sql.tree.Expression)1 Statement (com.facebook.presto.sql.tree.Statement)1 Joiner (com.google.common.base.Joiner)1 Lists (com.google.common.collect.Lists)1 Maps (com.google.common.collect.Maps)1 TIS (com.qlangtech.tis.TIS)1 ExecutePhaseRange (com.qlangtech.tis.exec.ExecutePhaseRange)1 TisUTF8 (com.qlangtech.tis.manage.common.TisUTF8)1 IAppSourcePipelineController (com.qlangtech.tis.order.center.IAppSourcePipelineController)1 com.qlangtech.tis.plugin.ds (com.qlangtech.tis.plugin.ds)1