Refactor process_entry_pair to improve clarity in handling NextValueExpr return type

pull/7920/head
Mehmet Yilmaz 2025-03-10 07:24:42 +00:00
parent 153901fc86
commit 30eb4a1cbe
1 changed files with 18 additions and 29 deletions

View File

@ -1699,7 +1699,7 @@ process_entry_pair(TargetEntry *insertEntry, TargetEntry *selectEntry,
Form_pg_attribute attr, int targetEntryIndex, Form_pg_attribute attr, int targetEntryIndex,
List **projectedEntries, List **nonProjectedEntries) List **projectedEntries, List **nonProjectedEntries)
{ {
Oid sourceType = exprType((Node *) selectEntry->expr); Oid effectiveSourceType = exprType((Node *) selectEntry->expr);
Oid targetType = attr->atttypid; Oid targetType = attr->atttypid;
/* /*
@ -1713,29 +1713,18 @@ process_entry_pair(TargetEntry *insertEntry, TargetEntry *selectEntry,
* Since the target column might have a different type (e.g., INT4), we need to * Since the target column might have a different type (e.g., INT4), we need to
* obtain the real return type of nextval() to ensure that any type coercion is applied * obtain the real return type of nextval() to ensure that any type coercion is applied
* correctly. This is done by calling GetNextvalReturnTypeCatalog(), which looks up the * correctly. This is done by calling GetNextvalReturnTypeCatalog(), which looks up the
* function in the catalog and returns its return type. The effectiveCastFromType is then * function in the catalog and returns its return type. The effectiveSourceType is then
* set to this value, ensuring that subsequent comparisons and casts use the correct type. * set to this value, ensuring that subsequent comparisons and casts use the correct type.
*/ */
if (IsA(selectEntry->expr, NextValueExpr)) if (IsA(selectEntry->expr, NextValueExpr))
{ {
Oid nextvalType = GetNextvalReturnTypeCatalog(); effectiveSourceType = GetNextvalReturnTypeCatalog();
if (targetType != nextvalType) }
if (effectiveSourceType != targetType)
{ {
append_casted_entry(insertEntry, selectEntry, append_casted_entry(insertEntry, selectEntry,
nextvalType, targetType, effectiveSourceType, targetType,
attr->attcollation, attr->atttypmod,
targetEntryIndex,
projectedEntries, nonProjectedEntries);
}
else
{
*projectedEntries = lappend(*projectedEntries, selectEntry);
}
}
else if (sourceType != targetType)
{
append_casted_entry(insertEntry, selectEntry,
sourceType, targetType,
attr->attcollation, attr->atttypmod, attr->attcollation, attr->atttypmod,
targetEntryIndex, targetEntryIndex,
projectedEntries, nonProjectedEntries); projectedEntries, nonProjectedEntries);