aboutsummaryrefslogtreecommitdiff
path: root/src/include
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2000-01-22 23:50:30 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2000-01-22 23:50:30 +0000
commit71ed7eb4941ddb32700a51a8b8b3403eceeca4a9 (patch)
treee2452e2e308d6066c2c7e255eab5332cfcb4baa8 /src/include
parent78845177bb8839a2a582b92de2b46ce7d3f16df4 (diff)
downloadpostgresql-71ed7eb4941ddb32700a51a8b8b3403eceeca4a9.tar.gz
postgresql-71ed7eb4941ddb32700a51a8b8b3403eceeca4a9.zip
Revise handling of index-type-specific indexscan cost estimation, per
pghackers discussion of 5-Jan-2000. The amopselect and amopnpages estimators are gone, and in their place is a per-AM amcostestimate procedure (linked to from pg_am, not pg_amop).
Diffstat (limited to 'src/include')
-rw-r--r--src/include/access/genam.h3
-rw-r--r--src/include/catalog/catversion.h4
-rw-r--r--src/include/catalog/pg_am.h14
-rw-r--r--src/include/catalog/pg_amop.h341
-rw-r--r--src/include/catalog/pg_proc.h26
-rw-r--r--src/include/nodes/relation.h5
-rw-r--r--src/include/optimizer/cost.h30
-rw-r--r--src/include/optimizer/internal.h13
-rw-r--r--src/include/optimizer/paths.h9
-rw-r--r--src/include/optimizer/plancat.h6
-rw-r--r--src/include/utils/builtins.h30
11 files changed, 242 insertions, 239 deletions
diff --git a/src/include/access/genam.h b/src/include/access/genam.h
index 76200f215e2..81b38da6cc1 100644
--- a/src/include/access/genam.h
+++ b/src/include/access/genam.h
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: genam.h,v 1.21 1999/12/30 05:05:13 tgl Exp $
+ * $Id: genam.h,v 1.22 2000/01/22 23:50:22 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -38,6 +38,7 @@ extern void index_markpos(IndexScanDesc scan);
extern void index_restrpos(IndexScanDesc scan);
extern RetrieveIndexResult index_getnext(IndexScanDesc scan,
ScanDirection direction);
+extern RegProcedure index_cost_estimator(Relation relation);
extern RegProcedure index_getprocid(Relation irel, AttrNumber attnum,
uint16 procnum);
extern Datum GetIndexValue(HeapTuple tuple, TupleDesc hTupDesc,
diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h
index eca72916b88..d706d1f20a0 100644
--- a/src/include/catalog/catversion.h
+++ b/src/include/catalog/catversion.h
@@ -36,7 +36,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: catversion.h,v 1.8 2000/01/18 05:08:29 ishii Exp $
+ * $Id: catversion.h,v 1.9 2000/01/22 23:50:23 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -52,6 +52,6 @@
*/
/* yyyymmddN */
-#define CATALOG_VERSION_NO 200001171
+#define CATALOG_VERSION_NO 200001221
#endif
diff --git a/src/include/catalog/pg_am.h b/src/include/catalog/pg_am.h
index 4ec5062ffa4..2be6a7259bd 100644
--- a/src/include/catalog/pg_am.h
+++ b/src/include/catalog/pg_am.h
@@ -7,7 +7,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: pg_am.h,v 1.11 1999/02/13 23:21:04 momjian Exp $
+ * $Id: pg_am.h,v 1.12 2000/01/22 23:50:23 tgl Exp $
*
* NOTES
* the genbki.sh script reads this file and generates .bki
@@ -57,6 +57,7 @@ CATALOG(pg_am)
regproc ambuild;
regproc amcreate;
regproc amdestroy;
+ regproc amcostestimate;
} FormData_pg_am;
/* ----------------
@@ -70,7 +71,7 @@ typedef FormData_pg_am *Form_pg_am;
* compiler constants for pg_am
* ----------------
*/
-#define Natts_pg_am 22
+#define Natts_pg_am 23
#define Anum_pg_am_amname 1
#define Anum_pg_am_amowner 2
#define Anum_pg_am_amkind 3
@@ -93,21 +94,22 @@ typedef FormData_pg_am *Form_pg_am;
#define Anum_pg_am_ambuild 20
#define Anum_pg_am_amcreate 21
#define Anum_pg_am_amdestroy 22
+#define Anum_pg_am_amcostestimate 23
/* ----------------
* initial contents of pg_am
* ----------------
*/
-DATA(insert OID = 402 ( rtree PGUID "o" 8 3 rtgettuple rtinsert rtdelete - - - - rtbeginscan rtrescan rtendscan rtmarkpos rtrestrpos - - rtbuild - - ));
+DATA(insert OID = 402 ( rtree PGUID "o" 8 3 rtgettuple rtinsert rtdelete - - - - rtbeginscan rtrescan rtendscan rtmarkpos rtrestrpos - - rtbuild - - rtcostestimate ));
DESCR("");
-DATA(insert OID = 403 ( btree PGUID "o" 5 1 btgettuple btinsert btdelete - - - - btbeginscan btrescan btendscan btmarkpos btrestrpos - - btbuild - - ));
+DATA(insert OID = 403 ( btree PGUID "o" 5 1 btgettuple btinsert btdelete - - - - btbeginscan btrescan btendscan btmarkpos btrestrpos - - btbuild - - btcostestimate ));
DESCR("");
#define BTREE_AM_OID 403
-DATA(insert OID = 405 ( hash PGUID "o" 1 1 hashgettuple hashinsert hashdelete - - - - hashbeginscan hashrescan hashendscan hashmarkpos hashrestrpos - - hashbuild - - ));
+DATA(insert OID = 405 ( hash PGUID "o" 1 1 hashgettuple hashinsert hashdelete - - - - hashbeginscan hashrescan hashendscan hashmarkpos hashrestrpos - - hashbuild - - hashcostestimate ));
DESCR("");
#define HASH_AM_OID 405
-DATA(insert OID = 783 ( gist PGUID "o" 100 7 gistgettuple gistinsert gistdelete - - - - gistbeginscan gistrescan gistendscan gistmarkpos gistrestrpos - - gistbuild - - ));
+DATA(insert OID = 783 ( gist PGUID "o" 100 7 gistgettuple gistinsert gistdelete - - - - gistbeginscan gistrescan gistendscan gistmarkpos gistrestrpos - - gistbuild - - gistcostestimate ));
DESCR("");
#endif /* PG_AM_H */
diff --git a/src/include/catalog/pg_amop.h b/src/include/catalog/pg_amop.h
index 93ed1d46936..c6c71f526f2 100644
--- a/src/include/catalog/pg_amop.h
+++ b/src/include/catalog/pg_amop.h
@@ -7,7 +7,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: pg_amop.h,v 1.27 2000/01/10 16:13:20 momjian Exp $
+ * $Id: pg_amop.h,v 1.28 2000/01/22 23:50:23 tgl Exp $
*
* NOTES
* the genbki.sh script reads this file and generates .bki
@@ -36,8 +36,6 @@ CATALOG(pg_amop)
Oid amopclaid;
Oid amopopr;
int2 amopstrategy;
- regproc amopselect;
- regproc amopnpages;
} FormData_pg_amop;
/* ----------------
@@ -51,14 +49,11 @@ typedef FormData_pg_amop *Form_pg_amop;
* compiler constants for pg_amop
* ----------------
*/
-/* #define Name_pg_amop "pg_amop" */
-#define Natts_pg_amop 6
+#define Natts_pg_amop 4
#define Anum_pg_amop_amopid 1
#define Anum_pg_amop_amopclaid 2
#define Anum_pg_amop_amopopr 3
#define Anum_pg_amop_amopstrategy 4
-#define Anum_pg_amop_amopselect 5
-#define Anum_pg_amop_amopnpages 6
/* ----------------
* initial contents of pg_amop
@@ -69,326 +64,326 @@ typedef FormData_pg_amop *Form_pg_amop;
* rtree box_ops
*/
-DATA(insert OID = 0 ( 402 422 493 1 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 422 494 2 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 422 500 3 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 422 495 4 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 422 496 5 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 422 499 6 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 422 498 7 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 422 497 8 rtsel rtnpage ));
+DATA(insert OID = 0 ( 402 422 493 1 ));
+DATA(insert OID = 0 ( 402 422 494 2 ));
+DATA(insert OID = 0 ( 402 422 500 3 ));
+DATA(insert OID = 0 ( 402 422 495 4 ));
+DATA(insert OID = 0 ( 402 422 496 5 ));
+DATA(insert OID = 0 ( 402 422 499 6 ));
+DATA(insert OID = 0 ( 402 422 498 7 ));
+DATA(insert OID = 0 ( 402 422 497 8 ));
/*
* rtree bigbox_ops
*/
-DATA(insert OID = 0 ( 402 433 493 1 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 433 494 2 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 433 500 3 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 433 495 4 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 433 496 5 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 433 499 6 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 433 498 7 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 433 497 8 rtsel rtnpage ));
+DATA(insert OID = 0 ( 402 433 493 1 ));
+DATA(insert OID = 0 ( 402 433 494 2 ));
+DATA(insert OID = 0 ( 402 433 500 3 ));
+DATA(insert OID = 0 ( 402 433 495 4 ));
+DATA(insert OID = 0 ( 402 433 496 5 ));
+DATA(insert OID = 0 ( 402 433 499 6 ));
+DATA(insert OID = 0 ( 402 433 498 7 ));
+DATA(insert OID = 0 ( 402 433 497 8 ));
/*
* rtree poly_ops (supports polygons)
*/
-DATA(insert OID = 0 ( 402 434 485 1 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 434 486 2 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 434 492 3 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 434 487 4 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 434 488 5 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 434 491 6 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 434 490 7 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 434 489 8 rtsel rtnpage ));
+DATA(insert OID = 0 ( 402 434 485 1 ));
+DATA(insert OID = 0 ( 402 434 486 2 ));
+DATA(insert OID = 0 ( 402 434 492 3 ));
+DATA(insert OID = 0 ( 402 434 487 4 ));
+DATA(insert OID = 0 ( 402 434 488 5 ));
+DATA(insert OID = 0 ( 402 434 491 6 ));
+DATA(insert OID = 0 ( 402 434 490 7 ));
+DATA(insert OID = 0 ( 402 434 489 8 ));
/*
* rtree circle_ops (supports circles)
*/
-DATA(insert OID = 0 ( 402 714 1506 1 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 714 1507 2 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 714 1513 3 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 714 1508 4 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 714 1509 5 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 714 1512 6 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 714 1511 7 rtsel rtnpage ));
-DATA(insert OID = 0 ( 402 714 1510 8 rtsel rtnpage ));
+DATA(insert OID = 0 ( 402 714 1506 1 ));
+DATA(insert OID = 0 ( 402 714 1507 2 ));
+DATA(insert OID = 0 ( 402 714 1513 3 ));
+DATA(insert OID = 0 ( 402 714 1508 4 ));
+DATA(insert OID = 0 ( 402 714 1509 5 ));
+DATA(insert OID = 0 ( 402 714 1512 6 ));
+DATA(insert OID = 0 ( 402 714 1511 7 ));
+DATA(insert OID = 0 ( 402 714 1510 8 ));
/*
* nbtree int2_ops
*/
-DATA(insert OID = 0 ( 403 421 95 1 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 421 522 2 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 421 94 3 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 421 524 4 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 421 520 5 btreesel btreenpage ));
+DATA(insert OID = 0 ( 403 421 95 1 ));
+DATA(insert OID = 0 ( 403 421 522 2 ));
+DATA(insert OID = 0 ( 403 421 94 3 ));
+DATA(insert OID = 0 ( 403 421 524 4 ));
+DATA(insert OID = 0 ( 403 421 520 5 ));
/*
* nbtree float8_ops
*/
-DATA(insert OID = 0 ( 403 423 672 1 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 423 673 2 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 423 670 3 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 423 675 4 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 423 674 5 btreesel btreenpage ));
+DATA(insert OID = 0 ( 403 423 672 1 ));
+DATA(insert OID = 0 ( 403 423 673 2 ));
+DATA(insert OID = 0 ( 403 423 670 3 ));
+DATA(insert OID = 0 ( 403 423 675 4 ));
+DATA(insert OID = 0 ( 403 423 674 5 ));
/*
* nbtree int24_ops
*/
-DATA(insert OID = 0 ( 403 424 534 1 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 424 540 2 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 424 532 3 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 424 542 4 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 424 536 5 btreesel btreenpage ));
+DATA(insert OID = 0 ( 403 424 534 1 ));
+DATA(insert OID = 0 ( 403 424 540 2 ));
+DATA(insert OID = 0 ( 403 424 532 3 ));
+DATA(insert OID = 0 ( 403 424 542 4 ));
+DATA(insert OID = 0 ( 403 424 536 5 ));
/*
* nbtree int42_ops
*/
-DATA(insert OID = 0 ( 403 425 535 1 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 425 541 2 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 425 533 3 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 425 543 4 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 425 537 5 btreesel btreenpage ));
+DATA(insert OID = 0 ( 403 425 535 1 ));
+DATA(insert OID = 0 ( 403 425 541 2 ));
+DATA(insert OID = 0 ( 403 425 533 3 ));
+DATA(insert OID = 0 ( 403 425 543 4 ));
+DATA(insert OID = 0 ( 403 425 537 5 ));
/*
* nbtree int4_ops
*/
-DATA(insert OID = 0 ( 403 426 97 1 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 426 523 2 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 426 96 3 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 426 525 4 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 426 521 5 btreesel btreenpage ));
+DATA(insert OID = 0 ( 403 426 97 1 ));
+DATA(insert OID = 0 ( 403 426 523 2 ));
+DATA(insert OID = 0 ( 403 426 96 3 ));
+DATA(insert OID = 0 ( 403 426 525 4 ));
+DATA(insert OID = 0 ( 403 426 521 5 ));
/*
* nbtree int8_ops
*/
-DATA(insert OID = 0 ( 403 754 412 1 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 754 414 2 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 754 410 3 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 754 415 4 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 754 413 5 btreesel btreenpage ));
+DATA(insert OID = 0 ( 403 754 412 1 ));
+DATA(insert OID = 0 ( 403 754 414 2 ));
+DATA(insert OID = 0 ( 403 754 410 3 ));
+DATA(insert OID = 0 ( 403 754 415 4 ));
+DATA(insert OID = 0 ( 403 754 413 5 ));
/*
* nbtree oid_ops
*/
-DATA(insert OID = 0 ( 403 427 609 1 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 427 611 2 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 427 607 3 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 427 612 4 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 427 610 5 btreesel btreenpage ));
+DATA(insert OID = 0 ( 403 427 609 1 ));
+DATA(insert OID = 0 ( 403 427 611 2 ));
+DATA(insert OID = 0 ( 403 427 607 3 ));
+DATA(insert OID = 0 ( 403 427 612 4 ));
+DATA(insert OID = 0 ( 403 427 610 5 ));
/*
* nbtree oidvector_ops
*/
-DATA(insert OID = 0 ( 403 435 645 1 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 435 647 2 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 435 649 3 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 435 648 4 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 435 646 5 btreesel btreenpage ));
+DATA(insert OID = 0 ( 403 435 645 1 ));
+DATA(insert OID = 0 ( 403 435 647 2 ));
+DATA(insert OID = 0 ( 403 435 649 3 ));
+DATA(insert OID = 0 ( 403 435 648 4 ));
+DATA(insert OID = 0 ( 403 435 646 5 ));
/*
* nbtree float4_ops
*/
-DATA(insert OID = 0 ( 403 428 622 1 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 428 624 2 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 428 620 3 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 428 625 4 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 428 623 5 btreesel btreenpage ));
+DATA(insert OID = 0 ( 403 428 622 1 ));
+DATA(insert OID = 0 ( 403 428 624 2 ));
+DATA(insert OID = 0 ( 403 428 620 3 ));
+DATA(insert OID = 0 ( 403 428 625 4 ));
+DATA(insert OID = 0 ( 403 428 623 5 ));
/*
* nbtree char_ops
*/
-DATA(insert OID = 0 ( 403 429 631 1 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 429 632 2 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 429 92 3 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 429 634 4 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 429 633 5 btreesel btreenpage ));
+DATA(insert OID = 0 ( 403 429 631 1 ));
+DATA(insert OID = 0 ( 403 429 632 2 ));
+DATA(insert OID = 0 ( 403 429 92 3 ));
+DATA(insert OID = 0 ( 403 429 634 4 ));
+DATA(insert OID = 0 ( 403 429 633 5 ));
/*
* nbtree name_ops
*/
-DATA(insert OID = 0 ( 403 1181 660 1 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1181 661 2 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1181 93 3 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1181 663 4 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1181 662 5 btreesel btreenpage ));
+DATA(insert OID = 0 ( 403 1181 660 1 ));
+DATA(insert OID = 0 ( 403 1181 661 2 ));
+DATA(insert OID = 0 ( 403 1181 93 3 ));
+DATA(insert OID = 0 ( 403 1181 663 4 ));
+DATA(insert OID = 0 ( 403 1181 662 5 ));
/*
* nbtree text_ops
*/
-DATA(insert OID = 0 ( 403 431 664 1 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 431 665 2 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 431 98 3 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 431 667 4 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 431 666 5 btreesel btreenpage ));
+DATA(insert OID = 0 ( 403 431 664 1 ));
+DATA(insert OID = 0 ( 403 431 665 2 ));
+DATA(insert OID = 0 ( 403 431 98 3 ));
+DATA(insert OID = 0 ( 403 431 667 4 ));
+DATA(insert OID = 0 ( 403 431 666 5 ));
/*
* nbtree abstime_ops
*/
-DATA(insert OID = 0 ( 403 432 562 1 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 432 564 2 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 432 560 3 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 432 565 4 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 432 563 5 btreesel btreenpage ));
+DATA(insert OID = 0 ( 403 432 562 1 ));
+DATA(insert OID = 0 ( 403 432 564 2 ));
+DATA(insert OID = 0 ( 403 432 560 3 ));
+DATA(insert OID = 0 ( 403 432 565 4 ));
+DATA(insert OID = 0 ( 403 432 563 5 ));
/*
* nbtree bpchar_ops
*/
-DATA(insert OID = 0 ( 403 1076 1058 1 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1076 1059 2 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1076 1054 3 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1076 1061 4 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1076 1060 5 btreesel btreenpage ));
+DATA(insert OID = 0 ( 403 1076 1058 1 ));
+DATA(insert OID = 0 ( 403 1076 1059 2 ));
+DATA(insert OID = 0 ( 403 1076 1054 3 ));
+DATA(insert OID = 0 ( 403 1076 1061 4 ));
+DATA(insert OID = 0 ( 403 1076 1060 5 ));
/*
* nbtree varchar_ops
*/
-DATA(insert OID = 0 ( 403 1077 1066 1 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1077 1067 2 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1077 1062 3 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1077 1069 4 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1077 1068 5 btreesel btreenpage ));
+DATA(insert OID = 0 ( 403 1077 1066 1 ));
+DATA(insert OID = 0 ( 403 1077 1067 2 ));
+DATA(insert OID = 0 ( 403 1077 1062 3 ));
+DATA(insert OID = 0 ( 403 1077 1069 4 ));
+DATA(insert OID = 0 ( 403 1077 1068 5 ));
/*
* nbtree date_ops
*/
-DATA(insert OID = 0 ( 403 1114 1095 1 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1114 1096 2 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1114 1093 3 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1114 1098 4 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1114 1097 5 btreesel btreenpage ));
+DATA(insert OID = 0 ( 403 1114 1095 1 ));
+DATA(insert OID = 0 ( 403 1114 1096 2 ));
+DATA(insert OID = 0 ( 403 1114 1093 3 ));
+DATA(insert OID = 0 ( 403 1114 1098 4 ));
+DATA(insert OID = 0 ( 403 1114 1097 5 ));
/*
* nbtree time_ops
*/
-DATA(insert OID = 0 ( 403 1115 1110 1 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1115 1111 2 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1115 1108 3 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1115 1113 4 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1115 1112 5 btreesel btreenpage ));
+DATA(insert OID = 0 ( 403 1115 1110 1 ));
+DATA(insert OID = 0 ( 403 1115 1111 2 ));
+DATA(insert OID = 0 ( 403 1115 1108 3 ));
+DATA(insert OID = 0 ( 403 1115 1113 4 ));
+DATA(insert OID = 0 ( 403 1115 1112 5 ));
/*
* nbtree datetime_ops
*/
-DATA(insert OID = 0 ( 403 1312 1322 1 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1312 1323 2 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1312 1320 3 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1312 1325 4 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1312 1324 5 btreesel btreenpage ));
+DATA(insert OID = 0 ( 403 1312 1322 1 ));
+DATA(insert OID = 0 ( 403 1312 1323 2 ));
+DATA(insert OID = 0 ( 403 1312 1320 3 ));
+DATA(insert OID = 0 ( 403 1312 1325 4 ));
+DATA(insert OID = 0 ( 403 1312 1324 5 ));
/*
* nbtree timespan_ops
*/
-DATA(insert OID = 0 ( 403 1313 1332 1 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1313 1333 2 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1313 1330 3 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1313 1335 4 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1313 1334 5 btreesel btreenpage ));
+DATA(insert OID = 0 ( 403 1313 1332 1 ));
+DATA(insert OID = 0 ( 403 1313 1333 2 ));
+DATA(insert OID = 0 ( 403 1313 1330 3 ));
+DATA(insert OID = 0 ( 403 1313 1335 4 ));
+DATA(insert OID = 0 ( 403 1313 1334 5 ));
/*
* nbtree macaddr
*/
-DATA(insert OID = 0 ( 403 810 1222 1 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 810 1223 2 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 810 1220 3 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 810 1225 4 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 810 1224 5 btreesel btreenpage ));
+DATA(insert OID = 0 ( 403 810 1222 1 ));
+DATA(insert OID = 0 ( 403 810 1223 2 ));
+DATA(insert OID = 0 ( 403 810 1220 3 ));
+DATA(insert OID = 0 ( 403 810 1225 4 ));
+DATA(insert OID = 0 ( 403 810 1224 5 ));
/*
* nbtree inet
*/
-DATA(insert OID = 0 ( 403 935 1203 1 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 935 1204 2 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 935 1201 3 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 935 1206 4 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 935 1205 5 btreesel btreenpage ));
+DATA(insert OID = 0 ( 403 935 1203 1 ));
+DATA(insert OID = 0 ( 403 935 1204 2 ));
+DATA(insert OID = 0 ( 403 935 1201 3 ));
+DATA(insert OID = 0 ( 403 935 1206 4 ));
+DATA(insert OID = 0 ( 403 935 1205 5 ));
/*
* nbtree cidr
*/
-DATA(insert OID = 0 ( 403 652 822 1 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 652 823 2 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 652 820 3 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 652 825 4 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 652 824 5 btreesel btreenpage ));
+DATA(insert OID = 0 ( 403 652 822 1 ));
+DATA(insert OID = 0 ( 403 652 823 2 ));
+DATA(insert OID = 0 ( 403 652 820 3 ));
+DATA(insert OID = 0 ( 403 652 825 4 ));
+DATA(insert OID = 0 ( 403 652 824 5 ));
/*
* nbtree numeric
*/
-DATA(insert OID = 0 ( 403 1768 1754 1 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1768 1755 2 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1768 1752 3 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1768 1757 4 btreesel btreenpage ));
-DATA(insert OID = 0 ( 403 1768 1756 5 btreesel btreenpage ));
+DATA(insert OID = 0 ( 403 1768 1754 1 ));
+DATA(insert OID = 0 ( 403 1768 1755 2 ));
+DATA(insert OID = 0 ( 403 1768 1752 3 ));
+DATA(insert OID = 0 ( 403 1768 1757 4 ));
+DATA(insert OID = 0 ( 403 1768 1756 5 ));
/*
* hash table _ops
*/
/* int2_ops */
-DATA(insert OID = 0 ( 405 421 94 1 hashsel hashnpage ));
+DATA(insert OID = 0 ( 405 421 94 1 ));
/* float8_ops */
-DATA(insert OID = 0 ( 405 423 670 1 hashsel hashnpage ));
+DATA(insert OID = 0 ( 405 423 670 1 ));
/* int4_ops */
-DATA(insert OID = 0 ( 405 426 96 1 hashsel hashnpage ));
+DATA(insert OID = 0 ( 405 426 96 1 ));
/* int8_ops */
-DATA(insert OID = 0 ( 405 754 410 1 hashsel hashnpage ));
+DATA(insert OID = 0 ( 405 754 410 1 ));
/* oid_ops */
-DATA(insert OID = 0 ( 405 427 607 1 hashsel hashnpage ));
+DATA(insert OID = 0 ( 405 427 607 1 ));
/* oidvector_ops */
-DATA(insert OID = 0 ( 405 435 649 1 hashsel hashnpage ));
+DATA(insert OID = 0 ( 405 435 649 1 ));
/* float4_ops */
-DATA(insert OID = 0 ( 405 428 620 1 hashsel hashnpage ));
+DATA(insert OID = 0 ( 405 428 620 1 ));
/* char_ops */
-DATA(insert OID = 0 ( 405 429 92 1 hashsel hashnpage ));
+DATA(insert OID = 0 ( 405 429 92 1 ));
/* name_ops */
-DATA(insert OID = 0 ( 405 1181 93 1 hashsel hashnpage ));
+DATA(insert OID = 0 ( 405 1181 93 1 ));
/* text_ops */
-DATA(insert OID = 0 ( 405 431 98 1 hashsel hashnpage ));
+DATA(insert OID = 0 ( 405 431 98 1 ));
/* bpchar_ops */
-DATA(insert OID = 0 ( 405 1076 1054 1 hashsel hashnpage ));
+DATA(insert OID = 0 ( 405 1076 1054 1 ));
/* varchar_ops */
-DATA(insert OID = 0 ( 405 1077 1062 1 hashsel hashnpage ));
+DATA(insert OID = 0 ( 405 1077 1062 1 ));
/* date_ops */
-DATA(insert OID = 0 ( 405 1114 1093 1 hashsel hashnpage ));
+DATA(insert OID = 0 ( 405 1114 1093 1 ));
/* time_ops */
-DATA(insert OID = 0 ( 405 1115 1108 1 hashsel hashnpage ));
+DATA(insert OID = 0 ( 405 1115 1108 1 ));
/* datetime_ops */
-DATA(insert OID = 0 ( 405 1312 1320 1 hashsel hashnpage ));
+DATA(insert OID = 0 ( 405 1312 1320 1 ));
/* timespan_ops */
-DATA(insert OID = 0 ( 405 1313 1330 1 hashsel hashnpage ));
+DATA(insert OID = 0 ( 405 1313 1330 1 ));
/* macaddr_ops */
-DATA(insert OID = 0 ( 405 810 1220 1 hashsel hashnpage ));
+DATA(insert OID = 0 ( 405 810 1220 1 ));
/* inet_ops */
-DATA(insert OID = 0 ( 405 935 1201 1 hashsel hashnpage ));
+DATA(insert OID = 0 ( 405 935 1201 1 ));
/* cidr_ops */
-DATA(insert OID = 0 ( 405 652 820 1 hashsel hashnpage ));
+DATA(insert OID = 0 ( 405 652 820 1 ));
#endif /* PG_AMOP_H */
diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h
index 583d53e081f..0fffcf3657a 100644
--- a/src/include/catalog/pg_proc.h
+++ b/src/include/catalog/pg_proc.h
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: pg_proc.h,v 1.114 2000/01/18 05:08:29 ishii Exp $
+ * $Id: pg_proc.h,v 1.115 2000/01/22 23:50:23 tgl Exp $
*
* NOTES
* The script catalog/genbki.sh reads this file and generates .bki
@@ -211,17 +211,13 @@ DESCR("not equal");
DATA(insert OID = 89 ( version PGUID 11 f t f 0 f 25 "" 100 0 0 100 version - ));
DESCR("PostgreSQL version string");
-DATA(insert OID = 1265 ( rtsel PGUID 11 f t f 7 f 701 "26 26 21 0 23 23 26" 100 0 0 100 rtsel - ));
-DESCR("r-tree");
-DATA(insert OID = 1266 ( rtnpage PGUID 11 f t f 7 f 701 "26 26 21 0 23 23 26" 100 0 0 100 rtnpage - ));
-DESCR("r-tree");
-DATA(insert OID = 1268 ( btreesel PGUID 11 f t f 7 f 701 "26 26 21 0 23 23 26" 100 0 0 100 btreesel - ));
-DESCR("btree selectivity");
+DATA(insert OID = 1265 ( rtcostestimate PGUID 11 f t f 6 f 0 "0 0 0 0 0 0" 100 0 0 100 rtcostestimate - ));
+DESCR("r-tree cost estimator");
+DATA(insert OID = 1268 ( btcostestimate PGUID 11 f t f 6 f 0 "0 0 0 0 0 0" 100 0 0 100 btcostestimate - ));
+DESCR("btree cost estimator");
/* OIDS 100 - 199 */
-DATA(insert OID = 1270 ( btreenpage PGUID 11 f t f 7 f 701 "26 26 21 0 23 23 26" 100 0 0 100 btreenpage - ));
-DESCR("btree");
DATA(insert OID = 1272 ( eqsel PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100 eqsel - ));
DESCR("general selectivity");
DATA(insert OID = 102 ( neqsel PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100 neqsel - ));
@@ -799,10 +795,8 @@ DESCR("convert name to char()");
DATA(insert OID = 409 ( bpchar_name PGUID 11 f t t 1 f 19 "1042" 100 0 0 100 bpchar_name - ));
DESCR("convert char() to name");
-DATA(insert OID = 438 ( hashsel PGUID 11 f t f 7 f 701 "26 26 21 0 23 23 26" 100 0 0 100 hashsel - ));
-DESCR("selectivity");
-DATA(insert OID = 439 ( hashnpage PGUID 11 f t f 7 f 701 "26 26 21 0 23 23 26" 100 0 0 100 hashnpage - ));
-DESCR("hash");
+DATA(insert OID = 438 ( hashcostestimate PGUID 11 f t f 6 f 0 "0 0 0 0 0 0" 100 0 0 100 hashcostestimate - ));
+DESCR("hash index cost estimator");
DATA(insert OID = 440 ( hashgettuple PGUID 11 f t f 2 f 23 "0" 100 0 0 100 hashgettuple - ));
DESCR("hash(internal)");
@@ -1036,10 +1030,8 @@ DESCR("larger of two");
DATA(insert OID = 771 ( int2smaller PGUID 11 f t t 2 f 21 "21 21" 100 0 0 100 int2smaller - ));
DESCR("smaller of two");
-DATA(insert OID = 772 ( gistsel PGUID 11 f t f 7 f 701 "26 26 21 0 23 23 26" 100 0 0 100 gistsel - ));
-DESCR("gist selectivity");
-DATA(insert OID = 773 ( gistnpage PGUID 11 f t f 7 f 701 "26 26 21 0 23 23 26" 100 0 0 100 gistnpage - ));
-DESCR("gist");
+DATA(insert OID = 772 ( gistcostestimate PGUID 11 f t f 6 f 0 "0 0 0 0 0 0" 100 0 0 100 gistcostestimate - ));
+DESCR("gist cost estimator");
DATA(insert OID = 774 ( gistgettuple PGUID 11 f t f 2 f 23 "0" 100 0 0 100 gistgettuple - ));
DESCR("gist(internal)");
DATA(insert OID = 775 ( gistinsert PGUID 11 f t f 5 f 23 "0" 100 0 0 100 gistinsert - ));
diff --git a/src/include/nodes/relation.h b/src/include/nodes/relation.h
index 55850cef5e1..98fb5191110 100644
--- a/src/include/nodes/relation.h
+++ b/src/include/nodes/relation.h
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: relation.h,v 1.40 2000/01/09 00:26:44 tgl Exp $
+ * $Id: relation.h,v 1.41 2000/01/22 23:50:25 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -109,6 +109,7 @@ typedef struct RelOptInfo
* indexkeys - List of base-relation attribute numbers that are index keys
* ordering - List of PG_OPERATOR OIDs which order the indexscan result
* relam - the OID of the pg_am of the index
+ * amcostestimate - OID of the relam's cost estimator
* indproc - OID of the function if a functional index, else 0
* indpred - index predicate if a partial index, else NULL
*
@@ -132,6 +133,8 @@ typedef struct IndexOptInfo
Oid *ordering; /* OIDs of sort operators for each key */
Oid relam; /* OID of the access method (in pg_am) */
+ RegProcedure amcostestimate; /* OID of the access method's cost fcn */
+
Oid indproc; /* if a functional index */
List *indpred; /* if a partial index */
} IndexOptInfo;
diff --git a/src/include/optimizer/cost.h b/src/include/optimizer/cost.h
index c654b6953e7..9c16fc8fea6 100644
--- a/src/include/optimizer/cost.h
+++ b/src/include/optimizer/cost.h
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: cost.h,v 1.25 2000/01/09 00:26:46 tgl Exp $
+ * $Id: cost.h,v 1.26 2000/01/22 23:50:26 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -20,23 +20,31 @@
#define PERBYTE_CPU 0
#define PERCALL_CPU 0
#define OUTIN_RATIO 100
+/* defaults for costsize.c's Cost parameters */
+/* NB: cost-estimation code should use the variables, not the constants! */
+#define CPU_PAGE_WEIGHT 0.033
+#define CPU_INDEX_PAGE_WEIGHT 0.017
+
/*
* prototypes for costsize.c
* routines to compute costs and sizes
*/
-extern bool _enable_seqscan_;
-extern bool _enable_indexscan_;
-extern bool _enable_sort_;
-extern bool _enable_nestloop_;
-extern bool _enable_mergejoin_;
-extern bool _enable_hashjoin_;
-extern bool _enable_tidscan_;
+
+extern Cost cpu_page_weight;
+extern Cost cpu_index_page_weight;
+extern Cost disable_cost;
+extern bool enable_seqscan;
+extern bool enable_indexscan;
+extern bool enable_tidscan;
+extern bool enable_sort;
+extern bool enable_nestloop;
+extern bool enable_mergejoin;
+extern bool enable_hashjoin;
extern Cost cost_seqscan(RelOptInfo *baserel);
-extern Cost cost_index(RelOptInfo *baserel, IndexOptInfo *index,
- long expected_indexpages, Selectivity selec,
- bool is_injoin);
+extern Cost cost_index(Query *root, RelOptInfo *baserel, IndexOptInfo *index,
+ List *indexQuals, bool is_injoin);
extern Cost cost_tidscan(RelOptInfo *baserel, List *tideval);
extern Cost cost_sort(List *pathkeys, double tuples, int width);
extern Cost cost_nestloop(Path *outer_path, Path *inner_path,
diff --git a/src/include/optimizer/internal.h b/src/include/optimizer/internal.h
index 14051ca81ae..e89b244a397 100644
--- a/src/include/optimizer/internal.h
+++ b/src/include/optimizer/internal.h
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: internal.h,v 1.24 2000/01/11 03:59:31 tgl Exp $
+ * $Id: internal.h,v 1.25 2000/01/22 23:50:27 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -26,14 +26,6 @@
/*
- * System-dependent tuning constants
- *
- */
-#define _CPU_PAGE_WEIGHT_ 0.033 /* CPU-heap-to-page cost weighting factor */
-#define _CPU_INDEX_PAGE_WEIGHT_ 0.017 /* CPU-index-to-page cost
- * weighting factor */
-
-/*
* Size estimates
*
*/
@@ -60,7 +52,4 @@
/* used to be -1 */
#define _NONAME_RELATION_ID_ InvalidOid
-/* GEQO switch according to number of relations in a query */
-#define GEQO_RELS 11
-
#endif /* INTERNAL_H */
diff --git a/src/include/optimizer/paths.h b/src/include/optimizer/paths.h
index a3f6bad36be..1556941c4b9 100644
--- a/src/include/optimizer/paths.h
+++ b/src/include/optimizer/paths.h
@@ -7,7 +7,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: paths.h,v 1.37 2000/01/09 00:26:47 tgl Exp $
+ * $Id: paths.h,v 1.38 2000/01/22 23:50:27 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -16,9 +16,16 @@
#include "nodes/relation.h"
+/* default GEQO threshold (default value for geqo_rels) */
+#define GEQO_RELS 11
+
+
/*
* allpaths.c
*/
+extern bool enable_geqo;
+extern int geqo_rels;
+
extern RelOptInfo *make_one_rel(Query *root, List *rels);
/*
diff --git a/src/include/optimizer/plancat.h b/src/include/optimizer/plancat.h
index 307b51c3f42..024cfd6999e 100644
--- a/src/include/optimizer/plancat.h
+++ b/src/include/optimizer/plancat.h
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: plancat.h,v 1.15 2000/01/09 00:26:47 tgl Exp $
+ * $Id: plancat.h,v 1.16 2000/01/22 23:50:27 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -30,10 +30,6 @@ extern Selectivity restriction_selectivity(Oid functionObjectId,
Datum constValue,
int constFlag);
-extern void index_selectivity(Query *root, RelOptInfo *rel,
- IndexOptInfo *index, List *indexquals,
- long *idxPages, Selectivity *idxSelec);
-
extern Selectivity join_selectivity(Oid functionObjectId, Oid operatorObjectId,
Oid relationObjectId1, AttrNumber attributeNumber1,
Oid relationObjectId2, AttrNumber attributeNumber2);
diff --git a/src/include/utils/builtins.h b/src/include/utils/builtins.h
index 1be8ee54952..ae6e3daf62d 100644
--- a/src/include/utils/builtins.h
+++ b/src/include/utils/builtins.h
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: builtins.h,v 1.96 2000/01/22 14:20:55 petere Exp $
+ * $Id: builtins.h,v 1.97 2000/01/22 23:50:27 tgl Exp $
*
* NOTES
* This should normally only be included by fmgr.h.
@@ -22,6 +22,8 @@
#ifndef BUILTINS_H
#define BUILTINS_H
+#include "access/heapam.h" /* for HeapTuple */
+#include "nodes/relation.h" /* for amcostestimate parameters */
#include "storage/itemptr.h"
#include "utils/array.h"
#include "utils/datetime.h"
@@ -30,7 +32,6 @@
#include "utils/int8.h"
#include "utils/nabstime.h"
#include "utils/numeric.h"
-#include "access/heapam.h" /* for HeapTuple */
/*
* Defined in adt/
@@ -394,14 +395,23 @@ extern float64 eqjoinsel(Oid opid, Oid relid1, AttrNumber attno1, Oid relid2, At
extern float64 neqjoinsel(Oid opid, Oid relid1, AttrNumber attno1, Oid relid2, AttrNumber attno2);
extern float64 intltjoinsel(Oid opid, Oid relid1, AttrNumber attno1, Oid relid2, AttrNumber attno2);
extern float64 intgtjoinsel(Oid opid, Oid relid1, AttrNumber attno1, Oid relid2, AttrNumber attno2);
-extern float64 btreesel(Oid operatorOid, Oid indrelid, AttrNumber attributeNumber, char *constValue, int32 constFlag, int32 nIndexKeys, Oid indexrelid);
-extern float64 btreenpage(Oid operatorOid, Oid indrelid, AttrNumber attributeNumber, char *constValue, int32 constFlag, int32 nIndexKeys, Oid indexrelid);
-extern float64 hashsel(Oid operatorOid, Oid indrelid, AttrNumber attributeNumber, char *constValue, int32 constFlag, int32 nIndexKeys, Oid indexrelid);
-extern float64 hashnpage(Oid operatorOid, Oid indrelid, AttrNumber attributeNumber, char *constValue, int32 constFlag, int32 nIndexKeys, Oid indexrelid);
-extern float64 rtsel(Oid operatorOid, Oid indrelid, AttrNumber attributeNumber, char *constValue, int32 constFlag, int32 nIndexKeys, Oid indexrelid);
-extern float64 rtnpage(Oid operatorOid, Oid indrelid, AttrNumber attributeNumber, char *constValue, int32 constFlag, int32 nIndexKeys, Oid indexrelid);
-extern float64 gistsel(Oid operatorObjectId, Oid indrelid, AttrNumber attributeNumber, char *constValue, int32 constFlag, int32 nIndexKeys, Oid indexrelid);
-extern float64 gistnpage(Oid operatorObjectId, Oid indrelid, AttrNumber attributeNumber, char *constValue, int32 constFlag, int32 nIndexKeys, Oid indexrelid);
+
+extern void btcostestimate(Query *root, RelOptInfo *rel,
+ IndexOptInfo *index, List *indexQuals,
+ Cost *indexAccessCost,
+ Selectivity *indexSelectivity);
+extern void rtcostestimate(Query *root, RelOptInfo *rel,
+ IndexOptInfo *index, List *indexQuals,
+ Cost *indexAccessCost,
+ Selectivity *indexSelectivity);
+extern void hashcostestimate(Query *root, RelOptInfo *rel,
+ IndexOptInfo *index, List *indexQuals,
+ Cost *indexAccessCost,
+ Selectivity *indexSelectivity);
+extern void gistcostestimate(Query *root, RelOptInfo *rel,
+ IndexOptInfo *index, List *indexQuals,
+ Cost *indexAccessCost,
+ Selectivity *indexSelectivity);
/* tid.c */
extern ItemPointer tidin(const char *str);