mirror of
https://github.com/postgres/postgres.git
synced 2025-08-05 07:41:25 +03:00
Update btree patches that were missed.
This commit is contained in:
@@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtree.c,v 1.13 1997/02/12 05:04:17 scrappy Exp $
|
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtree.c,v 1.14 1997/02/18 17:13:42 momjian Exp $
|
||||||
*
|
*
|
||||||
* NOTES
|
* NOTES
|
||||||
* This file contains only the public interface routines.
|
* This file contains only the public interface routines.
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/Attic/nbtscan.c,v 1.6 1996/11/15 18:37:00 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/Attic/nbtscan.c,v 1.7 1997/02/18 17:13:45 momjian Exp $
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* NOTES
|
* NOTES
|
||||||
@@ -40,7 +40,10 @@ typedef struct BTScanListData {
|
|||||||
typedef BTScanListData *BTScanList;
|
typedef BTScanListData *BTScanList;
|
||||||
|
|
||||||
static BTScanList BTScans = (BTScanList) NULL;
|
static BTScanList BTScans = (BTScanList) NULL;
|
||||||
|
|
||||||
|
static void _bt_scandel(IndexScanDesc scan, int op, BlockNumber blkno, OffsetNumber offno);
|
||||||
|
static bool _bt_scantouched(IndexScanDesc scan, BlockNumber blkno, OffsetNumber offno);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* _bt_regscan() -- register a new scan.
|
* _bt_regscan() -- register a new scan.
|
||||||
*/
|
*/
|
||||||
@@ -81,8 +84,12 @@ _bt_dropscan(IndexScanDesc scan)
|
|||||||
pfree (chk);
|
pfree (chk);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* _bt_adjscans() -- adjust all scans in the scan list to compensate
|
||||||
|
* for a given deletion or insertion
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
_bt_adjscans(Relation rel, ItemPointer tid)
|
_bt_adjscans(Relation rel, ItemPointer tid, int op)
|
||||||
{
|
{
|
||||||
BTScanList l;
|
BTScanList l;
|
||||||
Oid relid;
|
Oid relid;
|
||||||
@@ -90,13 +97,34 @@ _bt_adjscans(Relation rel, ItemPointer tid)
|
|||||||
relid = rel->rd_id;
|
relid = rel->rd_id;
|
||||||
for (l = BTScans; l != (BTScanList) NULL; l = l->btsl_next) {
|
for (l = BTScans; l != (BTScanList) NULL; l = l->btsl_next) {
|
||||||
if (relid == l->btsl_scan->relation->rd_id)
|
if (relid == l->btsl_scan->relation->rd_id)
|
||||||
_bt_scandel(l->btsl_scan, ItemPointerGetBlockNumber(tid),
|
_bt_scandel(l->btsl_scan, op,
|
||||||
|
ItemPointerGetBlockNumber(tid),
|
||||||
ItemPointerGetOffsetNumber(tid));
|
ItemPointerGetOffsetNumber(tid));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
/*
|
||||||
_bt_scandel(IndexScanDesc scan, BlockNumber blkno, OffsetNumber offno)
|
* _bt_scandel() -- adjust a single scan
|
||||||
|
*
|
||||||
|
* because each index page is always maintained as an ordered array of
|
||||||
|
* index tuples, the index tuples on a given page shift beneath any
|
||||||
|
* given scan. an index modification "behind" a scan position (i.e.,
|
||||||
|
* same page, lower or equal offset number) will therefore force us to
|
||||||
|
* adjust the scan in the following ways:
|
||||||
|
*
|
||||||
|
* - on insertion, we shift the scan forward by one item.
|
||||||
|
* - on deletion, we shift the scan backward by one item.
|
||||||
|
*
|
||||||
|
* note that:
|
||||||
|
*
|
||||||
|
* - we need not worry about the actual ScanDirection of the scan
|
||||||
|
* itself, since the problem is that the "current" scan position has
|
||||||
|
* shifted.
|
||||||
|
* - modifications "ahead" of our scan position do not change the
|
||||||
|
* array index of the current scan position and so can be ignored.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
_bt_scandel(IndexScanDesc scan, int op, BlockNumber blkno, OffsetNumber offno)
|
||||||
{
|
{
|
||||||
ItemPointer current;
|
ItemPointer current;
|
||||||
Buffer buf;
|
Buffer buf;
|
||||||
@@ -112,7 +140,17 @@ _bt_scandel(IndexScanDesc scan, BlockNumber blkno, OffsetNumber offno)
|
|||||||
if (ItemPointerIsValid(current)
|
if (ItemPointerIsValid(current)
|
||||||
&& ItemPointerGetBlockNumber(current) == blkno
|
&& ItemPointerGetBlockNumber(current) == blkno
|
||||||
&& ItemPointerGetOffsetNumber(current) >= offno) {
|
&& ItemPointerGetOffsetNumber(current) >= offno) {
|
||||||
_bt_step(scan, &buf, BackwardScanDirection);
|
switch (op) {
|
||||||
|
case BT_INSERT:
|
||||||
|
_bt_step(scan, &buf, ForwardScanDirection);
|
||||||
|
break;
|
||||||
|
case BT_DELETE:
|
||||||
|
_bt_step(scan, &buf, BackwardScanDirection);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
elog(WARN, "_bt_scandel: bad operation '%d'", op);
|
||||||
|
/*NOTREACHED*/
|
||||||
|
}
|
||||||
so->btso_curbuf = buf;
|
so->btso_curbuf = buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -124,7 +162,17 @@ _bt_scandel(IndexScanDesc scan, BlockNumber blkno, OffsetNumber offno)
|
|||||||
tmp = *current;
|
tmp = *current;
|
||||||
*current = scan->currentItemData;
|
*current = scan->currentItemData;
|
||||||
scan->currentItemData = tmp;
|
scan->currentItemData = tmp;
|
||||||
_bt_step(scan, &buf, BackwardScanDirection);
|
switch (op) {
|
||||||
|
case BT_INSERT:
|
||||||
|
_bt_step(scan, &buf, ForwardScanDirection);
|
||||||
|
break;
|
||||||
|
case BT_DELETE:
|
||||||
|
_bt_step(scan, &buf, BackwardScanDirection);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
elog(WARN, "_bt_scandel: bad operation '%d'", op);
|
||||||
|
/*NOTREACHED*/
|
||||||
|
}
|
||||||
so->btso_mrkbuf = buf;
|
so->btso_mrkbuf = buf;
|
||||||
tmp = *current;
|
tmp = *current;
|
||||||
*current = scan->currentItemData;
|
*current = scan->currentItemData;
|
||||||
@@ -132,7 +180,11 @@ _bt_scandel(IndexScanDesc scan, BlockNumber blkno, OffsetNumber offno)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
/*
|
||||||
|
* _bt_scantouched() -- check to see if a scan is affected by a given
|
||||||
|
* change to the index
|
||||||
|
*/
|
||||||
|
static bool
|
||||||
_bt_scantouched(IndexScanDesc scan, BlockNumber blkno, OffsetNumber offno)
|
_bt_scantouched(IndexScanDesc scan, BlockNumber blkno, OffsetNumber offno)
|
||||||
{
|
{
|
||||||
ItemPointer current;
|
ItemPointer current;
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtsearch.c,v 1.13 1997/01/05 10:56:36 vadim Exp $
|
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtsearch.c,v 1.14 1997/02/18 17:13:48 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@@ -332,7 +332,7 @@ _bt_binsrch(Relation rel,
|
|||||||
else if (result < 0)
|
else if (result < 0)
|
||||||
high = mid - 1;
|
high = mid - 1;
|
||||||
else
|
else
|
||||||
return (_bt_firsteq(rel, itupdesc, page, keysz, scankey, mid));
|
return (_bt_firsteq(rel, itupdesc, page, keysz, scankey, mid));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -10,7 +10,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.40 1997/02/14 04:16:12 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.41 1997/02/18 17:13:58 momjian Exp $
|
||||||
*
|
*
|
||||||
* NOTES
|
* NOTES
|
||||||
*
|
*
|
||||||
@@ -287,12 +287,6 @@ PostmasterMain(int argc, char *argv[])
|
|||||||
else
|
else
|
||||||
DebugLvl = 1;
|
DebugLvl = 1;
|
||||||
break;
|
break;
|
||||||
case 'e':
|
|
||||||
/*
|
|
||||||
* Use european date formats.
|
|
||||||
*/
|
|
||||||
EuroDates = 1;
|
|
||||||
break;
|
|
||||||
case 'm':
|
case 'm':
|
||||||
MultiplexedBackends = 1;
|
MultiplexedBackends = 1;
|
||||||
MultiplexedBackendPort = atoi(optarg);
|
MultiplexedBackendPort = atoi(optarg);
|
||||||
@@ -424,7 +418,6 @@ usage(const char *progname)
|
|||||||
fprintf(stderr, "\t-b backend\tuse a specific backend server executable\n");
|
fprintf(stderr, "\t-b backend\tuse a specific backend server executable\n");
|
||||||
fprintf(stderr, "\t-d [1|2|3]\tset debugging level\n");
|
fprintf(stderr, "\t-d [1|2|3]\tset debugging level\n");
|
||||||
fprintf(stderr, "\t-D datadir\tset data directory\n");
|
fprintf(stderr, "\t-D datadir\tset data directory\n");
|
||||||
fprintf(stderr, "\t-e \tturn on European date format\n");
|
|
||||||
fprintf(stderr, "\t-m \tstart up multiplexing backends\n");
|
fprintf(stderr, "\t-m \tstart up multiplexing backends\n");
|
||||||
fprintf(stderr, "\t-n\t\tdon't reinitialize shared memory after abnormal exit\n");
|
fprintf(stderr, "\t-n\t\tdon't reinitialize shared memory after abnormal exit\n");
|
||||||
fprintf(stderr, "\t-o option\tpass 'option' to each backend servers\n");
|
fprintf(stderr, "\t-o option\tpass 'option' to each backend servers\n");
|
||||||
@@ -1113,10 +1106,6 @@ DoExec(StartupInfo *packet, int portFd)
|
|||||||
av[ac++] = "-o";
|
av[ac++] = "-o";
|
||||||
av[ac++] = ttybuf;
|
av[ac++] = ttybuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* tell the backend we're using European dates */
|
|
||||||
if (EuroDates == 1)
|
|
||||||
av[ac++] = "-e";
|
|
||||||
|
|
||||||
/* tell the multiplexed backend to start on a certain port */
|
/* tell the multiplexed backend to start on a certain port */
|
||||||
if (MultiplexedBackends) {
|
if (MultiplexedBackends) {
|
||||||
|
@@ -6,7 +6,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: nbtree.h,v 1.7 1997/02/14 22:47:36 momjian Exp $
|
* $Id: nbtree.h,v 1.8 1997/02/18 17:14:10 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@@ -238,9 +238,7 @@ extern void btdelete(Relation rel, ItemPointer tid);
|
|||||||
*/
|
*/
|
||||||
extern void _bt_regscan(IndexScanDesc scan);
|
extern void _bt_regscan(IndexScanDesc scan);
|
||||||
extern void _bt_dropscan(IndexScanDesc scan);
|
extern void _bt_dropscan(IndexScanDesc scan);
|
||||||
extern void _bt_adjscans(Relation rel, ItemPointer tid);
|
extern void _bt_adjscans(Relation rel, ItemPointer tid, int op);
|
||||||
extern void _bt_scandel(IndexScanDesc scan, BlockNumber blkno, OffsetNumber offno);
|
|
||||||
extern bool _bt_scantouched(IndexScanDesc scan, BlockNumber blkno, OffsetNumber offno);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* prototypes for functions in nbtsearch.c
|
* prototypes for functions in nbtsearch.c
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
.\" This is -*-nroff-*-
|
.\" This is -*-nroff-*-
|
||||||
.\" XXX standard disclaimer belongs here....
|
.\" XXX standard disclaimer belongs here....
|
||||||
.\" $Header: /cvsroot/pgsql/src/man/Attic/postmaster.1,v 1.3 1997/01/26 15:32:28 scrappy Exp $
|
.\" $Header: /cvsroot/pgsql/src/man/Attic/postmaster.1,v 1.4 1997/02/18 17:14:25 momjian Exp $
|
||||||
.TH POSTMASTER UNIX 11/05/95 PostgreSQL PostgreSQL
|
.TH POSTMASTER UNIX 11/05/95 PostgreSQL PostgreSQL
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
postmaster \(em run the Postgres postmaster
|
postmaster \(em run the Postgres postmaster
|
||||||
@@ -173,23 +173,6 @@ programmer can then use the
|
|||||||
.IR shmemdoc
|
.IR shmemdoc
|
||||||
program to examine shared memory and semaphore state.
|
program to examine shared memory and semaphore state.
|
||||||
.TP
|
.TP
|
||||||
.BR "-e"
|
|
||||||
The
|
|
||||||
.IR "-e"
|
|
||||||
option controls how dates are input to and output from the database.
|
|
||||||
.IP
|
|
||||||
If the
|
|
||||||
.IR "-e"
|
|
||||||
option is supplied, then all dates passed to and from the frontend
|
|
||||||
processes will be assumed to be in
|
|
||||||
.IR "European"
|
|
||||||
format ie.
|
|
||||||
.IR "DD-MM-YYYY"
|
|
||||||
otherwise dates are input and output in
|
|
||||||
.IR "American"
|
|
||||||
format ie.
|
|
||||||
.IR "MM-DD-YYYY"
|
|
||||||
.TP
|
|
||||||
.BR "-o" " backend_options"
|
.BR "-o" " backend_options"
|
||||||
The
|
The
|
||||||
.IR postgres (1)
|
.IR postgres (1)
|
||||||
|
Reference in New Issue
Block a user