aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/sequence.c
diff options
context:
space:
mode:
authorVadim B. Mikheev <vadim4o@yahoo.com>1997-06-02 11:22:52 +0000
committerVadim B. Mikheev <vadim4o@yahoo.com>1997-06-02 11:22:52 +0000
commit5b5c83f9e750fc0ae22f09d7be35b98a80233754 (patch)
tree06e433c8449a099985c0ac451d1292f9bdc25b7b /src/backend/commands/sequence.c
parent465047d604b5f6fff26b9303010b6078619a64cf (diff)
downloadpostgresql-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.c28
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);
}