diff options
author | Peter Eisentraut <peter@eisentraut.org> | 2025-09-30 12:24:57 +0200 |
---|---|---|
committer | Peter Eisentraut <peter@eisentraut.org> | 2025-09-30 12:35:50 +0200 |
commit | 8b7f27fef3e225e0b34f0d9f1a9f20770b72d01c (patch) | |
tree | 78a575cc4233a93e591ac0475db58d4efd572737 /src | |
parent | efcd5199d8cb8e5098f79b38d0c46004e69d1a46 (diff) |
Make some use of anonymous unions [plpython]
Make some use of anonymous unions, which are allowed as of C11, as
examples 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
Diffstat (limited to 'src')
-rw-r--r-- | src/pl/plpython/plpy_exec.c | 2 | ||||
-rw-r--r-- | src/pl/plpython/plpy_typeio.c | 134 | ||||
-rw-r--r-- | src/pl/plpython/plpy_typeio.h | 4 |
3 files changed, 70 insertions, 70 deletions
diff --git a/src/pl/plpython/plpy_exec.c b/src/pl/plpython/plpy_exec.c index fd06b9e0e4e..0117f1e77ef 100644 --- a/src/pl/plpython/plpy_exec.c +++ b/src/pl/plpython/plpy_exec.c @@ -1046,7 +1046,7 @@ PLy_modify_tuple(PLyProcedure *proc, PyObject *pltd, TriggerData *tdata, Py_INCREF(plval); /* We assume proc->result is set up to convert tuples properly */ - att = &proc->result.u.tuple.atts[attn - 1]; + att = &proc->result.tuple.atts[attn - 1]; modvalues[attn - 1] = PLy_output_convert(att, plval, diff --git a/src/pl/plpython/plpy_typeio.c b/src/pl/plpython/plpy_typeio.c index f6509a41902..bba78fb7592 100644 --- a/src/pl/plpython/plpy_typeio.c +++ b/src/pl/plpython/plpy_typeio.c @@ -171,15 +171,15 @@ PLy_input_setup_tuple(PLyDatumToOb *arg, TupleDesc desc, PLyProcedure *proc) /* Save pointer to tupdesc, but only if this is an anonymous record type */ if (arg->typoid == RECORDOID && arg->typmod < 0) - arg->u.tuple.recdesc = desc; + arg->tuple.recdesc = desc; /* (Re)allocate atts array as needed */ - if (arg->u.tuple.natts != desc->natts) + if (arg->tuple.natts != desc->natts) { - if (arg->u.tuple.atts) - pfree(arg->u.tuple.atts); - arg->u.tuple.natts = desc->natts; - arg->u.tuple.atts = (PLyDatumToOb *) + if (arg->tuple.atts) + pfree(arg->tuple.atts); + arg->tuple.natts = desc->natts; + arg->tuple.atts = (PLyDatumToOb *) MemoryContextAllocZero(arg->mcxt, desc->natts * sizeof(PLyDatumToOb)); } @@ -188,7 +188,7 @@ PLy_input_setup_tuple(PLyDatumToOb *arg, TupleDesc desc, PLyProcedure *proc) for (i = 0; i < desc->natts; i++) { Form_pg_attribute attr = TupleDescAttr(desc, i); - PLyDatumToOb *att = &arg->u.tuple.atts[i]; + PLyDatumToOb *att = &arg->tuple.atts[i]; if (attr->attisdropped) continue; @@ -221,15 +221,15 @@ PLy_output_setup_tuple(PLyObToDatum *arg, TupleDesc desc, PLyProcedure *proc) /* Save pointer to tupdesc, but only if this is an anonymous record type */ if (arg->typoid == RECORDOID && arg->typmod < 0) - arg->u.tuple.recdesc = desc; + arg->tuple.recdesc = desc; /* (Re)allocate atts array as needed */ - if (arg->u.tuple.natts != desc->natts) + if (arg->tuple.natts != desc->natts) { - if (arg->u.tuple.atts) - pfree(arg->u.tuple.atts); - arg->u.tuple.natts = desc->natts; - arg->u.tuple.atts = (PLyObToDatum *) + if (arg->tuple.atts) + pfree(arg->tuple.atts); + arg->tuple.natts = desc->natts; + arg->tuple.atts = (PLyObToDatum *) MemoryContextAllocZero(arg->mcxt, desc->natts * sizeof(PLyObToDatum)); } @@ -238,7 +238,7 @@ PLy_output_setup_tuple(PLyObToDatum *arg, TupleDesc desc, PLyProcedure *proc) for (i = 0; i < desc->natts; i++) { Form_pg_attribute attr = TupleDescAttr(desc, i); - PLyObToDatum *att = &arg->u.tuple.atts[i]; + PLyObToDatum *att = &arg->tuple.atts[i]; if (attr->attisdropped) continue; @@ -277,9 +277,9 @@ PLy_output_setup_record(PLyObToDatum *arg, TupleDesc desc, PLyProcedure *proc) * for the record type. */ arg->typmod = desc->tdtypmod; - if (arg->u.tuple.recdesc && - arg->u.tuple.recdesc->tdtypmod != arg->typmod) - arg->u.tuple.recdesc = NULL; + if (arg->tuple.recdesc && + arg->tuple.recdesc->tdtypmod != arg->typmod) + arg->tuple.recdesc = NULL; /* Update derived data if necessary */ PLy_output_setup_tuple(arg, desc, proc); @@ -343,11 +343,11 @@ PLy_output_setup_func(PLyObToDatum *arg, MemoryContext arg_mcxt, { /* Domain */ arg->func = PLyObject_ToDomain; - arg->u.domain.domain_info = NULL; + arg->domain.domain_info = NULL; /* Recursively set up conversion info for the element type */ - arg->u.domain.base = (PLyObToDatum *) + arg->domain.base = (PLyObToDatum *) MemoryContextAllocZero(arg_mcxt, sizeof(PLyObToDatum)); - PLy_output_setup_func(arg->u.domain.base, arg_mcxt, + PLy_output_setup_func(arg->domain.base, arg_mcxt, typentry->domainBaseType, typentry->domainBaseTypmod, proc); @@ -359,11 +359,11 @@ PLy_output_setup_func(PLyObToDatum *arg, MemoryContext arg_mcxt, arg->func = PLySequence_ToArray; /* Get base type OID to insert into constructed array */ /* (note this might not be the same as the immediate child type) */ - arg->u.array.elmbasetype = getBaseType(typentry->typelem); + arg->array.elmbasetype = getBaseType(typentry->typelem); /* Recursively set up conversion info for the element type */ - arg->u.array.elm = (PLyObToDatum *) + arg->array.elm = (PLyObToDatum *) MemoryContextAllocZero(arg_mcxt, sizeof(PLyObToDatum)); - PLy_output_setup_func(arg->u.array.elm, arg_mcxt, + PLy_output_setup_func(arg->array.elm, arg_mcxt, typentry->typelem, typmod, proc); } @@ -372,20 +372,20 @@ PLy_output_setup_func(PLyObToDatum *arg, MemoryContext arg_mcxt, proc->trftypes))) { arg->func = PLyObject_ToTransform; - fmgr_info_cxt(trfuncid, &arg->u.transform.typtransform, arg_mcxt); + fmgr_info_cxt(trfuncid, &arg->transform.typtransform, arg_mcxt); } else if (typtype == TYPTYPE_COMPOSITE) { /* Named composite type, or RECORD */ arg->func = PLyObject_ToComposite; /* We'll set up the per-field data later */ - arg->u.tuple.recdesc = NULL; - arg->u.tuple.typentry = typentry; - arg->u.tuple.tupdescid = INVALID_TUPLEDESC_IDENTIFIER; - arg->u.tuple.atts = NULL; - arg->u.tuple.natts = 0; + arg->tuple.recdesc = NULL; + arg->tuple.typentry = typentry; + arg->tuple.tupdescid = INVALID_TUPLEDESC_IDENTIFIER; + arg->tuple.atts = NULL; + arg->tuple.natts = 0; /* Mark this invalid till needed, too */ - arg->u.tuple.recinfunc.fn_oid = InvalidOid; + arg->tuple.recinfunc.fn_oid = InvalidOid; } else { @@ -400,8 +400,8 @@ PLy_output_setup_func(PLyObToDatum *arg, MemoryContext arg_mcxt, break; default: arg->func = PLyObject_ToScalar; - getTypeInputInfo(typeOid, &typinput, &arg->u.scalar.typioparam); - fmgr_info_cxt(typinput, &arg->u.scalar.typfunc, arg_mcxt); + getTypeInputInfo(typeOid, &typinput, &arg->scalar.typioparam); + fmgr_info_cxt(typinput, &arg->scalar.typfunc, arg_mcxt); break; } } @@ -476,9 +476,9 @@ PLy_input_setup_func(PLyDatumToOb *arg, MemoryContext arg_mcxt, /* Standard array */ arg->func = PLyList_FromArray; /* Recursively set up conversion info for the element type */ - arg->u.array.elm = (PLyDatumToOb *) + arg->array.elm = (PLyDatumToOb *) MemoryContextAllocZero(arg_mcxt, sizeof(PLyDatumToOb)); - PLy_input_setup_func(arg->u.array.elm, arg_mcxt, + PLy_input_setup_func(arg->array.elm, arg_mcxt, typentry->typelem, typmod, proc); } @@ -487,18 +487,18 @@ PLy_input_setup_func(PLyDatumToOb *arg, MemoryContext arg_mcxt, proc->trftypes))) { arg->func = PLyObject_FromTransform; - fmgr_info_cxt(trfuncid, &arg->u.transform.typtransform, arg_mcxt); + fmgr_info_cxt(trfuncid, &arg->transform.typtransform, arg_mcxt); } else if (typtype == TYPTYPE_COMPOSITE) { /* Named composite type, or RECORD */ arg->func = PLyDict_FromComposite; /* We'll set up the per-field data later */ - arg->u.tuple.recdesc = NULL; - arg->u.tuple.typentry = typentry; - arg->u.tuple.tupdescid = INVALID_TUPLEDESC_IDENTIFIER; - arg->u.tuple.atts = NULL; - arg->u.tuple.natts = 0; + arg->tuple.recdesc = NULL; + arg->tuple.typentry = typentry; + arg->tuple.tupdescid = INVALID_TUPLEDESC_IDENTIFIER; + arg->tuple.atts = NULL; + arg->tuple.natts = 0; } else { @@ -535,7 +535,7 @@ PLy_input_setup_func(PLyDatumToOb *arg, MemoryContext arg_mcxt, default: arg->func = PLyUnicode_FromScalar; getTypeOutputInfo(typeOid, &typoutput, &typisvarlena); - fmgr_info_cxt(typoutput, &arg->u.scalar.typfunc, arg_mcxt); + fmgr_info_cxt(typoutput, &arg->scalar.typfunc, arg_mcxt); break; } } @@ -641,7 +641,7 @@ PLyBytes_FromBytea(PLyDatumToOb *arg, Datum d) static PyObject * PLyUnicode_FromScalar(PLyDatumToOb *arg, Datum d) { - char *x = OutputFunctionCall(&arg->u.scalar.typfunc, d); + char *x = OutputFunctionCall(&arg->scalar.typfunc, d); PyObject *r = PLyUnicode_FromString(x); pfree(x); @@ -656,7 +656,7 @@ PLyObject_FromTransform(PLyDatumToOb *arg, Datum d) { Datum t; - t = FunctionCall1(&arg->u.transform.typtransform, d); + t = FunctionCall1(&arg->transform.typtransform, d); return (PyObject *) DatumGetPointer(t); } @@ -667,7 +667,7 @@ static PyObject * PLyList_FromArray(PLyDatumToOb *arg, Datum d) { ArrayType *array = DatumGetArrayTypeP(d); - PLyDatumToOb *elm = arg->u.array.elm; + PLyDatumToOb *elm = arg->array.elm; int ndim; int *dims; char *dataptr; @@ -817,7 +817,7 @@ PLyDict_FromTuple(PLyDatumToOb *arg, HeapTuple tuple, TupleDesc desc, bool inclu PyObject *volatile dict; /* Simple sanity check that desc matches */ - Assert(desc->natts == arg->u.tuple.natts); + Assert(desc->natts == arg->tuple.natts); dict = PyDict_New(); if (dict == NULL) @@ -827,9 +827,9 @@ PLyDict_FromTuple(PLyDatumToOb *arg, HeapTuple tuple, TupleDesc desc, bool inclu { int i; - for (i = 0; i < arg->u.tuple.natts; i++) + for (i = 0; i < arg->tuple.natts; i++) { - PLyDatumToOb *att = &arg->u.tuple.atts[i]; + PLyDatumToOb *att = &arg->tuple.atts[i]; Form_pg_attribute attr = TupleDescAttr(desc, i); char *key; Datum vattr; @@ -971,22 +971,22 @@ PLyObject_ToComposite(PLyObToDatum *arg, PyObject *plrv, { desc = lookup_rowtype_tupdesc(arg->typoid, arg->typmod); /* We should have the descriptor of the type's typcache entry */ - Assert(desc == arg->u.tuple.typentry->tupDesc); + Assert(desc == arg->tuple.typentry->tupDesc); /* Detect change of descriptor, update cache if needed */ - if (arg->u.tuple.tupdescid != arg->u.tuple.typentry->tupDesc_identifier) + if (arg->tuple.tupdescid != arg->tuple.typentry->tupDesc_identifier) { PLy_output_setup_tuple(arg, desc, PLy_current_execution_context()->curr_proc); - arg->u.tuple.tupdescid = arg->u.tuple.typentry->tupDesc_identifier; + arg->tuple.tupdescid = arg->tuple.typentry->tupDesc_identifier; } } else { - desc = arg->u.tuple.recdesc; + desc = arg->tuple.recdesc; if (desc == NULL) { desc = lookup_rowtype_tupdesc(arg->typoid, arg->typmod); - arg->u.tuple.recdesc = desc; + arg->tuple.recdesc = desc; } else { @@ -996,7 +996,7 @@ PLyObject_ToComposite(PLyObToDatum *arg, PyObject *plrv, } /* Simple sanity check on our caching */ - Assert(desc->natts == arg->u.tuple.natts); + Assert(desc->natts == arg->tuple.natts); /* * Convert, using the appropriate method depending on the type of the @@ -1088,9 +1088,9 @@ PLyObject_ToScalar(PLyObToDatum *arg, PyObject *plrv, str = PLyObject_AsString(plrv); - return InputFunctionCall(&arg->u.scalar.typfunc, + return InputFunctionCall(&arg->scalar.typfunc, str, - arg->u.scalar.typioparam, + arg->scalar.typioparam, arg->typmod); } @@ -1103,11 +1103,11 @@ PLyObject_ToDomain(PLyObToDatum *arg, PyObject *plrv, bool *isnull, bool inarray) { Datum result; - PLyObToDatum *base = arg->u.domain.base; + PLyObToDatum *base = arg->domain.base; result = base->func(base, plrv, isnull, inarray); domain_check(result, *isnull, arg->typoid, - &arg->u.domain.domain_info, arg->mcxt); + &arg->domain.domain_info, arg->mcxt); return result; } @@ -1125,7 +1125,7 @@ PLyObject_ToTransform(PLyObToDatum *arg, PyObject *plrv, return (Datum) 0; } *isnull = false; - return FunctionCall1(&arg->u.transform.typtransform, PointerGetDatum(plrv)); + return FunctionCall1(&arg->transform.typtransform, PointerGetDatum(plrv)); } @@ -1169,12 +1169,12 @@ PLySequence_ToArray(PLyObToDatum *arg, PyObject *plrv, */ PLySequence_ToArray_recurse(plrv, &astate, &ndims, dims, 1, - arg->u.array.elm, - arg->u.array.elmbasetype); + arg->array.elm, + arg->array.elmbasetype); /* ensure we get zero-D array for no inputs, as per PG convention */ if (astate == NULL) - return PointerGetDatum(construct_empty_array(arg->u.array.elmbasetype)); + return PointerGetDatum(construct_empty_array(arg->array.elmbasetype)); for (int i = 0; i < ndims; i++) lbs[i] = 1; @@ -1289,8 +1289,8 @@ PLyUnicode_ToComposite(PLyObToDatum *arg, PyObject *string, bool inarray) * Set up call data for record_in, if we didn't already. (We can't just * use DirectFunctionCall, because record_in needs a fn_extra field.) */ - if (!OidIsValid(arg->u.tuple.recinfunc.fn_oid)) - fmgr_info_cxt(F_RECORD_IN, &arg->u.tuple.recinfunc, arg->mcxt); + if (!OidIsValid(arg->tuple.recinfunc.fn_oid)) + fmgr_info_cxt(F_RECORD_IN, &arg->tuple.recinfunc, arg->mcxt); str = PLyObject_AsString(string); @@ -1334,7 +1334,7 @@ PLyUnicode_ToComposite(PLyObToDatum *arg, PyObject *string, bool inarray) errhint("To return a composite type in an array, return the composite type as a Python tuple, e.g., \"[('foo',)]\"."))); } - return InputFunctionCall(&arg->u.tuple.recinfunc, + return InputFunctionCall(&arg->tuple.recinfunc, str, arg->typoid, arg->typmod); @@ -1371,7 +1371,7 @@ PLyMapping_ToComposite(PLyObToDatum *arg, TupleDesc desc, PyObject *mapping) key = NameStr(attr->attname); value = NULL; - att = &arg->u.tuple.atts[i]; + att = &arg->tuple.atts[i]; PG_TRY(); { value = PyMapping_GetItemString(mapping, key); @@ -1451,7 +1451,7 @@ PLySequence_ToComposite(PLyObToDatum *arg, TupleDesc desc, PyObject *sequence) } value = NULL; - att = &arg->u.tuple.atts[i]; + att = &arg->tuple.atts[i]; PG_TRY(); { value = PySequence_GetItem(sequence, idx); @@ -1511,7 +1511,7 @@ PLyGenericObject_ToComposite(PLyObToDatum *arg, TupleDesc desc, PyObject *object key = NameStr(attr->attname); value = NULL; - att = &arg->u.tuple.atts[i]; + att = &arg->tuple.atts[i]; PG_TRY(); { value = PyObject_GetAttrString(object, key); diff --git a/src/pl/plpython/plpy_typeio.h b/src/pl/plpython/plpy_typeio.h index 5417f0945d2..29258509b5c 100644 --- a/src/pl/plpython/plpy_typeio.h +++ b/src/pl/plpython/plpy_typeio.h @@ -69,7 +69,7 @@ struct PLyDatumToOb PLyArrayToOb array; PLyTupleToOb tuple; PLyTransformToOb transform; - } u; + }; }; /* @@ -143,7 +143,7 @@ struct PLyObToDatum PLyObToTuple tuple; PLyObToDomain domain; PLyObToTransform transform; - } u; + }; }; |