On Wed, Sep 27, 2017 at 6:52 AM, Amit Langote <langote_amit...@lab.ntt.co.jp> wrote:
I was looking into the latest patch set, seems like we can reuse some more code between this path and runtime pruning[1] + foreach(lc1, matchedclauses[i]) + { + Expr *clause = lfirst(lc1); + Const *rightop = (Const *) get_rightop(clause); + Oid opno = ((OpExpr *) clause)->opno, + opfamily = rel->part_scheme->partopfamily[i]; + StrategyNumber strategy; + + strategy = get_op_opfamily_strategy(opno, opfamily); + switch (strategy) + { + case BTLessStrategyNumber: + case BTLessEqualStrategyNumber: + if (need_next_max) + { + maxkeys[i] = rightop->constvalue; + if (!maxkey_set[i]) + n_maxkeys++; + maxkey_set[i] = true; + max_incl = (strategy == BTLessEqualStrategyNumber); + } + if (strategy == BTLessStrategyNumber) + need_next_max = false; I think the above logic is common between this patch and the runtime pruning. I think we can make a reusable function. Here we are preparing minkey and maxkey of Datum because we can directly fetch rightop->constvalue whereas for runtime pruning we are making minkeys and maxkeys of Expr because during planning time we don't have the values for the Param. I think we can always make these minkey, maxkey array of Expr and later those can be processed in whatever way we want it. So this path will fetch the constval out of Expr and runtime pruning will Eval that expression at runtime. Does this make sense or it will cause one level of extra processing for this path i.e converting the Expr array to CONST array? [1] https://www.postgresql.org/message-id/CAOG9ApE16ac-_VVZVvv0gePSgkg_BwYEV1NBqZFqDR2bBE0X0A%40mail.gmail.com -- Regards, Dilip Kumar EnterpriseDB: http://www.enterprisedb.com -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers