merge 5.3 -> 5.5
This commit is contained in:
commit
64d6d8334f
10
sql/item.cc
10
sql/item.cc
@ -9629,18 +9629,10 @@ table_map Item_ref::used_tables() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Item_ref::update_used_tables()
|
void Item_ref::update_used_tables()
|
||||||
{
|
{
|
||||||
if (!get_depended_from())
|
if (!get_depended_from())
|
||||||
(*ref)->update_used_tables();
|
(*ref)->update_used_tables();
|
||||||
maybe_null|= (*ref)->maybe_null;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Item_direct_view_ref::update_used_tables()
|
|
||||||
{
|
|
||||||
Item_ref::update_used_tables();
|
|
||||||
if (view->table && view->table->maybe_null)
|
|
||||||
maybe_null= TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
table_map Item_direct_view_ref::used_tables() const
|
table_map Item_direct_view_ref::used_tables() const
|
||||||
|
@ -2071,8 +2071,6 @@ public:
|
|||||||
void update_used_tables()
|
void update_used_tables()
|
||||||
{
|
{
|
||||||
update_table_bitmaps();
|
update_table_bitmaps();
|
||||||
if (field && field->table)
|
|
||||||
maybe_null|= field->maybe_null();
|
|
||||||
}
|
}
|
||||||
Item *get_tmp_table_item(THD *thd);
|
Item *get_tmp_table_item(THD *thd);
|
||||||
bool collect_item_field_processor(uchar * arg);
|
bool collect_item_field_processor(uchar * arg);
|
||||||
@ -3211,7 +3209,6 @@ public:
|
|||||||
void update_used_tables()
|
void update_used_tables()
|
||||||
{
|
{
|
||||||
orig_item->update_used_tables();
|
orig_item->update_used_tables();
|
||||||
maybe_null|= orig_item->maybe_null;
|
|
||||||
}
|
}
|
||||||
bool const_item() const { return orig_item->const_item(); }
|
bool const_item() const { return orig_item->const_item(); }
|
||||||
table_map not_null_tables() const { return orig_item->not_null_tables(); }
|
table_map not_null_tables() const { return orig_item->not_null_tables(); }
|
||||||
@ -3304,7 +3301,6 @@ public:
|
|||||||
Item *replace_equal_field(uchar *arg);
|
Item *replace_equal_field(uchar *arg);
|
||||||
table_map used_tables() const;
|
table_map used_tables() const;
|
||||||
table_map not_null_tables() const;
|
table_map not_null_tables() const;
|
||||||
void update_used_tables();
|
|
||||||
bool walk(Item_processor processor, bool walk_subquery, uchar *arg)
|
bool walk(Item_processor processor, bool walk_subquery, uchar *arg)
|
||||||
{
|
{
|
||||||
return (*ref)->walk(processor, walk_subquery, arg) ||
|
return (*ref)->walk(processor, walk_subquery, arg) ||
|
||||||
|
@ -1354,7 +1354,7 @@ int Arg_comparator::compare_e_row()
|
|||||||
|
|
||||||
void Item_func_truth::fix_length_and_dec()
|
void Item_func_truth::fix_length_and_dec()
|
||||||
{
|
{
|
||||||
set_persist_maybe_null(0);
|
maybe_null= 0;
|
||||||
null_value= 0;
|
null_value= 0;
|
||||||
decimals= 0;
|
decimals= 0;
|
||||||
max_length= 1;
|
max_length= 1;
|
||||||
@ -1866,8 +1866,7 @@ longlong Item_func_eq::val_int()
|
|||||||
void Item_func_equal::fix_length_and_dec()
|
void Item_func_equal::fix_length_and_dec()
|
||||||
{
|
{
|
||||||
Item_bool_func2::fix_length_and_dec();
|
Item_bool_func2::fix_length_and_dec();
|
||||||
set_persist_maybe_null(0);
|
maybe_null=null_value=0;
|
||||||
null_value= 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
longlong Item_func_equal::val_int()
|
longlong Item_func_equal::val_int()
|
||||||
@ -2006,7 +2005,7 @@ void Item_func_interval::fix_length_and_dec()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
set_persist_maybe_null(0);
|
maybe_null= 0;
|
||||||
max_length= 2;
|
max_length= 2;
|
||||||
used_tables_cache|= row->used_tables();
|
used_tables_cache|= row->used_tables();
|
||||||
not_null_tables_cache= row->not_null_tables();
|
not_null_tables_cache= row->not_null_tables();
|
||||||
@ -2702,7 +2701,7 @@ void
|
|||||||
Item_func_nullif::fix_length_and_dec()
|
Item_func_nullif::fix_length_and_dec()
|
||||||
{
|
{
|
||||||
Item_bool_func2::fix_length_and_dec();
|
Item_bool_func2::fix_length_and_dec();
|
||||||
set_persist_maybe_null(1);
|
maybe_null=1;
|
||||||
if (args[0]) // Only false if EOM
|
if (args[0]) // Only false if EOM
|
||||||
{
|
{
|
||||||
max_length=args[0]->max_length;
|
max_length=args[0]->max_length;
|
||||||
@ -4596,8 +4595,6 @@ void Item_cond::update_used_tables()
|
|||||||
item->update_used_tables();
|
item->update_used_tables();
|
||||||
used_tables_cache|= item->used_tables();
|
used_tables_cache|= item->used_tables();
|
||||||
const_item_cache&= item->const_item();
|
const_item_cache&= item->const_item();
|
||||||
if (!persistent_maybe_null && item->maybe_null)
|
|
||||||
maybe_null= 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4776,9 +4773,10 @@ longlong Item_is_not_null_test::val_int()
|
|||||||
*/
|
*/
|
||||||
void Item_is_not_null_test::update_used_tables()
|
void Item_is_not_null_test::update_used_tables()
|
||||||
{
|
{
|
||||||
args[0]->update_used_tables();
|
|
||||||
if (!args[0]->maybe_null)
|
if (!args[0]->maybe_null)
|
||||||
used_tables_cache= 0; /* is always true */
|
used_tables_cache= 0; /* is always true */
|
||||||
|
else
|
||||||
|
args[0]->update_used_tables();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -5059,7 +5057,7 @@ Item_func_regex::fix_fields(THD *thd, Item **ref)
|
|||||||
int comp_res= regcomp(TRUE);
|
int comp_res= regcomp(TRUE);
|
||||||
if (comp_res == -1)
|
if (comp_res == -1)
|
||||||
{ // Will always return NULL
|
{ // Will always return NULL
|
||||||
set_persist_maybe_null(1);
|
maybe_null=1;
|
||||||
fixed= 1;
|
fixed= 1;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -5069,7 +5067,7 @@ Item_func_regex::fix_fields(THD *thd, Item **ref)
|
|||||||
maybe_null= args[0]->maybe_null;
|
maybe_null= args[0]->maybe_null;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
set_persist_maybe_null(1);
|
maybe_null=1;
|
||||||
fixed= 1;
|
fixed= 1;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -5998,8 +5996,6 @@ void Item_equal::update_used_tables()
|
|||||||
used_tables_cache|= item->used_tables();
|
used_tables_cache|= item->used_tables();
|
||||||
/* see commentary at Item_equal::update_const() */
|
/* see commentary at Item_equal::update_const() */
|
||||||
const_item_cache&= item->const_item() && !item->is_outer_field();
|
const_item_cache&= item->const_item() && !item->is_outer_field();
|
||||||
if (!persistent_maybe_null && item->maybe_null)
|
|
||||||
maybe_null= 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -762,11 +762,6 @@ public:
|
|||||||
my_decimal *decimal_op(my_decimal *);
|
my_decimal *decimal_op(my_decimal *);
|
||||||
bool date_op(MYSQL_TIME *ltime,uint fuzzydate);
|
bool date_op(MYSQL_TIME *ltime,uint fuzzydate);
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
void update_used_tables()
|
|
||||||
{
|
|
||||||
Item_func_coalesce::update_used_tables();
|
|
||||||
maybe_null|= args[1]->maybe_null;
|
|
||||||
}
|
|
||||||
const char *func_name() const { return "ifnull"; }
|
const char *func_name() const { return "ifnull"; }
|
||||||
Field *tmp_table_field(TABLE *table);
|
Field *tmp_table_field(TABLE *table);
|
||||||
uint decimal_precision() const;
|
uint decimal_precision() const;
|
||||||
@ -786,11 +781,6 @@ public:
|
|||||||
String *str_op(String *);
|
String *str_op(String *);
|
||||||
bool fix_fields(THD *, Item **);
|
bool fix_fields(THD *, Item **);
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
void update_used_tables()
|
|
||||||
{
|
|
||||||
Item_func::update_used_tables();
|
|
||||||
maybe_null|= args[1]->maybe_null || args[2]->maybe_null;
|
|
||||||
}
|
|
||||||
uint decimal_precision() const;
|
uint decimal_precision() const;
|
||||||
const char *func_name() const { return "if"; }
|
const char *func_name() const { return "if"; }
|
||||||
bool eval_not_null_tables(uchar *opt_arg);
|
bool eval_not_null_tables(uchar *opt_arg);
|
||||||
@ -1256,12 +1246,6 @@ public:
|
|||||||
bool date_op(MYSQL_TIME *ltime, uint fuzzydate);
|
bool date_op(MYSQL_TIME *ltime, uint fuzzydate);
|
||||||
bool fix_fields(THD *thd, Item **ref);
|
bool fix_fields(THD *thd, Item **ref);
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
void update_used_tables()
|
|
||||||
{
|
|
||||||
Item_func::update_used_tables();
|
|
||||||
if (else_expr_num == -1 || args[else_expr_num]->maybe_null)
|
|
||||||
maybe_null= 1;
|
|
||||||
}
|
|
||||||
uint decimal_precision() const;
|
uint decimal_precision() const;
|
||||||
table_map not_null_tables() const { return 0; }
|
table_map not_null_tables() const { return 0; }
|
||||||
const char *func_name() const { return "case"; }
|
const char *func_name() const { return "case"; }
|
||||||
@ -1381,14 +1365,13 @@ public:
|
|||||||
enum Functype functype() const { return ISNULL_FUNC; }
|
enum Functype functype() const { return ISNULL_FUNC; }
|
||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{
|
{
|
||||||
decimals=0; max_length=1; set_persist_maybe_null(0);
|
decimals=0; max_length=1; maybe_null=0;
|
||||||
update_used_tables();
|
update_used_tables();
|
||||||
}
|
}
|
||||||
const char *func_name() const { return "isnull"; }
|
const char *func_name() const { return "isnull"; }
|
||||||
/* Optimize case of not_null_column IS NULL */
|
/* Optimize case of not_null_column IS NULL */
|
||||||
virtual void update_used_tables()
|
virtual void update_used_tables()
|
||||||
{
|
{
|
||||||
args[0]->update_used_tables();
|
|
||||||
if (!args[0]->maybe_null)
|
if (!args[0]->maybe_null)
|
||||||
{
|
{
|
||||||
used_tables_cache= 0; /* is always false */
|
used_tables_cache= 0; /* is always false */
|
||||||
@ -1396,6 +1379,7 @@ public:
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
args[0]->update_used_tables();
|
||||||
used_tables_cache= args[0]->used_tables();
|
used_tables_cache= args[0]->used_tables();
|
||||||
const_item_cache= args[0]->const_item();
|
const_item_cache= args[0]->const_item();
|
||||||
}
|
}
|
||||||
@ -1443,7 +1427,7 @@ public:
|
|||||||
enum Functype functype() const { return ISNOTNULL_FUNC; }
|
enum Functype functype() const { return ISNOTNULL_FUNC; }
|
||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{
|
{
|
||||||
decimals=0; max_length=1; set_persist_maybe_null(0);
|
decimals=0; max_length=1; maybe_null=0;
|
||||||
}
|
}
|
||||||
const char *func_name() const { return "isnotnull"; }
|
const char *func_name() const { return "isnotnull"; }
|
||||||
optimize_type select_optimize() const { return OPTIMIZE_NULL; }
|
optimize_type select_optimize() const { return OPTIMIZE_NULL; }
|
||||||
@ -1511,12 +1495,6 @@ public:
|
|||||||
void cleanup();
|
void cleanup();
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
bool fix_fields(THD *thd, Item **ref);
|
bool fix_fields(THD *thd, Item **ref);
|
||||||
void update_used_tables()
|
|
||||||
{
|
|
||||||
Item_bool_func::update_used_tables();
|
|
||||||
if (regex_is_const)
|
|
||||||
maybe_null= 1;
|
|
||||||
}
|
|
||||||
const char *func_name() const { return "regexp"; }
|
const char *func_name() const { return "regexp"; }
|
||||||
|
|
||||||
virtual inline void print(String *str, enum_query_type query_type)
|
virtual inline void print(String *str, enum_query_type query_type)
|
||||||
|
@ -112,7 +112,7 @@ void Item_func::set_arguments(List<Item> &list)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Item_func::Item_func(List<Item> &list)
|
Item_func::Item_func(List<Item> &list)
|
||||||
:allowed_arg_cols(1), persistent_maybe_null(0)
|
:allowed_arg_cols(1)
|
||||||
{
|
{
|
||||||
set_arguments(list);
|
set_arguments(list);
|
||||||
}
|
}
|
||||||
@ -120,7 +120,6 @@ Item_func::Item_func(List<Item> &list)
|
|||||||
Item_func::Item_func(THD *thd, Item_func *item)
|
Item_func::Item_func(THD *thd, Item_func *item)
|
||||||
:Item_result_field(thd, item),
|
:Item_result_field(thd, item),
|
||||||
allowed_arg_cols(item->allowed_arg_cols),
|
allowed_arg_cols(item->allowed_arg_cols),
|
||||||
persistent_maybe_null(0),
|
|
||||||
arg_count(item->arg_count),
|
arg_count(item->arg_count),
|
||||||
used_tables_cache(item->used_tables_cache),
|
used_tables_cache(item->used_tables_cache),
|
||||||
not_null_tables_cache(item->not_null_tables_cache),
|
not_null_tables_cache(item->not_null_tables_cache),
|
||||||
@ -448,8 +447,6 @@ void Item_func::update_used_tables()
|
|||||||
args[i]->update_used_tables();
|
args[i]->update_used_tables();
|
||||||
used_tables_cache|=args[i]->used_tables();
|
used_tables_cache|=args[i]->used_tables();
|
||||||
const_item_cache&=args[i]->const_item();
|
const_item_cache&=args[i]->const_item();
|
||||||
if (!persistent_maybe_null && args[i]->maybe_null)
|
|
||||||
maybe_null= 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1875,7 +1872,7 @@ void Item_func_div::fix_length_and_dec()
|
|||||||
case IMPOSSIBLE_RESULT:
|
case IMPOSSIBLE_RESULT:
|
||||||
DBUG_ASSERT(0);
|
DBUG_ASSERT(0);
|
||||||
}
|
}
|
||||||
set_persist_maybe_null(1); // devision by zero
|
maybe_null= 1; // devision by zero
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1959,7 +1956,7 @@ void Item_func_int_div::fix_length_and_dec()
|
|||||||
max_length=args[0]->max_length -
|
max_length=args[0]->max_length -
|
||||||
(argtype == DECIMAL_RESULT || argtype == INT_RESULT ?
|
(argtype == DECIMAL_RESULT || argtype == INT_RESULT ?
|
||||||
args[0]->decimals : 0);
|
args[0]->decimals : 0);
|
||||||
set_persist_maybe_null(1);
|
maybe_null=1;
|
||||||
unsigned_flag=args[0]->unsigned_flag | args[1]->unsigned_flag;
|
unsigned_flag=args[0]->unsigned_flag | args[1]->unsigned_flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2046,7 +2043,7 @@ void Item_func_mod::result_precision()
|
|||||||
void Item_func_mod::fix_length_and_dec()
|
void Item_func_mod::fix_length_and_dec()
|
||||||
{
|
{
|
||||||
Item_num_op::fix_length_and_dec();
|
Item_num_op::fix_length_and_dec();
|
||||||
set_persist_maybe_null(1);
|
maybe_null= 1;
|
||||||
unsigned_flag= args[0]->unsigned_flag;
|
unsigned_flag= args[0]->unsigned_flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3264,7 +3261,7 @@ longlong Item_func_field::val_int()
|
|||||||
|
|
||||||
void Item_func_field::fix_length_and_dec()
|
void Item_func_field::fix_length_and_dec()
|
||||||
{
|
{
|
||||||
set_persist_maybe_null(0); max_length=3;
|
maybe_null=0; max_length=3;
|
||||||
cmp_type= args[0]->result_type();
|
cmp_type= args[0]->result_type();
|
||||||
for (uint i=1; i < arg_count ; i++)
|
for (uint i=1; i < arg_count ; i++)
|
||||||
cmp_type= item_cmp_type(cmp_type, args[i]->result_type());
|
cmp_type= item_cmp_type(cmp_type, args[i]->result_type());
|
||||||
@ -5469,7 +5466,7 @@ void Item_func_get_user_var::fix_length_and_dec()
|
|||||||
{
|
{
|
||||||
THD *thd=current_thd;
|
THD *thd=current_thd;
|
||||||
int error;
|
int error;
|
||||||
set_persist_maybe_null(1);
|
maybe_null=1;
|
||||||
decimals=NOT_FIXED_DEC;
|
decimals=NOT_FIXED_DEC;
|
||||||
max_length=MAX_BLOB_WIDTH;
|
max_length=MAX_BLOB_WIDTH;
|
||||||
|
|
||||||
@ -5668,7 +5665,7 @@ void Item_func_get_system_var::update_null_value()
|
|||||||
void Item_func_get_system_var::fix_length_and_dec()
|
void Item_func_get_system_var::fix_length_and_dec()
|
||||||
{
|
{
|
||||||
char *cptr;
|
char *cptr;
|
||||||
set_persist_maybe_null(1);
|
maybe_null= TRUE;
|
||||||
max_length= 0;
|
max_length= 0;
|
||||||
|
|
||||||
if (var->check_type(var_type))
|
if (var->check_type(var_type))
|
||||||
@ -6236,7 +6233,7 @@ bool Item_func_match::fix_fields(THD *thd, Item **ref)
|
|||||||
|
|
||||||
status_var_increment(thd->status_var.feature_fulltext);
|
status_var_increment(thd->status_var.feature_fulltext);
|
||||||
|
|
||||||
set_persist_maybe_null(1);
|
maybe_null=1;
|
||||||
join_key=0;
|
join_key=0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -6577,7 +6574,7 @@ longlong Item_func_row_count::val_int()
|
|||||||
Item_func_sp::Item_func_sp(Name_resolution_context *context_arg, sp_name *name)
|
Item_func_sp::Item_func_sp(Name_resolution_context *context_arg, sp_name *name)
|
||||||
:Item_func(), context(context_arg), m_name(name), m_sp(NULL), sp_result_field(NULL)
|
:Item_func(), context(context_arg), m_name(name), m_sp(NULL), sp_result_field(NULL)
|
||||||
{
|
{
|
||||||
set_persist_maybe_null(1);
|
maybe_null= 1;
|
||||||
m_name->init_qname(current_thd);
|
m_name->init_qname(current_thd);
|
||||||
dummy_table= (TABLE*) sql_calloc(sizeof(TABLE)+ sizeof(TABLE_SHARE));
|
dummy_table= (TABLE*) sql_calloc(sizeof(TABLE)+ sizeof(TABLE_SHARE));
|
||||||
dummy_table->s= (TABLE_SHARE*) (dummy_table+1);
|
dummy_table->s= (TABLE_SHARE*) (dummy_table+1);
|
||||||
@ -6588,7 +6585,7 @@ Item_func_sp::Item_func_sp(Name_resolution_context *context_arg,
|
|||||||
sp_name *name, List<Item> &list)
|
sp_name *name, List<Item> &list)
|
||||||
:Item_func(list), context(context_arg), m_name(name), m_sp(NULL),sp_result_field(NULL)
|
:Item_func(list), context(context_arg), m_name(name), m_sp(NULL),sp_result_field(NULL)
|
||||||
{
|
{
|
||||||
set_persist_maybe_null(1);
|
maybe_null= 1;
|
||||||
m_name->init_qname(current_thd);
|
m_name->init_qname(current_thd);
|
||||||
dummy_table= (TABLE*) sql_calloc(sizeof(TABLE)+ sizeof(TABLE_SHARE));
|
dummy_table= (TABLE*) sql_calloc(sizeof(TABLE)+ sizeof(TABLE_SHARE));
|
||||||
dummy_table->s= (TABLE_SHARE*) (dummy_table+1);
|
dummy_table->s= (TABLE_SHARE*) (dummy_table+1);
|
||||||
@ -6742,7 +6739,7 @@ void Item_func_sp::fix_length_and_dec()
|
|||||||
decimals= sp_result_field->decimals();
|
decimals= sp_result_field->decimals();
|
||||||
max_length= sp_result_field->field_length;
|
max_length= sp_result_field->field_length;
|
||||||
collation.set(sp_result_field->charset());
|
collation.set(sp_result_field->charset());
|
||||||
set_persist_maybe_null(1);
|
maybe_null= 1;
|
||||||
unsigned_flag= test(sp_result_field->flags & UNSIGNED_FLAG);
|
unsigned_flag= test(sp_result_field->flags & UNSIGNED_FLAG);
|
||||||
|
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
|
@ -39,8 +39,6 @@ protected:
|
|||||||
0 means get this number from first argument
|
0 means get this number from first argument
|
||||||
*/
|
*/
|
||||||
uint allowed_arg_cols;
|
uint allowed_arg_cols;
|
||||||
/* maybe_null can't be changed by parameters or used table state */
|
|
||||||
bool persistent_maybe_null;
|
|
||||||
public:
|
public:
|
||||||
uint arg_count;
|
uint arg_count;
|
||||||
table_map used_tables_cache, not_null_tables_cache;
|
table_map used_tables_cache, not_null_tables_cache;
|
||||||
@ -66,13 +64,13 @@ public:
|
|||||||
enum Type type() const { return FUNC_ITEM; }
|
enum Type type() const { return FUNC_ITEM; }
|
||||||
virtual enum Functype functype() const { return UNKNOWN_FUNC; }
|
virtual enum Functype functype() const { return UNKNOWN_FUNC; }
|
||||||
Item_func(void):
|
Item_func(void):
|
||||||
allowed_arg_cols(1), persistent_maybe_null(0), arg_count(0)
|
allowed_arg_cols(1), arg_count(0)
|
||||||
{
|
{
|
||||||
with_sum_func= 0;
|
with_sum_func= 0;
|
||||||
with_field= 0;
|
with_field= 0;
|
||||||
}
|
}
|
||||||
Item_func(Item *a):
|
Item_func(Item *a):
|
||||||
allowed_arg_cols(1), persistent_maybe_null(0), arg_count(1)
|
allowed_arg_cols(1), arg_count(1)
|
||||||
{
|
{
|
||||||
args= tmp_arg;
|
args= tmp_arg;
|
||||||
args[0]= a;
|
args[0]= a;
|
||||||
@ -80,7 +78,7 @@ public:
|
|||||||
with_field= a->with_field;
|
with_field= a->with_field;
|
||||||
}
|
}
|
||||||
Item_func(Item *a,Item *b):
|
Item_func(Item *a,Item *b):
|
||||||
allowed_arg_cols(1), persistent_maybe_null(0), arg_count(2)
|
allowed_arg_cols(1), arg_count(2)
|
||||||
{
|
{
|
||||||
args= tmp_arg;
|
args= tmp_arg;
|
||||||
args[0]= a; args[1]= b;
|
args[0]= a; args[1]= b;
|
||||||
@ -88,7 +86,7 @@ public:
|
|||||||
with_field= a->with_field || b->with_field;
|
with_field= a->with_field || b->with_field;
|
||||||
}
|
}
|
||||||
Item_func(Item *a,Item *b,Item *c):
|
Item_func(Item *a,Item *b,Item *c):
|
||||||
allowed_arg_cols(1), persistent_maybe_null(0)
|
allowed_arg_cols(1)
|
||||||
{
|
{
|
||||||
arg_count= 0;
|
arg_count= 0;
|
||||||
if ((args= (Item**) sql_alloc(sizeof(Item*)*3)))
|
if ((args= (Item**) sql_alloc(sizeof(Item*)*3)))
|
||||||
@ -100,7 +98,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Item_func(Item *a,Item *b,Item *c,Item *d):
|
Item_func(Item *a,Item *b,Item *c,Item *d):
|
||||||
allowed_arg_cols(1), persistent_maybe_null(0)
|
allowed_arg_cols(1)
|
||||||
{
|
{
|
||||||
arg_count= 0;
|
arg_count= 0;
|
||||||
if ((args= (Item**) sql_alloc(sizeof(Item*)*4)))
|
if ((args= (Item**) sql_alloc(sizeof(Item*)*4)))
|
||||||
@ -114,7 +112,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Item_func(Item *a,Item *b,Item *c,Item *d,Item* e):
|
Item_func(Item *a,Item *b,Item *c,Item *d,Item* e):
|
||||||
allowed_arg_cols(1), persistent_maybe_null(0)
|
allowed_arg_cols(1)
|
||||||
{
|
{
|
||||||
arg_count= 5;
|
arg_count= 5;
|
||||||
if ((args= (Item**) sql_alloc(sizeof(Item*)*5)))
|
if ((args= (Item**) sql_alloc(sizeof(Item*)*5)))
|
||||||
@ -182,7 +180,7 @@ public:
|
|||||||
if (max_result_length >= MAX_BLOB_WIDTH)
|
if (max_result_length >= MAX_BLOB_WIDTH)
|
||||||
{
|
{
|
||||||
max_length= MAX_BLOB_WIDTH;
|
max_length= MAX_BLOB_WIDTH;
|
||||||
set_persist_maybe_null(1);
|
maybe_null= 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
max_length= (uint32) max_result_length;
|
max_length= (uint32) max_result_length;
|
||||||
@ -388,11 +386,6 @@ public:
|
|||||||
info.bool_function= &Item::restore_to_before_no_rows_in_result;
|
info.bool_function= &Item::restore_to_before_no_rows_in_result;
|
||||||
walk(&Item::call_bool_func_processor, FALSE, (uchar*) &info);
|
walk(&Item::call_bool_func_processor, FALSE, (uchar*) &info);
|
||||||
}
|
}
|
||||||
inline void set_persist_maybe_null(bool mb_null)
|
|
||||||
{
|
|
||||||
maybe_null= mb_null;
|
|
||||||
persistent_maybe_null= 1;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -675,7 +668,7 @@ public:
|
|||||||
}
|
}
|
||||||
double val_real();
|
double val_real();
|
||||||
enum_field_types field_type() const { return MYSQL_TYPE_DOUBLE; }
|
enum_field_types field_type() const { return MYSQL_TYPE_DOUBLE; }
|
||||||
void fix_length_and_dec() { set_persist_maybe_null(1); }
|
void fix_length_and_dec() { maybe_null= 1; }
|
||||||
const char *func_name() const { return "double_typecast"; }
|
const char *func_name() const { return "double_typecast"; }
|
||||||
virtual void print(String *str, enum_query_type query_type);
|
virtual void print(String *str, enum_query_type query_type);
|
||||||
};
|
};
|
||||||
@ -816,7 +809,7 @@ class Item_dec_func :public Item_real_func
|
|||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{
|
{
|
||||||
decimals=NOT_FIXED_DEC; max_length=float_length(decimals);
|
decimals=NOT_FIXED_DEC; max_length=float_length(decimals);
|
||||||
set_persist_maybe_null(1);
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1148,7 +1141,7 @@ public:
|
|||||||
Item_func_coercibility(Item *a) :Item_int_func(a) {}
|
Item_func_coercibility(Item *a) :Item_int_func(a) {}
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
const char *func_name() const { return "coercibility"; }
|
const char *func_name() const { return "coercibility"; }
|
||||||
void fix_length_and_dec() { max_length=10; set_persist_maybe_null(0); }
|
void fix_length_and_dec() { max_length=10; maybe_null= 0; }
|
||||||
table_map not_null_tables() const { return 0; }
|
table_map not_null_tables() const { return 0; }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1311,7 +1304,7 @@ public:
|
|||||||
{}
|
{}
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
const char *func_name() const { return "benchmark"; }
|
const char *func_name() const { return "benchmark"; }
|
||||||
void fix_length_and_dec() { max_length=1; set_persist_maybe_null(0); }
|
void fix_length_and_dec() { max_length=1; maybe_null=0; }
|
||||||
virtual void print(String *str, enum_query_type query_type);
|
virtual void print(String *str, enum_query_type query_type);
|
||||||
bool check_vcol_func_processor(uchar *int_arg)
|
bool check_vcol_func_processor(uchar *int_arg)
|
||||||
{
|
{
|
||||||
@ -1564,7 +1557,7 @@ public:
|
|||||||
double val_real() { DBUG_ASSERT(fixed == 1); null_value= 1; return 0.0; }
|
double val_real() { DBUG_ASSERT(fixed == 1); null_value= 1; return 0.0; }
|
||||||
longlong val_int() { DBUG_ASSERT(fixed == 1); null_value=1; return 0; }
|
longlong val_int() { DBUG_ASSERT(fixed == 1); null_value=1; return 0; }
|
||||||
enum Item_result result_type () const { return STRING_RESULT; }
|
enum Item_result result_type () const { return STRING_RESULT; }
|
||||||
void fix_length_and_dec() { set_persist_maybe_null(1); max_length=0; }
|
void fix_length_and_dec() { maybe_null=1; max_length=0; }
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* HAVE_DLOPEN */
|
#endif /* HAVE_DLOPEN */
|
||||||
@ -1585,7 +1578,7 @@ class Item_func_get_lock :public Item_int_func
|
|||||||
Item_func_get_lock(Item *a,Item *b) :Item_int_func(a,b) {}
|
Item_func_get_lock(Item *a,Item *b) :Item_int_func(a,b) {}
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
const char *func_name() const { return "get_lock"; }
|
const char *func_name() const { return "get_lock"; }
|
||||||
void fix_length_and_dec() { max_length=1; set_persist_maybe_null(1);}
|
void fix_length_and_dec() { max_length=1; maybe_null=1;}
|
||||||
bool check_vcol_func_processor(uchar *int_arg)
|
bool check_vcol_func_processor(uchar *int_arg)
|
||||||
{
|
{
|
||||||
return trace_unsupported_by_check_vcol_func_processor(func_name());
|
return trace_unsupported_by_check_vcol_func_processor(func_name());
|
||||||
@ -1599,7 +1592,7 @@ public:
|
|||||||
Item_func_release_lock(Item *a) :Item_int_func(a) {}
|
Item_func_release_lock(Item *a) :Item_int_func(a) {}
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
const char *func_name() const { return "release_lock"; }
|
const char *func_name() const { return "release_lock"; }
|
||||||
void fix_length_and_dec() { max_length=1; set_persist_maybe_null(1);}
|
void fix_length_and_dec() { max_length=1; maybe_null=1;}
|
||||||
bool check_vcol_func_processor(uchar *int_arg)
|
bool check_vcol_func_processor(uchar *int_arg)
|
||||||
{
|
{
|
||||||
return trace_unsupported_by_check_vcol_func_processor(func_name());
|
return trace_unsupported_by_check_vcol_func_processor(func_name());
|
||||||
@ -1616,7 +1609,7 @@ public:
|
|||||||
Item_master_pos_wait(Item *a,Item *b,Item *c) :Item_int_func(a,b,c) {}
|
Item_master_pos_wait(Item *a,Item *b,Item *c) :Item_int_func(a,b,c) {}
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
const char *func_name() const { return "master_pos_wait"; }
|
const char *func_name() const { return "master_pos_wait"; }
|
||||||
void fix_length_and_dec() { max_length=21; set_persist_maybe_null(1);}
|
void fix_length_and_dec() { max_length=21; maybe_null=1;}
|
||||||
bool check_vcol_func_processor(uchar *int_arg)
|
bool check_vcol_func_processor(uchar *int_arg)
|
||||||
{
|
{
|
||||||
return trace_unsupported_by_check_vcol_func_processor(func_name());
|
return trace_unsupported_by_check_vcol_func_processor(func_name());
|
||||||
@ -1834,8 +1827,7 @@ public:
|
|||||||
Item_func_inet_aton(Item *a) :Item_int_func(a) {}
|
Item_func_inet_aton(Item *a) :Item_int_func(a) {}
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
const char *func_name() const { return "inet_aton"; }
|
const char *func_name() const { return "inet_aton"; }
|
||||||
void fix_length_and_dec()
|
void fix_length_and_dec() { decimals= 0; max_length= 21; maybe_null= 1; unsigned_flag= 1;}
|
||||||
{ decimals= 0; max_length= 21; set_persist_maybe_null(1); unsigned_flag= 1; }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -1903,8 +1895,7 @@ public:
|
|||||||
Item_func_is_free_lock(Item *a) :Item_int_func(a) {}
|
Item_func_is_free_lock(Item *a) :Item_int_func(a) {}
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
const char *func_name() const { return "is_free_lock"; }
|
const char *func_name() const { return "is_free_lock"; }
|
||||||
void fix_length_and_dec()
|
void fix_length_and_dec() { decimals=0; max_length=1; maybe_null=1;}
|
||||||
{ decimals= 0; max_length= 1; set_persist_maybe_null(1); }
|
|
||||||
bool check_vcol_func_processor(uchar *int_arg)
|
bool check_vcol_func_processor(uchar *int_arg)
|
||||||
{
|
{
|
||||||
return trace_unsupported_by_check_vcol_func_processor(func_name());
|
return trace_unsupported_by_check_vcol_func_processor(func_name());
|
||||||
@ -1918,8 +1909,7 @@ public:
|
|||||||
Item_func_is_used_lock(Item *a) :Item_int_func(a) {}
|
Item_func_is_used_lock(Item *a) :Item_int_func(a) {}
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
const char *func_name() const { return "is_used_lock"; }
|
const char *func_name() const { return "is_used_lock"; }
|
||||||
void fix_length_and_dec()
|
void fix_length_and_dec() { decimals=0; max_length=10; maybe_null=1;}
|
||||||
{ decimals= 0; max_length= 10; set_persist_maybe_null(1);}
|
|
||||||
bool check_vcol_func_processor(uchar *int_arg)
|
bool check_vcol_func_processor(uchar *int_arg)
|
||||||
{
|
{
|
||||||
return trace_unsupported_by_check_vcol_func_processor(func_name());
|
return trace_unsupported_by_check_vcol_func_processor(func_name());
|
||||||
@ -1942,7 +1932,7 @@ public:
|
|||||||
Item_func_row_count() :Item_int_func() {}
|
Item_func_row_count() :Item_int_func() {}
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
const char *func_name() const { return "row_count"; }
|
const char *func_name() const { return "row_count"; }
|
||||||
void fix_length_and_dec() { decimals= 0; set_persist_maybe_null(0); }
|
void fix_length_and_dec() { decimals= 0; maybe_null=0; }
|
||||||
bool check_vcol_func_processor(uchar *int_arg)
|
bool check_vcol_func_processor(uchar *int_arg)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -2083,7 +2073,7 @@ public:
|
|||||||
Item_func_found_rows() :Item_int_func() {}
|
Item_func_found_rows() :Item_int_func() {}
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
const char *func_name() const { return "found_rows"; }
|
const char *func_name() const { return "found_rows"; }
|
||||||
void fix_length_and_dec() { decimals= 0; set_persist_maybe_null(0); }
|
void fix_length_and_dec() { decimals= 0; maybe_null=0; }
|
||||||
bool check_vcol_func_processor(uchar *int_arg)
|
bool check_vcol_func_processor(uchar *int_arg)
|
||||||
{
|
{
|
||||||
return trace_unsupported_by_check_vcol_func_processor(func_name());
|
return trace_unsupported_by_check_vcol_func_processor(func_name());
|
||||||
|
@ -53,7 +53,7 @@ void Item_geometry_func::fix_length_and_dec()
|
|||||||
collation.set(&my_charset_bin);
|
collation.set(&my_charset_bin);
|
||||||
decimals=0;
|
decimals=0;
|
||||||
max_length= (uint32) 4294967295U;
|
max_length= (uint32) 4294967295U;
|
||||||
set_persist_maybe_null(1);
|
maybe_null= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -147,7 +147,7 @@ void Item_func_as_wkt::fix_length_and_dec()
|
|||||||
{
|
{
|
||||||
collation.set(default_charset(), DERIVATION_COERCIBLE, MY_REPERTOIRE_ASCII);
|
collation.set(default_charset(), DERIVATION_COERCIBLE, MY_REPERTOIRE_ASCII);
|
||||||
max_length=MAX_BLOB_WIDTH;
|
max_length=MAX_BLOB_WIDTH;
|
||||||
set_persist_maybe_null(1);
|
maybe_null= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ public:
|
|||||||
{
|
{
|
||||||
// "GeometryCollection" is the longest
|
// "GeometryCollection" is the longest
|
||||||
fix_length_and_charset(20, default_charset());
|
fix_length_and_charset(20, default_charset());
|
||||||
set_persist_maybe_null(1);
|
maybe_null= 1;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -224,7 +224,7 @@ public:
|
|||||||
{
|
{
|
||||||
Item_func::print(str, query_type);
|
Item_func::print(str, query_type);
|
||||||
}
|
}
|
||||||
void fix_length_and_dec() { set_persist_maybe_null(1); }
|
void fix_length_and_dec() { maybe_null= 1; }
|
||||||
bool is_null() { (void) val_int(); return null_value; }
|
bool is_null() { (void) val_int(); return null_value; }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -251,7 +251,7 @@ public:
|
|||||||
Item_func::print(str, query_type);
|
Item_func::print(str, query_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
void fix_length_and_dec() { set_persist_maybe_null(1); }
|
void fix_length_and_dec() { maybe_null= 1; }
|
||||||
bool is_null() { (void) val_int(); return null_value; }
|
bool is_null() { (void) val_int(); return null_value; }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -342,7 +342,7 @@ public:
|
|||||||
longlong val_int();
|
longlong val_int();
|
||||||
optimize_type select_optimize() const { return OPTIMIZE_NONE; }
|
optimize_type select_optimize() const { return OPTIMIZE_NONE; }
|
||||||
const char *func_name() const { return "st_isempty"; }
|
const char *func_name() const { return "st_isempty"; }
|
||||||
void fix_length_and_dec() { set_persist_maybe_null(1); }
|
void fix_length_and_dec() { maybe_null= 1; }
|
||||||
};
|
};
|
||||||
|
|
||||||
class Item_func_issimple: public Item_bool_func
|
class Item_func_issimple: public Item_bool_func
|
||||||
@ -356,7 +356,7 @@ public:
|
|||||||
longlong val_int();
|
longlong val_int();
|
||||||
optimize_type select_optimize() const { return OPTIMIZE_NONE; }
|
optimize_type select_optimize() const { return OPTIMIZE_NONE; }
|
||||||
const char *func_name() const { return "st_issimple"; }
|
const char *func_name() const { return "st_issimple"; }
|
||||||
void fix_length_and_dec() { set_persist_maybe_null(1); }
|
void fix_length_and_dec() { maybe_null= 1; }
|
||||||
};
|
};
|
||||||
|
|
||||||
class Item_func_isclosed: public Item_bool_func
|
class Item_func_isclosed: public Item_bool_func
|
||||||
@ -366,7 +366,7 @@ public:
|
|||||||
longlong val_int();
|
longlong val_int();
|
||||||
optimize_type select_optimize() const { return OPTIMIZE_NONE; }
|
optimize_type select_optimize() const { return OPTIMIZE_NONE; }
|
||||||
const char *func_name() const { return "st_isclosed"; }
|
const char *func_name() const { return "st_isclosed"; }
|
||||||
void fix_length_and_dec() { set_persist_maybe_null(1); }
|
void fix_length_and_dec() { maybe_null= 1; }
|
||||||
};
|
};
|
||||||
|
|
||||||
class Item_func_dimension: public Item_int_func
|
class Item_func_dimension: public Item_int_func
|
||||||
@ -376,7 +376,7 @@ public:
|
|||||||
Item_func_dimension(Item *a): Item_int_func(a) {}
|
Item_func_dimension(Item *a): Item_int_func(a) {}
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
const char *func_name() const { return "st_dimension"; }
|
const char *func_name() const { return "st_dimension"; }
|
||||||
void fix_length_and_dec() { max_length= 10; set_persist_maybe_null(1); }
|
void fix_length_and_dec() { max_length= 10; maybe_null= 1; }
|
||||||
};
|
};
|
||||||
|
|
||||||
class Item_func_x: public Item_real_func
|
class Item_func_x: public Item_real_func
|
||||||
@ -389,7 +389,7 @@ public:
|
|||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{
|
{
|
||||||
Item_real_func::fix_length_and_dec();
|
Item_real_func::fix_length_and_dec();
|
||||||
set_persist_maybe_null(1);
|
maybe_null= 1;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -404,7 +404,7 @@ public:
|
|||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{
|
{
|
||||||
Item_real_func::fix_length_and_dec();
|
Item_real_func::fix_length_and_dec();
|
||||||
set_persist_maybe_null(1);
|
maybe_null= 1;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -416,7 +416,7 @@ public:
|
|||||||
Item_func_numgeometries(Item *a): Item_int_func(a) {}
|
Item_func_numgeometries(Item *a): Item_int_func(a) {}
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
const char *func_name() const { return "st_numgeometries"; }
|
const char *func_name() const { return "st_numgeometries"; }
|
||||||
void fix_length_and_dec() { max_length= 10; set_persist_maybe_null(1); }
|
void fix_length_and_dec() { max_length= 10; maybe_null= 1; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -427,7 +427,7 @@ public:
|
|||||||
Item_func_numinteriorring(Item *a): Item_int_func(a) {}
|
Item_func_numinteriorring(Item *a): Item_int_func(a) {}
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
const char *func_name() const { return "st_numinteriorrings"; }
|
const char *func_name() const { return "st_numinteriorrings"; }
|
||||||
void fix_length_and_dec() { max_length= 10; set_persist_maybe_null(1); }
|
void fix_length_and_dec() { max_length= 10; maybe_null= 1; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -438,7 +438,7 @@ public:
|
|||||||
Item_func_numpoints(Item *a): Item_int_func(a) {}
|
Item_func_numpoints(Item *a): Item_int_func(a) {}
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
const char *func_name() const { return "st_numpoints"; }
|
const char *func_name() const { return "st_numpoints"; }
|
||||||
void fix_length_and_dec() { max_length= 10; set_persist_maybe_null(1); }
|
void fix_length_and_dec() { max_length= 10; maybe_null= 1; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -452,7 +452,7 @@ public:
|
|||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{
|
{
|
||||||
Item_real_func::fix_length_and_dec();
|
Item_real_func::fix_length_and_dec();
|
||||||
set_persist_maybe_null(1);
|
maybe_null= 1;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -467,7 +467,7 @@ public:
|
|||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{
|
{
|
||||||
Item_real_func::fix_length_and_dec();
|
Item_real_func::fix_length_and_dec();
|
||||||
set_persist_maybe_null(1);
|
maybe_null= 1;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -479,7 +479,7 @@ public:
|
|||||||
Item_func_srid(Item *a): Item_int_func(a) {}
|
Item_func_srid(Item *a): Item_int_func(a) {}
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
const char *func_name() const { return "srid"; }
|
const char *func_name() const { return "srid"; }
|
||||||
void fix_length_and_dec() { max_length= 10; set_persist_maybe_null(1); }
|
void fix_length_and_dec() { max_length= 10; maybe_null= 1; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -146,13 +146,11 @@ void Item_row::update_used_tables()
|
|||||||
{
|
{
|
||||||
used_tables_cache= 0;
|
used_tables_cache= 0;
|
||||||
const_item_cache= 1;
|
const_item_cache= 1;
|
||||||
maybe_null= 0;
|
|
||||||
for (uint i= 0; i < arg_count; i++)
|
for (uint i= 0; i < arg_count; i++)
|
||||||
{
|
{
|
||||||
items[i]->update_used_tables();
|
items[i]->update_used_tables();
|
||||||
used_tables_cache|= items[i]->used_tables();
|
used_tables_cache|= items[i]->used_tables();
|
||||||
const_item_cache&= items[i]->const_item();
|
const_item_cache&= items[i]->const_item();
|
||||||
maybe_null|= items[i]->maybe_null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -343,7 +343,7 @@ String *Item_func_sha2::val_str_ascii(String *str)
|
|||||||
|
|
||||||
void Item_func_sha2::fix_length_and_dec()
|
void Item_func_sha2::fix_length_and_dec()
|
||||||
{
|
{
|
||||||
set_persist_maybe_null(1);
|
maybe_null= 1;
|
||||||
max_length = 0;
|
max_length = 0;
|
||||||
|
|
||||||
#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY)
|
#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY)
|
||||||
@ -469,7 +469,7 @@ String *Item_func_aes_decrypt::val_str(String *str)
|
|||||||
void Item_func_aes_decrypt::fix_length_and_dec()
|
void Item_func_aes_decrypt::fix_length_and_dec()
|
||||||
{
|
{
|
||||||
max_length=args[0]->max_length;
|
max_length=args[0]->max_length;
|
||||||
set_persist_maybe_null(1);
|
maybe_null= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2415,7 +2415,7 @@ void Item_func_elt::fix_length_and_dec()
|
|||||||
set_if_bigger(decimals,args[i]->decimals);
|
set_if_bigger(decimals,args[i]->decimals);
|
||||||
}
|
}
|
||||||
fix_char_length(char_length);
|
fix_char_length(char_length);
|
||||||
set_persist_maybe_null(1); // NULL if wrong first arg
|
maybe_null=1; // NULL if wrong first arg
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2610,7 +2610,7 @@ void Item_func_repeat::fix_length_and_dec()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
max_length= MAX_BLOB_WIDTH;
|
max_length= MAX_BLOB_WIDTH;
|
||||||
set_persist_maybe_null(1);
|
maybe_null= 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2689,7 +2689,7 @@ void Item_func_rpad::fix_length_and_dec()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
max_length= MAX_BLOB_WIDTH;
|
max_length= MAX_BLOB_WIDTH;
|
||||||
set_persist_maybe_null(1);
|
maybe_null= 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2795,7 +2795,7 @@ void Item_func_lpad::fix_length_and_dec()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
max_length= MAX_BLOB_WIDTH;
|
max_length= MAX_BLOB_WIDTH;
|
||||||
set_persist_maybe_null(1);
|
maybe_null= 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3754,7 +3754,7 @@ bool Item_func_dyncol_create::fix_fields(THD *thd, Item **ref)
|
|||||||
|
|
||||||
void Item_func_dyncol_create::fix_length_and_dec()
|
void Item_func_dyncol_create::fix_length_and_dec()
|
||||||
{
|
{
|
||||||
set_persist_maybe_null(1);
|
maybe_null= TRUE;
|
||||||
collation.set(&my_charset_bin);
|
collation.set(&my_charset_bin);
|
||||||
decimals= 0;
|
decimals= 0;
|
||||||
}
|
}
|
||||||
|
@ -357,7 +357,7 @@ public:
|
|||||||
String *val_str(String *);
|
String *val_str(String *);
|
||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{
|
{
|
||||||
set_persist_maybe_null(1);
|
maybe_null=1;
|
||||||
/* 9 = MAX ((8- (arg_len % 8)) + 1) */
|
/* 9 = MAX ((8- (arg_len % 8)) + 1) */
|
||||||
max_length = args[0]->max_length + 9;
|
max_length = args[0]->max_length + 9;
|
||||||
}
|
}
|
||||||
@ -373,7 +373,7 @@ public:
|
|||||||
String *val_str(String *);
|
String *val_str(String *);
|
||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{
|
{
|
||||||
set_persist_maybe_null(1);
|
maybe_null=1;
|
||||||
/* 9 = MAX ((8- (arg_len % 8)) + 1) */
|
/* 9 = MAX ((8- (arg_len % 8)) + 1) */
|
||||||
max_length= args[0]->max_length;
|
max_length= args[0]->max_length;
|
||||||
if (max_length >= 9U)
|
if (max_length >= 9U)
|
||||||
@ -401,7 +401,7 @@ public:
|
|||||||
constructor_helper();
|
constructor_helper();
|
||||||
}
|
}
|
||||||
String *val_str(String *);
|
String *val_str(String *);
|
||||||
void fix_length_and_dec() { set_persist_maybe_null(1); max_length = 13; }
|
void fix_length_and_dec() { maybe_null=1; max_length = 13; }
|
||||||
const char *func_name() const { return "encrypt"; }
|
const char *func_name() const { return "encrypt"; }
|
||||||
bool check_vcol_func_processor(uchar *int_arg)
|
bool check_vcol_func_processor(uchar *int_arg)
|
||||||
{
|
{
|
||||||
@ -471,7 +471,7 @@ public:
|
|||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{
|
{
|
||||||
max_length= MAX_FIELD_NAME * system_charset_info->mbmaxlen;
|
max_length= MAX_FIELD_NAME * system_charset_info->mbmaxlen;
|
||||||
set_persist_maybe_null(1);
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
const char *func_name() const { return "database"; }
|
const char *func_name() const { return "database"; }
|
||||||
const char *fully_qualified_func_name() const { return "database()"; }
|
const char *fully_qualified_func_name() const { return "database()"; }
|
||||||
@ -634,7 +634,7 @@ public:
|
|||||||
{
|
{
|
||||||
collation.set(default_charset());
|
collation.set(default_charset());
|
||||||
max_length=64;
|
max_length=64;
|
||||||
set_persist_maybe_null(1);
|
maybe_null= 1;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -661,7 +661,7 @@ public:
|
|||||||
Item_func_unhex(Item *a) :Item_str_func(a)
|
Item_func_unhex(Item *a) :Item_str_func(a)
|
||||||
{
|
{
|
||||||
/* there can be bad hex strings */
|
/* there can be bad hex strings */
|
||||||
set_persist_maybe_null(1);
|
maybe_null= 1;
|
||||||
}
|
}
|
||||||
const char *func_name() const { return "unhex"; }
|
const char *func_name() const { return "unhex"; }
|
||||||
String *val_str(String *);
|
String *val_str(String *);
|
||||||
@ -747,7 +747,7 @@ public:
|
|||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{
|
{
|
||||||
collation.set(&my_charset_bin, DERIVATION_COERCIBLE);
|
collation.set(&my_charset_bin, DERIVATION_COERCIBLE);
|
||||||
set_persist_maybe_null(1);
|
maybe_null=1;
|
||||||
max_length=MAX_BLOB_WIDTH;
|
max_length=MAX_BLOB_WIDTH;
|
||||||
}
|
}
|
||||||
bool check_vcol_func_processor(uchar *int_arg)
|
bool check_vcol_func_processor(uchar *int_arg)
|
||||||
@ -780,7 +780,7 @@ public:
|
|||||||
{
|
{
|
||||||
decimals= 0;
|
decimals= 0;
|
||||||
fix_length_and_charset(3 * 8 + 7, default_charset());
|
fix_length_and_charset(3 * 8 + 7, default_charset());
|
||||||
set_persist_maybe_null(1);
|
maybe_null= 1;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -907,7 +907,7 @@ public:
|
|||||||
{
|
{
|
||||||
collation.set(system_charset_info);
|
collation.set(system_charset_info);
|
||||||
max_length= 64 * collation.collation->mbmaxlen; // should be enough
|
max_length= 64 * collation.collation->mbmaxlen; // should be enough
|
||||||
set_persist_maybe_null(0);
|
maybe_null= 0;
|
||||||
};
|
};
|
||||||
table_map not_null_tables() const { return 0; }
|
table_map not_null_tables() const { return 0; }
|
||||||
};
|
};
|
||||||
@ -922,7 +922,7 @@ public:
|
|||||||
{
|
{
|
||||||
collation.set(system_charset_info);
|
collation.set(system_charset_info);
|
||||||
max_length= 64 * collation.collation->mbmaxlen; // should be enough
|
max_length= 64 * collation.collation->mbmaxlen; // should be enough
|
||||||
set_persist_maybe_null(0);
|
maybe_null= 0;
|
||||||
};
|
};
|
||||||
table_map not_null_tables() const { return 0; }
|
table_map not_null_tables() const { return 0; }
|
||||||
};
|
};
|
||||||
@ -968,8 +968,7 @@ class Item_func_uncompress: public Item_str_func
|
|||||||
String buffer;
|
String buffer;
|
||||||
public:
|
public:
|
||||||
Item_func_uncompress(Item *a): Item_str_func(a){}
|
Item_func_uncompress(Item *a): Item_str_func(a){}
|
||||||
void fix_length_and_dec()
|
void fix_length_and_dec(){ maybe_null= 1; max_length= MAX_BLOB_WIDTH; }
|
||||||
{ set_persist_maybe_null(1); max_length= MAX_BLOB_WIDTH; }
|
|
||||||
const char *func_name() const{return "uncompress";}
|
const char *func_name() const{return "uncompress";}
|
||||||
String *val_str(String *) ZLIB_DEPENDED_FUNCTION
|
String *val_str(String *) ZLIB_DEPENDED_FUNCTION
|
||||||
};
|
};
|
||||||
@ -1038,7 +1037,7 @@ public:
|
|||||||
max_length= MAX_DYNAMIC_COLUMN_LENGTH;
|
max_length= MAX_DYNAMIC_COLUMN_LENGTH;
|
||||||
}
|
}
|
||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{ set_persist_maybe_null(1); }
|
{ maybe_null= 1; }
|
||||||
/* Mark that collation can change between calls */
|
/* Mark that collation can change between calls */
|
||||||
bool dynamic_result() { return 1; }
|
bool dynamic_result() { return 1; }
|
||||||
|
|
||||||
@ -1057,8 +1056,7 @@ class Item_func_dyncol_list: public Item_str_func
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Item_func_dyncol_list(Item *str) :Item_str_func(str) {};
|
Item_func_dyncol_list(Item *str) :Item_str_func(str) {};
|
||||||
void fix_length_and_dec()
|
void fix_length_and_dec() { maybe_null= 1; max_length= MAX_BLOB_WIDTH; };
|
||||||
{ set_persist_maybe_null(1); max_length= MAX_BLOB_WIDTH; };
|
|
||||||
const char *func_name() const{ return "column_list"; }
|
const char *func_name() const{ return "column_list"; }
|
||||||
String *val_str(String *);
|
String *val_str(String *);
|
||||||
};
|
};
|
||||||
|
@ -942,7 +942,7 @@ void Item_func_monthname::fix_length_and_dec()
|
|||||||
collation.set(cs, DERIVATION_COERCIBLE, repertoire);
|
collation.set(cs, DERIVATION_COERCIBLE, repertoire);
|
||||||
decimals=0;
|
decimals=0;
|
||||||
max_length= locale->max_month_name_length * collation.collation->mbmaxlen;
|
max_length= locale->max_month_name_length * collation.collation->mbmaxlen;
|
||||||
set_persist_maybe_null(1);
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1089,7 +1089,7 @@ void Item_func_dayname::fix_length_and_dec()
|
|||||||
collation.set(cs, DERIVATION_COERCIBLE, repertoire);
|
collation.set(cs, DERIVATION_COERCIBLE, repertoire);
|
||||||
decimals=0;
|
decimals=0;
|
||||||
max_length= locale->max_day_name_length * collation.collation->mbmaxlen;
|
max_length= locale->max_day_name_length * collation.collation->mbmaxlen;
|
||||||
set_persist_maybe_null(1);
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1451,7 +1451,7 @@ void Item_temporal_func::fix_length_and_dec()
|
|||||||
We set maybe_null to 1 as default as any bad argument with date or
|
We set maybe_null to 1 as default as any bad argument with date or
|
||||||
time can get us to return NULL.
|
time can get us to return NULL.
|
||||||
*/
|
*/
|
||||||
set_persist_maybe_null(1);
|
maybe_null= 1;
|
||||||
max_length= mysql_temporal_int_part_length(field_type());
|
max_length= mysql_temporal_int_part_length(field_type());
|
||||||
if (decimals)
|
if (decimals)
|
||||||
{
|
{
|
||||||
@ -1521,7 +1521,7 @@ void Item_func_curdate::fix_length_and_dec()
|
|||||||
ltime.hour= ltime.minute= ltime.second= 0;
|
ltime.hour= ltime.minute= ltime.second= 0;
|
||||||
ltime.time_type= MYSQL_TIMESTAMP_DATE;
|
ltime.time_type= MYSQL_TIMESTAMP_DATE;
|
||||||
Item_datefunc::fix_length_and_dec();
|
Item_datefunc::fix_length_and_dec();
|
||||||
set_persist_maybe_null(0);
|
maybe_null= false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1760,7 +1760,7 @@ void Item_func_date_format::fix_length_and_dec()
|
|||||||
collation.collation->mbmaxlen;
|
collation.collation->mbmaxlen;
|
||||||
set_if_smaller(max_length,MAX_BLOB_WIDTH);
|
set_if_smaller(max_length,MAX_BLOB_WIDTH);
|
||||||
}
|
}
|
||||||
set_persist_maybe_null(1); // If wrong date
|
maybe_null=1; // If wrong date
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2123,7 +2123,7 @@ void Item_extract::print(String *str, enum_query_type query_type)
|
|||||||
|
|
||||||
void Item_extract::fix_length_and_dec()
|
void Item_extract::fix_length_and_dec()
|
||||||
{
|
{
|
||||||
set_persist_maybe_null(1); // If wrong date
|
maybe_null=1; // If wrong date
|
||||||
switch (int_type) {
|
switch (int_type) {
|
||||||
case INTERVAL_YEAR: max_length=4; date_value=1; break;
|
case INTERVAL_YEAR: max_length=4; date_value=1; break;
|
||||||
case INTERVAL_YEAR_MONTH: max_length=6; date_value=1; break;
|
case INTERVAL_YEAR_MONTH: max_length=6; date_value=1; break;
|
||||||
|
@ -80,7 +80,7 @@ public:
|
|||||||
{
|
{
|
||||||
decimals=0;
|
decimals=0;
|
||||||
max_length=6*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=6*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
set_persist_maybe_null(1);
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
enum_monotonicity_info get_monotonicity_info() const;
|
enum_monotonicity_info get_monotonicity_info() const;
|
||||||
longlong val_int_endpoint(bool left_endp, bool *incl_endp);
|
longlong val_int_endpoint(bool left_endp, bool *incl_endp);
|
||||||
@ -103,7 +103,7 @@ public:
|
|||||||
{
|
{
|
||||||
decimals=0;
|
decimals=0;
|
||||||
max_length=6*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=6*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
set_persist_maybe_null(1);
|
maybe_null= 1;
|
||||||
}
|
}
|
||||||
enum_monotonicity_info get_monotonicity_info() const;
|
enum_monotonicity_info get_monotonicity_info() const;
|
||||||
longlong val_int_endpoint(bool left_endp, bool *incl_endp);
|
longlong val_int_endpoint(bool left_endp, bool *incl_endp);
|
||||||
@ -136,7 +136,7 @@ public:
|
|||||||
{
|
{
|
||||||
decimals=0;
|
decimals=0;
|
||||||
max_length=2*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=2*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
set_persist_maybe_null(1);
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
||||||
bool check_vcol_func_processor(uchar *int_arg) { return FALSE;}
|
bool check_vcol_func_processor(uchar *int_arg) { return FALSE;}
|
||||||
@ -168,7 +168,7 @@ public:
|
|||||||
{
|
{
|
||||||
decimals= 0;
|
decimals= 0;
|
||||||
fix_char_length(2);
|
fix_char_length(2);
|
||||||
set_persist_maybe_null(1);
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
||||||
bool check_vcol_func_processor(uchar *int_arg) { return FALSE;}
|
bool check_vcol_func_processor(uchar *int_arg) { return FALSE;}
|
||||||
@ -206,7 +206,7 @@ public:
|
|||||||
{
|
{
|
||||||
decimals= 0;
|
decimals= 0;
|
||||||
fix_char_length(3);
|
fix_char_length(3);
|
||||||
set_persist_maybe_null(1);
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
||||||
bool check_vcol_func_processor(uchar *int_arg) { return FALSE;}
|
bool check_vcol_func_processor(uchar *int_arg) { return FALSE;}
|
||||||
@ -227,7 +227,7 @@ public:
|
|||||||
{
|
{
|
||||||
decimals=0;
|
decimals=0;
|
||||||
max_length=2*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=2*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
set_persist_maybe_null(1);
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
||||||
bool check_vcol_func_processor(uchar *int_arg) { return FALSE;}
|
bool check_vcol_func_processor(uchar *int_arg) { return FALSE;}
|
||||||
@ -248,7 +248,7 @@ public:
|
|||||||
{
|
{
|
||||||
decimals=0;
|
decimals=0;
|
||||||
max_length=2*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=2*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
set_persist_maybe_null(1);
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
||||||
bool check_vcol_func_processor(uchar *int_arg) { return FALSE;}
|
bool check_vcol_func_processor(uchar *int_arg) { return FALSE;}
|
||||||
@ -269,7 +269,7 @@ public:
|
|||||||
{
|
{
|
||||||
decimals=0;
|
decimals=0;
|
||||||
max_length=1*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=1*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
set_persist_maybe_null(1);
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
||||||
bool check_vcol_func_processor(uchar *int_arg) { return FALSE;}
|
bool check_vcol_func_processor(uchar *int_arg) { return FALSE;}
|
||||||
@ -290,7 +290,7 @@ public:
|
|||||||
{
|
{
|
||||||
decimals=0;
|
decimals=0;
|
||||||
max_length=2*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=2*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
set_persist_maybe_null(1);
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
||||||
bool check_vcol_func_processor(uchar *int_arg) { return FALSE;}
|
bool check_vcol_func_processor(uchar *int_arg) { return FALSE;}
|
||||||
@ -311,7 +311,7 @@ public:
|
|||||||
{
|
{
|
||||||
decimals=0;
|
decimals=0;
|
||||||
max_length=2*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=2*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
set_persist_maybe_null(1);
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -325,7 +325,7 @@ public:
|
|||||||
{
|
{
|
||||||
decimals=0;
|
decimals=0;
|
||||||
max_length=6*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=6*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
set_persist_maybe_null(1);
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
||||||
bool check_vcol_func_processor(uchar *int_arg) { return FALSE;}
|
bool check_vcol_func_processor(uchar *int_arg) { return FALSE;}
|
||||||
@ -348,7 +348,7 @@ public:
|
|||||||
{
|
{
|
||||||
decimals=0;
|
decimals=0;
|
||||||
max_length=4*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=4*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
set_persist_maybe_null(1);
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
||||||
bool check_vcol_func_processor(uchar *int_arg) { return FALSE;}
|
bool check_vcol_func_processor(uchar *int_arg) { return FALSE;}
|
||||||
@ -382,7 +382,7 @@ public:
|
|||||||
{
|
{
|
||||||
decimals= 0;
|
decimals= 0;
|
||||||
fix_char_length(1);
|
fix_char_length(1);
|
||||||
set_persist_maybe_null(1);
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
||||||
bool check_vcol_func_processor(uchar *int_arg) { return FALSE;}
|
bool check_vcol_func_processor(uchar *int_arg) { return FALSE;}
|
||||||
@ -419,7 +419,7 @@ public:
|
|||||||
decimals= args[0]->temporal_precision(arg0_expected_type());
|
decimals= args[0]->temporal_precision(arg0_expected_type());
|
||||||
set_if_smaller(decimals, TIME_SECOND_PART_DIGITS);
|
set_if_smaller(decimals, TIME_SECOND_PART_DIGITS);
|
||||||
max_length=17 + (decimals ? decimals + 1 : 0);
|
max_length=17 + (decimals ? decimals + 1 : 0);
|
||||||
set_persist_maybe_null(1);
|
maybe_null= true;
|
||||||
}
|
}
|
||||||
void find_num_type()
|
void find_num_type()
|
||||||
{ cached_result_type= decimals ? DECIMAL_RESULT : INT_RESULT; }
|
{ cached_result_type= decimals ? DECIMAL_RESULT : INT_RESULT; }
|
||||||
@ -472,7 +472,7 @@ public:
|
|||||||
const char *func_name() const { return "time_to_sec"; }
|
const char *func_name() const { return "time_to_sec"; }
|
||||||
void fix_num_length_and_dec()
|
void fix_num_length_and_dec()
|
||||||
{
|
{
|
||||||
set_persist_maybe_null(1);
|
maybe_null= true;
|
||||||
Item_func_seconds_hybrid::fix_num_length_and_dec();
|
Item_func_seconds_hybrid::fix_num_length_and_dec();
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
||||||
@ -544,7 +544,7 @@ public:
|
|||||||
{
|
{
|
||||||
store_now_in_TIME(<ime);
|
store_now_in_TIME(<ime);
|
||||||
Item_timefunc::fix_length_and_dec();
|
Item_timefunc::fix_length_and_dec();
|
||||||
set_persist_maybe_null(0);
|
maybe_null= false;
|
||||||
}
|
}
|
||||||
bool get_date(MYSQL_TIME *res, ulonglong fuzzy_date);
|
bool get_date(MYSQL_TIME *res, ulonglong fuzzy_date);
|
||||||
/*
|
/*
|
||||||
@ -626,7 +626,7 @@ public:
|
|||||||
{
|
{
|
||||||
store_now_in_TIME(<ime);
|
store_now_in_TIME(<ime);
|
||||||
Item_temporal_func::fix_length_and_dec();
|
Item_temporal_func::fix_length_and_dec();
|
||||||
set_persist_maybe_null(0);
|
maybe_null= false;
|
||||||
}
|
}
|
||||||
bool get_date(MYSQL_TIME *res, ulonglong fuzzy_date);
|
bool get_date(MYSQL_TIME *res, ulonglong fuzzy_date);
|
||||||
virtual void store_now_in_TIME(MYSQL_TIME *now_time)=0;
|
virtual void store_now_in_TIME(MYSQL_TIME *now_time)=0;
|
||||||
@ -671,7 +671,7 @@ public:
|
|||||||
void update_used_tables()
|
void update_used_tables()
|
||||||
{
|
{
|
||||||
Item_func_now::update_used_tables();
|
Item_func_now::update_used_tables();
|
||||||
set_persist_maybe_null(0);
|
maybe_null= 0;
|
||||||
used_tables_cache|= RAND_TABLE_BIT;
|
used_tables_cache|= RAND_TABLE_BIT;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -972,7 +972,7 @@ public:
|
|||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{
|
{
|
||||||
decimals=0;
|
decimals=0;
|
||||||
set_persist_maybe_null(1);
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
||||||
bool check_vcol_func_processor(uchar *int_arg) { return FALSE;}
|
bool check_vcol_func_processor(uchar *int_arg) { return FALSE;}
|
||||||
@ -994,7 +994,7 @@ public:
|
|||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{
|
{
|
||||||
decimals=0;
|
decimals=0;
|
||||||
set_persist_maybe_null(1);
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
virtual void print(String *str, enum_query_type query_type);
|
virtual void print(String *str, enum_query_type query_type);
|
||||||
};
|
};
|
||||||
@ -1016,7 +1016,7 @@ public:
|
|||||||
const char *func_name() const { return "get_format"; }
|
const char *func_name() const { return "get_format"; }
|
||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{
|
{
|
||||||
set_persist_maybe_null(1);
|
maybe_null= 1;
|
||||||
decimals=0;
|
decimals=0;
|
||||||
fix_length_and_charset(17, default_charset());
|
fix_length_and_charset(17, default_charset());
|
||||||
}
|
}
|
||||||
|
@ -2604,7 +2604,6 @@ void Item_xml_str_func::fix_length_and_dec()
|
|||||||
status_var_increment(current_thd->status_var.feature_xml);
|
status_var_increment(current_thd->status_var.feature_xml);
|
||||||
|
|
||||||
nodeset_func= 0;
|
nodeset_func= 0;
|
||||||
set_persist_maybe_null(1);
|
|
||||||
|
|
||||||
if (agg_arg_charsets_for_comparison(collation, args, arg_count))
|
if (agg_arg_charsets_for_comparison(collation, args, arg_count))
|
||||||
return;
|
return;
|
||||||
|
@ -34,10 +34,14 @@ protected:
|
|||||||
public:
|
public:
|
||||||
Item_xml_str_func(Item *a, Item *b):
|
Item_xml_str_func(Item *a, Item *b):
|
||||||
Item_str_func(a,b)
|
Item_str_func(a,b)
|
||||||
{}
|
{
|
||||||
|
maybe_null= TRUE;
|
||||||
|
}
|
||||||
Item_xml_str_func(Item *a, Item *b, Item *c):
|
Item_xml_str_func(Item *a, Item *b, Item *c):
|
||||||
Item_str_func(a,b,c)
|
Item_str_func(a,b,c)
|
||||||
{}
|
{
|
||||||
|
maybe_null= TRUE;
|
||||||
|
}
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
String *parse_xml(String *raw_xml, String *parsed_xml_buf);
|
String *parse_xml(String *raw_xml, String *parsed_xml_buf);
|
||||||
bool check_vcol_func_processor(uchar *int_arg)
|
bool check_vcol_func_processor(uchar *int_arg)
|
||||||
|
@ -620,6 +620,15 @@ bool mysql_derived_prepare(THD *thd, LEX *lex, TABLE_LIST *derived)
|
|||||||
sl->context.outer_context= 0;
|
sl->context.outer_context= 0;
|
||||||
// Prepare underlying views/DT first.
|
// Prepare underlying views/DT first.
|
||||||
sl->handle_derived(lex, DT_PREPARE);
|
sl->handle_derived(lex, DT_PREPARE);
|
||||||
|
|
||||||
|
if (derived->outer_join)
|
||||||
|
{
|
||||||
|
/* Mark that table is part of OUTER JOIN and fields may be NULL */
|
||||||
|
for (TABLE_LIST *cursor= (TABLE_LIST*) sl->table_list.first;
|
||||||
|
cursor;
|
||||||
|
cursor= cursor->next_local)
|
||||||
|
cursor->outer_join|= JOIN_TYPE_OUTER;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unit->derived= derived;
|
unit->derived= derived;
|
||||||
@ -714,6 +723,10 @@ exit:
|
|||||||
/* Add new temporary table to list of open derived tables */
|
/* Add new temporary table to list of open derived tables */
|
||||||
table->next= thd->derived_tables;
|
table->next= thd->derived_tables;
|
||||||
thd->derived_tables= table;
|
thd->derived_tables= table;
|
||||||
|
|
||||||
|
/* If table is used by a left join, mark that any column may be null */
|
||||||
|
if (derived->outer_join)
|
||||||
|
table->maybe_null= 1;
|
||||||
}
|
}
|
||||||
if (arena)
|
if (arena)
|
||||||
thd->restore_active_arena(arena, &backup);
|
thd->restore_active_arena(arena, &backup);
|
||||||
|
@ -8457,7 +8457,7 @@ make_outerjoin_info(JOIN *join)
|
|||||||
TABLE_LIST *tbl= table->pos_in_table_list;
|
TABLE_LIST *tbl= table->pos_in_table_list;
|
||||||
TABLE_LIST *embedding= tbl->embedding;
|
TABLE_LIST *embedding= tbl->embedding;
|
||||||
|
|
||||||
if (tbl->outer_join)
|
if (tbl->outer_join & (JOIN_TYPE_LEFT | JOIN_TYPE_RIGHT))
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
Table tab is the only one inner table for outer join.
|
Table tab is the only one inner table for outer join.
|
||||||
@ -12904,7 +12904,8 @@ simplify_joins(JOIN *join, List<TABLE_LIST> *join_list, COND *conds, bool top,
|
|||||||
table->embedding->nested_join->not_null_tables|= not_null_tables;
|
table->embedding->nested_join->not_null_tables|= not_null_tables;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!table->outer_join || (used_tables & not_null_tables))
|
if (!(table->outer_join & (JOIN_TYPE_LEFT | JOIN_TYPE_RIGHT)) ||
|
||||||
|
(used_tables & not_null_tables))
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
For some of the inner tables there are conjunctive predicates
|
For some of the inner tables there are conjunctive predicates
|
||||||
|
@ -1458,6 +1458,7 @@ typedef struct st_schema_table
|
|||||||
|
|
||||||
#define JOIN_TYPE_LEFT 1
|
#define JOIN_TYPE_LEFT 1
|
||||||
#define JOIN_TYPE_RIGHT 2
|
#define JOIN_TYPE_RIGHT 2
|
||||||
|
#define JOIN_TYPE_OUTER 4 /* Marker that this is an outer join */
|
||||||
|
|
||||||
#define VIEW_SUID_INVOKER 0
|
#define VIEW_SUID_INVOKER 0
|
||||||
#define VIEW_SUID_DEFINER 1
|
#define VIEW_SUID_DEFINER 1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user