zoukankan      html  css  js  c++  java
  • PostgreSQL在何处处理 sql查询之十五

    如此:

    接前面,看 add_base_rels_to_query函数:

    /*
     * add_base_rels_to_query
     *
     *      Scan the query's jointree and create baserel RelOptInfos for all
     *      the base relations (ie, table, subquery, and function RTEs)
     *      appearing in the jointree.
     *
     * The initial invocation must pass root->parse->jointree as the value of
     * jtnode.    Internally, the function recurses through the jointree.
     *
     * At the end of this process, there should be one baserel RelOptInfo for
     * every non-join RTE that is used in the query.  Therefore, this routine
     * is the only place that should call build_simple_rel with reloptkind
     * RELOPT_BASEREL.    (Note: build_simple_rel recurses internally to build
     * "other rel" RelOptInfos for the members of any appendrels we find here.)
     */
    void
    add_base_rels_to_query(PlannerInfo *root, Node *jtnode)
    {
        if (jtnode == NULL)
            return;
        if (IsA(jtnode, RangeTblRef))
        {
            int            varno = ((RangeTblRef *) jtnode)->rtindex;
    
            (void) build_simple_rel(root, varno, RELOPT_BASEREL);
        }
        else if (IsA(jtnode, FromExpr))
        {
            FromExpr   *f = (FromExpr *) jtnode;
            ListCell   *l;
    
            foreach(l, f->fromlist)
                add_base_rels_to_query(root, lfirst(l));
        }
        else if (IsA(jtnode, JoinExpr))
        {
            JoinExpr   *j = (JoinExpr *) jtnode;
    
            add_base_rels_to_query(root, j->larg);
            add_base_rels_to_query(root, j->rarg);
        }
        else
            elog(ERROR, "unrecognized node type: %d",
                 (int) nodeTag(jtnode));
    }

    如果表所对应的文件出现问题,会在 build_simple_rel处报错。

  • 相关阅读:
    欧几里得 与 扩展欧几里得
    hdu-1559 最大子矩阵
    hdu-1081 To The Max (最大子矩阵和)
    Oracle处理排序问题
    报表犯的错误
    MySQL中汉字一二三排序问题
    MySQL复习
    帆软查看显示和填报显示
    MySQL某年查询12个月份的数据
    mysql中去日期格式
  • 原文地址:https://www.cnblogs.com/gaojian/p/3094890.html
Copyright © 2011-2022 走看看