Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Postgres/src/bin/pg_dump/   (Postgres Database Version 18.4©)  Datei vom 11.4.2026 mit Größe 5 kB image not shown  

Quelle  pg_backup_null.c

  Sprache: C
 

/*-------------------------------------------------------------------------
 *
 * pg_backup_null.c
 *
 * Implementation of an archive that is never saved; it is used by
 * pg_dump to output a plain text SQL script instead of saving
 * a real archive.
 *
 * See the headers to pg_restore for more details.
 *
 * Copyright (c) 2000, Philip Warner
 *  Rights are granted to use this software in any way so long
 *  as this notice is not removed.
 *
 * The author is not responsible for loss or damages that may
 * result from its use.
 *
 *
 * IDENTIFICATION
 *  src/bin/pg_dump/pg_backup_null.c
 *
 *-------------------------------------------------------------------------
 */

#include "postgres_fe.h"

#include "fe_utils/string_utils.h"
#include "libpq/libpq-fs.h"
#include "pg_backup_archiver.h"
#include "pg_backup_utils.h"

static void _WriteData(ArchiveHandle *AH, const void *data, size_t dLen);
static void _WriteLOData(ArchiveHandle *AH, const void *data, size_t dLen);
static void _EndData(ArchiveHandle *AH, TocEntry *te);
static int _WriteByte(ArchiveHandle *AH, const int i);
static void _WriteBuf(ArchiveHandle *AH, const void *buf, size_t len);
static void _CloseArchive(ArchiveHandle *AH);
static void _PrintTocData(ArchiveHandle *AH, TocEntry *te);
static void _StartLOs(ArchiveHandle *AH, TocEntry *te);
static void _StartLO(ArchiveHandle *AH, TocEntry *te, Oid oid);
static void _EndLO(ArchiveHandle *AH, TocEntry *te, Oid oid);
static void _EndLOs(ArchiveHandle *AH, TocEntry *te);


/*
 * Initializer
 */

void
InitArchiveFmt_Null(ArchiveHandle *AH)
{
 /* Assuming static functions, this can be copied for each format. */
 AH->WriteDataPtr = _WriteData;
 AH->EndDataPtr = _EndData;
 AH->WriteBytePtr = _WriteByte;
 AH->WriteBufPtr = _WriteBuf;
 AH->ClosePtr = _CloseArchive;
 AH->ReopenPtr = NULL;
 AH->PrintTocDataPtr = _PrintTocData;

 AH->StartLOsPtr = _StartLOs;
 AH->StartLOPtr = _StartLO;
 AH->EndLOPtr = _EndLO;
 AH->EndLOsPtr = _EndLOs;
 AH->ClonePtr = NULL;
 AH->DeClonePtr = NULL;

 /*
  * Now prevent reading...
 */

 if (AH->mode == archModeRead)
  pg_fatal("this format cannot be read");
}

/*
 * - Start a new TOC entry
 */


/*
 * Called by dumper via archiver from within a data dump routine
 */

static void
_WriteData(ArchiveHandle *AH, const void *data, size_t dLen)
{
 /* Just send it to output, ahwrite() already errors on failure */
 ahwrite(data, 1, dLen, AH);
}

/*
 * Called by dumper via archiver from within a data dump routine
 * We substitute this for _WriteData while emitting a LO
 */

static void
_WriteLOData(ArchiveHandle *AH, const void *data, size_t dLen)
{
 if (dLen > 0)
 {
  PQExpBuffer buf = createPQExpBuffer();

  appendByteaLiteralAHX(buf,
         (const unsigned char *) data,
         dLen,
         AH);

  ahprintf(AH, "SELECT pg_catalog.lowrite(0, %s);\n", buf->data);

  destroyPQExpBuffer(buf);
 }
}

static void
_EndData(ArchiveHandle *AH, TocEntry *te)
{
 ahprintf(AH, "\n\n");
}

/*
 * Called by the archiver when starting to save BLOB DATA (not schema).
 * This routine should save whatever format-specific information is needed
 * to read the LOs back into memory.
 *
 * It is called just prior to the dumper's DataDumper routine.
 *
 * Optional, but strongly recommended.
 */

static void
_StartLOs(ArchiveHandle *AH, TocEntry *te)
{
 ahprintf(AH, "BEGIN;\n\n");
}

/*
 * Called by the archiver when the dumper calls StartLO.
 *
 * Mandatory.
 *
 * Must save the passed OID for retrieval at restore-time.
 */

static void
_StartLO(ArchiveHandle *AH, TocEntry *te, Oid oid)
{
 bool  old_lo_style = (AH->version < K_VERS_1_12);

 if (oid == 0)
  pg_fatal("invalid OID for large object");

 /* With an old archive we must do drop and create logic here */
 if (old_lo_style && AH->public.ropt->dropSchema)
  DropLOIfExists(AH, oid);

 if (old_lo_style)
  ahprintf(AH, "SELECT pg_catalog.lo_open(pg_catalog.lo_create('%u'), %d);\n",
     oid, INV_WRITE);
 else
  ahprintf(AH, "SELECT pg_catalog.lo_open('%u', %d);\n",
     oid, INV_WRITE);

 AH->WriteDataPtr = _WriteLOData;
}

/*
 * Called by the archiver when the dumper calls EndLO.
 *
 * Optional.
 */

static void
_EndLO(ArchiveHandle *AH, TocEntry *te, Oid oid)
{
 AH->WriteDataPtr = _WriteData;

 ahprintf(AH, "SELECT pg_catalog.lo_close(0);\n\n");
}

/*
 * Called by the archiver when finishing saving BLOB DATA.
 *
 * Optional.
 */

static void
_EndLOs(ArchiveHandle *AH, TocEntry *te)
{
 ahprintf(AH, "COMMIT;\n\n");
}

/*------
 * Called as part of a RestoreArchive call; for the NULL archive, this
 * just sends the data for a given TOC entry to the output.
 *------
 */

static void
_PrintTocData(ArchiveHandle *AH, TocEntry *te)
{
 if (te->dataDumper)
 {
  AH->currToc = te;

  if (strcmp(te->desc, "BLOBS") == 0)
   _StartLOs(AH, te);

  te->dataDumper((Archive *) AH, te->dataDumperArg);

  if (strcmp(te->desc, "BLOBS") == 0)
   _EndLOs(AH, te);

  AH->currToc = NULL;
 }
}

static int
_WriteByte(ArchiveHandle *AH, const int i)
{
 /* Don't do anything */
 return 0;
}

static void
_WriteBuf(ArchiveHandle *AH, const void *buf, size_t len)
{
 /* Don't do anything */
}

static void
_CloseArchive(ArchiveHandle *AH)
{
 /* Nothing to do */
}

Messung V0.5 in Prozent
C=94 H=96 G=94

¤ Dauer der Verarbeitung: 0.12 Sekunden  (vorverarbeitet am  2026-08-08) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.