mirror of
https://github.com/postgres/postgres.git
synced 2025-07-27 12:41:57 +03:00
Allow new values to be added to an existing enum type.
After much expenditure of effort, we've got this to the point where the performance penalty is pretty minimal in typical cases. Andrew Dunstan, reviewed by Brendan Jurd, Dean Rasheed, and Tom Lane
This commit is contained in:
@ -16,13 +16,6 @@
|
||||
|
||||
/* THIS IS USED ONLY FOR PG >= 9.0 */
|
||||
|
||||
/*
|
||||
* Cannot include "catalog/pg_enum.h" here because we might
|
||||
* not be compiling against PG 9.0.
|
||||
*/
|
||||
extern void EnumValuesCreate(Oid enumTypeOid, List *vals,
|
||||
Oid binary_upgrade_next_pg_enum_oid);
|
||||
|
||||
#ifdef PG_MODULE_MAGIC
|
||||
PG_MODULE_MAGIC;
|
||||
#endif
|
||||
@ -33,6 +26,7 @@ extern PGDLLIMPORT Oid binary_upgrade_next_pg_type_toast_oid;
|
||||
extern PGDLLIMPORT Oid binary_upgrade_next_heap_relfilenode;
|
||||
extern PGDLLIMPORT Oid binary_upgrade_next_toast_relfilenode;
|
||||
extern PGDLLIMPORT Oid binary_upgrade_next_index_relfilenode;
|
||||
extern PGDLLIMPORT Oid binary_upgrade_next_pg_enum_oid;
|
||||
|
||||
Datum set_next_pg_type_oid(PG_FUNCTION_ARGS);
|
||||
Datum set_next_pg_type_array_oid(PG_FUNCTION_ARGS);
|
||||
@ -40,7 +34,7 @@ Datum set_next_pg_type_toast_oid(PG_FUNCTION_ARGS);
|
||||
Datum set_next_heap_relfilenode(PG_FUNCTION_ARGS);
|
||||
Datum set_next_toast_relfilenode(PG_FUNCTION_ARGS);
|
||||
Datum set_next_index_relfilenode(PG_FUNCTION_ARGS);
|
||||
Datum add_pg_enum_label(PG_FUNCTION_ARGS);
|
||||
Datum set_next_pg_enum_oid(PG_FUNCTION_ARGS);
|
||||
|
||||
PG_FUNCTION_INFO_V1(set_next_pg_type_oid);
|
||||
PG_FUNCTION_INFO_V1(set_next_pg_type_array_oid);
|
||||
@ -48,7 +42,7 @@ PG_FUNCTION_INFO_V1(set_next_pg_type_toast_oid);
|
||||
PG_FUNCTION_INFO_V1(set_next_heap_relfilenode);
|
||||
PG_FUNCTION_INFO_V1(set_next_toast_relfilenode);
|
||||
PG_FUNCTION_INFO_V1(set_next_index_relfilenode);
|
||||
PG_FUNCTION_INFO_V1(add_pg_enum_label);
|
||||
PG_FUNCTION_INFO_V1(set_next_pg_enum_oid);
|
||||
|
||||
Datum
|
||||
set_next_pg_type_oid(PG_FUNCTION_ARGS)
|
||||
@ -111,14 +105,11 @@ set_next_index_relfilenode(PG_FUNCTION_ARGS)
|
||||
}
|
||||
|
||||
Datum
|
||||
add_pg_enum_label(PG_FUNCTION_ARGS)
|
||||
set_next_pg_enum_oid(PG_FUNCTION_ARGS)
|
||||
{
|
||||
Oid enumoid = PG_GETARG_OID(0);
|
||||
Oid typoid = PG_GETARG_OID(1);
|
||||
Name label = PG_GETARG_NAME(2);
|
||||
|
||||
EnumValuesCreate(typoid, list_make1(makeString(NameStr(*label))),
|
||||
enumoid);
|
||||
binary_upgrade_next_pg_enum_oid = enumoid;
|
||||
|
||||
PG_RETURN_VOID();
|
||||
}
|
||||
|
Reference in New Issue
Block a user