use of com.qlangtech.tis.sql.parser.er.TabFieldProcessor 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