diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c index 1d487b6d98..de4499124d 100644 --- a/src/backend/commands/sequence.c +++ b/src/backend/commands/sequence.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/commands/sequence.c,v 1.108 2004/01/10 23:28:44 neilc Exp $ + * $PostgreSQL: pgsql/src/backend/commands/sequence.c,v 1.109 2004/04/06 16:39:30 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -315,32 +315,17 @@ AlterSequence(AlterSeqStmt *stmt) seq = read_info(elm, seqrel, &buf); page = BufferGetPage(buf); - /* copy old values of options */ - new.increment_by = seq->increment_by; - new.max_value = seq->max_value; - new.min_value = seq->min_value; - new.cache_value = seq->cache_value; - new.is_cycled = seq->is_cycled; - new.last_value = seq->last_value; + /* Copy old values of options into workspace */ + memcpy(&new, seq, sizeof(FormData_pg_sequence)); /* Check and set new values */ init_params(stmt->options, &new, false); /* Now okay to update the on-disk tuple */ - seq->increment_by = new.increment_by; - seq->max_value = new.max_value; - seq->min_value = new.min_value; - seq->cache_value = new.cache_value; - seq->is_cycled = new.is_cycled; - if (seq->last_value != new.last_value) - { - seq->last_value = new.last_value; - seq->is_called = false; - seq->log_cnt = 1; - } + memcpy(seq, &new, sizeof(FormData_pg_sequence)); - /* save info in local cache */ - elm->last = new.last_value; /* last returned number */ + /* Clear local cache so that we don't think we have cached numbers */ + elm->last = new.last_value; /* last returned number */ elm->cached = new.last_value; /* last cached number (forget * cached values) */ @@ -1008,13 +993,19 @@ init_params(List *options, Form_pg_sequence new, bool isInit) /* START WITH */ if (last_value != NULL) + { new->last_value = defGetInt64(last_value); + new->is_called = false; + new->log_cnt = 1; + } else if (isInit) { if (new->increment_by > 0) new->last_value = new->min_value; /* ascending seq */ else new->last_value = new->max_value; /* descending seq */ + new->is_called = false; + new->log_cnt = 1; } /* crosscheck */