summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <Sinisa@sinisa.nasamreza.org>2003-02-21 16:23:44 +0200
committerunknown <Sinisa@sinisa.nasamreza.org>2003-02-21 16:23:44 +0200
commited47a1da5c7a83183400a331bd9734ed97ea7447 (patch)
tree2cec6c0e889323c9492ba9b186bc7f14017899a8 /sql
parent614bc5a186894916a879a4cdfe7e0fb04a7e963f (diff)
parent5b15b39c8f28db89425386911b97ed0bd49b395c (diff)
downloadmariadb-git-ed47a1da5c7a83183400a331bd9734ed97ea7447.tar.gz
Merge sinisa@work.mysql.com:/home/bk/mysql
into sinisa.nasamreza.org:/mnt/work/mysql
Diffstat (limited to 'sql')
-rw-r--r--sql/item_cmpfunc.h18
-rw-r--r--sql/sql_analyse.cc4
-rw-r--r--sql/sql_analyse.h11
-rw-r--r--sql/sql_class.cc2
4 files changed, 21 insertions, 14 deletions
diff --git a/sql/item_cmpfunc.h b/sql/item_cmpfunc.h
index 5105eb9279d..c33042e11ab 100644
--- a/sql/item_cmpfunc.h
+++ b/sql/item_cmpfunc.h
@@ -449,17 +449,19 @@ public:
void update_used_tables()
{
if (!args[0]->maybe_null)
- used_tables_cache=0; /* is always false */
- else
{
- args[0]->update_used_tables();
- used_tables_cache=args[0]->used_tables();
+ used_tables_cache= 0; /* is always false */
+ cached_value= (longlong) 0;
}
- if (!used_tables_cache)
+ else
{
- /* Remember if the value is always NULL or never NULL */
- args[0]->val();
- cached_value= args[0]->null_value ? (longlong) 1 : (longlong) 0;
+ args[0]->update_used_tables();
+ if (!(used_tables_cache=args[0]->used_tables()))
+ {
+ /* Remember if the value is always NULL or never NULL */
+ args[0]->val();
+ cached_value= args[0]->null_value ? (longlong) 1 : (longlong) 0;
+ }
}
}
optimize_type select_optimize() const { return OPTIMIZE_NULL; }
diff --git a/sql/sql_analyse.cc b/sql/sql_analyse.cc
index 457356d4253..6227b1251db 100644
--- a/sql/sql_analyse.cc
+++ b/sql/sql_analyse.cc
@@ -58,6 +58,7 @@ proc_analyse_init(THD *thd, ORDER *param, select_result *result,
if ((*param->item)->type() != Item::INT_ITEM ||
(*param->item)->val() < 0)
{
+ delete pc;
net_printf(&thd->net, ER_WRONG_PARAMETERS_TO_PROCEDURE, proc_name);
return 0;
}
@@ -65,6 +66,7 @@ proc_analyse_init(THD *thd, ORDER *param, select_result *result,
param = param->next;
if (param->next) // no third parameter possible
{
+ delete pc;
net_printf(&thd->net, ER_WRONG_PARAMCOUNT_TO_PROCEDURE, proc_name);
return 0;
}
@@ -72,6 +74,7 @@ proc_analyse_init(THD *thd, ORDER *param, select_result *result,
if ((*param->item)->type() != Item::INT_ITEM ||
(*param->item)->val() < 0)
{
+ delete pc;
net_printf(&thd->net, ER_WRONG_PARAMETERS_TO_PROCEDURE, proc_name);
return 0;
}
@@ -80,6 +83,7 @@ proc_analyse_init(THD *thd, ORDER *param, select_result *result,
else if ((*param->item)->type() != Item::INT_ITEM ||
(*param->item)->val() < 0)
{
+ delete pc;
net_printf(&thd->net, ER_WRONG_PARAMETERS_TO_PROCEDURE, proc_name);
return 0;
}
diff --git a/sql/sql_analyse.h b/sql/sql_analyse.h
index ce5c0af6a96..c826b69e53c 100644
--- a/sql/sql_analyse.h
+++ b/sql/sql_analyse.h
@@ -288,13 +288,14 @@ protected:
public:
uint max_tree_elements, max_treemem;
- analyse(select_result *res) :Procedure(res, PROC_NO_SORT), rows(0),
- output_str_length(0) {}
+ analyse(select_result *res) :Procedure(res, PROC_NO_SORT), f_info(0),
+ rows(0), output_str_length(0) {}
~analyse()
- {
- for (field_info **f=f_info; f != f_end; f++)
- delete (*f);
+ {
+ if (f_info)
+ for (field_info **f=f_info; f != f_end; f++)
+ delete (*f);
}
virtual void add() {}
virtual bool change_columns(List<Item> &fields);
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 319bc87ad8d..316c544ba78 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -156,7 +156,7 @@ THD::THD():user_time(0),fatal_error(0),last_insert_id_used(0),
*/
{
pthread_mutex_lock(&LOCK_thread_count);
- ulong tmp=(ulong) (rnd(&sql_rand) * ((ulong)~0L));
+ ulong tmp=(ulong) (rnd(&sql_rand) * ((ulong)0xffffffff));
randominit(&rand, tmp + (ulong) start_time,
tmp + (ulong) thread_id);
pthread_mutex_unlock(&LOCK_thread_count);