| 1149 | }; |
| 1150 | |
| 1151 | void |
| 1152 | dbcontext::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 | |
| 1207 | void |
| 1208 | dbcontext::set_statistics(size_t num_conns, size_t num_active) |
no test coverage detected