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