1 /*-------------------------------------------------------------------------
4 * Data and routines for commandtag names and enumeration.
6 * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7 * Portions Copyright (c) 1994, Regents of the University of California
10 * src/backend/tcop/cmdtag.c
12 *-------------------------------------------------------------------------
16 #include "miscadmin.h"
17 #include "tcop/cmdtag.h"
20 typedef struct CommandTagBehavior
23 const bool event_trigger_ok
;
24 const bool table_rewrite_ok
;
25 const bool display_rowcount
;
28 #define PG_CMDTAG(tag, name, evtrgok, rwrok, rowcnt) \
29 { name, evtrgok, rwrok, rowcnt },
31 const CommandTagBehavior tag_behavior
[COMMAND_TAG_NEXTTAG
] = {
32 #include "tcop/cmdtaglist.h"
38 InitializeQueryCompletion(QueryCompletion
*qc
)
40 qc
->commandTag
= CMDTAG_UNKNOWN
;
45 GetCommandTagName(CommandTag commandTag
)
47 return tag_behavior
[commandTag
].name
;
51 command_tag_display_rowcount(CommandTag commandTag
)
53 return tag_behavior
[commandTag
].display_rowcount
;
57 command_tag_event_trigger_ok(CommandTag commandTag
)
59 return tag_behavior
[commandTag
].event_trigger_ok
;
63 command_tag_table_rewrite_ok(CommandTag commandTag
)
65 return tag_behavior
[commandTag
].table_rewrite_ok
;
69 * Search CommandTag by name
71 * Returns CommandTag, or CMDTAG_UNKNOWN if not recognized
74 GetCommandTagEnum(const char *commandname
)
76 const CommandTagBehavior
*base
,
81 if (commandname
== NULL
|| *commandname
== '\0')
82 return CMDTAG_UNKNOWN
;
85 last
= tag_behavior
+ lengthof(tag_behavior
) - 1;
88 position
= base
+ ((last
- base
) >> 1);
89 result
= pg_strcasecmp(commandname
, position
->name
);
91 return (CommandTag
) (position
- tag_behavior
);
97 return CMDTAG_UNKNOWN
;