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

Commitc6ff0b8

Browse files
committed
Refactor ParamListInfo initialization
There were six copies of identical nontrivial code. Put it into afunction.
1 parent1226d93 commitc6ff0b8

File tree

7 files changed

+40
-78
lines changed

7 files changed

+40
-78
lines changed

‎src/backend/commands/prepare.c

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -393,17 +393,7 @@ EvaluateParams(PreparedStatement *pstmt, List *params,
393393
/* Prepare the expressions for execution */
394394
exprstates=ExecPrepareExprList(params,estate);
395395

396-
paramLI= (ParamListInfo)
397-
palloc(offsetof(ParamListInfoData,params)+
398-
num_params*sizeof(ParamExternData));
399-
/* we have static list of params, so no hooks needed */
400-
paramLI->paramFetch=NULL;
401-
paramLI->paramFetchArg=NULL;
402-
paramLI->paramCompile=NULL;
403-
paramLI->paramCompileArg=NULL;
404-
paramLI->parserSetup=NULL;
405-
paramLI->parserSetupArg=NULL;
406-
paramLI->numParams=num_params;
396+
paramLI=makeParamList(num_params);
407397

408398
i=0;
409399
foreach(l,exprstates)

‎src/backend/executor/functions.c

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -906,21 +906,10 @@ postquel_sub_params(SQLFunctionCachePtr fcache,
906906
if (nargs>0)
907907
{
908908
ParamListInfoparamLI;
909-
inti;
910909

911910
if (fcache->paramLI==NULL)
912911
{
913-
paramLI= (ParamListInfo)
914-
palloc(offsetof(ParamListInfoData,params)+
915-
nargs*sizeof(ParamExternData));
916-
/* we have static list of params, so no hooks needed */
917-
paramLI->paramFetch=NULL;
918-
paramLI->paramFetchArg=NULL;
919-
paramLI->paramCompile=NULL;
920-
paramLI->paramCompileArg=NULL;
921-
paramLI->parserSetup=NULL;
922-
paramLI->parserSetupArg=NULL;
923-
paramLI->numParams=nargs;
912+
paramLI=makeParamList(nargs);
924913
fcache->paramLI=paramLI;
925914
}
926915
else
@@ -929,7 +918,7 @@ postquel_sub_params(SQLFunctionCachePtr fcache,
929918
Assert(paramLI->numParams==nargs);
930919
}
931920

932-
for (i=0;i<nargs;i++)
921+
for (inti=0;i<nargs;i++)
933922
{
934923
ParamExternData*prm=&paramLI->params[i];
935924

‎src/backend/executor/spi.c

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2387,20 +2387,9 @@ _SPI_convert_params(int nargs, Oid *argtypes,
23872387

23882388
if (nargs>0)
23892389
{
2390-
inti;
2391-
2392-
paramLI= (ParamListInfo)palloc(offsetof(ParamListInfoData,params)+
2393-
nargs*sizeof(ParamExternData));
2394-
/* we have static list of params, so no hooks needed */
2395-
paramLI->paramFetch=NULL;
2396-
paramLI->paramFetchArg=NULL;
2397-
paramLI->paramCompile=NULL;
2398-
paramLI->paramCompileArg=NULL;
2399-
paramLI->parserSetup=NULL;
2400-
paramLI->parserSetupArg=NULL;
2401-
paramLI->numParams=nargs;
2402-
2403-
for (i=0;i<nargs;i++)
2390+
paramLI=makeParamList(nargs);
2391+
2392+
for (inti=0;i<nargs;i++)
24042393
{
24052394
ParamExternData*prm=&paramLI->params[i];
24062395

‎src/backend/nodes/params.c

Lines changed: 31 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,33 @@
2222
#include"utils/lsyscache.h"
2323

2424

25+
/*
26+
* Allocate and initialize a new ParamListInfo structure.
27+
*
28+
* To make a new structure for the "dynamic" way (with hooks), pass 0 for
29+
* numParams and set numParams manually.
30+
*/
31+
ParamListInfo
32+
makeParamList(intnumParams)
33+
{
34+
ParamListInforetval;
35+
Sizesize;
36+
37+
size= offsetof(ParamListInfoData,params)+
38+
numParams*sizeof(ParamExternData);
39+
40+
retval= (ParamListInfo)palloc(size);
41+
retval->paramFetch=NULL;
42+
retval->paramFetchArg=NULL;
43+
retval->paramCompile=NULL;
44+
retval->paramCompileArg=NULL;
45+
retval->parserSetup=NULL;
46+
retval->parserSetupArg=NULL;
47+
retval->numParams=numParams;
48+
49+
returnretval;
50+
}
51+
2552
/*
2653
* Copy a ParamListInfo structure.
2754
*
@@ -36,25 +63,13 @@ ParamListInfo
3663
copyParamList(ParamListInfofrom)
3764
{
3865
ParamListInforetval;
39-
Sizesize;
40-
inti;
4166

4267
if (from==NULL||from->numParams <=0)
4368
returnNULL;
4469

45-
size= offsetof(ParamListInfoData,params)+
46-
from->numParams*sizeof(ParamExternData);
47-
48-
retval= (ParamListInfo)palloc(size);
49-
retval->paramFetch=NULL;
50-
retval->paramFetchArg=NULL;
51-
retval->paramCompile=NULL;
52-
retval->paramCompileArg=NULL;
53-
retval->parserSetup=NULL;
54-
retval->parserSetupArg=NULL;
55-
retval->numParams=from->numParams;
70+
retval=makeParamList(from->numParams);
5671

57-
for (i=0;i<from->numParams;i++)
72+
for (inti=0;i<from->numParams;i++)
5873
{
5974
ParamExternData*oprm;
6075
ParamExternData*nprm=&retval->params[i];
@@ -211,26 +226,14 @@ ParamListInfo
211226
RestoreParamList(char**start_address)
212227
{
213228
ParamListInfoparamLI;
214-
Sizesize;
215-
inti;
216229
intnparams;
217230

218231
memcpy(&nparams,*start_address,sizeof(int));
219232
*start_address+=sizeof(int);
220233

221-
size= offsetof(ParamListInfoData,params)+
222-
nparams*sizeof(ParamExternData);
223-
224-
paramLI= (ParamListInfo)palloc(size);
225-
paramLI->paramFetch=NULL;
226-
paramLI->paramFetchArg=NULL;
227-
paramLI->paramCompile=NULL;
228-
paramLI->paramCompileArg=NULL;
229-
paramLI->parserSetup=NULL;
230-
paramLI->parserSetupArg=NULL;
231-
paramLI->numParams=nparams;
234+
paramLI=makeParamList(nparams);
232235

233-
for (i=0;i<nparams;i++)
236+
for (inti=0;i<nparams;i++)
234237
{
235238
ParamExternData*prm=&paramLI->params[i];
236239

‎src/backend/tcop/postgres.c

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1731,16 +1731,7 @@ exec_bind_message(StringInfo input_message)
17311731
*/
17321732
if (numParams>0)
17331733
{
1734-
params= (ParamListInfo)palloc(offsetof(ParamListInfoData,params)+
1735-
numParams*sizeof(ParamExternData));
1736-
/* we have static list of params, so no hooks needed */
1737-
params->paramFetch=NULL;
1738-
params->paramFetchArg=NULL;
1739-
params->paramCompile=NULL;
1740-
params->paramCompileArg=NULL;
1741-
params->parserSetup=NULL;
1742-
params->parserSetupArg=NULL;
1743-
params->numParams=numParams;
1734+
params=makeParamList(numParams);
17441735

17451736
for (intparamno=0;paramno<numParams;paramno++)
17461737
{

‎src/include/nodes/params.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ typedef struct ParamExecData
151151

152152

153153
/* Functions found in src/backend/nodes/params.c */
154+
externParamListInfomakeParamList(intnumParams);
154155
externParamListInfocopyParamList(ParamListInfofrom);
155156
externSizeEstimateParamListSpace(ParamListInfoparamLI);
156157
externvoidSerializeParamList(ParamListInfoparamLI,char**start_address);

‎src/pl/plpgsql/src/pl_exec.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3874,8 +3874,7 @@ plpgsql_estate_setup(PLpgSQL_execstate *estate,
38743874
estate->datum_context=CurrentMemoryContext;
38753875

38763876
/* initialize our ParamListInfo with appropriate hook functions */
3877-
estate->paramLI= (ParamListInfo)
3878-
palloc(offsetof(ParamListInfoData,params));
3877+
estate->paramLI=makeParamList(0);
38793878
estate->paramLI->paramFetch=plpgsql_param_fetch;
38803879
estate->paramLI->paramFetchArg= (void*)estate;
38813880
estate->paramLI->paramCompile=plpgsql_param_compile;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp