Update copyright for 2022
[pgsql.git] / src / backend / tcop / cmdtag.c
bloba83bab14f4c9810efe2f37b872296382a5bddaf6
1 /*-------------------------------------------------------------------------
3 * cmdtag.c
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
9 * IDENTIFICATION
10 * src/backend/tcop/cmdtag.c
12 *-------------------------------------------------------------------------
14 #include "postgres.h"
16 #include "miscadmin.h"
17 #include "tcop/cmdtag.h"
20 typedef struct CommandTagBehavior
22 const char *name;
23 const bool event_trigger_ok;
24 const bool table_rewrite_ok;
25 const bool display_rowcount;
26 } CommandTagBehavior;
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"
35 #undef PG_CMDTAG
37 void
38 InitializeQueryCompletion(QueryCompletion *qc)
40 qc->commandTag = CMDTAG_UNKNOWN;
41 qc->nprocessed = 0;
44 const char *
45 GetCommandTagName(CommandTag commandTag)
47 return tag_behavior[commandTag].name;
50 bool
51 command_tag_display_rowcount(CommandTag commandTag)
53 return tag_behavior[commandTag].display_rowcount;
56 bool
57 command_tag_event_trigger_ok(CommandTag commandTag)
59 return tag_behavior[commandTag].event_trigger_ok;
62 bool
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
73 CommandTag
74 GetCommandTagEnum(const char *commandname)
76 const CommandTagBehavior *base,
77 *last,
78 *position;
79 int result;
81 if (commandname == NULL || *commandname == '\0')
82 return CMDTAG_UNKNOWN;
84 base = tag_behavior;
85 last = tag_behavior + lengthof(tag_behavior) - 1;
86 while (last >= base)
88 position = base + ((last - base) >> 1);
89 result = pg_strcasecmp(commandname, position->name);
90 if (result == 0)
91 return (CommandTag) (position - tag_behavior);
92 else if (result < 0)
93 last = position - 1;
94 else
95 base = position + 1;
97 return CMDTAG_UNKNOWN;