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

Commit8b7f27f

Browse files
committed
Make some use of anonymous unions [plpython]
Make some use of anonymous unions, which are allowed as of C11, asexamples and encouragement for future code, and to test compilers.This commit changes some structures in plpython.Reviewed-by: Chao Li <li.evan.chao@gmail.com>Discussion:https://www.postgresql.org/message-id/flat/f00a9968-388e-4f8c-b5ef-5102e962d997%40eisentraut.org
1 parentefcd519 commit8b7f27f

File tree

3 files changed

+70
-70
lines changed

3 files changed

+70
-70
lines changed

‎src/pl/plpython/plpy_exec.c‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1046,7 +1046,7 @@ PLy_modify_tuple(PLyProcedure *proc, PyObject *pltd, TriggerData *tdata,
10461046
Py_INCREF(plval);
10471047

10481048
/* We assume proc->result is set up to convert tuples properly */
1049-
att=&proc->result.u.tuple.atts[attn-1];
1049+
att=&proc->result.tuple.atts[attn-1];
10501050

10511051
modvalues[attn-1]=PLy_output_convert(att,
10521052
plval,

‎src/pl/plpython/plpy_typeio.c‎

Lines changed: 67 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -171,15 +171,15 @@ PLy_input_setup_tuple(PLyDatumToOb *arg, TupleDesc desc, PLyProcedure *proc)
171171

172172
/* Save pointer to tupdesc, but only if this is an anonymous record type */
173173
if (arg->typoid==RECORDOID&&arg->typmod<0)
174-
arg->u.tuple.recdesc=desc;
174+
arg->tuple.recdesc=desc;
175175

176176
/* (Re)allocate atts array as needed */
177-
if (arg->u.tuple.natts!=desc->natts)
177+
if (arg->tuple.natts!=desc->natts)
178178
{
179-
if (arg->u.tuple.atts)
180-
pfree(arg->u.tuple.atts);
181-
arg->u.tuple.natts=desc->natts;
182-
arg->u.tuple.atts= (PLyDatumToOb*)
179+
if (arg->tuple.atts)
180+
pfree(arg->tuple.atts);
181+
arg->tuple.natts=desc->natts;
182+
arg->tuple.atts= (PLyDatumToOb*)
183183
MemoryContextAllocZero(arg->mcxt,
184184
desc->natts*sizeof(PLyDatumToOb));
185185
}
@@ -188,7 +188,7 @@ PLy_input_setup_tuple(PLyDatumToOb *arg, TupleDesc desc, PLyProcedure *proc)
188188
for (i=0;i<desc->natts;i++)
189189
{
190190
Form_pg_attributeattr=TupleDescAttr(desc,i);
191-
PLyDatumToOb*att=&arg->u.tuple.atts[i];
191+
PLyDatumToOb*att=&arg->tuple.atts[i];
192192

193193
if (attr->attisdropped)
194194
continue;
@@ -221,15 +221,15 @@ PLy_output_setup_tuple(PLyObToDatum *arg, TupleDesc desc, PLyProcedure *proc)
221221

222222
/* Save pointer to tupdesc, but only if this is an anonymous record type */
223223
if (arg->typoid==RECORDOID&&arg->typmod<0)
224-
arg->u.tuple.recdesc=desc;
224+
arg->tuple.recdesc=desc;
225225

226226
/* (Re)allocate atts array as needed */
227-
if (arg->u.tuple.natts!=desc->natts)
227+
if (arg->tuple.natts!=desc->natts)
228228
{
229-
if (arg->u.tuple.atts)
230-
pfree(arg->u.tuple.atts);
231-
arg->u.tuple.natts=desc->natts;
232-
arg->u.tuple.atts= (PLyObToDatum*)
229+
if (arg->tuple.atts)
230+
pfree(arg->tuple.atts);
231+
arg->tuple.natts=desc->natts;
232+
arg->tuple.atts= (PLyObToDatum*)
233233
MemoryContextAllocZero(arg->mcxt,
234234
desc->natts*sizeof(PLyObToDatum));
235235
}
@@ -238,7 +238,7 @@ PLy_output_setup_tuple(PLyObToDatum *arg, TupleDesc desc, PLyProcedure *proc)
238238
for (i=0;i<desc->natts;i++)
239239
{
240240
Form_pg_attributeattr=TupleDescAttr(desc,i);
241-
PLyObToDatum*att=&arg->u.tuple.atts[i];
241+
PLyObToDatum*att=&arg->tuple.atts[i];
242242

243243
if (attr->attisdropped)
244244
continue;
@@ -277,9 +277,9 @@ PLy_output_setup_record(PLyObToDatum *arg, TupleDesc desc, PLyProcedure *proc)
277277
* for the record type.
278278
*/
279279
arg->typmod=desc->tdtypmod;
280-
if (arg->u.tuple.recdesc&&
281-
arg->u.tuple.recdesc->tdtypmod!=arg->typmod)
282-
arg->u.tuple.recdesc=NULL;
280+
if (arg->tuple.recdesc&&
281+
arg->tuple.recdesc->tdtypmod!=arg->typmod)
282+
arg->tuple.recdesc=NULL;
283283

284284
/* Update derived data if necessary */
285285
PLy_output_setup_tuple(arg,desc,proc);
@@ -343,11 +343,11 @@ PLy_output_setup_func(PLyObToDatum *arg, MemoryContext arg_mcxt,
343343
{
344344
/* Domain */
345345
arg->func=PLyObject_ToDomain;
346-
arg->u.domain.domain_info=NULL;
346+
arg->domain.domain_info=NULL;
347347
/* Recursively set up conversion info for the element type */
348-
arg->u.domain.base= (PLyObToDatum*)
348+
arg->domain.base= (PLyObToDatum*)
349349
MemoryContextAllocZero(arg_mcxt,sizeof(PLyObToDatum));
350-
PLy_output_setup_func(arg->u.domain.base,arg_mcxt,
350+
PLy_output_setup_func(arg->domain.base,arg_mcxt,
351351
typentry->domainBaseType,
352352
typentry->domainBaseTypmod,
353353
proc);
@@ -359,11 +359,11 @@ PLy_output_setup_func(PLyObToDatum *arg, MemoryContext arg_mcxt,
359359
arg->func=PLySequence_ToArray;
360360
/* Get base type OID to insert into constructed array */
361361
/* (note this might not be the same as the immediate child type) */
362-
arg->u.array.elmbasetype=getBaseType(typentry->typelem);
362+
arg->array.elmbasetype=getBaseType(typentry->typelem);
363363
/* Recursively set up conversion info for the element type */
364-
arg->u.array.elm= (PLyObToDatum*)
364+
arg->array.elm= (PLyObToDatum*)
365365
MemoryContextAllocZero(arg_mcxt,sizeof(PLyObToDatum));
366-
PLy_output_setup_func(arg->u.array.elm,arg_mcxt,
366+
PLy_output_setup_func(arg->array.elm,arg_mcxt,
367367
typentry->typelem,typmod,
368368
proc);
369369
}
@@ -372,20 +372,20 @@ PLy_output_setup_func(PLyObToDatum *arg, MemoryContext arg_mcxt,
372372
proc->trftypes)))
373373
{
374374
arg->func=PLyObject_ToTransform;
375-
fmgr_info_cxt(trfuncid,&arg->u.transform.typtransform,arg_mcxt);
375+
fmgr_info_cxt(trfuncid,&arg->transform.typtransform,arg_mcxt);
376376
}
377377
elseif (typtype==TYPTYPE_COMPOSITE)
378378
{
379379
/* Named composite type, or RECORD */
380380
arg->func=PLyObject_ToComposite;
381381
/* We'll set up the per-field data later */
382-
arg->u.tuple.recdesc=NULL;
383-
arg->u.tuple.typentry=typentry;
384-
arg->u.tuple.tupdescid=INVALID_TUPLEDESC_IDENTIFIER;
385-
arg->u.tuple.atts=NULL;
386-
arg->u.tuple.natts=0;
382+
arg->tuple.recdesc=NULL;
383+
arg->tuple.typentry=typentry;
384+
arg->tuple.tupdescid=INVALID_TUPLEDESC_IDENTIFIER;
385+
arg->tuple.atts=NULL;
386+
arg->tuple.natts=0;
387387
/* Mark this invalid till needed, too */
388-
arg->u.tuple.recinfunc.fn_oid=InvalidOid;
388+
arg->tuple.recinfunc.fn_oid=InvalidOid;
389389
}
390390
else
391391
{
@@ -400,8 +400,8 @@ PLy_output_setup_func(PLyObToDatum *arg, MemoryContext arg_mcxt,
400400
break;
401401
default:
402402
arg->func=PLyObject_ToScalar;
403-
getTypeInputInfo(typeOid,&typinput,&arg->u.scalar.typioparam);
404-
fmgr_info_cxt(typinput,&arg->u.scalar.typfunc,arg_mcxt);
403+
getTypeInputInfo(typeOid,&typinput,&arg->scalar.typioparam);
404+
fmgr_info_cxt(typinput,&arg->scalar.typfunc,arg_mcxt);
405405
break;
406406
}
407407
}
@@ -476,9 +476,9 @@ PLy_input_setup_func(PLyDatumToOb *arg, MemoryContext arg_mcxt,
476476
/* Standard array */
477477
arg->func=PLyList_FromArray;
478478
/* Recursively set up conversion info for the element type */
479-
arg->u.array.elm= (PLyDatumToOb*)
479+
arg->array.elm= (PLyDatumToOb*)
480480
MemoryContextAllocZero(arg_mcxt,sizeof(PLyDatumToOb));
481-
PLy_input_setup_func(arg->u.array.elm,arg_mcxt,
481+
PLy_input_setup_func(arg->array.elm,arg_mcxt,
482482
typentry->typelem,typmod,
483483
proc);
484484
}
@@ -487,18 +487,18 @@ PLy_input_setup_func(PLyDatumToOb *arg, MemoryContext arg_mcxt,
487487
proc->trftypes)))
488488
{
489489
arg->func=PLyObject_FromTransform;
490-
fmgr_info_cxt(trfuncid,&arg->u.transform.typtransform,arg_mcxt);
490+
fmgr_info_cxt(trfuncid,&arg->transform.typtransform,arg_mcxt);
491491
}
492492
elseif (typtype==TYPTYPE_COMPOSITE)
493493
{
494494
/* Named composite type, or RECORD */
495495
arg->func=PLyDict_FromComposite;
496496
/* We'll set up the per-field data later */
497-
arg->u.tuple.recdesc=NULL;
498-
arg->u.tuple.typentry=typentry;
499-
arg->u.tuple.tupdescid=INVALID_TUPLEDESC_IDENTIFIER;
500-
arg->u.tuple.atts=NULL;
501-
arg->u.tuple.natts=0;
497+
arg->tuple.recdesc=NULL;
498+
arg->tuple.typentry=typentry;
499+
arg->tuple.tupdescid=INVALID_TUPLEDESC_IDENTIFIER;
500+
arg->tuple.atts=NULL;
501+
arg->tuple.natts=0;
502502
}
503503
else
504504
{
@@ -535,7 +535,7 @@ PLy_input_setup_func(PLyDatumToOb *arg, MemoryContext arg_mcxt,
535535
default:
536536
arg->func=PLyUnicode_FromScalar;
537537
getTypeOutputInfo(typeOid,&typoutput,&typisvarlena);
538-
fmgr_info_cxt(typoutput,&arg->u.scalar.typfunc,arg_mcxt);
538+
fmgr_info_cxt(typoutput,&arg->scalar.typfunc,arg_mcxt);
539539
break;
540540
}
541541
}
@@ -641,7 +641,7 @@ PLyBytes_FromBytea(PLyDatumToOb *arg, Datum d)
641641
staticPyObject*
642642
PLyUnicode_FromScalar(PLyDatumToOb*arg,Datumd)
643643
{
644-
char*x=OutputFunctionCall(&arg->u.scalar.typfunc,d);
644+
char*x=OutputFunctionCall(&arg->scalar.typfunc,d);
645645
PyObject*r=PLyUnicode_FromString(x);
646646

647647
pfree(x);
@@ -656,7 +656,7 @@ PLyObject_FromTransform(PLyDatumToOb *arg, Datum d)
656656
{
657657
Datumt;
658658

659-
t=FunctionCall1(&arg->u.transform.typtransform,d);
659+
t=FunctionCall1(&arg->transform.typtransform,d);
660660
return (PyObject*)DatumGetPointer(t);
661661
}
662662

@@ -667,7 +667,7 @@ static PyObject *
667667
PLyList_FromArray(PLyDatumToOb*arg,Datumd)
668668
{
669669
ArrayType*array=DatumGetArrayTypeP(d);
670-
PLyDatumToOb*elm=arg->u.array.elm;
670+
PLyDatumToOb*elm=arg->array.elm;
671671
intndim;
672672
int*dims;
673673
char*dataptr;
@@ -817,7 +817,7 @@ PLyDict_FromTuple(PLyDatumToOb *arg, HeapTuple tuple, TupleDesc desc, bool inclu
817817
PyObject*volatiledict;
818818

819819
/* Simple sanity check that desc matches */
820-
Assert(desc->natts==arg->u.tuple.natts);
820+
Assert(desc->natts==arg->tuple.natts);
821821

822822
dict=PyDict_New();
823823
if (dict==NULL)
@@ -827,9 +827,9 @@ PLyDict_FromTuple(PLyDatumToOb *arg, HeapTuple tuple, TupleDesc desc, bool inclu
827827
{
828828
inti;
829829

830-
for (i=0;i<arg->u.tuple.natts;i++)
830+
for (i=0;i<arg->tuple.natts;i++)
831831
{
832-
PLyDatumToOb*att=&arg->u.tuple.atts[i];
832+
PLyDatumToOb*att=&arg->tuple.atts[i];
833833
Form_pg_attributeattr=TupleDescAttr(desc,i);
834834
char*key;
835835
Datumvattr;
@@ -971,22 +971,22 @@ PLyObject_ToComposite(PLyObToDatum *arg, PyObject *plrv,
971971
{
972972
desc=lookup_rowtype_tupdesc(arg->typoid,arg->typmod);
973973
/* We should have the descriptor of the type's typcache entry */
974-
Assert(desc==arg->u.tuple.typentry->tupDesc);
974+
Assert(desc==arg->tuple.typentry->tupDesc);
975975
/* Detect change of descriptor, update cache if needed */
976-
if (arg->u.tuple.tupdescid!=arg->u.tuple.typentry->tupDesc_identifier)
976+
if (arg->tuple.tupdescid!=arg->tuple.typentry->tupDesc_identifier)
977977
{
978978
PLy_output_setup_tuple(arg,desc,
979979
PLy_current_execution_context()->curr_proc);
980-
arg->u.tuple.tupdescid=arg->u.tuple.typentry->tupDesc_identifier;
980+
arg->tuple.tupdescid=arg->tuple.typentry->tupDesc_identifier;
981981
}
982982
}
983983
else
984984
{
985-
desc=arg->u.tuple.recdesc;
985+
desc=arg->tuple.recdesc;
986986
if (desc==NULL)
987987
{
988988
desc=lookup_rowtype_tupdesc(arg->typoid,arg->typmod);
989-
arg->u.tuple.recdesc=desc;
989+
arg->tuple.recdesc=desc;
990990
}
991991
else
992992
{
@@ -996,7 +996,7 @@ PLyObject_ToComposite(PLyObToDatum *arg, PyObject *plrv,
996996
}
997997

998998
/* Simple sanity check on our caching */
999-
Assert(desc->natts==arg->u.tuple.natts);
999+
Assert(desc->natts==arg->tuple.natts);
10001000

10011001
/*
10021002
* Convert, using the appropriate method depending on the type of the
@@ -1088,9 +1088,9 @@ PLyObject_ToScalar(PLyObToDatum *arg, PyObject *plrv,
10881088

10891089
str=PLyObject_AsString(plrv);
10901090

1091-
returnInputFunctionCall(&arg->u.scalar.typfunc,
1091+
returnInputFunctionCall(&arg->scalar.typfunc,
10921092
str,
1093-
arg->u.scalar.typioparam,
1093+
arg->scalar.typioparam,
10941094
arg->typmod);
10951095
}
10961096

@@ -1103,11 +1103,11 @@ PLyObject_ToDomain(PLyObToDatum *arg, PyObject *plrv,
11031103
bool*isnull,boolinarray)
11041104
{
11051105
Datumresult;
1106-
PLyObToDatum*base=arg->u.domain.base;
1106+
PLyObToDatum*base=arg->domain.base;
11071107

11081108
result=base->func(base,plrv,isnull,inarray);
11091109
domain_check(result,*isnull,arg->typoid,
1110-
&arg->u.domain.domain_info,arg->mcxt);
1110+
&arg->domain.domain_info,arg->mcxt);
11111111
returnresult;
11121112
}
11131113

@@ -1125,7 +1125,7 @@ PLyObject_ToTransform(PLyObToDatum *arg, PyObject *plrv,
11251125
return (Datum)0;
11261126
}
11271127
*isnull= false;
1128-
returnFunctionCall1(&arg->u.transform.typtransform,PointerGetDatum(plrv));
1128+
returnFunctionCall1(&arg->transform.typtransform,PointerGetDatum(plrv));
11291129
}
11301130

11311131

@@ -1169,12 +1169,12 @@ PLySequence_ToArray(PLyObToDatum *arg, PyObject *plrv,
11691169
*/
11701170
PLySequence_ToArray_recurse(plrv,&astate,
11711171
&ndims,dims,1,
1172-
arg->u.array.elm,
1173-
arg->u.array.elmbasetype);
1172+
arg->array.elm,
1173+
arg->array.elmbasetype);
11741174

11751175
/* ensure we get zero-D array for no inputs, as per PG convention */
11761176
if (astate==NULL)
1177-
returnPointerGetDatum(construct_empty_array(arg->u.array.elmbasetype));
1177+
returnPointerGetDatum(construct_empty_array(arg->array.elmbasetype));
11781178

11791179
for (inti=0;i<ndims;i++)
11801180
lbs[i]=1;
@@ -1289,8 +1289,8 @@ PLyUnicode_ToComposite(PLyObToDatum *arg, PyObject *string, bool inarray)
12891289
* Set up call data for record_in, if we didn't already. (We can't just
12901290
* use DirectFunctionCall, because record_in needs a fn_extra field.)
12911291
*/
1292-
if (!OidIsValid(arg->u.tuple.recinfunc.fn_oid))
1293-
fmgr_info_cxt(F_RECORD_IN,&arg->u.tuple.recinfunc,arg->mcxt);
1292+
if (!OidIsValid(arg->tuple.recinfunc.fn_oid))
1293+
fmgr_info_cxt(F_RECORD_IN,&arg->tuple.recinfunc,arg->mcxt);
12941294

12951295
str=PLyObject_AsString(string);
12961296

@@ -1334,7 +1334,7 @@ PLyUnicode_ToComposite(PLyObToDatum *arg, PyObject *string, bool inarray)
13341334
errhint("To return a composite type in an array, return the composite type as a Python tuple, e.g., \"[('foo',)]\".")));
13351335
}
13361336

1337-
returnInputFunctionCall(&arg->u.tuple.recinfunc,
1337+
returnInputFunctionCall(&arg->tuple.recinfunc,
13381338
str,
13391339
arg->typoid,
13401340
arg->typmod);
@@ -1371,7 +1371,7 @@ PLyMapping_ToComposite(PLyObToDatum *arg, TupleDesc desc, PyObject *mapping)
13711371

13721372
key=NameStr(attr->attname);
13731373
value=NULL;
1374-
att=&arg->u.tuple.atts[i];
1374+
att=&arg->tuple.atts[i];
13751375
PG_TRY();
13761376
{
13771377
value=PyMapping_GetItemString(mapping,key);
@@ -1451,7 +1451,7 @@ PLySequence_ToComposite(PLyObToDatum *arg, TupleDesc desc, PyObject *sequence)
14511451
}
14521452

14531453
value=NULL;
1454-
att=&arg->u.tuple.atts[i];
1454+
att=&arg->tuple.atts[i];
14551455
PG_TRY();
14561456
{
14571457
value=PySequence_GetItem(sequence,idx);
@@ -1511,7 +1511,7 @@ PLyGenericObject_ToComposite(PLyObToDatum *arg, TupleDesc desc, PyObject *object
15111511

15121512
key=NameStr(attr->attname);
15131513
value=NULL;
1514-
att=&arg->u.tuple.atts[i];
1514+
att=&arg->tuple.atts[i];
15151515
PG_TRY();
15161516
{
15171517
value=PyObject_GetAttrString(object,key);

‎src/pl/plpython/plpy_typeio.h‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ struct PLyDatumToOb
6969
PLyArrayToObarray;
7070
PLyTupleToObtuple;
7171
PLyTransformToObtransform;
72-
}u;
72+
};
7373
};
7474

7575
/*
@@ -143,7 +143,7 @@ struct PLyObToDatum
143143
PLyObToTupletuple;
144144
PLyObToDomaindomain;
145145
PLyObToTransformtransform;
146-
}u;
146+
};
147147
};
148148

149149

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp