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);
}
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;
}
}
}
Aggregations