| 664 | } |
| 665 | |
| 666 | static size_t |
| 667 | prepare_keybuf(const cmd_exec_args& args, uchar *key_buf, TABLE *table, |
| 668 | KEY& kinfo, size_t invalues_index) |
| 669 | { |
| 670 | size_t kplen_sum = 0; |
| 671 | DBG_KEY(fprintf(stderr, "SLOW\n")); |
| 672 | for (size_t i = 0; i < args.kvalslen; ++i) { |
| 673 | const KEY_PART_INFO & kpt = kinfo.key_part[i]; |
| 674 | string_ref kval = args.kvals[i]; |
| 675 | if (args.invalues_keypart >= 0 && |
| 676 | static_cast<size_t>(args.invalues_keypart) == i) { |
| 677 | kval = args.invalues[invalues_index]; |
| 678 | } |
| 679 | if (kval.begin() == 0) { |
| 680 | kpt.field->set_null(); |
| 681 | } else { |
| 682 | kpt.field->set_notnull(); |
| 683 | } |
| 684 | kpt.field->store(kval.begin(), kval.size(), &my_charset_bin); |
| 685 | kplen_sum += kpt.store_length; |
| 686 | DBG_KEYLEN(fprintf(stderr, "l=%u sl=%zu\n", kpt.length, |
| 687 | kpt.store_length)); |
| 688 | } |
| 689 | key_copy(key_buf, table->record[0], &kinfo, kplen_sum); |
| 690 | DBG_KEYLEN(fprintf(stderr, "sum=%zu flen=%u\n", kplen_sum, |
| 691 | kinfo.key_length)); |
| 692 | return kplen_sum; |
| 693 | } |
| 694 | |
| 695 | void |
| 696 | dbcontext::cmd_find_internal(dbcallback_i& cb, const prep_stmt& pst, |
no test coverage detected