LCOV - code coverage report
Current view: top level - src/backend/tcop - cmdtag.c (source / functions) Hit Total Coverage
Test: PostgreSQL 13beta1 Lines: 23 26 88.5 %
Date: 2020-06-01 07:06:57 Functions: 5 6 83.3 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*-------------------------------------------------------------------------
       2             :  *
       3             :  * cmdtag.c
       4             :  *    Data and routines for commandtag names and enumeration.
       5             :  *
       6             :  * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
       7             :  * Portions Copyright (c) 1994, Regents of the University of California
       8             :  *
       9             :  * IDENTIFICATION
      10             :  *    src/backend/tcop/cmdtag.c
      11             :  *
      12             :  *-------------------------------------------------------------------------
      13             :  */
      14             : #include "postgres.h"
      15             : 
      16             : #include "miscadmin.h"
      17             : #include "tcop/cmdtag.h"
      18             : 
      19             : 
      20             : typedef struct CommandTagBehavior
      21             : {
      22             :     const char *name;
      23             :     const bool  event_trigger_ok;
      24             :     const bool  table_rewrite_ok;
      25             :     const bool  display_rowcount;
      26             : } CommandTagBehavior;
      27             : 
      28             : #define PG_CMDTAG(tag, name, evtrgok, rwrok, rowcnt) \
      29             :     { name, evtrgok, rwrok, rowcnt },
      30             : 
      31             : const CommandTagBehavior tag_behavior[COMMAND_TAG_NEXTTAG] = {
      32             : #include "tcop/cmdtaglist.h"
      33             : };
      34             : 
      35             : #undef PG_CMDTAG
      36             : 
      37             : void
      38      556254 : InitializeQueryCompletion(QueryCompletion *qc)
      39             : {
      40      556254 :     qc->commandTag = CMDTAG_UNKNOWN;
      41      556254 :     qc->nprocessed = 0;
      42      556254 : }
      43             : 
      44             : const char *
      45      859910 : GetCommandTagName(CommandTag commandTag)
      46             : {
      47      859910 :     return tag_behavior[commandTag].name;
      48             : }
      49             : 
      50             : bool
      51      320072 : command_tag_display_rowcount(CommandTag commandTag)
      52             : {
      53      320072 :     return tag_behavior[commandTag].display_rowcount;
      54             : }
      55             : 
      56             : bool
      57          80 : command_tag_event_trigger_ok(CommandTag commandTag)
      58             : {
      59          80 :     return tag_behavior[commandTag].event_trigger_ok;
      60             : }
      61             : 
      62             : bool
      63           0 : command_tag_table_rewrite_ok(CommandTag commandTag)
      64             : {
      65           0 :     return tag_behavior[commandTag].table_rewrite_ok;
      66             : }
      67             : 
      68             : /*
      69             :  * Search CommandTag by name
      70             :  *
      71             :  * Returns CommandTag, or CMDTAG_UNKNOWN if not recognized
      72             :  */
      73             : CommandTag
      74         208 : GetCommandTagEnum(const char *commandname)
      75             : {
      76             :     const CommandTagBehavior *base,
      77             :                *last,
      78             :                *position;
      79             :     int         result;
      80             : 
      81         208 :     if (commandname == NULL || *commandname == '\0')
      82           0 :         return CMDTAG_UNKNOWN;
      83             : 
      84         208 :     base = tag_behavior;
      85         208 :     last = tag_behavior + lengthof(tag_behavior) - 1;
      86        1536 :     while (last >= base)
      87             :     {
      88        1528 :         position = base + ((last - base) >> 1);
      89        1528 :         result = pg_strcasecmp(commandname, position->name);
      90        1528 :         if (result == 0)
      91         200 :             return (CommandTag) (position - tag_behavior);
      92        1328 :         else if (result < 0)
      93         444 :             last = position - 1;
      94             :         else
      95         884 :             base = position + 1;
      96             :     }
      97           8 :     return CMDTAG_UNKNOWN;
      98             : }

Generated by: LCOV version 1.13