123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- /*-------------------------------------------------------------------------
- *
- * copy.h
- * Definitions for using the POSTGRES copy command.
- *
- *
- * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- * src/include/commands/copy.h
- *
- *-------------------------------------------------------------------------
- */
- #ifndef COPY_H
- #define COPY_H
- #include "nodes/execnodes.h"
- #include "nodes/parsenodes.h"
- #include "parser/parse_node.h"
- #include "tcop/dest.h"
- /*
- * Represents whether a header line should be present, and whether it must
- * match the actual names (which implies "true").
- */
- typedef enum CopyHeaderChoice
- {
- COPY_HEADER_FALSE = 0,
- COPY_HEADER_TRUE,
- COPY_HEADER_MATCH,
- } CopyHeaderChoice;
- /*
- * A struct to hold COPY options, in a parsed form. All of these are related
- * to formatting, except for 'freeze', which doesn't really belong here, but
- * it's expedient to parse it along with all the other options.
- */
- typedef struct CopyFormatOptions
- {
- /* parameters from the COPY command */
- int file_encoding; /* file or remote side's character encoding,
- * -1 if not specified */
- bool binary; /* binary format? */
- bool freeze; /* freeze rows on loading? */
- bool csv_mode; /* Comma Separated Value format? */
- CopyHeaderChoice header_line; /* header line? */
- char *null_print; /* NULL marker string (server encoding!) */
- int null_print_len; /* length of same */
- char *null_print_client; /* same converted to file encoding */
- char *delim; /* column delimiter (must be 1 byte) */
- char *quote; /* CSV quote char (must be 1 byte) */
- char *escape; /* CSV escape char (must be 1 byte) */
- List *force_quote; /* list of column names */
- bool force_quote_all; /* FORCE_QUOTE *? */
- bool *force_quote_flags; /* per-column CSV FQ flags */
- List *force_notnull; /* list of column names */
- bool *force_notnull_flags; /* per-column CSV FNN flags */
- List *force_null; /* list of column names */
- bool *force_null_flags; /* per-column CSV FN flags */
- bool convert_selectively; /* do selective binary conversion? */
- List *convert_select; /* list of column names (can be NIL) */
- } CopyFormatOptions;
- /* These are private in commands/copy[from|to].c */
- typedef struct CopyFromStateData *CopyFromState;
- typedef struct CopyToStateData *CopyToState;
- typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
- extern void DoCopy(ParseState *state, const CopyStmt *stmt,
- int stmt_location, int stmt_len,
- uint64 *processed);
- extern void ProcessCopyOptions(ParseState *pstate, CopyFormatOptions *ops_out, bool is_from, List *options);
- extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *whereClause,
- const char *filename,
- bool is_program, copy_data_source_cb data_source_cb, List *attnamelist, List *options);
- extern void EndCopyFrom(CopyFromState cstate);
- extern bool NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
- Datum *values, bool *nulls);
- extern bool NextCopyFromRawFields(CopyFromState cstate,
- char ***fields, int *nfields);
- extern void CopyFromErrorCallback(void *arg);
- extern uint64 CopyFrom(CopyFromState cstate);
- extern DestReceiver *CreateCopyDestReceiver(void);
- /*
- * internal prototypes
- */
- extern CopyToState BeginCopyTo(ParseState *pstate, Relation rel, RawStmt *query,
- Oid queryRelId, const char *filename, bool is_program,
- List *attnamelist, List *options);
- extern void EndCopyTo(CopyToState cstate);
- extern uint64 DoCopyTo(CopyToState cstate);
- extern List *CopyGetAttnums(TupleDesc tupDesc, Relation rel,
- List *attnamelist);
- #endif /* COPY_H */
|