This is a first pass at Daniele's suggestion in Issue #8, although it is definitely still buggy -- it is still possible for another transaction to get in an AccessExclusive lock and perform DDL either before the ACCESS SHARE lock is acquired or immediately after it is released.
76 lines
2.0 KiB
C
76 lines
2.0 KiB
C
/*-------------------------------------------------------------------------
|
|
* pgut-fe.h
|
|
*
|
|
* Portions Copyright (c) 2008-2011, NIPPON TELEGRAPH AND TELEPHONE CORPORATION
|
|
* Portions Copyright (c) 2011, Itagaki Takahiro
|
|
* Portions Copyright (c) 2012, The Reorg Development Team
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
|
|
#ifndef PGUT_FE_H
|
|
#define PGUT_FE_H
|
|
|
|
#include "pgut.h"
|
|
|
|
typedef enum pgut_optsrc
|
|
{
|
|
SOURCE_DEFAULT,
|
|
SOURCE_ENV,
|
|
SOURCE_FILE,
|
|
SOURCE_CMDLINE,
|
|
SOURCE_CONST
|
|
} pgut_optsrc;
|
|
|
|
/*
|
|
* type:
|
|
* b: bool (true)
|
|
* B: bool (false)
|
|
* f: pgut_optfn
|
|
* i: 32bit signed integer
|
|
* u: 32bit unsigned integer
|
|
* I: 64bit signed integer
|
|
* U: 64bit unsigned integer
|
|
* s: string
|
|
* t: time_t
|
|
* y: YesNo (YES)
|
|
* Y: YesNo (NO)
|
|
*/
|
|
typedef struct pgut_option
|
|
{
|
|
char type;
|
|
char sname; /* short name */
|
|
const char *lname; /* long name */
|
|
void *var; /* pointer to variable */
|
|
pgut_optsrc allowed; /* allowed source */
|
|
pgut_optsrc source; /* actual source */
|
|
} pgut_option;
|
|
|
|
typedef void (*pgut_optfn) (pgut_option *opt, const char *arg);
|
|
|
|
|
|
extern char *dbname;
|
|
extern char *host;
|
|
extern char *port;
|
|
extern char *username;
|
|
extern char *password;
|
|
extern YesNo prompt_password;
|
|
|
|
extern PGconn *connection;
|
|
extern PGconn *conn2;
|
|
|
|
extern void pgut_help(bool details);
|
|
extern void help(bool details);
|
|
|
|
extern void disconnect(void);
|
|
extern void reconnect(int elevel);
|
|
extern PGresult *execute(const char *query, int nParams, const char **params);
|
|
extern PGresult *execute_elevel(const char *query, int nParams, const char **params, int elevel);
|
|
extern ExecStatusType command(const char *query, int nParams, const char **params);
|
|
|
|
extern int pgut_getopt(int argc, char **argv, pgut_option options[]);
|
|
extern void pgut_readopt(const char *path, pgut_option options[], int elevel);
|
|
extern void pgut_setopt(pgut_option *opt, const char *optarg, pgut_optsrc src);
|
|
extern bool pgut_keyeq(const char *lhs, const char *rhs);
|
|
|
|
#endif /* PGUT_FE_H */
|