File tree Expand file tree Collapse file tree 3 files changed +36
-6
lines changed
mysql-test/suite/versioning Expand file tree Collapse file tree 3 files changed +36
-6
lines changed Original file line number Diff line number Diff line change @@ -107,5 +107,14 @@ create or replace view vt1 as select * from t1 union select * from t2;
107
107
select * from vt1;
108
108
a
109
109
1
110
+ # MDEV-14689 crash on second PS execute
111
+ create or replace table t1 (a int);
112
+ create or replace view v1 as select * from t1;
113
+ create or replace table t2 (b int) with system versioning;
114
+ prepare stmt from 'select a from v1 inner join t2 group by a order by a';
115
+ execute stmt;
116
+ a
117
+ execute stmt;
118
+ a
110
119
drop database test;
111
120
create database test;
Original file line number Diff line number Diff line change @@ -89,5 +89,14 @@ create or replace table t2 (a int);
89
89
create or replace view vt1 as select * from t1 union select * from t2;
90
90
select * from vt1;
91
91
92
+ --echo # MDEV-14689 crash on second PS execute
93
+ create or replace table t1 (a int);
94
+ create or replace view v1 as select * from t1;
95
+ create or replace table t2 (b int) with system versioning;
96
+ prepare stmt from 'select a from v1 inner join t2 group by a order by a';
97
+ execute stmt;
98
+ execute stmt;
99
+
100
+
92
101
drop database test;
93
102
create database test;
Original file line number Diff line number Diff line change @@ -700,24 +700,36 @@ void JOIN::vers_check_items()
700
700
701
701
if (conds)
702
702
{
703
- conds= conds->transform(thd, transformer, NULL);
703
+ Item *tmp = conds->transform(thd, transformer, NULL);
704
+ if (conds != tmp)
705
+ conds= tmp;
704
706
}
705
707
706
708
for (ORDER *ord= order; ord; ord= ord->next)
707
709
{
708
- ord->item_ptr= (*ord->item)->transform(thd, transformer, NULL);
709
- *ord->item= ord->item_ptr;
710
+ Item *tmp= (*ord->item)->transform(thd, transformer, NULL);
711
+ if (*ord->item != tmp)
712
+ {
713
+ ord->item_ptr= tmp;
714
+ *ord->item= ord->item_ptr;
715
+ }
710
716
}
711
717
712
718
for (ORDER *ord= group_list; ord; ord= ord->next)
713
719
{
714
- ord->item_ptr= (*ord->item)->transform(thd, transformer, NULL);
715
- *ord->item= ord->item_ptr;
720
+ Item *tmp= (*ord->item)->transform(thd, transformer, NULL);
721
+ if (*ord->item != tmp)
722
+ {
723
+ ord->item_ptr= tmp;
724
+ *ord->item= ord->item_ptr;
725
+ }
716
726
}
717
727
718
728
if (having)
719
729
{
720
- having= having->transform(thd, transformer, NULL);
730
+ Item *tmp= having->transform(thd, transformer, NULL);
731
+ if (having != tmp)
732
+ having= tmp;
721
733
}
722
734
}
723
735
You can’t perform that action at this time.
0 commit comments