/***********************************************************************//** Reads the next or previous row from a cursor, which must have previously been positioned using index_read. @return 0, HA_ERR_END_OF_FILE, or error number */ UNIV_INTERN int ha_innobase::general_fetch( /*=======================*/ uchar* buf, /*!< in/out: buffer for next row in MySQL format */ uint direction, /*!< in: ROW_SEL_NEXT or ROW_SEL_PREV */ uint match_mode) /*!< in: 0, ROW_SEL_EXACT, or ROW_SEL_EXACT_PREFIX */ { ulint ret; int error = 0; DBUG_ENTER("general_fetch"); ut_a(prebuilt->trx == thd_to_trx(user_thd)); innodb_srv_conc_enter_innodb(prebuilt->trx); ret = row_search_for_mysql((byte*)buf, 0, prebuilt, match_mode, direction); innodb_srv_conc_exit_innodb(prebuilt->trx); switch (ret) { case DB_SUCCESS: error = 0; table->status = 0; break; case DB_RECORD_NOT_FOUND: error = HA_ERR_END_OF_FILE; table->status = STATUS_NOT_FOUND; break; case DB_END_OF_INDEX: error = HA_ERR_END_OF_FILE; table->status = STATUS_NOT_FOUND; break; default: error = convert_error_code_to_mysql( (int) ret, prebuilt->table->flags, user_thd); table->status = STATUS_NOT_FOUND; break; } DBUG_RETURN(error); }