[ 
https://issues.apache.org/jira/browse/TRAFODION-249?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Atanu Mishra closed TRAFODION-249.
----------------------------------
       Resolution: Fixed
         Assignee:     (was: Anoop Sharma)
    Fix Version/s: 0.8 (pre-incubation)

> LP Bug: 1316767 - update involving mod() func results in data corruption
> ------------------------------------------------------------------------
>
>                 Key: TRAFODION-249
>                 URL: https://issues.apache.org/jira/browse/TRAFODION-249
>             Project: Apache Trafodion
>          Issue Type: Bug
>          Components: sql-cmp
>            Reporter: Julie Thai
>            Priority: Critical
>             Fix For: 0.8 (pre-incubation)
>
>
> Table contains 1000 rows, primary key (integer, numeric(11,3)). Update of 
> primary key int column using mod() function, returns "3 row(s) updated."; 
> expected "1000 row(s) updated." Subsequent select [count(*)|count(distinct 
> colintk)] returns incorrect rowcount.
> >>-- integer primary key column
> >>-- expect: 1000
> >>SELECT COUNT(DISTINCT colintk) FROM f00;
> (EXPR)
> --------------------
>                 1000
> --- 1 row(s) selected.
> >>prepare XX from UPDATE f00 SET colintk = MOD(colintk, 100);
> --- SQL command prepared.
> >>-- expect: 1000 row(s) updated.
> >>-- but instead get 3 row(s) updated???
> >>execute XX;
> --- 3 row(s) updated.
> >>-- expect: 100
> >>-- but instead get 999
> >>SELECT COUNT(DISTINCT colintk) FROM f00;
> (EXPR)
> --------------------
>                  999
> --- 1 row(s) selected.
> >>-- expect: 1000
> >>-- but instead get 999
> >>SELECT COUNT(*) FROM f00;
> (EXPR)
> --------------------
>                  999
> --- 1 row(s) selected.
> To reproduce, see contents of attachment, updcorrupt.tar:
>       - obey file upd_pkey.sql or:
> DROP TABLE f00;
> CREATE TABLE f00(
>                colintk int not null,
>                colint int not null,
>                collint largeint not null,
>                colnum numeric(11,3) not null,
>                primary key (colintk, colnum))
> ;
> UPSERT WITH NO ROLLBACK INTO f00 SELECT
>                c1+c2*10+c3*100+c4*1000+c5*10000,
>                c1+c2*10+c3*100+c4*1000+c5*10000,
>                (c1+c2*10+c3*100+c4*1000+c5*10000) + 549755813888,
>                cast(c1+c2*10+c3*100+c4*1000+c5*10000 as numeric(11,3))
>                from (values(1)) t
>                transpose 0,1,2,3,4,5,6,7,8,9 as c1
>                transpose 0,1,2,3,4,5,6,7,8,9 as c2
>                transpose 0,1,2,3,4,5,6,7,8,9 as c3
>                --transpose 0,1,2,3,4,5,6,7,8,9 as c4
>                transpose 0 as c4
>                --transpose 0,1,2,3,4,5,6,7,8,9 as c5
>                transpose 0 as c5
> ;
> UPDATE STATISTICS FOR TABLE f00 ON EVERY COLUMN;
> -- integer primary key column
> -- expect: 1000
> SELECT COUNT(DISTINCT colintk) FROM f00;
> prepare XX from UPDATE f00 SET colintk = MOD(colintk, 100);
> -- expect: 1000 row(s) updated.
> -- but instead get 3 row(s) updated???
> execute XX;
> -- expect: 100
> -- but instead get 999
> SELECT COUNT(DISTINCT colintk) FROM f00;
> -- expect: 1000
> -- but instead get 999
> SELECT COUNT(*) FROM f00;
> Attached updcorrupt.tar also contains logs generated without/with explain 
> output (see upd_pkey.out[_wexp]).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to