Re: BUG #4434: Error inserting into view - unrecognized node type: 313
От | Heikki Linnakangas |
---|---|
Тема | Re: BUG #4434: Error inserting into view - unrecognized node type: 313 |
Дата | |
Msg-id | 48D9EE51.20701@enterprisedb.com обсуждение исходный текст |
Ответ на | Re: BUG #4434: Error inserting into view - unrecognized node type: 313 (Tom Lane <tgl@sss.pgh.pa.us>) |
Ответы |
Re: BUG #4434: Error inserting into view - unrecognized node type: 313
|
Список | pgsql-bugs |
Tom Lane wrote: > "Dean Rasheed" <dean_rasheed@hotmail.com> writes: >> CREATE TABLE foo(a int, b int); >> CREATE VIEW foo_v AS SELECT * FROM foo; >> CREATE RULE foo_r AS ON INSERT TO foo_v DO INSTEAD INSERT INTO foo >> VALUES(NEW.a, NEW.b); >> INSERT INTO foo_v VALUES ((SELECT 1), (SELECT 2)), ((SELECT 3), (SELECT 4)); > >> ERROR: unrecognized node type: 313 > > It looks like the parser's code path for multi-row VALUES is neglecting > to detect sublinks and set pstate->p_hasSubLinks. I'm too tired to look > closer tonight; anyone want to poke into it? I think the parser is OK, but the p_hasSubLinks is lost in the rewrite phase. In ResolveNew, we set p_hasSubLinks whenever a Var with a SubLink is found. In case of Values RTE, however, there's no Vars, but plain SubLink nodes. This patch seems to fix it: --- src/backend/rewrite/rewriteManip.c +++ src/backend/rewrite/rewriteManip.c @@ -1112,6 +1112,12 @@ ResolveNew_mutator(Node *node, ResolveNew_context *context) context->sublevels_up--; return (Node *) newnode; } + else if (IsA(node, SubLink)) + { + /* Report it if we are adding a sublink to query */ + context->inserted_sublink = true; + /* fall through to copy the expr normally */ + } return expression_tree_mutator(node, ResolveNew_mutator, (void *) context); } -- Heikki Linnakangas EnterpriseDB http://www.enterprisedb.com
В списке pgsql-bugs по дате отправления: