Bug 27782078 验证

Bug 27782078 : WRONG RESULT PUSHING PREDICATE INTO VIEW THAT IS A UNION ALL OF TWO TABLES WITH

Wrong result pushing predicate into view that is a union all of two tables.
Ex:

WITH s1 AS
      (SELECT /*+ materialize */
              id
       ,      tstamp                           AS tstamp1
       ,      CAST(tstamp + 1 AS TIMESTAMP) AS tstamp2
       FROM   t3
       WHERE  id = 42)
   SELECT count(*)
   FROM
   (  SELECT id
      ,            tstamp
      FROM   t1
      UNION ALL
      SELECT id
      ,            tstamp
      FROM   t2
   )         t
   ,         s1
   WHERE  t.id           = s1.id
   AND         t.tstamp >= s1.tstamp1
   AND         t.tstamp <  s1.tstamp2;

Wrong result is caused by a filter predicate which
incorrectly has its operator flipped.

filter(“S1”.“TSTAMP2”<“S1”.“TSTAMP1”)

This condition is never satisfied and generates zero rows for the query

REDISCOVERY INFORMATION:

  1. If you encounter wrong results in a query that tries to push predicates
    into a view that is the union all of two tables

  2. the filter you see generated in the explain plan has a condition which is
    incorrect (operator is flipped and result should never be true)

验证过程

WITH s1 AS
      (SELECT /*+ materialize */
              id
       ,      tstamp                        AS tstamp1
       ,      CAST(tstamp + 1 AS TIMESTAMP) AS tstamp2
       FROM   t3
       WHERE  id = 42)
   SELECT count(*)
   FROM
   (  SELECT id
      ,            tstamp
      FROM   t1
      UNION ALL
      SELECT id
      ,            tstamp
      FROM   t2
   )         t
   ,         s1
   WHERE  t.id           = s1.id
   AND         t.tstamp >= s1.tstamp1
   AND         t.tstamp <  s1.tstamp2;

–创建表 T1-T3

 CREATE TABLE T3 
(
  ID INT 
, TSTAMP TIMESTAMP(9) 
);

–插入数据

declare
i number:=1;
begin
for i in 1..100 loop
   insert into t3 (id,tstamp) values(i,SYSTIMESTAMP);
   insert into t1 (id,tstamp) values(i,SYSTIMESTAMP);
   insert into t2 (id,tstamp) values(i,SYSTIMESTAMP);
end loop;
commit;
end;

结果正常,版本换了12.2.0.1 和19.8.0.0 均正常显示结果
也许是偶发性bug

– 删除表

drop table t1;
drop table t2;
drop table t3;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值