mirror of
https://github.com/postgres/postgres.git
synced 2025-10-27 00:12:01 +03:00
Improve plpgsql's ability to cope with rowtypes containing dropped columns,
by supporting conversions in places that used to demand exact rowtype match. Since this issue is certain to come up elsewhere (in fact, already has, in ExecEvalConvertRowtype), factor out the support code into new core functions for tuple conversion. I chose to put these in a new source file since heaptuple.c is already overly long. Heavily revised version of a patch by Pavel Stehule.
This commit is contained in:
44
src/include/access/tupconvert.h
Normal file
44
src/include/access/tupconvert.h
Normal file
@@ -0,0 +1,44 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* tupconvert.h
|
||||
* Tuple conversion support.
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/access/tupconvert.h,v 1.1 2009/08/06 20:44:31 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef TUPCONVERT_H
|
||||
#define TUPCONVERT_H
|
||||
|
||||
#include "access/htup.h"
|
||||
|
||||
|
||||
typedef struct TupleConversionMap
|
||||
{
|
||||
TupleDesc indesc; /* tupdesc for source rowtype */
|
||||
TupleDesc outdesc; /* tupdesc for result rowtype */
|
||||
AttrNumber *attrMap; /* indexes of input fields, or 0 for null */
|
||||
Datum *invalues; /* workspace for deconstructing source */
|
||||
bool *inisnull;
|
||||
Datum *outvalues; /* workspace for constructing result */
|
||||
bool *outisnull;
|
||||
} TupleConversionMap;
|
||||
|
||||
|
||||
extern TupleConversionMap *convert_tuples_by_position(TupleDesc indesc,
|
||||
TupleDesc outdesc,
|
||||
const char *msg);
|
||||
|
||||
extern TupleConversionMap *convert_tuples_by_name(TupleDesc indesc,
|
||||
TupleDesc outdesc,
|
||||
const char *msg);
|
||||
|
||||
extern HeapTuple do_convert_tuple(HeapTuple tuple, TupleConversionMap *map);
|
||||
|
||||
extern void free_conversion_map(TupleConversionMap *map);
|
||||
|
||||
#endif /* TUPCONVERT_H */
|
||||
Reference in New Issue
Block a user