@@ -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