mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-18 18:44:06 +08:00
Save redundant code for pseudotype I/O functions
Use a macro to generate the in and out functions for pseudotypes that reject all input and output, saving many lines of redundant code. Parameterize the error messages to reduce translatable strings.
This commit is contained in:
parent
7f1bcfb93d
commit
a5954de105
@ -83,34 +83,6 @@ cstring_send(PG_FUNCTION_ARGS)
|
||||
PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* any_in - input routine for pseudo-type ANY.
|
||||
*/
|
||||
Datum
|
||||
any_in(PG_FUNCTION_ARGS)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot accept a value of type any")));
|
||||
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */
|
||||
}
|
||||
|
||||
/*
|
||||
* any_out - output routine for pseudo-type ANY.
|
||||
*/
|
||||
Datum
|
||||
any_out(PG_FUNCTION_ARGS)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot display a value of type any")));
|
||||
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* anyarray_in - input routine for pseudo-type ANYARRAY.
|
||||
*/
|
||||
@ -119,7 +91,7 @@ anyarray_in(PG_FUNCTION_ARGS)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot accept a value of type anyarray")));
|
||||
errmsg("cannot accept a value of type %s", "anyarray")));
|
||||
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */
|
||||
}
|
||||
@ -147,7 +119,7 @@ anyarray_recv(PG_FUNCTION_ARGS)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot accept a value of type anyarray")));
|
||||
errmsg("cannot accept a value of type %s", "anyarray")));
|
||||
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */
|
||||
}
|
||||
@ -172,7 +144,7 @@ anyenum_in(PG_FUNCTION_ARGS)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot accept a value of type anyenum")));
|
||||
errmsg("cannot accept a value of type %s", "anyenum")));
|
||||
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */
|
||||
}
|
||||
@ -196,7 +168,7 @@ anyrange_in(PG_FUNCTION_ARGS)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot accept a value of type anyrange")));
|
||||
errmsg("cannot accept a value of type %s", "anyrange")));
|
||||
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */
|
||||
}
|
||||
@ -264,275 +236,6 @@ void_send(PG_FUNCTION_ARGS)
|
||||
PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* trigger_in - input routine for pseudo-type TRIGGER.
|
||||
*/
|
||||
Datum
|
||||
trigger_in(PG_FUNCTION_ARGS)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot accept a value of type trigger")));
|
||||
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */
|
||||
}
|
||||
|
||||
/*
|
||||
* trigger_out - output routine for pseudo-type TRIGGER.
|
||||
*/
|
||||
Datum
|
||||
trigger_out(PG_FUNCTION_ARGS)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot display a value of type trigger")));
|
||||
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* event_trigger_in - input routine for pseudo-type event_trigger.
|
||||
*/
|
||||
Datum
|
||||
event_trigger_in(PG_FUNCTION_ARGS)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot accept a value of type event_trigger")));
|
||||
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */
|
||||
}
|
||||
|
||||
/*
|
||||
* event_trigger_out - output routine for pseudo-type event_trigger.
|
||||
*/
|
||||
Datum
|
||||
event_trigger_out(PG_FUNCTION_ARGS)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot display a value of type event_trigger")));
|
||||
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* language_handler_in - input routine for pseudo-type LANGUAGE_HANDLER.
|
||||
*/
|
||||
Datum
|
||||
language_handler_in(PG_FUNCTION_ARGS)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot accept a value of type language_handler")));
|
||||
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */
|
||||
}
|
||||
|
||||
/*
|
||||
* language_handler_out - output routine for pseudo-type LANGUAGE_HANDLER.
|
||||
*/
|
||||
Datum
|
||||
language_handler_out(PG_FUNCTION_ARGS)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot display a value of type language_handler")));
|
||||
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* fdw_handler_in - input routine for pseudo-type FDW_HANDLER.
|
||||
*/
|
||||
Datum
|
||||
fdw_handler_in(PG_FUNCTION_ARGS)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot accept a value of type fdw_handler")));
|
||||
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */
|
||||
}
|
||||
|
||||
/*
|
||||
* fdw_handler_out - output routine for pseudo-type FDW_HANDLER.
|
||||
*/
|
||||
Datum
|
||||
fdw_handler_out(PG_FUNCTION_ARGS)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot display a value of type fdw_handler")));
|
||||
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* index_am_handler_in - input routine for pseudo-type INDEX_AM_HANDLER.
|
||||
*/
|
||||
Datum
|
||||
index_am_handler_in(PG_FUNCTION_ARGS)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot accept a value of type index_am_handler")));
|
||||
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */
|
||||
}
|
||||
|
||||
/*
|
||||
* index_am_handler_out - output routine for pseudo-type INDEX_AM_HANDLER.
|
||||
*/
|
||||
Datum
|
||||
index_am_handler_out(PG_FUNCTION_ARGS)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot display a value of type index_am_handler")));
|
||||
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* tsm_handler_in - input routine for pseudo-type TSM_HANDLER.
|
||||
*/
|
||||
Datum
|
||||
tsm_handler_in(PG_FUNCTION_ARGS)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot accept a value of type tsm_handler")));
|
||||
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */
|
||||
}
|
||||
|
||||
/*
|
||||
* tsm_handler_out - output routine for pseudo-type TSM_HANDLER.
|
||||
*/
|
||||
Datum
|
||||
tsm_handler_out(PG_FUNCTION_ARGS)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot display a value of type tsm_handler")));
|
||||
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* internal_in - input routine for pseudo-type INTERNAL.
|
||||
*/
|
||||
Datum
|
||||
internal_in(PG_FUNCTION_ARGS)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot accept a value of type internal")));
|
||||
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */
|
||||
}
|
||||
|
||||
/*
|
||||
* internal_out - output routine for pseudo-type INTERNAL.
|
||||
*/
|
||||
Datum
|
||||
internal_out(PG_FUNCTION_ARGS)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot display a value of type internal")));
|
||||
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* opaque_in - input routine for pseudo-type OPAQUE.
|
||||
*/
|
||||
Datum
|
||||
opaque_in(PG_FUNCTION_ARGS)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot accept a value of type opaque")));
|
||||
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */
|
||||
}
|
||||
|
||||
/*
|
||||
* opaque_out - output routine for pseudo-type OPAQUE.
|
||||
*/
|
||||
Datum
|
||||
opaque_out(PG_FUNCTION_ARGS)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot display a value of type opaque")));
|
||||
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* anyelement_in - input routine for pseudo-type ANYELEMENT.
|
||||
*/
|
||||
Datum
|
||||
anyelement_in(PG_FUNCTION_ARGS)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot accept a value of type anyelement")));
|
||||
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */
|
||||
}
|
||||
|
||||
/*
|
||||
* anyelement_out - output routine for pseudo-type ANYELEMENT.
|
||||
*/
|
||||
Datum
|
||||
anyelement_out(PG_FUNCTION_ARGS)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot display a value of type anyelement")));
|
||||
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */
|
||||
}
|
||||
|
||||
/*
|
||||
* anynonarray_in - input routine for pseudo-type ANYNONARRAY.
|
||||
*/
|
||||
Datum
|
||||
anynonarray_in(PG_FUNCTION_ARGS)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot accept a value of type anynonarray")));
|
||||
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */
|
||||
}
|
||||
|
||||
/*
|
||||
* anynonarray_out - output routine for pseudo-type ANYNONARRAY.
|
||||
*/
|
||||
Datum
|
||||
anynonarray_out(PG_FUNCTION_ARGS)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot display a value of type anynonarray")));
|
||||
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */
|
||||
}
|
||||
|
||||
/*
|
||||
* shell_in - input routine for "shell" types (those not yet filled in).
|
||||
*/
|
||||
@ -674,3 +377,44 @@ pg_ddl_command_send(PG_FUNCTION_ARGS)
|
||||
|
||||
PG_RETURN_VOID();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Generate input and output functions for a pseudotype that will reject all
|
||||
* input and output attempts.
|
||||
*/
|
||||
#define PSEUDOTYPE_DUMMY_IO_FUNCS(typname) \
|
||||
\
|
||||
Datum \
|
||||
typname##_in(PG_FUNCTION_ARGS) \
|
||||
{ \
|
||||
ereport(ERROR, \
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED), \
|
||||
errmsg("cannot accept a value of type %s", #typname))); \
|
||||
\
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */ \
|
||||
} \
|
||||
\
|
||||
Datum \
|
||||
typname##_out(PG_FUNCTION_ARGS) \
|
||||
{ \
|
||||
ereport(ERROR, \
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED), \
|
||||
errmsg("cannot display a value of type %s", #typname))); \
|
||||
\
|
||||
PG_RETURN_VOID(); /* keep compiler quiet */ \
|
||||
} \
|
||||
\
|
||||
extern int no_such_variable
|
||||
|
||||
PSEUDOTYPE_DUMMY_IO_FUNCS(any);
|
||||
PSEUDOTYPE_DUMMY_IO_FUNCS(trigger);
|
||||
PSEUDOTYPE_DUMMY_IO_FUNCS(event_trigger);
|
||||
PSEUDOTYPE_DUMMY_IO_FUNCS(language_handler);
|
||||
PSEUDOTYPE_DUMMY_IO_FUNCS(fdw_handler);
|
||||
PSEUDOTYPE_DUMMY_IO_FUNCS(index_am_handler);
|
||||
PSEUDOTYPE_DUMMY_IO_FUNCS(tsm_handler);
|
||||
PSEUDOTYPE_DUMMY_IO_FUNCS(internal);
|
||||
PSEUDOTYPE_DUMMY_IO_FUNCS(opaque);
|
||||
PSEUDOTYPE_DUMMY_IO_FUNCS(anyelement);
|
||||
PSEUDOTYPE_DUMMY_IO_FUNCS(anynonarray);
|
||||
|
Loading…
Reference in New Issue
Block a user