MCPcopy Create free account
hub / github.com/MariaDB/server / cmd_find_internal

Method cmd_find_internal

plugin/handler_socket/handlersocket/database.cpp:695–850  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

693}
694
695void
696dbcontext::cmd_find_internal(dbcallback_i& cb, const prep_stmt& pst,
697 ha_rkey_function find_flag, const cmd_exec_args& args)
698{
699 const bool debug_out = (verbose_level >= 100);
700 bool need_resp_record = true;
701 char mod_op = 0;
702 const string_ref& mod_op_str = args.mod_op;
703 if (mod_op_str.size() != 0) {
704 if (!for_write_flag) {
705 return cb.dbcb_resp_short(2, "readonly");
706 }
707 mod_op = mod_op_str.begin()[0];
708 need_resp_record = mod_op_str.size() > 1 && mod_op_str.begin()[1] == '?';
709 switch (mod_op) {
710 case 'U': /* update */
711 case 'D': /* delete */
712 case '+': /* increment */
713 case '-': /* decrement */
714 break;
715 default:
716 if (debug_out) {
717 fprintf(stderr, "unknown modop: %c\n", mod_op);
718 }
719 return cb.dbcb_resp_short(2, "modop");
720 }
721 }
722 lock_tables_if();
723 if (lock == 0) {
724 return cb.dbcb_resp_short(1, "lock_tables");
725 }
726 if (pst.get_table_id() >= table_vec.size()) {
727 return cb.dbcb_resp_short(2, "tblnum");
728 }
729 TABLE *const table = table_vec[pst.get_table_id()].table;
730 /* keys */
731 if (pst.get_idxnum() >= table->s->keys) {
732 return cb.dbcb_resp_short(2, "idxnum");
733 }
734 KEY& kinfo = table->key_info[pst.get_idxnum()];
735 if (args.kvalslen > kinfo.user_defined_key_parts) {
736 return cb.dbcb_resp_short(2, "kpnum");
737 }
738 uchar *const key_buf = DENA_ALLOCA_ALLOCATE(uchar, kinfo.key_length);
739 size_t invalues_idx = 0;
740 size_t kplen_sum = prepare_keybuf(args, key_buf, table, kinfo, invalues_idx);
741 /* filters */
742 uchar *filter_buf = 0;
743 if (args.filters != 0) {
744 const size_t filter_buf_len = calc_filter_buf_size(table, pst,
745 args.filters);
746 filter_buf = DENA_ALLOCA_ALLOCATE(uchar, filter_buf_len);
747 if (!fill_filter_buf(table, pst, args.filters, filter_buf,
748 filter_buf_len)) {
749 return cb.dbcb_resp_short(2, "filterblob");
750 }
751 }
752 /* handler */

Callers

nothing calls this directly

Calls 15

prepare_keybufFunction · 0.85
dbcb_resp_shortMethod · 0.80
get_idxnumMethod · 0.80
ha_index_or_rnd_endMethod · 0.80
ha_index_initMethod · 0.80
dbcb_resp_beginMethod · 0.80
ha_index_read_mapMethod · 0.80
ha_index_prevMethod · 0.80
ha_index_nextMethod · 0.80
ha_index_next_sameMethod · 0.80
dbcb_resp_cancelMethod · 0.80
dbcb_resp_short_numMethod · 0.80

Tested by

no test coverage detected