[MDEV-6785] Wrong result on 2nd execution of PS with aggregate function, FROM SQ or MERGE view Created: 2014-09-25  Updated: 2014-11-21  Resolved: 2014-11-21

Status: Closed
Project: MariaDB Server
Component/s: Prepared Statements, Views
Affects Version/s: 10.0.13
Fix Version/s: 10.0.15

Type: Bug Priority: Major
Reporter: Elena Stepanova Assignee: Sergei Golubchik
Resolution: Fixed Votes: 0
Labels: regression


 Description   

The problem appeared in 10.0 tree with the following revision:

   revno: 4339.1.6
    revision-id: sergii@pisem.net-20140807194554-mdg1i1y7tz2r01q1
    parent: sergii@pisem.net-20140807160850-j48c9l19lwbkxia7
    committer: Sergei Golubchik <sergii@pisem.net>
    branch nick: 10.0
    timestamp: Thu 2014-08-07 21:45:54 +0200
    message:
      crash in main.views (and other view + PS tests)
      
      When a view is merged, mark its select_lex as already optimized, otherwise
      its where clause (which doesn't have to be a valid Item after merging)
      might be accessed later. But don't do that for inserts (where a view cannot
      be simply merged, if one later needs to insert into it).

Test case:

CREATE TABLE t1 (i INT NOT NULL DEFAULT 0);
INSERT INTO t1 VALUES (1),(2);
 
CREATE TABLE t2 (j INT NOT NULL DEFAULT 0);
INSERT INTO t2 VALUES (11),(12);
 
CREATE ALGORITHM=MERGE VIEW v3 AS SELECT t1.* FROM t2 LEFT JOIN t1 ON (t2.j = t1.i);
 
PREPARE stmt FROM 'SELECT COUNT(v3.i) FROM t1, v3';
 
# Same problem with a subquery, without a view
# PREPARE stmt FROM 'SELECT COUNT(sq.i) FROM t1, ( SELECT t1.* FROM t2 LEFT JOIN t1 ON (t2.j = t1.i) ) AS sq';
 
EXECUTE stmt;
EXECUTE stmt;
 
DROP TABLE IF EXISTS t1, t2;
DROP VIEW IF EXISTS v3;

Actual result:

EXECUTE stmt;
COUNT(v3.i)
0
EXECUTE stmt;
COUNT(v3.i)
4


Generated at Thu Feb 08 07:14:34 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.