summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <monty@mashka.mysql.fi>2003-08-15 09:54:19 +0300
committerunknown <monty@mashka.mysql.fi>2003-08-15 09:54:19 +0300
commitccd828900b1d7cbb4e68562b06e1d8d7455eea5e (patch)
tree8af6b315e91238a5e5102bbf069129cfc58554b0
parent5c9e0cdc5309a7f16aa57a9a99e11f0c7740e7ec (diff)
downloadmariadb-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.h1
-rw-r--r--mysql-test/r/grant.result3
-rw-r--r--mysql-test/t/grant.test5
-rw-r--r--mysys/my_chsize.c127
-rw-r--r--sql/opt_range.cc3
-rw-r--r--sql/sql_acl.cc2
-rw-r--r--sql/sql_select.cc10
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,