mirror of https://github.com/postgres/postgres
Remove all traces of tuplestore_donestoring() in the C code
This routine is a no-op since dd04e95
from 2003, with a macro kept
around for compatibility purposes. This has led to the same code
patterns being copy-pasted around for no effect, sometimes in confusing
ways like in pg_logical_slot_get_changes_guts() from logical.c where the
code was actually incorrect.
This issue has been discussed on two different threads recently, so
rather than living with this legacy, remove any uses of this routine in
the C code to simplify things. The compatibility macro is kept to avoid
breaking any out-of-core modules that depend on it.
Reported-by: Tatsuhito Kasahara, Justin Pryzby
Author: Tatsuhito Kasahara
Discussion: https://postgr.es/m/20211217200419.GQ17618@telsasoft.com
Discussion: https://postgr.es/m/CAP0=ZVJeeYfAeRfmzqAF2Lumdiv4S4FewyBnZd4DPTrsSQKJKw@mail.gmail.com
This commit is contained in:
parent
4620892344
commit
d61a361d1a
|
@ -1005,8 +1005,6 @@ materializeResult(FunctionCallInfo fcinfo, PGconn *conn, PGresult *res)
|
|||
/* clean up GUC settings, if we changed any */
|
||||
restoreLocalGucs(nestlevel);
|
||||
|
||||
/* clean up and return the tuplestore */
|
||||
tuplestore_donestoring(tupstore);
|
||||
}
|
||||
}
|
||||
PG_FINALLY();
|
||||
|
@ -1988,9 +1986,6 @@ dblink_get_notify(PG_FUNCTION_ARGS)
|
|||
PQconsumeInput(conn);
|
||||
}
|
||||
|
||||
/* clean up and return the tuplestore */
|
||||
tuplestore_donestoring(tupstore);
|
||||
|
||||
return (Datum) 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -325,9 +325,7 @@ brin_page_items(PG_FUNCTION_ARGS)
|
|||
break;
|
||||
}
|
||||
|
||||
/* clean up and return the tuplestore */
|
||||
brin_free_desc(bdesc);
|
||||
tuplestore_donestoring(tupstore);
|
||||
index_close(indexRel, AccessShareLock);
|
||||
|
||||
return (Datum) 0;
|
||||
|
|
|
@ -1803,13 +1803,11 @@ pg_stat_statements_internal(FunctionCallInfo fcinfo,
|
|||
tuplestore_putvalues(tupstore, tupdesc, values, nulls);
|
||||
}
|
||||
|
||||
/* clean up and return the tuplestore */
|
||||
LWLockRelease(pgss->lock);
|
||||
|
||||
if (qbuffer)
|
||||
free(qbuffer);
|
||||
|
||||
tuplestore_donestoring(tupstore);
|
||||
}
|
||||
|
||||
/* Number of output arguments (columns) for pg_stat_statements_info */
|
||||
|
|
|
@ -1508,12 +1508,7 @@ postgres_fdw_get_connections(PG_FUNCTION_ARGS)
|
|||
|
||||
/* If cache doesn't exist, we return no records */
|
||||
if (!ConnectionHash)
|
||||
{
|
||||
/* clean up and return the tuplestore */
|
||||
tuplestore_donestoring(tupstore);
|
||||
|
||||
PG_RETURN_VOID();
|
||||
}
|
||||
|
||||
hash_seq_init(&scan, ConnectionHash);
|
||||
while ((entry = (ConnCacheEntry *) hash_seq_search(&scan)))
|
||||
|
@ -1578,8 +1573,6 @@ postgres_fdw_get_connections(PG_FUNCTION_ARGS)
|
|||
tuplestore_putvalues(tupstore, tupdesc, values, nulls);
|
||||
}
|
||||
|
||||
/* clean up and return the tuplestore */
|
||||
tuplestore_donestoring(tupstore);
|
||||
|
||||
PG_RETURN_VOID();
|
||||
}
|
||||
|
|
|
@ -943,8 +943,6 @@ get_crosstab_tuplestore(char *sql,
|
|||
/* internal error */
|
||||
elog(ERROR, "get_crosstab_tuplestore: SPI_finish() failed");
|
||||
|
||||
tuplestore_donestoring(tupstore);
|
||||
|
||||
return tupstore;
|
||||
}
|
||||
|
||||
|
|
|
@ -783,8 +783,6 @@ xpath_table(PG_FUNCTION_ARGS)
|
|||
|
||||
pg_xml_done(xmlerrcxt, false);
|
||||
|
||||
tuplestore_donestoring(tupstore);
|
||||
|
||||
SPI_finish();
|
||||
|
||||
rsinfo->setResult = tupstore;
|
||||
|
|
|
@ -252,7 +252,6 @@ pg_stop_backup_v2(PG_FUNCTION_ARGS)
|
|||
values[0] = LSNGetDatum(stoppoint);
|
||||
|
||||
tuplestore_putvalues(tupstore, tupdesc, values, nulls);
|
||||
tuplestore_donestoring(tupstore);
|
||||
|
||||
return (Datum) 0;
|
||||
}
|
||||
|
|
|
@ -1401,9 +1401,6 @@ pg_event_trigger_dropped_objects(PG_FUNCTION_ARGS)
|
|||
tuplestore_putvalues(tupstore, tupdesc, values, nulls);
|
||||
}
|
||||
|
||||
/* clean up and return the tuplestore */
|
||||
tuplestore_donestoring(tupstore);
|
||||
|
||||
return (Datum) 0;
|
||||
}
|
||||
|
||||
|
@ -2061,9 +2058,6 @@ pg_event_trigger_ddl_commands(PG_FUNCTION_ARGS)
|
|||
tuplestore_putvalues(tupstore, tupdesc, values, nulls);
|
||||
}
|
||||
|
||||
/* clean up and return the tuplestore */
|
||||
tuplestore_donestoring(tupstore);
|
||||
|
||||
PG_RETURN_VOID();
|
||||
}
|
||||
|
||||
|
|
|
@ -2021,9 +2021,6 @@ pg_available_extensions(PG_FUNCTION_ARGS)
|
|||
FreeDir(dir);
|
||||
}
|
||||
|
||||
/* clean up and return the tuplestore */
|
||||
tuplestore_donestoring(tupstore);
|
||||
|
||||
return (Datum) 0;
|
||||
}
|
||||
|
||||
|
@ -2112,9 +2109,6 @@ pg_available_extension_versions(PG_FUNCTION_ARGS)
|
|||
FreeDir(dir);
|
||||
}
|
||||
|
||||
/* clean up and return the tuplestore */
|
||||
tuplestore_donestoring(tupstore);
|
||||
|
||||
return (Datum) 0;
|
||||
}
|
||||
|
||||
|
@ -2417,9 +2411,6 @@ pg_extension_update_paths(PG_FUNCTION_ARGS)
|
|||
}
|
||||
}
|
||||
|
||||
/* clean up and return the tuplestore */
|
||||
tuplestore_donestoring(tupstore);
|
||||
|
||||
return (Datum) 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -778,9 +778,6 @@ pg_prepared_statement(PG_FUNCTION_ARGS)
|
|||
}
|
||||
}
|
||||
|
||||
/* clean up and return the tuplestore */
|
||||
tuplestore_donestoring(tupstore);
|
||||
|
||||
rsinfo->returnMode = SFRM_Materialize;
|
||||
rsinfo->setResult = tupstore;
|
||||
rsinfo->setDesc = tupdesc;
|
||||
|
|
|
@ -555,9 +555,6 @@ deflist_to_tuplestore(ReturnSetInfo *rsinfo, List *options)
|
|||
tuplestore_putvalues(tupstore, tupdesc, values, nulls);
|
||||
}
|
||||
|
||||
/* clean up and return the tuplestore */
|
||||
tuplestore_donestoring(tupstore);
|
||||
|
||||
MemoryContextSwitchTo(oldcontext);
|
||||
}
|
||||
|
||||
|
|
|
@ -1022,8 +1022,5 @@ pg_stat_get_subscription(PG_FUNCTION_ARGS)
|
|||
|
||||
LWLockRelease(LogicalRepWorkerLock);
|
||||
|
||||
/* clean up and return the tuplestore */
|
||||
tuplestore_donestoring(tupstore);
|
||||
|
||||
return (Datum) 0;
|
||||
}
|
||||
|
|
|
@ -296,8 +296,6 @@ pg_logical_slot_get_changes_guts(FunctionCallInfo fcinfo, bool confirm, bool bin
|
|||
CHECK_FOR_INTERRUPTS();
|
||||
}
|
||||
|
||||
tuplestore_donestoring(tupstore);
|
||||
|
||||
/*
|
||||
* Logical decoding could have clobbered CurrentResourceOwner during
|
||||
* transaction management, so restore the executor's value. (This is
|
||||
|
|
|
@ -1568,8 +1568,6 @@ pg_show_replication_origin_status(PG_FUNCTION_ARGS)
|
|||
tuplestore_putvalues(tupstore, tupdesc, values, nulls);
|
||||
}
|
||||
|
||||
tuplestore_donestoring(tupstore);
|
||||
|
||||
LWLockRelease(ReplicationOriginLock);
|
||||
|
||||
#undef REPLICATION_ORIGIN_PROGRESS_COLS
|
||||
|
|
|
@ -436,8 +436,6 @@ pg_get_replication_slots(PG_FUNCTION_ARGS)
|
|||
|
||||
LWLockRelease(ReplicationSlotControlLock);
|
||||
|
||||
tuplestore_donestoring(tupstore);
|
||||
|
||||
return (Datum) 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -3580,9 +3580,6 @@ pg_stat_get_wal_senders(PG_FUNCTION_ARGS)
|
|||
tuplestore_putvalues(tupstore, tupdesc, values, nulls);
|
||||
}
|
||||
|
||||
/* clean up and return the tuplestore */
|
||||
tuplestore_donestoring(tupstore);
|
||||
|
||||
return (Datum) 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -605,7 +605,5 @@ pg_get_shmem_allocations(PG_FUNCTION_ARGS)
|
|||
|
||||
LWLockRelease(ShmemIndexLock);
|
||||
|
||||
tuplestore_donestoring(tupstore);
|
||||
|
||||
return (Datum) 0;
|
||||
}
|
||||
|
|
|
@ -152,9 +152,6 @@ pg_get_backend_memory_contexts(PG_FUNCTION_ARGS)
|
|||
PutMemoryContextsStatsTupleStore(tupstore, tupdesc,
|
||||
TopMemoryContext, NULL, 0);
|
||||
|
||||
/* clean up and return the tuplestore */
|
||||
tuplestore_donestoring(tupstore);
|
||||
|
||||
return (Datum) 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -555,9 +555,6 @@ pg_stat_get_progress_info(PG_FUNCTION_ARGS)
|
|||
tuplestore_putvalues(tupstore, tupdesc, values, nulls);
|
||||
}
|
||||
|
||||
/* clean up and return the tuplestore */
|
||||
tuplestore_donestoring(tupstore);
|
||||
|
||||
return (Datum) 0;
|
||||
}
|
||||
|
||||
|
@ -953,9 +950,6 @@ pg_stat_get_activity(PG_FUNCTION_ARGS)
|
|||
break;
|
||||
}
|
||||
|
||||
/* clean up and return the tuplestore */
|
||||
tuplestore_donestoring(tupstore);
|
||||
|
||||
return (Datum) 0;
|
||||
}
|
||||
|
||||
|
@ -1936,9 +1930,6 @@ pg_stat_get_slru(PG_FUNCTION_ARGS)
|
|||
tuplestore_putvalues(tupstore, tupdesc, values, nulls);
|
||||
}
|
||||
|
||||
/* clean up and return the tuplestore */
|
||||
tuplestore_donestoring(tupstore);
|
||||
|
||||
return (Datum) 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -4855,8 +4855,6 @@ text_to_table(PG_FUNCTION_ARGS)
|
|||
|
||||
(void) split_text(fcinfo, &tstate);
|
||||
|
||||
tuplestore_donestoring(tstate.tupstore);
|
||||
|
||||
rsi->returnMode = SFRM_Materialize;
|
||||
rsi->setResult = tstate.tupstore;
|
||||
rsi->setDesc = tstate.tupdesc;
|
||||
|
|
|
@ -10206,8 +10206,6 @@ show_all_file_settings(PG_FUNCTION_ARGS)
|
|||
tuplestore_putvalues(tupstore, tupdesc, values, nulls);
|
||||
}
|
||||
|
||||
tuplestore_donestoring(tupstore);
|
||||
|
||||
return (Datum) 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -85,7 +85,6 @@ pg_config(PG_FUNCTION_ARGS)
|
|||
*/
|
||||
ReleaseTupleDesc(tupdesc);
|
||||
|
||||
tuplestore_donestoring(tupstore);
|
||||
rsinfo->setResult = tupstore;
|
||||
|
||||
/*
|
||||
|
|
|
@ -1204,9 +1204,6 @@ pg_cursor(PG_FUNCTION_ARGS)
|
|||
tuplestore_putvalues(tupstore, tupdesc, values, nulls);
|
||||
}
|
||||
|
||||
/* clean up and return the tuplestore */
|
||||
tuplestore_donestoring(tupstore);
|
||||
|
||||
rsinfo->returnMode = SFRM_Materialize;
|
||||
rsinfo->setResult = tupstore;
|
||||
rsinfo->setDesc = tupdesc;
|
||||
|
|
|
@ -56,7 +56,7 @@ extern void tuplestore_puttuple(Tuplestorestate *state, HeapTuple tuple);
|
|||
extern void tuplestore_putvalues(Tuplestorestate *state, TupleDesc tdesc,
|
||||
Datum *values, bool *isnull);
|
||||
|
||||
/* tuplestore_donestoring() used to be required, but is no longer used */
|
||||
/* Backwards compatibility macro */
|
||||
#define tuplestore_donestoring(state) ((void) 0)
|
||||
|
||||
extern int tuplestore_alloc_read_pointer(Tuplestorestate *state, int eflags);
|
||||
|
|
Loading…
Reference in New Issue