Skip to content

Commit 2e74a00

Browse files
committed
MDEV-35195 Assertion `tab->join->order' fails upon vector search with DISTINCT #2
MDEV-35337 Server crash or assertion failure in join_read_first upon using vector distance in group by allow Item_func_distance to be not only in tab->join->order, but alternatively in tab->join->group_list
1 parent 926b339 commit 2e74a00

File tree

3 files changed

+39
-3
lines changed

3 files changed

+39
-3
lines changed

mysql-test/main/vector2.result

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,3 +270,22 @@ f
270270
4
271271
5
272272
drop table t1, t2;
273+
#
274+
# MDEV-35195 Assertion `tab->join->order' fails upon vector search with DISTINCT #2
275+
#
276+
create table t (v vector(1) not null, vector(v));
277+
insert into t values (0x00000000),(0x00000040);
278+
select distinct vec_distance_euclidean(v,0x00000000) d from t order by d limit 1;
279+
d
280+
0
281+
drop table t;
282+
#
283+
# MDEV-35337 Server crash or assertion failure in join_read_first upon using vector distance in group by
284+
#
285+
create table t (a int, v vector(1) not null, primary key (a), vector(v));
286+
insert into t values (1,vec_fromtext('[-1]')),(2,vec_fromtext('[1]')),(3,vec_fromtext('[2]'));
287+
select vec_distance_euclidean(v,vec_fromtext('[0]')) d, count(*) from t group by d order by d limit 2;
288+
d count(*)
289+
1 2
290+
2 1
291+
drop table t;

mysql-test/main/vector2.test

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,3 +207,19 @@ insert into t2 select seq from seq_1_to_1000;
207207
set join_cache_level= 0;
208208
select t2.f from t1 left join t2 on (t1.pk=t2.f) order by vec_distance_euclidean(t1.a,0x00000040) limit 5;
209209
drop table t1, t2;
210+
211+
--echo #
212+
--echo # MDEV-35195 Assertion `tab->join->order' fails upon vector search with DISTINCT #2
213+
--echo #
214+
create table t (v vector(1) not null, vector(v));
215+
insert into t values (0x00000000),(0x00000040);
216+
select distinct vec_distance_euclidean(v,0x00000000) d from t order by d limit 1;
217+
drop table t;
218+
219+
--echo #
220+
--echo # MDEV-35337 Server crash or assertion failure in join_read_first upon using vector distance in group by
221+
--echo #
222+
create table t (a int, v vector(1) not null, primary key (a), vector(v));
223+
insert into t values (1,vec_fromtext('[-1]')),(2,vec_fromtext('[1]')),(3,vec_fromtext('[2]'));
224+
select vec_distance_euclidean(v,vec_fromtext('[0]')) d, count(*) from t group by d order by d limit 2;
225+
drop table t;

sql/sql_select.cc

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25145,13 +25145,14 @@ join_read_first(JOIN_TAB *tab)
2514525145
tab->read_record.table=table;
2514625146
if (tab->index >= table->s->keys)
2514725147
{
25148+
ORDER *order= tab->join->order ? tab->join->order : tab->join->group_list;
2514825149
DBUG_ASSERT(tab->index < table->s->total_keys);
2514925150
DBUG_ASSERT(tab->index == table->s->keys);
2515025151
DBUG_ASSERT(tab->sorted);
25151-
DBUG_ASSERT(tab->join->order);
25152-
DBUG_ASSERT(tab->join->order->next == NULL);
25152+
DBUG_ASSERT(order);
25153+
DBUG_ASSERT(order->next == NULL);
2515325154
tab->read_record.read_record_func= join_hlindex_read_next;
25154-
error= tab->table->hlindex_read_first(tab->index, *tab->join->order->item,
25155+
error= tab->table->hlindex_read_first(tab->index, *order->item,
2515525156
tab->join->select_limit);
2515625157
}
2515725158
else

0 commit comments

Comments
 (0)