PostgreSQL代码分析,查询优化部分,canonicalize_qual(二)

2014-11-24 12:15:19 · 作者: · 浏览: 2
面的2个进行AND操作 List *args; = 2个,分别是“A=1”和 “((B=1 AND C=1) OR (B=1 AND D=1))” } BoolExpr; * * 对于其中的“((B=1 AND C=1) OR (B=1 AND D=1))”,在递归调用中, * 会进入“分支一:or_clause”,进而转换为: * B=1 AND (C=1 OR D=1) * * 张大明白的blog:http://blog.csdn.net/shujiezhang */ foreach(temp, ((BoolExpr *) qual)->args) andlist = lappend(andlist, find_duplicate_ors(lfirst(temp))); /* Flatten any ANDs introduced just below here */ /* * 拉平。 * * 因为主语句是AND类型,子语句也是AND类型,所以可以直接把子语句拉到父节点。 * */ andlist = pull_ands(andlist); /* The AND list can't get shorter, so result is always an AND */ return make_andclause(andlist); } else return qual; }

PostgreSQL代码分析,查询优化部分。

张大明白的blog:http://blog.csdn.net/shujiezhang

相关博文:PostgreSQL代码分析,查询优化部分,process_duplicate_ors