diff options
author | Vadim B. Mikheev <vadim4o@yahoo.com> | 1997-06-02 11:22:52 +0000 |
---|---|---|
committer | Vadim B. Mikheev <vadim4o@yahoo.com> | 1997-06-02 11:22:52 +0000 |
commit | 5b5c83f9e750fc0ae22f09d7be35b98a80233754 (patch) | |
tree | 06e433c8449a099985c0ac451d1292f9bdc25b7b /src/backend/commands/sequence.c | |
parent | 465047d604b5f6fff26b9303010b6078619a64cf (diff) | |
download | postgresql-5b5c83f9e750fc0ae22f09d7be35b98a80233754.tar.gz postgresql-5b5c83f9e750fc0ae22f09d7be35b98a80233754.zip |
Oracle like currval behaviour.
Diffstat (limited to 'src/backend/commands/sequence.c')
-rw-r--r-- | src/backend/commands/sequence.c | 28 |
1 files 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); } |