Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitc1d62bf

Browse files
committed
Add operator strategy and comparison-value datatype fields to ScanKey.
Remove the 'strategy map' code, which was a large amount of mechanismthat no longer had any use except reverse-mapping from procedure OID tostrategy number. Passing the strategy number to the index AM in thefirst place is simpler and faster.This is a preliminary step in planned support for cross-datatype indexoperations. I'm committing it now since the ScanKeyEntryInitialize()API change touches quite a lot of files, and I want to commit thosechanges before the tree drifts under me.
1 parent723825a commitc1d62bf

File tree

72 files changed

+950
-2147
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+950
-2147
lines changed

‎contrib/dblink/dblink.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1357,8 +1357,10 @@ get_pkey_attnames(Oid relid, int16 *numatts)
13571357

13581358
/* use relid to get all related indexes */
13591359
indexRelation=heap_openr(IndexRelationName,AccessShareLock);
1360-
ScanKeyEntryInitialize(&entry,0,Anum_pg_index_indrelid,
1361-
F_OIDEQ,ObjectIdGetDatum(relid));
1360+
ScanKeyEntryInitialize(&entry,0,
1361+
Anum_pg_index_indrelid,
1362+
BTEqualStrategyNumber,F_OIDEQ,
1363+
ObjectIdGetDatum(relid),OIDOID);
13621364
scan=heap_beginscan(indexRelation,SnapshotNow,1,&entry);
13631365

13641366
while ((indexTuple=heap_getnext(scan,ForwardScanDirection))!=NULL)

‎contrib/miscutil/misc_utils.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include"access/tupdesc.h"
2222
#include"catalog/catname.h"
2323
#include"catalog/pg_listener.h"
24+
#include"catalog/pg_type.h"
2425
#include"commands/async.h"
2526
#include"fmgr.h"
2627
#include"storage/lmgr.h"
@@ -88,8 +89,8 @@ active_listeners(text *relname)
8889
memcpy(listen_name,VARDATA(relname),len);
8990
ScanKeyEntryInitialize(&key,0,
9091
Anum_pg_listener_relname,
91-
F_NAMEEQ,
92-
PointerGetDatum(listen_name));
92+
BTEqualStrategyNumber,F_NAMEEQ,
93+
PointerGetDatum(listen_name),NAMEOID);
9394
sRel=heap_beginscan(lRel,SnapshotNow,1,&key);
9495
}
9596
else

