diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c index 0624bd06a87acc4014302827b2f2b2f70284299f..142eafec029ba0ebf4cbd6d4df8e0ad9f5d5171d 100644 --- a/src/backend/access/nbtree/nbtree.c +++ b/src/backend/access/nbtree/nbtree.c @@ -8,7 +8,7 @@ * * * 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 * This file contains only the public interface routines. diff --git a/src/backend/access/nbtree/nbtscan.c b/src/backend/access/nbtree/nbtscan.c index 3de9f39d3252ac0eba3763a91da842ddbbe094a9..5e23fe13d7bc5dce9241f8841602b07c9735a9ed 100644 --- a/src/backend/access/nbtree/nbtscan.c +++ b/src/backend/access/nbtree/nbtscan.c @@ -7,7 +7,7 @@ * * * 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 @@ -40,7 +40,10 @@ typedef struct BTScanListData { typedef BTScanListData *BTScanList; 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. */ @@ -81,8 +84,12 @@ _bt_dropscan(IndexScanDesc scan) pfree (chk); } +/* + * _bt_adjscans() -- adjust all scans in the scan list to compensate + * for a given deletion or insertion + */ void -_bt_adjscans(Relation rel, ItemPointer tid) +_bt_adjscans(Relation rel, ItemPointer tid, int op) { BTScanList l; Oid relid; @@ -90,13 +97,34 @@ _bt_adjscans(Relation rel, ItemPointer tid) relid = rel->rd_id; for (l = BTScans; l != (BTScanList) NULL; l = l->btsl_next) { 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)); } } -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; Buffer buf; @@ -112,7 +140,17 @@ _bt_scandel(IndexScanDesc scan, BlockNumber blkno, OffsetNumber offno) if (ItemPointerIsValid(current) && ItemPointerGetBlockNumber(current) == blkno && 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; } @@ -124,7 +162,17 @@ _bt_scandel(IndexScanDesc scan, BlockNumber blkno, OffsetNumber offno) tmp = *current; *current = scan->currentItemData; 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; tmp = *current; *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) { ItemPointer current; diff --git a/src/backend/access/nbtree/nbtsearch.c b/src/backend/access/nbtree/nbtsearch.c index 569a9e7e7f88c07a87c6fc67e8bb15cd9f15a62a..94521ff1c0b233f7591a3b9e25a5e14febbcbf8b 100644 --- a/src/backend/access/nbtree/nbtsearch.c +++ b/src/backend/access/nbtree/nbtsearch.c @@ -7,7 +7,7 @@ * * * 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) high = mid - 1; else - return (_bt_firsteq(rel, itupdesc, page, keysz, scankey, mid)); + return (_bt_firsteq(rel, itupdesc, page, keysz, scankey, mid)); } /* diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 1cb91dcaa7eac2a37fa8bd2daf5de72d58235a1a..bbbd02b0644819ec6b58c40f2200100ef7ca3f38 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -10,7 +10,7 @@ * * * 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 * @@ -287,12 +287,6 @@ PostmasterMain(int argc, char *argv[]) else DebugLvl = 1; break; - case 'e': - /* - * Use european date formats. - */ - EuroDates = 1; - break; case 'm': MultiplexedBackends = 1; 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-d [1|2|3]\tset debugging level\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-n\t\tdon't reinitialize shared memory after abnormal exit\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++] = 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 */ if (MultiplexedBackends) { diff --git a/src/include/access/nbtree.h b/src/include/access/nbtree.h index 1ba24d044b52c18b19167a3714acdf6bd83695e1..c1a857bb74a05353303b444ecc2536e41a376b04 100644 --- a/src/include/access/nbtree.h +++ b/src/include/access/nbtree.h @@ -6,7 +6,7 @@ * * 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_dropscan(IndexScanDesc scan); -extern void _bt_adjscans(Relation rel, ItemPointer tid); -extern void _bt_scandel(IndexScanDesc scan, BlockNumber blkno, OffsetNumber offno); -extern bool _bt_scantouched(IndexScanDesc scan, BlockNumber blkno, OffsetNumber offno); +extern void _bt_adjscans(Relation rel, ItemPointer tid, int op); /* * prototypes for functions in nbtsearch.c diff --git a/src/man/postmaster.1 b/src/man/postmaster.1 index 3ee1f457c2e6cf91f3340742af50968be743984e..08cc9fa763f638697ea5b6498e3b91b62e35b10e 100644 --- a/src/man/postmaster.1 +++ b/src/man/postmaster.1 @@ -1,6 +1,6 @@ .\" This is -*-nroff-*- .\" 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 .SH "NAME" postmaster \(em run the Postgres postmaster @@ -173,23 +173,6 @@ programmer can then use the .IR shmemdoc program to examine shared memory and semaphore state. .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" The .IR postgres (1)