From: Massimo Dal Zotto <dz@cs.unitn.it>
> these patches define the UNLISTEN sql command. The code already > existed but it was unknown to the parser. Now it can be used > like the listen command. > You must make clean and delete gram.c and parser.h before make.
This commit is contained in:
parent
7414d61950
commit
f62d1253ef
@ -10,7 +10,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.25 1998/08/25 15:04:23 thomas Exp $
|
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.26 1998/08/25 21:36:53 scrappy Exp $
|
||||||
*
|
*
|
||||||
* HISTORY
|
* HISTORY
|
||||||
* AUTHOR DATE MAJOR EVENT
|
* AUTHOR DATE MAJOR EVENT
|
||||||
@ -122,7 +122,7 @@ Oid param_type(int t); /* used in parse_expr.c */
|
|||||||
CopyStmt, CreateStmt, CreateAsStmt, CreateSeqStmt, DefineStmt, DestroyStmt,
|
CopyStmt, CreateStmt, CreateAsStmt, CreateSeqStmt, DefineStmt, DestroyStmt,
|
||||||
ExtendStmt, FetchStmt, GrantStmt, CreateTrigStmt, DropTrigStmt,
|
ExtendStmt, FetchStmt, GrantStmt, CreateTrigStmt, DropTrigStmt,
|
||||||
CreatePLangStmt, DropPLangStmt,
|
CreatePLangStmt, DropPLangStmt,
|
||||||
IndexStmt, ListenStmt, LockStmt, OptimizableStmt,
|
IndexStmt, ListenStmt, UnlistenStmt, LockStmt, OptimizableStmt,
|
||||||
ProcedureStmt, RecipeStmt, RemoveAggrStmt, RemoveOperStmt,
|
ProcedureStmt, RecipeStmt, RemoveAggrStmt, RemoveOperStmt,
|
||||||
RemoveFuncStmt, RemoveStmt,
|
RemoveFuncStmt, RemoveStmt,
|
||||||
RenameStmt, RevokeStmt, RuleStmt, TransactionStmt, ViewStmt, LoadStmt,
|
RenameStmt, RevokeStmt, RuleStmt, TransactionStmt, ViewStmt, LoadStmt,
|
||||||
@ -378,6 +378,7 @@ stmt : AddAttrStmt
|
|||||||
| GrantStmt
|
| GrantStmt
|
||||||
| IndexStmt
|
| IndexStmt
|
||||||
| ListenStmt
|
| ListenStmt
|
||||||
|
| UnlistenStmt
|
||||||
| LockStmt
|
| LockStmt
|
||||||
| ProcedureStmt
|
| ProcedureStmt
|
||||||
| RecipeStmt
|
| RecipeStmt
|
||||||
@ -2039,6 +2040,14 @@ ListenStmt: LISTEN relation_name
|
|||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
UnlistenStmt: UNLISTEN relation_name
|
||||||
|
{
|
||||||
|
UnlistenStmt *n = makeNode(UnlistenStmt);
|
||||||
|
n->relname = $2;
|
||||||
|
$$ = (Node *)n;
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
*
|
*
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.41 1998/08/25 15:04:24 thomas Exp $
|
* $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.42 1998/08/25 21:36:55 scrappy Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -209,6 +209,7 @@ static ScanKeyword ScanKeywords[] = {
|
|||||||
{"type", TYPE_P},
|
{"type", TYPE_P},
|
||||||
{"union", UNION},
|
{"union", UNION},
|
||||||
{"unique", UNIQUE},
|
{"unique", UNIQUE},
|
||||||
|
{"unlisten", UNLISTEN},
|
||||||
{"until", UNTIL},
|
{"until", UNTIL},
|
||||||
{"update", UPDATE},
|
{"update", UPDATE},
|
||||||
{"user", USER},
|
{"user", USER},
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.47 1998/08/25 21:24:09 scrappy Exp $
|
* $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.48 1998/08/25 21:36:56 scrappy Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -594,6 +594,17 @@ ProcessUtility(Node *parsetree,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case T_UnlistenStmt:
|
||||||
|
{
|
||||||
|
UnlistenStmt *stmt = (UnlistenStmt *) parsetree;
|
||||||
|
|
||||||
|
PS_SET_STATUS( commandTag = "UNLISTEN" );
|
||||||
|
CHECK_IF_ABORTED();
|
||||||
|
|
||||||
|
Async_Unlisten(stmt->relname, MyProcPid);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ******************************** dynamic loader ********************************
|
* ******************************** dynamic loader ********************************
|
||||||
*
|
*
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: psqlHelp.h,v 1.49 1998/07/26 01:18:09 momjian Exp $
|
* $Id: psqlHelp.h,v 1.50 1998/08/25 21:36:58 scrappy Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -273,9 +273,9 @@ static struct _helpStruct QL_HELP[] = {
|
|||||||
\t[HAVING having_clause]\n\
|
\t[HAVING having_clause]\n\
|
||||||
\t[UNION [ALL] SELECT ...];"},
|
\t[UNION [ALL] SELECT ...];"},
|
||||||
{"listen",
|
{"listen",
|
||||||
"listen for notification on a relation",
|
"listen for notification on a relation name",
|
||||||
"\
|
"\
|
||||||
\tLISTEN class_name"},
|
\tLISTEN class_name|\"name\""},
|
||||||
{"load",
|
{"load",
|
||||||
"dynamically load a module",
|
"dynamically load a module",
|
||||||
"\
|
"\
|
||||||
@ -345,7 +345,11 @@ set R_PLANS TO 'ON'| 'OFF'"},
|
|||||||
"\
|
"\
|
||||||
\tSHOW DateStyle|GEQO|R_PLANS"},
|
\tSHOW DateStyle|GEQO|R_PLANS"},
|
||||||
#endif
|
#endif
|
||||||
{"UPDATE",
|
{"unlisten",
|
||||||
|
"unlisten for notification on a relation name",
|
||||||
|
"\
|
||||||
|
\tUNLISTEN class_name|\"name\"|\"*\""},
|
||||||
|
{"update",
|
||||||
"update tuples",
|
"update tuples",
|
||||||
"\
|
"\
|
||||||
\tUPDATE class_name SET attr1 = expr1, ...attrN = exprN\n\
|
\tUPDATE class_name SET attr1 = expr1, ...attrN = exprN\n\
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: async.h,v 1.7 1997/09/08 02:35:37 momjian Exp $
|
* $Id: async.h,v 1.8 1998/08/25 21:37:00 scrappy Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -20,6 +20,7 @@ extern void Async_Notify(char *relname);
|
|||||||
extern void Async_NotifyAtCommit(void);
|
extern void Async_NotifyAtCommit(void);
|
||||||
extern void Async_NotifyAtAbort(void);
|
extern void Async_NotifyAtAbort(void);
|
||||||
extern void Async_Listen(char *relname, int pid);
|
extern void Async_Listen(char *relname, int pid);
|
||||||
|
extern void Async_Unlisten(char *relname, int pid);
|
||||||
|
|
||||||
extern GlobalMemory notifyContext;
|
extern GlobalMemory notifyContext;
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: nodes.h,v 1.27 1998/08/18 00:49:01 scrappy Exp $
|
* $Id: nodes.h,v 1.28 1998/08/25 21:37:02 scrappy Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -171,6 +171,7 @@ typedef enum NodeTag
|
|||||||
T_RuleStmt,
|
T_RuleStmt,
|
||||||
T_NotifyStmt,
|
T_NotifyStmt,
|
||||||
T_ListenStmt,
|
T_ListenStmt,
|
||||||
|
T_UnlistenStmt,
|
||||||
T_TransactionStmt,
|
T_TransactionStmt,
|
||||||
T_ViewStmt,
|
T_ViewStmt,
|
||||||
T_LoadStmt,
|
T_LoadStmt,
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: parsenodes.h,v 1.56 1998/08/25 15:09:31 thomas Exp $
|
* $Id: parsenodes.h,v 1.57 1998/08/25 21:37:04 scrappy Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -440,6 +440,16 @@ typedef struct ListenStmt
|
|||||||
char *relname; /* relation to listen on */
|
char *relname; /* relation to listen on */
|
||||||
} ListenStmt;
|
} ListenStmt;
|
||||||
|
|
||||||
|
/* ----------------------
|
||||||
|
* Unlisten Statement
|
||||||
|
* ----------------------
|
||||||
|
*/
|
||||||
|
typedef struct UnlistenStmt
|
||||||
|
{
|
||||||
|
NodeTag type;
|
||||||
|
char *relname; /* relation to unlisten on */
|
||||||
|
} UnlistenStmt;
|
||||||
|
|
||||||
/* ----------------------
|
/* ----------------------
|
||||||
* {Begin|Abort|End} Transaction Statement
|
* {Begin|Abort|End} Transaction Statement
|
||||||
* ----------------------
|
* ----------------------
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/keywords.c,v 1.2 1998/05/18 16:05:00 scrappy Exp $
|
* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/keywords.c,v 1.3 1998/08/25 21:37:06 scrappy Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -201,6 +201,7 @@ static ScanKeyword ScanKeywords[] = {
|
|||||||
{"type", TYPE_P},
|
{"type", TYPE_P},
|
||||||
{"union", UNION},
|
{"union", UNION},
|
||||||
{"unique", UNIQUE},
|
{"unique", UNIQUE},
|
||||||
|
{"unlisten", UNLISTEN},
|
||||||
{"until", UNTIL},
|
{"until", UNTIL},
|
||||||
{"update", UPDATE},
|
{"update", UPDATE},
|
||||||
{"user", USER},
|
{"user", USER},
|
||||||
|
@ -563,7 +563,7 @@ output_statement(char * stmt, int mode)
|
|||||||
DATABASE, DELIMITERS, DO, EACH, EXPLAIN, EXTEND,
|
DATABASE, DELIMITERS, DO, EACH, EXPLAIN, EXTEND,
|
||||||
FORWARD, FUNCTION, HANDLER,
|
FORWARD, FUNCTION, HANDLER,
|
||||||
INCREMENT, INDEX, INHERITS, INSTEAD, ISNULL,
|
INCREMENT, INDEX, INHERITS, INSTEAD, ISNULL,
|
||||||
LANCOMPILER, LISTEN, LOAD, LOCK_P, LOCATION, MAXVALUE, MINVALUE, MOVE,
|
LANCOMPILER, LISTEN, UNLISTEN, LOAD, LOCK_P, LOCATION, MAXVALUE, MINVALUE, MOVE,
|
||||||
NEW, NONE, NOTHING, NOTNULL, OIDS, OPERATOR, PROCEDURAL,
|
NEW, NONE, NOTHING, NOTNULL, OIDS, OPERATOR, PROCEDURAL,
|
||||||
RECIPE, RENAME, RESET, RETURNS, ROW, RULE,
|
RECIPE, RENAME, RESET, RETURNS, ROW, RULE,
|
||||||
SEQUENCE, SETOF, SHOW, START, STATEMENT, STDIN, STDOUT, TRUSTED,
|
SEQUENCE, SETOF, SHOW, START, STATEMENT, STDIN, STDOUT, TRUSTED,
|
||||||
@ -723,6 +723,7 @@ stmt: AddAttrStmt { output_statement($1, 0); }
|
|||||||
| GrantStmt { output_statement($1, 0); }
|
| GrantStmt { output_statement($1, 0); }
|
||||||
| IndexStmt { output_statement($1, 0); }
|
| IndexStmt { output_statement($1, 0); }
|
||||||
| ListenStmt { output_statement($1, 0); }
|
| ListenStmt { output_statement($1, 0); }
|
||||||
|
| UnlistenStmt { output_statement($1, 0); }
|
||||||
| LockStmt { output_statement($1, 0); }
|
| LockStmt { output_statement($1, 0); }
|
||||||
| ProcedureStmt { output_statement($1, 0); }
|
| ProcedureStmt { output_statement($1, 0); }
|
||||||
| RecipeStmt { output_statement($1, 0); }
|
| RecipeStmt { output_statement($1, 0); }
|
||||||
@ -2108,6 +2109,12 @@ ListenStmt: LISTEN relation_name
|
|||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
UnlistenStmt: UNLISTEN relation_name
|
||||||
|
{
|
||||||
|
$$ = cat2_str(make1_str("unlisten"), $2);
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
*
|
*
|
||||||
* Transactions:
|
* Transactions:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user