diff options
author | Bruce Momjian <bruce@momjian.us> | 1998-01-09 05:48:22 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 1998-01-09 05:48:22 +0000 |
commit | 31a697bf92c95ec3eb6ed3435037533b6a376220 (patch) | |
tree | 9c3c2d39732515320050ab2f9e65798e5c08a5e9 /src | |
parent | 8f125413b0a1b6d29b3d849c41c45f311f67a436 (diff) | |
download | postgresql-31a697bf92c95ec3eb6ed3435037533b6a376220.tar.gz postgresql-31a697bf92c95ec3eb6ed3435037533b6a376220.zip |
Yohoo UNIONS of VIEWS.
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/nodes/copyfuncs.c | 26 | ||||
-rw-r--r-- | src/backend/rewrite/rewriteHandler.c | 10 | ||||
-rw-r--r-- | src/backend/tcop/postgres.c | 19 |
3 files changed, 38 insertions, 17 deletions
diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c index edc055dfdb0..95e793d9368 100644 --- a/src/backend/nodes/copyfuncs.c +++ b/src/backend/nodes/copyfuncs.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.27 1998/01/04 04:31:02 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.28 1998/01/09 05:48:10 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -1520,6 +1520,16 @@ _copyQuery(Query *from) int i; newnode->commandType = from->commandType; + if (from->utilityStmt && nodeTag(from->utilityStmt) == T_NotifyStmt) + { + NotifyStmt *from_notify = (NotifyStmt *) from->utilityStmt; + NotifyStmt *n = makeNode(NotifyStmt); + int length = strlen(from_notify->relname); + + n->relname = palloc(length + 1); + strcpy(n->relname, from_notify->relname); + newnode->utilityStmt = (Node *) n; + } newnode->resultRelation = from->resultRelation; /* probably should dup this string instead of just pointing */ /* to the old one --djm */ @@ -1532,17 +1542,8 @@ _copyQuery(Query *from) newnode->into = (char *) 0; } newnode->isPortal = from->isPortal; - Node_Copy(from, newnode, rtable); - if (from->utilityStmt && nodeTag(from->utilityStmt) == T_NotifyStmt) - { - NotifyStmt *from_notify = (NotifyStmt *) from->utilityStmt; - NotifyStmt *n = makeNode(NotifyStmt); - int length = strlen(from_notify->relname); - - n->relname = palloc(length + 1); - strcpy(n->relname, from_notify->relname); - newnode->utilityStmt = (Node *) n; - } + newnode->isBinary = from->isBinary; + newnode->unionall = from->unionall; if (from->uniqueFlag) { newnode->uniqueFlag = (char *) palloc(strlen(from->uniqueFlag) + 1); @@ -1551,6 +1552,7 @@ _copyQuery(Query *from) else newnode->uniqueFlag = NULL; Node_Copy(from, newnode, sortClause); + Node_Copy(from, newnode, rtable); Node_Copy(from, newnode, targetList); Node_Copy(from, newnode, qual); diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c index 34cf891b747..68f34e6cd5d 100644 --- a/src/backend/rewrite/rewriteHandler.c +++ b/src/backend/rewrite/rewriteHandler.c @@ -6,7 +6,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.9 1998/01/07 21:04:37 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.10 1998/01/09 05:48:17 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -598,8 +598,12 @@ RewriteQuery(Query *parsetree, bool *instead_flag, List **qual_products) */ Query *other; - other = copyObject(parsetree); /* ApplyRetrieveRule changes the - * range table */ + /* + * ApplyRetrieveRule changes the range table + * XXX Unions are copied again. + */ + other = copyObject(parsetree); + return ProcessRetrieveQuery(other, parsetree->rtable, instead_flag, FALSE); diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index c01f0b50afa..31da750ffe5 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.59 1998/01/07 21:06:00 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.60 1998/01/09 05:48:22 momjian Exp $ * * NOTES * this is the "main" module of the postgres backend and @@ -439,6 +439,8 @@ pg_parse_and_plan(char *query_string, /* string to execute */ * rewrites */ for (i = 0; i < querytree_list->len; i++) { + List *union_result, *union_list, *rewritten_list; + querytree = querytree_list->qtrees[i]; @@ -465,6 +467,19 @@ pg_parse_and_plan(char *query_string, /* string to execute */ /* rewrite queries (retrieve, append, delete, replace) */ rewritten = QueryRewrite(querytree); + + /* + * Rewrite the UNIONS. + */ + foreach(rewritten_list, rewritten) + { + Query *qry = (Query *)lfirst(rewritten_list); + union_result = NIL; + foreach(union_list, qry->unionClause) + union_result = nconc(union_result, QueryRewrite((Query *)lfirst(union_list))); + qry->unionClause = union_result; + } + if (rewritten != NULL) { int len, @@ -1372,7 +1387,7 @@ PostgresMain(int argc, char *argv[]) if (IsUnderPostmaster == false) { puts("\nPOSTGRES backend interactive interface"); - puts("$Revision: 1.59 $ $Date: 1998/01/07 21:06:00 $"); + puts("$Revision: 1.60 $ $Date: 1998/01/09 05:48:22 $"); } /* ---------------- |