LCOV - differential code coverage report
Current view: top level - src/bin/pg_dump - pg_backup_null.c (source / functions) Coverage Total Hit UBC GNC CBC DCB
Current: Differential Code Coverage 16@8cea358b128 vs 17@8cea358b128 Lines: 83.6 % 67 56 11 56 2
Current Date: 2024-04-14 14:21:10 Functions: 75.0 % 12 9 3 1 8
Baseline: 16@8cea358b128 Branches: 61.1 % 18 11 7 11
Baseline Date: 2024-04-14 14:21:09 Line coverage date bins:
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed (240..) days: 83.6 % 67 56 11 56
Function coverage date bins:
(240..) days: 75.0 % 12 9 3 1 8
Branch coverage date bins:
(240..) days: 61.1 % 18 11 7 11

 Age         Owner                    Branch data    TLA  Line data    Source code
                                  1                 :                : /*-------------------------------------------------------------------------
                                  2                 :                :  *
                                  3                 :                :  * pg_backup_null.c
                                  4                 :                :  *
                                  5                 :                :  *  Implementation of an archive that is never saved; it is used by
                                  6                 :                :  *  pg_dump to output a plain text SQL script instead of saving
                                  7                 :                :  *  a real archive.
                                  8                 :                :  *
                                  9                 :                :  *  See the headers to pg_restore for more details.
                                 10                 :                :  *
                                 11                 :                :  * Copyright (c) 2000, Philip Warner
                                 12                 :                :  *      Rights are granted to use this software in any way so long
                                 13                 :                :  *      as this notice is not removed.
                                 14                 :                :  *
                                 15                 :                :  *  The author is not responsible for loss or damages that may
                                 16                 :                :  *  result from its use.
                                 17                 :                :  *
                                 18                 :                :  *
                                 19                 :                :  * IDENTIFICATION
                                 20                 :                :  *      src/bin/pg_dump/pg_backup_null.c
                                 21                 :                :  *
                                 22                 :                :  *-------------------------------------------------------------------------
                                 23                 :                :  */
                                 24                 :                : #include "postgres_fe.h"
                                 25                 :                : 
                                 26                 :                : #include "fe_utils/string_utils.h"
                                 27                 :                : #include "libpq/libpq-fs.h"
                                 28                 :                : #include "pg_backup_archiver.h"
                                 29                 :                : #include "pg_backup_utils.h"
                                 30                 :                : 
                                 31                 :                : static void _WriteData(ArchiveHandle *AH, const void *data, size_t dLen);
                                 32                 :                : static void _WriteLOData(ArchiveHandle *AH, const void *data, size_t dLen);
                                 33                 :                : static void _EndData(ArchiveHandle *AH, TocEntry *te);
                                 34                 :                : static int  _WriteByte(ArchiveHandle *AH, const int i);
                                 35                 :                : static void _WriteBuf(ArchiveHandle *AH, const void *buf, size_t len);
                                 36                 :                : static void _CloseArchive(ArchiveHandle *AH);
                                 37                 :                : static void _PrintTocData(ArchiveHandle *AH, TocEntry *te);
                                 38                 :                : static void _StartLOs(ArchiveHandle *AH, TocEntry *te);
                                 39                 :                : static void _StartLO(ArchiveHandle *AH, TocEntry *te, Oid oid);
                                 40                 :                : static void _EndLO(ArchiveHandle *AH, TocEntry *te, Oid oid);
                                 41                 :                : static void _EndLOs(ArchiveHandle *AH, TocEntry *te);
                                 42                 :                : 
                                 43                 :                : 
                                 44                 :                : /*
                                 45                 :                :  *  Initializer
                                 46                 :                :  */
                                 47                 :                : void
 8424 bruce@momjian.us           48                 :CBC         141 : InitArchiveFmt_Null(ArchiveHandle *AH)
                                 49                 :                : {
                                 50                 :                :     /* Assuming static functions, this can be copied for each format. */
                                 51                 :            141 :     AH->WriteDataPtr = _WriteData;
                                 52                 :            141 :     AH->EndDataPtr = _EndData;
                                 53                 :            141 :     AH->WriteBytePtr = _WriteByte;
                                 54                 :            141 :     AH->WriteBufPtr = _WriteBuf;
                                 55                 :            141 :     AH->ClosePtr = _CloseArchive;
 5550 andrew@dunslane.net        56                 :            141 :     AH->ReopenPtr = NULL;
 8424 bruce@momjian.us           57                 :            141 :     AH->PrintTocDataPtr = _PrintTocData;
                                 58                 :                : 
  496 peter@eisentraut.org       59                 :            141 :     AH->StartLOsPtr = _StartLOs;
                                 60                 :            141 :     AH->StartLOPtr = _StartLO;
                                 61                 :            141 :     AH->EndLOPtr = _EndLO;
                                 62                 :            141 :     AH->EndLOsPtr = _EndLOs;
 5550 andrew@dunslane.net        63                 :            141 :     AH->ClonePtr = NULL;
                                 64                 :            141 :     AH->DeClonePtr = NULL;
                                 65                 :                : 
                                 66                 :                :     /*
                                 67                 :                :      * Now prevent reading...
                                 68                 :                :      */
 8424 bruce@momjian.us           69         [ -  + ]:            141 :     if (AH->mode == archModeRead)
  737 tgl@sss.pgh.pa.us          70                 :UBC           0 :         pg_fatal("this format cannot be read");
 8668 pjw@rhyme.com.au           71                 :CBC         141 : }
                                 72                 :                : 
                                 73                 :                : /*
                                 74                 :                :  * - Start a new TOC entry
                                 75                 :                :  */
                                 76                 :                : 
                                 77                 :                : /*
                                 78                 :                :  * Called by dumper via archiver from within a data dump routine
                                 79                 :                :  */
                                 80                 :                : static void
 7908 peter_e@gmx.net            81                 :        1710834 : _WriteData(ArchiveHandle *AH, const void *data, size_t dLen)
                                 82                 :                : {
                                 83                 :                :     /* Just send it to output, ahwrite() already errors on failure */
 8424 bruce@momjian.us           84                 :        1710834 :     ahwrite(data, 1, dLen, AH);
 8668 pjw@rhyme.com.au           85                 :        1710834 : }
                                 86                 :                : 
                                 87                 :                : /*
                                 88                 :                :  * Called by dumper via archiver from within a data dump routine
                                 89                 :                :  * We substitute this for _WriteData while emitting a LO
                                 90                 :                :  */
                                 91                 :                : static void
  496 peter@eisentraut.org       92                 :             92 : _WriteLOData(ArchiveHandle *AH, const void *data, size_t dLen)
                                 93                 :                : {
 6872 tgl@sss.pgh.pa.us          94         [ +  + ]:             92 :     if (dLen > 0)
                                 95                 :                :     {
 5367                            96                 :             32 :         PQExpBuffer buf = createPQExpBuffer();
                                 97                 :                : 
                                 98                 :             32 :         appendByteaLiteralAHX(buf,
                                 99                 :                :                               (const unsigned char *) data,
                                100                 :                :                               dLen,
                                101                 :                :                               AH);
                                102                 :                : 
                                103                 :             32 :         ahprintf(AH, "SELECT pg_catalog.lowrite(0, %s);\n", buf->data);
                                104                 :                : 
                                105                 :             32 :         destroyPQExpBuffer(buf);
                                106                 :                :     }
 6872                           107                 :             92 : }
                                108                 :                : 
                                109                 :                : static void
 8424 bruce@momjian.us          110                 :UBC           0 : _EndData(ArchiveHandle *AH, TocEntry *te)
                                111                 :                : {
                                112                 :              0 :     ahprintf(AH, "\n\n");
 8668 pjw@rhyme.com.au          113                 :              0 : }
                                114                 :                : 
                                115                 :                : /*
                                116                 :                :  * Called by the archiver when starting to save BLOB DATA (not schema).
                                117                 :                :  * This routine should save whatever format-specific information is needed
                                118                 :                :  * to read the LOs back into memory.
                                119                 :                :  *
                                120                 :                :  * It is called just prior to the dumper's DataDumper routine.
                                121                 :                :  *
                                122                 :                :  * Optional, but strongly recommended.
                                123                 :                :  */
                                124                 :                : static void
  496 peter@eisentraut.org      125                 :CBC          52 : _StartLOs(ArchiveHandle *AH, TocEntry *te)
                                126                 :                : {
 6872 tgl@sss.pgh.pa.us         127                 :             52 :     ahprintf(AH, "BEGIN;\n\n");
                                128                 :             52 : }
                                129                 :                : 
                                130                 :                : /*
                                131                 :                :  * Called by the archiver when the dumper calls StartLO.
                                132                 :                :  *
                                133                 :                :  * Mandatory.
                                134                 :                :  *
                                135                 :                :  * Must save the passed OID for retrieval at restore-time.
                                136                 :                :  */
                                137                 :                : static void
  496 peter@eisentraut.org      138                 :             60 : _StartLO(ArchiveHandle *AH, TocEntry *te, Oid oid)
                                139                 :                : {
                                140                 :             60 :     bool        old_lo_style = (AH->version < K_VERS_1_12);
                                141                 :                : 
 6872 tgl@sss.pgh.pa.us         142         [ -  + ]:             60 :     if (oid == 0)
  737 tgl@sss.pgh.pa.us         143                 :UBC           0 :         pg_fatal("invalid OID for large object");
                                144                 :                : 
                                145                 :                :     /* With an old archive we must do drop and create logic here */
  496 peter@eisentraut.org      146   [ -  +  -  - ]:CBC          60 :     if (old_lo_style && AH->public.ropt->dropSchema)
  496 peter@eisentraut.org      147                 :UBC           0 :         DropLOIfExists(AH, oid);
                                148                 :                : 
  496 peter@eisentraut.org      149         [ -  + ]:CBC          60 :     if (old_lo_style)
 5169 tgl@sss.pgh.pa.us         150                 :UBC           0 :         ahprintf(AH, "SELECT pg_catalog.lo_open(pg_catalog.lo_create('%u'), %d);\n",
                                151                 :                :                  oid, INV_WRITE);
                                152                 :                :     else
 5169 tgl@sss.pgh.pa.us         153                 :CBC          60 :         ahprintf(AH, "SELECT pg_catalog.lo_open('%u', %d);\n",
                                154                 :                :                  oid, INV_WRITE);
                                155                 :                : 
  496 peter@eisentraut.org      156                 :             60 :     AH->WriteDataPtr = _WriteLOData;
 6872 tgl@sss.pgh.pa.us         157                 :             60 : }
                                158                 :                : 
                                159                 :                : /*
                                160                 :                :  * Called by the archiver when the dumper calls EndLO.
                                161                 :                :  *
                                162                 :                :  * Optional.
                                163                 :                :  */
                                164                 :                : static void
  496 peter@eisentraut.org      165                 :             60 : _EndLO(ArchiveHandle *AH, TocEntry *te, Oid oid)
                                166                 :                : {
 6872 tgl@sss.pgh.pa.us         167                 :             60 :     AH->WriteDataPtr = _WriteData;
                                168                 :                : 
 5381                           169                 :             60 :     ahprintf(AH, "SELECT pg_catalog.lo_close(0);\n\n");
 6872                           170                 :             60 : }
                                171                 :                : 
                                172                 :                : /*
                                173                 :                :  * Called by the archiver when finishing saving BLOB DATA.
                                174                 :                :  *
                                175                 :                :  * Optional.
                                176                 :                :  */
                                177                 :                : static void
  496 peter@eisentraut.org      178                 :             52 : _EndLOs(ArchiveHandle *AH, TocEntry *te)
                                179                 :                : {
 6872 tgl@sss.pgh.pa.us         180                 :             52 :     ahprintf(AH, "COMMIT;\n\n");
                                181                 :             52 : }
                                182                 :                : 
                                183                 :                : /*------
                                184                 :                :  * Called as part of a RestoreArchive call; for the NULL archive, this
                                185                 :                :  * just sends the data for a given TOC entry to the output.
                                186                 :                :  *------
                                187                 :                :  */
                                188                 :                : static void
 3014                           189                 :           3257 : _PrintTocData(ArchiveHandle *AH, TocEntry *te)
                                190                 :                : {
 8422                           191         [ +  - ]:           3257 :     if (te->dataDumper)
                                192                 :                :     {
 8668 pjw@rhyme.com.au          193                 :           3257 :         AH->currToc = te;
                                194                 :                : 
 6872 tgl@sss.pgh.pa.us         195         [ +  + ]:           3257 :         if (strcmp(te->desc, "BLOBS") == 0)
  496 peter@eisentraut.org      196                 :             52 :             _StartLOs(AH, te);
                                197                 :                : 
 2411 peter_e@gmx.net           198                 :           3257 :         te->dataDumper((Archive *) AH, te->dataDumperArg);
                                199                 :                : 
 6872 tgl@sss.pgh.pa.us         200         [ +  + ]:           3256 :         if (strcmp(te->desc, "BLOBS") == 0)
  496 peter@eisentraut.org      201                 :             52 :             _EndLOs(AH, te);
                                202                 :                : 
 8668 pjw@rhyme.com.au          203                 :           3256 :         AH->currToc = NULL;
                                204                 :                :     }
                                205                 :           3256 : }
                                206                 :                : 
                                207                 :                : static int
 8424 bruce@momjian.us          208                 :UBC           0 : _WriteByte(ArchiveHandle *AH, const int i)
                                209                 :                : {
                                210                 :                :     /* Don't do anything */
                                211                 :              0 :     return 0;
                                212                 :                : }
                                213                 :                : 
                                214                 :                : static void
 7908 peter_e@gmx.net           215                 :              0 : _WriteBuf(ArchiveHandle *AH, const void *buf, size_t len)
                                216                 :                : {
                                217                 :                :     /* Don't do anything */
 8668 pjw@rhyme.com.au          218                 :              0 : }
                                219                 :                : 
                                220                 :                : static void
 3014 tgl@sss.pgh.pa.us         221                 :CBC         121 : _CloseArchive(ArchiveHandle *AH)
                                222                 :                : {
                                223                 :                :     /* Nothing to do */
 8668 pjw@rhyme.com.au          224                 :            121 : }
        

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