mirror of
https://github.com/postgres/postgres.git
synced 2025-04-22 23:02:54 +03:00
Group more closely cache updates for backends in sequence.c
Information of sequences is cached for each backend for currval() and nextval(), and the update of some cached information was mixed in the middle of computations based on the other properties of a sequence, for the increment value in nextval() and the cached state when altering a sequence. Grouping them makes the code easier to follow and to refactor in the future, when splitting the computation and the SeqTable change parts. Note that the cached data is untouched between the areas where these cache updates are moved. Issue noticed while doing some refactoring of the sequence code. Author: Michael Paquier Reviewed-by: Tomas Vondra Discussion: https://postgr.es/m/ZWlohtKAs0uVVpZ3@paquier.xyz
This commit is contained in:
parent
449e798c77
commit
6e951bf98e
@ -489,10 +489,6 @@ AlterSequence(ParseState *pstate, AlterSeqStmt *stmt)
|
|||||||
seqform, newdataform,
|
seqform, newdataform,
|
||||||
&need_seq_rewrite, &owned_by);
|
&need_seq_rewrite, &owned_by);
|
||||||
|
|
||||||
/* Clear local cache so that we don't think we have cached numbers */
|
|
||||||
/* Note that we do not change the currval() state */
|
|
||||||
elm->cached = elm->last;
|
|
||||||
|
|
||||||
/* If needed, rewrite the sequence relation itself */
|
/* If needed, rewrite the sequence relation itself */
|
||||||
if (need_seq_rewrite)
|
if (need_seq_rewrite)
|
||||||
{
|
{
|
||||||
@ -520,6 +516,10 @@ AlterSequence(ParseState *pstate, AlterSeqStmt *stmt)
|
|||||||
fill_seq_with_data(seqrel, newdatatuple);
|
fill_seq_with_data(seqrel, newdatatuple);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Clear local cache so that we don't think we have cached numbers */
|
||||||
|
/* Note that we do not change the currval() state */
|
||||||
|
elm->cached = elm->last;
|
||||||
|
|
||||||
/* process OWNED BY if given */
|
/* process OWNED BY if given */
|
||||||
if (owned_by)
|
if (owned_by)
|
||||||
process_owned_by(seqrel, owned_by, stmt->for_identity);
|
process_owned_by(seqrel, owned_by, stmt->for_identity);
|
||||||
@ -683,7 +683,6 @@ nextval_internal(Oid relid, bool check_permissions)
|
|||||||
seq = read_seq_tuple(seqrel, &buf, &seqdatatuple);
|
seq = read_seq_tuple(seqrel, &buf, &seqdatatuple);
|
||||||
page = BufferGetPage(buf);
|
page = BufferGetPage(buf);
|
||||||
|
|
||||||
elm->increment = incby;
|
|
||||||
last = next = result = seq->last_value;
|
last = next = result = seq->last_value;
|
||||||
fetch = cache;
|
fetch = cache;
|
||||||
log = seq->log_cnt;
|
log = seq->log_cnt;
|
||||||
@ -781,6 +780,7 @@ nextval_internal(Oid relid, bool check_permissions)
|
|||||||
Assert(log >= 0);
|
Assert(log >= 0);
|
||||||
|
|
||||||
/* save info in local cache */
|
/* save info in local cache */
|
||||||
|
elm->increment = incby;
|
||||||
elm->last = result; /* last returned number */
|
elm->last = result; /* last returned number */
|
||||||
elm->cached = last; /* last fetched number */
|
elm->cached = last; /* last fetched number */
|
||||||
elm->last_valid = true;
|
elm->last_valid = true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user