@@ -796,18 +796,23 @@ dbcontext::cmd_find_internal(dbcallback_i& cb, const prep_stmt& pst,
796796  size_t  modified_count = 0 ;
797797  int  r = 0 ;
798798  bool  is_first = true ;
799+   bool  in_loop = false ;
799800  for  (uint32_t  cnt = 0 ; cnt < limit + skip;) {
800801    if  (is_first) {
801802      is_first = false ;
802803      const  key_part_map kpm = (1U  << args.kvalslen ) - 1 ;
803804      r = hnd->index_read_map (table->record [0 ], key_buf, kpm, find_flag);
804-     } else  if  (args.invalues_keypart  >= 0 ) {
805+       if  (args.invalues_keypart  >= 0 ) {
806+           in_loop = true ;
807+       }
808+     } else  if  (!in_loop && args.invalues_keypart  >= 0 ) {
805809      if  (++invalues_idx >= args.invalueslen ) {
806810	break ;
807811      }
808812      kplen_sum = prepare_keybuf (args, key_buf, table, kinfo, invalues_idx);
809813      const  key_part_map kpm = (1U  << args.kvalslen ) - 1 ;
810814      r = hnd->index_read_map (table->record [0 ], key_buf, kpm, find_flag);
815+       in_loop = true ;
811816    } else  {
812817      switch  (find_flag) {
813818      case  HA_READ_BEFORE_KEY:
@@ -852,7 +857,8 @@ dbcontext::cmd_find_internal(dbcallback_i& cb, const prep_stmt& pst,
852857      }
853858      ++cnt;
854859    }
855-     if  (args.invalues_keypart  >= 0  && r == HA_ERR_KEY_NOT_FOUND) {
860+     if  (args.invalues_keypart  >= 0  && r != 0  ) {
861+       in_loop = false ;
856862      continue ;
857863    }
858864    if  (r != 0  && r != HA_ERR_RECORD_DELETED) {
@@ -1181,3 +1187,4 @@ dbcontext::set_statistics(size_t num_conns, size_t num_active)
11811187
11821188};
11831189
1190+ 
0 commit comments