Thread: problem with view in 7.3

problem with view in 7.3

From
"Alphasoft"
Date:
Hi , I am Hristo Neshev From Bulgaria
 
In Version 7.2 this statement works :
 
create view v_impr_check
(
ead_no,
ead_date,
e_no,
e_date,
sid,
number,
s_order,
cdt,
cdt_description,
original_qty,
used_qty,
waste_qty,
rest_qty,
original_used_qty
)
AS
select distinct md_custom_number,
md_custom_date,
md_number ,
md_date ,
sni_sid ,
sni_number ,
snig_ord_number_in,
cdt_part_number,
cdt_description,
snig_quantity,
(select sum(impo_quantity) from impr_out where impo_store_note_in = snig_store_note_in and impo_ord_number_in = snig_ord_number_in),
(select sum(impow_quantity) from impr_out_waste where impow_store_note_in= sni_sid and impow_ord_number_in = snig_ord_number_in),
(select sum(iwnog_quantity) from impr_waste_note_out_goods where iwnog_store_note_in = sni_sid and iwnog_ord_number_in = snig_ord_number_in and iwnog_impr_note_out not in (select impow_iwnog_impr_note_out from impr_out_waste where impow_iwnog_impr_note_out is not null) ),
snig_used_quantity
from
store_note_in join md_header on md_sni_sid = sni_sid
join store_note_in_goods join commodity on (snig_commodity = cdt_sid)
on sni_sid = snig_store_note_in
Where
sni_type_doc = 303;
 
In 7.3 when i am trying to recreate the view I received the folowing error :
find_expr_references_walker: bogus varno 8
The problem is in subselect statements

Re: problem with view in 7.3

From
Tom Lane
Date:
"Alphasoft" <ico@alphasoft-bg.com> writes:
> In 7.3 when i am trying to recreate the view I received the folowing error :
> find_expr_references_walker: bogus varno 8

Found it --- thanks for the test case.  The patch is attached, if you
want to apply it locally.
        regards, tom lane


*** src/backend/catalog/dependency.c.orig    Sat Sep 21 20:37:09 2002
--- src/backend/catalog/dependency.c    Wed Dec  4 14:45:58 2002
***************
*** 789,794 ****
--- 789,799 ----         else if (rte->rtekind == RTE_JOIN)         {             /* Scan join output column to add
referencesto join inputs */
 
+             List   *save_rtables;
+ 
+             /* We must make the context appropriate for join's level */
+             save_rtables = context->rtables;
+             context->rtables = rtables;             if (var->varattno <= 0 ||                 var->varattno >
length(rte->joinaliasvars))                elog(ERROR, "find_expr_references_walker: bogus varattno %d",
 
***************
*** 796,801 ****
--- 801,807 ----             find_expr_references_walker((Node *) nth(var->varattno - 1,
                     rte->joinaliasvars),                                         context);
 
+             context->rtables = save_rtables;         }         return false;     }