From ede7db2dbd1d2d3f8b36082cf7b7ebe8aff646ad Mon Sep 17 00:00:00 2001 From: LUVJEET KUMAWAT Date: Tue, 10 Mar 2026 18:45:09 +0530 Subject: [PATCH] MDEV-38721: refactor hierarchical read traversal into helper --- sql/vector_mhnsw.cc | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/sql/vector_mhnsw.cc b/sql/vector_mhnsw.cc index d640363b6e76a..84ded08cf8749 100644 --- a/sql/vector_mhnsw.cc +++ b/sql/vector_mhnsw.cc @@ -1404,6 +1404,21 @@ static int search_layer(MHNSW_param *p, const FVector *target, float threshold, return 0; } +/* + Read-path hierarchical traversal: + descend upper layers with ef=1, then search layer 0 with requested limit. +*/ +static int search_hierarchical_read(MHNSW_param *p, const FVector *target, + uint limit, Neighborhood *candidates) +{ + for (; p->layer > 0; p->layer--) + { + if (int err= search_layer(p, target, NEAREST, 1, candidates, false)) + return err; + } + return search_layer(p, target, NEAREST, limit, candidates, false); +} + int mhnsw_insert(TABLE *table, KEY *keyinfo) { @@ -1566,18 +1581,8 @@ int mhnsw_read_first(TABLE *table, KEY *keyinfo, Item *dist, ulonglong limit) return err; MHNSW_param p(ctx, graph, candidates.links[0]->max_layer); - - for (; p.layer > 0; p.layer--) - { - if (int err= search_layer(&p, target, NEAREST, 1, &candidates, false)) - { - graph->file->ha_rnd_end(); - return err; - } - } - - if (int err= search_layer(&p, target, NEAREST, static_cast(limit), - &candidates, false)) + if (int err= search_hierarchical_read(&p, target, static_cast(limit), + &candidates)) { graph->file->ha_rnd_end(); return err;