‎src/backend/access/common/indexvalid.c

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/access/common/Attic/indexvalid.c,v 1.29 2003/08/04 02:39:56 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/access/common/Attic/indexvalid.c,v 1.30 2003/11/09 21:30:35 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -57,12 +57,9 @@ index_keytest(IndexTuple tuple,
5757
if (key->sk_flags&SK_ISNULL)
5858
return false;
5959

60-
if (key->sk_flags&SK_COMMUTE)
61-
test=FunctionCall2(&key->sk_func,key->sk_argument,datum);
62-
else
63-
test=FunctionCall2(&key->sk_func,datum,key->sk_argument);
60+
test=FunctionCall2(&key->sk_func,datum,key->sk_argument);
6461

65-
if (DatumGetBool(test)== !!(key->sk_flags&SK_NEGATE))
62+
if (!DatumGetBool(test))
6663
return false;
6764

6865
key++;

‎src/backend/access/common/scankey.c

Lines changed: 24 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,99 +1,70 @@
11
/*-------------------------------------------------------------------------
22
*
3-
*scan.c
4-
* scandirection andkey code
3+
*scankey.c
4+
* scan key support code
55
*
66
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
77
* Portions Copyright (c) 1994, Regents of the University of California
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/access/common/scankey.c,v 1.22 2003/08/04 02:39:56 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/access/common/scankey.c,v 1.23 2003/11/09 21:30:35 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
15-
1615
#include"postgres.h"
1716

1817
#include"access/skey.h"
1918

20-
/*
21-
* ScanKeyEntryIsLegal
22-
*True iff the scan key entry is legal.
23-
*/
24-
#defineScanKeyEntryIsLegal(entry) \
25-
( \
26-
AssertMacro(PointerIsValid(entry)), \
27-
AttributeNumberIsValid((entry)->sk_attno) \
28-
)
29-
30-
/*
31-
* ScanKeyEntrySetIllegal
32-
*Marks a scan key entry as illegal.
33-
*/
34-
void
35-
ScanKeyEntrySetIllegal(ScanKeyentry)
36-
{
37-
38-
Assert(PointerIsValid(entry));
39-
40-
entry->sk_flags=0;/* just in case... */
41-
entry->sk_attno=InvalidAttrNumber;
42-
entry->sk_procedure=0;/* should be InvalidRegProcedure */
43-
entry->sk_func.fn_oid=InvalidOid;
44-
entry->sk_argument= (Datum)0;
45-
}
4619

4720
/*
4821
* ScanKeyEntryInitialize
49-
*Initializes a scan key entry.
22+
*Initializes a scan key entry given all the field values.
23+
*The target procedure is specified by OID.
5024
*
51-
* Note:
52-
*Assumes the scan key entry is valid.
53-
*Assumestheintialized scan key entry will be legal.
25+
* Note: CurrentMemoryContext at call should be as long-lived as the ScanKey
26+
* itself, because that's what will be used for any subsidiary info attached
27+
* totheScanKey's FmgrInfo record.
5428
*/
5529
void
5630
ScanKeyEntryInitialize(ScanKeyentry,
57-
bits16flags,
31+
intflags,
5832
AttrNumberattributeNumber,
33+
StrategyNumberstrategy,
5934
RegProcedureprocedure,
60-
Datumargument)
35+
Datumargument,
36+
Oidargtype)
6137
{
62-
Assert(PointerIsValid(entry));
63-
6438
entry->sk_flags=flags;
6539
entry->sk_attno=attributeNumber;
66-
entry->sk_procedure=procedure;
40+
entry->sk_strategy=strategy;
6741
entry->sk_argument=argument;
42+
entry->sk_argtype=argtype;
6843
fmgr_info(procedure,&entry->sk_func);
69-
70-
Assert(ScanKeyEntryIsLegal(entry));
7144
}
7245

7346
/*
7447
* ScanKeyEntryInitializeWithInfo
7548
*Initializes a scan key entry using an already-completed FmgrInfo
7649
*function lookup record.
7750
*
78-
* mcxt is the memory context holding the scan key; it'll be used for
79-
* any subsidiary info attached to the scankey's FmgrInfo record.
51+
* Note: CurrentMemoryContext at call should be as long-lived as the ScanKey
52+
* itself, because that's what will be used for any subsidiary info attached
53+
* to the ScanKey's FmgrInfo record.
8054
*/
8155
void
8256
ScanKeyEntryInitializeWithInfo(ScanKeyentry,
83-
bits16flags,
57+
intflags,
8458
AttrNumberattributeNumber,
59+
StrategyNumberstrategy,
8560
FmgrInfo*finfo,
86-
MemoryContextmcxt,
87-
Datumargument)
61+
Datumargument,
62+
Oidargtype)
8863
{
89-
Assert(PointerIsValid(entry));
90-
Assert(RegProcedureIsValid(finfo->fn_oid));
91-
9264
entry->sk_flags=flags;
9365
entry->sk_attno=attributeNumber;
94-
entry->sk_procedure=finfo->fn_oid;
66+
entry->sk_strategy=strategy;
9567
entry->sk_argument=argument;
96-
fmgr_info_copy(&entry->sk_func,finfo,mcxt);
97-
98-
Assert(ScanKeyEntryIsLegal(entry));
68+
entry->sk_argtype=argtype;
69+
fmgr_info_copy(&entry->sk_func,finfo,CurrentMemoryContext);
9970
}

