@ -10,7 +10,7 @@
*
*
*
*
* IDENTIFICATION
* IDENTIFICATION
* $ Header : / cvsroot / pgsql / src / backend / tcop / utility . c , v 1.126 2002 / 02 / 24 20 : 20 : 20 tgl Exp $
* $ Header : / cvsroot / pgsql / src / backend / tcop / utility . c , v 1.127 2002 / 02 / 26 22 : 47 : 09 tgl Exp $
*
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
*/
@ -44,7 +44,6 @@
# include "rewrite/rewriteRemove.h"
# include "rewrite/rewriteRemove.h"
# include "tcop/utility.h"
# include "tcop/utility.h"
# include "utils/acl.h"
# include "utils/acl.h"
# include "utils/ps_status.h"
# include "utils/syscache.h"
# include "utils/syscache.h"
# include "utils/temprel.h"
# include "utils/temprel.h"
# include "access/xlog.h"
# include "access/xlog.h"
@ -130,18 +129,31 @@ CheckDropPermissions(char *name, char rightkind)
}
}
/* ----------------
/*
* ProcessUtility
* general utility function invoker
* general utility function invoker
* - - - - - - - - - - - - - - - -
*
* parsetree : the parse tree for the utility statement
* dest : where to send results
* completionTag : points to a buffer of size COMPLETION_TAG_BUFSIZE
* in which to store a command completion status string .
*
* completionTag is only set nonempty if we want to return a nondefault
* status ( currently , only used for MOVE / FETCH ) .
*
* completionTag may be NULL if caller doesn ' t want a status string .
*/
*/
void
void
ProcessUtility ( Node * parsetree ,
ProcessUtility ( Node * parsetree ,
CommandDest dest )
CommandDest dest ,
char * completionTag )
{
{
char * commandTag = NULL ;
char * relname ;
char * relname ;
char * relationName ;
char * relationName ;
if ( completionTag )
completionTag [ 0 ] = ' \0 ' ;
switch ( nodeTag ( parsetree ) )
switch ( nodeTag ( parsetree ) )
{
{
/*
/*
@ -155,17 +167,14 @@ ProcessUtility(Node *parsetree,
switch ( stmt - > command )
switch ( stmt - > command )
{
{
case BEGIN_TRANS :
case BEGIN_TRANS :
set_ps_display ( commandTag = " BEGIN " ) ;
BeginTransactionBlock ( ) ;
BeginTransactionBlock ( ) ;
break ;
break ;
case COMMIT :
case COMMIT :
set_ps_display ( commandTag = " COMMIT " ) ;
EndTransactionBlock ( ) ;
EndTransactionBlock ( ) ;
break ;
break ;
case ROLLBACK :
case ROLLBACK :
set_ps_display ( commandTag = " ROLLBACK " ) ;
UserAbortTransactionBlock ( ) ;
UserAbortTransactionBlock ( ) ;
break ;
break ;
}
}
@ -180,8 +189,6 @@ ProcessUtility(Node *parsetree,
{
{
ClosePortalStmt * stmt = ( ClosePortalStmt * ) parsetree ;
ClosePortalStmt * stmt = ( ClosePortalStmt * ) parsetree ;
set_ps_display ( commandTag = " CLOSE " ) ;
PerformPortalClose ( stmt - > portalname , dest ) ;
PerformPortalClose ( stmt - > portalname , dest ) ;
}
}
break ;
break ;
@ -193,8 +200,6 @@ ProcessUtility(Node *parsetree,
bool forward ;
bool forward ;
int count ;
int count ;
set_ps_display ( commandTag = ( stmt - > ismove ) ? " MOVE " : " FETCH " ) ;
SetQuerySnapshot ( ) ;
SetQuerySnapshot ( ) ;
forward = ( bool ) ( stmt - > direction = = FORWARD ) ;
forward = ( bool ) ( stmt - > direction = = FORWARD ) ;
@ -204,8 +209,9 @@ ProcessUtility(Node *parsetree,
*/
*/
count = stmt - > howMany ;
count = stmt - > howMany ;
PerformPortalFetch ( portalName , forward , count , commandTag ,
PerformPortalFetch ( portalName , forward , count ,
( stmt - > ismove ) ? None : dest ) ; /* /dev/null for MOVE */
( stmt - > ismove ) ? None : dest ,
completionTag ) ;
}
}
break ;
break ;
@ -215,8 +221,6 @@ ProcessUtility(Node *parsetree,
*
*
*/
*/
case T_CreateStmt :
case T_CreateStmt :
set_ps_display ( commandTag = " CREATE " ) ;
DefineRelation ( ( CreateStmt * ) parsetree , RELKIND_RELATION ) ;
DefineRelation ( ( CreateStmt * ) parsetree , RELKIND_RELATION ) ;
/*
/*
@ -234,8 +238,6 @@ ProcessUtility(Node *parsetree,
List * args = stmt - > names ;
List * args = stmt - > names ;
List * arg ;
List * arg ;
set_ps_display ( commandTag = " DROP " ) ;
foreach ( arg , args )
foreach ( arg , args )
{
{
relname = strVal ( lfirst ( arg ) ) ;
relname = strVal ( lfirst ( arg ) ) ;
@ -296,8 +298,6 @@ ProcessUtility(Node *parsetree,
{
{
Relation rel ;
Relation rel ;
set_ps_display ( commandTag = " TRUNCATE " ) ;
relname = ( ( TruncateStmt * ) parsetree ) - > relName ;
relname = ( ( TruncateStmt * ) parsetree ) - > relName ;
if ( ! allowSystemTableMods & & IsSystemRelationName ( relname ) )
if ( ! allowSystemTableMods & & IsSystemRelationName ( relname ) )
elog ( ERROR , " TRUNCATE cannot be used on system tables. '%s' is a system table " ,
elog ( ERROR , " TRUNCATE cannot be used on system tables. '%s' is a system table " ,
@ -325,8 +325,6 @@ ProcessUtility(Node *parsetree,
statement = ( ( CommentStmt * ) parsetree ) ;
statement = ( ( CommentStmt * ) parsetree ) ;
set_ps_display ( commandTag = " COMMENT " ) ;
CommentObject ( statement - > objtype , statement - > objname ,
CommentObject ( statement - > objtype , statement - > objname ,
statement - > objproperty , statement - > objlist ,
statement - > objproperty , statement - > objlist ,
statement - > comment ) ;
statement - > comment ) ;
@ -337,8 +335,6 @@ ProcessUtility(Node *parsetree,
{
{
CopyStmt * stmt = ( CopyStmt * ) parsetree ;
CopyStmt * stmt = ( CopyStmt * ) parsetree ;
set_ps_display ( commandTag = " COPY " ) ;
if ( stmt - > direction ! = FROM )
if ( stmt - > direction ! = FROM )
SetQuerySnapshot ( ) ;
SetQuerySnapshot ( ) ;
@ -365,8 +361,6 @@ ProcessUtility(Node *parsetree,
{
{
RenameStmt * stmt = ( RenameStmt * ) parsetree ;
RenameStmt * stmt = ( RenameStmt * ) parsetree ;
set_ps_display ( commandTag = " ALTER " ) ;
relname = stmt - > relname ;
relname = stmt - > relname ;
if ( ! allowSystemTableMods & & IsSystemRelationName ( relname ) )
if ( ! allowSystemTableMods & & IsSystemRelationName ( relname ) )
elog ( ERROR , " ALTER TABLE: relation \" %s \" is a system catalog " ,
elog ( ERROR , " ALTER TABLE: relation \" %s \" is a system catalog " ,
@ -413,8 +407,6 @@ ProcessUtility(Node *parsetree,
{
{
AlterTableStmt * stmt = ( AlterTableStmt * ) parsetree ;
AlterTableStmt * stmt = ( AlterTableStmt * ) parsetree ;
set_ps_display ( commandTag = " ALTER " ) ;
/*
/*
* Some or all of these functions are recursive to cover
* Some or all of these functions are recursive to cover
* inherited things , so permission checks are done there .
* inherited things , so permission checks are done there .
@ -475,9 +467,6 @@ ProcessUtility(Node *parsetree,
{
{
GrantStmt * stmt = ( GrantStmt * ) parsetree ;
GrantStmt * stmt = ( GrantStmt * ) parsetree ;
commandTag = stmt - > is_grant ? " GRANT " : " REVOKE " ;
set_ps_display ( commandTag ) ;
ExecuteGrantStmt ( stmt ) ;
ExecuteGrantStmt ( stmt ) ;
}
}
break ;
break ;
@ -491,8 +480,6 @@ ProcessUtility(Node *parsetree,
{
{
DefineStmt * stmt = ( DefineStmt * ) parsetree ;
DefineStmt * stmt = ( DefineStmt * ) parsetree ;
set_ps_display ( commandTag = " CREATE " ) ;
switch ( stmt - > defType )
switch ( stmt - > defType )
{
{
case OPERATOR :
case OPERATOR :
@ -514,15 +501,11 @@ ProcessUtility(Node *parsetree,
{
{
ViewStmt * stmt = ( ViewStmt * ) parsetree ;
ViewStmt * stmt = ( ViewStmt * ) parsetree ;
set_ps_display ( commandTag = " CREATE " ) ;
DefineView ( stmt - > viewname , stmt - > query ) ; /* retrieve parsetree */
DefineView ( stmt - > viewname , stmt - > query ) ; /* retrieve parsetree */
}
}
break ;
break ;
case T_ProcedureStmt : /* CREATE FUNCTION */
case T_ProcedureStmt : /* CREATE FUNCTION */
set_ps_display ( commandTag = " CREATE " ) ;
CreateFunction ( ( ProcedureStmt * ) parsetree ) ;
CreateFunction ( ( ProcedureStmt * ) parsetree ) ;
break ;
break ;
@ -530,8 +513,6 @@ ProcessUtility(Node *parsetree,
{
{
IndexStmt * stmt = ( IndexStmt * ) parsetree ;
IndexStmt * stmt = ( IndexStmt * ) parsetree ;
set_ps_display ( commandTag = " CREATE " ) ;
relname = stmt - > relname ;
relname = stmt - > relname ;
if ( ! allowSystemTableMods & & IsSystemRelationName ( relname ) )
if ( ! allowSystemTableMods & & IsSystemRelationName ( relname ) )
elog ( ERROR , " CREATE INDEX: relation \" %s \" is a system catalog " ,
elog ( ERROR , " CREATE INDEX: relation \" %s \" is a system catalog " ,
@ -559,15 +540,12 @@ ProcessUtility(Node *parsetree,
aclcheck_result = pg_aclcheck ( relname , GetUserId ( ) , ACL_RULE ) ;
aclcheck_result = pg_aclcheck ( relname , GetUserId ( ) , ACL_RULE ) ;
if ( aclcheck_result ! = ACLCHECK_OK )
if ( aclcheck_result ! = ACLCHECK_OK )
elog ( ERROR , " %s: %s " , relname , aclcheck_error_strings [ aclcheck_result ] ) ;
elog ( ERROR , " %s: %s " , relname , aclcheck_error_strings [ aclcheck_result ] ) ;
set_ps_display ( commandTag = " CREATE " ) ;
DefineQueryRewrite ( stmt ) ;
DefineQueryRewrite ( stmt ) ;
}
}
break ;
break ;
case T_CreateSeqStmt :
case T_CreateSeqStmt :
set_ps_display ( commandTag = " CREATE " ) ;
DefineSequence ( ( CreateSeqStmt * ) parsetree ) ;
DefineSequence ( ( CreateSeqStmt * ) parsetree ) ;
break ;
break ;
@ -576,8 +554,6 @@ ProcessUtility(Node *parsetree,
RemoveAggrStmt * stmt = ( RemoveAggrStmt * ) parsetree ;
RemoveAggrStmt * stmt = ( RemoveAggrStmt * ) parsetree ;
char * typename = ( char * ) NULL ;
char * typename = ( char * ) NULL ;
set_ps_display ( commandTag = " DROP " ) ;
if ( stmt - > aggtype ! = NULL )
if ( stmt - > aggtype ! = NULL )
typename = TypeNameToInternalName ( ( TypeName * ) stmt - > aggtype ) ;
typename = TypeNameToInternalName ( ( TypeName * ) stmt - > aggtype ) ;
@ -589,8 +565,6 @@ ProcessUtility(Node *parsetree,
{
{
RemoveFuncStmt * stmt = ( RemoveFuncStmt * ) parsetree ;
RemoveFuncStmt * stmt = ( RemoveFuncStmt * ) parsetree ;
set_ps_display ( commandTag = " DROP " ) ;
RemoveFunction ( stmt - > funcname , stmt - > args ) ;
RemoveFunction ( stmt - > funcname , stmt - > args ) ;
}
}
break ;
break ;
@ -603,8 +577,6 @@ ProcessUtility(Node *parsetree,
char * typename1 = ( char * ) NULL ;
char * typename1 = ( char * ) NULL ;
char * typename2 = ( char * ) NULL ;
char * typename2 = ( char * ) NULL ;
set_ps_display ( commandTag = " DROP " ) ;
if ( typenode1 ! = NULL )
if ( typenode1 ! = NULL )
typename1 = TypeNameToInternalName ( typenode1 ) ;
typename1 = TypeNameToInternalName ( typenode1 ) ;
if ( typenode2 ! = NULL )
if ( typenode2 ! = NULL )
@ -622,8 +594,6 @@ ProcessUtility(Node *parsetree,
{
{
CreatedbStmt * stmt = ( CreatedbStmt * ) parsetree ;
CreatedbStmt * stmt = ( CreatedbStmt * ) parsetree ;
set_ps_display ( commandTag = " CREATE DATABASE " ) ;
createdb ( stmt - > dbname , stmt - > dbowner ,
createdb ( stmt - > dbname , stmt - > dbowner ,
stmt - > dbpath , stmt - > dbtemplate ,
stmt - > dbpath , stmt - > dbtemplate ,
stmt - > encoding ) ;
stmt - > encoding ) ;
@ -634,8 +604,6 @@ ProcessUtility(Node *parsetree,
{
{
DropdbStmt * stmt = ( DropdbStmt * ) parsetree ;
DropdbStmt * stmt = ( DropdbStmt * ) parsetree ;
set_ps_display ( commandTag = " DROP DATABASE " ) ;
dropdb ( stmt - > dbname ) ;
dropdb ( stmt - > dbname ) ;
}
}
break ;
break ;
@ -645,8 +613,6 @@ ProcessUtility(Node *parsetree,
{
{
NotifyStmt * stmt = ( NotifyStmt * ) parsetree ;
NotifyStmt * stmt = ( NotifyStmt * ) parsetree ;
set_ps_display ( commandTag = " NOTIFY " ) ;
Async_Notify ( stmt - > relname ) ;
Async_Notify ( stmt - > relname ) ;
}
}
break ;
break ;
@ -655,8 +621,6 @@ ProcessUtility(Node *parsetree,
{
{
ListenStmt * stmt = ( ListenStmt * ) parsetree ;
ListenStmt * stmt = ( ListenStmt * ) parsetree ;
set_ps_display ( commandTag = " LISTEN " ) ;
Async_Listen ( stmt - > relname , MyProcPid ) ;
Async_Listen ( stmt - > relname , MyProcPid ) ;
}
}
break ;
break ;
@ -665,8 +629,6 @@ ProcessUtility(Node *parsetree,
{
{
UnlistenStmt * stmt = ( UnlistenStmt * ) parsetree ;
UnlistenStmt * stmt = ( UnlistenStmt * ) parsetree ;
set_ps_display ( commandTag = " UNLISTEN " ) ;
Async_Unlisten ( stmt - > relname , MyProcPid ) ;
Async_Unlisten ( stmt - > relname , MyProcPid ) ;
}
}
break ;
break ;
@ -679,8 +641,6 @@ ProcessUtility(Node *parsetree,
{
{
LoadStmt * stmt = ( LoadStmt * ) parsetree ;
LoadStmt * stmt = ( LoadStmt * ) parsetree ;
set_ps_display ( commandTag = " LOAD " ) ;
closeAllVfds ( ) ; /* probably not necessary... */
closeAllVfds ( ) ; /* probably not necessary... */
load_file ( stmt - > filename ) ;
load_file ( stmt - > filename ) ;
}
}
@ -690,8 +650,6 @@ ProcessUtility(Node *parsetree,
{
{
ClusterStmt * stmt = ( ClusterStmt * ) parsetree ;
ClusterStmt * stmt = ( ClusterStmt * ) parsetree ;
set_ps_display ( commandTag = " CLUSTER " ) ;
relname = stmt - > relname ;
relname = stmt - > relname ;
if ( IsSystemRelationName ( relname ) )
if ( IsSystemRelationName ( relname ) )
elog ( ERROR , " CLUSTER: relation \" %s \" is a system catalog " ,
elog ( ERROR , " CLUSTER: relation \" %s \" is a system catalog " ,
@ -704,12 +662,6 @@ ProcessUtility(Node *parsetree,
break ;
break ;
case T_VacuumStmt :
case T_VacuumStmt :
if ( ( ( VacuumStmt * ) parsetree ) - > vacuum )
commandTag = " VACUUM " ;
else
commandTag = " ANALYZE " ;
set_ps_display ( commandTag ) ;
vacuum ( ( VacuumStmt * ) parsetree ) ;
vacuum ( ( VacuumStmt * ) parsetree ) ;
break ;
break ;
@ -717,8 +669,6 @@ ProcessUtility(Node *parsetree,
{
{
ExplainStmt * stmt = ( ExplainStmt * ) parsetree ;
ExplainStmt * stmt = ( ExplainStmt * ) parsetree ;
set_ps_display ( commandTag = " EXPLAIN " ) ;
ExplainQuery ( stmt - > query , stmt - > verbose , stmt - > analyze , dest ) ;
ExplainQuery ( stmt - > query , stmt - > verbose , stmt - > analyze , dest ) ;
}
}
break ;
break ;
@ -732,8 +682,6 @@ ProcessUtility(Node *parsetree,
{
{
RecipeStmt * stmt = ( RecipeStmt * ) parsetree ;
RecipeStmt * stmt = ( RecipeStmt * ) parsetree ;
set_ps_display ( commandTag = " EXECUTE RECIPE " ) ;
beginRecipe ( stmt ) ;
beginRecipe ( stmt ) ;
}
}
break ;
break ;
@ -747,7 +695,6 @@ ProcessUtility(Node *parsetree,
VariableSetStmt * n = ( VariableSetStmt * ) parsetree ;
VariableSetStmt * n = ( VariableSetStmt * ) parsetree ;
SetPGVariable ( n - > name , n - > args ) ;
SetPGVariable ( n - > name , n - > args ) ;
set_ps_display ( commandTag = " SET VARIABLE " ) ;
}
}
break ;
break ;
@ -756,7 +703,6 @@ ProcessUtility(Node *parsetree,
VariableShowStmt * n = ( VariableShowStmt * ) parsetree ;
VariableShowStmt * n = ( VariableShowStmt * ) parsetree ;
GetPGVariable ( n - > name ) ;
GetPGVariable ( n - > name ) ;
set_ps_display ( commandTag = " SHOW VARIABLE " ) ;
}
}
break ;
break ;
@ -765,7 +711,6 @@ ProcessUtility(Node *parsetree,
VariableResetStmt * n = ( VariableResetStmt * ) parsetree ;
VariableResetStmt * n = ( VariableResetStmt * ) parsetree ;
ResetPGVariable ( n - > name ) ;
ResetPGVariable ( n - > name ) ;
set_ps_display ( commandTag = " RESET VARIABLE " ) ;
}
}
break ;
break ;
@ -773,14 +718,10 @@ ProcessUtility(Node *parsetree,
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * TRIGGER statements * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * TRIGGER statements * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
*/
case T_CreateTrigStmt :
case T_CreateTrigStmt :
set_ps_display ( commandTag = " CREATE " ) ;
CreateTrigger ( ( CreateTrigStmt * ) parsetree ) ;
CreateTrigger ( ( CreateTrigStmt * ) parsetree ) ;
break ;
break ;
case T_DropTrigStmt :
case T_DropTrigStmt :
set_ps_display ( commandTag = " DROP " ) ;
DropTrigger ( ( DropTrigStmt * ) parsetree ) ;
DropTrigger ( ( DropTrigStmt * ) parsetree ) ;
break ;
break ;
@ -788,14 +729,10 @@ ProcessUtility(Node *parsetree,
* * * * * * * * * * * * * * PROCEDURAL LANGUAGE statements * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * PROCEDURAL LANGUAGE statements * * * * * * * * * * * * * * * * *
*/
*/
case T_CreatePLangStmt :
case T_CreatePLangStmt :
set_ps_display ( commandTag = " CREATE " ) ;
CreateProceduralLanguage ( ( CreatePLangStmt * ) parsetree ) ;
CreateProceduralLanguage ( ( CreatePLangStmt * ) parsetree ) ;
break ;
break ;
case T_DropPLangStmt :
case T_DropPLangStmt :
set_ps_display ( commandTag = " DROP " ) ;
DropProceduralLanguage ( ( DropPLangStmt * ) parsetree ) ;
DropProceduralLanguage ( ( DropPLangStmt * ) parsetree ) ;
break ;
break ;
@ -804,57 +741,39 @@ ProcessUtility(Node *parsetree,
*
*
*/
*/
case T_CreateUserStmt :
case T_CreateUserStmt :
set_ps_display ( commandTag = " CREATE USER " ) ;
CreateUser ( ( CreateUserStmt * ) parsetree ) ;
CreateUser ( ( CreateUserStmt * ) parsetree ) ;
break ;
break ;
case T_AlterUserStmt :
case T_AlterUserStmt :
set_ps_display ( commandTag = " ALTER USER " ) ;
AlterUser ( ( AlterUserStmt * ) parsetree ) ;
AlterUser ( ( AlterUserStmt * ) parsetree ) ;
break ;
break ;
case T_DropUserStmt :
case T_DropUserStmt :
set_ps_display ( commandTag = " DROP USER " ) ;
DropUser ( ( DropUserStmt * ) parsetree ) ;
DropUser ( ( DropUserStmt * ) parsetree ) ;
break ;
break ;
case T_LockStmt :
case T_LockStmt :
set_ps_display ( commandTag = " LOCK TABLE " ) ;
LockTableCommand ( ( LockStmt * ) parsetree ) ;
LockTableCommand ( ( LockStmt * ) parsetree ) ;
break ;
break ;
case T_ConstraintsSetStmt :
case T_ConstraintsSetStmt :
set_ps_display ( commandTag = " SET CONSTRAINTS " ) ;
DeferredTriggerSetState ( ( ConstraintsSetStmt * ) parsetree ) ;
DeferredTriggerSetState ( ( ConstraintsSetStmt * ) parsetree ) ;
break ;
break ;
case T_CreateGroupStmt :
case T_CreateGroupStmt :
set_ps_display ( commandTag = " CREATE GROUP " ) ;
CreateGroup ( ( CreateGroupStmt * ) parsetree ) ;
CreateGroup ( ( CreateGroupStmt * ) parsetree ) ;
break ;
break ;
case T_AlterGroupStmt :
case T_AlterGroupStmt :
set_ps_display ( commandTag = " ALTER GROUP " ) ;
AlterGroup ( ( AlterGroupStmt * ) parsetree , " ALTER GROUP " ) ;
AlterGroup ( ( AlterGroupStmt * ) parsetree , " ALTER GROUP " ) ;
break ;
break ;
case T_DropGroupStmt :
case T_DropGroupStmt :
set_ps_display ( commandTag = " DROP GROUP " ) ;
DropGroup ( ( DropGroupStmt * ) parsetree ) ;
DropGroup ( ( DropGroupStmt * ) parsetree ) ;
break ;
break ;
case T_CheckPointStmt :
case T_CheckPointStmt :
{
{
set_ps_display ( commandTag = " CHECKPOINT " ) ;
if ( ! superuser ( ) )
if ( ! superuser ( ) )
elog ( ERROR , " permission denied " ) ;
elog ( ERROR , " permission denied " ) ;
CreateCheckPoint ( false ) ;
CreateCheckPoint ( false ) ;
@ -865,8 +784,6 @@ ProcessUtility(Node *parsetree,
{
{
ReindexStmt * stmt = ( ReindexStmt * ) parsetree ;
ReindexStmt * stmt = ( ReindexStmt * ) parsetree ;
set_ps_display ( commandTag = " REINDEX " ) ;
switch ( stmt - > reindexType )
switch ( stmt - > reindexType )
{
{
case INDEX :
case INDEX :
@ -912,9 +829,4 @@ ProcessUtility(Node *parsetree,
nodeTag ( parsetree ) ) ;
nodeTag ( parsetree ) ) ;
break ;
break ;
}
}
/*
* tell fe / be or whatever that we ' re done .
*/
EndCommand ( commandTag , dest ) ;
}
}