diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2000-01-22 23:50:30 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2000-01-22 23:50:30 +0000 |
commit | 71ed7eb4941ddb32700a51a8b8b3403eceeca4a9 (patch) | |
tree | e2452e2e308d6066c2c7e255eab5332cfcb4baa8 /src/include | |
parent | 78845177bb8839a2a582b92de2b46ce7d3f16df4 (diff) | |
download | postgresql-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.h | 3 | ||||
-rw-r--r-- | src/include/catalog/catversion.h | 4 | ||||
-rw-r--r-- | src/include/catalog/pg_am.h | 14 | ||||
-rw-r--r-- | src/include/catalog/pg_amop.h | 341 | ||||
-rw-r--r-- | src/include/catalog/pg_proc.h | 26 | ||||
-rw-r--r-- | src/include/nodes/relation.h | 5 | ||||
-rw-r--r-- | src/include/optimizer/cost.h | 30 | ||||
-rw-r--r-- | src/include/optimizer/internal.h | 13 | ||||
-rw-r--r-- | src/include/optimizer/paths.h | 9 | ||||
-rw-r--r-- | src/include/optimizer/plancat.h | 6 | ||||
-rw-r--r-- | src/include/utils/builtins.h | 30 |
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); |