pg_exec_query().
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/_deadcode/Attic/version.c,v 1.11 1998/01/05 16:39:07 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/_deadcode/Attic/version.c,v 1.12 1998/06/04 17:26:38 momjian Exp $
*
* NOTES
* At the point the version is defined, 2 physical relations are created
* CommitTransactionCommand(); StartTransactionCommand();
*/
CommandCounterIncrement();
- pg_exec_query(query, (char **) NULL, (Oid *) NULL, 0);
+ pg_exec_query(query);
}
#endif
sprintf(query_buf, "SELECT * INTO TABLE %s from %s where 1 =2",
vname, bname);
- pg_exec_query(query_buf, (char **) NULL, (Oid *) NULL, 0);
+ pg_exec_query(query_buf);
/*
* Creating the ``v_added'' relation
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.13 1998/04/27 04:05:11 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.14 1998/06/04 17:26:38 momjian Exp $
*
*-------------------------------------------------------------------------
*/
sprintf(buf, "insert into pg_database (datname, datdba, datpath)"
" values (\'%s\', \'%d\', \'%s\');", dbname, user_id, loc);
- pg_exec_query(buf, (char **) NULL, (Oid *) NULL, 0);
+ pg_exec_query(buf);
}
void
*/
sprintf(buf, "delete from pg_database where pg_database.oid = \'%d\'::oid",
db_id);
- pg_exec_query(buf, (char **) NULL, (Oid *) NULL, 0);
+ pg_exec_query(buf);
/*
* remove the data directory. If the DELETE above failed, this will
* file to its final name.
*/
sprintf(sql, "copy %s to '%s' using delimiters %s", ShadowRelationName, tempname, CRYPT_PWD_FILE_SEPCHAR);
- pg_exec_query(sql, (char **) NULL, (Oid *) NULL, 0);
+ pg_exec_query(sql);
rename(tempname, filename);
free((void *) tempname);
}
strcat(sql_end, ")");
- pg_exec_query(sql, (char **) NULL, (Oid *) NULL, 0);
+ pg_exec_query(sql);
/*
* Add the stuff here for groups.
{
sql_end += strlen(sql_end);
sprintf(sql_end, " where usename = '%s'", stmt->user);
- pg_exec_query(sql, (char **) NULL, (Oid *) NULL, 0);
+ pg_exec_query(sql);
}
/* do the pg_group stuff here */
elog(NOTICE, "Dropping database %s", dbase[ndbase]);
sprintf(sql, "drop database %s", dbase[ndbase]);
free((void *) dbase[ndbase]);
- pg_exec_query(sql, (char **) NULL, (Oid *) NULL, 0);
+ pg_exec_query(sql);
}
if (dbase)
free((void *) dbase);
* Remove the user from the pg_shadow table
*/
sprintf(sql, "delete from %s where usename = '%s'", ShadowRelationName, user);
- pg_exec_query(sql, (char **) NULL, (Oid *) NULL, 0);
+ pg_exec_query(sql);
UpdatePgPwdFile(sql);
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/libpq/Attic/be-pqexec.c,v 1.15 1998/02/26 04:31:45 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/libpq/Attic/be-pqexec.c,v 1.16 1998/06/04 17:26:39 momjian Exp $
*
*-------------------------------------------------------------------------
*/
* end up on the top of the portal stack.
* ----------------
*/
- pg_exec_query_dest(query, (char **) NULL, (Oid *) NULL, 0, Local);
+ pg_exec_query_dest(query, Local);
/* ----------------
* pop the portal off the portal stack and return the
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/main/main.c,v 1.19 1998/05/12 21:43:59 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/main/main.c,v 1.20 1998/06/04 17:26:40 momjian Exp $
*
*-------------------------------------------------------------------------
*/
exit(BootstrapMain(argc - 1, argv + 1)); /* remove the -boot arg
* from the command line */
else
- exit(PostgresMain(argc, argv));
+ exit(PostgresMain(argc, argv, argc, argv));
}
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.79 1998/05/29 17:10:07 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.80 1998/06/04 17:26:41 momjian Exp $
*
* NOTES
*
static int NextBackendId = MAXINT; /* XXX why? */
static char *progname = (char *) NULL;
-static char **argv_name;
+static char **real_argv;
+static int real_argc;
/*
* Default Values
int silentflag = 0;
bool DataDirOK; /* We have a usable PGDATA value */
char hostbuf[MAXHOSTNAMELEN];
-
- progname = argv[0];
- argv_name = &argv[0];
+ int nonblank_argc;
+ /*
+ * We need three params so we can display status. If we don't
+ * get them from the user, let's make them ourselves.
+ */
+ if (argc < 4)
+ {
+ int i;
+ char *new_argv[5];
+
+ for (i=0; i < argc; i++)
+ new_argv[i] = argv[i];
+ for (; i < 4; i++)
+ new_argv[i] = "";
+ new_argv[4] = NULL;
+ execv(new_argv[0], new_argv);
+ perror("");
+ /* How did we get here, error! */
+ fprintf(stderr, "PostmasterMain execv failed on %s\n", argv[0]);
+ exit(1);
+ }
+
+ progname = argv[0];
+ real_argv = argv;
+ real_argc = argc;
+
+ /* don't process any dummy args we placed at the end for status display */
+ for (nonblank_argc = argc; argc > 0; nonblank_argc--)
+ if (argv[argc-1] != NULL && argv[argc-1][0] != '\0')
+ break;
+
/*
* for security, no dir or file created can be group or other
* accessible
DataDir = getenv("PGDATA"); /* default value */
opterr = 0;
- while ((opt = getopt(argc, argv, "a:B:b:D:dim:Mno:p:Ss")) != EOF)
+ while ((opt = getopt(nonblank_argc, argv, "a:B:b:D:dim:Mno:p:Ss")) != EOF)
{
switch (opt)
{
* Turn on debugging for the postmaster and the backend
* servers descended from it.
*/
- if ((optind < argc) && *argv[optind] != '-')
+ if ((optind < nonblank_argc) && *argv[optind] != '-')
{
DebugLvl = atoi(argv[optind]);
optind++;
* a big win.
*/
- *argv_name = Execfile;
+ real_argv[0] = Execfile;
/* Tell the backend it is being called from the postmaster */
av[ac++] = "-p";
fprintf(stderr, ")\n");
}
- return(PostgresMain(ac, av));
+ return(PostgresMain(ac, av, real_argc, real_argv));
}
/*
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteDefine.c,v 1.14 1998/01/13 04:04:12 scrappy Exp $
+ * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteDefine.c,v 1.15 1998/06/04 17:26:44 momjian Exp $
*
*-------------------------------------------------------------------------
*/
rulname, evtype, eventrel_oid, evslot_index, actionbuf,
qualbuf, is_instead);
- pg_exec_query(rulebuf, (char **) NULL, (Oid *) NULL, 0);
+ pg_exec_query(rulebuf);
return (LastOidProcessed);
}
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.72 1998/05/29 17:00:15 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.73 1998/06/04 17:26:45 momjian Exp $
*
* NOTES
* this is the "main" module of the postgres backend and
/*static bool EnableRewrite = true; , never changes why have it*/
CommandDest whereToSendOutput;
+const char **ps_status; /* this is our 'ps' status, argv[3] */
#ifdef LOCK_MGR_DEBUG
extern int lockDebug;
*/
void
-pg_exec_query(char *query_string, char **argv, Oid *typev, int nargs)
+pg_exec_query(char *query_string)
{
- pg_exec_query_dest(query_string, argv, typev, nargs, whereToSendOutput);
+ pg_exec_query_dest(query_string, whereToSendOutput);
}
void
pg_exec_query_dest(char *query_string, /* string to execute */
- char **argv, /* arguments */
- Oid *typev, /* argument types */
- int nargs, /* number of arguments */
CommandDest dest) /* where results should go */
{
List *plan_list;
QueryTreeList *querytree_list;
/* plan the queries */
- plan_list = pg_parse_and_plan(query_string, typev, nargs, &querytree_list, dest);
+ plan_list = pg_parse_and_plan(query_string, NULL, 0, &querytree_list, dest);
if (QueryCancel)
CancelQuery();
time(&tim);
printf("\tProcessQuery() at %s\n", ctime(&tim));
}
- ProcessQuery(querytree, plan, argv, typev, nargs, dest);
+ ProcessQuery(querytree, plan, dest);
}
if (ShowExecutorStats)
* ----------------------------------------------------------------
*/
int
-PostgresMain(int argc, char *argv[])
+PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[])
{
bool flagC = false,
flagQ = false,
puts("\t----------------\n");
}
+ /* ----------------
+ * set process params for ps
+ * ----------------
+ */
+ if (IsUnderPostmaster)
+ {
+ int i;
+
+ Assert(real_argc >= 4);
+ real_argv[1] = userName;
+ real_argv[2] = DBName;
+ ps_status = (const char **)&real_argv[3];
+ *ps_status = "idle";
+ for (i = 4; i < real_argc; i++)
+ real_argv[i] = ""; /* blank them */
+ }
+ /* we just put a dummy here so we don't have to test everywhere */
+ else ps_status = malloc(sizeof(char *));
+
/* ----------------
* initialize portal file descriptors
* ----------------
if (!IsUnderPostmaster)
{
puts("\nPOSTGRES backend interactive interface");
- puts("$Revision: 1.72 $ $Date: 1998/05/29 17:00:15 $");
+ puts("$Revision: 1.73 $ $Date: 1998/06/04 17:26:45 $");
}
/* ----------------
StartTransactionCommand();
HandleFunctionRequest();
+ *ps_status = "idle";
break;
/* ----------------
}
StartTransactionCommand();
- pg_exec_query(parser_input, (char **) NULL, (Oid *) NULL, 0);
+ pg_exec_query(parser_input);
+
+ *ps_status = "idle";
if (ShowStats)
ShowUsage();
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/tcop/pquery.c,v 1.15 1998/02/26 04:36:32 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/tcop/pquery.c,v 1.16 1998/06/04 17:26:47 momjian Exp $
*
*-------------------------------------------------------------------------
*/
static char *CreateOperationTag(int operationType);
static void ProcessQueryDesc(QueryDesc *queryDesc);
+extern const char **ps_status; /* from postgres.c */
+
/* ----------------------------------------------------------------
* CreateQueryDesc
plan = queryDesc->plantree;
operation = queryDesc->operation;
- tag = CreateOperationTag(operation);
+ *ps_status = tag = CreateOperationTag(operation);
dest = queryDesc->dest;
/* ----------------
void
ProcessQuery(Query *parsetree,
Plan *plan,
- char *argv[],
- Oid *typev,
- int nargs,
CommandDest dest)
{
QueryDesc *queryDesc;
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.38 1998/02/26 04:36:36 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.39 1998/06/04 17:26:48 momjian Exp $
*
*-------------------------------------------------------------------------
*/
void AlterUser(AlterUserStmt *stmt);
void RemoveUser(char *username);
+extern const char **ps_status; /* from postgres.c */
+
/* ----------------
* CHECK_IF_ABORTED() is used to avoid doing unnecessary
* processing within an aborted transaction block.
switch (stmt->command)
{
case BEGIN_TRANS:
- commandTag = "BEGIN";
+ *ps_status = commandTag = "BEGIN";
CHECK_IF_ABORTED();
BeginTransactionBlock();
break;
case END_TRANS:
- commandTag = "END";
+ *ps_status = commandTag = "END";
EndTransactionBlock();
break;
case ABORT_TRANS:
- commandTag = "ABORT";
+ *ps_status = commandTag = "ABORT";
UserAbortTransactionBlock();
break;
}
{
ClosePortalStmt *stmt = (ClosePortalStmt *) parsetree;
- commandTag = "CLOSE";
+ *ps_status = commandTag = "CLOSE";
CHECK_IF_ABORTED();
PerformPortalClose(stmt->portalname, dest);
bool forward;
int count;
- commandTag = (stmt->ismove) ? "MOVE" : "FETCH";
+ *ps_status = commandTag = (stmt->ismove) ? "MOVE" : "FETCH";
CHECK_IF_ABORTED();
forward = (bool) (stmt->direction == FORWARD);
*
*/
case T_CreateStmt:
- commandTag = "CREATE";
+ *ps_status = commandTag = "CREATE";
CHECK_IF_ABORTED();
DefineRelation((CreateStmt *) parsetree);
List *args = stmt->relNames;
Relation rel;
- commandTag = "DROP";
+ *ps_status = commandTag = "DROP";
CHECK_IF_ABORTED();
foreach(arg, args)
{
CopyStmt *stmt = (CopyStmt *) parsetree;
- commandTag = "COPY";
+ *ps_status = commandTag = "COPY";
CHECK_IF_ABORTED();
DoCopy(stmt->relname,
{
AddAttrStmt *stmt = (AddAttrStmt *) parsetree;
- commandTag = "ADD";
+ *ps_status = commandTag = "ADD";
CHECK_IF_ABORTED();
/*
{
RenameStmt *stmt = (RenameStmt *) parsetree;
- commandTag = "RENAME";
+ *ps_status = commandTag = "RENAME";
CHECK_IF_ABORTED();
relname = stmt->relname;
AclItem *aip;
unsigned modechg;
- commandTag = "CHANGE";
+ *ps_status = commandTag = "CHANGE";
CHECK_IF_ABORTED();
aip = stmt->aclitem;
{
DefineStmt *stmt = (DefineStmt *) parsetree;
- commandTag = "CREATE";
+ *ps_status = commandTag = "CREATE";
CHECK_IF_ABORTED();
switch (stmt->defType)
{
ViewStmt *stmt = (ViewStmt *) parsetree;
- commandTag = "CREATE";
+ *ps_status = commandTag = "CREATE";
CHECK_IF_ABORTED();
DefineView(stmt->viewname, stmt->query); /* retrieve parsetree */
}
break;
case T_ProcedureStmt: /* CREATE FUNCTION */
- commandTag = "CREATE";
+ *ps_status = commandTag = "CREATE";
CHECK_IF_ABORTED();
CreateFunction((ProcedureStmt *) parsetree, dest); /* everything */
break;
{
IndexStmt *stmt = (IndexStmt *) parsetree;
- commandTag = "CREATE";
+ *ps_status = commandTag = "CREATE";
CHECK_IF_ABORTED();
DefineIndex(stmt->relname, /* relation name */
stmt->idxname, /* index name */
if (aclcheck_result != ACLCHECK_OK)
elog(ERROR, "%s: %s", relname, aclcheck_error_strings[aclcheck_result]);
#endif
- commandTag = "CREATE";
+ *ps_status = commandTag = "CREATE";
CHECK_IF_ABORTED();
DefineQueryRewrite(stmt);
}
break;
case T_CreateSeqStmt:
- commandTag = "CREATE";
+ *ps_status = commandTag = "CREATE";
CHECK_IF_ABORTED();
DefineSequence((CreateSeqStmt *) parsetree);
{
ExtendStmt *stmt = (ExtendStmt *) parsetree;
- commandTag = "EXTEND";
+ *ps_status = commandTag = "EXTEND";
CHECK_IF_ABORTED();
ExtendIndex(stmt->idxname, /* index name */
{
RemoveStmt *stmt = (RemoveStmt *) parsetree;
- commandTag = "DROP";
+ *ps_status = commandTag = "DROP";
CHECK_IF_ABORTED();
switch (stmt->removeType)
{
RemoveAggrStmt *stmt = (RemoveAggrStmt *) parsetree;
- commandTag = "DROP";
+ *ps_status = commandTag = "DROP";
CHECK_IF_ABORTED();
RemoveAggregate(stmt->aggname, stmt->aggtype);
}
{
RemoveFuncStmt *stmt = (RemoveFuncStmt *) parsetree;
- commandTag = "DROP";
+ *ps_status = commandTag = "DROP";
CHECK_IF_ABORTED();
RemoveFunction(stmt->funcname,
length(stmt->args),
char *type1 = (char *) NULL;
char *type2 = (char *) NULL;
- commandTag = "DROP";
+ *ps_status = commandTag = "DROP";
CHECK_IF_ABORTED();
if (lfirst(stmt->args) != NULL)
{
CreatedbStmt *stmt = (CreatedbStmt *) parsetree;
- commandTag = "CREATEDB";
+ *ps_status = commandTag = "CREATEDB";
CHECK_IF_ABORTED();
createdb(stmt->dbname, stmt->dbpath);
}
{
DestroydbStmt *stmt = (DestroydbStmt *) parsetree;
- commandTag = "DESTROYDB";
+ *ps_status = commandTag = "DESTROYDB";
CHECK_IF_ABORTED();
destroydb(stmt->dbname);
}
{
NotifyStmt *stmt = (NotifyStmt *) parsetree;
- commandTag = "NOTIFY";
+ *ps_status = commandTag = "NOTIFY";
CHECK_IF_ABORTED();
Async_Notify(stmt->relname);
{
ListenStmt *stmt = (ListenStmt *) parsetree;
- commandTag = "LISTEN";
+ *ps_status = commandTag = "LISTEN";
CHECK_IF_ABORTED();
Async_Listen(stmt->relname, MyProcPid);
FILE *fp;
char *filename;
- commandTag = "LOAD";
+ *ps_status = commandTag = "LOAD";
CHECK_IF_ABORTED();
filename = stmt->filename;
{
ClusterStmt *stmt = (ClusterStmt *) parsetree;
- commandTag = "CLUSTER";
+ *ps_status = commandTag = "CLUSTER";
CHECK_IF_ABORTED();
cluster(stmt->relname, stmt->indexname);
break;
case T_VacuumStmt:
- commandTag = "VACUUM";
+ *ps_status = commandTag = "VACUUM";
CHECK_IF_ABORTED();
vacuum(((VacuumStmt *) parsetree)->vacrel,
((VacuumStmt *) parsetree)->verbose,
{
ExplainStmt *stmt = (ExplainStmt *) parsetree;
- commandTag = "EXPLAIN";
+ *ps_status = commandTag = "EXPLAIN";
CHECK_IF_ABORTED();
ExplainQuery(stmt->query, stmt->verbose, dest);
{
RecipeStmt *stmt = (RecipeStmt *) parsetree;
- commandTag = "EXECUTE RECIPE";
+ *ps_status = commandTag = "EXECUTE RECIPE";
CHECK_IF_ABORTED();
beginRecipe(stmt);
}
VariableSetStmt *n = (VariableSetStmt *) parsetree;
SetPGVariable(n->name, n->value);
- commandTag = "SET VARIABLE";
+ *ps_status = commandTag = "SET VARIABLE";
}
break;
VariableShowStmt *n = (VariableShowStmt *) parsetree;
GetPGVariable(n->name);
- commandTag = "SHOW VARIABLE";
+ *ps_status = commandTag = "SHOW VARIABLE";
}
break;
VariableResetStmt *n = (VariableResetStmt *) parsetree;
ResetPGVariable(n->name);
- commandTag = "RESET VARIABLE";
+ *ps_status = commandTag = "RESET VARIABLE";
}
break;
* ******************************** TRIGGER statements *******************************
*/
case T_CreateTrigStmt:
- commandTag = "CREATE";
+ *ps_status = commandTag = "CREATE";
CHECK_IF_ABORTED();
CreateTrigger((CreateTrigStmt *) parsetree);
break;
case T_DropTrigStmt:
- commandTag = "DROP";
+ *ps_status = commandTag = "DROP";
CHECK_IF_ABORTED();
DropTrigger((DropTrigStmt *) parsetree);
* ************* PROCEDURAL LANGUAGE statements *****************
*/
case T_CreatePLangStmt:
- commandTag = "CREATE";
+ *ps_status = commandTag = "CREATE";
CHECK_IF_ABORTED();
CreateProceduralLanguage((CreatePLangStmt *) parsetree);
break;
case T_DropPLangStmt:
- commandTag = "DROP";
+ *ps_status = commandTag = "DROP";
CHECK_IF_ABORTED();
DropProceduralLanguage((DropPLangStmt *) parsetree);
*
*/
case T_CreateUserStmt:
- commandTag = "CREATE USER";
+ *ps_status = commandTag = "CREATE USER";
CHECK_IF_ABORTED();
DefineUser((CreateUserStmt *) parsetree);
break;
case T_AlterUserStmt:
- commandTag = "ALTER USER";
+ *ps_status = commandTag = "ALTER USER";
CHECK_IF_ABORTED();
AlterUser((AlterUserStmt *) parsetree);
break;
case T_DropUserStmt:
- commandTag = "DROP USER";
+ *ps_status = commandTag = "DROP USER";
CHECK_IF_ABORTED();
RemoveUser(((DropUserStmt *) parsetree)->user);
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: pquery.h,v 1.9 1998/02/26 04:43:40 momjian Exp $
+ * $Id: pquery.h,v 1.10 1998/06/04 17:26:49 momjian Exp $
*
*-------------------------------------------------------------------------
*/
CommandDest dest);
extern void
-ProcessQuery(Query *parsetree, Plan *plan, char *argv[],
- Oid *typev, int nargs, CommandDest dest);
+ProcessQuery(Query *parsetree, Plan *plan, CommandDest dest);
#endif /* pqueryIncluded */
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: tcopprot.h,v 1.13 1998/05/29 17:00:28 momjian Exp $
+ * $Id: tcopprot.h,v 1.14 1998/06/04 17:26:49 momjian Exp $
*
* OLD COMMENTS
* This file was created so that other c files could get the two
extern List *
pg_parse_and_plan(char *query_string, Oid *typev, int nargs,
QueryTreeList **queryListP, CommandDest dest);
-extern void pg_exec_query(char *query_string, char **argv, Oid *typev, int nargs);
+extern void pg_exec_query(char *query_string);
extern void
-pg_exec_query_dest(char *query_string, char **argv, Oid *typev,
- int nargs, CommandDest dest);
+pg_exec_query_dest(char *query_string, CommandDest dest);
#endif /* BOOTSTRAP_HEADER */
extern void die(SIGNAL_ARGS);
extern void FloatExceptionHandler(SIGNAL_ARGS);
extern void CancelQuery(void);
-extern int PostgresMain(int argc, char *argv[]);
+extern int PostgresMain(int argc, char *argv[],
+ int real_argc, char *real_argv[]);
extern void ResetUsage(void);
extern void ShowUsage(void);