Commit be8300b1 authored by Vadim B. Mikheev's avatar Vadim B. Mikheev

Use Snapshot in heap access methods.

parent f7f989c9
...@@ -170,7 +170,7 @@ gistbuild(Relation heap, ...@@ -170,7 +170,7 @@ gistbuild(Relation heap,
econtext = NULL; econtext = NULL;
} }
#endif /* OMIT_PARTIAL_INDEX */ #endif /* OMIT_PARTIAL_INDEX */
scan = heap_beginscan(heap, 0, false, 0, (ScanKey) NULL); scan = heap_beginscan(heap, 0, SnapshotNow, 0, (ScanKey) NULL);
htup = heap_getnext(scan, 0, &buffer); htup = heap_getnext(scan, 0, &buffer);
/* int the tuples as we insert them */ /* int the tuples as we insert them */
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/access/hash/hash.c,v 1.18 1998/02/26 04:29:28 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/access/hash/hash.c,v 1.19 1998/07/27 19:37:35 vadim Exp $
* *
* NOTES * NOTES
* This file contains only the public interface routines. * This file contains only the public interface routines.
...@@ -121,7 +121,7 @@ hashbuild(Relation heap, ...@@ -121,7 +121,7 @@ hashbuild(Relation heap,
#endif /* OMIT_PARTIAL_INDEX */ #endif /* OMIT_PARTIAL_INDEX */
/* start a heap scan */ /* start a heap scan */
hscan = heap_beginscan(heap, 0, false, 0, (ScanKey) NULL); hscan = heap_beginscan(heap, 0, SnapshotNow, 0, (ScanKey) NULL);
htup = heap_getnext(hscan, 0, &buffer); htup = heap_getnext(hscan, 0, &buffer);
/* build the index */ /* build the index */
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.30 1998/07/20 16:56:53 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.31 1998/07/27 19:37:36 vadim Exp $
* *
* *
* INTERFACE ROUTINES * INTERFACE ROUTINES
...@@ -209,7 +209,7 @@ heapgettup(Relation relation, ...@@ -209,7 +209,7 @@ heapgettup(Relation relation,
ItemPointer tid, ItemPointer tid,
int dir, int dir,
Buffer *b, Buffer *b,
bool seeself, Snapshot snapshot,
int nkeys, int nkeys,
ScanKey key) ScanKey key)
{ {
...@@ -250,9 +250,9 @@ heapgettup(Relation relation, ...@@ -250,9 +250,9 @@ heapgettup(Relation relation,
} }
elog(DEBUG, "heapgettup(..., b=0x%x, nkeys=%d, key=0x%x", b, nkeys, key); elog(DEBUG, "heapgettup(..., b=0x%x, nkeys=%d, key=0x%x", b, nkeys, key);
elog(DEBUG, "heapgettup: relation(%c)=`%s', %s", elog(DEBUG, "heapgettup: relation(%c)=`%s', %p",
relation->rd_rel->relkind, &relation->rd_rel->relname, relation->rd_rel->relkind, &relation->rd_rel->relname,
(seeself == true) ? "SeeSelf" : "NoSeeSelf"); snapshot);
#endif /* !defined(HEAPDEBUGALL) */ #endif /* !defined(HEAPDEBUGALL) */
if (!ItemPointerIsValid(tid)) if (!ItemPointerIsValid(tid))
...@@ -402,7 +402,7 @@ heapgettup(Relation relation, ...@@ -402,7 +402,7 @@ heapgettup(Relation relation,
* ---------------- * ----------------
*/ */
HeapTupleSatisfies(lpp, relation, *b, (PageHeader) dp, HeapTupleSatisfies(lpp, relation, *b, (PageHeader) dp,
seeself, nkeys, key, rtup); snapshot, nkeys, key, rtup);
if (rtup != NULL) if (rtup != NULL)
{ {
ItemPointer iptr = &(rtup->t_ctid); ItemPointer iptr = &(rtup->t_ctid);
...@@ -580,7 +580,7 @@ heap_close(Relation relation) ...@@ -580,7 +580,7 @@ heap_close(Relation relation)
HeapScanDesc HeapScanDesc
heap_beginscan(Relation relation, heap_beginscan(Relation relation,
int atend, int atend,
bool seeself, Snapshot snapshot,
unsigned nkeys, unsigned nkeys,
ScanKey key) ScanKey key)
{ {
...@@ -608,7 +608,7 @@ heap_beginscan(Relation relation, ...@@ -608,7 +608,7 @@ heap_beginscan(Relation relation,
/* XXX someday assert SelfTimeQual if relkind == RELKIND_UNCATALOGED */ /* XXX someday assert SelfTimeQual if relkind == RELKIND_UNCATALOGED */
if (relation->rd_rel->relkind == RELKIND_UNCATALOGED) if (relation->rd_rel->relkind == RELKIND_UNCATALOGED)
seeself = true; snapshot = SnapshotSelf;
/* ---------------- /* ----------------
* increment relation ref count while scanning relation * increment relation ref count while scanning relation
...@@ -639,7 +639,7 @@ heap_beginscan(Relation relation, ...@@ -639,7 +639,7 @@ heap_beginscan(Relation relation,
initsdesc(sdesc, relation, atend, nkeys, key); initsdesc(sdesc, relation, atend, nkeys, key);
sdesc->rs_atend = atend; sdesc->rs_atend = atend;
sdesc->rs_seeself = seeself; sdesc->rs_snapshot = snapshot;
sdesc->rs_nkeys = (short) nkeys; sdesc->rs_nkeys = (short) nkeys;
return (sdesc); return (sdesc);
...@@ -856,7 +856,7 @@ heap_getnext(HeapScanDesc scandesc, ...@@ -856,7 +856,7 @@ heap_getnext(HeapScanDesc scandesc,
iptr, iptr,
-1, -1,
&(sdesc->rs_cbuf), &(sdesc->rs_cbuf),
sdesc->rs_seeself, sdesc->rs_snapshot,
sdesc->rs_nkeys, sdesc->rs_nkeys,
sdesc->rs_key); sdesc->rs_key);
} }
...@@ -943,7 +943,7 @@ heap_getnext(HeapScanDesc scandesc, ...@@ -943,7 +943,7 @@ heap_getnext(HeapScanDesc scandesc,
iptr, iptr,
1, 1,
&sdesc->rs_cbuf, &sdesc->rs_cbuf,
sdesc->rs_seeself, sdesc->rs_snapshot,
sdesc->rs_nkeys, sdesc->rs_nkeys,
sdesc->rs_key); sdesc->rs_key);
} }
...@@ -988,7 +988,7 @@ heap_getnext(HeapScanDesc scandesc, ...@@ -988,7 +988,7 @@ heap_getnext(HeapScanDesc scandesc,
*/ */
HeapTuple HeapTuple
heap_fetch(Relation relation, heap_fetch(Relation relation,
bool seeself, Snapshot snapshot,
ItemPointer tid, ItemPointer tid,
Buffer *b) Buffer *b)
{ {
...@@ -1050,7 +1050,7 @@ heap_fetch(Relation relation, ...@@ -1050,7 +1050,7 @@ heap_fetch(Relation relation,
*/ */
HeapTupleSatisfies(lp, relation, buffer, dp, HeapTupleSatisfies(lp, relation, buffer, dp,
seeself, 0, (ScanKey) NULL, tuple); snapshot, 0, (ScanKey) NULL, tuple);
if (tuple == NULL) if (tuple == NULL)
{ {
...@@ -1447,7 +1447,7 @@ heap_markpos(HeapScanDesc sdesc) ...@@ -1447,7 +1447,7 @@ heap_markpos(HeapScanDesc sdesc)
(ItemPointer) NULL : &sdesc->rs_ctup->t_ctid, (ItemPointer) NULL : &sdesc->rs_ctup->t_ctid,
-1, -1,
&sdesc->rs_pbuf, &sdesc->rs_pbuf,
sdesc->rs_seeself, sdesc->rs_snapshot,
sdesc->rs_nkeys, sdesc->rs_nkeys,
sdesc->rs_key); sdesc->rs_key);
...@@ -1461,7 +1461,7 @@ heap_markpos(HeapScanDesc sdesc) ...@@ -1461,7 +1461,7 @@ heap_markpos(HeapScanDesc sdesc)
(ItemPointer) NULL : &sdesc->rs_ctup->t_ctid, (ItemPointer) NULL : &sdesc->rs_ctup->t_ctid,
1, 1,
&sdesc->rs_nbuf, &sdesc->rs_nbuf,
sdesc->rs_seeself, sdesc->rs_snapshot,
sdesc->rs_nkeys, sdesc->rs_nkeys,
sdesc->rs_key); sdesc->rs_key);
} }
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/access/index/Attic/istrat.c,v 1.20 1998/06/15 19:27:54 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/access/index/Attic/istrat.c,v 1.21 1998/07/27 19:37:37 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -501,7 +501,7 @@ OperatorRelationFillScanKeyEntry(Relation operatorRelation, ...@@ -501,7 +501,7 @@ OperatorRelationFillScanKeyEntry(Relation operatorRelation,
F_OIDEQ, F_OIDEQ,
ObjectIdGetDatum(operatorObjectId)); ObjectIdGetDatum(operatorObjectId));
scan = heap_beginscan(operatorRelation, false, false, scan = heap_beginscan(operatorRelation, false, SnapshotNow,
1, &scanKeyData); 1, &scanKeyData);
tuple = heap_getnext(scan, false, (Buffer *) NULL); tuple = heap_getnext(scan, false, (Buffer *) NULL);
...@@ -558,7 +558,7 @@ IndexSupportInitialize(IndexStrategy indexStrategy, ...@@ -558,7 +558,7 @@ IndexSupportInitialize(IndexStrategy indexStrategy,
ObjectIdGetDatum(indexObjectId)); ObjectIdGetDatum(indexObjectId));
relation = heap_openr(IndexRelationName); relation = heap_openr(IndexRelationName);
scan = heap_beginscan(relation, false, false, 1, entry); scan = heap_beginscan(relation, false, SnapshotNow, 1, entry);
tuple = heap_getnext(scan, 0, (Buffer *) NULL); tuple = heap_getnext(scan, 0, (Buffer *) NULL);
if (!HeapTupleIsValid(tuple)) if (!HeapTupleIsValid(tuple))
elog(ERROR, "IndexSupportInitialize: corrupted catalogs"); elog(ERROR, "IndexSupportInitialize: corrupted catalogs");
...@@ -618,7 +618,7 @@ IndexSupportInitialize(IndexStrategy indexStrategy, ...@@ -618,7 +618,7 @@ IndexSupportInitialize(IndexStrategy indexStrategy,
entry[1].sk_argument = entry[1].sk_argument =
ObjectIdGetDatum(operatorClassObjectId[attributeNumber - 1]); ObjectIdGetDatum(operatorClassObjectId[attributeNumber - 1]);
scan = heap_beginscan(relation, false, false, 2, entry); scan = heap_beginscan(relation, false, SnapshotNow, 2, entry);
while (tuple = heap_getnext(scan, 0, (Buffer *) NULL), while (tuple = heap_getnext(scan, 0, (Buffer *) NULL),
HeapTupleIsValid(tuple)) HeapTupleIsValid(tuple))
...@@ -661,7 +661,7 @@ IndexSupportInitialize(IndexStrategy indexStrategy, ...@@ -661,7 +661,7 @@ IndexSupportInitialize(IndexStrategy indexStrategy,
for (strategy = 1; strategy <= maxStrategyNumber; strategy++) for (strategy = 1; strategy <= maxStrategyNumber; strategy++)
ScanKeyEntrySetIllegal(StrategyMapGetScanKeyEntry(map, strategy)); ScanKeyEntrySetIllegal(StrategyMapGetScanKeyEntry(map, strategy));
scan = heap_beginscan(relation, false, false, 2, entry); scan = heap_beginscan(relation, false, SnapshotNow, 2, entry);
while (tuple = heap_getnext(scan, 0, (Buffer *) NULL), while (tuple = heap_getnext(scan, 0, (Buffer *) NULL),
HeapTupleIsValid(tuple)) HeapTupleIsValid(tuple))
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.26 1998/06/15 19:27:55 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.27 1998/07/27 19:37:39 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -120,7 +120,7 @@ _bt_doinsert(Relation rel, BTItem btitem, bool index_is_unique, Relation heapRel ...@@ -120,7 +120,7 @@ _bt_doinsert(Relation rel, BTItem btitem, bool index_is_unique, Relation heapRel
{ /* they're equal */ { /* they're equal */
btitem = (BTItem) PageGetItem(page, PageGetItemId(page, offset)); btitem = (BTItem) PageGetItem(page, PageGetItemId(page, offset));
itup = &(btitem->bti_itup); itup = &(btitem->bti_itup);
htup = heap_fetch(heapRel, true, &(itup->t_tid), NULL); htup = heap_fetch(heapRel, SnapshotSelf, &(itup->t_tid), NULL);
if (htup != (HeapTuple) NULL) if (htup != (HeapTuple) NULL)
{ /* it is a duplicate */ { /* it is a duplicate */
elog(ERROR, "Cannot insert a duplicate key into a unique index"); elog(ERROR, "Cannot insert a duplicate key into a unique index");
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtree.c,v 1.26 1998/06/15 19:27:56 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtree.c,v 1.27 1998/07/27 19:37:40 vadim Exp $
* *
* NOTES * NOTES
* This file contains only the public interface routines. * This file contains only the public interface routines.
...@@ -153,7 +153,7 @@ btbuild(Relation heap, ...@@ -153,7 +153,7 @@ btbuild(Relation heap,
#endif /* OMIT_PARTIAL_INDEX */ #endif /* OMIT_PARTIAL_INDEX */
/* start a heap scan */ /* start a heap scan */
hscan = heap_beginscan(heap, 0, false, 0, (ScanKey) NULL); hscan = heap_beginscan(heap, 0, SnapshotNow, 0, (ScanKey) NULL);
htup = heap_getnext(hscan, 0, &buffer); htup = heap_getnext(hscan, 0, &buffer);
/* build the index */ /* build the index */
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtree.c,v 1.24 1998/06/15 19:28:01 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtree.c,v 1.25 1998/07/27 19:37:41 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -164,7 +164,7 @@ rtbuild(Relation heap, ...@@ -164,7 +164,7 @@ rtbuild(Relation heap,
slot = NULL; slot = NULL;
} }
#endif /* OMIT_PARTIAL_INDEX */ #endif /* OMIT_PARTIAL_INDEX */
scan = heap_beginscan(heap, 0, false, 0, (ScanKey) NULL); scan = heap_beginscan(heap, 0, SnapshotNow, 0, (ScanKey) NULL);
htup = heap_getnext(scan, 0, &buffer); htup = heap_getnext(scan, 0, &buffer);
/* count the tuples as we insert them */ /* count the tuples as we insert them */
......
...@@ -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
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.46 1998/07/26 04:30:19 scrappy Exp $ * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.47 1998/07/27 19:37:43 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -41,13 +41,8 @@ ...@@ -41,13 +41,8 @@
#include "catalog/catname.h" #include "catalog/catname.h"
#include "catalog/index.h" #include "catalog/index.h"
#include "catalog/pg_am.h" #include "catalog/pg_am.h"
#ifdef MULTIBYTE
#include "catalog/pg_attribute_mb.h"
#include "catalog/pg_class_mb.h"
#else
#include "catalog/pg_attribute.h" #include "catalog/pg_attribute.h"
#include "catalog/pg_class.h" #include "catalog/pg_class.h"
#endif
#include "catalog/pg_type.h" #include "catalog/pg_type.h"
#include "executor/execdesc.h" #include "executor/execdesc.h"
#include "executor/hashjoin.h" #include "executor/hashjoin.h"
...@@ -464,14 +459,14 @@ boot_openrel(char *relname) ...@@ -464,14 +459,14 @@ boot_openrel(char *relname)
{ {
StartPortalAllocMode(DefaultAllocMode, 0); StartPortalAllocMode(DefaultAllocMode, 0);
rdesc = heap_openr(TypeRelationName); rdesc = heap_openr(TypeRelationName);
sdesc = heap_beginscan(rdesc, 0, false, 0, (ScanKey) NULL); sdesc = heap_beginscan(rdesc, 0, SnapshotNow, 0, (ScanKey) NULL);
for (i = 0; PointerIsValid(tup = heap_getnext(sdesc, 0, (Buffer *) NULL)); ++i); for (i = 0; PointerIsValid(tup = heap_getnext(sdesc, 0, (Buffer *) NULL)); ++i);
heap_endscan(sdesc); heap_endscan(sdesc);
app = Typ = ALLOC(struct typmap *, i + 1); app = Typ = ALLOC(struct typmap *, i + 1);
while (i-- > 0) while (i-- > 0)
*app++ = ALLOC(struct typmap, 1); *app++ = ALLOC(struct typmap, 1);
*app = (struct typmap *) NULL; *app = (struct typmap *) NULL;
sdesc = heap_beginscan(rdesc, 0, false, 0, (ScanKey) NULL); sdesc = heap_beginscan(rdesc, 0, SnapshotNow, 0, (ScanKey) NULL);
app = Typ; app = Typ;
while (PointerIsValid(tup = heap_getnext(sdesc, 0, (Buffer *) NULL))) while (PointerIsValid(tup = heap_getnext(sdesc, 0, (Buffer *) NULL)))
{ {
...@@ -817,7 +812,7 @@ gettype(char *type) ...@@ -817,7 +812,7 @@ gettype(char *type)
if (DebugMode) if (DebugMode)
printf("bootstrap.c: External Type: %s\n", type); printf("bootstrap.c: External Type: %s\n", type);
rdesc = heap_openr(TypeRelationName); rdesc = heap_openr(TypeRelationName);
sdesc = heap_beginscan(rdesc, 0, false, 0, (ScanKey) NULL); sdesc = heap_beginscan(rdesc, 0, SnapshotNow, 0, (ScanKey) NULL);
i = 0; i = 0;
while (PointerIsValid(tup = heap_getnext(sdesc, 0, (Buffer *) NULL))) while (PointerIsValid(tup = heap_getnext(sdesc, 0, (Buffer *) NULL)))
++i; ++i;
...@@ -826,7 +821,7 @@ gettype(char *type) ...@@ -826,7 +821,7 @@ gettype(char *type)
while (i-- > 0) while (i-- > 0)
*app++ = ALLOC(struct typmap, 1); *app++ = ALLOC(struct typmap, 1);
*app = (struct typmap *) NULL; *app = (struct typmap *) NULL;
sdesc = heap_beginscan(rdesc, 0, false, 0, (ScanKey) NULL); sdesc = heap_beginscan(rdesc, 0, SnapshotNow, 0, (ScanKey) NULL);
app = Typ; app = Typ;
while (PointerIsValid(tup = heap_getnext(sdesc, 0, (Buffer *) NULL))) while (PointerIsValid(tup = heap_getnext(sdesc, 0, (Buffer *) NULL)))
{ {
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/catalog/aclchk.c,v 1.11 1998/06/15 19:28:06 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/catalog/aclchk.c,v 1.12 1998/07/27 19:37:45 vadim Exp $
* *
* NOTES * NOTES
* See acl.h. * See acl.h.
...@@ -126,7 +126,7 @@ ChangeAcl(char *relname, ...@@ -126,7 +126,7 @@ ChangeAcl(char *relname,
relkey[0].sk_argument = NameGetDatum(relname); relkey[0].sk_argument = NameGetDatum(relname);
hsdp = heap_beginscan(relation, hsdp = heap_beginscan(relation,
0, 0,
false, SnapshotNow,
(unsigned) 1, (unsigned) 1,
relkey); relkey);
htp = heap_getnext(hsdp, 0, &buffer); htp = heap_getnext(hsdp, 0, &buffer);
...@@ -482,7 +482,7 @@ pg_aclcheck(char *relname, char *usename, AclMode mode) ...@@ -482,7 +482,7 @@ pg_aclcheck(char *relname, char *usename, AclMode mode)
&relkey[0].sk_func, &relkey[0].sk_func,
&relkey[0].sk_nargs); &relkey[0].sk_nargs);
relkey[0].sk_argument = NameGetDatum(relname); relkey[0].sk_argument = NameGetDatum(relname);
hsdp = heap_beginscan(relation, 0, false, 1, relkey); hsdp = heap_beginscan(relation, 0, SnapshotNow, 1, relkey);
htp = heap_getnext(hsdp, 0, (Buffer *) 0); htp = heap_getnext(hsdp, 0, (Buffer *) 0);
if (HeapTupleIsValid(htp) && if (HeapTupleIsValid(htp) &&
!heap_attisnull(htp, Anum_pg_class_relacl)) !heap_attisnull(htp, Anum_pg_class_relacl))
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.54 1998/07/20 19:21:41 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.55 1998/07/27 19:37:46 vadim Exp $
* *
* INTERFACE ROUTINES * INTERFACE ROUTINES
* heap_create() - Create an uncataloged heap relation * heap_create() - Create an uncataloged heap relation
...@@ -502,7 +502,7 @@ RelationAlreadyExists(Relation pg_class_desc, char relname[]) ...@@ -502,7 +502,7 @@ RelationAlreadyExists(Relation pg_class_desc, char relname[])
*/ */
pg_class_scan = heap_beginscan(pg_class_desc, pg_class_scan = heap_beginscan(pg_class_desc,
0, 0,
false, SnapshotNow,
1, 1,
&key); &key);
...@@ -896,7 +896,7 @@ RelationRemoveInheritance(Relation relation) ...@@ -896,7 +896,7 @@ RelationRemoveInheritance(Relation relation)
scan = heap_beginscan(catalogRelation, scan = heap_beginscan(catalogRelation,
false, false,
false, SnapshotNow,
1, 1,
&entry); &entry);
...@@ -924,7 +924,7 @@ RelationRemoveInheritance(Relation relation) ...@@ -924,7 +924,7 @@ RelationRemoveInheritance(Relation relation)
scan = heap_beginscan(catalogRelation, scan = heap_beginscan(catalogRelation,
false, false,
false, SnapshotNow,
1, 1,
&entry); &entry);
...@@ -950,7 +950,7 @@ RelationRemoveInheritance(Relation relation) ...@@ -950,7 +950,7 @@ RelationRemoveInheritance(Relation relation)
scan = heap_beginscan(catalogRelation, scan = heap_beginscan(catalogRelation,
false, false,
false, SnapshotNow,
1, 1,
&entry); &entry);
...@@ -987,7 +987,7 @@ RelationRemoveIndexes(Relation relation) ...@@ -987,7 +987,7 @@ RelationRemoveIndexes(Relation relation)
scan = heap_beginscan(indexRelation, scan = heap_beginscan(indexRelation,
false, false,
false, SnapshotNow,
1, 1,
&entry); &entry);
...@@ -1033,7 +1033,7 @@ DeletePgRelationTuple(Relation rdesc) ...@@ -1033,7 +1033,7 @@ DeletePgRelationTuple(Relation rdesc)
pg_class_scan = heap_beginscan(pg_class_desc, pg_class_scan = heap_beginscan(pg_class_desc,
0, 0,
false, SnapshotNow,
1, 1,
&key); &key);
...@@ -1097,7 +1097,7 @@ DeletePgAttributeTuples(Relation rdesc) ...@@ -1097,7 +1097,7 @@ DeletePgAttributeTuples(Relation rdesc)
pg_attribute_scan = heap_beginscan(pg_attribute_desc, pg_attribute_scan = heap_beginscan(pg_attribute_desc,
0, 0,
false, SnapshotNow,
1, 1,
&key); &key);
...@@ -1166,7 +1166,7 @@ DeletePgTypeTuple(Relation rdesc) ...@@ -1166,7 +1166,7 @@ DeletePgTypeTuple(Relation rdesc)
pg_type_scan = heap_beginscan(pg_type_desc, pg_type_scan = heap_beginscan(pg_type_desc,
0, 0,
false, SnapshotNow,
1, 1,
&key); &key);
...@@ -1202,7 +1202,7 @@ DeletePgTypeTuple(Relation rdesc) ...@@ -1202,7 +1202,7 @@ DeletePgTypeTuple(Relation rdesc)
pg_attribute_scan = heap_beginscan(pg_attribute_desc, pg_attribute_scan = heap_beginscan(pg_attribute_desc,
0, 0,
false, SnapshotNow,
1, 1,
&attkey); &attkey);
...@@ -1646,7 +1646,7 @@ RemoveAttrDefault(Relation rel) ...@@ -1646,7 +1646,7 @@ RemoveAttrDefault(Relation rel)
RelationSetLockForWrite(adrel); RelationSetLockForWrite(adrel);
adscan = heap_beginscan(adrel, 0, false, 1, &key); adscan = heap_beginscan(adrel, 0, SnapshotNow, 1, &key);
while (tup = heap_getnext(adscan, 0, (Buffer *) NULL), PointerIsValid(tup)) while (tup = heap_getnext(adscan, 0, (Buffer *) NULL), PointerIsValid(tup))
heap_delete(adrel, &tup->t_ctid); heap_delete(adrel, &tup->t_ctid);
...@@ -1673,7 +1673,7 @@ RemoveRelCheck(Relation rel) ...@@ -1673,7 +1673,7 @@ RemoveRelCheck(Relation rel)
RelationSetLockForWrite(rcrel); RelationSetLockForWrite(rcrel);
rcscan = heap_beginscan(rcrel, 0, false, 1, &key); rcscan = heap_beginscan(rcrel, 0, SnapshotNow, 1, &key);
while (tup = heap_getnext(rcscan, 0, (Buffer *) NULL), PointerIsValid(tup)) while (tup = heap_getnext(rcscan, 0, (Buffer *) NULL), PointerIsValid(tup))
heap_delete(rcrel, &tup->t_ctid); heap_delete(rcrel, &tup->t_ctid);
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.46 1998/07/20 19:21:42 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.47 1998/07/27 19:37:47 vadim Exp $
* *
* *
* INTERFACE ROUTINES * INTERFACE ROUTINES
...@@ -180,7 +180,7 @@ RelationNameGetObjectId(char *relationName, ...@@ -180,7 +180,7 @@ RelationNameGetObjectId(char *relationName,
F_NAMEEQ, F_NAMEEQ,
PointerGetDatum(relationName)); PointerGetDatum(relationName));
pg_class_scan = heap_beginscan(pg_class, 0, false, 1, &key); pg_class_scan = heap_beginscan(pg_class, 0, SnapshotNow, 1, &key);
/* ---------------- /* ----------------
* if we find the named relation, fetch its relation id * if we find the named relation, fetch its relation id
...@@ -506,7 +506,7 @@ AccessMethodObjectIdGetAccessMethodTupleForm(Oid accessMethodObjectId) ...@@ -506,7 +506,7 @@ AccessMethodObjectIdGetAccessMethodTupleForm(Oid accessMethodObjectId)
* ---------------- * ----------------
*/ */
pg_am_desc = heap_openr(AccessMethodRelationName); pg_am_desc = heap_openr(AccessMethodRelationName);
pg_am_scan = heap_beginscan(pg_am_desc, 0, false, 1, &key); pg_am_scan = heap_beginscan(pg_am_desc, 0, SnapshotNow, 1, &key);
pg_am_tuple = heap_getnext(pg_am_scan, 0, (Buffer *) NULL); pg_am_tuple = heap_getnext(pg_am_scan, 0, (Buffer *) NULL);
...@@ -945,7 +945,7 @@ UpdateIndexPredicate(Oid indexoid, Node *oldPred, Node *predicate) ...@@ -945,7 +945,7 @@ UpdateIndexPredicate(Oid indexoid, Node *oldPred, Node *predicate)
F_OIDEQ, F_OIDEQ,
ObjectIdGetDatum(indexoid)); ObjectIdGetDatum(indexoid));
scan = heap_beginscan(pg_index, 0, false, 1, &entry); scan = heap_beginscan(pg_index, 0, SnapshotNow, 1, &entry);
tuple = heap_getnext(scan, 0, &buffer); tuple = heap_getnext(scan, 0, &buffer);
heap_endscan(scan); heap_endscan(scan);
...@@ -1238,7 +1238,7 @@ index_destroy(Oid indexId) ...@@ -1238,7 +1238,7 @@ index_destroy(Oid indexId)
F_OIDEQ, F_OIDEQ,
ObjectIdGetDatum(indexId));; ObjectIdGetDatum(indexId));;
scan = heap_beginscan(catalogRelation, 0, false, 1, &entry); scan = heap_beginscan(catalogRelation, 0, SnapshotNow, 1, &entry);
tuple = heap_getnext(scan, 0, (Buffer *) NULL); tuple = heap_getnext(scan, 0, (Buffer *) NULL);
AssertState(HeapTupleIsValid(tuple)); AssertState(HeapTupleIsValid(tuple));
...@@ -1255,7 +1255,7 @@ index_destroy(Oid indexId) ...@@ -1255,7 +1255,7 @@ index_destroy(Oid indexId)
entry.sk_attno = Anum_pg_attribute_attrelid; entry.sk_attno = Anum_pg_attribute_attrelid;
scan = heap_beginscan(catalogRelation, 0, false, 1, &entry); scan = heap_beginscan(catalogRelation, 0, SnapshotNow, 1, &entry);
while (tuple = heap_getnext(scan, 0, (Buffer *) NULL), while (tuple = heap_getnext(scan, 0, (Buffer *) NULL),
HeapTupleIsValid(tuple)) HeapTupleIsValid(tuple))
...@@ -1271,7 +1271,7 @@ index_destroy(Oid indexId) ...@@ -1271,7 +1271,7 @@ index_destroy(Oid indexId)
entry.sk_attno = Anum_pg_index_indexrelid; entry.sk_attno = Anum_pg_index_indexrelid;
scan = heap_beginscan(catalogRelation, 0, false, 1, &entry); scan = heap_beginscan(catalogRelation, 0, SnapshotNow, 1, &entry);
tuple = heap_getnext(scan, 0, (Buffer *) NULL); tuple = heap_getnext(scan, 0, (Buffer *) NULL);
if (!HeapTupleIsValid(tuple)) if (!HeapTupleIsValid(tuple))
{ {
...@@ -1402,7 +1402,7 @@ UpdateStats(Oid relid, long reltuples, bool hasindex) ...@@ -1402,7 +1402,7 @@ UpdateStats(Oid relid, long reltuples, bool hasindex)
key[0].sk_argument = ObjectIdGetDatum(relid); key[0].sk_argument = ObjectIdGetDatum(relid);
pg_class_scan = pg_class_scan =
heap_beginscan(pg_class, 0, false, 1, key); heap_beginscan(pg_class, 0, SnapshotNow, 1, key);
if (!HeapScanIsValid(pg_class_scan)) if (!HeapScanIsValid(pg_class_scan))
{ {
...@@ -1598,7 +1598,7 @@ DefaultBuild(Relation heapRelation, ...@@ -1598,7 +1598,7 @@ DefaultBuild(Relation heapRelation,
*/ */
scan = heap_beginscan(heapRelation, /* relation */ scan = heap_beginscan(heapRelation, /* relation */
0, /* start at end */ 0, /* start at end */
false,/* seeself */ SnapshotNow,/* seeself */
0, /* number of keys */ 0, /* number of keys */
(ScanKey) NULL); /* scan key */ (ScanKey) NULL); /* scan key */
...@@ -1812,7 +1812,7 @@ IndexIsUniqueNoCache(Oid indexId) ...@@ -1812,7 +1812,7 @@ IndexIsUniqueNoCache(Oid indexId)
(RegProcedure) F_OIDEQ, (RegProcedure) F_OIDEQ,
ObjectIdGetDatum(indexId)); ObjectIdGetDatum(indexId));
scandesc = heap_beginscan(pg_index, 0, true, 1, skey); scandesc = heap_beginscan(pg_index, 0, SnapshotSelf, 1, skey);
tuple = heap_getnext(scandesc, 0, NULL); tuple = heap_getnext(scandesc, 0, NULL);
if (!HeapTupleIsValid(tuple)) if (!HeapTupleIsValid(tuple))
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.18 1998/06/15 19:28:09 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.19 1998/07/27 19:37:48 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -241,7 +241,7 @@ CatalogIndexFetchTuple(Relation heapRelation, ...@@ -241,7 +241,7 @@ CatalogIndexFetchTuple(Relation heapRelation,
ItemPointer iptr; ItemPointer iptr;
iptr = &indexRes->heap_iptr; iptr = &indexRes->heap_iptr;
tuple = heap_fetch(heapRelation, false, iptr, &buffer); tuple = heap_fetch(heapRelation, SnapshotNow, iptr, &buffer);
pfree(indexRes); pfree(indexRes);
} }
else else
...@@ -393,7 +393,7 @@ ProcedureNameIndexScan(Relation heapRelation, ...@@ -393,7 +393,7 @@ ProcedureNameIndexScan(Relation heapRelation,
ItemPointer iptr; ItemPointer iptr;
iptr = &indexRes->heap_iptr; iptr = &indexRes->heap_iptr;
tuple = heap_fetch(heapRelation, false, iptr, &buffer); tuple = heap_fetch(heapRelation, SnapshotNow, iptr, &buffer);
pfree(indexRes); pfree(indexRes);
if (HeapTupleIsValid(tuple)) if (HeapTupleIsValid(tuple))
{ {
...@@ -458,7 +458,7 @@ ProcedureSrcIndexScan(Relation heapRelation, text *procSrc) ...@@ -458,7 +458,7 @@ ProcedureSrcIndexScan(Relation heapRelation, text *procSrc)
ItemPointer iptr; ItemPointer iptr;
iptr = &indexRes->heap_iptr; iptr = &indexRes->heap_iptr;
tuple = heap_fetch(heapRelation, false, iptr, &buffer); tuple = heap_fetch(heapRelation, SnapshotNow, iptr, &buffer);
pfree(indexRes); pfree(indexRes);
} }
else else
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/catalog/pg_operator.c,v 1.25 1998/05/09 23:43:00 thomas Exp $ * $Header: /cvsroot/pgsql/src/backend/catalog/pg_operator.c,v 1.26 1998/07/27 19:37:49 vadim Exp $
* *
* NOTES * NOTES
* these routines moved here from commands/define.c and somewhat cleaned up. * these routines moved here from commands/define.c and somewhat cleaned up.
...@@ -120,7 +120,7 @@ OperatorGetWithOpenRelation(Relation pg_operator_desc, ...@@ -120,7 +120,7 @@ OperatorGetWithOpenRelation(Relation pg_operator_desc,
*/ */
pg_operator_scan = heap_beginscan(pg_operator_desc, pg_operator_scan = heap_beginscan(pg_operator_desc,
0, 0,
true, SnapshotSelf,
3, 3,
opKey); opKey);
...@@ -705,7 +705,7 @@ OperatorDef(char *operatorName, ...@@ -705,7 +705,7 @@ OperatorDef(char *operatorName,
pg_operator_scan = heap_beginscan(pg_operator_desc, pg_operator_scan = heap_beginscan(pg_operator_desc,
0, 0,
true, SnapshotSelf,
3, 3,
opKey); opKey);
...@@ -804,7 +804,7 @@ OperatorUpd(Oid baseId, Oid commId, Oid negId) ...@@ -804,7 +804,7 @@ OperatorUpd(Oid baseId, Oid commId, Oid negId)
pg_operator_scan = heap_beginscan(pg_operator_desc, pg_operator_scan = heap_beginscan(pg_operator_desc,
0, 0,
true, SnapshotSelf,
1, 1,
opKey); opKey);
...@@ -894,7 +894,7 @@ OperatorUpd(Oid baseId, Oid commId, Oid negId) ...@@ -894,7 +894,7 @@ OperatorUpd(Oid baseId, Oid commId, Oid negId)
pg_operator_scan = heap_beginscan(pg_operator_desc, pg_operator_scan = heap_beginscan(pg_operator_desc,
0, 0,
true, SnapshotSelf,
1, 1,
opKey); opKey);
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/catalog/pg_type.c,v 1.25 1998/06/15 19:28:10 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/catalog/pg_type.c,v 1.26 1998/07/27 19:37:49 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -68,7 +68,7 @@ TypeGetWithOpenRelation(Relation pg_type_desc, ...@@ -68,7 +68,7 @@ TypeGetWithOpenRelation(Relation pg_type_desc,
scan = heap_beginscan(pg_type_desc, scan = heap_beginscan(pg_type_desc,
0, 0,
true, SnapshotSelf,
1, 1,
typeKey); typeKey);
...@@ -470,7 +470,7 @@ TypeCreate(char *typeName, ...@@ -470,7 +470,7 @@ TypeCreate(char *typeName,
typeKey[0].sk_argument = PointerGetDatum(typeName); typeKey[0].sk_argument = PointerGetDatum(typeName);
pg_type_scan = heap_beginscan(pg_type_desc, pg_type_scan = heap_beginscan(pg_type_desc,
0, 0,
true, SnapshotSelf,
1, 1,
typeKey); typeKey);
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/commands/async.c,v 1.35 1998/07/09 03:28:44 scrappy Exp $ * $Header: /cvsroot/pgsql/src/backend/commands/async.c,v 1.36 1998/07/27 19:37:50 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -203,7 +203,7 @@ Async_Notify(char *relname) ...@@ -203,7 +203,7 @@ Async_Notify(char *relname)
lRel = heap_openr(ListenerRelationName); lRel = heap_openr(ListenerRelationName);
tdesc = RelationGetTupleDescriptor(lRel); tdesc = RelationGetTupleDescriptor(lRel);
RelationSetLockForWrite(lRel); RelationSetLockForWrite(lRel);
sRel = heap_beginscan(lRel, 0, false, 1, &key); sRel = heap_beginscan(lRel, 0, SnapshotNow, 1, &key);
nulls[0] = nulls[1] = nulls[2] = ' '; nulls[0] = nulls[1] = nulls[2] = ' ';
repl[0] = repl[1] = repl[2] = ' '; repl[0] = repl[1] = repl[2] = ' ';
...@@ -283,7 +283,7 @@ Async_NotifyAtCommit() ...@@ -283,7 +283,7 @@ Async_NotifyAtCommit()
Int32GetDatum(1)); Int32GetDatum(1));
lRel = heap_openr(ListenerRelationName); lRel = heap_openr(ListenerRelationName);
RelationSetLockForWrite(lRel); RelationSetLockForWrite(lRel);
sRel = heap_beginscan(lRel, 0, false, 1, &key); sRel = heap_beginscan(lRel, 0, SnapshotNow, 1, &key);
tdesc = RelationGetTupleDescriptor(lRel); tdesc = RelationGetTupleDescriptor(lRel);
while (HeapTupleIsValid(lTuple = heap_getnext(sRel, 0, &b))) while (HeapTupleIsValid(lTuple = heap_getnext(sRel, 0, &b)))
...@@ -431,7 +431,7 @@ Async_Listen(char *relname, int pid) ...@@ -431,7 +431,7 @@ Async_Listen(char *relname, int pid)
/* is someone already listening. One listener per relation */ /* is someone already listening. One listener per relation */
tdesc = RelationGetTupleDescriptor(lDesc); tdesc = RelationGetTupleDescriptor(lDesc);
s = heap_beginscan(lDesc, 0, false, 0, (ScanKey) NULL); s = heap_beginscan(lDesc, 0, SnapshotNow, 0, (ScanKey) NULL);
while (HeapTupleIsValid(htup = heap_getnext(s, 0, &b))) while (HeapTupleIsValid(htup = heap_getnext(s, 0, &b)))
{ {
d = heap_getattr(htup, Anum_pg_listener_relname, tdesc, d = heap_getattr(htup, Anum_pg_listener_relname, tdesc,
...@@ -577,7 +577,7 @@ Async_NotifyFrontEnd() ...@@ -577,7 +577,7 @@ Async_NotifyFrontEnd()
lRel = heap_openr(ListenerRelationName); lRel = heap_openr(ListenerRelationName);
RelationSetLockForWrite(lRel); RelationSetLockForWrite(lRel);
tdesc = RelationGetTupleDescriptor(lRel); tdesc = RelationGetTupleDescriptor(lRel);
sRel = heap_beginscan(lRel, 0, false, 2, key); sRel = heap_beginscan(lRel, 0, SnapshotNow, 2, key);
nulls[0] = nulls[1] = nulls[2] = ' '; nulls[0] = nulls[1] = nulls[2] = ' ';
repl[0] = repl[1] = repl[2] = ' '; repl[0] = repl[1] = repl[2] = ' ';
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/commands/cluster.c,v 1.25 1998/07/26 04:30:22 scrappy Exp $ * $Header: /cvsroot/pgsql/src/backend/commands/cluster.c,v 1.26 1998/07/27 19:37:50 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -43,11 +43,7 @@ ...@@ -43,11 +43,7 @@
#include <utils/excid.h> #include <utils/excid.h>
#include <utils/mcxt.h> #include <utils/mcxt.h>
#include <catalog/pg_proc.h> #include <catalog/pg_proc.h>
#ifdef MULTIBYTE
#include <catalog/pg_class_mb.h>
#else
#include <catalog/pg_class.h> #include <catalog/pg_class.h>
#endif
#include <optimizer/internal.h> #include <optimizer/internal.h>
#ifndef NO_SECURITY #ifndef NO_SECURITY
#include <utils/acl.h> #include <utils/acl.h>
...@@ -358,7 +354,7 @@ rebuildheap(Oid OIDNewHeap, Oid OIDOldHeap, Oid OIDOldIndex) ...@@ -358,7 +354,7 @@ rebuildheap(Oid OIDNewHeap, Oid OIDOldHeap, Oid OIDOldIndex)
{ {
HeapTid = &ScanResult->heap_iptr; HeapTid = &ScanResult->heap_iptr;
LocalHeapTuple = heap_fetch(LocalOldHeap, false, HeapTid, &LocalBuffer); LocalHeapTuple = heap_fetch(LocalOldHeap, SnapshotNow, HeapTid, &LocalBuffer);
OIDNewHeapInsert = OIDNewHeapInsert =
heap_insert(LocalNewHeap, LocalHeapTuple); heap_insert(LocalNewHeap, LocalHeapTuple);
pfree(ScanResult); pfree(ScanResult);
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.28 1998/06/15 19:28:12 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.29 1998/07/27 19:37:51 vadim Exp $
* *
* NOTES * NOTES
* The PortalExecutorHeapMemory crap needs to be eliminated * The PortalExecutorHeapMemory crap needs to be eliminated
...@@ -438,7 +438,7 @@ PerformAddAttribute(char *relationName, ...@@ -438,7 +438,7 @@ PerformAddAttribute(char *relationName,
* XXX use syscache here as an optimization * XXX use syscache here as an optimization
*/ */
key[1].sk_argument = (Datum) colDef->colname; key[1].sk_argument = (Datum) colDef->colname;
attsdesc = heap_beginscan(attrdesc, 0, false, 2, key); attsdesc = heap_beginscan(attrdesc, 0, SnapshotNow, 2, key);
tup = heap_getnext(attsdesc, 0, (Buffer *) NULL); tup = heap_getnext(attsdesc, 0, (Buffer *) NULL);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.51 1998/07/26 04:30:23 scrappy Exp $ * $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.52 1998/07/27 19:37:51 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -37,10 +37,6 @@ ...@@ -37,10 +37,6 @@
#include "commands/trigger.h" #include "commands/trigger.h"
#include <storage/fd.h> #include <storage/fd.h>
#ifdef MULTIBYTE
#include "mb/pg_wchar.h"
#endif
#define ISOCTAL(c) (((c) >= '0') && ((c) <= '7')) #define ISOCTAL(c) (((c) >= '0') && ((c) <= '7'))
#define VALUE(c) ((c) - '0') #define VALUE(c) ((c) - '0')
...@@ -65,7 +61,7 @@ static char *CopyReadAttribute(FILE *fp, bool *isnull, char *delim, int *newline ...@@ -65,7 +61,7 @@ static char *CopyReadAttribute(FILE *fp, bool *isnull, char *delim, int *newline
static char *CopyReadAttribute(FILE *fp, bool *isnull, char *delim); static char *CopyReadAttribute(FILE *fp, bool *isnull, char *delim);
#endif #endif
static void CopyAttributeOut(FILE *fp, unsigned char *string, char *delim, int is_array); static void CopyAttributeOut(FILE *fp, char *string, char *delim, int is_array);
static int CountTuples(Relation relation); static int CountTuples(Relation relation);
extern FILE *Pfout, extern FILE *Pfout,
...@@ -225,7 +221,7 @@ CopyTo(Relation rel, bool binary, bool oids, FILE *fp, char *delim) ...@@ -225,7 +221,7 @@ CopyTo(Relation rel, bool binary, bool oids, FILE *fp, char *delim)
int32 ntuples; int32 ntuples;
TupleDesc tupDesc; TupleDesc tupDesc;
scandesc = heap_beginscan(rel, 0, false, 0, NULL); scandesc = heap_beginscan(rel, 0, SnapshotNow, 0, NULL);
attr_count = rel->rd_att->natts; attr_count = rel->rd_att->natts;
attr = rel->rd_att->attrs; attr = rel->rd_att->attrs;
...@@ -281,7 +277,7 @@ CopyTo(Relation rel, bool binary, bool oids, FILE *fp, char *delim) ...@@ -281,7 +277,7 @@ CopyTo(Relation rel, bool binary, bool oids, FILE *fp, char *delim)
{ {
string = (char *) (*fmgr_faddr(&out_functions[i])) string = (char *) (*fmgr_faddr(&out_functions[i]))
(value, elements[i], typmod[i]); (value, elements[i], typmod[i]);
CopyAttributeOut(fp, (unsigned char*)string, delim, attr[i]->attnelems); CopyAttributeOut(fp, string, delim, attr[i]->attnelems);
pfree(string); pfree(string);
} }
else else
...@@ -908,7 +904,7 @@ GetIndexRelations(Oid main_relation_oid, ...@@ -908,7 +904,7 @@ GetIndexRelations(Oid main_relation_oid,
bool isnull; bool isnull;
pg_index_rel = heap_openr(IndexRelationName); pg_index_rel = heap_openr(IndexRelationName);
scandesc = heap_beginscan(pg_index_rel, 0, false, 0, NULL); scandesc = heap_beginscan(pg_index_rel, 0, SnapshotNow, 0, NULL);
tupDesc = RelationGetTupleDescriptor(pg_index_rel); tupDesc = RelationGetTupleDescriptor(pg_index_rel);
*n_indices = 0; *n_indices = 0;
...@@ -1016,17 +1012,6 @@ CopyReadAttribute(FILE *fp, bool *isnull, char *delim) ...@@ -1016,17 +1012,6 @@ CopyReadAttribute(FILE *fp, bool *isnull, char *delim)
char c; char c;
int done = 0; int done = 0;
int i = 0; int i = 0;
#ifdef MULTIBYTE
int mblen;
int encoding;
unsigned char s[2];
int j;
#endif
#ifdef MULTIBYTE
encoding = pg_get_client_encoding();
s[1] = 0;
#endif
#ifdef COPY_PATCH #ifdef COPY_PATCH
/* if last delimiter was a newline return a NULL attribute */ /* if last delimiter was a newline return a NULL attribute */
...@@ -1044,9 +1029,9 @@ CopyReadAttribute(FILE *fp, bool *isnull, char *delim) ...@@ -1044,9 +1029,9 @@ CopyReadAttribute(FILE *fp, bool *isnull, char *delim)
while (!done) while (!done)
{ {
c = getc(fp); c = getc(fp);
if (feof(fp)) if (feof(fp))
return (NULL); return (NULL);
else if (c == '\\') else if (c == '\\')
{ {
c = getc(fp); c = getc(fp);
...@@ -1127,55 +1112,21 @@ CopyReadAttribute(FILE *fp, bool *isnull, char *delim) ...@@ -1127,55 +1112,21 @@ CopyReadAttribute(FILE *fp, bool *isnull, char *delim)
#endif #endif
done = 1; done = 1;
} }
if (!done) { if (!done)
attribute[i++] = c;
#ifdef MULTIBYTE
s[0] = c;
mblen = pg_encoding_mblen(encoding, s);
mblen--;
for(j=0;j<mblen;j++) {
c = getc(fp);
if (feof(fp))
return (NULL);
attribute[i++] = c; attribute[i++] = c;
}
#endif
}
if (i == EXT_ATTLEN - 1) if (i == EXT_ATTLEN - 1)
elog(ERROR, "CopyReadAttribute - attribute length too long. line: %d", lineno); elog(ERROR, "CopyReadAttribute - attribute length too long. line: %d", lineno);
} }
attribute[i] = '\0'; attribute[i] = '\0';
#ifdef MULTIBYTE
return(pg_client_to_server((unsigned char*)attribute, strlen(attribute)));
#else
return (&attribute[0]); return (&attribute[0]);
#endif
} }
static void static void
CopyAttributeOut(FILE *fp, unsigned char *server_string, char *delim, int is_array) CopyAttributeOut(FILE *fp, char *string, char *delim, int is_array)
{ {
unsigned char *string; char c;
unsigned char c;
#ifdef MULTIBYTE
int mblen;
int encoding;
int i;
#endif
#ifdef MULTIBYTE
string = pg_server_to_client(server_string, strlen(server_string));
encoding = pg_get_client_encoding();
#else
string = server_string;
#endif
#ifdef MULTIBYTE
for (; (mblen = pg_encoding_mblen(encoding, string)) &&
((c = *string) != '\0'); string += mblen)
#else
for (; (c = *string) != '\0'; string++) for (; (c = *string) != '\0'; string++)
#endif
{ {
if (c == delim[0] || c == '\n' || if (c == delim[0] || c == '\n' ||
(c == '\\' && !is_array)) (c == '\\' && !is_array))
...@@ -1197,13 +1148,7 @@ CopyAttributeOut(FILE *fp, unsigned char *server_string, char *delim, int is_arr ...@@ -1197,13 +1148,7 @@ CopyAttributeOut(FILE *fp, unsigned char *server_string, char *delim, int is_arr
fputc('\\', fp); fputc('\\', fp);
} }
} }
#ifdef MULTIBYTE
for (i=0;i<mblen;i++) {
fputc(*(string+i), fp);
}
#else
fputc(*string, fp); fputc(*string, fp);
#endif
} }
} }
...@@ -1221,7 +1166,7 @@ CountTuples(Relation relation) ...@@ -1221,7 +1166,7 @@ CountTuples(Relation relation)
int i; int i;
scandesc = heap_beginscan(relation, 0, false, 0, NULL); scandesc = heap_beginscan(relation, 0, SnapshotNow, 0, NULL);
for (tuple = heap_getnext(scandesc, 0, NULL), i = 0; for (tuple = heap_getnext(scandesc, 0, NULL), i = 0;
tuple != NULL; tuple != NULL;
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.17 1998/07/26 04:30:24 scrappy Exp $ * $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.18 1998/07/27 19:37:52 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -22,11 +22,7 @@ ...@@ -22,11 +22,7 @@
#include "access/htup.h" #include "access/htup.h"
#include "access/relscan.h" #include "access/relscan.h"
#include "catalog/catname.h" #include "catalog/catname.h"
#ifdef MULTIBYTE
#include "catalog/pg_database_mb.h"
#else
#include "catalog/pg_database.h" #include "catalog/pg_database.h"
#endif
#include "catalog/pg_shadow.h" #include "catalog/pg_shadow.h"
#include "commands/dbcommands.h" #include "commands/dbcommands.h"
#include "fmgr.h" #include "fmgr.h"
...@@ -47,11 +43,7 @@ static HeapTuple get_pg_dbtup(char *command, char *dbname, Relation dbrel); ...@@ -47,11 +43,7 @@ static HeapTuple get_pg_dbtup(char *command, char *dbname, Relation dbrel);
static void stop_vacuum(char *dbpath, char *dbname); static void stop_vacuum(char *dbpath, char *dbname);
void void
#ifdef MULTIBYTE
createdb(char *dbname, char *dbpath, int encoding)
#else
createdb(char *dbname, char *dbpath) createdb(char *dbname, char *dbpath)
#endif
{ {
Oid db_id, Oid db_id,
user_id; user_id;
...@@ -98,13 +90,8 @@ createdb(char *dbname, char *dbpath) ...@@ -98,13 +90,8 @@ createdb(char *dbname, char *dbpath)
dbname, user_id, dbname); dbname, user_id, dbname);
#endif #endif
#ifdef MULTIBYTE
sprintf(buf, "insert into pg_database (datname, datdba, encoding, datpath)"
" values (\'%s\', \'%d\', \'%d\', \'%s\');", dbname, user_id, encoding, loc);
#else
sprintf(buf, "insert into pg_database (datname, datdba, datpath)" sprintf(buf, "insert into pg_database (datname, datdba, datpath)"
" values (\'%s\', \'%d\', \'%s\');", dbname, user_id, loc); " values (\'%s\', \'%d\', \'%s\');", dbname, user_id, loc);
#endif
pg_exec_query(buf); pg_exec_query(buf);
} }
...@@ -168,7 +155,7 @@ get_pg_dbtup(char *command, char *dbname, Relation dbrel) ...@@ -168,7 +155,7 @@ get_pg_dbtup(char *command, char *dbname, Relation dbrel)
ScanKeyEntryInitialize(&scanKey, 0, Anum_pg_database_datname, ScanKeyEntryInitialize(&scanKey, 0, Anum_pg_database_datname,
F_NAMEEQ, NameGetDatum(dbname)); F_NAMEEQ, NameGetDatum(dbname));
scan = heap_beginscan(dbrel, 0, false, 1, &scanKey); scan = heap_beginscan(dbrel, 0, SnapshotNow, 1, &scanKey);
if (!HeapScanIsValid(scan)) if (!HeapScanIsValid(scan))
elog(ERROR, "%s: cannot begin scan of pg_database.", command); elog(ERROR, "%s: cannot begin scan of pg_database.", command);
......
...@@ -186,7 +186,7 @@ DropProceduralLanguage(DropPLangStmt *stmt) ...@@ -186,7 +186,7 @@ DropProceduralLanguage(DropPLangStmt *stmt)
ScanKeyEntryInitialize(&scanKeyData, 0, Anum_pg_language_lanname, ScanKeyEntryInitialize(&scanKeyData, 0, Anum_pg_language_lanname,
F_NAMEEQ, PointerGetDatum(languageName)); F_NAMEEQ, PointerGetDatum(languageName));
scanDesc = heap_beginscan(rdesc, 0, false, 1, &scanKeyData); scanDesc = heap_beginscan(rdesc, 0, SnapshotNow, 1, &scanKeyData);
tup = heap_getnext(scanDesc, 0, (Buffer *) NULL); tup = heap_getnext(scanDesc, 0, (Buffer *) NULL);
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/remove.c,v 1.25 1998/06/15 19:28:16 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/commands/Attic/remove.c,v 1.26 1998/07/27 19:37:53 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -97,7 +97,7 @@ RemoveOperator(char *operatorName, /* operator name */ ...@@ -97,7 +97,7 @@ RemoveOperator(char *operatorName, /* operator name */
ObjectIdGetDatum(typeId2)); ObjectIdGetDatum(typeId2));
relation = heap_openr(OperatorRelationName); relation = heap_openr(OperatorRelationName);
scan = heap_beginscan(relation, 0, false, 3, operatorKey); scan = heap_beginscan(relation, 0, SnapshotNow, 3, operatorKey);
tup = heap_getnext(scan, 0, &buffer); tup = heap_getnext(scan, 0, &buffer);
if (HeapTupleIsValid(tup)) if (HeapTupleIsValid(tup))
{ {
...@@ -165,7 +165,7 @@ SingleOpOperatorRemove(Oid typeOid) ...@@ -165,7 +165,7 @@ SingleOpOperatorRemove(Oid typeOid)
for (i = 0; i < 3; ++i) for (i = 0; i < 3; ++i)
{ {
key[0].sk_attno = attnums[i]; key[0].sk_attno = attnums[i];
sdesc = heap_beginscan(rdesc, 0, false, 1, key); sdesc = heap_beginscan(rdesc, 0, SnapshotNow, 1, key);
while (PointerIsValid(tup = heap_getnext(sdesc, 0, &buffer))) while (PointerIsValid(tup = heap_getnext(sdesc, 0, &buffer)))
{ {
ItemPointerCopy(&tup->t_ctid, &itemPointerData); ItemPointerCopy(&tup->t_ctid, &itemPointerData);
...@@ -214,7 +214,7 @@ AttributeAndRelationRemove(Oid typeOid) ...@@ -214,7 +214,7 @@ AttributeAndRelationRemove(Oid typeOid)
oidptr->next = NULL; oidptr->next = NULL;
optr = oidptr; optr = oidptr;
rdesc = heap_openr(AttributeRelationName); rdesc = heap_openr(AttributeRelationName);
sdesc = heap_beginscan(rdesc, 0, false, 1, key); sdesc = heap_beginscan(rdesc, 0, SnapshotNow, 1, key);
while (PointerIsValid(tup = heap_getnext(sdesc, 0, &buffer))) while (PointerIsValid(tup = heap_getnext(sdesc, 0, &buffer)))
{ {
ItemPointerCopy(&tup->t_ctid, &itemPointerData); ItemPointerCopy(&tup->t_ctid, &itemPointerData);
...@@ -235,7 +235,7 @@ AttributeAndRelationRemove(Oid typeOid) ...@@ -235,7 +235,7 @@ AttributeAndRelationRemove(Oid typeOid)
while (PointerIsValid((char *) optr->next)) while (PointerIsValid((char *) optr->next))
{ {
key[0].sk_argument = (Datum) (optr++)->reloid; key[0].sk_argument = (Datum) (optr++)->reloid;
sdesc = heap_beginscan(rdesc, 0, false, 1, key); sdesc = heap_beginscan(rdesc, 0, SnapshotNow, 1, key);
tup = heap_getnext(sdesc, 0, &buffer); tup = heap_getnext(sdesc, 0, &buffer);
if (PointerIsValid(tup)) if (PointerIsValid(tup))
{ {
...@@ -285,7 +285,7 @@ RemoveType(char *typeName) /* type name to be removed */ ...@@ -285,7 +285,7 @@ RemoveType(char *typeName) /* type name to be removed */
typeKey[0].sk_argument = PointerGetDatum(typeName); typeKey[0].sk_argument = PointerGetDatum(typeName);
scan = heap_beginscan(relation, 0, false, 1, typeKey); scan = heap_beginscan(relation, 0, SnapshotNow, 1, typeKey);
tup = heap_getnext(scan, 0, (Buffer *) 0); tup = heap_getnext(scan, 0, (Buffer *) 0);
if (!HeapTupleIsValid(tup)) if (!HeapTupleIsValid(tup))
{ {
...@@ -303,7 +303,7 @@ RemoveType(char *typeName) /* type name to be removed */ ...@@ -303,7 +303,7 @@ RemoveType(char *typeName) /* type name to be removed */
shadow_type = makeArrayTypeName(typeName); shadow_type = makeArrayTypeName(typeName);
typeKey[0].sk_argument = NameGetDatum(shadow_type); typeKey[0].sk_argument = NameGetDatum(shadow_type);
scan = heap_beginscan(relation, 0, false, scan = heap_beginscan(relation, 0, SnapshotNow,
1, (ScanKey) typeKey); 1, (ScanKey) typeKey);
tup = heap_getnext(scan, 0, (Buffer *) 0); tup = heap_getnext(scan, 0, (Buffer *) 0);
...@@ -390,7 +390,7 @@ RemoveFunction(char *functionName, /* function name to be removed */ ...@@ -390,7 +390,7 @@ RemoveFunction(char *functionName, /* function name to be removed */
key[0].sk_nargs = key[0].sk_func.fn_nargs; key[0].sk_nargs = key[0].sk_func.fn_nargs;
relation = heap_openr(ProcedureRelationName); relation = heap_openr(ProcedureRelationName);
scan = heap_beginscan(relation, 0, false, 1, key); scan = heap_beginscan(relation, 0, SnapshotNow, 1, key);
do do
{ /* hope this is ok because it's indexed */ { /* hope this is ok because it's indexed */
...@@ -493,7 +493,7 @@ RemoveAggregate(char *aggName, char *aggType) ...@@ -493,7 +493,7 @@ RemoveAggregate(char *aggName, char *aggType)
ObjectIdGetDatum(basetypeID)); ObjectIdGetDatum(basetypeID));
relation = heap_openr(AggregateRelationName); relation = heap_openr(AggregateRelationName);
scan = heap_beginscan(relation, 0, false, 2, aggregateKey); scan = heap_beginscan(relation, 0, SnapshotNow, 2, aggregateKey);
tup = heap_getnext(scan, 0, (Buffer *) 0); tup = heap_getnext(scan, 0, (Buffer *) 0);
if (!HeapTupleIsValid(tup)) if (!HeapTupleIsValid(tup))
{ {
......
...@@ -119,7 +119,7 @@ CreateTrigger(CreateTrigStmt *stmt) ...@@ -119,7 +119,7 @@ CreateTrigger(CreateTrigStmt *stmt)
RelationSetLockForWrite(tgrel); RelationSetLockForWrite(tgrel);
ScanKeyEntryInitialize(&key, 0, Anum_pg_trigger_tgrelid, ScanKeyEntryInitialize(&key, 0, Anum_pg_trigger_tgrelid,
F_OIDEQ, rel->rd_id); F_OIDEQ, rel->rd_id);
tgscan = heap_beginscan(tgrel, 0, false, 1, &key); tgscan = heap_beginscan(tgrel, 0, SnapshotNow, 1, &key);
while (tuple = heap_getnext(tgscan, 0, (Buffer *) NULL), PointerIsValid(tuple)) while (tuple = heap_getnext(tgscan, 0, (Buffer *) NULL), PointerIsValid(tuple))
{ {
Form_pg_trigger pg_trigger = (Form_pg_trigger) GETSTRUCT(tuple); Form_pg_trigger pg_trigger = (Form_pg_trigger) GETSTRUCT(tuple);
...@@ -275,7 +275,7 @@ DropTrigger(DropTrigStmt *stmt) ...@@ -275,7 +275,7 @@ DropTrigger(DropTrigStmt *stmt)
RelationSetLockForWrite(tgrel); RelationSetLockForWrite(tgrel);
ScanKeyEntryInitialize(&key, 0, Anum_pg_trigger_tgrelid, ScanKeyEntryInitialize(&key, 0, Anum_pg_trigger_tgrelid,
F_OIDEQ, rel->rd_id); F_OIDEQ, rel->rd_id);
tgscan = heap_beginscan(tgrel, 0, false, 1, &key); tgscan = heap_beginscan(tgrel, 0, SnapshotNow, 1, &key);
while (tuple = heap_getnext(tgscan, 0, (Buffer *) NULL), PointerIsValid(tuple)) while (tuple = heap_getnext(tgscan, 0, (Buffer *) NULL), PointerIsValid(tuple))
{ {
Form_pg_trigger pg_trigger = (Form_pg_trigger) GETSTRUCT(tuple); Form_pg_trigger pg_trigger = (Form_pg_trigger) GETSTRUCT(tuple);
...@@ -340,7 +340,7 @@ RelationRemoveTriggers(Relation rel) ...@@ -340,7 +340,7 @@ RelationRemoveTriggers(Relation rel)
ScanKeyEntryInitialize(&key, 0, Anum_pg_trigger_tgrelid, ScanKeyEntryInitialize(&key, 0, Anum_pg_trigger_tgrelid,
F_OIDEQ, rel->rd_id); F_OIDEQ, rel->rd_id);
tgscan = heap_beginscan(tgrel, 0, false, 1, &key); tgscan = heap_beginscan(tgrel, 0, SnapshotNow, 1, &key);
while (tup = heap_getnext(tgscan, 0, (Buffer *) NULL), PointerIsValid(tup)) while (tup = heap_getnext(tgscan, 0, (Buffer *) NULL), PointerIsValid(tup))
heap_delete(tgrel, &tup->t_ctid); heap_delete(tgrel, &tup->t_ctid);
...@@ -391,7 +391,7 @@ RelationBuildTriggers(Relation relation) ...@@ -391,7 +391,7 @@ RelationBuildTriggers(Relation relation)
break; break;
iptr = &indexRes->heap_iptr; iptr = &indexRes->heap_iptr;
tuple = heap_fetch(tgrel, false, iptr, &buffer); tuple = heap_fetch(tgrel, SnapshotNow, iptr, &buffer);
pfree(indexRes); pfree(indexRes);
if (!HeapTupleIsValid(tuple)) if (!HeapTupleIsValid(tuple))
continue; continue;
......
...@@ -20,11 +20,7 @@ ...@@ -20,11 +20,7 @@
#include <miscadmin.h> #include <miscadmin.h>
#include <catalog/catname.h> #include <catalog/catname.h>
#ifdef MULTIBYTE
#include <catalog/pg_database_mb.h>
#else
#include <catalog/pg_database.h> #include <catalog/pg_database.h>
#endif
#include <catalog/pg_shadow.h> #include <catalog/pg_shadow.h>
#include <libpq/crypt.h> #include <libpq/crypt.h>
#include <access/heapam.h> #include <access/heapam.h>
...@@ -138,7 +134,7 @@ DefineUser(CreateUserStmt *stmt) ...@@ -138,7 +134,7 @@ DefineUser(CreateUserStmt *stmt)
*/ */
RelationSetLockForWrite(pg_shadow_rel); RelationSetLockForWrite(pg_shadow_rel);
scan = heap_beginscan(pg_shadow_rel, false, false, 0, NULL); scan = heap_beginscan(pg_shadow_rel, false, SnapshotNow, 0, NULL);
while (HeapTupleIsValid(tuple = heap_getnext(scan, 0, &buffer))) while (HeapTupleIsValid(tuple = heap_getnext(scan, 0, &buffer)))
{ {
datum = heap_getattr(tuple, Anum_pg_shadow_usename, pg_shadow_dsc, &n); datum = heap_getattr(tuple, Anum_pg_shadow_usename, pg_shadow_dsc, &n);
...@@ -268,7 +264,7 @@ AlterUser(AlterUserStmt *stmt) ...@@ -268,7 +264,7 @@ AlterUser(AlterUserStmt *stmt)
*/ */
RelationSetLockForWrite(pg_shadow_rel); RelationSetLockForWrite(pg_shadow_rel);
scan = heap_beginscan(pg_shadow_rel, false, false, 0, NULL); scan = heap_beginscan(pg_shadow_rel, false, SnapshotNow, 0, NULL);
while (HeapTupleIsValid(tuple = heap_getnext(scan, 0, &buffer))) while (HeapTupleIsValid(tuple = heap_getnext(scan, 0, &buffer)))
{ {
datum = heap_getattr(tuple, Anum_pg_shadow_usename, pg_shadow_dsc, &n); datum = heap_getattr(tuple, Anum_pg_shadow_usename, pg_shadow_dsc, &n);
...@@ -397,7 +393,7 @@ RemoveUser(char *user) ...@@ -397,7 +393,7 @@ RemoveUser(char *user)
*/ */
RelationSetLockForWrite(pg_shadow_rel); RelationSetLockForWrite(pg_shadow_rel);
scan = heap_beginscan(pg_shadow_rel, false, false, 0, NULL); scan = heap_beginscan(pg_shadow_rel, false, SnapshotNow, 0, NULL);
while (HeapTupleIsValid(tuple = heap_getnext(scan, 0, &buffer))) while (HeapTupleIsValid(tuple = heap_getnext(scan, 0, &buffer)))
{ {
datum = heap_getattr(tuple, Anum_pg_shadow_usename, pg_dsc, &n); datum = heap_getattr(tuple, Anum_pg_shadow_usename, pg_dsc, &n);
...@@ -428,7 +424,7 @@ RemoveUser(char *user) ...@@ -428,7 +424,7 @@ RemoveUser(char *user)
pg_rel = heap_openr(DatabaseRelationName); pg_rel = heap_openr(DatabaseRelationName);
pg_dsc = RelationGetTupleDescriptor(pg_rel); pg_dsc = RelationGetTupleDescriptor(pg_rel);
scan = heap_beginscan(pg_rel, false, false, 0, NULL); scan = heap_beginscan(pg_rel, false, SnapshotNow, 0, NULL);
while (HeapTupleIsValid(tuple = heap_getnext(scan, 0, &buffer))) while (HeapTupleIsValid(tuple = heap_getnext(scan, 0, &buffer)))
{ {
datum = heap_getattr(tuple, Anum_pg_database_datdba, pg_dsc, &n); datum = heap_getattr(tuple, Anum_pg_database_datdba, pg_dsc, &n);
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.68 1998/07/26 04:30:25 scrappy Exp $ * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.69 1998/07/27 19:37:53 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -27,11 +27,7 @@ ...@@ -27,11 +27,7 @@
#include "catalog/catalog.h" #include "catalog/catalog.h"
#include "catalog/catname.h" #include "catalog/catname.h"
#include "catalog/index.h" #include "catalog/index.h"
#ifdef MULTIBYTE
#include "catalog/pg_class_mb.h"
#else
#include "catalog/pg_class.h" #include "catalog/pg_class.h"
#endif
#include "catalog/pg_index.h" #include "catalog/pg_index.h"
#include "catalog/pg_operator.h" #include "catalog/pg_operator.h"
#include "catalog/pg_statistic.h" #include "catalog/pg_statistic.h"
...@@ -297,7 +293,7 @@ vc_getrels(NameData *VacRelP) ...@@ -297,7 +293,7 @@ vc_getrels(NameData *VacRelP)
pgclass = heap_openr(RelationRelationName); pgclass = heap_openr(RelationRelationName);
pgcdesc = RelationGetTupleDescriptor(pgclass); pgcdesc = RelationGetTupleDescriptor(pgclass);
pgcscan = heap_beginscan(pgclass, false, false, 1, &pgckey); pgcscan = heap_beginscan(pgclass, false, SnapshotNow, 1, &pgckey);
while (HeapTupleIsValid(pgctup = heap_getnext(pgcscan, 0, &buf))) while (HeapTupleIsValid(pgctup = heap_getnext(pgcscan, 0, &buf)))
{ {
...@@ -404,7 +400,7 @@ vc_vacone(Oid relid, bool analyze, List *va_cols) ...@@ -404,7 +400,7 @@ vc_vacone(Oid relid, bool analyze, List *va_cols)
pgclass = heap_openr(RelationRelationName); pgclass = heap_openr(RelationRelationName);
pgcdesc = RelationGetTupleDescriptor(pgclass); pgcdesc = RelationGetTupleDescriptor(pgclass);
pgcscan = heap_beginscan(pgclass, false, false, 1, &pgckey); pgcscan = heap_beginscan(pgclass, false, SnapshotNow, 1, &pgckey);
/* /*
* Race condition -- if the pg_class tuple has gone away since the * Race condition -- if the pg_class tuple has gone away since the
...@@ -1776,7 +1772,7 @@ vc_updstats(Oid relid, int npages, int ntups, bool hasindex, VRelStats *vacrelst ...@@ -1776,7 +1772,7 @@ vc_updstats(Oid relid, int npages, int ntups, bool hasindex, VRelStats *vacrelst
ObjectIdGetDatum(relid)); ObjectIdGetDatum(relid));
rd = heap_openr(RelationRelationName); rd = heap_openr(RelationRelationName);
rsdesc = heap_beginscan(rd, false, false, 1, &rskey); rsdesc = heap_beginscan(rd, false, SnapshotNow, 1, &rskey);
if (!HeapTupleIsValid(rtup = heap_getnext(rsdesc, 0, &rbuf))) if (!HeapTupleIsValid(rtup = heap_getnext(rsdesc, 0, &rbuf)))
elog(ERROR, "pg_class entry for relid %d vanished during vacuuming", elog(ERROR, "pg_class entry for relid %d vanished during vacuuming",
...@@ -1799,7 +1795,7 @@ vc_updstats(Oid relid, int npages, int ntups, bool hasindex, VRelStats *vacrelst ...@@ -1799,7 +1795,7 @@ vc_updstats(Oid relid, int npages, int ntups, bool hasindex, VRelStats *vacrelst
ScanKeyEntryInitialize(&askey, 0, Anum_pg_attribute_attrelid, ScanKeyEntryInitialize(&askey, 0, Anum_pg_attribute_attrelid,
F_INT4EQ, relid); F_INT4EQ, relid);
asdesc = heap_beginscan(ad, false, false, 1, &askey); asdesc = heap_beginscan(ad, false, SnapshotNow, 1, &askey);
while (HeapTupleIsValid(atup = heap_getnext(asdesc, 0, &abuf))) while (HeapTupleIsValid(atup = heap_getnext(asdesc, 0, &abuf)))
{ {
...@@ -1946,10 +1942,10 @@ vc_delhilowstats(Oid relid, int attcnt, int *attnums) ...@@ -1946,10 +1942,10 @@ vc_delhilowstats(Oid relid, int attcnt, int *attnums)
ScanKeyEntryInitialize(&pgskey, 0x0, Anum_pg_statistic_starelid, ScanKeyEntryInitialize(&pgskey, 0x0, Anum_pg_statistic_starelid,
F_OIDEQ, F_OIDEQ,
ObjectIdGetDatum(relid)); ObjectIdGetDatum(relid));
pgsscan = heap_beginscan(pgstatistic, false, false, 1, &pgskey); pgsscan = heap_beginscan(pgstatistic, false, SnapshotNow, 1, &pgskey);
} }
else else
pgsscan = heap_beginscan(pgstatistic, false, false, 0, NULL); pgsscan = heap_beginscan(pgstatistic, false, SnapshotNow, 0, NULL);
while (HeapTupleIsValid(pgstup = heap_getnext(pgsscan, 0, NULL))) while (HeapTupleIsValid(pgstup = heap_getnext(pgsscan, 0, NULL)))
{ {
...@@ -2158,7 +2154,7 @@ vc_getindices(Oid relid, int *nindices, Relation **Irel) ...@@ -2158,7 +2154,7 @@ vc_getindices(Oid relid, int *nindices, Relation **Irel)
F_OIDEQ, F_OIDEQ,
ObjectIdGetDatum(relid)); ObjectIdGetDatum(relid));
pgiscan = heap_beginscan(pgindex, false, false, 1, &pgikey); pgiscan = heap_beginscan(pgindex, false, SnapshotNow, 1, &pgikey);
while (HeapTupleIsValid(pgitup = heap_getnext(pgiscan, 0, NULL))) while (HeapTupleIsValid(pgitup = heap_getnext(pgiscan, 0, NULL)))
{ {
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/executor/execAmi.c,v 1.23 1998/07/16 01:49:18 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/executor/execAmi.c,v 1.24 1998/07/27 19:37:54 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -56,7 +56,7 @@ ...@@ -56,7 +56,7 @@
static Pointer static Pointer
ExecBeginScan(Relation relation, int nkeys, ScanKey skeys, ExecBeginScan(Relation relation, int nkeys, ScanKey skeys,
bool isindex, ScanDirection dir); bool isindex, ScanDirection dir, Snapshot snapshot);
static Relation ExecOpenR(Oid relationOid, bool isindex); static Relation ExecOpenR(Oid relationOid, bool isindex);
/* ---------------------------------------------------------------- /* ----------------------------------------------------------------
...@@ -81,6 +81,7 @@ ExecOpenScanR(Oid relOid, ...@@ -81,6 +81,7 @@ ExecOpenScanR(Oid relOid,
ScanKey skeys, ScanKey skeys,
bool isindex, bool isindex,
ScanDirection dir, ScanDirection dir,
Snapshot snapshot,
Relation *returnRelation, /* return */ Relation *returnRelation, /* return */
Pointer *returnScanDesc) /* return */ Pointer *returnScanDesc) /* return */
{ {
...@@ -99,7 +100,8 @@ ExecOpenScanR(Oid relOid, ...@@ -99,7 +100,8 @@ ExecOpenScanR(Oid relOid,
nkeys, nkeys,
skeys, skeys,
isindex, isindex,
dir); dir,
snapshot);
if (returnRelation != NULL) if (returnRelation != NULL)
*returnRelation = relation; *returnRelation = relation;
...@@ -153,7 +155,8 @@ ExecBeginScan(Relation relation, ...@@ -153,7 +155,8 @@ ExecBeginScan(Relation relation,
int nkeys, int nkeys,
ScanKey skeys, ScanKey skeys,
bool isindex, bool isindex,
ScanDirection dir) ScanDirection dir,
Snapshot snapshot)
{ {
Pointer scanDesc; Pointer scanDesc;
...@@ -178,7 +181,7 @@ ExecBeginScan(Relation relation, ...@@ -178,7 +181,7 @@ ExecBeginScan(Relation relation,
{ {
scanDesc = (Pointer) heap_beginscan(relation, scanDesc = (Pointer) heap_beginscan(relation,
ScanDirectionIsBackward(dir), ScanDirectionIsBackward(dir),
false, snapshot,
nkeys, nkeys,
skeys); skeys);
} }
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.50 1998/07/20 16:14:13 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.51 1998/07/27 19:37:55 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -125,6 +125,8 @@ ExecutorStart(QueryDesc *queryDesc, EState *estate) ...@@ -125,6 +125,8 @@ ExecutorStart(QueryDesc *queryDesc, EState *estate)
memset(estate->es_param_exec_vals, 0, queryDesc->plantree->nParamExec * sizeof(ParamExecData)); memset(estate->es_param_exec_vals, 0, queryDesc->plantree->nParamExec * sizeof(ParamExecData));
} }
estate->es_snapshot = SnapshotNow;
result = InitPlan(queryDesc->operation, result = InitPlan(queryDesc->operation,
queryDesc->parsetree, queryDesc->parsetree,
queryDesc->plantree, queryDesc->plantree,
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.33 1998/07/20 16:14:13 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.34 1998/07/27 19:37:56 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -750,7 +750,7 @@ ExecOpenIndices(Oid resultRelationOid, ...@@ -750,7 +750,7 @@ ExecOpenIndices(Oid resultRelationOid,
*/ */
indexSd = heap_beginscan(indexRd, /* scan desc */ indexSd = heap_beginscan(indexRd, /* scan desc */
false, /* scan backward flag */ false, /* scan backward flag */
false, /* see self */ SnapshotNow, /* NOW snapshot */
1, /* number scan keys */ 1, /* number scan keys */
&key); /* scan keys */ &key); /* scan keys */
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/executor/nodeIndexscan.c,v 1.18 1998/06/15 19:28:22 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/executor/nodeIndexscan.c,v 1.19 1998/07/27 19:37:57 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -86,6 +86,7 @@ IndexNext(IndexScan *node) ...@@ -86,6 +86,7 @@ IndexNext(IndexScan *node)
CommonScanState *scanstate; CommonScanState *scanstate;
IndexScanState *indexstate; IndexScanState *indexstate;
ScanDirection direction; ScanDirection direction;
Snapshot snapshot;
int indexPtr; int indexPtr;
IndexScanDescPtr scanDescs; IndexScanDescPtr scanDescs;
IndexScanDesc scandesc; IndexScanDesc scandesc;
...@@ -101,6 +102,7 @@ IndexNext(IndexScan *node) ...@@ -101,6 +102,7 @@ IndexNext(IndexScan *node)
*/ */
estate = node->scan.plan.state; estate = node->scan.plan.state;
direction = estate->es_direction; direction = estate->es_direction;
snapshot = estate->es_snapshot;
scanstate = node->scan.scanstate; scanstate = node->scan.scanstate;
indexstate = node->indxstate; indexstate = node->indxstate;
indexPtr = indexstate->iss_IndexPtr; indexPtr = indexstate->iss_IndexPtr;
...@@ -122,7 +124,8 @@ IndexNext(IndexScan *node) ...@@ -122,7 +124,8 @@ IndexNext(IndexScan *node)
*/ */
while ((result = index_getnext(scandesc, direction)) != NULL) while ((result = index_getnext(scandesc, direction)) != NULL)
{ {
tuple = heap_fetch(heapRelation, false, &result->heap_iptr, &buffer); tuple = heap_fetch(heapRelation, snapshot,
&result->heap_iptr, &buffer);
/* be tidy */ /* be tidy */
pfree(result); pfree(result);
...@@ -920,6 +923,7 @@ ExecInitIndexScan(IndexScan *node, EState *estate, Plan *parent) ...@@ -920,6 +923,7 @@ ExecInitIndexScan(IndexScan *node, EState *estate, Plan *parent)
(ScanKey) NULL, /* scan key */ (ScanKey) NULL, /* scan key */
0, /* is index */ 0, /* is index */
direction, /* scan direction */ direction, /* scan direction */
estate->es_snapshot, /* */
&currentRelation, /* return: rel desc */ &currentRelation, /* return: rel desc */
(Pointer *) &currentScanDesc); /* return: scan desc */ (Pointer *) &currentScanDesc); /* return: scan desc */
...@@ -958,6 +962,7 @@ ExecInitIndexScan(IndexScan *node, EState *estate, Plan *parent) ...@@ -958,6 +962,7 @@ ExecInitIndexScan(IndexScan *node, EState *estate, Plan *parent)
scanKeys[i], /* scan key */ scanKeys[i], /* scan key */
true, /* is index */ true, /* is index */
direction, /* scan direction */ direction, /* scan direction */
estate->es_snapshot,
&(relationDescs[i]), /* return: rel desc */ &(relationDescs[i]), /* return: rel desc */
(Pointer *) &(scanDescs[i])); (Pointer *) &(scanDescs[i]));
/* return: scan desc */ /* return: scan desc */
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/executor/nodeMaterial.c,v 1.13 1998/02/26 04:31:28 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/executor/nodeMaterial.c,v 1.14 1998/07/27 19:37:57 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -139,8 +139,7 @@ ExecMaterial(Material *node) ...@@ -139,8 +139,7 @@ ExecMaterial(Material *node)
*/ */
currentScanDesc = heap_beginscan(currentRelation, /* relation */ currentScanDesc = heap_beginscan(currentRelation, /* relation */
ScanDirectionIsBackward(dir), ScanDirectionIsBackward(dir),
/* bkwd flag */ SnapshotSelf, /* seeself */
false, /* seeself */
0, /* num scan keys */ 0, /* num scan keys */
NULL); /* scan keys */ NULL); /* scan keys */
matstate->csstate.css_currentRelation = currentRelation; matstate->csstate.css_currentRelation = currentRelation;
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/executor/nodeSeqscan.c,v 1.10 1998/06/15 19:28:22 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/executor/nodeSeqscan.c,v 1.11 1998/07/27 19:37:57 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -181,6 +181,7 @@ InitScanRelation(SeqScan *node, EState *estate, ...@@ -181,6 +181,7 @@ InitScanRelation(SeqScan *node, EState *estate,
NULL, /* scan key */ NULL, /* scan key */
0, /* is index */ 0, /* is index */
direction,/* scan direction */ direction,/* scan direction */
estate->es_snapshot,
&currentRelation, /* return: rel desc */ &currentRelation, /* return: rel desc */
(Pointer *) &currentScanDesc); /* return: scan desc */ (Pointer *) &currentScanDesc); /* return: scan desc */
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
* ExecEndTee * ExecEndTee
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/executor/Attic/nodeTee.c,v 1.18 1998/06/15 19:28:23 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/executor/Attic/nodeTee.c,v 1.19 1998/07/27 19:37:57 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -229,6 +229,7 @@ initTeeScanDescs(Tee *node) ...@@ -229,6 +229,7 @@ initTeeScanDescs(Tee *node)
TeeState *teeState; TeeState *teeState;
Relation bufferRel; Relation bufferRel;
ScanDirection dir; ScanDirection dir;
Snapshot snapshot;
MemoryContext orig; MemoryContext orig;
teeState = node->teestate; teeState = node->teestate;
...@@ -241,12 +242,13 @@ initTeeScanDescs(Tee *node) ...@@ -241,12 +242,13 @@ initTeeScanDescs(Tee *node)
bufferRel = teeState->tee_bufferRel; bufferRel = teeState->tee_bufferRel;
dir = ((Plan *) node)->state->es_direction; /* backwards not handled dir = ((Plan *) node)->state->es_direction; /* backwards not handled
* yet XXX */ * yet XXX */
snapshot = ((Plan *) node)->state->es_snapshot;
if (teeState->tee_leftScanDesc == NULL) if (teeState->tee_leftScanDesc == NULL)
{ {
teeState->tee_leftScanDesc = heap_beginscan(bufferRel, teeState->tee_leftScanDesc = heap_beginscan(bufferRel,
ScanDirectionIsBackward(dir), ScanDirectionIsBackward(dir),
false, /* seeself */ snapshot,
0, /* num scan keys */ 0, /* num scan keys */
NULL /* scan keys */ NULL /* scan keys */
); );
...@@ -255,7 +257,7 @@ initTeeScanDescs(Tee *node) ...@@ -255,7 +257,7 @@ initTeeScanDescs(Tee *node)
{ {
teeState->tee_rightScanDesc = heap_beginscan(bufferRel, teeState->tee_rightScanDesc = heap_beginscan(bufferRel,
ScanDirectionIsBackward(dir), ScanDirectionIsBackward(dir),
false, /* seeself */ snapshot,
0, /* num scan keys */ 0, /* num scan keys */
NULL /* scan keys */ NULL /* scan keys */
); );
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.17 1998/07/18 04:22:31 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.18 1998/07/27 19:37:58 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -979,7 +979,7 @@ clause_pred_clause_test(Expr *predicate, Node *clause) ...@@ -979,7 +979,7 @@ clause_pred_clause_test(Expr *predicate, Node *clause)
* will be used to find the associated strategy numbers for the test. * will be used to find the associated strategy numbers for the test.
* --Nels, Jan '93 * --Nels, Jan '93
*/ */
scan = heap_beginscan(relation, false, false, 2, entry); scan = heap_beginscan(relation, false, SnapshotNow, 2, entry);
tuple = heap_getnext(scan, false, (Buffer *) NULL); tuple = heap_getnext(scan, false, (Buffer *) NULL);
if (!HeapTupleIsValid(tuple)) if (!HeapTupleIsValid(tuple))
{ {
...@@ -1010,7 +1010,7 @@ clause_pred_clause_test(Expr *predicate, Node *clause) ...@@ -1010,7 +1010,7 @@ clause_pred_clause_test(Expr *predicate, Node *clause)
F_OIDEQ, F_OIDEQ,
ObjectIdGetDatum(clause_op)); ObjectIdGetDatum(clause_op));
scan = heap_beginscan(relation, false, false, 3, entry); scan = heap_beginscan(relation, false, SnapshotNow, 3, entry);
tuple = heap_getnext(scan, false, (Buffer *) NULL); tuple = heap_getnext(scan, false, (Buffer *) NULL);
if (!HeapTupleIsValid(tuple)) if (!HeapTupleIsValid(tuple))
{ {
...@@ -1042,7 +1042,7 @@ clause_pred_clause_test(Expr *predicate, Node *clause) ...@@ -1042,7 +1042,7 @@ clause_pred_clause_test(Expr *predicate, Node *clause)
F_INT2EQ, F_INT2EQ,
Int16GetDatum(test_strategy)); Int16GetDatum(test_strategy));
scan = heap_beginscan(relation, false, false, 3, entry); scan = heap_beginscan(relation, false, SnapshotNow, 3, entry);
tuple = heap_getnext(scan, false, (Buffer *) NULL); tuple = heap_getnext(scan, false, (Buffer *) NULL);
if (!HeapTupleIsValid(tuple)) if (!HeapTupleIsValid(tuple))
{ {
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/plancat.c,v 1.17 1998/06/15 19:28:49 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/optimizer/util/plancat.c,v 1.18 1998/07/27 19:38:00 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -148,7 +148,7 @@ index_info(Query *root, bool first, int relid, IdxInfoRetval *info) ...@@ -148,7 +148,7 @@ index_info(Query *root, bool first, int relid, IdxInfoRetval *info)
ObjectIdGetDatum(indrelid)); ObjectIdGetDatum(indrelid));
relation = heap_openr(IndexRelationName); relation = heap_openr(IndexRelationName);
scan = heap_beginscan(relation, 0, false, scan = heap_beginscan(relation, 0, SnapshotNow,
1, &indexKey); 1, &indexKey);
} }
if (!HeapScanIsValid(scan)) if (!HeapScanIsValid(scan))
...@@ -413,7 +413,7 @@ find_inheritance_children(Oid inhparent) ...@@ -413,7 +413,7 @@ find_inheritance_children(Oid inhparent)
key[0].sk_argument = ObjectIdGetDatum((Oid) inhparent); key[0].sk_argument = ObjectIdGetDatum((Oid) inhparent);
relation = heap_openr(InheritsRelationName); relation = heap_openr(InheritsRelationName);
scan = heap_beginscan(relation, 0, false, 1, key); scan = heap_beginscan(relation, 0, SnapshotNow, 1, key);
while (HeapTupleIsValid(inheritsTuple = while (HeapTupleIsValid(inheritsTuple =
heap_getnext(scan, 0, heap_getnext(scan, 0,
(Buffer *) NULL))) (Buffer *) NULL)))
...@@ -449,7 +449,7 @@ VersionGetParents(Oid verrelid) ...@@ -449,7 +449,7 @@ VersionGetParents(Oid verrelid)
key[0].sk_nargs = key[0].sk_func.fn_nargs; key[0].sk_nargs = key[0].sk_func.fn_nargs;
relation = heap_openr(VersionRelationName); relation = heap_openr(VersionRelationName);
key[0].sk_argument = ObjectIdGetDatum(verrelid); key[0].sk_argument = ObjectIdGetDatum(verrelid);
scan = heap_beginscan(relation, 0, false, 1, key); scan = heap_beginscan(relation, 0, SnapshotNow, 1, key);
for (;;) for (;;)
{ {
versionTuple = heap_getnext(scan, 0, versionTuple = heap_getnext(scan, 0,
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.23 1998/07/20 19:53:51 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.24 1998/07/27 19:38:02 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -547,7 +547,7 @@ func_get_candidates(char *funcname, int nargs) ...@@ -547,7 +547,7 @@ func_get_candidates(char *funcname, int nargs)
ItemPointer iptr; ItemPointer iptr;
iptr = &indexRes->heap_iptr; iptr = &indexRes->heap_iptr;
tuple = heap_fetch(heapRelation, false, iptr, &buffer); tuple = heap_fetch(heapRelation, SnapshotNow, iptr, &buffer);
pfree(indexRes); pfree(indexRes);
if (HeapTupleIsValid(tuple)) if (HeapTupleIsValid(tuple))
{ {
...@@ -1024,7 +1024,7 @@ find_inheritors(Oid relid, Oid **supervec) ...@@ -1024,7 +1024,7 @@ find_inheritors(Oid relid, Oid **supervec)
F_OIDEQ, F_OIDEQ,
ObjectIdGetDatum(relid)); ObjectIdGetDatum(relid));
inhscan = heap_beginscan(inhrel, 0, false, 1, &skey); inhscan = heap_beginscan(inhrel, 0, SnapshotNow, 1, &skey);
while (HeapTupleIsValid(inhtup = heap_getnext(inhscan, 0, &buf))) while (HeapTupleIsValid(inhtup = heap_getnext(inhscan, 0, &buf)))
{ {
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/parse_oper.c,v 1.13 1998/06/15 19:28:55 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/parser/parse_oper.c,v 1.14 1998/07/27 19:38:04 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -108,7 +108,7 @@ binary_oper_get_candidates(char *opname, ...@@ -108,7 +108,7 @@ binary_oper_get_candidates(char *opname,
pg_operator_desc = heap_openr(OperatorRelationName); pg_operator_desc = heap_openr(OperatorRelationName);
pg_operator_scan = heap_beginscan(pg_operator_desc, pg_operator_scan = heap_beginscan(pg_operator_desc,
0, 0,
TRUE, SnapshotSelf, /* ??? */
nkeys, nkeys,
opKey); opKey);
...@@ -655,7 +655,7 @@ printf("unary_oper_get_candidates: start scan for '%s'\n", op); ...@@ -655,7 +655,7 @@ printf("unary_oper_get_candidates: start scan for '%s'\n", op);
pg_operator_desc = heap_openr(OperatorRelationName); pg_operator_desc = heap_openr(OperatorRelationName);
pg_operator_scan = heap_beginscan(pg_operator_desc, pg_operator_scan = heap_beginscan(pg_operator_desc,
0, 0,
TRUE, SnapshotSelf, /* ??? */
2, 2,
opKey); opKey);
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteRemove.c,v 1.14 1998/04/26 04:07:07 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteRemove.c,v 1.15 1998/07/27 19:38:08 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -87,7 +87,7 @@ RemoveRewriteRule(char *ruleName) ...@@ -87,7 +87,7 @@ RemoveRewriteRule(char *ruleName)
ScanKeyEntryInitialize(&scanKeyData, 0, Anum_pg_rewrite_rulename, ScanKeyEntryInitialize(&scanKeyData, 0, Anum_pg_rewrite_rulename,
F_NAMEEQ, NameGetDatum(ruleName)); F_NAMEEQ, NameGetDatum(ruleName));
scanDesc = heap_beginscan(RewriteRelation, scanDesc = heap_beginscan(RewriteRelation,
0, false, 1, &scanKeyData); 0, SnapshotNow, 1, &scanKeyData);
tuple = heap_getnext(scanDesc, 0, (Buffer *) NULL); tuple = heap_getnext(scanDesc, 0, (Buffer *) NULL);
...@@ -161,7 +161,7 @@ RelationRemoveRules(Oid relid) ...@@ -161,7 +161,7 @@ RelationRemoveRules(Oid relid)
F_OIDEQ, F_OIDEQ,
ObjectIdGetDatum(relid)); ObjectIdGetDatum(relid));
scanDesc = heap_beginscan(RewriteRelation, scanDesc = heap_beginscan(RewriteRelation,
0, false, 1, &scanKeyData); 0, SnapshotNow, 1, &scanKeyData);
for (;;) for (;;)
{ {
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteSupport.c,v 1.23 1998/07/26 04:30:38 scrappy Exp $ * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteSupport.c,v 1.24 1998/07/27 19:38:09 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -16,11 +16,7 @@ ...@@ -16,11 +16,7 @@
#include "access/heapam.h" #include "access/heapam.h"
#include "catalog/catname.h" #include "catalog/catname.h"
#include "catalog/indexing.h" #include "catalog/indexing.h"
#ifdef MULTIBYTE
#include "catalog/pg_class_mb.h"
#else
#include "catalog/pg_class.h" #include "catalog/pg_class.h"
#endif
#include "catalog/pg_rewrite.h" #include "catalog/pg_rewrite.h"
#include "fmgr.h" #include "fmgr.h"
#include "nodes/parsenodes.h" #include "nodes/parsenodes.h"
...@@ -109,7 +105,7 @@ IsDefinedRewriteRule(char *ruleName) ...@@ -109,7 +105,7 @@ IsDefinedRewriteRule(char *ruleName)
ScanKeyEntryInitialize(&scanKey, 0, Anum_pg_rewrite_rulename, ScanKeyEntryInitialize(&scanKey, 0, Anum_pg_rewrite_rulename,
F_NAMEEQ, PointerGetDatum(ruleName)); F_NAMEEQ, PointerGetDatum(ruleName));
scanDesc = heap_beginscan(RewriteRelation, scanDesc = heap_beginscan(RewriteRelation,
0, false, 1, &scanKey); 0, SnapshotNow, 1, &scanKey);
tuple = heap_getnext(scanDesc, 0, (Buffer *) NULL); tuple = heap_getnext(scanDesc, 0, (Buffer *) NULL);
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/storage/ipc/shmem.c,v 1.28 1998/07/21 06:17:35 vadim Exp $ * $Header: /cvsroot/pgsql/src/backend/storage/ipc/shmem.c,v 1.29 1998/07/27 19:38:10 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -585,7 +585,6 @@ ShmemInitStruct(char *name, unsigned long size, bool *foundPtr) ...@@ -585,7 +585,6 @@ ShmemInitStruct(char *name, unsigned long size, bool *foundPtr)
return (structPtr); return (structPtr);
} }
/* /*
* TransactionIdIsInProgress -- is given transaction running by some backend * TransactionIdIsInProgress -- is given transaction running by some backend
* *
...@@ -625,3 +624,75 @@ TransactionIdIsInProgress(TransactionId xid) ...@@ -625,3 +624,75 @@ TransactionIdIsInProgress(TransactionId xid)
elog(ERROR, "TransactionIdIsInProgress: ShmemIndex corrupted"); elog(ERROR, "TransactionIdIsInProgress: ShmemIndex corrupted");
return (false); return (false);
} }
#ifdef LowLevelLocking
/*
* GetSnapshotData -- returns information about running transactions.
*
* InvalidTransactionId is used as terminator in snapshot->xip array.
* If serialized is true then XID >= current xact ID will not be
* placed in array. Current xact ID are never placed there (just
* to reduce its length, xmin/xmax may be equal to cid).
* MyProc->xmin will be setted if equal to InvalidTransactionId.
*
* Yet another strange func for this place... - vadim 07/21/98
*/
Snapshot
GetSnapshotData(bool serialized)
{
Snapshot snapshot = (Snapshot) malloc(sizeof(SnapshotData));
TransactionId snapshot->xip = (TransactionId*)
malloc(32 * sizeof(TransactionId));
ShmemIndexEnt *result;
PROC *proc;
TransactionId cid = GetCurrentTransactionId();
uint count = 0;
unit free = 31;
Assert(ShmemIndex);
snapshot->xmax = cid;
snapshot->xmin = cid;
SpinAcquire(ShmemIndexLock);
hash_seq((HTAB *) NULL);
while ((result = (ShmemIndexEnt *) hash_seq(ShmemIndex)) != NULL)
{
if (result == (ShmemIndexEnt *) TRUE)
{
if (MyProc->xmin == InvalidTransactionId)
MyProc->xmin = snapshot->xmin;
SpinRelease(ShmemIndexLock);
snapshot->xip[count] = InvalidTransactionId;
return (snapshot);
}
if (result->location == INVALID_OFFSET ||
strncmp(result->key, "PID ", 4) != 0)
continue;
proc = (PROC *) MAKE_PTR(result->location);
if (proc == MyProc || proc->xid < FirstTransactionId ||
serialized && proc->xid >= cid)
continue;
if (proc->xid < snapshot->xmin)
snapshot->xmin = proc->xid;
else if (proc->xid > snapshot->xmax)
snapshot->xmax = proc->xid;
if (free == 0)
{
snapshot->xip = (TransactionId*) realloc(snapshot->xip,
(count + 33) * sizeof(TransactionId));
free = 32;
}
snapshot->xip[count] = proc->xid;
free--;
count++;
}
SpinRelease(ShmemIndexLock);
free(snapshot->xip);
free(snapshot);
elog(ERROR, "GetSnapshotData: ShmemIndex corrupted");
return (NULL);
}
#endif
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/storage/large_object/inv_api.c,v 1.31 1998/07/21 04:17:24 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/storage/large_object/inv_api.c,v 1.32 1998/07/27 19:38:11 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -656,9 +656,13 @@ inv_fetchtup(LargeObjectDesc *obj_desc, Buffer *bufP) ...@@ -656,9 +656,13 @@ inv_fetchtup(LargeObjectDesc *obj_desc, Buffer *bufP)
* For time travel, we need to use the actual time qual here, * For time travel, we need to use the actual time qual here,
* rather that NowTimeQual. We currently have no way to pass * rather that NowTimeQual. We currently have no way to pass
* a time qual in. * a time qual in.
*
* This is now valid for snapshot !!!
* And should be fixed in some way... - vadim 07/28/98
*
*/ */
htup = heap_fetch(obj_desc->heap_r, false, htup = heap_fetch(obj_desc->heap_r, SnapshotNow,
&(res->heap_iptr), bufP); &(res->heap_iptr), bufP);
} while (htup == (HeapTuple) NULL); } while (htup == (HeapTuple) NULL);
...@@ -669,7 +673,7 @@ inv_fetchtup(LargeObjectDesc *obj_desc, Buffer *bufP) ...@@ -669,7 +673,7 @@ inv_fetchtup(LargeObjectDesc *obj_desc, Buffer *bufP)
} }
else else
{ {
htup = heap_fetch(obj_desc->heap_r, false, htup = heap_fetch(obj_desc->heap_r, SnapshotNow,
&(obj_desc->htid), bufP); &(obj_desc->htid), bufP);
} }
...@@ -1235,7 +1239,7 @@ _inv_getsize(Relation hreln, TupleDesc hdesc, Relation ireln) ...@@ -1235,7 +1239,7 @@ _inv_getsize(Relation hreln, TupleDesc hdesc, Relation ireln)
if (buf != InvalidBuffer) if (buf != InvalidBuffer)
ReleaseBuffer(buf); ReleaseBuffer(buf);
htup = heap_fetch(hreln, false, &(res->heap_iptr), &buf); htup = heap_fetch(hreln, SnapshotNow, &(res->heap_iptr), &buf);
pfree(res); pfree(res);
} while (!HeapTupleIsValid(htup)); } while (!HeapTupleIsValid(htup));
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.39 1998/06/30 02:33:32 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.40 1998/07/27 19:38:15 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
* This is so that we can support more backends. (system-wide semaphore * This is so that we can support more backends. (system-wide semaphore
* sets run out pretty fast.) -ay 4/95 * sets run out pretty fast.) -ay 4/95
* *
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.39 1998/06/30 02:33:32 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.40 1998/07/27 19:38:15 vadim Exp $
*/ */
#include <sys/time.h> #include <sys/time.h>
#include <unistd.h> #include <unistd.h>
...@@ -252,6 +252,9 @@ InitProcess(IPCKey key) ...@@ -252,6 +252,9 @@ InitProcess(IPCKey key)
MyProc->pid = MyProcPid; MyProc->pid = MyProcPid;
#endif #endif
MyProc->xid = InvalidTransactionId; MyProc->xid = InvalidTransactionId;
#ifdef LowLevelLocking
MyProc->xmin = InvalidTransactionId;
#endif
/* ---------------- /* ----------------
* Start keeping spin lock stats from here on. Any botch before * Start keeping spin lock stats from here on. Any botch before
...@@ -479,11 +482,13 @@ ProcSleep(PROC_QUEUE *waitQueue, ...@@ -479,11 +482,13 @@ ProcSleep(PROC_QUEUE *waitQueue,
MyProc->token = token; MyProc->token = token;
MyProc->waitLock = lock; MyProc->waitLock = lock;
#ifndef LowLevelLocking
/* ------------------- /* -------------------
* currently, we only need this for the ProcWakeup routines * currently, we only need this for the ProcWakeup routines
* ------------------- * -------------------
*/ */
TransactionIdStore((TransactionId) GetCurrentTransactionId(), &MyProc->xid); TransactionIdStore((TransactionId) GetCurrentTransactionId(), &MyProc->xid);
#endif
/* ------------------- /* -------------------
* assume that these two operations are atomic (because * assume that these two operations are atomic (because
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/not_in.c,v 1.9 1998/06/15 19:29:36 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/not_in.c,v 1.10 1998/07/27 19:38:18 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -72,8 +72,8 @@ int4notin(int16 not_in_arg, char *relation_and_attr) ...@@ -72,8 +72,8 @@ int4notin(int16 not_in_arg, char *relation_and_attr)
/* the last argument should be a ScanKey, not an integer! - jolly */ /* the last argument should be a ScanKey, not an integer! - jolly */
/* it looks like the arguments are out of order, too */ /* it looks like the arguments are out of order, too */
/* but skeyData is never initialized! does this work?? - ay 2/95 */ /* but skeyData is never initialized! does this work?? - ay 2/95 */
scan_descriptor = heap_beginscan(relation_to_scan, false, false, 0, scan_descriptor = heap_beginscan(relation_to_scan, false, SnapshotNow,
&skeyData); 0, &skeyData);
retval = true; retval = true;
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.20 1998/07/20 16:57:01 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.21 1998/07/27 19:38:19 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -55,7 +55,7 @@ regprocin(char *proname) ...@@ -55,7 +55,7 @@ regprocin(char *proname)
(RegProcedure) F_NAMEEQ, (RegProcedure) F_NAMEEQ,
(Datum) proname); (Datum) proname);
procscan = heap_beginscan(proc, 0, false, 1, &key); procscan = heap_beginscan(proc, 0, SnapshotNow, 1, &key);
if (!HeapScanIsValid(procscan)) if (!HeapScanIsValid(procscan))
{ {
heap_close(proc); heap_close(proc);
...@@ -111,7 +111,7 @@ regprocout(RegProcedure proid) ...@@ -111,7 +111,7 @@ regprocout(RegProcedure proid)
(RegProcedure) F_INT4EQ, (RegProcedure) F_INT4EQ,
(Datum) proid); (Datum) proid);
procscan = heap_beginscan(proc, 0, false, 1, &key); procscan = heap_beginscan(proc, 0, SnapshotNow, 1, &key);
if (!HeapScanIsValid(procscan)) if (!HeapScanIsValid(procscan))
{ {
heap_close(proc); heap_close(proc);
...@@ -189,7 +189,7 @@ oid8types(Oid (*oidArray)[]) ...@@ -189,7 +189,7 @@ oid8types(Oid (*oidArray)[])
(RegProcedure) F_INT4EQ, (RegProcedure) F_INT4EQ,
(Datum) *sp); (Datum) *sp);
typescan = heap_beginscan(type, 0, false, 1, &key); typescan = heap_beginscan(type, 0, SnapshotNow, 1, &key);
if (!HeapScanIsValid(typescan)) if (!HeapScanIsValid(typescan))
{ {
heap_close(type); heap_close(type);
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.19 1998/06/15 19:29:37 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.20 1998/07/27 19:38:20 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -349,7 +349,7 @@ gethilokey(Oid relid, ...@@ -349,7 +349,7 @@ gethilokey(Oid relid,
key[0].sk_argument = ObjectIdGetDatum(relid); key[0].sk_argument = ObjectIdGetDatum(relid);
key[1].sk_argument = Int16GetDatum((int16) attnum); key[1].sk_argument = Int16GetDatum((int16) attnum);
key[2].sk_argument = ObjectIdGetDatum(opid); key[2].sk_argument = ObjectIdGetDatum(opid);
sdesc = heap_beginscan(rdesc, 0, false, 3, key); sdesc = heap_beginscan(rdesc, 0, SnapshotNow, 3, key);
tuple = heap_getnext(sdesc, 0, (Buffer *) NULL); tuple = heap_getnext(sdesc, 0, (Buffer *) NULL);
if (!HeapTupleIsValid(tuple)) if (!HeapTupleIsValid(tuple))
{ {
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/sets.c,v 1.14 1998/07/20 16:57:02 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/sets.c,v 1.15 1998/07/27 19:38:21 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -123,7 +123,7 @@ SetDefine(char *querystr, char *typename) ...@@ -123,7 +123,7 @@ SetDefine(char *querystr, char *typename)
oidKey[0].sk_argument = ObjectIdGetDatum(setoid); oidKey[0].sk_argument = ObjectIdGetDatum(setoid);
pg_proc_scan = heap_beginscan(procrel, pg_proc_scan = heap_beginscan(procrel,
0, 0,
true, SnapshotSelf,
1, 1,
oidKey); oidKey);
tup = heap_getnext(pg_proc_scan, 0, &buffer); tup = heap_getnext(pg_proc_scan, 0, &buffer);
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.30 1998/07/20 16:57:03 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.31 1998/07/27 19:38:22 vadim Exp $
* *
* Notes: * Notes:
* XXX This needs to use exception.h to handle recovery when * XXX This needs to use exception.h to handle recovery when
...@@ -994,7 +994,7 @@ SearchSysCache(struct catcache * cache, ...@@ -994,7 +994,7 @@ SearchSysCache(struct catcache * cache,
*/ */
MemoryContextSwitchTo(oldcxt); MemoryContextSwitchTo(oldcxt);
sd = heap_beginscan(relation, 0, false, sd = heap_beginscan(relation, 0, SnapshotNow,
cache->cc_nkeys, cache->cc_skey); cache->cc_nkeys, cache->cc_skey);
/* should this buffer be ReleaseBuffer'd? --djm 8/20/96 */ /* should this buffer be ReleaseBuffer'd? --djm 8/20/96 */
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.43 1998/07/26 04:30:57 scrappy Exp $ * $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.44 1998/07/27 19:38:23 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -53,11 +53,7 @@ ...@@ -53,11 +53,7 @@
#include "catalog/indexing.h" #include "catalog/indexing.h"
#include "catalog/pg_aggregate.h" #include "catalog/pg_aggregate.h"
#include "catalog/pg_attrdef.h" #include "catalog/pg_attrdef.h"
#ifdef MULTIBYTE
#include "catalog/pg_attribute_mb.h"
#else
#include "catalog/pg_attribute.h" #include "catalog/pg_attribute.h"
#endif
#include "catalog/pg_index.h" #include "catalog/pg_index.h"
#include "catalog/pg_proc.h" #include "catalog/pg_proc.h"
#include "catalog/pg_class.h" #include "catalog/pg_class.h"
...@@ -376,7 +372,7 @@ scan_pg_rel_seq(RelationBuildDescInfo buildinfo) ...@@ -376,7 +372,7 @@ scan_pg_rel_seq(RelationBuildDescInfo buildinfo)
if (!IsInitProcessingMode()) if (!IsInitProcessingMode())
RelationSetLockForRead(pg_class_desc); RelationSetLockForRead(pg_class_desc);
pg_class_scan = pg_class_scan =
heap_beginscan(pg_class_desc, 0, false, 1, &key); heap_beginscan(pg_class_desc, 0, SnapshotNow, 1, &key);
pg_class_tuple = heap_getnext(pg_class_scan, 0, &buf); pg_class_tuple = heap_getnext(pg_class_scan, 0, &buf);
/* ---------------- /* ----------------
...@@ -546,7 +542,7 @@ build_tupdesc_seq(RelationBuildDescInfo buildinfo, ...@@ -546,7 +542,7 @@ build_tupdesc_seq(RelationBuildDescInfo buildinfo,
*/ */
pg_attribute_desc = heap_openr(AttributeRelationName); pg_attribute_desc = heap_openr(AttributeRelationName);
pg_attribute_scan = pg_attribute_scan =
heap_beginscan(pg_attribute_desc, 0, false, 1, &key); heap_beginscan(pg_attribute_desc, 0, SnapshotNow, 1, &key);
/* ---------------- /* ----------------
* add attribute data to relation->rd_att * add attribute data to relation->rd_att
...@@ -717,7 +713,7 @@ RelationBuildRuleLock(Relation relation) ...@@ -717,7 +713,7 @@ RelationBuildRuleLock(Relation relation)
*/ */
pg_rewrite_desc = heap_openr(RewriteRelationName); pg_rewrite_desc = heap_openr(RewriteRelationName);
pg_rewrite_scan = pg_rewrite_scan =
heap_beginscan(pg_rewrite_desc, 0, false, 1, &key); heap_beginscan(pg_rewrite_desc, 0, SnapshotNow, 1, &key);
pg_rewrite_tupdesc = pg_rewrite_tupdesc =
RelationGetTupleDescriptor(pg_rewrite_desc); RelationGetTupleDescriptor(pg_rewrite_desc);
...@@ -1705,7 +1701,7 @@ AttrDefaultFetch(Relation relation) ...@@ -1705,7 +1701,7 @@ AttrDefaultFetch(Relation relation)
break; break;
iptr = &indexRes->heap_iptr; iptr = &indexRes->heap_iptr;
tuple = heap_fetch(adrel, false, iptr, &buffer); tuple = heap_fetch(adrel, SnapshotNow, iptr, &buffer);
pfree(indexRes); pfree(indexRes);
if (!HeapTupleIsValid(tuple)) if (!HeapTupleIsValid(tuple))
continue; continue;
...@@ -1793,7 +1789,7 @@ RelCheckFetch(Relation relation) ...@@ -1793,7 +1789,7 @@ RelCheckFetch(Relation relation)
break; break;
iptr = &indexRes->heap_iptr; iptr = &indexRes->heap_iptr;
tuple = heap_fetch(rcrel, false, iptr, &buffer); tuple = heap_fetch(rcrel, SnapshotNow, iptr, &buffer);
pfree(indexRes); pfree(indexRes);
if (!HeapTupleIsValid(tuple)) if (!HeapTupleIsValid(tuple))
continue; continue;
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/misc/Attic/database.c,v 1.13 1998/07/26 04:31:07 scrappy Exp $ * $Header: /cvsroot/pgsql/src/backend/utils/misc/Attic/database.c,v 1.14 1998/07/27 19:38:26 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -22,12 +22,7 @@ ...@@ -22,12 +22,7 @@
#include "access/heapam.h" #include "access/heapam.h"
#include "access/xact.h" #include "access/xact.h"
#include "catalog/catname.h" #include "catalog/catname.h"
#ifdef MULTIBYTE
#include "catalog/pg_database_mb.h"
#include "mb/pg_wchar.h"
#else
#include "catalog/pg_database.h" #include "catalog/pg_database.h"
#endif
#include "fmgr.h" #include "fmgr.h"
#include "miscadmin.h" #include "miscadmin.h"
#include "storage/bufmgr.h" #include "storage/bufmgr.h"
...@@ -62,7 +57,7 @@ GetDatabaseInfo(char *name, Oid *owner, char *path) ...@@ -62,7 +57,7 @@ GetDatabaseInfo(char *name, Oid *owner, char *path)
ScanKeyEntryInitialize(&scanKey, 0, Anum_pg_database_datname, ScanKeyEntryInitialize(&scanKey, 0, Anum_pg_database_datname,
F_NAMEEQ, NameGetDatum(name)); F_NAMEEQ, NameGetDatum(name));
scan = heap_beginscan(dbrel, 0, false, 1, &scanKey); scan = heap_beginscan(dbrel, 0, SnapshotNow, 1, &scanKey);
if (!HeapScanIsValid(scan)) if (!HeapScanIsValid(scan))
elog(ERROR, "GetDatabaseInfo: cannot begin scan of %s", DatabaseRelationName); elog(ERROR, "GetDatabaseInfo: cannot begin scan of %s", DatabaseRelationName);
...@@ -184,11 +179,7 @@ ExpandDatabasePath(char *dbpath) ...@@ -184,11 +179,7 @@ ExpandDatabasePath(char *dbpath)
* -------------------------------- * --------------------------------
*/ */
void void
#ifdef MULTIBYTE
GetRawDatabaseInfo(char *name, Oid *owner, Oid *db_id, char *path, int *encoding)
#else
GetRawDatabaseInfo(char *name, Oid *owner, Oid *db_id, char *path) GetRawDatabaseInfo(char *name, Oid *owner, Oid *db_id, char *path)
#endif
{ {
int dbfd; int dbfd;
int fileflags; int fileflags;
...@@ -275,25 +266,14 @@ GetRawDatabaseInfo(char *name, Oid *owner, Oid *db_id, char *path) ...@@ -275,25 +266,14 @@ GetRawDatabaseInfo(char *name, Oid *owner, Oid *db_id, char *path)
* means of getting at sys cat attrs. * means of getting at sys cat attrs.
*/ */
tup_db = (Form_pg_database) GETSTRUCT(tup); tup_db = (Form_pg_database) GETSTRUCT(tup);
#ifdef MULTIBYTE
/* get encoding from template database.
This is the "default for default" for
create database command.
*/
if (strcmp("template1",tup_db->datname.data) == 0)
{
SetTemplateEncoding(tup_db->encoding);
}
#endif
if (strcmp(name, tup_db->datname.data) == 0) if (strcmp(name, tup_db->datname.data) == 0)
{ {
*db_id = tup->t_oid; *db_id = tup->t_oid;
strncpy(path, VARDATA(&(tup_db->datpath)), strncpy(path, VARDATA(&(tup_db->datpath)),
(VARSIZE(&(tup_db->datpath)) - VARHDRSZ)); (VARSIZE(&(tup_db->datpath)) - VARHDRSZ));
*(path + VARSIZE(&(tup_db->datpath)) - VARHDRSZ) = '\0'; *(path + VARSIZE(&(tup_db->datpath)) - VARHDRSZ) = '\0';
#ifdef MULTIBYTE
*encoding = tup_db->encoding;
#endif
goto done; goto done;
} }
} }
......
...@@ -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: heapam.h,v 1.33 1998/06/15 18:39:53 momjian Exp $ * $Id: heapam.h,v 1.34 1998/07/27 19:38:29 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include <access/relscan.h> #include <access/relscan.h>
#include <storage/block.h> #include <storage/block.h>
#include <utils/rel.h> #include <utils/rel.h>
#include <utils/tqual.h>
/* ---------------------------------------------------------------- /* ----------------------------------------------------------------
* heap access method statistics * heap access method statistics
...@@ -247,11 +248,11 @@ extern Relation heap_openr(char *relationName); ...@@ -247,11 +248,11 @@ extern Relation heap_openr(char *relationName);
extern void heap_close(Relation relation); extern void heap_close(Relation relation);
extern HeapScanDesc extern HeapScanDesc
heap_beginscan(Relation relation, int atend, heap_beginscan(Relation relation, int atend,
bool seeself, unsigned nkeys, ScanKey key); Snapshot snapshot, unsigned nkeys, ScanKey key);
extern void heap_rescan(HeapScanDesc sdesc, bool scanFromEnd, ScanKey key); extern void heap_rescan(HeapScanDesc sdesc, bool scanFromEnd, ScanKey key);
extern void heap_endscan(HeapScanDesc sdesc); extern void heap_endscan(HeapScanDesc sdesc);
extern HeapTuple heap_getnext(HeapScanDesc scandesc, int backw, Buffer *b); extern HeapTuple heap_getnext(HeapScanDesc scandesc, int backw, Buffer *b);
extern HeapTuple heap_fetch(Relation relation, bool seeself, ItemPointer tid, Buffer *b); extern HeapTuple heap_fetch(Relation relation, Snapshot snapshot, ItemPointer tid, Buffer *b);
extern Oid heap_insert(Relation relation, HeapTuple tup); extern Oid heap_insert(Relation relation, HeapTuple tup);
extern int heap_delete(Relation relation, ItemPointer tid); extern int heap_delete(Relation relation, ItemPointer tid);
extern int extern int
......
...@@ -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: relscan.h,v 1.10 1997/11/24 05:09:39 momjian Exp $ * $Id: relscan.h,v 1.11 1998/07/27 19:38:29 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include <storage/buf.h> #include <storage/buf.h>
#include <utils/rel.h> #include <utils/rel.h>
#include <access/htup.h> #include <access/htup.h>
#include <utils/tqual.h>
typedef ItemPointerData MarkData; typedef ItemPointerData MarkData;
...@@ -32,8 +33,8 @@ typedef struct HeapScanDescData ...@@ -32,8 +33,8 @@ typedef struct HeapScanDescData
ItemPointerData rs_mctid; /* marked current tid */ ItemPointerData rs_mctid; /* marked current tid */
ItemPointerData rs_mntid; /* marked next tid */ ItemPointerData rs_mntid; /* marked next tid */
ItemPointerData rs_mcd; /* marked current delta XXX ??? */ ItemPointerData rs_mcd; /* marked current delta XXX ??? */
Snapshot rs_snapshot; /* snapshot to see */
bool rs_atend; /* restart scan at end? */ bool rs_atend; /* restart scan at end? */
bool rs_seeself; /* see self or not */
uint16 rs_cdelta; /* current delta in chain */ uint16 rs_cdelta; /* current delta in chain */
uint16 rs_nkeys; /* number of attributes in keys */ uint16 rs_nkeys; /* number of attributes in keys */
ScanKey rs_key; /* key descriptors */ ScanKey rs_key; /* key descriptors */
......
...@@ -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: xact.h,v 1.13 1998/04/24 14:42:55 momjian Exp $ * $Id: xact.h,v 1.14 1998/07/27 19:38:30 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -30,6 +30,14 @@ typedef struct TransactionStateData ...@@ -30,6 +30,14 @@ typedef struct TransactionStateData
int blockState; int blockState;
} TransactionStateData; } TransactionStateData;
/*
* Xact isolation levels
*/
#define XACT_DIRTY_READ 0 /* not implemented */
#define XACT_READ_COMMITTED 1
#define XACT_REPEATABLE_READ 2 /* not implemented */
#define XACT_SERIALIZED 3
/* ---------------- /* ----------------
* transaction states * transaction states
* ---------------- * ----------------
......
...@@ -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: executor.h,v 1.22 1998/04/24 14:43:07 momjian Exp $ * $Id: executor.h,v 1.23 1998/07/27 19:38:32 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -61,8 +61,8 @@ ...@@ -61,8 +61,8 @@
*/ */
extern void extern void
ExecOpenScanR(Oid relOid, int nkeys, ScanKey skeys, bool isindex, ExecOpenScanR(Oid relOid, int nkeys, ScanKey skeys, bool isindex,
ScanDirection dir, Relation *returnRelation, ScanDirection dir, Snapshot snapshot,
Pointer *returnScanDesc); Relation *returnRelation, Pointer *returnScanDesc);
extern void ExecCloseR(Plan *node); extern void ExecCloseR(Plan *node);
extern void ExecReScan(Plan *node, ExprContext *exprCtxt, Plan *parent); extern void ExecReScan(Plan *node, ExprContext *exprCtxt, Plan *parent);
extern HeapScanDesc extern HeapScanDesc
......
...@@ -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: execnodes.h,v 1.15 1998/02/26 04:41:55 momjian Exp $ * $Id: execnodes.h,v 1.16 1998/07/27 19:38:34 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -196,6 +196,7 @@ typedef struct EState ...@@ -196,6 +196,7 @@ typedef struct EState
{ {
NodeTag type; NodeTag type;
ScanDirection es_direction; ScanDirection es_direction;
Snapshot es_snapshot;
List *es_range_table; List *es_range_table;
RelationInfo *es_result_relation_info; RelationInfo *es_result_relation_info;
Relation es_into_relation_descriptor; Relation es_into_relation_descriptor;
......
...@@ -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: proc.h,v 1.12 1998/06/30 02:33:33 momjian Exp $ * $Id: proc.h,v 1.13 1998/07/27 19:38:38 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -44,6 +44,14 @@ typedef struct proc ...@@ -44,6 +44,14 @@ typedef struct proc
TransactionId xid; /* transaction currently being executed by TransactionId xid; /* transaction currently being executed by
* this proc */ * this proc */
#ifdef LowLevelLocking
TransactionId xmin; /* minimal running XID as it was when
* we were starting our xact: vacuum
* must not remove tuples deleted by
* xid >= xmin !
*/
#endif
LOCK *waitLock; /* Lock we're sleeping on */ LOCK *waitLock; /* Lock we're sleeping on */
int token; /* info for proc wakeup routines */ int token; /* info for proc wakeup routines */
int pid; /* This procs process id */ int pid; /* This procs process id */
......
...@@ -3,10 +3,11 @@ ...@@ -3,10 +3,11 @@
* tqual.h-- * tqual.h--
* POSTGRES "time" qualification definitions. * POSTGRES "time" qualification definitions.
* *
* Should be moved/renamed... - vadim 07/28/98
* *
* Copyright (c) 1994, Regents of the University of California * Copyright (c) 1994, Regents of the University of California
* *
* $Id: tqual.h,v 1.12 1998/04/24 14:43:33 momjian Exp $ * $Id: tqual.h,v 1.13 1998/07/27 19:38:40 vadim Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -15,6 +16,20 @@ ...@@ -15,6 +16,20 @@
#include <access/htup.h> #include <access/htup.h>
typedef struct SnapshotData
{
TransactionId xmin; /* XID < xmin are visible to me */
TransactionId xmax; /* XID > xmax are invisible to me */
TransactionId *xip; /* array of xacts in progress */
} SnapshotData;
typedef SnapshotData *Snapshot;
#define IsSnapshotNow(snapshot) ((Snapshot) snapshot == (Snapshot) 0x0)
#define IsSnapshotSelf(snapshot) ((Snapshot) snapshot == (Snapshot) 0x1)
#define SnapshotNow ((Snapshot) 0x0)
#define SnapshotSelf ((Snapshot) 0x1)
extern TransactionId HeapSpecialTransactionId; extern TransactionId HeapSpecialTransactionId;
extern CommandId HeapSpecialCommandId; extern CommandId HeapSpecialCommandId;
...@@ -25,13 +40,13 @@ extern CommandId HeapSpecialCommandId; ...@@ -25,13 +40,13 @@ extern CommandId HeapSpecialCommandId;
* Note: * Note:
* Assumes heap tuple is valid. * Assumes heap tuple is valid.
*/ */
#define HeapTupleSatisfiesVisibility(tuple, seeself) \ #define HeapTupleSatisfiesVisibility(tuple, snapshot) \
( \ ( \
TransactionIdEquals((tuple)->t_xmax, AmiTransactionId) ? \ TransactionIdEquals((tuple)->t_xmax, AmiTransactionId) ? \
false \ false \
: \ : \
( \ ( \
((seeself) == true || heapisoverride()) ? \ (IsSnapshotSelf(snapshot) || heapisoverride()) ? \
HeapTupleSatisfiesItself(tuple) \ HeapTupleSatisfiesItself(tuple) \
: \ : \
HeapTupleSatisfiesNow(tuple) \ HeapTupleSatisfiesNow(tuple) \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment