diff --git a/mysql-test/main/vector2.result b/mysql-test/main/vector2.result index 293c9a9dee6..1c59a52c395 100644 --- a/mysql-test/main/vector2.result +++ b/mysql-test/main/vector2.result @@ -95,3 +95,12 @@ t CREATE TABLE `t` ( ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci drop table t; set mhnsw_distance_function= default; +# +# MDEV-35105 Assertion `tab->join->order' fails upon vector search with DISTINCT +# +create table t (a int, v blob not null, vector(v)); +insert into t values(1,x'00000000'),(2,x'00000000'); +select distinct a from t order by vec_distance_euclidean(v,vec_fromtext('[1]')) limit 1; +a +# +drop table t; diff --git a/mysql-test/main/vector2.test b/mysql-test/main/vector2.test index bee1e945efc..79c7e6ab397 100644 --- a/mysql-test/main/vector2.test +++ b/mysql-test/main/vector2.test @@ -82,3 +82,12 @@ execute stmt; show create table t; drop table t; set mhnsw_distance_function= default; + +--echo # +--echo # MDEV-35105 Assertion `tab->join->order' fails upon vector search with DISTINCT +--echo # +create table t (a int, v blob not null, vector(v)); +insert into t values(1,x'00000000'),(2,x'00000000'); +--replace_column 1 # +select distinct a from t order by vec_distance_euclidean(v,vec_fromtext('[1]')) limit 1; +drop table t; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index bc8e779c29e..53a9cd486f8 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -4402,7 +4402,8 @@ JOIN::optimize_distinct() } /* Optimize "select distinct b from t1 order by key_part_1 limit #" */ - if (order && skip_sort_order && !unit->lim.is_with_ties()) + if (order && skip_sort_order && !unit->lim.is_with_ties() + && (*order->item)->type() == Item::FIELD_ITEM) { /* Should already have been optimized away */ DBUG_ASSERT(ordered_index_usage == ordered_index_order_by);