Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitbf7c420

Browse files
Refactored
1 parent0055ca3 commitbf7c420

File tree

1 file changed

+26
-12
lines changed

1 file changed

+26
-12
lines changed

‎pg_variables.c

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ static HashVariableEntry *createVariableInternal(HashPackageEntry *package,
7777
boolis_transactional);
7878
staticvoidcreateSavepoint(HashPackageEntry*package,HashVariableEntry*variable);
7979
staticboolisVarChangedInCurrentTrans(HashVariableEntry*variable);
80+
staticboolisVarChangedInUpperTrans(HashVariableEntry*variable);
8081
staticvoidaddToChangedVars(HashPackageEntry*package,HashVariableEntry*variable);
8182

8283
#defineCHECK_ARGS_FOR_NULL() \
@@ -1768,6 +1769,10 @@ releaseSavepoint(HashVariableEntry *variable)
17681769
dlist_delete(nodeToDelete);
17691770
pfree(historyEntryToDelete);
17701771
}
1772+
/*
1773+
* If variable was changed in subtransaction, so it is considered it
1774+
* was changed in parent transaction.
1775+
*/
17711776
(get_actual_value(variable)->level)--;
17721777
}
17731778

@@ -1819,8 +1824,7 @@ isVarChangedInUpperTrans(HashVariableEntry *variable)
18191824
var_prev_state=get_history_entry(var_state->node.next);
18201825
return (var_prev_state->level== (GetCurrentTransactionNestLevel()-1));
18211826
}
1822-
else
1823-
return false;
1827+
return false;
18241828
}
18251829

18261830
/*
@@ -1901,12 +1905,12 @@ popChangedVarsStack()
19011905
{
19021906
if (changedVarsStack)
19031907
{
1904-
ChangedVarsStackNode*cvse;
1908+
ChangedVarsStackNode*cvsn;
19051909

19061910
Assert(!dlist_is_empty(changedVarsStack));
1907-
cvse=dlist_container(ChangedVarsStackNode,node,
1911+
cvsn=dlist_container(ChangedVarsStackNode,node,
19081912
dlist_pop_head_node(changedVarsStack));
1909-
MemoryContextDelete(cvse->ctx);
1913+
MemoryContextDelete(cvsn->ctx);
19101914
if (dlist_is_empty(changedVarsStack))
19111915
{
19121916
MemoryContextDelete(changedVarsContext);
@@ -1916,6 +1920,20 @@ popChangedVarsStack()
19161920
}
19171921
}
19181922

1923+
/*
1924+
* Initialize an instance of ChangedVarsNode datatype
1925+
*/
1926+
staticinlineChangedVarsNode*
1927+
initChangedVarsNode(MemoryContextctx,HashPackageEntry*package,HashVariableEntry*variable)
1928+
{
1929+
ChangedVarsNode*cvn;
1930+
1931+
cvn=MemoryContextAllocZero(ctx,sizeof(ChangedVarsNode));
1932+
cvn->package=package;
1933+
cvn->variable=variable;
1934+
returncvn;
1935+
}
1936+
19191937
/*
19201938
* Add a variable to list of changed vars in current transaction level
19211939
*/
@@ -1941,16 +1959,14 @@ addToChangedVars(HashPackageEntry *package, HashVariableEntry *variable)
19411959
ChangedVarsNode*cvn;
19421960

19431961
cvsn=dlist_head_element(ChangedVarsStackNode,node,changedVarsStack);
1944-
cvn=MemoryContextAllocZero(cvsn->ctx,sizeof(ChangedVarsNode));
1945-
cvn->package=package;
1946-
cvn->variable=variable;
1962+
cvn=initChangedVarsNode(cvsn->ctx,package,variable);
19471963
dlist_push_head(cvsn->changedVarsList,&cvn->node);
19481964
get_actual_value(cvn->variable)->level=GetCurrentTransactionNestLevel();
19491965
}
19501966
}
19511967

19521968
/*
1953-
* If variable waschenged in some subtransaction, it is considered that it was
1969+
* If variable waschanged in some subtransaction, it is considered that it was
19541970
* changed in parent transaction. So it is important to add this variable to
19551971
* list of changes of parent transaction. But if var was already changed in
19561972
* upper level, it has savepoint there, so we need to release it.
@@ -1984,9 +2000,7 @@ levelUpOrRelease()
19842000
* it was created in another context
19852001
*/
19862002
cvsn=dlist_head_element(ChangedVarsStackNode,node,changedVarsStack);
1987-
cvn_new=MemoryContextAllocZero(cvsn->ctx,sizeof(ChangedVarsNode));
1988-
cvn_new->package=cvn_old->package;
1989-
cvn_new->variable=cvn_old->variable;
2003+
cvn_new=initChangedVarsNode(cvsn->ctx,cvn_old->package,cvn_old->variable);
19902004
dlist_push_head(cvsn->changedVarsList,&cvn_new->node);
19912005
(get_actual_value(cvn_new->variable)->level)--;
19922006
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp