Search in sources :

Example 1 with TisSqlFormatException

use of com.qlangtech.tis.sql.parser.exception.TisSqlFormatException in project tis by qlangtech.

the class SqlTaskNodeMeta method getRewriteSql.

// private static class EntryPair implements Map.Entry<IDumpTable, ITabPartition> {
// private final IDumpTable key;
// private final ITabPartition val;
// 
// public EntryPair(IDumpTable key, ITabPartition val) {
// this.key = key;
// this.val = val;
// }
// 
// @Override
// public IDumpTable getKey() {
// return key;
// }
// 
// @Override
// public ITabPartition getValue() {
// return val;
// }
// 
// @Override
// public ITabPartition setValue(ITabPartition value) {
// return null;
// }
// }
@Override
public RewriteSql getRewriteSql(String taskName, TabPartitions dumpPartition, IPrimaryTabFinder erRules, ITemplateContext templateContext, boolean isFinalNode) {
    if (dumpPartition.size() < 1) {
        throw new IllegalStateException("dumpPartition set size can not small than 1");
    }
    Optional<List<Expression>> parameters = Optional.empty();
    IJoinTaskContext joinContext = templateContext.getExecContext();
    SqlStringBuilder builder = new SqlStringBuilder();
    SqlRewriter rewriter = new SqlRewriter(builder, dumpPartition, erRules, parameters, isFinalNode, joinContext);
    // 执行rewrite
    try {
        Statement state = getSqlStatement();
        rewriter.process(state, 0);
    } catch (TisSqlFormatException e) {
        throw e;
    } catch (Exception e) {
        // dumpPartition.entrySet().stream().map((ee) -> "[" + ee.getKey() + "->" + ee.getValue().getPt() + "]").collect(Collectors.joining(","));
        String dp = dumpPartition.toString();
        throw new IllegalStateException("task:" + taskName + ",isfinalNode:" + isFinalNode + ",dump tabs pt:" + dp + "\n" + e.getMessage(), e);
    }
    SqlRewriter.AliasTable primaryTable = rewriter.getPrimayTable();
    if (primaryTable == null) {
        throw new IllegalStateException("task:" + taskName + " has not find primary table");
    }
    // return ;
    return new RewriteSql(builder.toString(), rewriter.getPrimayTable());
}
Also used : Statement(com.facebook.presto.sql.tree.Statement) IJoinTaskContext(com.qlangtech.tis.order.center.IJoinTaskContext) TisSqlFormatException(com.qlangtech.tis.sql.parser.exception.TisSqlFormatException) TisSqlFormatException(com.qlangtech.tis.sql.parser.exception.TisSqlFormatException)

Example 2 with TisSqlFormatException

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

Statement (com.facebook.presto.sql.tree.Statement)2 IJoinTaskContext (com.qlangtech.tis.order.center.IJoinTaskContext)2 TisSqlFormatException (com.qlangtech.tis.sql.parser.exception.TisSqlFormatException)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 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 IDumpTable (com.qlangtech.tis.fullbuild.indexbuild.IDumpTable)1 ITabPartition (com.qlangtech.tis.fullbuild.indexbuild.ITabPartition)1 ITemplateContext (com.qlangtech.tis.fullbuild.taskflow.ITemplateContext)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