diff options
author | unknown <monty@mashka.mysql.fi> | 2003-08-15 09:54:19 +0300 |
---|---|---|
committer | unknown <monty@mashka.mysql.fi> | 2003-08-15 09:54:19 +0300 |
commit | ccd828900b1d7cbb4e68562b06e1d8d7455eea5e (patch) | |
tree | 8af6b315e91238a5e5102bbf069129cfc58554b0 | |
parent | 5c9e0cdc5309a7f16aa57a9a99e11f0c7740e7ec (diff) | |
download | mariadb-git-ccd828900b1d7cbb4e68562b06e1d8d7455eea5e.tar.gz |
Cleanups to recent patches
Fix packet error when using wrong GRANT command
include/config-win.h:
Changed back to test for HAVE_SETFILEPOINTER instead of operating system
mysql-test/r/grant.result:
Extra test to catch wrong packet bug
mysql-test/t/grant.test:
Extra test to catch wrong packet bug
mysys/my_chsize.c:
Cleanup
sql/opt_range.cc:
Fix to recent BETWEEN patch
sql/sql_acl.cc:
Fix packet error when using wrong GRANT command
sql/sql_select.cc:
Cleanups
Added not critical out-of-memory check
-rw-r--r-- | include/config-win.h | 1 | ||||
-rw-r--r-- | mysql-test/r/grant.result | 3 | ||||
-rw-r--r-- | mysql-test/t/grant.test | 5 | ||||
-rw-r--r-- | mysys/my_chsize.c | 127 | ||||
-rw-r--r-- | sql/opt_range.cc | 3 | ||||
-rw-r--r-- | sql/sql_acl.cc | 2 | ||||
-rw-r--r-- | sql/sql_select.cc | 10 |
7 files changed, 76 insertions, 75 deletions
diff --git a/include/config-win.h b/include/config-win.h index 69020636893..9f903b3bcd2 100644 --- a/include/config-win.h +++ b/include/config-win.h @@ -276,6 +276,7 @@ inline double ulonglong2double(ulonglong value) #define HAVE_ISAM /* We want to have support for ISAM in 4.0 */ #define HAVE_QUERY_CACHE #define SPRINTF_RETURNS_INT +#define HAVE_SETFILEPOINTER #ifdef NOT_USED #define HAVE_SNPRINTF /* Gave link error */ diff --git a/mysql-test/r/grant.result b/mysql-test/r/grant.result index fccd3715af7..4ce22e84dd5 100644 --- a/mysql-test/r/grant.result +++ b/mysql-test/r/grant.result @@ -108,3 +108,6 @@ flush privileges; drop table t1; GRANT FILE on mysqltest.* to mysqltest_1@localhost; Wrong usage of DB GRANT and GLOBAL PRIVILEGES +select 1; +1 +1 diff --git a/mysql-test/t/grant.test b/mysql-test/t/grant.test index 5b20354336c..4433c9cbffc 100644 --- a/mysql-test/t/grant.test +++ b/mysql-test/t/grant.test @@ -72,5 +72,10 @@ delete from mysql.tables_priv where user='mysqltest_1'; delete from mysql.columns_priv where user='mysqltest_1'; flush privileges; drop table t1; + +# +# Test some error conditions +# --error 1221 GRANT FILE on mysqltest.* to mysqltest_1@localhost; +select 1; -- To test that the previous command didn't cause problems diff --git a/mysys/my_chsize.c b/mysys/my_chsize.c index e8c3c056029..11187cf4522 100644 --- a/mysys/my_chsize.c +++ b/mysys/my_chsize.c @@ -30,7 +30,7 @@ MyFlags Flags DESCRIPTION - my_chsize() truncates file if shorter, else fill with the filler character + my_chsize() truncates file if shorter else fill with the filler character RETURN VALUE 0 Ok @@ -38,89 +38,74 @@ */ int my_chsize(File fd, my_off_t newlength, int filler, myf MyFlags) { + my_off_t oldsize; + char buff[IO_SIZE]; DBUG_ENTER("my_chsize"); DBUG_PRINT("my",("fd: %d length: %lu MyFlags: %d",fd,(ulong) newlength, MyFlags)); - /* if file is shorter, expand with null, else fill unused part with null */ - { - my_off_t oldsize; - char buff[IO_SIZE]; - oldsize = my_seek(fd, 0L, MY_SEEK_END, MYF(MY_WME+MY_FAE)); - DBUG_PRINT("info",("old_size: %ld", (ulong) oldsize)); + oldsize = my_seek(fd, 0L, MY_SEEK_END, MYF(MY_WME+MY_FAE)); + DBUG_PRINT("info",("old_size: %ld", (ulong) oldsize)); -#ifdef __WIN__ - if (oldsize > newlength) - { - LARGE_INTEGER new_length; - HANDLE win_file; - win_file= (HANDLE)_get_osfhandle(fd); - new_length.QuadPart = newlength; - if (SetFilePointerEx(win_file,new_length,NULL,FILE_BEGIN)) - { - if (SetEndOfFile(win_file)) - DBUG_RETURN(0); - } - DBUG_PRINT("error",("errno: %d",errno)); - my_errno=errno; - if (MyFlags & MY_WME) - my_error(EE_CANT_CHSIZE,MYF(ME_BELL+ME_WAITTANG),errno); - DBUG_RETURN(1); - } -#elif defined(HAVE_CHSIZE) - if (oldsize > newlength || filler == 0) + if (oldsize > newlength) +#if defined(HAVE_SETFILEPOINTER) + /* This is for the moment only true on windows */ + { + LARGE_INTEGER new_length; + HANDLE win_file= (HANDLE) _get_osfhandle(fd); + new_length.QuadPart = newlength; + if (SetFilePointerEx(win_file,new_length,NULL,FILE_BEGIN)) { - if (chsize(fd,(off_t) newlength)) - { - DBUG_PRINT("error",("errno: %d",errno)); - my_errno=errno; - if (MyFlags & MY_WME) - my_error(EE_CANT_CHSIZE,MYF(ME_BELL+ME_WAITTANG),errno); - DBUG_RETURN(1); - } - else - { - if (filler == 0) - DBUG_RETURN(0); - } + if (SetEndOfFile(win_file)) + DBUG_RETURN(0); } + my_errno= errno; + goto err; + } #elif defined(HAVE_FTRUNCATE) - if (oldsize > newlength) + { + if (ftruncate(fd, (off_t) newlength)) { - if (ftruncate(fd, (off_t) newlength)) - { - my_errno=errno; - DBUG_PRINT("error",("errno: %d",errno)); - if (MyFlags & MY_WME) - my_error(EE_CANT_CHSIZE, MYF(ME_BELL+ME_WAITTANG), errno); - DBUG_RETURN(1); - } - DBUG_RETURN(0); - } -#else - if (oldsize > newlength) - { /* Fill diff with null */ - VOID(my_seek(fd, newlength, MY_SEEK_SET, MYF(MY_WME+MY_FAE))); - swap(my_off_t, newlength, oldsize); + my_errno= errno; + goto err; } -#endif - /* Full file with 0 until it's as big as requested */ - bfill(buff, IO_SIZE, filler); - while (newlength-oldsize > IO_SIZE) + DBUG_RETURN(0); + } +#elif defined(HAVE_CHSIZE) + { + if (chsize(fd, (off_t) newlength)) { - if (my_write(fd,(byte*) buff,IO_SIZE,MYF(MY_NABP))) - goto err; - oldsize+= IO_SIZE; - } - if (my_write(fd,(byte*) buff,(uint) (newlength-oldsize),MYF(MY_NABP))) + my_errno=errno; goto err; + } DBUG_RETURN(0); - err: - if (MyFlags & MY_WME) - my_error(EE_CANT_CHSIZE,MYF(ME_BELL+ME_WAITTANG),my_errno); - DBUG_PRINT("error",("errno: %d",my_errno)); - DBUG_RETURN(1); } -} /* my_chsize */ +#else + { + /* + Fill space between requested length and true length with 'filler' + We should never come here on any modern machine + */ + VOID(my_seek(fd, newlength, MY_SEEK_SET, MYF(MY_WME+MY_FAE))); + swap(my_off_t, newlength, oldsize); + } +#endif + /* Full file with 'filler' until it's as big as requested */ + bfill(buff, IO_SIZE, filler); + while (newlength-oldsize > IO_SIZE) + { + if (my_write(fd,(byte*) buff,IO_SIZE,MYF(MY_NABP))) + goto err; + oldsize+= IO_SIZE; + } + if (my_write(fd,(byte*) buff,(uint) (newlength-oldsize),MYF(MY_NABP))) + goto err; + DBUG_RETURN(0); +err: + DBUG_PRINT("error", ("errno: %d", errno)); + if (MyFlags & MY_WME) + my_error(EE_CANT_CHSIZE, MYF(ME_BELL+ME_WAITTANG), my_errno); + DBUG_RETURN(1); +} /* my_chsize */ diff --git a/sql/opt_range.cc b/sql/opt_range.cc index c7bad3b18f3..349a5d0271c 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -798,7 +798,8 @@ static SEL_TREE *get_mm_tree(PARAM *param,COND *cond) table_map ref_tables=cond->used_tables(); if (cond->type() != Item::FUNC_ITEM) { // Should be a field - if (ref_tables & param->current_table) + if ((ref_tables & param->current_table) || + (ref_tables & ~(param->prev_tables | param->read_tables))) DBUG_RETURN(0); DBUG_RETURN(new SEL_TREE(SEL_TREE::MAYBE)); } diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index 6df778c997b..83cd2c7d2b4 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -2370,7 +2370,7 @@ int mysql_grant (THD *thd, const char *db, List <LEX_USER> &list, else { net_printf(&thd->net,ER_WRONG_USAGE,"DB GRANT","GLOBAL PRIVILEGES"); - result= -1; + result= 1; } } } diff --git a/sql/sql_select.cc b/sql/sql_select.cc index c4c2f890f5d..7922af04ea8 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -1490,11 +1490,15 @@ add_key_field(KEY_FIELD **key_fields,uint and_level, } } DBUG_ASSERT(num_values == 1); - // DBUG_ASSERT(eq_func); /* QQ: Can I uncomment this ASSERT ? */ + /* + For the moment eq_func is always true. This slot is reserved for future + extensions where we want to remembers other things than just eq comparisons + */ + DBUG_ASSERT(eq_func); /* Store possible eq field */ (*key_fields)->field=field; (*key_fields)->eq_func=eq_func; - (*key_fields)->val=*value; + (*key_fields)->val= *value; (*key_fields)->level=(*key_fields)->const_level=and_level; (*key_fields)->exists_optimize=exists_optimize; (*key_fields)++; @@ -1582,6 +1586,8 @@ add_key_fields(JOIN_TAB *stat,KEY_FIELD **key_fields,uint *and_level, if (cond_func->arguments()[0]->type() == Item::FIELD_ITEM) { Item *tmp=new Item_null; + if (!tmp) // Should never be true + return; add_key_field(key_fields,*and_level, ((Item_field*) (cond_func->arguments()[0]))->field, cond_func->functype() == Item_func::ISNULL_FUNC, |