MCPcopy Create free account
hub / github.com/DeNA/HandlerSocket-Plugin-for-MySQL / cmd_exec

Method cmd_exec

handlersocket/database.cpp:1151–1205  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1149};
1150
1151void
1152dbcontext::cmd_exec(dbcallback_i& cb, const cmd_exec_args& args)
1153{
1154 const prep_stmt& p = *args.pst;
1155 if (p.get_table_id() == static_cast<size_t>(-1)) {
1156 return cb.dbcb_resp_short(2, "stmtnum");
1157 }
1158 ha_rkey_function find_flag = HA_READ_KEY_EXACT;
1159 db_write_op wrop = db_write_op_none;
1160 if (args.op.size() == 1) {
1161 switch (args.op.begin()[0]) {
1162 case '=':
1163 find_flag = HA_READ_KEY_EXACT;
1164 break;
1165 case '>':
1166 find_flag = HA_READ_AFTER_KEY;
1167 break;
1168 case '<':
1169 find_flag = HA_READ_BEFORE_KEY;
1170 break;
1171 case '+':
1172 wrop = db_write_op_insert;
1173 break;
1174 case 'S':
1175 wrop = db_write_op_sql;
1176 break;
1177 default:
1178 return cb.dbcb_resp_short(2, "op");
1179 }
1180 } else if (args.op.size() == 2 && args.op.begin()[1] == '=') {
1181 switch (args.op.begin()[0]) {
1182 case '>':
1183 find_flag = HA_READ_KEY_OR_NEXT;
1184 break;
1185 case '<':
1186 find_flag = HA_READ_KEY_OR_PREV;
1187 break;
1188 default:
1189 return cb.dbcb_resp_short(2, "op");
1190 }
1191 } else {
1192 return cb.dbcb_resp_short(2, "op");
1193 }
1194 if (args.kvalslen <= 0) {
1195 return cb.dbcb_resp_short(2, "klen");
1196 }
1197 switch (wrop) {
1198 case db_write_op_none:
1199 return cmd_find_internal(cb, p, find_flag, args);
1200 case db_write_op_insert:
1201 return cmd_insert_internal(cb, p, args.kvals, args.kvalslen);
1202 case db_write_op_sql:
1203 return cmd_sql_internal(cb, p, args.kvals, args.kvalslen);
1204 }
1205}
1206
1207void
1208dbcontext::set_statistics(size_t num_conns, size_t num_active)

Callers 1

do_exec_on_indexMethod · 0.80

Calls 4

get_table_idMethod · 0.80
dbcb_resp_shortMethod · 0.80
sizeMethod · 0.45
beginMethod · 0.45

Tested by

no test coverage detected