|
8 | 8 | *
|
9 | 9 | *
|
10 | 10 | * IDENTIFICATION
|
11 |
| - * $PostgreSQL: pgsql/src/backend/executor/nodeIndexscan.c,v 1.87 2003/11/29 19:51:48 pgsql Exp $ |
| 11 | + * $PostgreSQL: pgsql/src/backend/executor/nodeIndexscan.c,v 1.88 2003/12/30 20:05:05 tgl Exp $ |
12 | 12 | *
|
13 | 13 | *-------------------------------------------------------------------------
|
14 | 14 | */
|
@@ -953,22 +953,28 @@ static void
|
953 | 953 | create_duphash(IndexScanState*node)
|
954 | 954 | {
|
955 | 955 | HASHCTLhash_ctl;
|
| 956 | +longnbuckets; |
956 | 957 |
|
| 958 | +node->iss_MaxHash= (SortMem*1024L) / |
| 959 | +(MAXALIGN(sizeof(HASHELEMENT))+MAXALIGN(sizeof(DupHashTabEntry))); |
957 | 960 | MemSet(&hash_ctl,0,sizeof(hash_ctl));
|
958 | 961 | hash_ctl.keysize=SizeOfIptrData;
|
959 | 962 | hash_ctl.entrysize=sizeof(DupHashTabEntry);
|
960 | 963 | hash_ctl.hash=tag_hash;
|
961 | 964 | hash_ctl.hcxt=CurrentMemoryContext;
|
| 965 | +nbuckets= (long)ceil(node->ss.ps.plan->plan_rows); |
| 966 | +if (nbuckets<1) |
| 967 | +nbuckets=1; |
| 968 | +if (nbuckets>node->iss_MaxHash) |
| 969 | +nbuckets=node->iss_MaxHash; |
962 | 970 | node->iss_DupHash=hash_create("DupHashTable",
|
963 |
| -(long)ceil(node->ss.ps.plan->plan_rows), |
| 971 | +nbuckets, |
964 | 972 | &hash_ctl,
|
965 | 973 | HASH_ELEM |HASH_FUNCTION |HASH_CONTEXT);
|
966 | 974 | if (node->iss_DupHash==NULL)
|
967 | 975 | ereport(ERROR,
|
968 | 976 | (errcode(ERRCODE_OUT_OF_MEMORY),
|
969 | 977 | errmsg("out of memory")));
|
970 |
| -node->iss_MaxHash= (SortMem*1024L) / |
971 |
| -(MAXALIGN(sizeof(HASHELEMENT))+MAXALIGN(sizeof(DupHashTabEntry))); |
972 | 978 | }
|
973 | 979 |
|
974 | 980 | int
|
|