Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
a2740a45
Commit
a2740a45
authored
Aug 26, 1996
by
Marc G. Fournier
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
There, now we support GiST...now what? :)
parent
fe87dbb1
Changes
24
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
279 additions
and
99 deletions
+279
-99
src/backend/access/Makefile.inc
src/backend/access/Makefile.inc
+5
-4
src/backend/access/genam.h
src/backend/access/genam.h
+3
-2
src/backend/access/hash.h
src/backend/access/hash.h
+3
-2
src/backend/access/hash/hash.c
src/backend/access/hash/hash.c
+9
-2
src/backend/access/index/indexam.c
src/backend/access/index/indexam.c
+5
-3
src/backend/access/nbtree.h
src/backend/access/nbtree.h
+3
-2
src/backend/access/nbtree/nbtree.c
src/backend/access/nbtree/nbtree.c
+8
-2
src/backend/access/rtree/rtree.c
src/backend/access/rtree/rtree.c
+6
-2
src/backend/catalog/index.c
src/backend/catalog/index.c
+43
-7
src/backend/catalog/index.h
src/backend/catalog/index.h
+5
-2
src/backend/catalog/indexing.c
src/backend/catalog/indexing.c
+3
-11
src/backend/catalog/pg_am.h
src/backend/catalog/pg_am.h
+2
-1
src/backend/catalog/pg_index.h
src/backend/catalog/pg_index.h
+6
-2
src/backend/catalog/pg_proc.h
src/backend/catalog/pg_proc.h
+15
-4
src/backend/commands/cluster.c
src/backend/commands/cluster.c
+3
-2
src/backend/commands/copy.c
src/backend/commands/copy.c
+3
-5
src/backend/commands/defind.c
src/backend/commands/defind.c
+22
-6
src/backend/executor/execUtils.c
src/backend/executor/execUtils.c
+34
-12
src/backend/nodes/equalfuncs.c
src/backend/nodes/equalfuncs.c
+17
-1
src/backend/nodes/parsenodes.h
src/backend/nodes/parsenodes.h
+3
-1
src/backend/optimizer/plan/createplan.c
src/backend/optimizer/plan/createplan.c
+36
-6
src/backend/parser/gram.y
src/backend/parser/gram.y
+14
-8
src/backend/storage/large_object/inv_api.c
src/backend/storage/large_object/inv_api.c
+4
-11
src/backend/utils/adt/selfuncs.c
src/backend/utils/adt/selfuncs.c
+27
-1
No files found.
src/backend/access/Makefile.inc
View file @
a2740a45
...
@@ -7,18 +7,19 @@
...
@@ -7,18 +7,19 @@
#
#
#
#
# IDENTIFICATION
# IDENTIFICATION
# $Header: /cvsroot/pgsql/src/backend/access/Attic/Makefile.inc,v 1.
1.1.1 1996/07/09 06:21:08
scrappy Exp $
# $Header: /cvsroot/pgsql/src/backend/access/Attic/Makefile.inc,v 1.
2 1996/08/26 06:26:37
scrappy Exp $
#
#
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
accdir
=
$(CURDIR)
/access
accdir
=
$(CURDIR)
/access
VPATH
:=
$(VPATH)
:
$(accdir)
:
\
VPATH
:=
$(VPATH)
:
$(accdir)
:
\
$(accdir)
/common:
$(accdir)
/
hash:
$(accdir)
/heap:
$(accdir)
/index
:
\
$(accdir)
/common:
$(accdir)
/
gist:
$(accdir)
/hash:
$(accdir)
/heap
:
\
$(accdir)
/rtree:
$(accdir)
/nbtree:
$(accdir)
/transam
$(accdir)
/
index:
$(accdir)
/
rtree:
$(accdir)
/nbtree:
$(accdir)
/transam
SUBSRCS
=
SUBSRCS
=
include
$(accdir)/common/Makefile.inc
include
$(accdir)/common/Makefile.inc
include
$(accdir)/gist/Makefile.inc
include
$(accdir)/hash/Makefile.inc
include
$(accdir)/hash/Makefile.inc
include
$(accdir)/heap/Makefile.inc
include
$(accdir)/heap/Makefile.inc
include
$(accdir)/index/Makefile.inc
include
$(accdir)/index/Makefile.inc
...
@@ -27,7 +28,7 @@ include $(accdir)/nbtree/Makefile.inc
...
@@ -27,7 +28,7 @@ include $(accdir)/nbtree/Makefile.inc
include
$(accdir)/transam/Makefile.inc
include
$(accdir)/transam/Makefile.inc
SRCS_ACCESS
:=
$(SUBSRCS)
SRCS_ACCESS
:=
$(SUBSRCS)
HEADERS
+=
attnum.h funcindex.h genam.h hash.h
\
HEADERS
+=
attnum.h funcindex.h genam.h
gist.h
hash.h
\
heapam.h hio.h htup.h ibit.h iqual.h istrat.h
\
heapam.h hio.h htup.h ibit.h iqual.h istrat.h
\
itup.h nbtree.h printtup.h relscan.h rtree.h
\
itup.h nbtree.h printtup.h relscan.h rtree.h
\
sdir.h skey.h strat.h transam.h tupdesc.h tupmacs.h
\
sdir.h skey.h strat.h transam.h tupdesc.h tupmacs.h
\
...
...
src/backend/access/genam.h
View file @
a2740a45
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
*
*
* Copyright (c) 1994, Regents of the University of California
* Copyright (c) 1994, Regents of the University of California
*
*
* $Id: genam.h,v 1.
1.1.1 1996/07/09 06:21:08
scrappy Exp $
* $Id: genam.h,v 1.
2 1996/08/26 06:26:40
scrappy Exp $
*
*
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*/
*/
...
@@ -32,7 +32,8 @@ extern Relation index_open(Oid relationId);
...
@@ -32,7 +32,8 @@ extern Relation index_open(Oid relationId);
extern
Relation
index_openr
(
char
*
relationName
);
extern
Relation
index_openr
(
char
*
relationName
);
extern
void
index_close
(
Relation
relation
);
extern
void
index_close
(
Relation
relation
);
extern
InsertIndexResult
index_insert
(
Relation
relation
,
extern
InsertIndexResult
index_insert
(
Relation
relation
,
IndexTuple
indexTuple
);
Datum
*
datum
,
char
*
nulls
,
ItemPointer
heap_t_ctid
);
extern
void
index_delete
(
Relation
relation
,
ItemPointer
indexItem
);
extern
void
index_delete
(
Relation
relation
,
ItemPointer
indexItem
);
extern
IndexScanDesc
index_beginscan
(
Relation
relation
,
bool
scanFromEnd
,
extern
IndexScanDesc
index_beginscan
(
Relation
relation
,
bool
scanFromEnd
,
uint16
numberOfKeys
,
ScanKey
key
);
uint16
numberOfKeys
,
ScanKey
key
);
...
...
src/backend/access/hash.h
View file @
a2740a45
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
*
*
* Copyright (c) 1994, Regents of the University of California
* Copyright (c) 1994, Regents of the University of California
*
*
* $Id: hash.h,v 1.
1.1.1 1996/07/09 06:21:08
scrappy Exp $
* $Id: hash.h,v 1.
2 1996/08/26 06:26:42
scrappy Exp $
*
*
* NOTES
* NOTES
* modeled after Margo Seltzer's hash implementation for unix.
* modeled after Margo Seltzer's hash implementation for unix.
...
@@ -250,7 +250,8 @@ typedef HashItemData *HashItem;
...
@@ -250,7 +250,8 @@ typedef HashItemData *HashItem;
extern
void
hashbuild
(
Relation
heap
,
Relation
index
,
int
natts
,
extern
void
hashbuild
(
Relation
heap
,
Relation
index
,
int
natts
,
AttrNumber
*
attnum
,
IndexStrategy
istrat
,
uint16
pcount
,
AttrNumber
*
attnum
,
IndexStrategy
istrat
,
uint16
pcount
,
Datum
*
params
,
FuncIndexInfo
*
finfo
,
PredInfo
*
predInfo
);
Datum
*
params
,
FuncIndexInfo
*
finfo
,
PredInfo
*
predInfo
);
extern
InsertIndexResult
hashinsert
(
Relation
rel
,
IndexTuple
itup
);
extern
InsertIndexResult
hashinsert
(
Relation
rel
,
Datum
*
datum
,
char
*
nulls
,
ItemPointer
ht_ctid
);
extern
char
*
hashgettuple
(
IndexScanDesc
scan
,
ScanDirection
dir
);
extern
char
*
hashgettuple
(
IndexScanDesc
scan
,
ScanDirection
dir
);
extern
char
*
hashbeginscan
(
Relation
rel
,
bool
fromEnd
,
uint16
keysz
,
extern
char
*
hashbeginscan
(
Relation
rel
,
bool
fromEnd
,
uint16
keysz
,
ScanKey
scankey
);
ScanKey
scankey
);
...
...
src/backend/access/hash/hash.c
View file @
a2740a45
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
*
*
*
*
* IDENTIFICATION
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/access/hash/hash.c,v 1.
1.1.1 1996/07/09 06:21:10
scrappy Exp $
* $Header: /cvsroot/pgsql/src/backend/access/hash/hash.c,v 1.
2 1996/08/26 06:27:28
scrappy Exp $
*
*
* NOTES
* NOTES
* This file contains only the public interface routines.
* This file contains only the public interface routines.
...
@@ -252,11 +252,17 @@ hashbuild(Relation heap,
...
@@ -252,11 +252,17 @@ hashbuild(Relation heap,
* to the caller.
* to the caller.
*/
*/
InsertIndexResult
InsertIndexResult
hashinsert
(
Relation
rel
,
IndexTuple
itup
)
hashinsert
(
Relation
rel
,
Datum
*
datum
,
char
*
nulls
,
ItemPointer
ht_ctid
)
{
{
HashItem
hitem
;
HashItem
hitem
;
IndexTuple
itup
;
InsertIndexResult
res
;
InsertIndexResult
res
;
/* generate an index tuple */
itup
=
index_formtuple
(
RelationGetTupleDescriptor
(
rel
),
datum
,
nulls
);
itup
->
t_tid
=
*
ht_ctid
;
if
(
itup
->
t_info
&
INDEX_NULL_MASK
)
if
(
itup
->
t_info
&
INDEX_NULL_MASK
)
return
((
InsertIndexResult
)
NULL
);
return
((
InsertIndexResult
)
NULL
);
...
@@ -265,6 +271,7 @@ hashinsert(Relation rel, IndexTuple itup)
...
@@ -265,6 +271,7 @@ hashinsert(Relation rel, IndexTuple itup)
res
=
_hash_doinsert
(
rel
,
hitem
);
res
=
_hash_doinsert
(
rel
,
hitem
);
pfree
(
hitem
);
pfree
(
hitem
);
pfree
(
itup
);
return
(
res
);
return
(
res
);
}
}
...
...
src/backend/access/index/indexam.c
View file @
a2740a45
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
*
*
*
*
* IDENTIFICATION
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/access/index/indexam.c,v 1.
1.1.1 1996/07/09 06:21:11
scrappy Exp $
* $Header: /cvsroot/pgsql/src/backend/access/index/indexam.c,v 1.
2 1996/08/26 06:27:48
scrappy Exp $
*
*
* INTERFACE ROUTINES
* INTERFACE ROUTINES
* index_open - open an index relation by relationId
* index_open - open an index relation by relationId
...
@@ -179,7 +179,9 @@ index_close(Relation relation)
...
@@ -179,7 +179,9 @@ index_close(Relation relation)
*/
*/
InsertIndexResult
InsertIndexResult
index_insert
(
Relation
relation
,
index_insert
(
Relation
relation
,
IndexTuple
indexTuple
)
Datum
*
datum
,
char
*
nulls
,
ItemPointer
heap_t_ctid
)
{
{
RegProcedure
procedure
;
RegProcedure
procedure
;
InsertIndexResult
specificResult
;
InsertIndexResult
specificResult
;
...
@@ -192,7 +194,7 @@ index_insert(Relation relation,
...
@@ -192,7 +194,7 @@ index_insert(Relation relation,
* ----------------
* ----------------
*/
*/
specificResult
=
(
InsertIndexResult
)
specificResult
=
(
InsertIndexResult
)
fmgr
(
procedure
,
relation
,
indexTuple
,
NULL
);
fmgr
(
procedure
,
relation
,
datum
,
nulls
,
heap_t_ctid
,
NULL
);
/* ----------------
/* ----------------
* the insert proc is supposed to return a "specific result" and
* the insert proc is supposed to return a "specific result" and
...
...
src/backend/access/nbtree.h
View file @
a2740a45
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
*
*
* Copyright (c) 1994, Regents of the University of California
* Copyright (c) 1994, Regents of the University of California
*
*
* $Id: nbtree.h,v 1.
2 1996/07/30 07:55:10
scrappy Exp $
* $Id: nbtree.h,v 1.
3 1996/08/26 06:26:44
scrappy Exp $
*
*
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*/
*/
...
@@ -201,7 +201,8 @@ extern bool BuildingBtree; /* in nbtree.c */
...
@@ -201,7 +201,8 @@ extern bool BuildingBtree; /* in nbtree.c */
extern
void
btbuild
(
Relation
heap
,
Relation
index
,
int
natts
,
extern
void
btbuild
(
Relation
heap
,
Relation
index
,
int
natts
,
AttrNumber
*
attnum
,
IndexStrategy
istrat
,
uint16
pcount
,
AttrNumber
*
attnum
,
IndexStrategy
istrat
,
uint16
pcount
,
Datum
*
params
,
FuncIndexInfo
*
finfo
,
PredInfo
*
predInfo
);
Datum
*
params
,
FuncIndexInfo
*
finfo
,
PredInfo
*
predInfo
);
extern
InsertIndexResult
btinsert
(
Relation
rel
,
IndexTuple
itup
);
extern
InsertIndexResult
btinsert
(
Relation
rel
,
Datum
*
datum
,
char
*
nulls
,
ItemPointer
ht_ctid
);
extern
char
*
btgettuple
(
IndexScanDesc
scan
,
ScanDirection
dir
);
extern
char
*
btgettuple
(
IndexScanDesc
scan
,
ScanDirection
dir
);
extern
char
*
btbeginscan
(
Relation
rel
,
bool
fromEnd
,
uint16
keysz
,
extern
char
*
btbeginscan
(
Relation
rel
,
bool
fromEnd
,
uint16
keysz
,
ScanKey
scankey
);
ScanKey
scankey
);
...
...
src/backend/access/nbtree/nbtree.c
View file @
a2740a45
...
@@ -8,7 +8,7 @@
...
@@ -8,7 +8,7 @@
*
*
*
*
* IDENTIFICATION
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtree.c,v 1.
2 1996/07/30 07:56:00
scrappy Exp $
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtree.c,v 1.
3 1996/08/26 06:28:21
scrappy Exp $
*
*
* NOTES
* NOTES
* This file contains only the public interface routines.
* This file contains only the public interface routines.
...
@@ -285,11 +285,16 @@ btbuild(Relation heap,
...
@@ -285,11 +285,16 @@ btbuild(Relation heap,
* return an InsertIndexResult to the caller.
* return an InsertIndexResult to the caller.
*/
*/
InsertIndexResult
InsertIndexResult
btinsert
(
Relation
rel
,
IndexTuple
itup
)
btinsert
(
Relation
rel
,
Datum
*
datum
,
char
*
nulls
,
ItemPointer
ht_ctid
)
{
{
BTItem
btitem
;
BTItem
btitem
;
IndexTuple
itup
;
InsertIndexResult
res
;
InsertIndexResult
res
;
/* generate an index tuple */
itup
=
index_formtuple
(
RelationGetTupleDescriptor
(
rel
),
datum
,
nulls
);
itup
->
t_tid
=
*
ht_ctid
;
if
(
itup
->
t_info
&
INDEX_NULL_MASK
)
if
(
itup
->
t_info
&
INDEX_NULL_MASK
)
return
((
InsertIndexResult
)
NULL
);
return
((
InsertIndexResult
)
NULL
);
...
@@ -297,6 +302,7 @@ btinsert(Relation rel, IndexTuple itup)
...
@@ -297,6 +302,7 @@ btinsert(Relation rel, IndexTuple itup)
res
=
_bt_doinsert
(
rel
,
btitem
);
res
=
_bt_doinsert
(
rel
,
btitem
);
pfree
(
btitem
);
pfree
(
btitem
);
pfree
(
itup
);
return
(
res
);
return
(
res
);
}
}
...
...
src/backend/access/rtree/rtree.c
View file @
a2740a45
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
*
*
*
*
* IDENTIFICATION
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtree.c,v 1.
1.1.1 1996/07/09 06:21:13
scrappy Exp $
* $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtree.c,v 1.
2 1996/08/26 06:29:10
scrappy Exp $
*
*
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*/
*/
...
@@ -273,11 +273,15 @@ rtbuild(Relation heap,
...
@@ -273,11 +273,15 @@ rtbuild(Relation heap,
* It doesn't do any work; just locks the relation and passes the buck.
* It doesn't do any work; just locks the relation and passes the buck.
*/
*/
InsertIndexResult
InsertIndexResult
rtinsert
(
Relation
r
,
IndexTuple
itup
)
rtinsert
(
Relation
r
,
Datum
*
datum
,
char
*
nulls
,
ItemPointer
ht_ctid
)
{
{
InsertIndexResult
res
;
InsertIndexResult
res
;
IndexTuple
itup
;
RTSTATE
rtState
;
RTSTATE
rtState
;
/* generate an index tuple */
itup
=
index_formtuple
(
RelationGetTupleDescriptor
(
r
),
datum
,
nulls
);
itup
->
t_tid
=
*
ht_ctid
;
initRtstate
(
&
rtState
,
r
);
initRtstate
(
&
rtState
,
r
);
RelationSetLockForWrite
(
r
);
RelationSetLockForWrite
(
r
);
...
...
src/backend/catalog/index.c
View file @
a2740a45
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
*
*
*
*
* IDENTIFICATION
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.
2 1996/08/19 13:32:07
scrappy Exp $
* $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.
3 1996/08/26 06:29:32
scrappy Exp $
*
*
*
*
* INTERFACE ROUTINES
* INTERFACE ROUTINES
...
@@ -86,6 +86,7 @@ static Oid RelationNameGetObjectId(char *relationName, Relation pg_class,
...
@@ -86,6 +86,7 @@ static Oid RelationNameGetObjectId(char *relationName, Relation pg_class,
static
Oid
GetHeapRelationOid
(
char
*
heapRelationName
,
char
*
indexRelationName
);
static
Oid
GetHeapRelationOid
(
char
*
heapRelationName
,
char
*
indexRelationName
);
static
TupleDesc
BuildFuncTupleDesc
(
FuncIndexInfo
*
funcInfo
);
static
TupleDesc
BuildFuncTupleDesc
(
FuncIndexInfo
*
funcInfo
);
static
TupleDesc
ConstructTupleDescriptor
(
Oid
heapoid
,
Relation
heapRelation
,
static
TupleDesc
ConstructTupleDescriptor
(
Oid
heapoid
,
Relation
heapRelation
,
TypeName
*
IndexKeyType
,
int
numatts
,
AttrNumber
attNums
[]);
int
numatts
,
AttrNumber
attNums
[]);
static
void
ConstructIndexReldesc
(
Relation
indexRelation
,
Oid
amoid
);
static
void
ConstructIndexReldesc
(
Relation
indexRelation
,
Oid
amoid
);
...
@@ -97,7 +98,8 @@ static void
...
@@ -97,7 +98,8 @@ static void
AppendAttributeTuples
(
Relation
indexRelation
,
int
numatts
);
AppendAttributeTuples
(
Relation
indexRelation
,
int
numatts
);
static
void
UpdateIndexRelation
(
Oid
indexoid
,
Oid
heapoid
,
static
void
UpdateIndexRelation
(
Oid
indexoid
,
Oid
heapoid
,
FuncIndexInfo
*
funcInfo
,
int
natts
,
FuncIndexInfo
*
funcInfo
,
int
natts
,
AttrNumber
attNums
[],
Oid
classOids
[],
Node
*
predicate
);
AttrNumber
attNums
[],
Oid
classOids
[],
Node
*
predicate
,
TypeName
*
indexKeyType
,
bool
islossy
);
static
void
DefaultBuild
(
Relation
heapRelation
,
Relation
indexRelation
,
static
void
DefaultBuild
(
Relation
heapRelation
,
Relation
indexRelation
,
int
numberOfAttributes
,
AttrNumber
attributeNumber
[],
int
numberOfAttributes
,
AttrNumber
attributeNumber
[],
IndexStrategy
indexStrategy
,
uint16
parameterCount
,
IndexStrategy
indexStrategy
,
uint16
parameterCount
,
...
@@ -341,6 +343,7 @@ BuildFuncTupleDesc(FuncIndexInfo *funcInfo)
...
@@ -341,6 +343,7 @@ BuildFuncTupleDesc(FuncIndexInfo *funcInfo)
static
TupleDesc
static
TupleDesc
ConstructTupleDescriptor
(
Oid
heapoid
,
ConstructTupleDescriptor
(
Oid
heapoid
,
Relation
heapRelation
,
Relation
heapRelation
,
TypeName
*
IndexKeyType
,
int
numatts
,
int
numatts
,
AttrNumber
attNums
[])
AttrNumber
attNums
[])
{
{
...
@@ -424,7 +427,28 @@ ConstructTupleDescriptor(Oid heapoid,
...
@@ -424,7 +427,28 @@ ConstructTupleDescriptor(Oid heapoid,
to
=
(
char
*
)
(
indexTupDesc
->
attrs
[
i
]);
to
=
(
char
*
)
(
indexTupDesc
->
attrs
[
i
]);
memcpy
(
to
,
from
,
ATTRIBUTE_TUPLE_SIZE
);
memcpy
(
to
,
from
,
ATTRIBUTE_TUPLE_SIZE
);
/* if the keytype is defined, we need to change the tuple form's
atttypid & attlen field to match that of the key's type */
if
(
IndexKeyType
!=
NULL
)
{
HeapTuple
tup
;
tup
=
SearchSysCacheTuple
(
TYPNAME
,
PointerGetDatum
(
IndexKeyType
->
name
),
0
,
0
,
0
);
if
(
!
HeapTupleIsValid
(
tup
))
elog
(
WARN
,
"create index: type '%s' undefined"
,
IndexKeyType
->
name
);
((
AttributeTupleForm
)
to
)
->
atttypid
=
tup
->
t_oid
;
((
AttributeTupleForm
)
to
)
->
attbyval
=
((
TypeTupleForm
)
((
char
*
)
tup
+
tup
->
t_hoff
))
->
typbyval
;
if
(
IndexKeyType
->
typlen
>
0
)
((
AttributeTupleForm
)
to
)
->
attlen
=
IndexKeyType
->
typlen
;
else
((
AttributeTupleForm
)
to
)
->
attlen
=
((
TypeTupleForm
)
((
char
*
)
tup
+
tup
->
t_hoff
))
->
typlen
;
}
/* ----------------
/* ----------------
* now we have to drop in the proper relation descriptor
* now we have to drop in the proper relation descriptor
* into the copied tuple form's attrelid and we should be
* into the copied tuple form's attrelid and we should be
...
@@ -734,7 +758,9 @@ UpdateIndexRelation(Oid indexoid,
...
@@ -734,7 +758,9 @@ UpdateIndexRelation(Oid indexoid,
int
natts
,
int
natts
,
AttrNumber
attNums
[],
AttrNumber
attNums
[],
Oid
classOids
[],
Oid
classOids
[],
Node
*
predicate
)
Node
*
predicate
,
TypeName
*
indexKeyType
,
bool
islossy
)
{
{
IndexTupleForm
indexForm
;
IndexTupleForm
indexForm
;
char
*
predString
;
char
*
predString
;
...
@@ -770,6 +796,11 @@ UpdateIndexRelation(Oid indexoid,
...
@@ -770,6 +796,11 @@ UpdateIndexRelation(Oid indexoid,
indexForm
->
indexrelid
=
indexoid
;
indexForm
->
indexrelid
=
indexoid
;
indexForm
->
indproc
=
(
PointerIsValid
(
funcInfo
))
?
indexForm
->
indproc
=
(
PointerIsValid
(
funcInfo
))
?
FIgetProcOid
(
funcInfo
)
:
InvalidOid
;
FIgetProcOid
(
funcInfo
)
:
InvalidOid
;
indexForm
->
indislossy
=
islossy
;
if
(
indexKeyType
!=
NULL
)
indexForm
->
indhaskeytype
=
1
;
else
indexForm
->
indhaskeytype
=
0
;
memset
((
char
*
)
&
indexForm
->
indkey
[
0
],
0
,
sizeof
indexForm
->
indkey
);
memset
((
char
*
)
&
indexForm
->
indkey
[
0
],
0
,
sizeof
indexForm
->
indkey
);
memset
((
char
*
)
&
indexForm
->
indclass
[
0
],
0
,
sizeof
indexForm
->
indclass
);
memset
((
char
*
)
&
indexForm
->
indclass
[
0
],
0
,
sizeof
indexForm
->
indclass
);
...
@@ -987,13 +1018,15 @@ void
...
@@ -987,13 +1018,15 @@ void
index_create
(
char
*
heapRelationName
,
index_create
(
char
*
heapRelationName
,
char
*
indexRelationName
,
char
*
indexRelationName
,
FuncIndexInfo
*
funcInfo
,
FuncIndexInfo
*
funcInfo
,
TypeName
*
IndexKeyType
,
Oid
accessMethodObjectId
,
Oid
accessMethodObjectId
,
int
numatts
,
int
numatts
,
AttrNumber
attNums
[],
AttrNumber
attNums
[],
Oid
classObjectId
[],
Oid
classObjectId
[],
uint16
parameterCount
,
uint16
parameterCount
,
Datum
*
parameter
,
Datum
*
parameter
,
Node
*
predicate
)
Node
*
predicate
,
bool
islossy
)
{
{
Relation
heapRelation
;
Relation
heapRelation
;
Relation
indexRelation
;
Relation
indexRelation
;
...
@@ -1034,6 +1067,7 @@ index_create(char *heapRelationName,
...
@@ -1034,6 +1067,7 @@ index_create(char *heapRelationName,
else
else
indexTupDesc
=
ConstructTupleDescriptor
(
heapoid
,
indexTupDesc
=
ConstructTupleDescriptor
(
heapoid
,
heapRelation
,
heapRelation
,
IndexKeyType
,
numatts
,
numatts
,
attNums
);
attNums
);
...
@@ -1105,7 +1139,8 @@ index_create(char *heapRelationName,
...
@@ -1105,7 +1139,8 @@ index_create(char *heapRelationName,
* ----------------
* ----------------
*/
*/
UpdateIndexRelation
(
indexoid
,
heapoid
,
funcInfo
,
UpdateIndexRelation
(
indexoid
,
heapoid
,
funcInfo
,
numatts
,
attNums
,
classObjectId
,
predicate
);
numatts
,
attNums
,
classObjectId
,
predicate
,
IndexKeyType
,
islossy
);
predInfo
=
(
PredInfo
*
)
palloc
(
sizeof
(
PredInfo
));
predInfo
=
(
PredInfo
*
)
palloc
(
sizeof
(
PredInfo
));
predInfo
->
pred
=
predicate
;
predInfo
->
pred
=
predicate
;
...
@@ -1568,7 +1603,8 @@ DefaultBuild(Relation heapRelation,
...
@@ -1568,7 +1603,8 @@ DefaultBuild(Relation heapRelation,
indexTuple
->
t_tid
=
heapTuple
->
t_ctid
;
indexTuple
->
t_tid
=
heapTuple
->
t_ctid
;
insertResult
=
index_insert
(
indexRelation
,
indexTuple
);
insertResult
=
index_insert
(
indexRelation
,
datum
,
nullv
,
&
(
heapTuple
->
t_ctid
));
if
(
insertResult
)
pfree
(
insertResult
);
if
(
insertResult
)
pfree
(
insertResult
);
pfree
(
indexTuple
);
pfree
(
indexTuple
);
...
...
src/backend/catalog/index.h
View file @
a2740a45
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
*
*
* Copyright (c) 1994, Regents of the University of California
* Copyright (c) 1994, Regents of the University of California
*
*
* $Id: index.h,v 1.
2 1996/08/19 13:32:08
scrappy Exp $
* $Id: index.h,v 1.
3 1996/08/26 06:29:36
scrappy Exp $
*
*
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*/
*/
...
@@ -16,6 +16,7 @@
...
@@ -16,6 +16,7 @@
#include "access/funcindex.h"
#include "access/funcindex.h"
#include "access/itup.h"
#include "access/itup.h"
#include "nodes/execnodes.h"
#include "nodes/execnodes.h"
#include "nodes/parsenodes.h"
extern
Form_pg_am
extern
Form_pg_am
...
@@ -31,13 +32,15 @@ extern void InitIndexStrategy(int numatts,
...
@@ -31,13 +32,15 @@ extern void InitIndexStrategy(int numatts,
extern
void
index_create
(
char
*
heapRelationName
,
extern
void
index_create
(
char
*
heapRelationName
,
char
*
indexRelationName
,
char
*
indexRelationName
,
FuncIndexInfo
*
funcInfo
,
FuncIndexInfo
*
funcInfo
,
TypeName
*
IndexKeyType
,
Oid
accessMethodObjectId
,
Oid
accessMethodObjectId
,
int
numatts
,
int
numatts
,
AttrNumber
attNums
[],
AttrNumber
attNums
[],
Oid
classObjectId
[],
Oid
classObjectId
[],
uint16
parameterCount
,
uint16
parameterCount
,
Datum
*
parameter
,
Datum
*
parameter
,
Node
*
predicate
);
Node
*
predicate
,
bool
islossy
);
extern
void
index_destroy
(
Oid
indexId
);
extern
void
index_destroy
(
Oid
indexId
);
...
...
src/backend/catalog/indexing.c
View file @
a2740a45
...
@@ -8,7 +8,7 @@
...
@@ -8,7 +8,7 @@
*
*
*
*
* IDENTIFICATION
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.
1.1.1 1996/07/09 06:21:15
scrappy Exp $
* $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.
2 1996/08/26 06:29:38
scrappy Exp $
*
*
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*/
*/
...
@@ -193,16 +193,8 @@ CatalogIndexInsert(Relation *idescs,
...
@@ -193,16 +193,8 @@ CatalogIndexInsert(Relation *idescs,
nulls
,
nulls
,
finfoP
);
finfoP
);
newIndxTup
=
(
IndexTuple
)
index_formtuple
(
indexDescriptor
,
indexRes
=
index_insert
(
idescs
[
i
],
&
datum
,
nulls
,
&
datum
,
nulls
);
&
(
heapTuple
->
t_ctid
));
Assert
(
newIndxTup
);
/*
* Doing this structure assignment makes me quake in my boots when I
* think about portability.
*/
newIndxTup
->
t_tid
=
heapTuple
->
t_ctid
;
indexRes
=
index_insert
(
idescs
[
i
],
newIndxTup
);
if
(
indexRes
)
pfree
(
indexRes
);
if
(
indexRes
)
pfree
(
indexRes
);
}
}
}
}
...
...
src/backend/catalog/pg_am.h
View file @
a2740a45
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
*
*
* Copyright (c) 1994, Regents of the University of California
* Copyright (c) 1994, Regents of the University of California
*
*
* $Id: pg_am.h,v 1.
1.1.1 1996/07/09 06:21:16
scrappy Exp $
* $Id: pg_am.h,v 1.
2 1996/08/26 06:29:40
scrappy Exp $
*
*
* NOTES
* NOTES
* the genbki.sh script reads this file and generates .bki
* the genbki.sh script reads this file and generates .bki
...
@@ -103,6 +103,7 @@ DATA(insert OID = 405 ( hash PGUID "o" 1 1 hashgettuple hashinsert hashdelete
...
@@ -103,6 +103,7 @@ DATA(insert OID = 405 ( hash PGUID "o" 1 1 hashgettuple hashinsert hashdelete
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
-
-
));
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
-
-
));
#define BTREE_AM_OID 403
#define BTREE_AM_OID 403
DATA
(
insert
OID
=
783
(
gist
PGUID
"o"
100
7
gistgettuple
gistinsert
gistdelete
-
-
-
-
gistbeginscan
gistrescan
gistendscan
gistmarkpos
gistrestrpos
-
-
gistbuild
-
-
));
BKI_BEGIN
BKI_BEGIN
#ifdef NOBTREE
#ifdef NOBTREE
...
...
src/backend/catalog/pg_index.h
View file @
a2740a45
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
*
*
* Copyright (c) 1994, Regents of the University of California
* Copyright (c) 1994, Regents of the University of California
*
*
* $Id: pg_index.h,v 1.
1.1.1 1996/07/09 06:21:17
scrappy Exp $
* $Id: pg_index.h,v 1.
2 1996/08/26 06:29:43
scrappy Exp $
*
*
* NOTES
* NOTES
* the genbki.sh script reads this file and generates .bki
* the genbki.sh script reads this file and generates .bki
...
@@ -42,6 +42,8 @@ CATALOG(pg_index) {
...
@@ -42,6 +42,8 @@ CATALOG(pg_index) {
bool
indisclustered
;
bool
indisclustered
;
bool
indisarchived
;
bool
indisarchived
;
text
indpred
;
/* query plan for partial index predicate */
text
indpred
;
/* query plan for partial index predicate */
bool
indislossy
;
/* do we fetch false tuples (lossy compression)? */
bool
indhaskeytype
;
/* does key type != attribute type? */
}
FormData_pg_index
;
}
FormData_pg_index
;
#define INDEX_MAX_KEYS 8
/* maximum number of keys in an index definition */
#define INDEX_MAX_KEYS 8
/* maximum number of keys in an index definition */
...
@@ -57,7 +59,7 @@ typedef FormData_pg_index *IndexTupleForm;
...
@@ -57,7 +59,7 @@ typedef FormData_pg_index *IndexTupleForm;
* compiler constants for pg_index
* compiler constants for pg_index
* ----------------
* ----------------
*/
*/
#define Natts_pg_index
8
#define Natts_pg_index
10
#define Anum_pg_index_indexrelid 1
#define Anum_pg_index_indexrelid 1
#define Anum_pg_index_indrelid 2
#define Anum_pg_index_indrelid 2
#define Anum_pg_index_indproc 3
#define Anum_pg_index_indproc 3
...
@@ -66,6 +68,8 @@ typedef FormData_pg_index *IndexTupleForm;
...
@@ -66,6 +68,8 @@ typedef FormData_pg_index *IndexTupleForm;
#define Anum_pg_index_indisclustered 6
#define Anum_pg_index_indisclustered 6
#define Anum_pg_index_indisarchived 7
#define Anum_pg_index_indisarchived 7
#define Anum_pg_index_indpred 8
#define Anum_pg_index_indpred 8
#define Anum_pg_index_indislossy 9
#define Anum_pg_index_indhaskeytype 10
#endif
/* PG_INDEX_H */
#endif
/* PG_INDEX_H */
src/backend/catalog/pg_proc.h
View file @
a2740a45
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
*
*
* Copyright (c) 1994, Regents of the University of California
* Copyright (c) 1994, Regents of the University of California
*
*
* $Id: pg_proc.h,v 1.
1.1.1 1996/07/09 06:21:18
scrappy Exp $
* $Id: pg_proc.h,v 1.
2 1996/08/26 06:29:46
scrappy Exp $
*
*
* NOTES
* NOTES
* The script catalog/genbki.sh reads this file and generates .bki
* The script catalog/genbki.sh reads this file and generates .bki
...
@@ -385,7 +385,7 @@ DATA(insert OID = 313 ( i2toi4 PGUID 11 f t f 2 f 23 "21" 100 0 0 10
...
@@ -385,7 +385,7 @@ DATA(insert OID = 313 ( i2toi4 PGUID 11 f t f 2 f 23 "21" 100 0 0 10
DATA
(
insert
OID
=
314
(
i4toi2
PGUID
11
f
t
f
2
f
21
"23"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
314
(
i4toi2
PGUID
11
f
t
f
2
f
21
"23"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
315
(
keyfirsteq
PGUID
11
f
t
f
2
f
16
"0 21"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
315
(
keyfirsteq
PGUID
11
f
t
f
2
f
16
"0 21"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
320
(
rtinsert
PGUID
11
f
t
f
2
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
320
(
rtinsert
PGUID
11
f
t
f
4
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
321
(
rtdelete
PGUID
11
f
t
f
2
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
321
(
rtdelete
PGUID
11
f
t
f
2
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
322
(
rtgettuple
PGUID
11
f
t
f
2
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
322
(
rtgettuple
PGUID
11
f
t
f
2
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
323
(
rtbuild
PGUID
11
f
t
f
9
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
323
(
rtbuild
PGUID
11
f
t
f
9
f
23
"0"
100
0
0
100
foo
bar
));
...
@@ -396,7 +396,7 @@ DATA(insert OID = 327 ( rtrestrpos PGUID 11 f t f 1 f 23 "0" 100 0 0 100
...
@@ -396,7 +396,7 @@ DATA(insert OID = 327 ( rtrestrpos PGUID 11 f t f 1 f 23 "0" 100 0 0 100
DATA
(
insert
OID
=
328
(
rtrescan
PGUID
11
f
t
f
3
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
328
(
rtrescan
PGUID
11
f
t
f
3
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
330
(
btgettuple
PGUID
11
f
t
f
2
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
330
(
btgettuple
PGUID
11
f
t
f
2
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
331
(
btinsert
PGUID
11
f
t
f
2
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
331
(
btinsert
PGUID
11
f
t
f
4
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
332
(
btdelete
PGUID
11
f
t
f
2
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
332
(
btdelete
PGUID
11
f
t
f
2
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
333
(
btbeginscan
PGUID
11
f
t
f
4
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
333
(
btbeginscan
PGUID
11
f
t
f
4
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
334
(
btrescan
PGUID
11
f
t
f
3
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
334
(
btrescan
PGUID
11
f
t
f
3
f
23
"0"
100
0
0
100
foo
bar
));
...
@@ -448,7 +448,7 @@ DATA(insert OID = 438 ( hashsel PGUID 11 f t t 7 f 701 "26 26 21 0 23
...
@@ -448,7 +448,7 @@ DATA(insert OID = 438 ( hashsel PGUID 11 f t t 7 f 701 "26 26 21 0 23
DATA
(
insert
OID
=
439
(
hashnpage
PGUID
11
f
t
t
7
f
701
"26 26 21 0 23 23 26"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
439
(
hashnpage
PGUID
11
f
t
t
7
f
701
"26 26 21 0 23 23 26"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
440
(
hashgettuple
PGUID
11
f
t
f
2
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
440
(
hashgettuple
PGUID
11
f
t
f
2
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
441
(
hashinsert
PGUID
11
f
t
f
2
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
441
(
hashinsert
PGUID
11
f
t
f
4
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
442
(
hashdelete
PGUID
11
f
t
f
2
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
442
(
hashdelete
PGUID
11
f
t
f
2
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
443
(
hashbeginscan
PGUID
11
f
t
f
4
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
443
(
hashbeginscan
PGUID
11
f
t
f
4
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
444
(
hashrescan
PGUID
11
f
t
f
3
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
444
(
hashrescan
PGUID
11
f
t
f
3
f
23
"0"
100
0
0
100
foo
bar
));
...
@@ -574,6 +574,17 @@ DATA(insert OID = 768 ( int4larger PGUID 11 f t f 2 f 23 "23 23" 100 0 0
...
@@ -574,6 +574,17 @@ DATA(insert OID = 768 ( int4larger PGUID 11 f t f 2 f 23 "23 23" 100 0 0
DATA
(
insert
OID
=
769
(
int4smaller
PGUID
11
f
t
f
2
f
23
"23 23"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
769
(
int4smaller
PGUID
11
f
t
f
2
f
23
"23 23"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
770
(
int2larger
PGUID
11
f
t
f
2
f
23
"21 21"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
770
(
int2larger
PGUID
11
f
t
f
2
f
23
"21 21"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
771
(
int2smaller
PGUID
11
f
t
f
2
f
23
"21 21"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
771
(
int2smaller
PGUID
11
f
t
f
2
f
23
"21 21"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
772
(
gistsel
PGUID
11
f
t
t
7
f
701
"26 26 21 0 23 23 26"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
773
(
gistnpage
PGUID
11
f
t
t
7
f
701
"26 26 21 0 23 23 26"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
774
(
gistgettuple
PGUID
11
f
t
f
2
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
775
(
gistinsert
PGUID
11
f
t
f
4
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
776
(
gistdelete
PGUID
11
f
t
f
2
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
777
(
gistbeginscan
PGUID
11
f
t
f
4
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
778
(
gistrescan
PGUID
11
f
t
f
3
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
779
(
gistendscan
PGUID
11
f
t
f
1
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
780
(
gistmarkpos
PGUID
11
f
t
f
1
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
781
(
gistrestrpos
PGUID
11
f
t
f
1
f
23
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
782
(
gistbuild
PGUID
11
f
t
f
9
f
23
"0"
100
0
0
100
foo
bar
));
/* OIDS 800 - 899 */
/* OIDS 800 - 899 */
DATA
(
insert
OID
=
820
(
oidint2in
PGUID
11
f
t
f
1
f
810
"0"
100
0
0
100
foo
bar
));
DATA
(
insert
OID
=
820
(
oidint2in
PGUID
11
f
t
f
1
f
810
"0"
100
0
0
100
foo
bar
));
...
...
src/backend/commands/cluster.c
View file @
a2740a45
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
*
*
*
*
* IDENTIFICATION
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/commands/cluster.c,v 1.
2 1996/08/15 07:39:24
scrappy Exp $
* $Header: /cvsroot/pgsql/src/backend/commands/cluster.c,v 1.
3 1996/08/26 06:30:19
scrappy Exp $
*
*
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*/
*/
...
@@ -316,11 +316,12 @@ copy_index(Oid OIDOldIndex, Oid OIDNewHeap)
...
@@ -316,11 +316,12 @@ copy_index(Oid OIDOldIndex, Oid OIDNewHeap)
index_create
((
NewHeap
->
rd_rel
->
relname
).
data
,
index_create
((
NewHeap
->
rd_rel
->
relname
).
data
,
NewIndexName
,
NewIndexName
,
finfo
,
finfo
,
-
NULL
,
/* type info is in the old index */
Old_pg_index_relation_Form
->
relam
,
Old_pg_index_relation_Form
->
relam
,
natts
,
natts
,
Old_pg_index_Form
->
indkey
,
Old_pg_index_Form
->
indkey
,
Old_pg_index_Form
->
indclass
,
Old_pg_index_Form
->
indclass
,
(
uint16
)
0
,
(
Datum
)
NULL
,
NULL
);
(
uint16
)
0
,
(
Datum
)
NULL
,
NULL
,
Old_pg_index_Form
->
indislossy
);
heap_close
(
OldIndex
);
heap_close
(
OldIndex
);
heap_close
(
NewHeap
);
heap_close
(
NewHeap
);
...
...
src/backend/commands/copy.c
View file @
a2740a45
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
*
*
*
*
* IDENTIFICATION
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.
4 1996/08/24 20:48:14
scrappy Exp $
* $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.
5 1996/08/26 06:30:21
scrappy Exp $
*
*
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*/
*/
...
@@ -527,11 +527,9 @@ CopyFrom(Relation rel, bool binary, bool oids, FILE *fp, char *delim)
...
@@ -527,11 +527,9 @@ CopyFrom(Relation rel, bool binary, bool oids, FILE *fp, char *delim)
&
idatum
,
&
idatum
,
index_nulls
,
index_nulls
,
finfoP
[
i
]);
finfoP
[
i
]);
ituple
=
index_formtuple
(
itupdescArr
[
i
],
&
idatum
,
index_nulls
);
indexRes
=
index_insert
(
index_rels
[
i
],
&
idatum
,
index_nulls
,
ituple
->
t_tid
=
tuple
->
t_ctid
;
&
(
tuple
->
t_ctid
));
indexRes
=
index_insert
(
index_rels
[
i
],
ituple
);
if
(
indexRes
)
pfree
(
indexRes
);
if
(
indexRes
)
pfree
(
indexRes
);
pfree
(
ituple
);
}
}
}
}
...
...
src/backend/commands/defind.c
View file @
a2740a45
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
*
*
*
*
* IDENTIFICATION
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/defind.c,v 1.
3 1996/08/19 01:53:38
scrappy Exp $
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/defind.c,v 1.
4 1996/08/26 06:30:23
scrappy Exp $
*
*
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*/
*/
...
@@ -86,8 +86,9 @@ DefineIndex(char *heapRelationName,
...
@@ -86,8 +86,9 @@ DefineIndex(char *heapRelationName,
Datum
*
parameterA
=
NULL
;
Datum
*
parameterA
=
NULL
;
FuncIndexInfo
fInfo
;
FuncIndexInfo
fInfo
;
List
*
cnfPred
=
NULL
;
List
*
cnfPred
=
NULL
;
bool
lossy
=
FALSE
;
List
*
pl
;
/*
/*
* Handle attributes
* Handle attributes
*/
*/
...
@@ -123,7 +124,19 @@ DefineIndex(char *heapRelationName,
...
@@ -123,7 +124,19 @@ DefineIndex(char *heapRelationName,
/*
/*
* Handle parameters
* Handle parameters
* [param list is now different (NOT USED, really) - ay 10/94]
* [param list is now different (NOT USED, really) - ay 10/94]
*
* WITH clause reinstated to handle lossy indices.
* -- JMH, 7/22/96
*/
*/
foreach
(
pl
,
parameterList
)
{
int
count
;
char
*
ptr
;
ParamString
*
param
=
(
ParamString
*
)
lfirst
(
pl
);
if
(
!
strcasecmp
(
param
->
name
,
"islossy"
))
lossy
=
TRUE
;
}
/*
/*
...
@@ -167,9 +180,10 @@ DefineIndex(char *heapRelationName,
...
@@ -167,9 +180,10 @@ DefineIndex(char *heapRelationName,
index_create
(
heapRelationName
,
index_create
(
heapRelationName
,
indexRelationName
,
indexRelationName
,
&
fInfo
,
accessMethodId
,
&
fInfo
,
NULL
,
accessMethodId
,
numberOfAttributes
,
attributeNumberA
,
numberOfAttributes
,
attributeNumberA
,
classObjectId
,
parameterCount
,
parameterA
,
(
Node
*
)
cnfPred
);
classObjectId
,
parameterCount
,
parameterA
,
(
Node
*
)
cnfPred
,
lossy
);
}
else
{
}
else
{
attributeNumberA
=
attributeNumberA
=
(
AttrNumber
*
)
palloc
(
numberOfAttributes
*
(
AttrNumber
*
)
palloc
(
numberOfAttributes
*
...
@@ -182,8 +196,10 @@ DefineIndex(char *heapRelationName,
...
@@ -182,8 +196,10 @@ DefineIndex(char *heapRelationName,
classObjectId
,
relationId
);
classObjectId
,
relationId
);
index_create
(
heapRelationName
,
indexRelationName
,
NULL
,
index_create
(
heapRelationName
,
indexRelationName
,
NULL
,
((
IndexElem
*
)
lfirst
(
attributeList
))
->
tname
,
accessMethodId
,
numberOfAttributes
,
attributeNumberA
,
accessMethodId
,
numberOfAttributes
,
attributeNumberA
,
classObjectId
,
parameterCount
,
parameterA
,
(
Node
*
)
cnfPred
);
classObjectId
,
parameterCount
,
parameterA
,
(
Node
*
)
cnfPred
,
lossy
);
}
}
}
}
...
...
src/backend/executor/execUtils.c
View file @
a2740a45
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
*
*
*
*
* IDENTIFICATION
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.
1.1.1 1996/07/09 06:21:25
scrappy Exp $
* $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.
2 1996/08/26 06:30:33
scrappy Exp $
*
*
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*/
*/
...
@@ -1025,11 +1025,17 @@ ExecInsertIndexTuples(TupleTableSlot *slot,
...
@@ -1025,11 +1025,17 @@ ExecInsertIndexTuples(TupleTableSlot *slot,
RelationPtr
relationDescs
;
RelationPtr
relationDescs
;
Relation
heapRelation
;
Relation
heapRelation
;
IndexInfo
**
indexInfoArray
;
IndexInfo
**
indexInfoArray
;
IndexInfo
*
indexInfo
;
Node
*
predicate
;
Node
*
predicate
;
bool
satisfied
;
bool
satisfied
;
ExprContext
*
econtext
;
ExprContext
*
econtext
;
IndexTuple
indexTuple
;
InsertIndexResult
result
;
InsertIndexResult
result
;
int
numberOfAttributes
;
AttrNumber
*
keyAttributeNumbers
;
FuncIndexInfoPtr
fInfoP
;
TupleDesc
heapDescriptor
;
Datum
*
datum
;
char
*
nulls
;
heapTuple
=
slot
->
val
;
heapTuple
=
slot
->
val
;
...
@@ -1050,8 +1056,9 @@ ExecInsertIndexTuples(TupleTableSlot *slot,
...
@@ -1050,8 +1056,9 @@ ExecInsertIndexTuples(TupleTableSlot *slot,
econtext
=
NULL
;
econtext
=
NULL
;
for
(
i
=
0
;
i
<
numIndices
;
i
++
)
{
for
(
i
=
0
;
i
<
numIndices
;
i
++
)
{
if
(
relationDescs
[
i
]
==
NULL
)
continue
;
if
(
relationDescs
[
i
]
==
NULL
)
continue
;
predicate
=
indexInfoArray
[
i
]
->
ii_Predicate
;
indexInfo
=
indexInfoArray
[
i
];
predicate
=
indexInfo
->
ii_Predicate
;
if
(
predicate
!=
NULL
)
{
if
(
predicate
!=
NULL
)
{
if
(
econtext
==
NULL
)
{
if
(
econtext
==
NULL
)
{
econtext
=
makeNode
(
ExprContext
);
econtext
=
makeNode
(
ExprContext
);
...
@@ -1063,16 +1070,32 @@ ExecInsertIndexTuples(TupleTableSlot *slot,
...
@@ -1063,16 +1070,32 @@ ExecInsertIndexTuples(TupleTableSlot *slot,
if
(
satisfied
==
false
)
if
(
satisfied
==
false
)
continue
;
continue
;
}
}
/* ----------------
* get information from index info structure
* ----------------
*/
numberOfAttributes
=
indexInfo
->
ii_NumKeyAttributes
;
keyAttributeNumbers
=
indexInfo
->
ii_KeyAttributeNumbers
;
fInfoP
=
indexInfo
->
ii_FuncIndexInfo
;
datum
=
(
Datum
*
)
palloc
(
numberOfAttributes
*
sizeof
*
datum
);
nulls
=
(
char
*
)
palloc
(
numberOfAttributes
*
sizeof
*
nulls
);
heapDescriptor
=
(
TupleDesc
)
RelationGetTupleDescriptor
(
heapRelation
);
FormIndexDatum
(
numberOfAttributes
,
/* num attributes */
keyAttributeNumbers
,
/* array of att nums to extract */
heapTuple
,
/* tuple from base relation */
heapDescriptor
,
/* heap tuple's descriptor */
InvalidBuffer
,
/* buffer associated with heap tuple */
datum
,
/* return: array of attributes */
nulls
,
/* return: array of char's */
fInfoP
);
/* functional index information */
indexTuple
=
ExecFormIndexTuple
(
heapTuple
,
heapRelation
,
relationDescs
[
i
],
indexInfoArray
[
i
]);
indexTuple
->
t_tid
=
(
*
tupleid
);
/* structure assignment */
result
=
index_insert
(
relationDescs
[
i
],
/* index relation */
result
=
index_insert
(
relationDescs
[
i
],
/* index relation */
indexTuple
);
/* index tuple */
datum
,
/* array of heaptuple Datums */
nulls
,
/* info on nulls */
&
(
heapTuple
->
t_ctid
));
/* oid of heap tuple */
/* ----------------
/* ----------------
* keep track of index inserts for debugging
* keep track of index inserts for debugging
...
@@ -1085,7 +1108,6 @@ ExecInsertIndexTuples(TupleTableSlot *slot,
...
@@ -1085,7 +1108,6 @@ ExecInsertIndexTuples(TupleTableSlot *slot,
* ----------------
* ----------------
*/
*/
if
(
result
)
pfree
(
result
);
if
(
result
)
pfree
(
result
);
pfree
(
indexTuple
);
}
}
if
(
econtext
!=
NULL
)
pfree
(
econtext
);
if
(
econtext
!=
NULL
)
pfree
(
econtext
);
}
}
...
...
src/backend/nodes/equalfuncs.c
View file @
a2740a45
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
*
*
*
*
* IDENTIFICATION
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/nodes/equalfuncs.c,v 1.
1.1.1 1996/07/09 06:21:32
scrappy Exp $
* $Header: /cvsroot/pgsql/src/backend/nodes/equalfuncs.c,v 1.
2 1996/08/26 06:30:51
scrappy Exp $
*
*
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*/
*/
...
@@ -523,6 +523,19 @@ _equalEState(EState *a, EState *b)
...
@@ -523,6 +523,19 @@ _equalEState(EState *a, EState *b)
return
(
true
);
return
(
true
);
}
}
static
bool
_equalTargetEntry
(
TargetEntry
*
a
,
TargetEntry
*
b
)
{
if
(
!
equal
(
a
->
resdom
,
b
->
resdom
))
return
(
false
);
if
(
!
equal
(
a
->
fjoin
,
b
->
fjoin
))
return
(
false
);
if
(
!
equal
(
a
->
expr
,
b
->
expr
))
return
(
false
);
return
(
true
);
}
/*
/*
* equal -- are two lists equal?
* equal -- are two lists equal?
...
@@ -582,6 +595,9 @@ equal(void *a, void *b)
...
@@ -582,6 +595,9 @@ equal(void *a, void *b)
case
T_Expr
:
case
T_Expr
:
retval
=
_equalExpr
(
a
,
b
);
retval
=
_equalExpr
(
a
,
b
);
break
;
break
;
case
T_TargetEntry
:
retval
=
_equalTargetEntry
(
a
,
b
);
break
;
case
T_Iter
:
case
T_Iter
:
retval
=
_equalIter
(
a
,
b
);
retval
=
_equalIter
(
a
,
b
);
break
;
break
;
...
...
src/backend/nodes/parsenodes.h
View file @
a2740a45
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
*
*
* Copyright (c) 1994, Regents of the University of California
* Copyright (c) 1994, Regents of the University of California
*
*
* $Id: parsenodes.h,v 1.
4 1996/08/24 20:48:31
scrappy Exp $
* $Id: parsenodes.h,v 1.
5 1996/08/26 06:30:54
scrappy Exp $
*
*
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*/
*/
...
@@ -218,6 +218,7 @@ typedef struct IndexStmt {
...
@@ -218,6 +218,7 @@ typedef struct IndexStmt {
Node
*
whereClause
;
/* qualifications */
Node
*
whereClause
;
/* qualifications */
List
*
rangetable
;
/* range table, filled in
List
*
rangetable
;
/* range table, filled in
by transformStmt() */
by transformStmt() */
bool
*
lossy
;
/* is index lossy? */
}
IndexStmt
;
}
IndexStmt
;
/* ----------------------
/* ----------------------
...
@@ -655,6 +656,7 @@ typedef struct IndexElem {
...
@@ -655,6 +656,7 @@ typedef struct IndexElem {
char
*
name
;
/* name of index */
char
*
name
;
/* name of index */
List
*
args
;
/* if not NULL, function index */
List
*
args
;
/* if not NULL, function index */
char
*
class
;
char
*
class
;
TypeName
*
tname
;
/* type of index's keys (optional) */
}
IndexElem
;
}
IndexElem
;
/*
/*
...
...
src/backend/optimizer/plan/createplan.c
View file @
a2740a45
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
*
*
*
*
* IDENTIFICATION
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.
1.1.1 1996/07/09 06:21:37
scrappy Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.
2 1996/08/26 06:31:15
scrappy Exp $
*
*
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*/
*/
...
@@ -316,8 +316,11 @@ create_indexscan_node(IndexPath *best_path,
...
@@ -316,8 +316,11 @@ create_indexscan_node(IndexPath *best_path,
List
*
indxqual
=
NIL
;
List
*
indxqual
=
NIL
;
List
*
qpqual
=
NIL
;
List
*
qpqual
=
NIL
;
List
*
fixed_indxqual
=
NIL
;
List
*
fixed_indxqual
=
NIL
;
List
*
ixid
;
IndexScan
*
scan_node
=
(
IndexScan
*
)
NULL
;
IndexScan
*
scan_node
=
(
IndexScan
*
)
NULL
;
bool
lossy
=
FALSE
;
HeapTuple
indexTuple
;
IndexTupleForm
index
;
/*
/*
* If an 'or' clause is to be used with this index, the indxqual
* If an 'or' clause is to be used with this index, the indxqual
...
@@ -340,15 +343,42 @@ create_indexscan_node(IndexPath *best_path,
...
@@ -340,15 +343,42 @@ create_indexscan_node(IndexPath *best_path,
NIL
);
NIL
);
}
}
/* check and see if any indices are lossy */
foreach
(
ixid
,
best_path
->
indexid
)
{
indexTuple
=
SearchSysCacheTuple
(
INDEXRELID
,
ObjectIdGetDatum
(
lfirsti
(
ixid
)),
0
,
0
,
0
);
if
(
!
HeapTupleIsValid
(
indexTuple
))
elog
(
WARN
,
"create_plan: index %d not found"
,
lfirsti
(
ixid
));
index
=
(
IndexTupleForm
)
GETSTRUCT
(
indexTuple
);
if
(
index
->
indislossy
)
lossy
=
TRUE
;
}
/*
/*
* The qpqual field contains all restrictions except the indxqual.
* The qpqual field contains all restrictions not automatically handled
* by the index. Note that for non-lossy indices, the predicates
* in the indxqual are handled by the index, while for lossy indices
* the indxqual predicates need to be double-checked after the
* index fetches the best-guess tuples.
*/
*/
if
(
or_clause
((
Node
*
)
index_clause
))
if
(
or_clause
((
Node
*
)
index_clause
))
{
qpqual
=
set_difference
(
scan_clauses
,
qpqual
=
set_difference
(
scan_clauses
,
lcons
(
index_clause
,
NIL
));
lcons
(
index_clause
,
NIL
));
else
if
(
lossy
)
qpqual
=
nconc
(
qpqual
,
lcons
((
List
*
)
copyObject
(
index_clause
),
NIL
));
}
else
{
qpqual
=
set_difference
(
scan_clauses
,
lfirst
(
indxqual
));
qpqual
=
set_difference
(
scan_clauses
,
lfirst
(
indxqual
));
if
(
lossy
)
qpqual
=
nconc
(
qpqual
,
(
List
*
)
copyObject
(
lfirst
(
indxqual
)));
}
fixed_indxqual
=
fixed_indxqual
=
(
List
*
)
fix_indxqual_references
((
Node
*
)
indxqual
,(
Path
*
)
best_path
);
(
List
*
)
fix_indxqual_references
((
Node
*
)
indxqual
,(
Path
*
)
best_path
);
...
...
src/backend/parser/gram.y
View file @
a2740a45
...
@@ -10,7 +10,7 @@
...
@@ -10,7 +10,7 @@
*
*
*
*
* IDENTIFICATION
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.
8 1996/08/24 20:48:44
scrappy Exp $
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.
9 1996/08/26 06:31:31
scrappy Exp $
*
*
* HISTORY
* HISTORY
* AUTHOR DATE MAJOR EVENT
* AUTHOR DATE MAJOR EVENT
...
@@ -140,7 +140,7 @@ static Node *makeA_Expr(int op, char *opname, Node *lexpr, Node *rexpr);
...
@@ -140,7 +140,7 @@ static Node *makeA_Expr(int op, char *opname, Node *lexpr, Node *rexpr);
%type <pstmt> purge_quals
%type <pstmt> purge_quals
%type <astmt> insert_rest
%type <astmt> insert_rest
%type <typnam> Typename, typname
%type <typnam> Typename, typname
, opt_type
%type <coldef> columnDef
%type <coldef> columnDef
%type <defelt> def_elem
%type <defelt> def_elem
%type <node> def_arg, columnElem, exprElem, where_clause,
%type <node> def_arg, columnElem, exprElem, where_clause,
...
@@ -658,7 +658,7 @@ opt_portal_name: IN name { $$ = $2;}
...
@@ -658,7 +658,7 @@ opt_portal_name: IN name { $$ = $2;}
*****************************************************************************/
*****************************************************************************/
IndexStmt: CREATE INDEX index_name ON relation_name
IndexStmt: CREATE INDEX index_name ON relation_name
access_method_clause '(' index_params ')'
access_method_clause '(' index_params ')'
opt_with
{
{
/* should check that access_method is valid,
/* should check that access_method is valid,
etc ... but doesn't */
etc ... but doesn't */
...
@@ -667,7 +667,7 @@ IndexStmt: CREATE INDEX index_name ON relation_name
...
@@ -667,7 +667,7 @@ IndexStmt: CREATE INDEX index_name ON relation_name
n->relname = $5;
n->relname = $5;
n->accessMethod = $6;
n->accessMethod = $6;
n->indexParams = $8;
n->indexParams = $8;
n->withClause =
NIL
;
n->withClause =
$11
;
n->whereClause = NULL;
n->whereClause = NULL;
$$ = (Node *)n;
$$ = (Node *)n;
}
}
...
@@ -1473,24 +1473,30 @@ index_params: index_elem { $$ = lcons($1,NIL); }
...
@@ -1473,24 +1473,30 @@ index_params: index_elem { $$ = lcons($1,NIL); }
{ $$ = lcons($1, NIL); }
{ $$ = lcons($1, NIL); }
;*/
;*/
func_index: name '(' name_list ')' opt_class
func_index: name '(' name_list ')' opt_
type opt_
class
{
{
$$ = makeNode(IndexElem);
$$ = makeNode(IndexElem);
$$->name = $1;
$$->name = $1;
$$->args = $3;
$$->args = $3;
$$->class = $5;
$$->class = $6;
$$->tname = $5;
}
}
;
;
index_elem: attr_name opt_class
index_elem: attr_name opt_
type opt_
class
{
{
$$ = makeNode(IndexElem);
$$ = makeNode(IndexElem);
$$->name = $1;
$$->name = $1;
$$->args = NIL;
$$->args = NIL;
$$->class = $2;
$$->class = $3;
$$->tname = $2;
}
}
;
;
opt_type: ':' Typename { $$ = $2;}
| /*EMPTY*/ { $$ = NULL;}
;
opt_class: class
opt_class: class
| WITH class { $$ = $2; }
| WITH class { $$ = $2; }
| /*EMPTY*/ { $$ = NULL; }
| /*EMPTY*/ { $$ = NULL; }
...
...
src/backend/storage/large_object/inv_api.c
View file @
a2740a45
...
@@ -8,7 +8,7 @@
...
@@ -8,7 +8,7 @@
*
*
*
*
* IDENTIFICATION
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/storage/large_object/inv_api.c,v 1.
1.1.1 1996/07/09 06:21:5
5 scrappy Exp $
* $Header: /cvsroot/pgsql/src/backend/storage/large_object/inv_api.c,v 1.
2 1996/08/26 06:31:4
5 scrappy Exp $
*
*
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*/
*/
...
@@ -157,9 +157,9 @@ inv_create(int flags)
...
@@ -157,9 +157,9 @@ inv_create(int flags)
attNums
[
0
]
=
1
;
attNums
[
0
]
=
1
;
classObjectId
[
0
]
=
INT4_OPS_OID
;
classObjectId
[
0
]
=
INT4_OPS_OID
;
index_create
(
objname
,
indname
,
NULL
,
BTREE_AM_OID
,
index_create
(
objname
,
indname
,
NULL
,
NULL
,
BTREE_AM_OID
,
1
,
&
attNums
[
0
],
&
classObjectId
[
0
],
1
,
&
attNums
[
0
],
&
classObjectId
[
0
],
0
,
(
Datum
)
NULL
,
NULL
);
0
,
(
Datum
)
NULL
,
NULL
,
FALSE
);
/* make the index visible in this transaction */
/* make the index visible in this transaction */
CommandCounterIncrement
();
CommandCounterIncrement
();
...
@@ -996,23 +996,16 @@ inv_newtuple(LargeObjectDesc *obj_desc,
...
@@ -996,23 +996,16 @@ inv_newtuple(LargeObjectDesc *obj_desc,
static
void
static
void
inv_indextup
(
LargeObjectDesc
*
obj_desc
,
HeapTuple
htup
)
inv_indextup
(
LargeObjectDesc
*
obj_desc
,
HeapTuple
htup
)
{
{
IndexTuple
itup
;
InsertIndexResult
res
;
InsertIndexResult
res
;
Datum
v
[
1
];
Datum
v
[
1
];
char
n
[
1
];
char
n
[
1
];
n
[
0
]
=
' '
;
n
[
0
]
=
' '
;
v
[
0
]
=
Int32GetDatum
(
obj_desc
->
highbyte
);
v
[
0
]
=
Int32GetDatum
(
obj_desc
->
highbyte
);
itup
=
index_formtuple
(
obj_desc
->
idesc
,
&
v
[
0
],
&
n
[
0
]);
res
=
index_insert
(
obj_desc
->
index_r
,
&
v
[
0
],
&
n
[
0
],
&
(
htup
->
t_ctid
));
memmove
((
char
*
)
&
(
itup
->
t_tid
),
(
char
*
)
&
(
htup
->
t_ctid
),
sizeof
(
ItemPointerData
));
res
=
index_insert
(
obj_desc
->
index_r
,
itup
);
if
(
res
)
if
(
res
)
pfree
(
res
);
pfree
(
res
);
pfree
(
itup
);
}
}
/*
/*
...
...
src/backend/utils/adt/selfuncs.c
View file @
a2740a45
...
@@ -12,7 +12,7 @@
...
@@ -12,7 +12,7 @@
*
*
*
*
* IDENTIFICATION
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.
2 1996/07/31 18:48:1
6 scrappy Exp $
* $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.
3 1996/08/26 06:32:0
6 scrappy Exp $
*
*
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*/
*/
...
@@ -583,3 +583,29 @@ rtnpage(Oid operatorObjectId,
...
@@ -583,3 +583,29 @@ rtnpage(Oid operatorObjectId,
return
(
btreenpage
(
operatorObjectId
,
indrelid
,
attributeNumber
,
return
(
btreenpage
(
operatorObjectId
,
indrelid
,
attributeNumber
,
constValue
,
constFlag
,
nIndexKeys
,
indexrelid
));
constValue
,
constFlag
,
nIndexKeys
,
indexrelid
));
}
}
float64
gistsel
(
Oid
operatorObjectId
,
Oid
indrelid
,
AttrNumber
attributeNumber
,
char
*
constValue
,
int32
constFlag
,
int32
nIndexKeys
,
Oid
indexrelid
)
{
return
(
btreesel
(
operatorObjectId
,
indrelid
,
attributeNumber
,
constValue
,
constFlag
,
nIndexKeys
,
indexrelid
));
}
float64
gistnpage
(
Oid
operatorObjectId
,
Oid
indrelid
,
AttrNumber
attributeNumber
,
char
*
constValue
,
int32
constFlag
,
int32
nIndexKeys
,
Oid
indexrelid
)
{
return
(
btreenpage
(
operatorObjectId
,
indrelid
,
attributeNumber
,
constValue
,
constFlag
,
nIndexKeys
,
indexrelid
));
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment