| 4983 | /* error message when opening a form file */ |
| 4984 | |
| 4985 | void open_table_error(TABLE_SHARE *share, enum open_frm_error error, |
| 4986 | int db_errno) |
| 4987 | { |
| 4988 | char buff[FN_REFLEN]; |
| 4989 | const myf errortype= ME_ERROR_LOG; // Write fatals error to log |
| 4990 | DBUG_ENTER("open_table_error"); |
| 4991 | DBUG_PRINT("info", ("error: %d db_errno: %d", error, db_errno)); |
| 4992 | |
| 4993 | switch (error) { |
| 4994 | case OPEN_FRM_OPEN_ERROR: |
| 4995 | /* |
| 4996 | Test if file didn't exists. We have to also test for EINVAL as this |
| 4997 | may happen on windows when opening a file with a not legal file name |
| 4998 | */ |
| 4999 | if (db_errno == ENOENT || db_errno == EINVAL) |
| 5000 | my_error(ER_NO_SUCH_TABLE, MYF(0), share->db.str, share->table_name.str); |
| 5001 | else |
| 5002 | { |
| 5003 | strxmov(buff, share->normalized_path.str, reg_ext, NullS); |
| 5004 | my_error((db_errno == EMFILE) ? ER_CANT_OPEN_FILE : ER_FILE_NOT_FOUND, |
| 5005 | errortype, buff, db_errno); |
| 5006 | } |
| 5007 | break; |
| 5008 | case OPEN_FRM_OK: |
| 5009 | DBUG_ASSERT(0); // open_table_error() is never called for this one |
| 5010 | break; |
| 5011 | case OPEN_FRM_ERROR_ALREADY_ISSUED: |
| 5012 | break; |
| 5013 | case OPEN_FRM_NOT_A_VIEW: |
| 5014 | my_error(ER_WRONG_OBJECT, MYF(0), share->db.str, |
| 5015 | share->table_name.str, "VIEW"); |
| 5016 | break; |
| 5017 | case OPEN_FRM_NOT_A_TABLE: |
| 5018 | my_error(ER_WRONG_OBJECT, MYF(0), share->db.str, |
| 5019 | share->table_name.str, "TABLE"); |
| 5020 | break; |
| 5021 | case OPEN_FRM_DISCOVER: |
| 5022 | DBUG_ASSERT(0); // open_table_error() is never called for this one |
| 5023 | break; |
| 5024 | case OPEN_FRM_CORRUPTED: |
| 5025 | strxmov(buff, share->normalized_path.str, reg_ext, NullS); |
| 5026 | my_error(ER_NOT_FORM_FILE, errortype, buff); |
| 5027 | break; |
| 5028 | case OPEN_FRM_READ_ERROR: |
| 5029 | strxmov(buff, share->normalized_path.str, reg_ext, NullS); |
| 5030 | my_error(ER_ERROR_ON_READ, errortype, buff, db_errno); |
| 5031 | break; |
| 5032 | case OPEN_FRM_NEEDS_REBUILD: |
| 5033 | strxnmov(buff, sizeof(buff)-1, |
| 5034 | share->db.str, ".", share->table_name.str, NullS); |
| 5035 | my_error(ER_TABLE_NEEDS_REBUILD, errortype, buff); |
| 5036 | break; |
| 5037 | } |
| 5038 | DBUG_VOID_RETURN; |
| 5039 | } /* open_table_error */ |
| 5040 | |
| 5041 | |
| 5042 | /* |
no test coverage detected