mirror of
https://github.com/postgres/postgres.git
synced 2025-09-02 04:21:28 +03:00
pgindent run before 6.3 release, with Thomas' requested changes.
This commit is contained in:
@@ -21,7 +21,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.63 1998/02/18 15:33:37 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.64 1998/02/26 04:38:54 momjian Exp $
|
||||
*
|
||||
* Modifications - 6/10/96 - dave@bensoft.com - version 1.13.dhb
|
||||
*
|
||||
@@ -47,7 +47,7 @@
|
||||
*
|
||||
*
|
||||
* Modifications - 1/26/98 - pjlobo@euitt.upm.es
|
||||
* - Added support for password authentication
|
||||
* - Added support for password authentication
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
@@ -79,8 +79,9 @@
|
||||
#include "pg_dump.h"
|
||||
|
||||
static void dumpSequence(FILE *fout, TableInfo tbinfo);
|
||||
static void dumpTriggers(FILE *fout, const char *tablename,
|
||||
TableInfo *tblinfo, int numTables);
|
||||
static void
|
||||
dumpTriggers(FILE *fout, const char *tablename,
|
||||
TableInfo *tblinfo, int numTables);
|
||||
static char *checkForQuote(const char *s);
|
||||
static void clearTableInfo(TableInfo *, int);
|
||||
static void
|
||||
@@ -92,7 +93,7 @@ static void setMaxOid(FILE *fout);
|
||||
|
||||
static char *AddAcl(char *s, const char *add);
|
||||
static char *GetPrivledges(char *s);
|
||||
static ACL *ParseACL(const char *acls,int *count);
|
||||
static ACL *ParseACL(const char *acls, int *count);
|
||||
|
||||
extern char *optarg;
|
||||
extern int optind,
|
||||
@@ -126,7 +127,7 @@ usage(const char *progname)
|
||||
fprintf(stderr,
|
||||
"\t -d \t\t dump data as proper insert strings\n");
|
||||
fprintf(stderr,
|
||||
"\t -D \t\t dump data as inserts with attribute names\n");
|
||||
"\t -D \t\t dump data as inserts with attribute names\n");
|
||||
fprintf(stderr,
|
||||
"\t -f filename \t\t script output filename\n");
|
||||
fprintf(stderr,
|
||||
@@ -421,7 +422,7 @@ dumpClasses(const TableInfo tblinfo[], const int numTables, FILE *fout,
|
||||
if (g_verbose)
|
||||
fprintf(stderr, "%s dumping out the contents of %s of %d tables %s\n",
|
||||
g_comment_start, all_only, numTables, g_comment_end);
|
||||
|
||||
|
||||
/* Dump SEQUENCEs first (if dataOnly) */
|
||||
if (dataOnly)
|
||||
{
|
||||
@@ -433,7 +434,7 @@ dumpClasses(const TableInfo tblinfo[], const int numTables, FILE *fout,
|
||||
{
|
||||
if (g_verbose)
|
||||
fprintf(stderr, "%s dumping out schema of sequence %s %s\n",
|
||||
g_comment_start, tblinfo[i].relname, g_comment_end);
|
||||
g_comment_start, tblinfo[i].relname, g_comment_end);
|
||||
fprintf(fout, "\\connect - %s\n", tblinfo[i].usename);
|
||||
dumpSequence(fout, tblinfo[i]);
|
||||
}
|
||||
@@ -447,8 +448,8 @@ dumpClasses(const TableInfo tblinfo[], const int numTables, FILE *fout,
|
||||
/* Skip VIEW relations */
|
||||
if (isViewRule(tblinfo[i].relname))
|
||||
continue;
|
||||
|
||||
if (tblinfo[i].sequence) /* already dumped */
|
||||
|
||||
if (tblinfo[i].sequence)/* already dumped */
|
||||
continue;
|
||||
|
||||
if (!onlytable || (!strcmp(classname, onlytable)))
|
||||
@@ -532,16 +533,16 @@ main(int argc, char **argv)
|
||||
const char *dbname = NULL;
|
||||
const char *pghost = NULL;
|
||||
const char *pgport = NULL;
|
||||
char *tablename = NULL;
|
||||
char *tablename = NULL;
|
||||
int oids = 0,
|
||||
acls = 0;
|
||||
TableInfo *tblinfo;
|
||||
int numTables;
|
||||
char connect_string[512] = "";
|
||||
char tmp_string[128];
|
||||
char username[64];
|
||||
char password[64];
|
||||
int use_password = 0;
|
||||
char connect_string[512] = "";
|
||||
char tmp_string[128];
|
||||
char username[64];
|
||||
char password[64];
|
||||
int use_password = 0;
|
||||
|
||||
g_verbose = false;
|
||||
|
||||
@@ -585,7 +586,7 @@ main(int argc, char **argv)
|
||||
break;
|
||||
case 't': /* Dump data for this table only */
|
||||
{
|
||||
int i;
|
||||
int i;
|
||||
|
||||
tablename = strdup(optarg);
|
||||
for (i = 0; tablename[i]; i++)
|
||||
@@ -633,28 +634,32 @@ main(int argc, char **argv)
|
||||
exit(2);
|
||||
}
|
||||
|
||||
/*g_conn = PQsetdb(pghost, pgport, NULL, NULL, dbname);*/
|
||||
if (pghost != NULL) {
|
||||
sprintf(tmp_string, "host=%s ", pghost);
|
||||
strcat(connect_string, tmp_string);
|
||||
/* g_conn = PQsetdb(pghost, pgport, NULL, NULL, dbname); */
|
||||
if (pghost != NULL)
|
||||
{
|
||||
sprintf(tmp_string, "host=%s ", pghost);
|
||||
strcat(connect_string, tmp_string);
|
||||
}
|
||||
if (pgport != NULL) {
|
||||
sprintf(tmp_string, "port=%s ", pgport);
|
||||
strcat(connect_string, tmp_string);
|
||||
if (pgport != NULL)
|
||||
{
|
||||
sprintf(tmp_string, "port=%s ", pgport);
|
||||
strcat(connect_string, tmp_string);
|
||||
}
|
||||
if (dbname != NULL) {
|
||||
sprintf(tmp_string, "dbname=%s ", dbname);
|
||||
strcat(connect_string, tmp_string);
|
||||
if (dbname != NULL)
|
||||
{
|
||||
sprintf(tmp_string, "dbname=%s ", dbname);
|
||||
strcat(connect_string, tmp_string);
|
||||
}
|
||||
if (use_password) {
|
||||
prompt_for_password(username, password);
|
||||
strcat(connect_string, "authtype=password ");
|
||||
sprintf(tmp_string, "user=%s ", username);
|
||||
strcat(connect_string, tmp_string);
|
||||
sprintf(tmp_string, "password=%s ", password);
|
||||
strcat(connect_string, tmp_string);
|
||||
bzero(tmp_string, sizeof(tmp_string));
|
||||
bzero(password, sizeof(password));
|
||||
if (use_password)
|
||||
{
|
||||
prompt_for_password(username, password);
|
||||
strcat(connect_string, "authtype=password ");
|
||||
sprintf(tmp_string, "user=%s ", username);
|
||||
strcat(connect_string, tmp_string);
|
||||
sprintf(tmp_string, "password=%s ", password);
|
||||
strcat(connect_string, tmp_string);
|
||||
bzero(tmp_string, sizeof(tmp_string));
|
||||
bzero(password, sizeof(password));
|
||||
}
|
||||
g_conn = PQconnectdb(connect_string);
|
||||
bzero(connect_string, sizeof(connect_string));
|
||||
@@ -685,7 +690,8 @@ main(int argc, char **argv)
|
||||
dumpClasses(tblinfo, numTables, g_fout, tablename, oids);
|
||||
}
|
||||
|
||||
if (!dataOnly) /* dump indexes and triggers at the end for performance */
|
||||
if (!dataOnly) /* dump indexes and triggers at the end
|
||||
* for performance */
|
||||
{
|
||||
dumpSchemaIdx(g_fout, tablename, tblinfo, numTables);
|
||||
dumpTriggers(g_fout, tablename, tblinfo, numTables);
|
||||
@@ -1407,8 +1413,8 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
|
||||
PQclear(res);
|
||||
|
||||
sprintf(query,
|
||||
"SELECT pg_class.oid, relname, relkind, relacl, usename, "
|
||||
"relchecks, reltriggers "
|
||||
"SELECT pg_class.oid, relname, relkind, relacl, usename, "
|
||||
"relchecks, reltriggers "
|
||||
"from pg_class, pg_user "
|
||||
"where relowner = usesysid and "
|
||||
"(relkind = 'r' or relkind = 'S') and relname !~ '^pg_' "
|
||||
@@ -1445,27 +1451,28 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
|
||||
tblinfo[i].usename = strdup(PQgetvalue(res, i, i_usename));
|
||||
tblinfo[i].ncheck = atoi(PQgetvalue(res, i, i_relchecks));
|
||||
tblinfo[i].ntrig = atoi(PQgetvalue(res, i, i_reltriggers));
|
||||
|
||||
|
||||
/* Get CHECK constraints */
|
||||
if (tblinfo[i].ncheck > 0)
|
||||
{
|
||||
PGresult *res2;
|
||||
int i_rcname, i_rcsrc;
|
||||
int i_rcname,
|
||||
i_rcsrc;
|
||||
int ntups2;
|
||||
int i2;
|
||||
|
||||
|
||||
if (g_verbose)
|
||||
fprintf(stderr, "%s finding CHECK constraints for relation: %s %s\n",
|
||||
g_comment_start,
|
||||
tblinfo[i].relname,
|
||||
g_comment_end);
|
||||
|
||||
|
||||
sprintf(query, "SELECT rcname, rcsrc from pg_relcheck "
|
||||
"where rcrelid = '%s'::oid ",
|
||||
tblinfo[i].oid);
|
||||
res2 = PQexec(g_conn, query);
|
||||
if (!res2 ||
|
||||
PQresultStatus(res2) != PGRES_TUPLES_OK)
|
||||
PQresultStatus(res2) != PGRES_TUPLES_OK)
|
||||
{
|
||||
fprintf(stderr, "getTables(): SELECT (for CHECK) failed\n");
|
||||
exit_nicely(g_conn);
|
||||
@@ -1474,49 +1481,53 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
|
||||
if (ntups2 != tblinfo[i].ncheck)
|
||||
{
|
||||
fprintf(stderr, "getTables(): relation %s: %d CHECKs were expected, but got %d\n",
|
||||
tblinfo[i].relname, tblinfo[i].ncheck, ntups2);
|
||||
tblinfo[i].relname, tblinfo[i].ncheck, ntups2);
|
||||
exit_nicely(g_conn);
|
||||
}
|
||||
i_rcname = PQfnumber(res2, "rcname");
|
||||
i_rcsrc = PQfnumber(res2, "rcsrc");
|
||||
tblinfo[i].check_expr = (char **) malloc (ntups2 * sizeof (char *));
|
||||
tblinfo[i].check_expr = (char **) malloc(ntups2 * sizeof(char *));
|
||||
for (i2 = 0; i2 < ntups2; i2++)
|
||||
{
|
||||
char *name = PQgetvalue(res2, i2, i_rcname);
|
||||
char *expr = PQgetvalue(res2, i2, i_rcsrc);
|
||||
|
||||
char *name = PQgetvalue(res2, i2, i_rcname);
|
||||
char *expr = PQgetvalue(res2, i2, i_rcsrc);
|
||||
|
||||
query[0] = 0;
|
||||
if ( name[0] != '$' )
|
||||
sprintf (query, "CONSTRAINT %s ", name);
|
||||
sprintf (query, "%sCHECK %s", query, expr);
|
||||
tblinfo[i].check_expr[i2] = strdup (query);
|
||||
if (name[0] != '$')
|
||||
sprintf(query, "CONSTRAINT %s ", name);
|
||||
sprintf(query, "%sCHECK %s", query, expr);
|
||||
tblinfo[i].check_expr[i2] = strdup(query);
|
||||
}
|
||||
PQclear(res2);
|
||||
}
|
||||
else
|
||||
tblinfo[i].check_expr = NULL;
|
||||
|
||||
|
||||
/* Get Triggers */
|
||||
if (tblinfo[i].ntrig > 0)
|
||||
{
|
||||
PGresult *res2;
|
||||
int i_tgname, i_tgfoid, i_tgtype, i_tgnargs, i_tgargs;
|
||||
int i_tgname,
|
||||
i_tgfoid,
|
||||
i_tgtype,
|
||||
i_tgnargs,
|
||||
i_tgargs;
|
||||
int ntups2;
|
||||
int i2;
|
||||
|
||||
|
||||
if (g_verbose)
|
||||
fprintf(stderr, "%s finding Triggers for relation: %s %s\n",
|
||||
g_comment_start,
|
||||
tblinfo[i].relname,
|
||||
g_comment_end);
|
||||
|
||||
|
||||
sprintf(query, "SELECT tgname, tgfoid, tgtype, tgnargs, tgargs "
|
||||
"from pg_trigger "
|
||||
"where tgrelid = '%s'::oid ",
|
||||
tblinfo[i].oid);
|
||||
res2 = PQexec(g_conn, query);
|
||||
if (!res2 ||
|
||||
PQresultStatus(res2) != PGRES_TUPLES_OK)
|
||||
PQresultStatus(res2) != PGRES_TUPLES_OK)
|
||||
{
|
||||
fprintf(stderr, "getTables(): SELECT (for TRIGGER) failed\n");
|
||||
exit_nicely(g_conn);
|
||||
@@ -1525,7 +1536,7 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
|
||||
if (ntups2 != tblinfo[i].ntrig)
|
||||
{
|
||||
fprintf(stderr, "getTables(): relation %s: %d Triggers were expected, but got %d\n",
|
||||
tblinfo[i].relname, tblinfo[i].ntrig, ntups2);
|
||||
tblinfo[i].relname, tblinfo[i].ntrig, ntups2);
|
||||
exit_nicely(g_conn);
|
||||
}
|
||||
i_tgname = PQfnumber(res2, "tgname");
|
||||
@@ -1533,72 +1544,73 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
|
||||
i_tgtype = PQfnumber(res2, "tgtype");
|
||||
i_tgnargs = PQfnumber(res2, "tgnargs");
|
||||
i_tgargs = PQfnumber(res2, "tgargs");
|
||||
tblinfo[i].triggers = (char **) malloc (ntups2 * sizeof (char *));
|
||||
tblinfo[i].triggers = (char **) malloc(ntups2 * sizeof(char *));
|
||||
for (i2 = 0, query[0] = 0; i2 < ntups2; i2++)
|
||||
{
|
||||
char *tgfunc = PQgetvalue(res2, i2, i_tgfoid);
|
||||
int2 tgtype = atoi(PQgetvalue(res2, i2, i_tgtype));
|
||||
int tgnargs = atoi(PQgetvalue(res2, i2, i_tgnargs));
|
||||
char *tgargs = PQgetvalue(res2, i2, i_tgargs);
|
||||
char *p;
|
||||
char farg[MAXQUERYLEN];
|
||||
int findx;
|
||||
|
||||
char *tgfunc = PQgetvalue(res2, i2, i_tgfoid);
|
||||
int2 tgtype = atoi(PQgetvalue(res2, i2, i_tgtype));
|
||||
int tgnargs = atoi(PQgetvalue(res2, i2, i_tgnargs));
|
||||
char *tgargs = PQgetvalue(res2, i2, i_tgargs);
|
||||
char *p;
|
||||
char farg[MAXQUERYLEN];
|
||||
int findx;
|
||||
|
||||
for (findx = 0; findx < numFuncs; findx++)
|
||||
{
|
||||
if (strcmp(finfo[findx].oid, tgfunc) == 0 &&
|
||||
finfo[findx].lang == ClanguageId &&
|
||||
finfo[findx].nargs == 0 &&
|
||||
finfo[findx].lang == ClanguageId &&
|
||||
finfo[findx].nargs == 0 &&
|
||||
strcmp(finfo[findx].prorettype, "0") == 0)
|
||||
break;
|
||||
}
|
||||
if (findx == numFuncs)
|
||||
{
|
||||
fprintf(stderr, "getTables(): relation %s: cannot find function with oid %s for trigger %s\n",
|
||||
tblinfo[i].relname, tgfunc, PQgetvalue(res2, i2, i_tgname));
|
||||
tblinfo[i].relname, tgfunc, PQgetvalue(res2, i2, i_tgname));
|
||||
exit_nicely(g_conn);
|
||||
}
|
||||
tgfunc = finfo[findx].proname;
|
||||
sprintf (query, "CREATE TRIGGER %s ", PQgetvalue(res2, i2, i_tgname));
|
||||
sprintf(query, "CREATE TRIGGER %s ", PQgetvalue(res2, i2, i_tgname));
|
||||
/* Trigger type */
|
||||
findx = 0;
|
||||
if (TRIGGER_FOR_BEFORE(tgtype))
|
||||
strcat (query, "BEFORE");
|
||||
strcat(query, "BEFORE");
|
||||
else
|
||||
strcat (query, "AFTER");
|
||||
strcat(query, "AFTER");
|
||||
if (TRIGGER_FOR_INSERT(tgtype))
|
||||
{
|
||||
strcat (query, " INSERT");
|
||||
strcat(query, " INSERT");
|
||||
findx++;
|
||||
}
|
||||
if (TRIGGER_FOR_DELETE(tgtype))
|
||||
{
|
||||
if (findx > 0)
|
||||
strcat (query, " OR DELETE");
|
||||
strcat(query, " OR DELETE");
|
||||
else
|
||||
strcat (query, " DELETE");
|
||||
strcat(query, " DELETE");
|
||||
findx++;
|
||||
}
|
||||
if (TRIGGER_FOR_UPDATE(tgtype))
|
||||
if (findx > 0)
|
||||
strcat (query, " OR UPDATE");
|
||||
strcat(query, " OR UPDATE");
|
||||
else
|
||||
strcat (query, " UPDATE");
|
||||
sprintf (query, "%s ON %s FOR EACH ROW EXECUTE PROCEDURE %s (",
|
||||
query, tblinfo[i].relname, tgfunc);
|
||||
strcat(query, " UPDATE");
|
||||
sprintf(query, "%s ON %s FOR EACH ROW EXECUTE PROCEDURE %s (",
|
||||
query, tblinfo[i].relname, tgfunc);
|
||||
for (findx = 0; findx < tgnargs; findx++)
|
||||
{
|
||||
char *s, *d;
|
||||
|
||||
for (p = tgargs; ; )
|
||||
char *s,
|
||||
*d;
|
||||
|
||||
for (p = tgargs;;)
|
||||
{
|
||||
p = strchr (p, '\\');
|
||||
p = strchr(p, '\\');
|
||||
if (p == NULL)
|
||||
{
|
||||
fprintf(stderr, "getTables(): relation %s: bad argument string (%s) for trigger %s\n",
|
||||
tblinfo[i].relname,
|
||||
PQgetvalue(res2, i2, i_tgargs),
|
||||
PQgetvalue(res2, i2, i_tgname));
|
||||
tblinfo[i].relname,
|
||||
PQgetvalue(res2, i2, i_tgargs),
|
||||
PQgetvalue(res2, i2, i_tgname));
|
||||
exit_nicely(g_conn);
|
||||
}
|
||||
p++;
|
||||
@@ -1607,23 +1619,23 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
|
||||
p++;
|
||||
continue;
|
||||
}
|
||||
if ( p[0] == '0' && p[1] == '0' && p[2] == '0')
|
||||
if (p[0] == '0' && p[1] == '0' && p[2] == '0')
|
||||
break;
|
||||
}
|
||||
p--;
|
||||
for (s = tgargs, d = &(farg[0]); s < p; )
|
||||
for (s = tgargs, d = &(farg[0]); s < p;)
|
||||
{
|
||||
if (*s == '\'')
|
||||
*d++ = '\\';
|
||||
*d++ = *s++;
|
||||
}
|
||||
*d = 0;
|
||||
sprintf (query, "%s'%s'%s", query, farg,
|
||||
(findx < tgnargs - 1) ? ", " : "");
|
||||
sprintf(query, "%s'%s'%s", query, farg,
|
||||
(findx < tgnargs - 1) ? ", " : "");
|
||||
tgargs = p + 4;
|
||||
}
|
||||
strcat (query, ");\n");
|
||||
tblinfo[i].triggers[i2] = strdup (query);
|
||||
strcat(query, ");\n");
|
||||
tblinfo[i].triggers[i2] = strdup(query);
|
||||
}
|
||||
PQclear(res2);
|
||||
}
|
||||
@@ -1786,19 +1798,19 @@ getTableAttrs(TableInfo *tblinfo, int numTables)
|
||||
if (PQgetvalue(res, j, i_atthasdef)[0] == 't')
|
||||
{
|
||||
PGresult *res2;
|
||||
|
||||
|
||||
if (g_verbose)
|
||||
fprintf(stderr, "%s finding DEFAULT expression for attr: %s %s\n",
|
||||
g_comment_start,
|
||||
tblinfo[i].attnames[j],
|
||||
g_comment_end);
|
||||
|
||||
|
||||
sprintf(q, "SELECT adsrc from pg_attrdef "
|
||||
"where adrelid = '%s'::oid and adnum = %d ",
|
||||
tblinfo[i].oid, j + 1);
|
||||
res2 = PQexec(g_conn, q);
|
||||
if (!res2 ||
|
||||
PQresultStatus(res2) != PGRES_TUPLES_OK)
|
||||
PQresultStatus(res2) != PGRES_TUPLES_OK)
|
||||
{
|
||||
fprintf(stderr, "getTableAttrs(): SELECT (for DEFAULT) failed\n");
|
||||
exit_nicely(g_conn);
|
||||
@@ -2037,11 +2049,11 @@ dumpOneFunc(FILE *fout, FuncInfo *finfo, int i,
|
||||
(finfo[i].retset) ? " SETOF " : "",
|
||||
fmtId(findTypeByOid(tinfo, numTypes, finfo[i].prorettype)),
|
||||
(finfo[i].lang == INTERNALlanguageId) ? finfo[i].prosrc :
|
||||
(finfo[i].lang == ClanguageId) ? finfo[i].probin :
|
||||
(finfo[i].lang == SQLlanguageId) ? finfo[i].prosrc : "unknown",
|
||||
(finfo[i].lang == ClanguageId) ? finfo[i].probin :
|
||||
(finfo[i].lang == SQLlanguageId) ? finfo[i].prosrc : "unknown",
|
||||
(finfo[i].lang == INTERNALlanguageId) ? "INTERNAL" :
|
||||
(finfo[i].lang == ClanguageId) ? "C" :
|
||||
(finfo[i].lang == SQLlanguageId) ? "SQL" : "unknown");
|
||||
(finfo[i].lang == ClanguageId) ? "C" :
|
||||
(finfo[i].lang == SQLlanguageId) ? "SQL" : "unknown");
|
||||
|
||||
fputs(q, fout);
|
||||
|
||||
@@ -2091,13 +2103,13 @@ dumpOprs(FILE *fout, OprInfo *oprinfo, int numOperators,
|
||||
strcmp(oprinfo[i].oprkind, "b") == 0)
|
||||
{
|
||||
sprintf(leftarg, ", LEFTARG = %s ",
|
||||
fmtId(findTypeByOid(tinfo, numTypes, oprinfo[i].oprleft)));
|
||||
fmtId(findTypeByOid(tinfo, numTypes, oprinfo[i].oprleft)));
|
||||
}
|
||||
if (strcmp(oprinfo[i].oprkind, "l") == 0 ||
|
||||
strcmp(oprinfo[i].oprkind, "b") == 0)
|
||||
{
|
||||
sprintf(rightarg, ", RIGHTARG = %s ",
|
||||
fmtId(findTypeByOid(tinfo, numTypes, oprinfo[i].oprright)));
|
||||
fmtId(findTypeByOid(tinfo, numTypes, oprinfo[i].oprright)));
|
||||
}
|
||||
if (strcmp(oprinfo[i].oprcom, "0") == 0)
|
||||
commutator[0] = '\0';
|
||||
@@ -2177,10 +2189,10 @@ dumpAggs(FILE *fout, AggInfo *agginfo, int numAggs,
|
||||
/* skip all the builtin oids */
|
||||
if (atoi(agginfo[i].oid) < g_last_builtin_oid)
|
||||
continue;
|
||||
|
||||
|
||||
sprintf(basetype,
|
||||
"BASETYPE = %s, ",
|
||||
fmtId(findTypeByOid(tinfo, numTypes, agginfo[i].aggbasetype)));
|
||||
fmtId(findTypeByOid(tinfo, numTypes, agginfo[i].aggbasetype)));
|
||||
|
||||
if (strcmp(agginfo[i].aggtransfn1, "-") == 0)
|
||||
sfunc1[0] = '\0';
|
||||
@@ -2203,7 +2215,7 @@ dumpAggs(FILE *fout, AggInfo *agginfo, int numAggs,
|
||||
sprintf(sfunc2,
|
||||
"SFUNC2 = %s, STYPE2 = %s",
|
||||
agginfo[i].aggtransfn2,
|
||||
fmtId(findTypeByOid(tinfo, numTypes, agginfo[i].aggtranstype2)));
|
||||
fmtId(findTypeByOid(tinfo, numTypes, agginfo[i].aggtranstype2)));
|
||||
if (agginfo[i].agginitval2)
|
||||
sprintf(sfunc2, "%s, INITCOND2 = '%s'",
|
||||
sfunc2, agginfo[i].agginitval2);
|
||||
@@ -2257,16 +2269,17 @@ dumpAggs(FILE *fout, AggInfo *agginfo, int numAggs,
|
||||
static char *
|
||||
AddAcl(char *s, const char *add)
|
||||
{
|
||||
char *t;
|
||||
char *t;
|
||||
|
||||
if (s == (char *)NULL)
|
||||
if (s == (char *) NULL)
|
||||
return (strdup(add));
|
||||
|
||||
t=(char *)calloc((strlen(s) + strlen(add)+1),sizeof(char));
|
||||
sprintf(t,"%s,%s",s,add);
|
||||
t = (char *) calloc((strlen(s) + strlen(add) + 1), sizeof(char));
|
||||
sprintf(t, "%s,%s", s, add);
|
||||
|
||||
return(t);
|
||||
return (t);
|
||||
}
|
||||
|
||||
/*
|
||||
* This will take a string of 'arwR' and return a
|
||||
* comma delimited string of SELECT,INSERT,UPDATE,DELETE,RULE
|
||||
@@ -2274,92 +2287,96 @@ AddAcl(char *s, const char *add)
|
||||
static char *
|
||||
GetPrivledges(char *s)
|
||||
{
|
||||
char *acls=NULL;
|
||||
char *acls = NULL;
|
||||
|
||||
/*Grant All == arwR */
|
||||
/* INSERT == ar */
|
||||
/* UPDATE/DELETE == rw */
|
||||
/* SELECT == r */
|
||||
/* RULE == R */
|
||||
/* Grant All == arwR */
|
||||
/* INSERT == ar */
|
||||
/* UPDATE/DELETE == rw */
|
||||
/* SELECT == r */
|
||||
/* RULE == R */
|
||||
|
||||
if (strstr(s,"arwR"))
|
||||
return(strdup("ALL"));
|
||||
if (strstr(s, "arwR"))
|
||||
return (strdup("ALL"));
|
||||
|
||||
if (strstr(s,"ar"))
|
||||
acls=AddAcl(acls,"INSERT");
|
||||
if (strstr(s, "ar"))
|
||||
acls = AddAcl(acls, "INSERT");
|
||||
|
||||
if (strstr(s,"rw"))
|
||||
acls=AddAcl(acls,"UPDATE,DELETE");
|
||||
else
|
||||
if (strchr(s,'r'))
|
||||
acls=AddAcl(acls,"SELECT");
|
||||
if (strstr(s, "rw"))
|
||||
acls = AddAcl(acls, "UPDATE,DELETE");
|
||||
else if (strchr(s, 'r'))
|
||||
acls = AddAcl(acls, "SELECT");
|
||||
|
||||
if (strchr(s,'R'))
|
||||
acls=AddAcl(acls,"RULES");
|
||||
if (strchr(s, 'R'))
|
||||
acls = AddAcl(acls, "RULES");
|
||||
|
||||
return(acls);
|
||||
return (acls);
|
||||
}
|
||||
|
||||
/* This will parse the acl string of TableInfo
|
||||
* into a two deminsional aray:
|
||||
* user | Privledges
|
||||
* user | Privledges
|
||||
* So to reset the acls I need to grant these priviledges
|
||||
* to user
|
||||
*/
|
||||
static ACL *
|
||||
ParseACL(const char *acls,int *count)
|
||||
ParseACL(const char *acls, int *count)
|
||||
{
|
||||
ACL *ParsedAcl=NULL;
|
||||
int i,
|
||||
len,
|
||||
NumAcls=1, /*There is always public*/
|
||||
AclLen=0;
|
||||
char *s=NULL,
|
||||
*user=NULL,
|
||||
*priv=NULL,
|
||||
*tok;
|
||||
ACL *ParsedAcl = NULL;
|
||||
int i,
|
||||
len,
|
||||
NumAcls = 1, /* There is always public */
|
||||
AclLen = 0;
|
||||
char *s = NULL,
|
||||
*user = NULL,
|
||||
*priv = NULL,
|
||||
*tok;
|
||||
|
||||
AclLen=strlen(acls);
|
||||
AclLen = strlen(acls);
|
||||
|
||||
if (AclLen == 0) {
|
||||
*count=0;
|
||||
if (AclLen == 0)
|
||||
{
|
||||
*count = 0;
|
||||
return (ACL *) NULL;
|
||||
}
|
||||
|
||||
for (i=0;i<AclLen;i++)
|
||||
for (i = 0; i < AclLen; i++)
|
||||
if (acls[i] == ',')
|
||||
NumAcls++;
|
||||
|
||||
ParsedAcl=(ACL *)calloc(AclLen,sizeof(ACL));
|
||||
if (!ParsedAcl) {
|
||||
fprintf(stderr,"Could not allocate space for ACLS!\n");
|
||||
ParsedAcl = (ACL *) calloc(AclLen, sizeof(ACL));
|
||||
if (!ParsedAcl)
|
||||
{
|
||||
fprintf(stderr, "Could not allocate space for ACLS!\n");
|
||||
exit_nicely(g_conn);
|
||||
}
|
||||
|
||||
s=strdup(acls);
|
||||
s = strdup(acls);
|
||||
|
||||
/* Setup up public*/
|
||||
ParsedAcl[0].user=strdup("Public");
|
||||
tok=strtok(s,",");
|
||||
ParsedAcl[0].privledges=GetPrivledges(strchr(tok,'='));
|
||||
/* Setup up public */
|
||||
ParsedAcl[0].user = strdup("Public");
|
||||
tok = strtok(s, ",");
|
||||
ParsedAcl[0].privledges = GetPrivledges(strchr(tok, '='));
|
||||
|
||||
/*Do the rest of the users*/
|
||||
i=1;
|
||||
while ((i < NumAcls) && ((tok=strtok(NULL,",")) != (char *)NULL)) {
|
||||
/*User name is string up to = in tok*/
|
||||
len=strchr(tok,'=') - tok -1 ;
|
||||
user=(char*)calloc(len+1,sizeof(char));
|
||||
strncpy(user,tok+1,len);
|
||||
if (user[len-1] == '\"')
|
||||
user[len-1]=(char)NULL;
|
||||
priv=GetPrivledges(tok+len+2);
|
||||
ParsedAcl[i].user=user;
|
||||
ParsedAcl[i].privledges=priv;
|
||||
/* Do the rest of the users */
|
||||
i = 1;
|
||||
while ((i < NumAcls) && ((tok = strtok(NULL, ",")) != (char *) NULL))
|
||||
{
|
||||
/* User name is string up to = in tok */
|
||||
len = strchr(tok, '=') - tok - 1;
|
||||
user = (char *) calloc(len + 1, sizeof(char));
|
||||
strncpy(user, tok + 1, len);
|
||||
if (user[len - 1] == '\"')
|
||||
user[len - 1] = (char) NULL;
|
||||
priv = GetPrivledges(tok + len + 2);
|
||||
ParsedAcl[i].user = user;
|
||||
ParsedAcl[i].privledges = priv;
|
||||
i++;
|
||||
}
|
||||
|
||||
*count=NumAcls;
|
||||
*count = NumAcls;
|
||||
return (ParsedAcl);
|
||||
}
|
||||
|
||||
/*
|
||||
* dumpTables:
|
||||
* write out to fout all the user-define tables
|
||||
@@ -2379,8 +2396,8 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables,
|
||||
char **parentRels; /* list of names of parent relations */
|
||||
int numParents;
|
||||
int actual_atts; /* number of attrs in this CREATE statment */
|
||||
ACL *ACLlist;
|
||||
|
||||
ACL *ACLlist;
|
||||
|
||||
/* First - dump SEQUENCEs */
|
||||
for (i = 0; i < numTables; i++)
|
||||
{
|
||||
@@ -2392,10 +2409,10 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables,
|
||||
dumpSequence(fout, tblinfo[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (i = 0; i < numTables; i++)
|
||||
{
|
||||
if (tblinfo[i].sequence) /* already dumped */
|
||||
if (tblinfo[i].sequence)/* already dumped */
|
||||
continue;
|
||||
|
||||
if (!tablename || (!strcmp(tblinfo[i].relname, tablename)))
|
||||
@@ -2427,7 +2444,7 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables,
|
||||
|
||||
sprintf(q, "%s(%d)",
|
||||
q,
|
||||
tblinfo[i].atttypmod[j]-VARHDRSZ);
|
||||
tblinfo[i].atttypmod[j] - VARHDRSZ);
|
||||
actual_atts++;
|
||||
}
|
||||
else if (!strcmp(tblinfo[i].typnames[j], "varchar"))
|
||||
@@ -2440,7 +2457,7 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables,
|
||||
|
||||
sprintf(q, "%s(%d)",
|
||||
q,
|
||||
tblinfo[i].atttypmod[j]-VARHDRSZ);
|
||||
tblinfo[i].atttypmod[j] - VARHDRSZ);
|
||||
actual_atts++;
|
||||
}
|
||||
else
|
||||
@@ -2486,25 +2503,28 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables,
|
||||
}
|
||||
strcat(q, ";\n");
|
||||
fputs(q, fout);
|
||||
|
||||
if (acls) {
|
||||
|
||||
if (acls)
|
||||
{
|
||||
ACLlist = ParseACL(tblinfo[i].relacl, &l);
|
||||
if (ACLlist == (ACL *)NULL)
|
||||
if (ACLlist == (ACL *) NULL)
|
||||
if (l == 0)
|
||||
continue;
|
||||
else {
|
||||
fprintf(stderr,"Could not parse ACL list for %s...Exiting!\n",
|
||||
tblinfo[i].relname);
|
||||
else
|
||||
{
|
||||
fprintf(stderr, "Could not parse ACL list for %s...Exiting!\n",
|
||||
tblinfo[i].relname);
|
||||
exit_nicely(g_conn);
|
||||
}
|
||||
}
|
||||
|
||||
/* Revoke Default permissions for PUBLIC */
|
||||
fprintf(fout,
|
||||
"REVOKE ALL on %s from PUBLIC;\n",
|
||||
"REVOKE ALL on %s from PUBLIC;\n",
|
||||
tblinfo[i].relname);
|
||||
|
||||
for(k = 0; k < l; k++) {
|
||||
if (ACLlist[k].privledges != (char *)NULL)
|
||||
for (k = 0; k < l; k++)
|
||||
{
|
||||
if (ACLlist[k].privledges != (char *) NULL)
|
||||
fprintf(fout,
|
||||
"GRANT %s on %s to %s;\n",
|
||||
ACLlist[k].privledges, tblinfo[i].relname,
|
||||
@@ -2913,16 +2933,17 @@ dumpSequence(FILE *fout, TableInfo tbinfo)
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
dumpTriggers(FILE *fout, const char *tablename,
|
||||
TableInfo *tblinfo, int numTables)
|
||||
static void
|
||||
dumpTriggers(FILE *fout, const char *tablename,
|
||||
TableInfo *tblinfo, int numTables)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
int i,
|
||||
j;
|
||||
|
||||
if (g_verbose)
|
||||
fprintf(stderr, "%s dumping out triggers %s\n",
|
||||
g_comment_start, g_comment_end);
|
||||
|
||||
|
||||
for (i = 0; i < numTables; i++)
|
||||
{
|
||||
if (tablename && strcmp(tblinfo[i].relname, tablename))
|
||||
@@ -2934,4 +2955,3 @@ dumpTriggers(FILE *fout, const char *tablename,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user