LCOV - differential code coverage report
Current view: top level - src/test/modules/test_ddl_deparse - test_ddl_deparse.c (source / functions) Coverage Total Hit UNC LBC UIC UBC GBC GIC GNC CBC DUB
Current: Differential Code Coverage 16@8cea358b128 vs 17@8cea358b128 Lines: 55.6 % 268 149 9 110 3 3 143 3
Current Date: 2024-04-14 14:21:10 Functions: 100.0 % 7 7 1 6
Baseline: 16@8cea358b128 Branches: 52.0 % 98 51 12 1 34 12 2 37
Baseline Date: 2024-04-14 14:21:09 Line coverage date bins:
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed [..60] days: 0.0 % 6 0 6
(60,120] days: 0.0 % 3 0 3
(180,240] days: 100.0 % 3 3 3
(240..) days: 57.0 % 256 146 110 3 143
Function coverage date bins:
(240..) days: 100.0 % 7 7 1 6
Branch coverage date bins:
(240..) days: 52.0 % 98 51 12 1 34 12 2 37

 Age         Owner                    Branch data    TLA  Line data    Source code
                                  1                 :                : /*----------------------------------------------------------------------
                                  2                 :                :  * test_ddl_deparse.c
                                  3                 :                :  *      Support functions for the test_ddl_deparse module
                                  4                 :                :  *
                                  5                 :                :  * Copyright (c) 2014-2024, PostgreSQL Global Development Group
                                  6                 :                :  *
                                  7                 :                :  * IDENTIFICATION
                                  8                 :                :  *    src/test/modules/test_ddl_deparse/test_ddl_deparse.c
                                  9                 :                :  *----------------------------------------------------------------------
                                 10                 :                :  */
                                 11                 :                : #include "postgres.h"
                                 12                 :                : 
                                 13                 :                : #include "catalog/pg_type.h"
                                 14                 :                : #include "funcapi.h"
                                 15                 :                : #include "nodes/execnodes.h"
                                 16                 :                : #include "tcop/deparse_utility.h"
                                 17                 :                : #include "tcop/utility.h"
                                 18                 :                : #include "utils/builtins.h"
                                 19                 :                : 
 3261 alvherre@alvh.no-ip.       20                 :CBC          21 : PG_MODULE_MAGIC;
                                 21                 :                : 
                                 22                 :             21 : PG_FUNCTION_INFO_V1(get_command_type);
                                 23                 :             21 : PG_FUNCTION_INFO_V1(get_command_tag);
  623 michael@paquier.xyz        24                 :              4 : PG_FUNCTION_INFO_V1(get_altertable_subcmdinfo);
                                 25                 :                : 
                                 26                 :                : /*
                                 27                 :                :  * Return the textual representation of the struct type used to represent a
                                 28                 :                :  * command in struct CollectedCommand format.
                                 29                 :                :  */
                                 30                 :                : Datum
 3261 alvherre@alvh.no-ip.       31                 :            191 : get_command_type(PG_FUNCTION_ARGS)
                                 32                 :                : {
                                 33                 :            191 :     CollectedCommand *cmd = (CollectedCommand *) PG_GETARG_POINTER(0);
                                 34                 :                :     const char *type;
                                 35                 :                : 
                                 36   [ +  +  +  +  :            191 :     switch (cmd->type)
                                        +  +  +  - ]
                                 37                 :                :     {
                                 38                 :            136 :         case SCT_Simple:
                                 39                 :            136 :             type = "simple";
                                 40                 :            136 :             break;
                                 41                 :             40 :         case SCT_AlterTable:
                                 42                 :             40 :             type = "alter table";
                                 43                 :             40 :             break;
                                 44                 :             11 :         case SCT_Grant:
                                 45                 :             11 :             type = "grant";
                                 46                 :             11 :             break;
                                 47                 :              1 :         case SCT_AlterOpFamily:
                                 48                 :              1 :             type = "alter operator family";
                                 49                 :              1 :             break;
                                 50                 :              1 :         case SCT_AlterDefaultPrivileges:
                                 51                 :              1 :             type = "alter default privileges";
                                 52                 :              1 :             break;
                                 53                 :              1 :         case SCT_CreateOpClass:
                                 54                 :              1 :             type = "create operator class";
                                 55                 :              1 :             break;
                                 56                 :              1 :         case SCT_AlterTSConfig:
                                 57                 :              1 :             type = "alter text search configuration";
                                 58                 :              1 :             break;
 3261 alvherre@alvh.no-ip.       59                 :UBC           0 :         default:
                                 60                 :              0 :             type = "unknown command type";
                                 61                 :              0 :             break;
                                 62                 :                :     }
                                 63                 :                : 
 3261 alvherre@alvh.no-ip.       64                 :CBC         191 :     PG_RETURN_TEXT_P(cstring_to_text(type));
                                 65                 :                : }
                                 66                 :                : 
                                 67                 :                : /*
                                 68                 :                :  * Return the command tag corresponding to a parse node contained in a
                                 69                 :                :  * CollectedCommand struct.
                                 70                 :                :  */
                                 71                 :                : Datum
                                 72                 :            191 : get_command_tag(PG_FUNCTION_ARGS)
                                 73                 :                : {
                                 74                 :            191 :     CollectedCommand *cmd = (CollectedCommand *) PG_GETARG_POINTER(0);
                                 75                 :                : 
                                 76         [ +  + ]:            191 :     if (!cmd->parsetree)
                                 77                 :             11 :         PG_RETURN_NULL();
                                 78                 :                : 
 1504                            79                 :            180 :     PG_RETURN_TEXT_P(cstring_to_text(CreateCommandName(cmd->parsetree)));
                                 80                 :                : }
                                 81                 :                : 
                                 82                 :                : /*
                                 83                 :                :  * Return a text array representation of the subcommands of an ALTER TABLE
                                 84                 :                :  * command.
                                 85                 :                :  */
                                 86                 :                : Datum
  623 michael@paquier.xyz        87                 :             40 : get_altertable_subcmdinfo(PG_FUNCTION_ARGS)
                                 88                 :                : {
 3261 alvherre@alvh.no-ip.       89                 :             40 :     CollectedCommand *cmd = (CollectedCommand *) PG_GETARG_POINTER(0);
                                 90                 :                :     ListCell   *cell;
  623 michael@paquier.xyz        91                 :             40 :     ReturnSetInfo *rsinfo = (ReturnSetInfo *) fcinfo->resultinfo;
                                 92                 :                : 
 3261 alvherre@alvh.no-ip.       93         [ -  + ]:             40 :     if (cmd->type != SCT_AlterTable)
 3261 alvherre@alvh.no-ip.       94         [ #  # ]:UBC           0 :         elog(ERROR, "command is not ALTER TABLE");
                                 95                 :                : 
  544 michael@paquier.xyz        96                 :CBC          40 :     InitMaterializedSRF(fcinfo, 0);
                                 97                 :                : 
  606 tgl@sss.pgh.pa.us          98         [ -  + ]:             40 :     if (cmd->d.alterTable.subcmds == NIL)
  623 michael@paquier.xyz        99         [ #  # ]:UBC           0 :         elog(ERROR, "empty alter table subcommand list");
                                100                 :                : 
 3261 alvherre@alvh.no-ip.      101   [ +  -  +  +  :CBC         103 :     foreach(cell, cmd->d.alterTable.subcmds)
                                              +  + ]
                                102                 :                :     {
                                103                 :             63 :         CollectedATSubcmd *sub = lfirst(cell);
 2609 peter_e@gmx.net           104                 :             63 :         AlterTableCmd *subcmd = castNode(AlterTableCmd, sub->parsetree);
  623 michael@paquier.xyz       105                 :             63 :         const char *strtype = "unrecognized";
                                106                 :                :         Datum       values[2];
                                107                 :                :         bool        nulls[2];
                                108                 :                : 
                                109                 :             63 :         memset(values, 0, sizeof(values));
                                110                 :             63 :         memset(nulls, 0, sizeof(nulls));
                                111                 :                : 
 3261 alvherre@alvh.no-ip.      112   [ +  -  +  +  :             63 :         switch (subcmd->subtype)
                                     +  +  +  -  +  
                                     +  -  -  +  +  
                                     -  +  -  +  +  
                                     +  -  -  -  -  
                                     -  +  -  -  +  
                                     -  +  +  -  -  
                                     -  +  +  +  -  
                                     -  -  -  -  -  
                                     -  -  -  -  -  
                                     -  -  -  -  -  
                                     -  +  +  +  +  
                                     -  +  +  -  -  
                                     -  +  +  +  +  
                                                 - ]
                                113                 :                :         {
                                114                 :              1 :             case AT_AddColumn:
                                115                 :              1 :                 strtype = "ADD COLUMN";
                                116                 :              1 :                 break;
 3261 alvherre@alvh.no-ip.      117                 :UBC           0 :             case AT_AddColumnToView:
                                118                 :              0 :                 strtype = "ADD COLUMN TO VIEW";
                                119                 :              0 :                 break;
 3261 alvherre@alvh.no-ip.      120                 :CBC           3 :             case AT_ColumnDefault:
                                121                 :              3 :                 strtype = "ALTER COLUMN SET DEFAULT";
                                122                 :              3 :                 break;
 1332 tgl@sss.pgh.pa.us         123                 :              1 :             case AT_CookedColumnDefault:
                                124                 :              1 :                 strtype = "ALTER COLUMN SET DEFAULT (precooked)";
                                125                 :              1 :                 break;
 3261 alvherre@alvh.no-ip.      126                 :              1 :             case AT_DropNotNull:
                                127                 :              1 :                 strtype = "DROP NOT NULL";
                                128                 :              1 :                 break;
                                129                 :              2 :             case AT_SetNotNull:
                                130                 :              2 :                 strtype = "SET NOT NULL";
                                131                 :              2 :                 break;
  233 alvherre@alvh.no-ip.      132                 :GNC          11 :             case AT_SetAttNotNull:
                                133                 :             11 :                 strtype = "SET ATTNOTNULL";
                                134                 :             11 :                 break;
  101 peter@eisentraut.org      135                 :UNC           0 :             case AT_SetExpression:
                                136                 :              0 :                 strtype = "SET EXPRESSION";
                                137                 :              0 :                 break;
  623 michael@paquier.xyz       138                 :CBC           1 :             case AT_DropExpression:
                                139                 :              1 :                 strtype = "DROP EXPRESSION";
                                140                 :              1 :                 break;
 3261 alvherre@alvh.no-ip.      141                 :              3 :             case AT_SetStatistics:
                                142                 :              3 :                 strtype = "SET STATS";
                                143                 :              3 :                 break;
 3261 alvherre@alvh.no-ip.      144                 :UBC           0 :             case AT_SetOptions:
                                145                 :              0 :                 strtype = "SET OPTIONS";
                                146                 :              0 :                 break;
                                147                 :              0 :             case AT_ResetOptions:
                                148                 :              0 :                 strtype = "RESET OPTIONS";
                                149                 :              0 :                 break;
 3261 alvherre@alvh.no-ip.      150                 :CBC           3 :             case AT_SetStorage:
                                151                 :              3 :                 strtype = "SET STORAGE";
                                152                 :              3 :                 break;
  623 michael@paquier.xyz       153                 :              1 :             case AT_SetCompression:
                                154                 :              1 :                 strtype = "SET COMPRESSION";
                                155                 :              1 :                 break;
 3261 alvherre@alvh.no-ip.      156                 :UBC           0 :             case AT_DropColumn:
                                157                 :              0 :                 strtype = "DROP COLUMN";
                                158                 :              0 :                 break;
 3261 alvherre@alvh.no-ip.      159                 :CBC           1 :             case AT_AddIndex:
                                160                 :              1 :                 strtype = "ADD INDEX";
                                161                 :              1 :                 break;
 3261 alvherre@alvh.no-ip.      162                 :UBC           0 :             case AT_ReAddIndex:
                                163                 :              0 :                 strtype = "(re) ADD INDEX";
                                164                 :              0 :                 break;
 3261 alvherre@alvh.no-ip.      165                 :CBC          13 :             case AT_AddConstraint:
                                166                 :             13 :                 strtype = "ADD CONSTRAINT";
                                167                 :             13 :                 break;
 3261 alvherre@alvh.no-ip.      168                 :GBC           1 :             case AT_ReAddConstraint:
                                169                 :              1 :                 strtype = "(re) ADD CONSTRAINT";
                                170                 :              1 :                 break;
  623 michael@paquier.xyz       171                 :CBC           1 :             case AT_ReAddDomainConstraint:
                                172                 :              1 :                 strtype = "(re) ADD DOMAIN CONSTRAINT";
                                173                 :              1 :                 break;
 3261 alvherre@alvh.no-ip.      174                 :UBC           0 :             case AT_AlterConstraint:
                                175                 :              0 :                 strtype = "ALTER CONSTRAINT";
                                176                 :              0 :                 break;
                                177                 :              0 :             case AT_ValidateConstraint:
                                178                 :              0 :                 strtype = "VALIDATE CONSTRAINT";
                                179                 :              0 :                 break;
                                180                 :              0 :             case AT_AddIndexConstraint:
                                181                 :              0 :                 strtype = "ADD CONSTRAINT (using index)";
                                182                 :              0 :                 break;
                                183                 :              0 :             case AT_DropConstraint:
                                184                 :              0 :                 strtype = "DROP CONSTRAINT";
                                185                 :              0 :                 break;
 3191 heikki.linnakangas@i      186                 :              0 :             case AT_ReAddComment:
                                187                 :              0 :                 strtype = "(re) ADD COMMENT";
                                188                 :              0 :                 break;
 3261 alvherre@alvh.no-ip.      189                 :CBC           4 :             case AT_AlterColumnType:
                                190                 :              4 :                 strtype = "ALTER COLUMN SET TYPE";
                                191                 :              4 :                 break;
 3261 alvherre@alvh.no-ip.      192                 :UBC           0 :             case AT_AlterColumnGenericOptions:
                                193                 :              0 :                 strtype = "ALTER COLUMN SET OPTIONS";
                                194                 :              0 :                 break;
                                195                 :              0 :             case AT_ChangeOwner:
                                196                 :              0 :                 strtype = "CHANGE OWNER";
                                197                 :              0 :                 break;
 3261 alvherre@alvh.no-ip.      198                 :CBC           1 :             case AT_ClusterOn:
                                199                 :              1 :                 strtype = "CLUSTER";
                                200                 :              1 :                 break;
 3261 alvherre@alvh.no-ip.      201                 :UBC           0 :             case AT_DropCluster:
                                202                 :              0 :                 strtype = "DROP CLUSTER";
                                203                 :              0 :                 break;
 3261 alvherre@alvh.no-ip.      204                 :CBC           1 :             case AT_SetLogged:
                                205                 :              1 :                 strtype = "SET LOGGED";
                                206                 :              1 :                 break;
                                207                 :              1 :             case AT_SetUnLogged:
                                208                 :              1 :                 strtype = "SET UNLOGGED";
                                209                 :              1 :                 break;
 3261 alvherre@alvh.no-ip.      210                 :UBC           0 :             case AT_DropOids:
                                211                 :              0 :                 strtype = "DROP OIDS";
                                212                 :              0 :                 break;
  623 michael@paquier.xyz       213                 :              0 :             case AT_SetAccessMethod:
                                214                 :              0 :                 strtype = "SET ACCESS METHOD";
                                215                 :              0 :                 break;
 3261 alvherre@alvh.no-ip.      216                 :              0 :             case AT_SetTableSpace:
                                217                 :              0 :                 strtype = "SET TABLESPACE";
                                218                 :              0 :                 break;
 3261 alvherre@alvh.no-ip.      219                 :CBC           1 :             case AT_SetRelOptions:
                                220                 :              1 :                 strtype = "SET RELOPTIONS";
                                221                 :              1 :                 break;
                                222                 :              1 :             case AT_ResetRelOptions:
                                223                 :              1 :                 strtype = "RESET RELOPTIONS";
                                224                 :              1 :                 break;
                                225                 :              1 :             case AT_ReplaceRelOptions:
                                226                 :              1 :                 strtype = "REPLACE RELOPTIONS";
                                227                 :              1 :                 break;
 3261 alvherre@alvh.no-ip.      228                 :UBC           0 :             case AT_EnableTrig:
                                229                 :              0 :                 strtype = "ENABLE TRIGGER";
                                230                 :              0 :                 break;
                                231                 :              0 :             case AT_EnableAlwaysTrig:
                                232                 :              0 :                 strtype = "ENABLE TRIGGER (always)";
                                233                 :              0 :                 break;
                                234                 :              0 :             case AT_EnableReplicaTrig:
                                235                 :              0 :                 strtype = "ENABLE TRIGGER (replica)";
                                236                 :              0 :                 break;
                                237                 :              0 :             case AT_DisableTrig:
                                238                 :              0 :                 strtype = "DISABLE TRIGGER";
                                239                 :              0 :                 break;
                                240                 :              0 :             case AT_EnableTrigAll:
                                241                 :              0 :                 strtype = "ENABLE TRIGGER (all)";
                                242                 :              0 :                 break;
                                243                 :              0 :             case AT_DisableTrigAll:
                                244                 :              0 :                 strtype = "DISABLE TRIGGER (all)";
                                245                 :              0 :                 break;
                                246                 :              0 :             case AT_EnableTrigUser:
                                247                 :              0 :                 strtype = "ENABLE TRIGGER (user)";
                                248                 :              0 :                 break;
                                249                 :              0 :             case AT_DisableTrigUser:
                                250                 :              0 :                 strtype = "DISABLE TRIGGER (user)";
                                251                 :              0 :                 break;
                                252                 :              0 :             case AT_EnableRule:
                                253                 :              0 :                 strtype = "ENABLE RULE";
                                254                 :              0 :                 break;
                                255                 :              0 :             case AT_EnableAlwaysRule:
                                256                 :              0 :                 strtype = "ENABLE RULE (always)";
                                257                 :              0 :                 break;
                                258                 :              0 :             case AT_EnableReplicaRule:
                                259                 :              0 :                 strtype = "ENABLE RULE (replica)";
                                260                 :              0 :                 break;
                                261                 :              0 :             case AT_DisableRule:
                                262                 :              0 :                 strtype = "DISABLE RULE";
                                263                 :              0 :                 break;
                                264                 :              0 :             case AT_AddInherit:
                                265                 :              0 :                 strtype = "ADD INHERIT";
                                266                 :              0 :                 break;
                                267                 :              0 :             case AT_DropInherit:
                                268                 :              0 :                 strtype = "DROP INHERIT";
                                269                 :              0 :                 break;
                                270                 :              0 :             case AT_AddOf:
                                271                 :              0 :                 strtype = "OF";
                                272                 :              0 :                 break;
                                273                 :              0 :             case AT_DropOf:
                                274                 :              0 :                 strtype = "NOT OF";
                                275                 :              0 :                 break;
                                276                 :              0 :             case AT_ReplicaIdentity:
                                277                 :              0 :                 strtype = "REPLICA IDENTITY";
                                278                 :              0 :                 break;
 3261 alvherre@alvh.no-ip.      279                 :CBC           1 :             case AT_EnableRowSecurity:
                                280                 :              1 :                 strtype = "ENABLE ROW SECURITY";
                                281                 :              1 :                 break;
                                282                 :              1 :             case AT_DisableRowSecurity:
                                283                 :              1 :                 strtype = "DISABLE ROW SECURITY";
                                284                 :              1 :                 break;
 3115 sfrost@snowman.net        285                 :              1 :             case AT_ForceRowSecurity:
                                286                 :              1 :                 strtype = "FORCE ROW SECURITY";
                                287                 :              1 :                 break;
                                288                 :              1 :             case AT_NoForceRowSecurity:
                                289                 :              1 :                 strtype = "NO FORCE ROW SECURITY";
                                290                 :              1 :                 break;
 3261 alvherre@alvh.no-ip.      291                 :UBC           0 :             case AT_GenericOptions:
                                292                 :              0 :                 strtype = "SET OPTIONS";
                                293                 :              0 :                 break;
  623 michael@paquier.xyz       294                 :CBC           1 :             case AT_DetachPartition:
                                295                 :              1 :                 strtype = "DETACH PARTITION";
                                296                 :              1 :                 break;
                                297                 :              1 :             case AT_AttachPartition:
                                298                 :              1 :                 strtype = "ATTACH PARTITION";
                                299                 :              1 :                 break;
  623 michael@paquier.xyz       300                 :UBC           0 :             case AT_DetachPartitionFinalize:
                                301                 :              0 :                 strtype = "DETACH PARTITION ... FINALIZE";
                                302                 :              0 :                 break;
    7 akorotkov@postgresql      303                 :UNC           0 :             case AT_SplitPartition:
                                304                 :              0 :                 strtype = "SPLIT PARTITION";
                                305                 :              0 :                 break;
                                306                 :              0 :             case AT_MergePartitions:
                                307                 :              0 :                 strtype = "MERGE PARTITIONS";
                                308                 :              0 :                 break;
  623 michael@paquier.xyz       309                 :CBC           1 :             case AT_AddIdentity:
                                310                 :              1 :                 strtype = "ADD IDENTITY";
                                311                 :              1 :                 break;
                                312                 :              1 :             case AT_SetIdentity:
                                313                 :              1 :                 strtype = "SET IDENTITY";
                                314                 :              1 :                 break;
                                315                 :              1 :             case AT_DropIdentity:
                                316                 :              1 :                 strtype = "DROP IDENTITY";
                                317                 :              1 :                 break;
                                318                 :              1 :             case AT_ReAddStatistics:
                                319                 :              1 :                 strtype = "(re) ADD STATS";
 3191 alvherre@alvh.no-ip.      320                 :              1 :                 break;
                                321                 :                :         }
                                322                 :                : 
  489                           323         [ +  + ]:             63 :         if (subcmd->recurse)
                                324                 :             19 :             values[0] = CStringGetTextDatum(psprintf("%s (and recurse)", strtype));
                                325                 :                :         else
                                326                 :             44 :             values[0] = CStringGetTextDatum(strtype);
  623 michael@paquier.xyz       327         [ +  + ]:             63 :         if (OidIsValid(sub->address.objectId))
                                328                 :                :         {
                                329                 :                :             char       *objdesc;
                                330                 :                : 
                                331                 :             47 :             objdesc = getObjectDescription((const ObjectAddress *) &sub->address, false);
                                332                 :             47 :             values[1] = CStringGetTextDatum(objdesc);
                                333                 :                :         }
                                334                 :                :         else
                                335                 :             16 :             nulls[1] = true;
                                336                 :                : 
                                337                 :             63 :         tuplestore_putvalues(rsinfo->setResult, rsinfo->setDesc, values, nulls);
                                338                 :                :     }
                                339                 :                : 
                                340                 :             40 :     return (Datum) 0;
                                341                 :                : }
        

Generated by: LCOV version 2.1-beta2-3-g6141622