From 5b5c83f9e750fc0ae22f09d7be35b98a80233754 Mon Sep 17 00:00:00 2001 From: "Vadim B. Mikheev" <vadim4o@yahoo.com> Date: Mon, 2 Jun 1997 11:22:52 +0000 Subject: [PATCH] Oracle like currval behaviour. --- src/backend/commands/sequence.c | 28 +++++++--------------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c index 7ebba3eace7..d737a8ca06d 100644 --- a/src/backend/commands/sequence.c +++ b/src/backend/commands/sequence.c @@ -204,6 +204,7 @@ nextval (struct varlena * seqin) /* open and WIntentLock sequence */ elm = init_sequence ("nextval", seqname); + pfree (seqname); if ( elm->last != elm->cached ) /* some numbers were cached */ { @@ -237,7 +238,7 @@ nextval (struct varlena * seqin) break; /* stop caching */ if ( seq->is_cycled != 't' ) elog (WARN, "%s.nextval: got MAXVALUE (%d)", - seqname, maxv); + elm->name, maxv); next = minv; } else @@ -252,7 +253,7 @@ nextval (struct varlena * seqin) break; /* stop caching */ if ( seq->is_cycled != 't' ) elog (WARN, "%s.nextval: got MINVALUE (%d)", - seqname, minv); + elm->name, minv); next = maxv; } else @@ -287,34 +288,19 @@ currval (struct varlena * seqin) { char *seqname = textout(seqin); SeqTable elm; - Buffer buf; - SequenceTupleForm seq; - ItemPointerData iptr; int4 result; /* open and WIntentLock sequence */ elm = init_sequence ("currval", seqname); + pfree (seqname); - if ( elm->last != elm->cached ) /* some numbers were cached */ + if ( elm->increment == 0 ) /* nextval/read_info were not called */ { - return (elm->last); /* return last returned by nextval */ + elog (WARN, "%s.currval is not yet defined in this session", elm->name); } - seq = read_info ("currval", elm, &buf); - - if ( seq->is_called != 't' ) - { - elog (WARN, "%s.currval: yet undefined (%s.nextval never called)", - seqname, seqname); - } - result = seq->last_value; + result = elm->last; - if ( ReleaseBuffer (buf) == STATUS_ERROR ) - elog (WARN, "%s.currval: ReleaseBuffer failed", seqname); - - ItemPointerSet(&iptr, 0, FirstOffsetNumber); - RelationUnsetSingleWLockPage (elm->rel, &iptr); - return (result); } -- GitLab