‎src/backend/access/gist/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44
# Makefile for access/gist
55
#
66
# IDENTIFICATION
7-
# $Header: /cvsroot/pgsql/src/backend/access/gist/Makefile,v 1.10 2000/08/31 16:09:31 petere Exp $
7+
# $Header: /cvsroot/pgsql/src/backend/access/gist/Makefile,v 1.11 2003/11/09 21:30:35 tgl Exp $
88
#
99
#-------------------------------------------------------------------------
1010

1111
subdir = src/backend/access/gist
1212
top_builddir = ../../../..
1313
include$(top_builddir)/src/Makefile.global
1414

15-
OBJS = gist.o gistget.o gistscan.o giststrat.o
15+
OBJS = gist.o gistget.o gistscan.o
1616

1717
all: SUBSYS.o
1818

‎src/backend/access/gist/gistget.c

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/access/gist/gistget.c,v 1.36 2003/08/04 02:39:57 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/access/gist/gistget.c,v 1.37 2003/11/09 21:30:35 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -249,26 +249,16 @@ gistindex_keytest(IndexTuple tuple,
249249
IndexTupleSize(tuple)-sizeof(IndexTupleData),
250250
FALSE,isNull);
251251

252-
if (key[0].sk_flags&SK_COMMUTE)
253-
{
254-
test=FunctionCall3(&key[0].sk_func,
255-
key[0].sk_argument,
256-
PointerGetDatum(&de),
257-
ObjectIdGetDatum(key[0].sk_procedure));
258-
}
259-
else
260-
{
261-
test=FunctionCall3(&key[0].sk_func,
262-
PointerGetDatum(&de),
263-
key[0].sk_argument,
264-
ObjectIdGetDatum(key[0].sk_procedure));
265-
}
252+
test=FunctionCall3(&key[0].sk_func,
253+
PointerGetDatum(&de),
254+
key[0].sk_argument,
255+
Int32GetDatum(key[0].sk_strategy));
266256

267257
if (de.key!=datum&& !isAttByVal(giststate,key[0].sk_attno-1))
268258
if (DatumGetPointer(de.key)!=NULL)
269259
pfree(DatumGetPointer(de.key));
270260

271-
if (DatumGetBool(test)== !!(key[0].sk_flags&SK_NEGATE))
261+
if (!DatumGetBool(test))
272262
return false;
273263

274264
scanKeySize--;

‎src/backend/access/gist/gistscan.c

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/access/gist/gistscan.c,v 1.47 2003/08/04 02:39:57 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/access/gist/gistscan.c,v 1.48 2003/11/09 21:30:35 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -106,17 +106,13 @@ gistrescan(PG_FUNCTION_ARGS)
106106
s->numberOfKeys*sizeof(ScanKeyData));
107107

108108
/*
109-
*Play games here withthe scan keyto use the Consistent
110-
*functionfor all comparisons: 1) the sk_procedure field will
111-
*now be used to hold thestrategy number 2) the sk_func field
112-
*will point to theConsistent function
109+
*Modifythe scan keyso that the Consistent function is called
110+
* for all comparisons. The original operator is passed to the
111+
*Consistent function in the form of itsstrategy number, which
112+
*is available from thesk_strategy field.
113113
*/
114114
for (i=0;i<s->numberOfKeys;i++)
115115
{
116-
s->keyData[i].sk_procedure=
117-
RelationGetGISTStrategy(s->indexRelation,
118-
s->keyData[i].sk_attno,
119-
s->keyData[i].sk_procedure);
120116
s->keyData[i].sk_func=p->giststate->consistentFn[s->keyData[i].sk_attno-1];
121117
}
122118
}

‎src/backend/access/gist/giststrat.c

Lines changed: 0 additions & 125 deletions
This file was deleted.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp