diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2006-01-25 20:29:24 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2006-01-25 20:29:24 +0000 |
commit | 3a0a16cb7e2aba8d9864d117d1199181432b42b8 (patch) | |
tree | 84965bad887c54100ebb9615257be6df2b18cee4 /src/backend/utils/adt/selfuncs.c | |
parent | 06d45e485dcb65e948b747ccc3e995fadd183887 (diff) | |
download | postgresql-3a0a16cb7e2aba8d9864d117d1199181432b42b8.tar.gz postgresql-3a0a16cb7e2aba8d9864d117d1199181432b42b8.zip |
Allow row comparisons to be used as indexscan qualifications.
This completes the project to upgrade our handling of row comparisons.
Diffstat (limited to 'src/backend/utils/adt/selfuncs.c')
-rw-r--r-- | src/backend/utils/adt/selfuncs.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c index 336c1deaeaa..cb9acf2d8a3 100644 --- a/src/backend/utils/adt/selfuncs.c +++ b/src/backend/utils/adt/selfuncs.c @@ -15,7 +15,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/selfuncs.c,v 1.196 2006/01/14 00:14:11 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/selfuncs.c,v 1.197 2006/01/25 20:29:24 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -4657,6 +4657,9 @@ btcostestimate(PG_FUNCTION_ARGS) * to find out which ones count as boundary quals. We rely on the * knowledge that they are given in index column order. * + * For a RowCompareExpr, we consider only the first column, just as + * rowcomparesel() does. + * * If there's a ScalarArrayOpExpr in the quals, we'll actually perform * N index scans not one, but the ScalarArrayOpExpr's operator can be * considered to act the same as it normally does. @@ -4682,6 +4685,14 @@ btcostestimate(PG_FUNCTION_ARGS) rightop = get_rightop(clause); clause_op = ((OpExpr *) clause)->opno; } + else if (IsA(clause, RowCompareExpr)) + { + RowCompareExpr *rc = (RowCompareExpr *) clause; + + leftop = (Node *) linitial(rc->largs); + rightop = (Node *) linitial(rc->rargs); + clause_op = linitial_oid(rc->opnos); + } else if (IsA(clause, ScalarArrayOpExpr)) { ScalarArrayOpExpr *saop = (ScalarArrayOpExpr *) clause; |