#At lp:maria based on revid:knielsen@knielsen-hq.org-20091107062910-ntg41l1dw1d7kqrz 2763 Michael Widenius 2009-11-07 Added error handling for my_seek() & my_tell() failures modified: include/mysys_err.h mysys/errors.c mysys/my_seek.c sql/sql_insert.cc storage/maria/ha_maria.cc per-file messages: mysys/my_seek.c Give error if MY_WME is used sql/sql_insert.cc Fixed compiler warning storage/maria/ha_maria.cc Changed driver of Maria storage engine project === modified file 'include/mysys_err.h' --- a/include/mysys_err.h 2009-10-26 11:35:42 +0000 +++ b/include/mysys_err.h 2009-11-07 10:34:19 +0000 @@ -63,8 +63,9 @@ extern const char * NEAR globerrs[]; /* #define EE_FILENOTFOUND 29 #define EE_FILE_NOT_CLOSED 30 #define EE_CANT_CHMOD 31 -#define EE_CANT_COPY_OWNERSHIP 32 -#define EE_ERROR_LAST 32 /* Copy last error nr */ +#define EE_CANT_SEEK 32 +#define EE_CANT_COPY_OWNERSHIP 33 +#define EE_ERROR_LAST 33 /* Copy last error nr */ /* Add error numbers before EE_ERROR_LAST and change it accordingly. */ /* exit codes for all MySQL programs */ === modified file 'mysys/errors.c' --- a/mysys/errors.c 2009-10-26 11:35:42 +0000 +++ b/mysys/errors.c 2009-11-07 10:34:19 +0000 @@ -51,6 +51,7 @@ const char * NEAR globerrs[GLOBERRS]= "File '%s' not found (Errcode: %d)", "File '%s' (fileno: %d) was not closed", "Can't change mode for file '%s' to 0x%lx (Error: %d)", + "Can't do seek on file '%s' (Errcode: %d)", "Warning: Can't copy ownership for file '%s' (Error: %d)" }; @@ -93,6 +94,7 @@ void init_glob_errs() EE(EE_FILENOTFOUND) = "File '%s' not found (Errcode: %d)"; EE(EE_FILE_NOT_CLOSED) = "File '%s' (fileno: %d) was not closed"; EE(EE_CANT_CHMOD) = "Can't change mode for file '%s' to 0x%lx (Error: %d)"; + EE(EE_CANT_SEEK) = "Can't do seek on file '%s' (Errcode: %d)"; EE(EE_CANT_COPY_OWNERSHIP)= "Warning: Can't copy ownership for file '%s' (Error: %d)"; } #endif === modified file 'mysys/my_seek.c' --- a/mysys/my_seek.c 2007-12-18 01:21:32 +0000 +++ b/mysys/my_seek.c 2009-11-07 10:34:19 +0000 @@ -14,6 +14,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "mysys_priv.h" +#include "mysys_err.h" /* Seek to a position in a file. @@ -42,8 +43,7 @@ actual error. */ -my_off_t my_seek(File fd, my_off_t pos, int whence, - myf MyFlags __attribute__((unused))) +my_off_t my_seek(File fd, my_off_t pos, int whence, myf MyFlags) { reg1 os_off_t newpos= -1; DBUG_ENTER("my_seek"); @@ -68,7 +68,9 @@ my_off_t my_seek(File fd, my_off_t pos, newpos= lseek(fd, pos, whence); if (newpos == (os_off_t) -1) { - my_errno=errno; + my_errno= errno; + if (MyFlags & MY_WME) + my_error(EE_CANT_SEEK, MYF(0), my_filename(fd), my_errno); DBUG_PRINT("error",("lseek: %lu errno: %d", (ulong) newpos,errno)); DBUG_RETURN(MY_FILEPOS_ERROR); } @@ -83,7 +85,7 @@ my_off_t my_seek(File fd, my_off_t pos, /* Tell current position of file */ /* ARGSUSED */ -my_off_t my_tell(File fd, myf MyFlags __attribute__((unused))) +my_off_t my_tell(File fd, myf MyFlags) { os_off_t pos; DBUG_ENTER("my_tell"); @@ -95,7 +97,11 @@ my_off_t my_tell(File fd, myf MyFlags __ pos=lseek(fd, 0L, MY_SEEK_CUR); #endif if (pos == (os_off_t) -1) - my_errno=errno; + { + my_errno= errno; + if (MyFlags & MY_WME) + my_error(EE_CANT_SEEK, MYF(0), my_filename(fd), my_errno); + } DBUG_PRINT("exit",("pos: %lu", (ulong) pos)); DBUG_RETURN((my_off_t) pos); } /* my_tell */ === modified file 'sql/sql_insert.cc' --- a/sql/sql_insert.cc 2009-10-15 21:38:29 +0000 +++ b/sql/sql_insert.cc 2009-11-07 10:34:19 +0000 @@ -3437,10 +3437,12 @@ static TABLE *create_table_from_items(TH Create_field *cr_field; Field *field, *def_field; if (item->type() == Item::FUNC_ITEM) + { if (item->result_type() != STRING_RESULT) field= item->tmp_table_field(&tmp_table); else field= item->tmp_table_field_from_field_type(&tmp_table, 0); + } else field= create_tmp_field(thd, &tmp_table, item, item->type(), (Item ***) 0, &tmp_field, &def_field, 0, 0, 0, 0, === modified file 'storage/maria/ha_maria.cc' --- a/storage/maria/ha_maria.cc 2009-10-26 11:35:42 +0000 +++ b/storage/maria/ha_maria.cc 2009-11-07 10:34:19 +0000 @@ -3341,7 +3341,7 @@ mysql_declare_plugin(maria) MYSQL_STORAGE_ENGINE_PLUGIN, &maria_storage_engine, "MARIA", - "MySQL AB", + "Monty Program Ab", "Crash-safe tables with MyISAM heritage", PLUGIN_LICENSE_GPL, ha_maria_init, /* Plugin Init */